diff --git a/ .codecov.yml b/ .codecov.yml deleted file mode 100644 index 7052b8221c..0000000000 --- a/ .codecov.yml +++ /dev/null @@ -1,21 +0,0 @@ -comment: - require_changes: true - -coverage: - status: - project: - default: - target: 85% - threshold: 2% - patch: - default: - target: 0% - threshold: 100% - precision: 1 - range: "80...100" - -# Ignore all the file inside the example and -# end eventually also the autogenerate file -ignore: - - '**/example/' - - '**/*.g.dart' \ No newline at end of file diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml deleted file mode 100644 index bce2830617..0000000000 --- a/.github/FUNDING.yml +++ /dev/null @@ -1,2 +0,0 @@ -github: [imaNNeo] -custom: ["https://www.buymeacoffee.com/fl_chart"] diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md deleted file mode 100644 index db93fbde27..0000000000 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -name: Bug report -about: Create a report to help us improve -title: '' -labels: '' -assignees: '' - ---- - -** Don't make a duplicate issue. -You can search in issues to make sure there isn't any already opened issue with your concern. - -**Describe the bug** -A clear and concise description of what the bug is. - -**To Reproduce** -Provide us a completely reproducible code (contains the main function) in a `main.dart` file, it helps us to find the bug immediately. - -**Screenshots** -If applicable, add screenshots, or videoshots to help explain your problem. - -**Versions** - - which version of the Flutter are you using? - - which version of the FlChart are you using? diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md deleted file mode 100644 index 2c75f1130f..0000000000 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -name: Feature request -about: Suggest an idea for this project -title: '' -labels: '' -assignees: '' - ---- - -** Don't make a duplicate issue. -You can search in issues to make sure there isn't any already opened issue with your concern. - -**Is your feature request relasted 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. diff --git a/.github/dependabot.yml b/.github/dependabot.yml deleted file mode 100644 index 497b2418d8..0000000000 --- a/.github/dependabot.yml +++ /dev/null @@ -1,23 +0,0 @@ -# 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://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates - -version: 2 -updates: - - package-ecosystem: "github-actions" - directory: "/" - schedule: - interval: "daily" - assignees: - - "dependabot" - commit-message: - prefix: "chore: " - - package-ecosystem: "pub" - directory: "/" - schedule: - interval: "daily" - assignees: - - "dependabot" - commit-message: - prefix: "chore: " diff --git a/.github/workflows/codecov.yml b/.github/workflows/codecov.yml deleted file mode 100644 index 7a07f1f62f..0000000000 --- a/.github/workflows/codecov.yml +++ /dev/null @@ -1,23 +0,0 @@ -name: Code Coverage - -on: [ push, pull_request ] - -jobs: - upload: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - name: Setup Flutter - uses: subosito/flutter-action@v2 - with: - channel: "stable" - - name: Get packages - run: flutter pub get - - name: Generate coverage file - run: flutter test --coverage - - name: Upload coverage file - run: | - curl -Os https://uploader.codecov.io/latest/linux/codecov - chmod +x codecov - ./codecov - diff --git a/.github/workflows/gh-pages.yml b/.github/workflows/gh-pages.yml deleted file mode 100644 index eac7be64e1..0000000000 --- a/.github/workflows/gh-pages.yml +++ /dev/null @@ -1,24 +0,0 @@ -name: Gh-Pages - -on: - push: - branches: [ master ] - -jobs: - build: - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v4 - - name: Install Flutter - uses: subosito/flutter-action@v2 - - - name: Set fl_chart Version - run: | - VERSION=$(grep "version:" pubspec.yaml | awk '{ print $2 }') - echo "USING_FL_CHART_VERSION=$VERSION" >> $GITHUB_ENV - - - uses: bluefireteam/flutter-gh-pages@v8 - with: - workingDir: example - customArgs: --dart-define="USING_FL_CHART_VERSION=${{ env.USING_FL_CHART_VERSION }}" diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml deleted file mode 100644 index 6abe16ea13..0000000000 --- a/.github/workflows/publish.yml +++ /dev/null @@ -1,18 +0,0 @@ -name: Publish plugin - -on: - release: - types: [ published ] - -jobs: - publish: - - runs-on: ubuntu-latest - - steps: - - name: Checkout - uses: actions/checkout@v4 - - name: Publish - uses: k-paxian/dart-package-publisher@master - with: - credentialJson: ${{ secrets.CREDENTIAL_JSON }} \ No newline at end of file diff --git a/.github/workflows/verification.yml b/.github/workflows/verification.yml deleted file mode 100644 index d625afed65..0000000000 --- a/.github/workflows/verification.yml +++ /dev/null @@ -1,21 +0,0 @@ -name: Code Verification - -on: [ push, pull_request ] - -jobs: - verify: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - name: Setup Flutter - uses: subosito/flutter-action@v2 - with: - channel: "stable" - - name: Get packages - run: flutter pub get - - name: Check formatting - run: make checkFormat - - name: Analyze the source code - run: make analyze - - name: Run tests - run: make test \ No newline at end of file diff --git a/.gitignore b/.gitignore deleted file mode 100644 index ff7348f25c..0000000000 --- a/.gitignore +++ /dev/null @@ -1,20 +0,0 @@ -.DS_Store -.dart_tool/ -.idea/ -.packages -.pub/ - -build/ -ios/.generated/ -ios/Flutter/Generated.xcconfig -ios/Runner/GeneratedPluginRegistrant.* -pubspec.lock -.vscode/launch.json -example/android/.project -example/android/.settings/org.eclipse.buildship.core.prefs -example/android/app/.classpath -example/android/app/.project -example/android/app/.settings/org.eclipse.buildship.core.prefs -example/macos/Flutter/ephemeral/ -coverage/ -.fvm/ diff --git a/.last_build_id b/.last_build_id new file mode 100644 index 0000000000..09e43765bd --- /dev/null +++ b/.last_build_id @@ -0,0 +1 @@ +8cb47640209160fb07e3c4594c74edab \ No newline at end of file diff --git a/.metadata b/.metadata deleted file mode 100644 index 7d1d1dc3a1..0000000000 --- a/.metadata +++ /dev/null @@ -1,10 +0,0 @@ -# This file tracks properties of this Flutter project. -# Used by Flutter tool to assess capabilities and perform upgrades etc. -# -# This file should be version controlled and should not be manually edited. - -version: - revision: 7a4c33425ddd78c54aba07d86f3f9a4a0051769b - channel: beta - -project_type: package diff --git a/.pubignore b/.pubignore deleted file mode 100644 index 7442a34af7..0000000000 --- a/.pubignore +++ /dev/null @@ -1,2 +0,0 @@ -/docs/* -/repo_files/* \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index 294a6d9de4..0000000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "dart.lineLength": 80, - "editor.formatOnSave": true, - "editor.formatOnType": true, - "editor.suggest.snippetsPreventQuickSuggestions": false, - "editor.tabCompletion": "onlySnippets", - "editor.wordBasedSuggestions": false, - "files.insertFinalNewline": true, - "editor.defaultFormatter": "Dart-Code.dart-code" -} diff --git a/CHANGELOG.md b/CHANGELOG.md deleted file mode 100644 index db8203acb5..0000000000 --- a/CHANGELOG.md +++ /dev/null @@ -1,523 +0,0 @@ -## 0.65.0 -* **FEATURE** (by @Dartek12) Added gradient to [FlLine](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/base_chart.md#FlLine), #1197 -* **BUGFIX** (by @imaNNeo) Fix bar line shadow crash when we have only one (or zero) spot, #1466 -* **BUGFIX** (by @imaNNeo) Fix having negative `toY` (or positive `fromY`) in BarChart's `minY` and `maxY` calculations, #1470 -* **BUGFIX** (by @bobatsar) Fix bars drawn outside of diagram -* **FEATURE** (by @k0psutin) Add dashed border to BarChartRodData, #1144 -* **FEATURE** (by @imaNNeo) Allow to show single point line in LineChart, #1438 - -## 0.64.0 -* **BUGFIX** (by @Anas35) Fix Tooltip not displaying when value from BackgroundBarChartRodData is less than zero. #1345. -* **BUGFIX** (by @imaNNeo) Fix Negative BarChartRodStackItem are not drawn correctly bug, #1347 -* **BUGFIX** (by @imaNNeo) Fix bar_chart_helper minY calculation bug, #1388 -* **IMPROVEMENT** (by @imaNNeo) Consider fraction digits when formatting chart side titles, #1267 - -## 0.63.0 -* **BUGFIX** (by @imaNNeo) Fix PieChart crash on web-renderer html by ignoring `sectionsSpace` when `Path.combine()` does not work (it's flutter engine [issue](https://github.com/flutter/flutter/issues/44572)), #955 -* **BUGFIX** (by @imaNNeo) Fix ScatterChart long-press interaction bug (disappears when long-pressing on the chart), #1318 -* **FEATURE** (by @imaNNeo) Upgrade dart version to [3.0](https://dart.dev/resources/dart-3-migration) - -## 0.62.0 -* **BUGFIX** (by @JoshMart) Fix extra lines not painting when at chart min or max, #1255. -* **BUGFIX** (by @imaNNeo) Check if mounted before calling setState in _handleBuiltInTouch methods in bar, line and scatter charts, #1101 -* **FEATURE** (by @MagdyYacoub1): Added gradient color to [RangeAnnotations](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/base_chart.md#rangeannotations) by adding gradient attribute to [horizontalRangeAnnotations](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/base_chart.md#horizontalrangeannotation) and [VerticalRangeAnnotation](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/base_chart.md#verticalrangeannotation), #1195. -* **BUGFIX** (by @Motionz-Von)Fix windows build for example app -* **FEATURE** (by @Motionz-Von)BarChart groupSpace also takes effect when alignment is BarChartAlignment.end or BarChartAlignment.start. -* **FEATURE** (by @Motionz-Von) supports setting line StrokeCap on HorizontalLine/VerticalLine -* **BUGFIX** (by @nav-28) Fix radar chart tick and graph point not matching #1078 -* **IMPROVEMENT** (by @imaNNeo) Update LineChartSample5 to demonstrate click to toggle show/hide tooltip, #118 - -## 0.61.0 -* **IMPROVEMENT** (by @imaNNeo) Remove assertion to check to provide only one of `color` or `gradient` property in the [BarChartRodData](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/bar_chart.md#barchartroddata) and [BackgroundBarChartRodData](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/bar_chart.md#backgroundbarchartroddata), #1121. -* **IMPROVEMENT** (by @imaNNeo) Make `drawBehindEverything` property default to `true` in [AxisTitles](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/base_chart.md#axistitle) class, #1097. -* **BUGFIX** (by @imaNNeo) Show `0` instead of `-0` in some edge-cases in the default titles -* **FEATURE** (by @tamasapps): Add `tooltipHorizontalAlignment` and `tooltipHorizontalOffset` property in [LineTouchTooltipData], [BarTouchTooltipData], [ScatterTouchTooltipData]. -* **FEATURE** (by @dhiyaaulauliyaa) Add ability to force SideTitle to be placed inside its corresponding axis bounding box, #603. - -## 0.60.0 -* **IMPROVEMENT** (by @lsaudon) Replace flutter_lints by very_good_analysis -* **BREAKING** (by @lsaudon) Update dart sdk to 2.17.0 (flutter 3.0.0) -* **BUGFIX** (by @imaNNeo) Fix indicator out of range error in line chart, #1187 -* **FEATURE** (by @HTsuruo): Add `longPressDuration` optional property that allows to control the duration LongPress gesture occurs, #1114 #1127. -* **IMPROVEMENT** (by @imaNNeo) Add some screenshots in `pubspec.yaml` to support new [pub.dev](pub.dev) feature. Read more about it [here](https://dart.dev/tools/pub/pubspec#screenshots) and [here](https://medium.com/dartlang/screenshots-and-automated-publishing-for-pub-dev-9bceb19edf79). -* **IMPROVEMENT** (by @imaNNeo) Update the homepage url in `pubspec.yaml` (I just renamed my username) -* **FEATURE** (by @JoshMart) Add ability to draw extra horizontal lines on BarChart, #476 -* **FEATURE** (by @soraef) Add a `positionPercentageOffset` optional property to RadarChartTitle to allow individual title positioning -* **BUGFIX** (by @imaNNeo) Allow to draw empty radarChart (with all zero values), #1217 -* **IMPORTANT** **IRAN NEEDS YOU. SPREAD THE NEWS.** - - -## 0.55.2 -* **BUGFIX** (by @imaNNeo): Fix inner border of pieChart with single section, #1089 -* **IMPORTANT** **IRAN NEEDS HELP** - - - -As you might know, Islamic Republic of Iran is murdering people in silence right now in Iran -They shut the Internet down to do that. That’s why I cannot maintain this library for a while. -Now we need your help, please be our voice by spreading news in your media to support us -Search these hashtags: - -[#MahsaAmini](https://twitter.com/search?q=%23MahsaAmini&src=typeahead_click) -[مهسا_امینی](https://twitter.com/search?q=%23%D9%85%D9%87%D8%B3%D8%A7_%D8%A7%D9%85%DB%8C%D9%86%DB%8C&src=typeahead_click&f=top) -[OpIran](https://twitter.com/search?q=%23OpIran&src=typeahead_click&f=top) - -Also, [this article](https://www.bbc.com/news/world-middle-east-62984076) might help. - - -## 0.55.1 -* **BUGFIX** (by @ateich): Fix infinite loop in RadarChart when all values in RadarDataSet are equal, #882. -* **BUGFIX** (by @ateich): Fix uneven titles in RadarChart when using titlePositionPercentageOffset, #1074. -* **BUGFIX** (by @imaNNeo): Fix PieChart single section stroke issue, #1089 - -## 0.55.0 -* **FEATURE** (by @emelinepal): Add `tooltipBorder` property in [LineTouchTooltipData], [BarTouchTooltipData], [ScatterTouchTooltipData], #692. -* **BUGFIX** (by @imaNNeo): Fix tooltip issue on negative bar charts, #978. -* **IMPROVEMENT** (by @imaNNeo): Use Container to draw axis-based charts border. -* **FEATURE** (by @FlorianArnould) Add the ability to select the RadarChart shape (circle or polygon), #1047. -* **BUGFIX** (by @imaNNeo): Fix LineChart titles problem with single FlSpot, #1053. -* **FEATURE** (by @FlorianArnould) Add the ability to rotate the RadarChar titles, #883. -* **BREAKING** (by @FlorianArnould) [RadarChartData.getTitle](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/radar_chart.md#RadarChartData) have a new parameter `angle` and now returns a [RadarChartTitle](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/radar_chart.md#RadarChartTitle) instead of a simple `string`. (Read our [Migration Guide](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/migration_guides/0.55.0/MIGRATION_00_55_00.md) to learn more about it) - -## 0.51.0 -* **FEATURE** (by @imaNNeo): Add `SideTitleWidget` to help you use it in [SideTitles.getTitlesWidget]. It's a wrapper around your widget. It keeps your provided `child` widget close to the chart. It has `angle` and `space` properties to handle margin and rotation. There is a `axisSide` property that you should fill, it has provided to you in the MetaData object. Check the below sample: -```dart -getTitlesWidget: (double value, TitleMeta meta) { - return SideTitleWidget( - axisSide: meta.axisSide, - space: 8.0, - angle: 0.0, - child: const Text("This is your widget"), - ); -}, -``` -* **IMPROVEMENT** (by @imaNNeo): Fix default LineChart interval issue on small view sizes, #909. - -## 0.50.6 -* **IMPROVEMENT** Fix a backward compatibility issue with Flutter 3.0, #1016 - -## 0.50.5 -* **IMPROVEMENT** Fix test coverage problem again :/ - -## 0.50.4 -* **IMPROVEMENT** Fix test coverage problem - -## 0.50.3 -* **IMPROVEMENT** Fix order of drawing lineChart bar indicator problem, #198. -* **FEATURE** Add `isStrokeJoinRound` property in [LineChartBarData](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/line_chart.md#linechartbardata). -* **IMPROVEMENT** Upgrade to Flutter 3, #997. -* **FEATURE** Add `chartRendererKey` property to the [LineChart](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/line_chart.md), [BarChart](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/bar_chart.md), and [ScatterChart](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/scatter_chart.md). We pass it directly to our chart renderers that are responsible to render the chart itself (without anything around it like titles), #987. - -## 0.50.1 -* **BUGFIX** Allow to show axisTitle without sideTitles, #963 - -## 0.50.0 -**This release has some breaking changes. So please check out the migration guide [here](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/migration_guides/0.50.0/MIGRATION_00_50_00.md)** -* **IMPROVEMENT** Allow to return a Widget in [SideTitles.getTitlesWidget](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/base_chart.md#sidetitles) instead of a `String`. For example, you can pass an [Icon](https://api.flutter.dev/flutter/widgets/Icon-class.html) widget as a title, #183. Check below samples: -> **LineChartSample 8** ([Source Code](https://github.com/imaNNeo/fl_chart/blob/master/example/lib/presentation/samples/line/line_chart_sample8.dart)) -> -> -> **BarChartSample 7** ([Source Code](https://github.com/imaNNeo/fl_chart/blob/master/example/lib/presentation/samples/bar/bar_chart_sample7.dart)) -> -> -* **BREAKING** Structure of `FlTitlesData`, `AxisTitles`, and `SideTitles` are changed. Because we are using a new system which allows you to pass any [Flutter Widget](https://docs.flutter.dev/development/ui/widgets) as a title instead of passing `string`, `textStyle`, `textAlign`, `rotation`, ... (Read our [Migration Guide](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/migration_guides/0.50.0/MIGRATION_00_50_00.md)) -* **FEATURE** Now we can use any [Gradient](https://api.flutter.dev/flutter/dart-ui/Gradient-class.html) such as [LinearGradient](https://api.flutter.dev/flutter/painting/LinearGradient-class.html) and [RadialGradient](https://api.flutter.dev/flutter/painting/RadialGradient-class.html) everywhere we have gradient. -* **BUGFIX** Fix BarChart rods gradient problem, #703. -* **BREAKING** `colors` property renamed to `color` to keep only one solid color. And now we have a `gradient` field instead of `colorStops`, `gradientFrom` and `gradientTo` in following classes: [BarChartRodData](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/bar_chart.md#barchartroddata), [BackgroundBarChartRodData](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/bar_chart.md#backgroundbarchartroddata), [BarAreaData](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/line_chart.md#BarAreaData), [BetweenBarsData](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/line_chart.md#betweenbarsdata), [LineChartBarData](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/line_chart.md#linechartbardata). (Read our [Migration Guide](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/migration_guides/0.50.0/MIGRATION_00_50_00.md) to learn more about it) - -## 0.46.0 -* **BUGFIX** Fix drawing BetweenBarsArea problem when there are `nullSpots` in fromLine and toLine, #912. -* **FEATURE** Allow to have vertically grouped BarChart using `fromY` and `toY` properties in [BarChartRodData](https://github.com/imaNNeo/fl_chart/blob/feature/multi-rods-on-bar-chart/repo_files/documentations/bar_chart.md#BarChartRodData) It means you can have a negative and a positive bar chart at the same X location. #334, #875. Check [BarChartSample5](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/bar_chart.md#sample-5-source-code) and [BarChartSample6](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/bar_chart.md#sample-6-source-code. -* **BREAKING** Renamed `y` property to `toY` in [BarChartRodData](https://github.com/imaNNeo/fl_chart/blob/feature/multi-rods-on-bar-chart/repo_files/documentations/bar_chart.md#BarChartRodData) and [BackgroundBarChartRodData](https://github.com/imaNNeo/fl_chart/blob/feature/multi-rods-on-bar-chart/repo_files/documentations/bar_chart.md#backgroundbarchartroddata) due to the above feature. -* **BUGFIX** Fix smaller radius bubble hiding behind bigger radius bubble in ScatterChart, #930. -* **BUGFIX** Fix tooltip text alignment and direction in line chart, #927. - -## 0.45.1 -* **IMPORTANT** **Fuck Vladimir Putin** -* **BUGFIX** Fix `FlSpot.nullSpot` at the first of list bug, #912. -* **FEATURE** Add `scatterLabelSettings` property in [ScatterChart](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/scatter_chart.md) which lets you to add titles on the spots, #902. - -## 0.45.0 -* **BUGFIX** Fix `clipData` implementation in ScatterChart and LineChart, #897. -* **BUGFIX** Fix PieChart changing sections issue (we have disabled semantics for pieChart badgeWidgets), #861. -* **BUGFIX** Fix LineChart width smaller width or height lower than 40, #869, #857. -* **BUGFIX** Allow to show title when axis diff is zero, #842, #879. -* **IMPROVEMENT** Improve iteration over axis values logic (it solves some minor problems on showing titles when min, max values are below than 1.0). -* **IMPROVEMENT** Add `baselineX` and `baselineY` property in our axis-based charts, It fixes a problem about `interval` which mentioned in #893 (check [this sample](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/line_chart.md#gist---baselinex-baseliney-sample-source-code). -* **IMPROVEMENT** Added `distanceCalculator` to `LineTouchData` which is used to calculate the distance between spots and touch events, #716, #261, #892 -* **BREAKING** `LineTouchResponse` response now contains a list of `TouchLineBarSpot` instead of `LineBarSpot`. They are ordered based on their distance to the touch event and also contain that distance. - -## 0.41.0 -* **BUGFIX** Fix getNearestTouchedSpot. Previously it returned the first occurrence of a spot within the threshold, and not the nearest, #641, #645. -* **FEATURE** Add `textAlign` property in the [SideTitles](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/base_chart.md#sidetitles), #784. -* **IMPROVEMENT** Write some unit-tests and enable code coverage reports in our CI - -## 0.40.6 -* **IMPROVEMENT** Fix showing zero value in side titles and grid lines when we add negative value. Now we always go through the zero value in each axis, #739. -* **BUGFIX** Fix example app unsupported operation problem on web, #844. - -## 0.40.5 -* **BUGFIX** Fix BarChart empty groups state error, #797. -* **BUGFIX** Fix drawTooltipOnTop direction minor bug, #815. -* **BUGFIX** Fix section with zero value problem in PieChart (disabled animation on changing value to zero and from zero), #817 -* **BUGFIX** Fix pie chart stroke problem when adding space between sections (using new approach), #818. -* **IMPROVEMENT** Fix interval below one, #811 - -## 0.40.2 -* **IMPROVEMENT** Use 80 characters for code format line-length instead of 100 (because pub.dev works with 80 and decreased our score). - -## 0.40.1 -* **IMPROVEMENT** Fix pub.dev determining web support, #780. -* **IMPROVEMENT** Implement flutter_lints in the code. -* **BUGFIX** Fix below/above area data transparency issue, #770. - -## 0.40.0 -* **BUGFIX** Fixed pieChart `centerRadius = double.infinity` problem, #747.c -* **BREAKING** Charts touchCallback signature has changed to `(FlTouchEvent event, BaseTouchResponse? response)` which [FlTouchEvent](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/base_chart.md#fltouchevent) determines which touch/pointer event happened (such as `FlTapUpEvent`, `FlPanUpdateEvent`, ...), and BaseTouchResponse gives us the chart response. -* **BREAKING** Chart touchResponse classes don't have `touchInput` and `clickHappened` properties anymore. Use [FlTouchEvent](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/base_chart.md#fltouchevent) provided in the callback instead of `touchInput`. Check `event is FlTapUpEvent` to detect touch events instead of checking `clickHappened`; -* **IMPROVEMENT** Again we support `longPress` touch events. check [FlTouchEvent](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/base_chart.md#fltouchevent) to see all kind of supported touch/pointer events (which can be `FlLongPressStart`, `FlLongPressMoveUpdate`, `FlLongPressEnd`, ...). Also you can check out [touch handling doc](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/handle_touches.md), #649. -* **IMPROVEMENT** Added `mouseCursorResolver` callback in touchData classes such as [LineTouchData](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/line_chart.md#linetouchdata-read-about-touch-handling) and [BarTouchData](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/bar_chart.md#bartouchdata-read-about-touch-handling). You can change the [MouseCursor](https://api.flutter.dev/flutter/services/MouseCursor-class.html) based on the provided [FlTouchEvent](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/base_chart.md#fltouchevent) and touchResponse using this callback. (We have used this feature in [PieChartSample2](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/scatter_chart.md#sample-2-source-code)) -* **BUGFIX** Fixed `ScatterChart` default touchHandling crash -* **BUGFIX** Fix text styles when updating the theme. Check this [theme-aware-sample](https://gist.github.com/imaNNeo/bf95e720621d799ab980a7a3287c56e2). -* **IMPROVEMENT** Show narrow horizontal and vertical grid lines by default. -* **IMPROVEMENT** Show all left, top (except BarChart), right, bottom titles in Axis based charts by default. -* **IMPROVEMENT** Set `BarChartAlignment.spaceEvenly` as `alignment` property of [BarChartData](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/bar_chart.md#barchartdata) by default -* **IMPROVEMENT** Allow [BarChart](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/bar_chart.md) and [LineChart](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/line_chart.md) have empty values instead of throwing exception (we don't show anything if there is nothing provided) -* **BREAKING** `textStyle` of [ScatterTooltipItem](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/scatter_chart.md#ScatterTooltipItem) is now nullable and optional. `bottomMargin` is also optional (default is zero). So both are named parameters now. -* **IMPROVEMENT** We improved touch precision of `ScatterChart`. -* **BUGFIX** Fix overlapping last gridlines on border lines problem. -* **NEWS** Your donation **motivates** me to work more on the `fl_chart` and resolve more issues. Now you can [buy me a coffee](https://www.buymeacoffee.com/fl_chart)! - -## 0.36.4 -* **IMPROVEMENT** Added `borderSide` property in [BarChartRodData](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/bar_chart.md#BarChartRodData) and [BarChartRodStackItem](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/bar_chart.md#BarChartRodStackItem) to draw strokes around each bar and rod stack items, #714. -* **IMPROVEMENT** Now all textStyles are nullable and theme-aware by default, #269. -* **BREAKING** All `getTextStyles` callback now give you a `context` and `value` (previously it was only a `value`). -* **BUGFIX** Fixed `colorStops` calculation which used in gradient colors, #732. - -## 0.36.3 -* **IMPROVEMENT** Show proper error message when there is less than 3 [RadarEntry](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/radar_chart.md#radarentry) in [RadarChart](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/radar_chart.md), #694. -* **IMPROVEMENT** Added `borderSide` property in [PieChartSectionData](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/pie_chart.md#piechartsectiondata) to draw strokes around each section, #606. - -## 0.36.2 -* **IMPROVEMENT** Support `onMouseExit` event in all charts. -* **IMPROVEMENT** Add `rotateAngle` property in [LineTouchTooltipData](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/line_chart.md#linetouchtooltipdata), [BarTouchTooltipData](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/bar_chart.md#bartouchtooltipdata), [ScatterTouchTooltipData](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/scatter_chart.md#scattertouchtooltipdata), #260, #679. -* **BUGFIX** Fix PieChart section index problem, when there is a section with 0 value, #697. - - -## 0.36.1 -* **IMPROVEMENT** Allow to set zero value on PieChartSectionData (we remove zero sections instead of crashing), #640. -* **BUGFIX** Fix NPE crash in our renderers touchCallback, #651. -* **BUGFIX** Fix line index problem in LineChart, #665. (It has appeared in `0.36.0`, we had to revert 2nd change of `0.36.0`) -* **BREAKING** Remove unused `lineIndex` property from (ShowingTooltipIndicators)[https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/line_chart.md#showingtooltipindicators]. - -## 0.36.0 -* **BUGFIX** Fixed bug of lerping FlSpot.nullSpot, #487. -* **BUGFIX** Fixed showing tooltip problem when animating chart, #647. -* **BUGFIX** Fixed RadarChart drawing problem, #627. -* **IMPROVEMENT** Now [SideTitles](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/base_chart.md#SideTitles).`interval` is working correctly in bottomTitles in the BarChart, #648. -* **BREAKING** You should provide `spotsIndices` instead of `showingSpots` in [ShowingTooltipIndicators](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/line_chart.md#showingtooltipindicators). - -## 0.35.0 -* **IMPROVEMENT** Added `children` property in the [LineTooltipItem](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/line_chart.md#linetooltipitem), [BarTooltipItem](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/bar_chart.md#bartooltipitem) and [ScatterTooltipItem](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/scatter_chart.md#scattertooltipitem) which accepts a list of [TextSpan](https://api.flutter.dev/flutter/painting/TextSpan-class.html). It allows you to have more customized texts inside the tooltip. See [BarChartSample1](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/bar_chart.md#sample-1-source-code) and [ScatterSample2](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/scatter_chart.md#sample-2-source-code), #72, #294. -* **IMPROVEMENT** Added `getTouchLineStart` and `getTouchLineEnd` in [LineTouchData](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/line_chart.md#linetouchdata-read-about-touch-handling) to give more customizability over showing the touch lines. see [SampleLineChart9](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/line_chart.md#sample-8-source-code). -* **IMPROVEMENT** Enabled `sectionsSpace` in PieChart for the web. -* **IMPROVEMENT** Added [Makefile](https://makefiletutorial.com) commands which makes it comfortable for verifying your code before push (It is related to contributors, red more about it in [CONTRIBUTING.md](https://github.com/imaNNeoFighT/fl_chart/blob/master/CONTRIBUTING.md)). -* **IMPROVEMENT** Added `FlDotCrossPainter` which extends `FlDotPainter` to paint X marks on line chart spots. -* **IMPROVEMENT** Added `textDirection` property in [LineTooltipItem](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/line_chart.md#linetooltipitem), [BarTooltipItem](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/bar_chart.md#bartooltipitem) and [ScatterTooltipItem](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/scatter_chart.md#scattertooltipitem). It allows you to support rtl languages in tooltips. -* **IMPROVEMENT** Added `textDirection` property in [SideTitles](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/base_chart.md#sidetitles) class, #531. It allows you to support rtl languages in side titles. -* **IMPROVEMENT** Added `textDirection` property in [AxisTitles](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/base_chart.md#AxisTitle) class. It allows you to support rtl languages in axis titles. -* **BUGFIX** Fixed some bugs on drawing PieChart (for example when we have only one section), #582, -* **BREAKING** Border of pieChart now is hide by default (you can show it using `borderData: FlBorderData(show: true)`. -* **BREAKING** You cannot set `0` value on [PieChartSectionData](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/pie_chart.md#piechartsectiondata).value anymore, instead remove it from list. -* **BREAKING** Removed `fullHeightTouchLine` property from [LineTouchData](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/line_chart.md#linetouchdata-read-about-touch-handling). Now you can have a full line with following snippet: -```dart -LineTouchData( - ... - getTouchLineStart: (barData, index) => -double.infinity // default: from bottom, - getTouchLineEnd: (barData, index) => double.infinity //to top, - ... -) -``` - -## 0.30.0 -* [IMPROVEMENT] We now use [RenderObject](https://api.flutter.dev/flutter/rendering/RenderObject-class.html) as our default drawing system. It brings a lot of stability. Such as size handling, hitTest handling (touches), and It makes us possible to paint Widgets inside our chart (It might fix #383, #556, #582, #584, #591). -* [IMPROVEMENT] Added [Radar Chart Documentations](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/radar_chart.md) -* [IMPROVEMENT] Added `textAlign` property in the [BarTooltipItem](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/bar_chart.md#bartooltipitem), [LineTooltipItem](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/line_chart.md#linetooltipitem), and [ScatterTooltipItem](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/scatter_chart.md#scattertooltipitem), default is `TextAlign.center`. -* [IMPROVEMENT] Added `direction` property in the [BarTouchTooltipData](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/bar_chart.md#bartouchtooltipdata), and [LineTouchTooltipData](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/line_chart.md#linetouchtooltipdata) to specify the position of the tooltip (can be `auto`, `top`, `bottom`), default is `auto`. -* [IMPROVEMENT] Updated touch flow, we now use [hitTest](https://api.flutter.dev/flutter/rendering/RenderProxyBoxWithHitTestBehavior/hitTest.html) for handling touch and interactions. -* [IMPROVEMENT] Added 'clickHappened' property in all of our TouchResponses (such as [LineTouchResponse](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/line_chart.md#LineTouchResponse), [BarTouchResponse](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/bar_chart.md#bartouchresponse), ...), #210. -* [IMPROVEMENT] Added `swapAnimationCurve` property to all chart widgets which handles the built-in animation [Curve](https://api.flutter.dev/flutter/animation/Curves-class.html), #436. -* [BREAKING] Some properties in [ScatterTouchResponse](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/scatter_chart.md#scattertouchresponse), and [PieTouchResponse](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/pie_chart.md#pietouchresponse) moved to a wrapper class, you need to access them through that wrapper class. -* [BREAKING] Renamed `tooltipBottomMargin` to `tooltipMargin` property in the [BarTouchTooltipData](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/bar_chart.md#bartouchtooltipdata), and [LineTouchTooltipData](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/line_chart.md#linetouchtooltipdata) -* [Bugfix] Fixed `double.infinity` in [PieChartData](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/pie_chart.md#piechartdata) .centerSpaceRadius, #584. - -## 0.20.1 -* [BREAKING] We now support flutter version 2.0 (null-safety), check out the [migration guide](https://dart.dev/null-safety/migration-guide). -* [NEW_CHART] We have added [RadarChart](https://github.com/payam-zahedi/fl_chart/blob/master/repo_files/documentations/radar_chart.md). Thanks to [Payam Zahedi](https://github.com/payam-zahedi)! - -## 0.20.0-nullsafety1 -* [BREAKING] **We have migrated our project to null-safety. You may need to change your source-code to compile**. check [migration guide](https://dart.dev/null-safety/migration-guide). -* [BREAKING] You cannot set null value on FlSpot any more (use FlSpot.nullSpot instead). - -## 0.12.3 -* [Bugfix] Fixed PieChart exception bug on sections tap, #514. -* [Bugfix] Fixed PieChart badges problem, #538. -* [Bugfix] Fixed Bug of drawing lines with strokeWidth zero, #558. -* [Improvement] Updated example app to support web. -* [Improvement] Show tooltips on mouse hover on Web, and Desktop. - -## 0.12.2 -* [Bugfix] Fixed PieChart badges draw in first frame problem, #513. -* [Improvement] Use CanvasWrapper to proxy draw functions (It does not have any effect on the result, it makes the code testable) - -## 0.12.1 -* [Bugfix] Fixed PieChart badges bug with re-implementing the solution, #507 -* [Bugfix] Fix the setState issue using PieChart in the ListView, #467 -* [Bugfix] Fixed formatNumber bug for negative numbers, #486. -* [Improvement] Added applyCutOffY property in [BarAreaSpotsLine](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/line_chart.md#barareaspotsline) to inherit cutOffY property of its parent, #478. - -## 0.12.0 -* [Improvement] [BREAKING] Replaced `color` property with `colors` in [BarChartRodData](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/bar_chart.md#barchartroddata), and [BackgroundBarChartRodData](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/bar_chart.md#backgroundbarchartroddata) to support gradient in BarChart, instead of solid color, #166. Check [BarChartSample3](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/bar_chart.md#sample-3-source-code) -* [Improvement] Improved gradient stops calculating algorithm. -* [Improvement] [BREAKING] Changed SideTitle's `textStyle` property to `getTextStyles` getter (it gives you the axis value, and you must return a TextStyle based on it), It helps you to have a different style for specific text, #439. Check it here [LineChartSample3](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/line_chart.md#sample-3-source-code) -* [Improvement] Added `badgeWidget`, and `badgePositionPercentageOffset` in each [PieChartSectionData](https://github.com/imaNNeoFighT/fl_chart/blob/dev/repo_files/documentations/pie_chart.md#piechartsectiondata) to provide a widget to show in the chart, see [this sample](https://github.com/imaNNeoFighT/fl_chart/blob/dev/repo_files/documentations/pie_chart.md#sample-3-source-code), #443. Providing a widget is an important step in our library, if it works perfectly, we will aplly this solution on other parts. Then I appreciate any feedback. -* [Bugfix] Fixed aboveBarArea flickers after setState, #440. - -## 0.11.1 -* [Bugfix] Fixed drawing BarChart rods with providing minY (for positive), maxY (for negative) values bug, #404. -* [Bugfix] Fixed example app build fail error, by upgrading flutter_svg package to `0.18.1` - -## 0.11.0 -* [Bugfix] Prevent show ScatterSpot if show is false, #385. -* [Improvement] Set default centerSpaceRadius to double.infinity in [PieChartData](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/pie_chart.md#piechartdata), #384. -* [Improvement] Allowed to have topTitles in the [BarChart](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/bar_chart.md), see [BarChartSample5](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/bar_chart.md#sample-5-source-code), #394. -* [Improvement] Added `touchedStackItem` and `touchedStackItemIndex` properties in the [BarTouchedSpot](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/bar_chart.md#bartouchedspot) to determine in which [BarChartRodStackItem](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/bar_chart.md#barchartrodstackitem) click happened, #393. -* [Improvement] [BREAKING] Renamed `rodStackItem` to `rodStackItems` in [BarChartRodData](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/bar_chart.md#barchartroddata). - -## 0.10.1 -* [Improvement] Show barGroups `x` value instead of `index` in bottom titles, #342. -* [Improvement] [BREAKING] Use `double.infinity` instead of `double.nan` for letting `enterSpaceRadius` be as large as possible in the (PieChartData)[https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/pie_chart.md#piechartdata], #377. -* [Bugfix] Fixed PieChart bug with 1 section, #368. - -## 0.10.0 -* [IMPORTANT] **BLACK LIVES MATTER** -* [Improvement] Auto calculate interval in [SideTitles](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/base_chart.md#sidetitles) and [FlGridData](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/base_chart.md#flgriddata), instead of hard coding 1, to prevent some performance issues like #101, #322. see [BarChartSample4](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/bar_chart.md#sample-4-source-code). -* [Bugfix] drawing dot on null spots -* [Bugfix] Fixed LineChart have multiple NULL spot bug. -* [Feature] Added `checkToShowTitle` property to the [SideTitles](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/base_chart.md#sidetitles), for checking show or not show titles in the provided value, #331. see [LineChartSample8](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/line_chart.md#sample-8-source-code). -* [Feature] Added compatibily to have customized shapes for [FlDotData](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/line_chart.md#fldotdata), just override `FlDotData.etDotPainter` and pass your own painter or use built-in ones, see this [sample](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/line_chart.md#sample-3-source-code). -* [Improvement] [BREAKING] Replaced `clipToBorder` with `clipData` in [LineChartData](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/line_chart.md#linechartdata) to support clipping 4 sides of a chart separately. - -## 0.9.4 -* [Bugfix] Fixed showing PieChart on web (we've ignored `groupSpace` on web, because some BlendModes are [not working](https://github.com/flutter/flutter/issues/56071) yet) - -## 0.9.3 -* [BugFix] Fixed groupBarsPosition exception, #313. -* [Improvement] Shadows default off, #316. - -## 0.9.2 -* [Feature] Added `shadow` property in [LineChartData](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/line_chart.md#linechartdata) to have shadow effect in our [LineChart](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/line_chart.md), take a look at [LineChartSampl5](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/line_chart.md#sample-5-source-code), #304. -* [Feature] Added `isStepLineChart`, and `lineChartStepData` in the [LineChartData](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/line_chart.md#linechartdata) to support Step Line Chart, take a look at [lineChartSample3](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/line_chart.md#sample-3-source-code), #303. -* [Improvement] Added `barData` parameter to checkToShowDot Function in the [FlDotData](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/line_chart.md#fldotdata). - -## 0.9.0 -* Added `strokeWidth`, `getStrokeColor`, `getDotColor` in the [FlDotData](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/line_chart.md#fldotdata), also removed `dotColor` from it (you should use `getDotColor` instead, it gives you more customizability), now we have more customizability on [FlDotData](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/line_chart.md#fldotdata), check [line_chart_sample3](https://github.com/imaNNeoFighT/fl_chart/blob/dev/repo_files/documentations/line_chart.md#sample-3-source-code), and [line_chart_sample5](https://github.com/imaNNeoFighT/fl_chart/blob/dev/repo_files/documentations/line_chart.md#sample-5-source-code), #233, #99, #274. -* Added `equatable` library to solve some equation issues. -* Implemented negative values feature for the BarChart, #106, #103. -* add Equatable for all models, it leads to have a better performance. -* Fixed a minor touch bug in the [BarChart](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/bar_chart.md). -* Fixed ScatterChart built-in touch behaviour. -* Fixed drawing grid lines bug, #280. -* Implemented [FlDotData](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/line_chart.md#fldotdata).`getDotColor` in a proper way, it returns a color based on the [LineChartBarData](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/line_chart.md#linechartbardata) color, #274, #282. -* Updated [LineChartData](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/line_chart.md#linechartdata).`showingTooltipIndicators` field type to list of [ShowingTooltipIndicators](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/line_chart.md#showingtoltipindicators) to have a clean naming. - -## 0.8.7 -* Added `show` property in the `VerticalLineLabel` and set default to `false`, #256. -* Fixed bug, when the screen size is square, #258. - -## 0.8.6 -* Fixed exception on extraLinesData, #251. -* Show extra lines value with 1 floating-point. -* Implemented multi-section lines in LineChart, check this issue (#26) and this merge request (#252) - -## 0.8.5 -* Added `fitInsideHorizontally` and `fitInsideVertically` in [ScatterTouchTooltipData](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/scatter_chart.md#scattertouchtooltipdata) -* Fixed `clipToBorder` functionality basdd on the border sides. - -## 0.8.4-test1 -* Improved documentations - -## 0.8.4 -* Added `preventCurveOvershootingThreshold` in `LineChartBarData` for applying prevent overshooting algorithm, #193. -* Fixed `clipToBorder` bug in the [LineChartData](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/line_chart.md#linechartdata), #228, #214. -* Removed unused `enableNormalTouch` property from all charts TouchData. -* Implemented ImageAnnotations feature (added `image`, and `sizedPicture` in the [VerticalLine](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/line_chart.md#verticalline), and the [HorizontalLine](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/line_chart.md#horizontalline), check [this sample](https://github.com/imaNNeoFighT/fl_chart/blob/dev/repo_files/documentations/line_chart.md#sample-8-source-code) for more information. -* Enable 'fitInsideTheChart' to support vertical tooltip overflow as well, #225. -* BREAKING CHANGE-> changed `fitInsideTheChart` to `fitInsideHorizontally` and added `fitInsideVertically` to support both sides, #225. - -## 0.8.3 -* prevent to set BorderRadius with numbers larger than (width / 2), fixed #200. -* added `fitInsideTheChart` property inside `BarTouchTooltipData` and `LineTouchTooltipData` to force tooltip draw inside the chart (shift it to the chart), fixed #159. - -## 0.8.2 -* added `fullHeightTouchLine` in [LineTouchData](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/line_chart.md#linetouchdata-read-about-touch-handling) to show a full height touch line, see sample in merge request #208. -* added `label` ([HorizontalLineLabel](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/line_chart.md#horizontallinelabel)) inside [HorizontalLine](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/line_chart.md#horizontalline) and [VerticalLine](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/line_chart.md#verticalline) to show a lable text on the lines. - -## 0.8.1 -* yaaay, added some basic unit tests -* skipped the first and the last grid lines from drawing, #174. -* prevent to draw touchedSpotDot if `show` is false, #180. -* improved paint order, more details in #175. -* added possibility to set `double.nan` in `centerSpaceRadius` for the PieChart to let it to be calculated according to the view size, fixed #179. - -## 0.8.0 -* added functionallity to have dashed lines, in everywhere we draw line, there should be a property called `dashArray` (for example check [LineChartBarData](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/line_chart.md#linechartbardata), and see [LineChartSample8](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/line_chart.md#sample-8-source-code)) -* BREAKING CHANGE: -* swapped [HorizontalExtraLines](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/line_chart.md#horizontalline), and [VerticalExtraLines](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/line_chart.md#verticalline) functionalities (now it has a well definition) -* and also removed `showVerticalLines`, and `showHorizontalLines` from [ExtraLinesData](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/line_chart.md#ExtraLinesData), if the `horizontalLines`, or `verticalLines` is empty we don't show them - -## 0.7.0 -* added rangeAnnotations in the [LineChartData](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/line_chart.md#linechartdata) to show range annotations, #163. -* removed `isRound` fiend in the [BarChartRodData](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/bar_chart.md#barchartroddata) to add more customizability, and fixed #147 bug. -* fixed sever bug of click on pie chart, #146. - -## 0.6.3 -* Fixed drawing borddr bug, #143. -* Respect text scale factor when drawing text. - -## 0.6.2 -* added `axisTitleData` field to all axis base charts (Line, Bar, Scatter) to show the axes titles, see [LineChartSample4](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/line_chart.md#sample-4-source-code) and [LineChartSample5](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/line_chart.md#sample-5-source-code). - -## 0.6.1 -* added `betweenBarsData` property in [LineChartData](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/line_chart.md#linechartdata), fixed #93. - -## 0.6.0 -* fixed calculating size for handling touches bug, #126 -* added `rotateAngle` property to rotate the [SideTitles](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/base_chart.md#sidetitles), fixed issue [#75](https://github.com/imaNNeoFighT/fl_chart/issues/75) , see in this [sample](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/bar_chart.md#sample-5-source-code) -* BREAKING CHANGES: -* some property names updated in the [FlGridData](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/base_chart.md#flgriddata): `drawHorizontalGrid` -> `drawHorizontalLine`, `getDrawingHorizontalGridLine` -> `getDrawingHorizontalLine`, `checkToShowHorizontalGrid` -> `checkToShowHorizontalLine` (and same for vertical properties), fixed issue [#92](https://github.com/imaNNeoFighT/fl_chart/issues/92) - -## 0.5.2 -* drawing titles using targetData instead of animating data, fixed issue #130. - -## 0.5.1 -* prevent to show touch indicators if barData.show is false in LineChart, [#125](https://github.com/imaNNeoFighT/fl_chart/issues/125). - -## 0.5.0 -* 💥 Added ScatterChart ([read about it](https://jbt.github.io/markdown-editor/repo_files/documentations/scatter_chart.md)) 💥 -* Added Velocity to in [FlPanEnd](https://github.com/imaNNeoFighT/fl_chart/blob/feature/scatter-chart/repo_files/documentations/base_chart.md#fltouchinput) to determine the Tap event. - -## 0.4.3 -* fixed a size bug, #100. -* direction support for gradient on the LineChart (added `gradientFrom` and `gradientTo` in the [LineChartBarData](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/line_chart.md#linechartbardata)). - -## 0.4.2 -* implemented stacked bar chart, check the [samples](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/bar_chart.md#sample-5-source-code) -* added `groupSpace in [BarChartData](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/bar_chart.md#barchartdata) to apply space between bar groups -* fixed drawing left and right titles of the BarChart -* fixed showing gridLines bug (the grid line of exact max value of each direction doesn't show) - -## 0.4.1 -* fixed handling disabled `handleBuiltInTouches` state bug - -## 0.4.0 -* BIG BREAKING CHANGES -* There is no `FlChart` class anymore, instead use [LineChart](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/line_chart.md), [BarChart](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/bar_chart.md), and [PieChart](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/pie_chart.md) directly as a widget. -* Touch handling system is improved and for sure we have some changes, there is no `touchedResultSink` anymore and use `touchCallback` function which is added to each TouchData like ([LineTouchData](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/line_chart.md#linetouchdata-read-about-touch-handling)), [read more](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/handle_touches.md). -* `TouchTooltipData` class inside `LineTouchData` and `BarTouchData` renamed to `LineTouchTooltipData` and `BarTouchTooltipData` respectively, and also `TooltipItem` class renamed to `LineTooltipItem` and `BarTooltipItem`. -* `spots` inside `LineTouchResponse` renamed to `lineBarSpots` and type changed from `LineTouchedSpot` to `LineBarSpot`. -* `FlTouchNormapInput` renamed to `FlTouchNormalInput` (fixed typo) -* added `showingTooltipIndicators` in [LineChartData](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/line_chart.md#linechartdata) to show manually tooltips in `LineChart`. -* added `showingIndicators` in [LineChartBarData](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/line_chart.md#linechartbardata) to show manually indicators in `LineChart`. -* added `showingTooltipIndicators` in [BarChartGroupData](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/bar_chart.md#barchartgroupdata) to show manually tooltips in `BarChart`. - - - -## 0.3.4 -* BREAKING CHANGES -* swapped horizontal and vertical semantics in [FlGridData](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/base_chart.md#FlGridData), fixed this [issue](https://github.com/imaNNeoFighT/fl_chart/issues/85). - -## 0.3.3 -* BREAKING CHANGES -* added support for drawing below and above areas separately in LineChart -* added cutOffY feature in LineChart, see this [issue](https://github.com/imaNNeoFighT/fl_chart/issues/62) -* added `aboveBarData` in [LineChartBarData](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/line_chart.md#linechartbardata) -* `BelowBarData` class renamed to [BarAreaData](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/line_chart.md#barareadata) to reuse for both above and below areas -* `belowSpotsLine` renamed to `spotsLine` in [BarAreaData](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/line_chart.md#barareadata) -* `cutOffY` and `applyCutOffY` fields are added in [BarAreaData](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/line_chart.md#barareadata) to handle cutting of drawing below or above area -* `BelowSpotsLine` renamed to [BarAreaSpotsLine](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/line_chart.md#barareaspotsline), and inside it `checkToShowSpotBelowLine` renamed to `checkToShowSpotLine` - -## 0.3.2 -* provided default size (square with 30% smaller than screen) for the FLChart, fixed this [issue](https://github.com/imaNNeoFighT/fl_chart/issues/74). - -## 0.3.1 -* added `interval` field in [SideTitles](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/base_chart.md#sidetitles), fixed this [issue](https://github.com/imaNNeoFighT/fl_chart/issues/67) - -## 0.3.0 -* 💥 Added Animations 💥, [read about it](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/handle_animations.md). - -## 0.2.2 -* fixed a typo on CHANGELOG -* reformatted dart files with `flutter format` command - -## 0.2.1 -* fixed #64, added a technical debt :( - -## 0.2.0 -* fixed a critical got stuck in draw loop bug, -* set `BarChartGroupData` x as required property to keep consistency and prevent unpredictable bugs - -## 0.1.6 -* added `enableNormalTouch` property to chart's TouchData to handle normal taps, and enabled by default. - -## 0.1.5 -* reverted getPixelY() on axis_chart_painter to solve the regression bug (fixed issue #48) -* (fix) BelowBar considers its own color stops refs #46 - -## 0.1.4 -* bugfix -> fixed draw bug on BarChart when y value is very low in high scale y values (#43). - -## 0.1.3 -* added `SideTitles` class to hold titles representation data, and used in `FlTitlesData` to show left, top, right, bottom titles, instead of legacy direct parameters, and implemented a reversed chart [sample](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/line_chart.md#sample-6-source-code) using this update. - -## 0.1.2 -* added `preventCurveOverShooting` on BarData, check this [issue](https://github.com/imaNNeoFighT/fl_chart/issues/25) - -## 0.1.1 -* nothing important - -## 0.1.0 -* added **Touch Interactivity**, read more about it [here](https://github.com/imaNNeoFighT/fl_chart/blob/master/repo_files/documentations/handle_touches.md) - -## 0.0.8 -* added backgroundColor to axis based charts (LineChart, BarChart) to draw a solid background color behind the chart -* added getDrawingHorizontalGridLine, getDrawingVerticalGridLine on FlGridData to determine how(color, strokeWidth) the grid lines should be drawn with the given value on FlGridLine - -## 0.0.7 -* added ExtraLinesData in the LineChartData to draw extra horizontal and vertical lines on LineChart -* added BelowSpotsLine in the BlowBarData to draw lines from spot to the bottom of chart on LineChart - -## 0.0.6 -* fixed charts repainting bug, #16 - - -## 0.0.5 -* added clipToBorder to the LineChartData to clip the drawing to the border, #3 - - -## 0.0.4 -* fixed bug of adding bar with y = 0 on bar chart #13 - - -## 0.0.3 -* renamed `FlChartWidget` to `FlChart` (our main widget) and now you have to import `package:fl_chart/fl_chart.dart` instead of `package:fl_chart/fl_chart_widget.dart` -* renamed `FlChart*` to `BaseChart*` (parent class of our charts like `PieChart`) -* renamed `FlAxisChart*` to `AxisChart*` - - -## 0.0.2 -* fixed `minX`, `maxX` functionality on LineChart -* restricted to access private classes of the library - - -## 0.0.1 - Released on (2019 June 4) diff --git a/example/web/CNAME b/CNAME similarity index 100% rename from example/web/CNAME rename to CNAME diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md deleted file mode 100644 index 2b3c529f61..0000000000 --- a/CONTRIBUTING.md +++ /dev/null @@ -1,101 +0,0 @@ -# Contributing -Hello, we are glad to have a contributor like you here. - -Don't forget that `open-source` makes no sense without contributors. No matter how big your changes are, it helps us a lot even it is a line of change. - -This file is intended to be a guide for those who are interested in contributing to the FL Chart. - -#### Below are the people who has contributed to the FL Chart. We hope we have your picture here soon. -[![](https://opencollective.com/fl_chart/contributors.svg?width=890&button=false)](https://github.com/imaNNeo/fl_chart/graphs/contributors) - -## Let's get Started - -Make sure you have Flutter installed and on your path (follow [installation guide](https://docs.flutter.dev/get-started/install)). - -Follow these steps to clone FL Chart and set up the development environment: - -1. Fork the repository - -2. Clone the project, you can find it in your repositories: `git clone https://github.com/your-username/fl_chart.git` - -3. Go into the cloned directory: `cd fl_chart` - -4. Install all packages: `flutter packages get` - -5. Try to run the sample app. It should work on all platforms (Android, iOS, Web, Linux, MacOS, Windows) - -## Before Modifying the Code - -If the work you intend to do is non-trivial, it is necessary to open -an issue before starting writing your code. This helps us and the -community to discuss the issue and choose what is deemed to be the -best solution. - -### Mention the related issues: -If you are going to fix or improve something, please find and mention the related issues in [CHANGELOG.md](#changelog), commit message and Pull Request description. -In case you couldn't find any issue, it's better to create an issue to explain what's the issue that you are going to fix. - -## Let's start by our drawing architecture -We have a *_chart_painter.dart class per each chart type. It draws elements into the Canvas. -We made the CanvasWrapper class, because we wanted to test draw functions. -CanvasWrapper class holds a canvas and all draw functions proxies through it. -You should use it for drawing on the canvas, Instead of direct accessing to canvas. -It makes draw functions testable. - - - -(made with [draw.io](https://drive.google.com/file/d/1bj-2TqTRUh80dRKJk10drPNeA3fp3EA8/view)) - -## Keep your branch updated -While you are developing your branch, It is common that your branch gets outdated and you need to update your branch with the `master` branch. -To do that, please use `rebase` instead of `merge`. Because when you finish the PR, we must `rebase` your branch and merge it with the master. -The reason that we prefer `rebase` over `merge` is the simplicity of the commit history. It allows us to have sequential commits in the `master` -[This article](https://www.atlassian.com/git/tutorials/merging-vs-rebasing) might help to understand it better. - -## Checking Your Code's Quality - -After you have made your changes, you have to make sure your code works -correctly and meets our guidelines. Our guidelines are: - -You can simply run `make checkstyle`, and if you faced any formatting problem, run `make format`. - -##### Run `make checkstyle` to ensure that your code is formatted correctly -- It runs `flutter analyze` to verify that there is no any warning or error. -- It runs `dart format --set-exit-if-changed --dry-run .` to verify that code has formatted correctly. - -#### Run `make format` to reformat the code -- It runs `dart format .` to format your code. - - -#### Run `make runTests` to ensure that all tests are passing. -- It runs `flutter test` under the hood. - -#### Run `make sure` before pushing your code. -- It runs both `make runTests` and then `make checkstyle` sequentially with a single command. - -## Test coverage (unit tests) -We should write unit-test for our written code. If you are not familiar with unit-tests, please start from [here](https://docs.flutter.dev/cookbook/testing/unit/introduction). - -[Mockito](https://pub.dev/packages/mockito) is the library that we use to mock our classes, please read more about it from their docs [here](https://github.com/dart-lang/mockito#lets-create-mocks). - -Our code coverage is calculated by [Codecov](https://app.codecov.io/gh/imaNNeo/fl_chart) (Our coverage is [![codecov](https://codecov.io/gh/imaNNeo/fl_chart/branch/master/graph/badge.svg?token=XBhsIZBbZG)](https://codecov.io/gh/imaNNeo/fl_chart) - at the moment) - -When you push something in your PR (after approving your PR by one of us), you see a coverage report which describes how much coverage is increased or decreased by your code (You can check the details to see which part of your code made the change). - -Please make sure that your code is **not decreasing** the coverage. - -## Creating a Pull Request - -Congratulations! Your code meets all of our guidelines :100:. Now you have to -submit a pull request (or PR for short) to us. These are the steps you should -follow when creating a PR: - -- Make a descriptive title that summarizes what changes were in the PR. - -- Mention the issues that you are fixing (if doesn't exist, try to make one and explain the issue clearly) - -- Change your code according to feedback (if any). - -After you follow the above steps, your PR will hopefully be merged. Thanks for -contributing! diff --git a/LICENSE b/LICENSE deleted file mode 100644 index 40327d8005..0000000000 --- a/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2022 Flutter 4 Fun - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/Makefile b/Makefile deleted file mode 100644 index 11e3dcdf37..0000000000 --- a/Makefile +++ /dev/null @@ -1,38 +0,0 @@ -analyze: - flutter analyze - -checkFormat: - dart format -o none --set-exit-if-changed . - -checkstyle: - make analyze && make checkFormat - -format: - dart format . - -runTests: - flutter test - -checkoutToPR: - git fetch origin pull/$(id)/head:pr-$(id) --force; \ - git checkout pr-$(id) - -# Tells you in which version this commit has landed -findVersion: - git describe --contains $(commit) | sed 's/~.*//' - -# Runs both `make runTests` and `make checkstyle`. Use this before pushing your code. -sure: - make runTests && make checkstyle - -# To create generated files (for example mock files in unit_tests) -codeGen: - flutter pub run build_runner build --delete-conflicting-outputs - -showTestCoverage: - flutter test --coverage - genhtml coverage/lcov.info -o coverage/html - source ./scripts/makefile_scripts.sh && open_link "coverage/html/index.html" - -buildRunner: - flutter packages pub run build_runner build --delete-conflicting-outputs diff --git a/README.md b/README.md deleted file mode 100644 index a19ccbe3d1..0000000000 --- a/README.md +++ /dev/null @@ -1,74 +0,0 @@ -📊 FL Chart is a highly customizable Flutter chart library that supports **[Line Chart](https://app.flchart.dev/#/line)**, **[Bar Chart](https://app.flchart.dev/#/bar)**, **[Pie Chart](https://app.flchart.dev/#/pie)**, **[Scatter Chart](https://app.flchart.dev/#/scatter)**, and **[Radar Chart](https://app.flchart.dev/#/radar)**. - -✅ Do you want to **motivate me to work more on fl_chart?** You can **[donate me](https://github.com/imaNNeo/fl_chart#donation)** ;) - -![FL Chart Logo](https://github.com/imaNNeo/fl_chart/raw/master/repo_files/images/landing_logo.jpg) - -[![pub package](https://img.shields.io/pub/v/fl_chart.svg)](https://pub.dartlang.org/packages/fl_chart) -[![codecov](https://codecov.io/gh/imaNNeo/fl_chart/branch/master/graph/badge.svg?token=XBhsIZBbZG)](https://codecov.io/gh/imaNNeo/fl_chart) -Awesome Flutter -GitHub Repo stars -GitHub contributors -GitHub closed issues -![GitHub Sponsors](https://img.shields.io/github/sponsors/imaNNeo) - -Buy Me A Coffee donate button - - -### Chart Types - -|LineChart |BarChart |PieChart | -|:------------:|:------------:|:-------------:| -| [![](https://github.com/imaNNeo/fl_chart/raw/master/repo_files/images/line_chart/line_chart_sample_1.gif)](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/line_chart.md#sample-1-source-code) [![](https://github.com/imaNNeo/fl_chart/raw/master/repo_files/images/line_chart/line_chart_sample_2.gif)](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/line_chart.md#sample-2-source-code) | [![](https://github.com/imaNNeo/fl_chart/raw/master/repo_files/images/bar_chart/bar_chart_sample_1.gif)](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/bar_chart.md#sample-1-source-code) [![](https://github.com/imaNNeo/fl_chart/raw/master/repo_files/images/bar_chart/bar_chart_sample_2.gif)](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/bar_chart.md#sample-2-source-code) | [![](https://github.com/imaNNeo/fl_chart/raw/master/repo_files/images/pie_chart/pie_chart_sample_1.gif)](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/pie_chart.md#sample-1-source-code) [![](https://github.com/imaNNeo/fl_chart/raw/master/repo_files/images/pie_chart/pie_chart_sample_2.gif)](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/pie_chart.md#sample-2-source-code) | -|[Read More](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/line_chart.md)|[Read More](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/bar_chart.md)|[Read More](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/pie_chart.md)| - -|ScatterChart |RadarChart| Coming Soon| -|:------------:|:------------:|:-------------:| -| [![](https://github.com/imaNNeo/fl_chart/raw/master/repo_files/images/scatter_chart/scatter_chart_sample_1.gif)](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/scatter_chart.md#sample-1-source-code) [![](https://github.com/imaNNeo/fl_chart/raw/master/repo_files/images/scatter_chart/scatter_chart_sample_2.gif)](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/scatter_chart.md#sample-2-source-code) | ![](https://github.com/imaNNeo/fl_chart/raw/master/repo_files/images/radar_chart/radar_chart_sample_1.jpg) ![](https://github.com/imaNNeo/fl_chart/raw/master/repo_files/images/blank.jpg)|![](https://github.com/imaNNeo/fl_chart/raw/master/repo_files/images/blank.jpg) ![](https://github.com/imaNNeo/fl_chart/raw/master/repo_files/images/blank.jpg)| -|[Read More](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/scatter_chart.md)|[Read More](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/radar_chart.md)|| - -Banner designed by [Soheil Saffar](https://www.linkedin.com/in/soheilsaffar), and -samples inspired from -[David Kovalev](https://dribbble.com/shots/5560237-Live-Graphs-XD), -[Ricardo Salazar](https://dribbble.com/shots/1956890-Data-Stats), -[Dmitro Petrenko](https://dribbble.com/shots/5425378-Mobile-Application-Dashboard-for-Stock-Platform), -[Ghani Pradita](https://dribbble.com/shots/6379476-Calories-Management-App), -[MONUiXD](https://www.uplabs.com/posts/chart-pie-chart-bar-chart). -Thank you all! - - - -# Let's get started - -First of all you need to add the `fl_chart` in your project. In order to do that, follow [this guide](https://pub.dev/packages/fl_chart/install). - -Then you need to read the docs. Start from [here](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/index.md). - -We suggest you to check samples source code. - -##### - You can read about the animation handling [here](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/handle_animations.md) -|Sample1 |Sample2 |Sample3 | -|:------------:|:------------:|:-------------:| -| [![](https://github.com/imaNNeo/fl_chart/raw/master/repo_files/images/line_chart/line_chart_sample_1_anim.gif)](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/line_chart.md#sample-1-source-code) | [![](https://github.com/imaNNeo/fl_chart/raw/master/repo_files/images/line_chart/line_chart_sample_2_anim.gif)](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/line_chart.md#sample-2-source-code) | [![](https://github.com/imaNNeo/fl_chart/raw/master/repo_files/images/bar_chart/bar_chart_sample_1_anim.gif)](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/bar_chart.md#sample-1-source-code) | - - -### Donation -Your donation **motivates** me to work more on the **fl_chart** and resolve more issues. -There are multiple ways to donate me: - -1. You can be my sponsor on [GitHub](https://github.com/sponsors/imaNNeo) (This is the most reliable way to donate me) -2. You can buy me a coffee! -3. Or if you are a fan of crypto, you can donate me Bitcoins here: `1L7ghKdcmgydmUJAnmYmMaiVjT1LoP4a45` - -### Contributing -##### :beer: Pull requests are welcome! -Don't forget that `open-source` makes no sense without contributors. No matter how big your changes are, it helps us a lot even it is a line of change. - -There might be a lot of grammar issues in the docs. It's a big help to us to fix them if you are fluent in English. - -Check out [CONTRIBUTING.md](https://github.com/imaNNeo/fl_chart/blob/master/CONTRIBUTING.md), which contains a guide for those who want to contribute to the FL Chart. - -Reporting bugs and issues are contribution too, yes it is. - -#### Below are the people who has contributed to the FL Chart. We hope we have your picture here soon. -[![](https://opencollective.com/fl_chart/contributors.svg?width=890&button=false)](https://github.com/imaNNeo/fl_chart/graphs/contributors) diff --git a/SOURCES.md b/SOURCES.md deleted file mode 100644 index 775d364164..0000000000 --- a/SOURCES.md +++ /dev/null @@ -1,95 +0,0 @@ -### Sources to learn more about the fl_chart: - -All sources are sorted by date. - -Did you find any new article or source? please contribute to have them all here. - -#### Blog post: - -* [Design Stunning Charts with fl_charts in Flutter](https://www.atatus.com/blog/design-stunning-charts-with-fl-charts-in-flutter/) - - -* [Build beautiful charts in Flutter with FL Chart](https://blog.logrocket.com/build-beautiful-charts-flutter-fl-chart) - - -* [Flutter4Fun UI Challenge 7](https://flutter4fun.com/ui-challenge-7/) - - -* [Stock charts](https://dev.to/kamilpowalowski/stock-charts-with-flchart-library-1gd2) - -#### Video: - - -* [how to create line chart in flutter | fl_chart](https://www.youtube.com/watch?v=Iv3F2HO5Jvc) - - -* [line chart in flutter - flutter tutorial](https://www.youtube.com/watch?v=xHzDAewbSGY) - - -* [Portfolio Dashboard Flutter UI Desktop & Web](https://www.youtube.com/watch?v=H9vXUine7Zo) - - -* [Flutter UI | Stocks App UI Design - Day 55](https://www.youtube.com/watch?v=oILraFu8OE8) - - -* [Implementing Chart in Flutter - Pair Programming with Fl_Chart Author](https://www.youtube.com/watch?v=msMxuUERtg8) - - -* [how to create line chart in flutter | fl_chart](https://www.youtube.com/watch?v=Iv3F2HO5Jvc) - - -* [Responsive Admin Dashboard or Panel using Flutter - Flutter Web UI - Part 1](https://www.youtube.com/watch?v=MRiZpwdy1CM) - - -* [Admin Panel Dashboard - Flutter Responsive UI Design](https://www.youtube.com/watch?v=n7O3pXfENPU) - - -* [How to build Flutter UI - 3 Steps](https://www.youtube.com/watch?v=I0NBtFS_ibc) - - -* [Flutter Web - Dashboard Website Template (Responsive)](https://www.youtube.com/watch?v=3SMdJE_dSxU) - - -* [How to create charts in Flutter](https://www.youtube.com/watch?v=JBJ6o4blgPA) - - -* [Flutter Charts 📊📈](https://www.youtube.com/watch?v=ibkcwCv9Lyw) - - -* [Flutter Library for Customizable](https://www.youtube.com/watch?v=1pjAItIDNz8) - - -* [Pie Chart - FLChart](https://www.youtube.com/watch?v=rZx_isqXrhg&t=77s) - - -* [Flutter Tutorial - Bar Chart](https://www.youtube.com/watch?v=7wUmzYOPQ8w) - - -* [wallet-app-ui-piechart](https://www.youtube.com/watch?v=M4w-dighmMU) - - -* [Flutter UI Tutorial - Fitness App](https://www.youtube.com/watch?v=hTg4DDl8Ixo) - - -* [Gradient Chart](https://www.youtube.com/watch?v=OR2DMRnEXkA) - - -* [Flutter charts tutorial for beginners](https://www.youtube.com/watch?v=nCmihMrWS38) - - -* [The easy way with fl-Chart](https://www.youtube.com/watch?v=R_vpnW5QZEw) - - -* [Get the data form COVID-19 API](https://www.youtube.com/watch?v=QXMWzbdGDkA) - - -* [Flutter COVID-19 Dashboard UI](https://www.youtube.com/watch?v=krU-ASLb8lM) - - -* [Flutter UI](https://www.youtube.com/watch?v=axWBN1aotQk) - - -* [Flutter](https://www.youtube.com/watch?v=rwHFslLo6ho) - - -* [Setup Pie Charts](https://www.youtube.com/watch?v=zRZiJdbp3_E) diff --git a/_config.yml b/_config.yml deleted file mode 100644 index 3397c9a492..0000000000 --- a/_config.yml +++ /dev/null @@ -1 +0,0 @@ -theme: jekyll-theme-architect \ No newline at end of file diff --git a/analysis_options.yaml b/analysis_options.yaml deleted file mode 100644 index 0ecfaa5911..0000000000 --- a/analysis_options.yaml +++ /dev/null @@ -1,19 +0,0 @@ -include: package:very_good_analysis/analysis_options.yaml -analyzer: - exclude: - - "**.mocks.dart" -linter: - rules: - always_put_required_named_parameters_first: false - avoid_bool_literals_in_conditional_expressions: false - avoid_positional_boolean_parameters: false - comment_references: false - library_private_types_in_public_api: false - lines_longer_than_80_chars: false - no_default_cases: false - parameter_assignments: false - prefer_asserts_with_message: false - prefer_constructors_over_static_methods: false - public_member_api_docs: false - use_if_null_to_convert_nulls_to_bools: false - use_setters_to_change_properties: false diff --git a/assets/AssetManifest.bin b/assets/AssetManifest.bin new file mode 100644 index 0000000000..709d71f418 --- /dev/null +++ b/assets/AssetManifest.bin @@ -0,0 +1 @@ + assets/fonts/digital-7.ttf  assetassets/fonts/digital-7.ttf$assets/icons/fitness-svgrepo-com.svg  asset$assets/icons/fitness-svgrepo-com.svg#assets/icons/fl_chart_logo_icon.png  asset#assets/icons/fl_chart_logo_icon.png#assets/icons/fl_chart_logo_text.svg  asset#assets/icons/fl_chart_logo_text.svgassets/icons/ic_bar_chart.svg  assetassets/icons/ic_bar_chart.svgassets/icons/ic_line_chart.svg  assetassets/icons/ic_line_chart.svgassets/icons/ic_pie_chart.svg  assetassets/icons/ic_pie_chart.svgassets/icons/ic_radar_chart.svg  assetassets/icons/ic_radar_chart.svg!assets/icons/ic_scatter_chart.svg  asset!assets/icons/ic_scatter_chart.svg!assets/icons/image_annotation.png  asset!assets/icons/image_annotation.png&assets/icons/librarian-svgrepo-com.svg  asset&assets/icons/librarian-svgrepo-com.svg*assets/icons/ophthalmology-svgrepo-com.svg  asset*assets/icons/ophthalmology-svgrepo-com.svg#assets/icons/worker-svgrepo-com.svg  asset#assets/icons/worker-svgrepo-com.svg2packages/cupertino_icons/assets/CupertinoIcons.ttf  asset2packages/cupertino_icons/assets/CupertinoIcons.ttf \ No newline at end of file diff --git a/assets/AssetManifest.bin.json b/assets/AssetManifest.bin.json new file mode 100644 index 0000000000..886d688da6 --- /dev/null +++ b/assets/AssetManifest.bin.json @@ -0,0 +1 @@ +"DQ4HGmFzc2V0cy9mb250cy9kaWdpdGFsLTcudHRmDAENAQcFYXNzZXQHGmFzc2V0cy9mb250cy9kaWdpdGFsLTcudHRmByRhc3NldHMvaWNvbnMvZml0bmVzcy1zdmdyZXBvLWNvbS5zdmcMAQ0BBwVhc3NldAckYXNzZXRzL2ljb25zL2ZpdG5lc3Mtc3ZncmVwby1jb20uc3ZnByNhc3NldHMvaWNvbnMvZmxfY2hhcnRfbG9nb19pY29uLnBuZwwBDQEHBWFzc2V0ByNhc3NldHMvaWNvbnMvZmxfY2hhcnRfbG9nb19pY29uLnBuZwcjYXNzZXRzL2ljb25zL2ZsX2NoYXJ0X2xvZ29fdGV4dC5zdmcMAQ0BBwVhc3NldAcjYXNzZXRzL2ljb25zL2ZsX2NoYXJ0X2xvZ29fdGV4dC5zdmcHHWFzc2V0cy9pY29ucy9pY19iYXJfY2hhcnQuc3ZnDAENAQcFYXNzZXQHHWFzc2V0cy9pY29ucy9pY19iYXJfY2hhcnQuc3ZnBx5hc3NldHMvaWNvbnMvaWNfbGluZV9jaGFydC5zdmcMAQ0BBwVhc3NldAceYXNzZXRzL2ljb25zL2ljX2xpbmVfY2hhcnQuc3ZnBx1hc3NldHMvaWNvbnMvaWNfcGllX2NoYXJ0LnN2ZwwBDQEHBWFzc2V0Bx1hc3NldHMvaWNvbnMvaWNfcGllX2NoYXJ0LnN2ZwcfYXNzZXRzL2ljb25zL2ljX3JhZGFyX2NoYXJ0LnN2ZwwBDQEHBWFzc2V0Bx9hc3NldHMvaWNvbnMvaWNfcmFkYXJfY2hhcnQuc3ZnByFhc3NldHMvaWNvbnMvaWNfc2NhdHRlcl9jaGFydC5zdmcMAQ0BBwVhc3NldAchYXNzZXRzL2ljb25zL2ljX3NjYXR0ZXJfY2hhcnQuc3ZnByFhc3NldHMvaWNvbnMvaW1hZ2VfYW5ub3RhdGlvbi5wbmcMAQ0BBwVhc3NldAchYXNzZXRzL2ljb25zL2ltYWdlX2Fubm90YXRpb24ucG5nByZhc3NldHMvaWNvbnMvbGlicmFyaWFuLXN2Z3JlcG8tY29tLnN2ZwwBDQEHBWFzc2V0ByZhc3NldHMvaWNvbnMvbGlicmFyaWFuLXN2Z3JlcG8tY29tLnN2ZwcqYXNzZXRzL2ljb25zL29waHRoYWxtb2xvZ3ktc3ZncmVwby1jb20uc3ZnDAENAQcFYXNzZXQHKmFzc2V0cy9pY29ucy9vcGh0aGFsbW9sb2d5LXN2Z3JlcG8tY29tLnN2ZwcjYXNzZXRzL2ljb25zL3dvcmtlci1zdmdyZXBvLWNvbS5zdmcMAQ0BBwVhc3NldAcjYXNzZXRzL2ljb25zL3dvcmtlci1zdmdyZXBvLWNvbS5zdmcHMnBhY2thZ2VzL2N1cGVydGlub19pY29ucy9hc3NldHMvQ3VwZXJ0aW5vSWNvbnMudHRmDAENAQcFYXNzZXQHMnBhY2thZ2VzL2N1cGVydGlub19pY29ucy9hc3NldHMvQ3VwZXJ0aW5vSWNvbnMudHRm" \ No newline at end of file diff --git a/assets/AssetManifest.json b/assets/AssetManifest.json new file mode 100644 index 0000000000..b96b78af21 --- /dev/null +++ b/assets/AssetManifest.json @@ -0,0 +1 @@ +{"assets/fonts/digital-7.ttf":["assets/fonts/digital-7.ttf"],"assets/icons/fitness-svgrepo-com.svg":["assets/icons/fitness-svgrepo-com.svg"],"assets/icons/fl_chart_logo_icon.png":["assets/icons/fl_chart_logo_icon.png"],"assets/icons/fl_chart_logo_text.svg":["assets/icons/fl_chart_logo_text.svg"],"assets/icons/ic_bar_chart.svg":["assets/icons/ic_bar_chart.svg"],"assets/icons/ic_line_chart.svg":["assets/icons/ic_line_chart.svg"],"assets/icons/ic_pie_chart.svg":["assets/icons/ic_pie_chart.svg"],"assets/icons/ic_radar_chart.svg":["assets/icons/ic_radar_chart.svg"],"assets/icons/ic_scatter_chart.svg":["assets/icons/ic_scatter_chart.svg"],"assets/icons/image_annotation.png":["assets/icons/image_annotation.png"],"assets/icons/librarian-svgrepo-com.svg":["assets/icons/librarian-svgrepo-com.svg"],"assets/icons/ophthalmology-svgrepo-com.svg":["assets/icons/ophthalmology-svgrepo-com.svg"],"assets/icons/worker-svgrepo-com.svg":["assets/icons/worker-svgrepo-com.svg"],"packages/cupertino_icons/assets/CupertinoIcons.ttf":["packages/cupertino_icons/assets/CupertinoIcons.ttf"]} \ No newline at end of file diff --git a/assets/FontManifest.json b/assets/FontManifest.json new file mode 100644 index 0000000000..8a5f0611b4 --- /dev/null +++ b/assets/FontManifest.json @@ -0,0 +1 @@ +[{"family":"MaterialIcons","fonts":[{"asset":"fonts/MaterialIcons-Regular.otf"}]},{"family":"Digital","fonts":[{"asset":"assets/fonts/digital-7.ttf"}]},{"family":"packages/cupertino_icons/CupertinoIcons","fonts":[{"asset":"packages/cupertino_icons/assets/CupertinoIcons.ttf"}]}] \ No newline at end of file diff --git a/assets/NOTICES b/assets/NOTICES new file mode 100644 index 0000000000..835da62638 --- /dev/null +++ b/assets/NOTICES @@ -0,0 +1,34383 @@ +abseil-cpp + +Apache License +Version 2.0, January 2004 +https://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 + + https://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. +-------------------------------------------------------------------------------- +abseil-cpp +angle +dart +etc1 +expat +flatbuffers +fuchsia_sdk +glslang +khronos +perfetto +shaderc +spirv-cross +txt +vulkan +vulkan-headers +vulkan-validation-layers +wuffs + +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. +-------------------------------------------------------------------------------- +accessibility + +Copyright (c) 2009 The Chromium Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +accessibility + +Copyright (c) 2010 The Chromium Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +accessibility + +Copyright (c) 2012 The Chromium Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +accessibility + +Copyright (c) 2014 The Chromium Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +accessibility + +Copyright 2013 The Chromium Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +accessibility + +Copyright 2016 The Chromium Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +accessibility + +Copyright 2020 The Chromium Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +accessibility +angle + +Copyright (c) 2011 The Chromium Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +accessibility +angle + +Copyright (c) 2013 The Chromium Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +accessibility +angle + +Copyright 2017 The Chromium Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +accessibility +angle +icu + +Copyright 2014 The Chromium Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +accessibility +angle +skia + +Copyright 2018 The Chromium Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +accessibility +engine +spring_animation +tonic +txt +url_launcher_web +web_test_fonts +web_unicode + +Copyright 2013 The Flutter Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google Inc. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +accessibility +fuchsia_sdk + +Copyright 2019 The Chromium Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +accessibility +skia + +Copyright 2015 The Chromium Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +angle + +Copyright (c) 2008-2018 The Khronos Group Inc. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and/or associated documentation files (the +"Materials"), to deal in the Materials without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Materials, and to +permit persons to whom the Materials are furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Materials. + +THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. +-------------------------------------------------------------------------------- +angle + +Copyright (c) 2013-2017 The Khronos Group Inc. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and/or associated documentation files (the +"Materials"), to deal in the Materials without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Materials, and to +permit persons to whom the Materials are furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Materials. + +THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. +-------------------------------------------------------------------------------- +angle + +Copyright (c) 2020 The ANGLE Project Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of TransGaming Inc., Google Inc., 3DLabs Inc. + Ltd., nor the names of their contributors may be used to endorse + or promote products derived from this software without specific + prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +angle + +Copyright 2002 The ANGLE Project Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of TransGaming Inc., Google Inc., 3DLabs Inc. + Ltd., nor the names of their contributors may be used to endorse + or promote products derived from this software without specific + prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +angle + +Copyright 2010 The ANGLE Project Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of TransGaming Inc., Google Inc., 3DLabs Inc. + Ltd., nor the names of their contributors may be used to endorse + or promote products derived from this software without specific + prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +angle + +Copyright 2011 The ANGLE Project Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of TransGaming Inc., Google Inc., 3DLabs Inc. + Ltd., nor the names of their contributors may be used to endorse + or promote products derived from this software without specific + prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +angle + +Copyright 2012 The ANGLE Project Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of TransGaming Inc., Google Inc., 3DLabs Inc. + Ltd., nor the names of their contributors may be used to endorse + or promote products derived from this software without specific + prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +angle + +Copyright 2013 The ANGLE Project Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of TransGaming Inc., Google Inc., 3DLabs Inc. + Ltd., nor the names of their contributors may be used to endorse + or promote products derived from this software without specific + prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +angle + +Copyright 2013-2020 The Khronos Group Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +-------------------------------------------------------------------------------- +angle + +Copyright 2014 The ANGLE Project Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of TransGaming Inc., Google Inc., 3DLabs Inc. + Ltd., nor the names of their contributors may be used to endorse + or promote products derived from this software without specific + prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +angle + +Copyright 2015 The ANGLE Project Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of TransGaming Inc., Google Inc., 3DLabs Inc. + Ltd., nor the names of their contributors may be used to endorse + or promote products derived from this software without specific + prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +angle + +Copyright 2016 The ANGLE Project Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of TransGaming Inc., Google Inc., 3DLabs Inc. + Ltd., nor the names of their contributors may be used to endorse + or promote products derived from this software without specific + prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +angle + +Copyright 2017 The ANGLE Project Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of TransGaming Inc., Google Inc., 3DLabs Inc. + Ltd., nor the names of their contributors may be used to endorse + or promote products derived from this software without specific + prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +angle + +Copyright 2018 The ANGLE Project Authors. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of TransGaming Inc., Google Inc., 3DLabs Inc. + Ltd., nor the names of their contributors may be used to endorse + or promote products derived from this software without specific + prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +angle + +Copyright 2018 The ANGLE Project Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of TransGaming Inc., Google Inc., 3DLabs Inc. + Ltd., nor the names of their contributors may be used to endorse + or promote products derived from this software without specific + prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +angle + +Copyright 2019 The ANGLE Project. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of TransGaming Inc., Google Inc., 3DLabs Inc. + Ltd., nor the names of their contributors may be used to endorse + or promote products derived from this software without specific + prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +angle + +Copyright 2020 The ANGLE Project Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of TransGaming Inc., Google Inc., 3DLabs Inc. + Ltd., nor the names of their contributors may be used to endorse + or promote products derived from this software without specific + prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +angle + +Copyright 2020 The ANGLE Project. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of TransGaming Inc., Google Inc., 3DLabs Inc. + Ltd., nor the names of their contributors may be used to endorse + or promote products derived from this software without specific + prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +angle + +Copyright 2021 The ANGLE Project Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of TransGaming Inc., Google Inc., 3DLabs Inc. + Ltd., nor the names of their contributors may be used to endorse + or promote products derived from this software without specific + prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +angle + +Copyright 2021 The ANGLE Project. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of TransGaming Inc., Google Inc., 3DLabs Inc. + Ltd., nor the names of their contributors may be used to endorse + or promote products derived from this software without specific + prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +angle + +Copyright 2021-2022 The ANGLE Project Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of TransGaming Inc., Google Inc., 3DLabs Inc. + Ltd., nor the names of their contributors may be used to endorse + or promote products derived from this software without specific + prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +angle + +Copyright 2022 The ANGLE Project Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of TransGaming Inc., Google Inc., 3DLabs Inc. + Ltd., nor the names of their contributors may be used to endorse + or promote products derived from this software without specific + prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +angle + +Copyright 2023 The ANGLE Project Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of TransGaming Inc., Google Inc., 3DLabs Inc. + Ltd., nor the names of their contributors may be used to endorse + or promote products derived from this software without specific + prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +angle + +Copyright The ANGLE Project Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of TransGaming Inc., Google Inc., 3DLabs Inc. + Ltd., nor the names of their contributors may be used to endorse + or promote products derived from this software without specific + prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +angle +khronos + +Copyright (c) 2013-2018 The Khronos Group Inc. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and/or associated documentation files (the +"Materials"), to deal in the Materials without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Materials, and to +permit persons to whom the Materials are furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Materials. + +THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. +-------------------------------------------------------------------------------- +angle +xxhash + +Copyright 2019 The ANGLE Project Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of TransGaming Inc., Google Inc., 3DLabs Inc. + Ltd., nor the names of their contributors may be used to endorse + or promote products derived from this software without specific + prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +args +logging + +Copyright 2013, the Dart project authors. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google LLC nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +-------------------------------------------------------------------------------- +async +collection +stream_channel +typed_data + +Copyright 2015, the Dart project authors. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google LLC nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +-------------------------------------------------------------------------------- +bloc +flutter_bloc + +The MIT License (MIT) +Copyright (c) 2018 Felix Angelov + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without restriction, +including without limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of the Software, +and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +USE OR OTHER DEALINGS IN THE SOFTWARE. +-------------------------------------------------------------------------------- +boolean_selector +meta + +Copyright 2016, the Dart project authors. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google LLC nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +-------------------------------------------------------------------------------- +boringssl + +Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com) +All rights reserved. + +This package is an SSL implementation written +by Eric Young (eay@cryptsoft.com). +The implementation was written so as to conform with Netscapes SSL. + +This library is free for commercial and non-commercial use as long as +the following conditions are aheared to. The following conditions +apply to all code found in this distribution, be it the RC4, RSA, +lhash, DES, etc., code; not just the SSL code. The SSL documentation +included with this distribution is covered by the same copyright terms +except that the holder is Tim Hudson (tjh@cryptsoft.com). + +Copyright remains Eric Young's, and as such any Copyright notices in +the code are not to be removed. +If this package is used in a product, Eric Young should be given attribution +as the author of the parts of the library used. +This can be in the form of a textual message at program startup or +in documentation (online or textual) provided with the package. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. All advertising materials mentioning features or use of this software + must display the following acknowledgement: + "This product includes cryptographic software written by + Eric Young (eay@cryptsoft.com)" + The word 'cryptographic' can be left out if the rouines from the library + being used are not cryptographic related :-). +4. If you include any Windows specific code (or a derivative thereof) from + the apps directory (application code) you must include an acknowledgement: + "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + +THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +The licence and distribution terms for any publically available version or +derivative of this code cannot be changed. i.e. this code cannot simply be +copied and put under another distribution licence +[including the GNU Public Licence.] +-------------------------------------------------------------------------------- +boringssl + +Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) +All rights reserved. + +This package is an SSL implementation written +by Eric Young (eay@cryptsoft.com). +The implementation was written so as to conform with Netscapes SSL. + +This library is free for commercial and non-commercial use as long as +the following conditions are aheared to. The following conditions +apply to all code found in this distribution, be it the RC4, RSA, +lhash, DES, etc., code; not just the SSL code. The SSL documentation +included with this distribution is covered by the same copyright terms +except that the holder is Tim Hudson (tjh@cryptsoft.com). + +Copyright remains Eric Young's, and as such any Copyright notices in +the code are not to be removed. +If this package is used in a product, Eric Young should be given attribution +as the author of the parts of the library used. +This can be in the form of a textual message at program startup or +in documentation (online or textual) provided with the package. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. All advertising materials mentioning features or use of this software + must display the following acknowledgement: + "This product includes cryptographic software written by + Eric Young (eay@cryptsoft.com)" + The word 'cryptographic' can be left out if the rouines from the library + being used are not cryptographic related :-). +4. If you include any Windows specific code (or a derivative thereof) from + the apps directory (application code) you must include an acknowledgement: + "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + +THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +The licence and distribution terms for any publically available version or +derivative of this code cannot be changed. i.e. this code cannot simply be +copied and put under another distribution licence +[including the GNU Public Licence.] +-------------------------------------------------------------------------------- +boringssl + +Copyright (c) 1998-2000 The OpenSSL Project. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + +3. All advertising materials mentioning features or use of this + software must display the following acknowledgment: + "This product includes software developed by the OpenSSL Project + for use in the OpenSSL Toolkit. (http://www.openssl.org/)" + +4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + endorse or promote products derived from this software without + prior written permission. For written permission, please contact + openssl-core@openssl.org. + +5. Products derived from this software may not be called "OpenSSL" + nor may "OpenSSL" appear in their names without prior written + permission of the OpenSSL Project. + +6. Redistributions of any form whatsoever must retain the following + acknowledgment: + "This product includes software developed by the OpenSSL Project + for use in the OpenSSL Toolkit (http://www.openssl.org/)" + +THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY +EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR +ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +boringssl + +Copyright (c) 1998-2001 The OpenSSL Project. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + +3. All advertising materials mentioning features or use of this + software must display the following acknowledgment: + "This product includes software developed by the OpenSSL Project + for use in the OpenSSL Toolkit. (http://www.openssl.org/)" + +4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + endorse or promote products derived from this software without + prior written permission. For written permission, please contact + openssl-core@openssl.org. + +5. Products derived from this software may not be called "OpenSSL" + nor may "OpenSSL" appear in their names without prior written + permission of the OpenSSL Project. + +6. Redistributions of any form whatsoever must retain the following + acknowledgment: + "This product includes software developed by the OpenSSL Project + for use in the OpenSSL Toolkit (http://www.openssl.org/)" + +THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY +EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR +ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +boringssl + +Copyright (c) 1998-2002 The OpenSSL Project. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + +3. All advertising materials mentioning features or use of this + software must display the following acknowledgment: + "This product includes software developed by the OpenSSL Project + for use in the OpenSSL Toolkit. (http://www.openssl.org/)" + +4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + endorse or promote products derived from this software without + prior written permission. For written permission, please contact + openssl-core@openssl.org. + +5. Products derived from this software may not be called "OpenSSL" + nor may "OpenSSL" appear in their names without prior written + permission of the OpenSSL Project. + +6. Redistributions of any form whatsoever must retain the following + acknowledgment: + "This product includes software developed by the OpenSSL Project + for use in the OpenSSL Toolkit (http://www.openssl.org/)" + +THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY +EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR +ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +boringssl + +Copyright (c) 1998-2003 The OpenSSL Project. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + +3. All advertising materials mentioning features or use of this + software must display the following acknowledgment: + "This product includes software developed by the OpenSSL Project + for use in the OpenSSL Toolkit. (http://www.openssl.org/)" + +4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + endorse or promote products derived from this software without + prior written permission. For written permission, please contact + openssl-core@openssl.org. + +5. Products derived from this software may not be called "OpenSSL" + nor may "OpenSSL" appear in their names without prior written + permission of the OpenSSL Project. + +6. Redistributions of any form whatsoever must retain the following + acknowledgment: + "This product includes software developed by the OpenSSL Project + for use in the OpenSSL Toolkit (http://www.openssl.org/)" + +THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY +EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR +ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +boringssl + +Copyright (c) 1998-2004 The OpenSSL Project. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + +3. All advertising materials mentioning features or use of this + software must display the following acknowledgment: + "This product includes software developed by the OpenSSL Project + for use in the OpenSSL Toolkit. (http://www.openssl.org/)" + +4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + endorse or promote products derived from this software without + prior written permission. For written permission, please contact + openssl-core@openssl.org. + +5. Products derived from this software may not be called "OpenSSL" + nor may "OpenSSL" appear in their names without prior written + permission of the OpenSSL Project. + +6. Redistributions of any form whatsoever must retain the following + acknowledgment: + "This product includes software developed by the OpenSSL Project + for use in the OpenSSL Toolkit (http://www.openssl.org/)" + +THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY +EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR +ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +boringssl + +Copyright (c) 1998-2005 The OpenSSL Project. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + +3. All advertising materials mentioning features or use of this + software must display the following acknowledgment: + "This product includes software developed by the OpenSSL Project + for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" + +4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + endorse or promote products derived from this software without + prior written permission. For written permission, please contact + openssl-core@OpenSSL.org. + +5. Products derived from this software may not be called "OpenSSL" + nor may "OpenSSL" appear in their names without prior written + permission of the OpenSSL Project. + +6. Redistributions of any form whatsoever must retain the following + acknowledgment: + "This product includes software developed by the OpenSSL Project + for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" + +THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY +EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR +ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +boringssl + +Copyright (c) 1998-2005 The OpenSSL Project. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + +3. All advertising materials mentioning features or use of this + software must display the following acknowledgment: + "This product includes software developed by the OpenSSL Project + for use in the OpenSSL Toolkit. (http://www.openssl.org/)" + +4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + endorse or promote products derived from this software without + prior written permission. For written permission, please contact + openssl-core@openssl.org. + +5. Products derived from this software may not be called "OpenSSL" + nor may "OpenSSL" appear in their names without prior written + permission of the OpenSSL Project. + +6. Redistributions of any form whatsoever must retain the following + acknowledgment: + "This product includes software developed by the OpenSSL Project + for use in the OpenSSL Toolkit (http://www.openssl.org/)" + +THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY +EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR +ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +boringssl + +Copyright (c) 1998-2006 The OpenSSL Project. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + +3. All advertising materials mentioning features or use of this + software must display the following acknowledgment: + "This product includes software developed by the OpenSSL Project + for use in the OpenSSL Toolkit. (http://www.openssl.org/)" + +4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + endorse or promote products derived from this software without + prior written permission. For written permission, please contact + openssl-core@openssl.org. + +5. Products derived from this software may not be called "OpenSSL" + nor may "OpenSSL" appear in their names without prior written + permission of the OpenSSL Project. + +6. Redistributions of any form whatsoever must retain the following + acknowledgment: + "This product includes software developed by the OpenSSL Project + for use in the OpenSSL Toolkit (http://www.openssl.org/)" + +THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY +EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR +ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +boringssl + +Copyright (c) 1998-2007 The OpenSSL Project. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + +3. All advertising materials mentioning features or use of this + software must display the following acknowledgment: + "This product includes software developed by the OpenSSL Project + for use in the OpenSSL Toolkit. (http://www.openssl.org/)" + +4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + endorse or promote products derived from this software without + prior written permission. For written permission, please contact + openssl-core@openssl.org. + +5. Products derived from this software may not be called "OpenSSL" + nor may "OpenSSL" appear in their names without prior written + permission of the OpenSSL Project. + +6. Redistributions of any form whatsoever must retain the following + acknowledgment: + "This product includes software developed by the OpenSSL Project + for use in the OpenSSL Toolkit (http://www.openssl.org/)" + +THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY +EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR +ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +boringssl + +Copyright (c) 1998-2011 The OpenSSL Project. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + +3. All advertising materials mentioning features or use of this + software must display the following acknowledgment: + "This product includes software developed by the OpenSSL Project + for use in the OpenSSL Toolkit. (http://www.openssl.org/)" + +4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + endorse or promote products derived from this software without + prior written permission. For written permission, please contact + openssl-core@openssl.org. + +5. Products derived from this software may not be called "OpenSSL" + nor may "OpenSSL" appear in their names without prior written + permission of the OpenSSL Project. + +6. Redistributions of any form whatsoever must retain the following + acknowledgment: + "This product includes software developed by the OpenSSL Project + for use in the OpenSSL Toolkit (http://www.openssl.org/)" + +THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY +EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR +ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +boringssl + +Copyright (c) 1999 The OpenSSL Project. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + +3. All advertising materials mentioning features or use of this + software must display the following acknowledgment: + "This product includes software developed by the OpenSSL Project + for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" + +4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + endorse or promote products derived from this software without + prior written permission. For written permission, please contact + licensing@OpenSSL.org. + +5. Products derived from this software may not be called "OpenSSL" + nor may "OpenSSL" appear in their names without prior written + permission of the OpenSSL Project. + +6. Redistributions of any form whatsoever must retain the following + acknowledgment: + "This product includes software developed by the OpenSSL Project + for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" + +THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY +EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR +ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +boringssl + +Copyright (c) 1999-2002 The OpenSSL Project. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + +3. All advertising materials mentioning features or use of this + software must display the following acknowledgment: + "This product includes software developed by the OpenSSL Project + for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" + +4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + endorse or promote products derived from this software without + prior written permission. For written permission, please contact + licensing@OpenSSL.org. + +5. Products derived from this software may not be called "OpenSSL" + nor may "OpenSSL" appear in their names without prior written + permission of the OpenSSL Project. + +6. Redistributions of any form whatsoever must retain the following + acknowledgment: + "This product includes software developed by the OpenSSL Project + for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" + +THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY +EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR +ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +boringssl + +Copyright (c) 1999-2003 The OpenSSL Project. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + +3. All advertising materials mentioning features or use of this + software must display the following acknowledgment: + "This product includes software developed by the OpenSSL Project + for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" + +4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + endorse or promote products derived from this software without + prior written permission. For written permission, please contact + licensing@OpenSSL.org. + +5. Products derived from this software may not be called "OpenSSL" + nor may "OpenSSL" appear in their names without prior written + permission of the OpenSSL Project. + +6. Redistributions of any form whatsoever must retain the following + acknowledgment: + "This product includes software developed by the OpenSSL Project + for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" + +THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY +EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR +ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +boringssl + +Copyright (c) 1999-2004 The OpenSSL Project. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + +3. All advertising materials mentioning features or use of this + software must display the following acknowledgment: + "This product includes software developed by the OpenSSL Project + for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" + +4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + endorse or promote products derived from this software without + prior written permission. For written permission, please contact + licensing@OpenSSL.org. + +5. Products derived from this software may not be called "OpenSSL" + nor may "OpenSSL" appear in their names without prior written + permission of the OpenSSL Project. + +6. Redistributions of any form whatsoever must retain the following + acknowledgment: + "This product includes software developed by the OpenSSL Project + for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" + +THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY +EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR +ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +boringssl + +Copyright (c) 1999-2005 The OpenSSL Project. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + +3. All advertising materials mentioning features or use of this + software must display the following acknowledgment: + "This product includes software developed by the OpenSSL Project + for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" + +4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + endorse or promote products derived from this software without + prior written permission. For written permission, please contact + openssl-core@OpenSSL.org. + +5. Products derived from this software may not be called "OpenSSL" + nor may "OpenSSL" appear in their names without prior written + permission of the OpenSSL Project. + +6. Redistributions of any form whatsoever must retain the following + acknowledgment: + "This product includes software developed by the OpenSSL Project + for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" + +THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY +EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR +ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +boringssl + +Copyright (c) 1999-2007 The OpenSSL Project. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + +3. All advertising materials mentioning features or use of this + software must display the following acknowledgment: + "This product includes software developed by the OpenSSL Project + for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" + +4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + endorse or promote products derived from this software without + prior written permission. For written permission, please contact + licensing@OpenSSL.org. + +5. Products derived from this software may not be called "OpenSSL" + nor may "OpenSSL" appear in their names without prior written + permission of the OpenSSL Project. + +6. Redistributions of any form whatsoever must retain the following + acknowledgment: + "This product includes software developed by the OpenSSL Project + for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" + +THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY +EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR +ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +boringssl + +Copyright (c) 1999-2008 The OpenSSL Project. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + +3. All advertising materials mentioning features or use of this + software must display the following acknowledgment: + "This product includes software developed by the OpenSSL Project + for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" + +4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + endorse or promote products derived from this software without + prior written permission. For written permission, please contact + licensing@OpenSSL.org. + +5. Products derived from this software may not be called "OpenSSL" + nor may "OpenSSL" appear in their names without prior written + permission of the OpenSSL Project. + +6. Redistributions of any form whatsoever must retain the following + acknowledgment: + "This product includes software developed by the OpenSSL Project + for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" + +THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY +EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR +ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +boringssl + +Copyright (c) 2000 The OpenSSL Project. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + +3. All advertising materials mentioning features or use of this + software must display the following acknowledgment: + "This product includes software developed by the OpenSSL Project + for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" + +4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + endorse or promote products derived from this software without + prior written permission. For written permission, please contact + licensing@OpenSSL.org. + +5. Products derived from this software may not be called "OpenSSL" + nor may "OpenSSL" appear in their names without prior written + permission of the OpenSSL Project. + +6. Redistributions of any form whatsoever must retain the following + acknowledgment: + "This product includes software developed by the OpenSSL Project + for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" + +THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY +EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR +ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +boringssl + +Copyright (c) 2000-2002 The OpenSSL Project. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + +3. All advertising materials mentioning features or use of this + software must display the following acknowledgment: + "This product includes software developed by the OpenSSL Project + for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" + +4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + endorse or promote products derived from this software without + prior written permission. For written permission, please contact + licensing@OpenSSL.org. + +5. Products derived from this software may not be called "OpenSSL" + nor may "OpenSSL" appear in their names without prior written + permission of the OpenSSL Project. + +6. Redistributions of any form whatsoever must retain the following + acknowledgment: + "This product includes software developed by the OpenSSL Project + for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" + +THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY +EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR +ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +boringssl + +Copyright (c) 2000-2003 The OpenSSL Project. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + +3. All advertising materials mentioning features or use of this + software must display the following acknowledgment: + "This product includes software developed by the OpenSSL Project + for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" + +4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + endorse or promote products derived from this software without + prior written permission. For written permission, please contact + licensing@OpenSSL.org. + +5. Products derived from this software may not be called "OpenSSL" + nor may "OpenSSL" appear in their names without prior written + permission of the OpenSSL Project. + +6. Redistributions of any form whatsoever must retain the following + acknowledgment: + "This product includes software developed by the OpenSSL Project + for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" + +THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY +EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR +ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +boringssl + +Copyright (c) 2000-2005 The OpenSSL Project. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + +3. All advertising materials mentioning features or use of this + software must display the following acknowledgment: + "This product includes software developed by the OpenSSL Project + for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" + +4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + endorse or promote products derived from this software without + prior written permission. For written permission, please contact + licensing@OpenSSL.org. + +5. Products derived from this software may not be called "OpenSSL" + nor may "OpenSSL" appear in their names without prior written + permission of the OpenSSL Project. + +6. Redistributions of any form whatsoever must retain the following + acknowledgment: + "This product includes software developed by the OpenSSL Project + for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" + +THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY +EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR +ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +boringssl + +Copyright (c) 2001 The OpenSSL Project. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + +3. All advertising materials mentioning features or use of this + software must display the following acknowledgment: + "This product includes software developed by the OpenSSL Project + for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" + +4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + endorse or promote products derived from this software without + prior written permission. For written permission, please contact + licensing@OpenSSL.org. + +5. Products derived from this software may not be called "OpenSSL" + nor may "OpenSSL" appear in their names without prior written + permission of the OpenSSL Project. + +6. Redistributions of any form whatsoever must retain the following + acknowledgment: + "This product includes software developed by the OpenSSL Project + for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" + +THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY +EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR +ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +boringssl + +Copyright (c) 2001-2011 The OpenSSL Project. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + +3. All advertising materials mentioning features or use of this + software must display the following acknowledgment: + "This product includes software developed by the OpenSSL Project + for use in the OpenSSL Toolkit. (http://www.openssl.org/)" + +4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + endorse or promote products derived from this software without + prior written permission. For written permission, please contact + openssl-core@openssl.org. + +5. Products derived from this software may not be called "OpenSSL" + nor may "OpenSSL" appear in their names without prior written + permission of the OpenSSL Project. + +6. Redistributions of any form whatsoever must retain the following + acknowledgment: + "This product includes software developed by the OpenSSL Project + for use in the OpenSSL Toolkit (http://www.openssl.org/)" + +THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY +EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR +ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +boringssl + +Copyright (c) 2002-2006 The OpenSSL Project. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + +3. All advertising materials mentioning features or use of this + software must display the following acknowledgment: + "This product includes software developed by the OpenSSL Project + for use in the OpenSSL Toolkit. (http://www.openssl.org/)" + +4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + endorse or promote products derived from this software without + prior written permission. For written permission, please contact + openssl-core@openssl.org. + +5. Products derived from this software may not be called "OpenSSL" + nor may "OpenSSL" appear in their names without prior written + permission of the OpenSSL Project. + +6. Redistributions of any form whatsoever must retain the following + acknowledgment: + "This product includes software developed by the OpenSSL Project + for use in the OpenSSL Toolkit (http://www.openssl.org/)" + +THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY +EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR +ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +boringssl + +Copyright (c) 2003 The OpenSSL Project. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + +3. All advertising materials mentioning features or use of this + software must display the following acknowledgment: + "This product includes software developed by the OpenSSL Project + for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" + +4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + endorse or promote products derived from this software without + prior written permission. For written permission, please contact + licensing@OpenSSL.org. + +5. Products derived from this software may not be called "OpenSSL" + nor may "OpenSSL" appear in their names without prior written + permission of the OpenSSL Project. + +6. Redistributions of any form whatsoever must retain the following + acknowledgment: + "This product includes software developed by the OpenSSL Project + for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" + +THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY +EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR +ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +boringssl + +Copyright (c) 2004 The OpenSSL Project. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + +3. All advertising materials mentioning features or use of this + software must display the following acknowledgment: + "This product includes software developed by the OpenSSL Project + for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" + +4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + endorse or promote products derived from this software without + prior written permission. For written permission, please contact + licensing@OpenSSL.org. + +5. Products derived from this software may not be called "OpenSSL" + nor may "OpenSSL" appear in their names without prior written + permission of the OpenSSL Project. + +6. Redistributions of any form whatsoever must retain the following + acknowledgment: + "This product includes software developed by the OpenSSL Project + for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" + +THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY +EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR +ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +boringssl + +Copyright (c) 2005 The OpenSSL Project. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + +3. All advertising materials mentioning features or use of this + software must display the following acknowledgment: + "This product includes software developed by the OpenSSL Project + for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" + +4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + endorse or promote products derived from this software without + prior written permission. For written permission, please contact + licensing@OpenSSL.org. + +5. Products derived from this software may not be called "OpenSSL" + nor may "OpenSSL" appear in their names without prior written + permission of the OpenSSL Project. + +6. Redistributions of any form whatsoever must retain the following + acknowledgment: + "This product includes software developed by the OpenSSL Project + for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" + +THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY +EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR +ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +boringssl + +Copyright (c) 2006 The OpenSSL Project. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + +3. All advertising materials mentioning features or use of this + software must display the following acknowledgment: + "This product includes software developed by the OpenSSL Project + for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" + +4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + endorse or promote products derived from this software without + prior written permission. For written permission, please contact + licensing@OpenSSL.org. + +5. Products derived from this software may not be called "OpenSSL" + nor may "OpenSSL" appear in their names without prior written + permission of the OpenSSL Project. + +6. Redistributions of any form whatsoever must retain the following + acknowledgment: + "This product includes software developed by the OpenSSL Project + for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" + +THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY +EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR +ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +boringssl + +Copyright (c) 2006,2007 The OpenSSL Project. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + +3. All advertising materials mentioning features or use of this + software must display the following acknowledgment: + "This product includes software developed by the OpenSSL Project + for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" + +4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + endorse or promote products derived from this software without + prior written permission. For written permission, please contact + licensing@OpenSSL.org. + +5. Products derived from this software may not be called "OpenSSL" + nor may "OpenSSL" appear in their names without prior written + permission of the OpenSSL Project. + +6. Redistributions of any form whatsoever must retain the following + acknowledgment: + "This product includes software developed by the OpenSSL Project + for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" + +THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY +EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR +ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +boringssl + +Copyright (c) 2008 The OpenSSL Project. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + +3. All advertising materials mentioning features or use of this + software must display the following acknowledgment: + "This product includes software developed by the OpenSSL Project + for use in the OpenSSL Toolkit. (http://www.openssl.org/)" + +4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + endorse or promote products derived from this software without + prior written permission. For written permission, please contact + openssl-core@openssl.org. + +5. Products derived from this software may not be called "OpenSSL" + nor may "OpenSSL" appear in their names without prior written + permission of the OpenSSL Project. + +6. Redistributions of any form whatsoever must retain the following + acknowledgment: + "This product includes software developed by the OpenSSL Project + for use in the OpenSSL Toolkit (http://www.openssl.org/)" + +THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY +EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR +ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +boringssl + +Copyright (c) 2010 The OpenSSL Project. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + +3. All advertising materials mentioning features or use of this + software must display the following acknowledgment: + "This product includes software developed by the OpenSSL Project + for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" + +4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + endorse or promote products derived from this software without + prior written permission. For written permission, please contact + licensing@OpenSSL.org. + +5. Products derived from this software may not be called "OpenSSL" + nor may "OpenSSL" appear in their names without prior written + permission of the OpenSSL Project. + +6. Redistributions of any form whatsoever must retain the following + acknowledgment: + "This product includes software developed by the OpenSSL Project + for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" + +THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY +EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR +ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +boringssl + +Copyright (c) 2011 The OpenSSL Project. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + +3. All advertising materials mentioning features or use of this + software must display the following acknowledgment: + "This product includes software developed by the OpenSSL Project + for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" + +4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + endorse or promote products derived from this software without + prior written permission. For written permission, please contact + licensing@OpenSSL.org. + +5. Products derived from this software may not be called "OpenSSL" + nor may "OpenSSL" appear in their names without prior written + permission of the OpenSSL Project. + +6. Redistributions of any form whatsoever must retain the following + acknowledgment: + "This product includes software developed by the OpenSSL Project + for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" + +THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY +EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR +ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +boringssl + +Copyright (c) 2011 The OpenSSL Project. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + +3. All advertising materials mentioning features or use of this + software must display the following acknowledgment: + "This product includes software developed by the OpenSSL Project + for use in the OpenSSL Toolkit. (http://www.openssl.org/)" + +4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + endorse or promote products derived from this software without + prior written permission. For written permission, please contact + openssl-core@openssl.org. + +5. Products derived from this software may not be called "OpenSSL" + nor may "OpenSSL" appear in their names without prior written + permission of the OpenSSL Project. + +6. Redistributions of any form whatsoever must retain the following + acknowledgment: + "This product includes software developed by the OpenSSL Project + for use in the OpenSSL Toolkit (http://www.openssl.org/)" + +THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY +EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR +ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +boringssl + +Copyright (c) 2012 The OpenSSL Project. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + +3. All advertising materials mentioning features or use of this + software must display the following acknowledgment: + "This product includes software developed by the OpenSSL Project + for use in the OpenSSL Toolkit. (http://www.openssl.org/)" + +4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + endorse or promote products derived from this software without + prior written permission. For written permission, please contact + openssl-core@openssl.org. + +5. Products derived from this software may not be called "OpenSSL" + nor may "OpenSSL" appear in their names without prior written + permission of the OpenSSL Project. + +6. Redistributions of any form whatsoever must retain the following + acknowledgment: + "This product includes software developed by the OpenSSL Project + for use in the OpenSSL Toolkit (http://www.openssl.org/)" + +THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY +EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR +ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +boringssl + +Copyright (c) 2013 The OpenSSL Project. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + +3. All advertising materials mentioning features or use of this + software must display the following acknowledgment: + "This product includes software developed by the OpenSSL Project + for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" + +4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + endorse or promote products derived from this software without + prior written permission. For written permission, please contact + licensing@OpenSSL.org. + +5. Products derived from this software may not be called "OpenSSL" + nor may "OpenSSL" appear in their names without prior written + permission of the OpenSSL Project. + +6. Redistributions of any form whatsoever must retain the following + acknowledgment: + "This product includes software developed by the OpenSSL Project + for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" + +THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY +EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR +ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +boringssl + +Copyright (c) 2014, Google Inc. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY +SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +-------------------------------------------------------------------------------- +boringssl + +Copyright (c) 2015, Google Inc. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY +SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +-------------------------------------------------------------------------------- +boringssl + +Copyright (c) 2016, Google Inc. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY +SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +-------------------------------------------------------------------------------- +boringssl + +Copyright (c) 2017, Google Inc. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY +SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +-------------------------------------------------------------------------------- +boringssl + +Copyright (c) 2017, the HRSS authors. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY +SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +-------------------------------------------------------------------------------- +boringssl + +Copyright (c) 2018, Google Inc. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY +SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +-------------------------------------------------------------------------------- +boringssl + +Copyright (c) 2018, Google Inc. +Copyright (c) 2020, Arm Ltd. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY +SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +-------------------------------------------------------------------------------- +boringssl + +Copyright (c) 2019, Google Inc. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY +SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +-------------------------------------------------------------------------------- +boringssl + +Copyright (c) 2020, Google Inc. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY +SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +-------------------------------------------------------------------------------- +boringssl + +Copyright (c) 2021, Google Inc. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY +SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +-------------------------------------------------------------------------------- +boringssl + +Copyright (c) 2022, Google Inc. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY +SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +-------------------------------------------------------------------------------- +boringssl + +Copyright (c) 2023, Google Inc. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY +SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +-------------------------------------------------------------------------------- +boringssl + +Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + +Licensed under the OpenSSL license (the "License"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file LICENSE in the source distribution or at +https://www.openssl.org/source/license.html +-------------------------------------------------------------------------------- +boringssl + +Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. + +Licensed under the OpenSSL license (the "License"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file LICENSE in the source distribution or at +https://www.openssl.org/source/license.html +-------------------------------------------------------------------------------- +boringssl + +Copyright 2001-2017 The OpenSSL Project Authors. All Rights Reserved. + +Licensed under the OpenSSL license (the "License"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file LICENSE in the source distribution or at +https://www.openssl.org/source/license.html +-------------------------------------------------------------------------------- +boringssl + +Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. + +Portions of the attached software ("Contribution") are developed by +SUN MICROSYSTEMS, INC., and are contributed to the OpenSSL project. + +The Contribution is licensed pursuant to the Eric Young open source +license provided above. +-------------------------------------------------------------------------------- +boringssl + +Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. + +Portions of the attached software ("Contribution") are developed by +SUN MICROSYSTEMS, INC., and are contributed to the OpenSSL project. + +The Contribution is licensed pursuant to the OpenSSL open source +license provided above. +-------------------------------------------------------------------------------- +boringssl + +Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + +3. All advertising materials mentioning features or use of this + software must display the following acknowledgment: + "This product includes software developed by the OpenSSL Project + for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" + +4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + endorse or promote products derived from this software without + prior written permission. For written permission, please contact + licensing@OpenSSL.org. + +5. Products derived from this software may not be called "OpenSSL" + nor may "OpenSSL" appear in their names without prior written + permission of the OpenSSL Project. + +6. Redistributions of any form whatsoever must retain the following + acknowledgment: + "This product includes software developed by the OpenSSL Project + for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" + +THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY +EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR +ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +boringssl + +Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. +ECC cipher suite support in OpenSSL originally developed by +SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project. +-------------------------------------------------------------------------------- +boringssl + +Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. +ECDH support in OpenSSL originally developed by +SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project. +-------------------------------------------------------------------------------- +boringssl + +Copyright 2005 Nokia. All rights reserved. + +The portions of the attached software ("Contribution") is developed by +Nokia Corporation and is licensed pursuant to the OpenSSL open source +license. + +The Contribution, originally written by Mika Kousa and Pasi Eronen of +Nokia Corporation, consists of the "PSK" (Pre-Shared Key) ciphersuites +support (see RFC 4279) to OpenSSL. + +No patent licenses or other rights except those expressly stated in +the OpenSSL open source license shall be deemed granted or received +expressly, by implication, estoppel, or otherwise. + +No assurances are provided by Nokia that the Contribution does not +infringe the patent or other intellectual property rights of any third +party or that the license provides you with all the necessary rights +to make use of the Contribution. + +THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. IN +ADDITION TO THE DISCLAIMERS INCLUDED IN THE LICENSE, NOKIA +SPECIFICALLY DISCLAIMS ANY LIABILITY FOR CLAIMS BROUGHT BY YOU OR ANY +OTHER ENTITY BASED ON INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS OR +OTHERWISE. +-------------------------------------------------------------------------------- +boringssl + +Copyright 2006-2017 The OpenSSL Project Authors. All Rights Reserved. + +Licensed under the OpenSSL license (the "License"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file LICENSE in the source distribution or at +https://www.openssl.org/source/license.html +-------------------------------------------------------------------------------- +boringssl + +Copyright 2007-2016 The OpenSSL Project Authors. All Rights Reserved. + +Licensed under the OpenSSL license (the "License"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file LICENSE in the source distribution or at +https://www.openssl.org/source/license.html +-------------------------------------------------------------------------------- +boringssl + +Copyright 2012-2016 The OpenSSL Project Authors. All Rights Reserved. + +Licensed under the OpenSSL license (the "License"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file LICENSE in the source distribution or at +https://www.openssl.org/source/license.html +-------------------------------------------------------------------------------- +boringssl + +Copyright 2013-2016 The OpenSSL Project Authors. All Rights Reserved. +Copyright (c) 2012, Intel Corporation. All Rights Reserved. + +Licensed under the OpenSSL license (the "License"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file LICENSE in the source distribution or at +https://www.openssl.org/source/license.html +-------------------------------------------------------------------------------- +boringssl + +Copyright 2014-2016 The OpenSSL Project Authors. All Rights Reserved. + +Licensed under the OpenSSL license (the "License"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file LICENSE in the source distribution or at +https://www.openssl.org/source/license.html +-------------------------------------------------------------------------------- +boringssl + +Copyright 2014-2016 The OpenSSL Project Authors. All Rights Reserved. +Copyright (c) 2014, Intel Corporation. All Rights Reserved. + +Licensed under the OpenSSL license (the "License"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file LICENSE in the source distribution or at +https://www.openssl.org/source/license.html +-------------------------------------------------------------------------------- +boringssl + +Copyright 2014-2016 The OpenSSL Project Authors. All Rights Reserved. +Copyright (c) 2015, Intel Inc. + +Licensed under the OpenSSL license (the "License"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file LICENSE in the source distribution or at +https://www.openssl.org/source/license.html +-------------------------------------------------------------------------------- +boringssl + +Copyright 2014-2020 The OpenSSL Project Authors. All Rights Reserved. + +Licensed under the OpenSSL license (the "License"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file LICENSE in the source distribution or at +https://www.openssl.org/source/license.html +-------------------------------------------------------------------------------- +boringssl + +Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved. + +Licensed under the OpenSSL license (the "License"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file LICENSE in the source distribution or at +https://www.openssl.org/source/license.html +-------------------------------------------------------------------------------- +boringssl + +Copyright 2016 Brian Smith. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY +SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +-------------------------------------------------------------------------------- +boringssl + +Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY +SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +-------------------------------------------------------------------------------- +boringssl + +DTLS code by Eric Rescorla + +Copyright (C) 2006, Network Resonance, Inc. +Copyright (C) 2011, RTFM, Inc. +-------------------------------------------------------------------------------- +boringssl + +OpenSSL License +--------------- + +Copyright (c) 1998-2011 The OpenSSL Project. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + +3. All advertising materials mentioning features or use of this + software must display the following acknowledgment: + "This product includes software developed by the OpenSSL Project + for use in the OpenSSL Toolkit. (http://www.openssl.org/)" + +4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + endorse or promote products derived from this software without + prior written permission. For written permission, please contact + openssl-core@openssl.org. + +5. Products derived from this software may not be called "OpenSSL" + nor may "OpenSSL" appear in their names without prior written + permission of the OpenSSL Project. + +6. Redistributions of any form whatsoever must retain the following + acknowledgment: + "This product includes software developed by the OpenSSL Project + for use in the OpenSSL Toolkit (http://www.openssl.org/)" + +THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY +EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR +ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +OF THE POSSIBILITY OF SUCH DAMAGE. + + +This product includes cryptographic software written by Eric Young +(eay@cryptsoft.com). This product includes software written by Tim +Hudson (tjh@cryptsoft.com). + +Original SSLeay License +----------------------- + +Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) +All rights reserved. + +This package is an SSL implementation written +by Eric Young (eay@cryptsoft.com). +The implementation was written so as to conform with Netscapes SSL. + +This library is free for commercial and non-commercial use as long as +the following conditions are aheared to. The following conditions +apply to all code found in this distribution, be it the RC4, RSA, +lhash, DES, etc., code; not just the SSL code. The SSL documentation +included with this distribution is covered by the same copyright terms +except that the holder is Tim Hudson (tjh@cryptsoft.com). + +Copyright remains Eric Young's, and as such any Copyright notices in +the code are not to be removed. +If this package is used in a product, Eric Young should be given attribution +as the author of the parts of the library used. +This can be in the form of a textual message at program startup or +in documentation (online or textual) provided with the package. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. All advertising materials mentioning features or use of this software + must display the following acknowledgement: + "This product includes cryptographic software written by + Eric Young (eay@cryptsoft.com)" + The word 'cryptographic' can be left out if the rouines from the library + being used are not cryptographic related :-). +4. If you include any Windows specific code (or a derivative thereof) from + the apps directory (application code) you must include an acknowledgement: + "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + +THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +The licence and distribution terms for any publically available version or +derivative of this code cannot be changed. i.e. this code cannot simply be +copied and put under another distribution licence +[including the GNU Public Licence.] + +ISC license used for completely new code in BoringSSL: + +Copyright (c) 2015, Google Inc. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY +SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +The code in third_party/fiat carries the MIT license: + +Copyright (c) 2015-2016 the fiat-crypto authors (see +https://github.com/mit-plv/fiat-crypto/blob/master/AUTHORS). + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +Licenses for support code +------------------------- + +Parts of the TLS test suite are under the Go license. This code is not included +in BoringSSL (i.e. libcrypto and libssl) when compiled, however, so +distributing code linked against BoringSSL does not trigger this license: + +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +BoringSSL uses the Chromium test infrastructure to run a continuous build, +trybots etc. The scripts which manage this, and the script for generating build +metadata, are under the Chromium license. Distributing code linked against +BoringSSL does not trigger this license. + +Copyright 2015 The Chromium Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +ceval + +Copyright (c) 2021 e_t + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +-------------------------------------------------------------------------------- +characters +ffi + +Copyright 2019, the Dart project authors. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google LLC nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +-------------------------------------------------------------------------------- +clock +fake_async +material_color_utilities + + + 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. +-------------------------------------------------------------------------------- +crypto + +Copyright 2015, the Dart project authors. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google LLC nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +-------------------------------------------------------------------------------- +cupertino_icons + +The MIT License (MIT) + +Copyright (c) 2016 Vladimir Kharlampidi + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +-------------------------------------------------------------------------------- +dart + +Copyright (c) 2003-2005 Tom Wu +Copyright (c) 2012 Adam Singer (adam@solvr.io) +All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, +EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY +WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + +IN NO EVENT SHALL TOM WU BE LIABLE FOR ANY SPECIAL, INCIDENTAL, +INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER +RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR NOT ADVISED OF +THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF LIABILITY, ARISING OUT +OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +In addition, the following condition applies: + +All redistributions must retain an intact copy of this copyright notice +and disclaimer. +-------------------------------------------------------------------------------- +dart + +Copyright (c) 2010, the Dart project authors. Please see the AUTHORS file +for details. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google LLC nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +dart + +Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file +for details. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google LLC nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +dart + +Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file +for details. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google LLC nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +dart + +Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file +for details. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google LLC nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +dart + +Copyright (c) 2014 The Polymer Project Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +dart + +Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file +for details. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google LLC nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +dart + +Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file +for details. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google LLC nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +dart + +Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file +for details. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google LLC nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +dart + +Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file +for details. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google LLC nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +dart + +Copyright (c) 2018, the Dart project authors. Please see the AUTHORS file +for details. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google LLC nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +dart + +Copyright (c) 2018, the Dart project authors. Please see the AUTHORS file +for details. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google LLC nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +dart + +Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file +for details. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google LLC nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +dart + +Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file +for details. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google LLC nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +dart + +Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file +for details. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google LLC nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +dart + +Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file +for details. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google LLC nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +dart + +Copyright (c) 2022, the Dart project authors. Please see the AUTHORS file +for details. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google LLC nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +dart + +Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file +for details. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google LLC nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +dart + +Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file +for details. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google LLC nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +dart + +Copyright 2012, the Dart project authors. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google LLC nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +dartx + + + 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 2019 Simon Leier + + 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. +-------------------------------------------------------------------------------- +double-conversion +icu + +Copyright 2006-2008 the V8 project authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google Inc. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +double-conversion +icu + +Copyright 2010 the V8 project authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google Inc. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +double-conversion +icu + +Copyright 2012 the V8 project authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google Inc. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +engine + +License for the Ahem font embedded below is from: +https://www.w3.org/Style/CSS/Test/Fonts/Ahem/COPYING + +The Ahem font in this directory belongs to the public domain. In +jurisdictions that do not recognize public domain ownership of these +files, the following Creative Commons Zero declaration applies: + + + +which is quoted below: + + The person who has associated a work with this document (the "Work") + affirms that he or she (the "Affirmer") is the/an author or owner of + the Work. The Work may be any work of authorship, including a + database. + + The Affirmer hereby fully, permanently and irrevocably waives and + relinquishes all of her or his copyright and related or neighboring + legal rights in the Work available under any federal or state law, + treaty or contract, including but not limited to moral rights, + publicity and privacy rights, rights protecting against unfair + competition and any rights protecting the extraction, dissemination + and reuse of data, whether such rights are present or future, vested + or contingent (the "Waiver"). The Affirmer makes the Waiver for the + benefit of the public at large and to the detriment of the Affirmer's + heirs or successors. + + The Affirmer understands and intends that the Waiver has the effect + of eliminating and entirely removing from the Affirmer's control all + the copyright and related or neighboring legal rights previously held + by the Affirmer in the Work, to that extent making the Work freely + available to the public for any and all uses and purposes without + restriction of any kind, including commercial use and uses in media + and formats or by methods that have not yet been invented or + conceived. Should the Waiver for any reason be judged legally + ineffective in any jurisdiction, the Affirmer hereby grants a free, + full, permanent, irrevocable, nonexclusive and worldwide license for + all her or his copyright and related or neighboring legal rights in + the Work. +-------------------------------------------------------------------------------- +equatable + +MIT License + +Copyright (c) 2018 Felix Angelov + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +-------------------------------------------------------------------------------- +etc_decoder + +Copyright (c) 2020-2022 Hans-Kristian Arntzen + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +-------------------------------------------------------------------------------- +expat + +Copyright (c) 1997-2000 Thai Open Source Software Center Ltd +Copyright (c) 2000 Clark Cooper +Copyright (c) 2000-2004 Fred L. Drake, Jr. +Copyright (c) 2001-2002 Greg Stein +Copyright (c) 2002-2006 Karl Waclawek +Copyright (c) 2016 Cristian Rodríguez +Copyright (c) 2016-2019 Sebastian Pipping +Copyright (c) 2017 Rhodri James +Copyright (c) 2018 Yury Gribov + +Licensed under the MIT license: + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the +following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +USE OR OTHER DEALINGS IN THE SOFTWARE. +-------------------------------------------------------------------------------- +expat + +Copyright (c) 1997-2000 Thai Open Source Software Center Ltd +Copyright (c) 2000 Clark Cooper +Copyright (c) 2000-2005 Fred L. Drake, Jr. +Copyright (c) 2001-2002 Greg Stein +Copyright (c) 2002-2016 Karl Waclawek +Copyright (c) 2016-2022 Sebastian Pipping +Copyright (c) 2016 Cristian Rodríguez +Copyright (c) 2016 Thomas Beutlich +Copyright (c) 2017 Rhodri James +Copyright (c) 2022 Thijs Schreijer + +Licensed under the MIT license: + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the +following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +USE OR OTHER DEALINGS IN THE SOFTWARE. +-------------------------------------------------------------------------------- +expat + +Copyright (c) 1997-2000 Thai Open Source Software Center Ltd +Copyright (c) 2000 Clark Cooper +Copyright (c) 2000-2006 Fred L. Drake, Jr. +Copyright (c) 2001-2002 Greg Stein +Copyright (c) 2002-2016 Karl Waclawek +Copyright (c) 2005-2009 Steven Solie +Copyright (c) 2016 Eric Rahm +Copyright (c) 2016-2022 Sebastian Pipping +Copyright (c) 2016 Gaurav +Copyright (c) 2016 Thomas Beutlich +Copyright (c) 2016 Gustavo Grieco +Copyright (c) 2016 Pascal Cuoq +Copyright (c) 2016 Ed Schouten +Copyright (c) 2017-2022 Rhodri James +Copyright (c) 2017 Václav Slavík +Copyright (c) 2017 Viktor Szakats +Copyright (c) 2017 Chanho Park +Copyright (c) 2017 Rolf Eike Beer +Copyright (c) 2017 Hans Wennborg +Copyright (c) 2018 Anton Maklakov +Copyright (c) 2018 Benjamin Peterson +Copyright (c) 2018 Marco Maggi +Copyright (c) 2018 Mariusz Zaborski +Copyright (c) 2019 David Loffredo +Copyright (c) 2019-2020 Ben Wagner +Copyright (c) 2019 Vadim Zeitlin +Copyright (c) 2021 Dong-hee Na +Copyright (c) 2022 Samanta Navarro +Copyright (c) 2022 Jeffrey Walton +Copyright (c) 2022 Jann Horn + +Licensed under the MIT license: + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the +following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +USE OR OTHER DEALINGS IN THE SOFTWARE. +-------------------------------------------------------------------------------- +expat + +Copyright (c) 1997-2000 Thai Open Source Software Center Ltd +Copyright (c) 2000 Clark Cooper +Copyright (c) 2001-2002 Fred L. Drake, Jr. +Copyright (c) 2006 Karl Waclawek +Copyright (c) 2016-2017 Sebastian Pipping +Copyright (c) 2017 Rhodri James + +Licensed under the MIT license: + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the +following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +USE OR OTHER DEALINGS IN THE SOFTWARE. +-------------------------------------------------------------------------------- +expat + +Copyright (c) 1997-2000 Thai Open Source Software Center Ltd +Copyright (c) 2000 Clark Cooper +Copyright (c) 2001-2003 Fred L. Drake, Jr. +Copyright (c) 2002 Greg Stein +Copyright (c) 2002-2016 Karl Waclawek +Copyright (c) 2005-2009 Steven Solie +Copyright (c) 2016-2022 Sebastian Pipping +Copyright (c) 2016 Pascal Cuoq +Copyright (c) 2016 Don Lewis +Copyright (c) 2017 Rhodri James +Copyright (c) 2017 Alexander Bluhm +Copyright (c) 2017 Benbuck Nason +Copyright (c) 2017 José Gutiérrez de la Concha +Copyright (c) 2019 David Loffredo +Copyright (c) 2021 Dong-hee Na +Copyright (c) 2022 Martin Ettl + +Licensed under the MIT license: + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the +following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +USE OR OTHER DEALINGS IN THE SOFTWARE. +-------------------------------------------------------------------------------- +expat + +Copyright (c) 1997-2000 Thai Open Source Software Center Ltd +Copyright (c) 2000 Clark Cooper +Copyright (c) 2001-2003 Fred L. Drake, Jr. +Copyright (c) 2004-2009 Karl Waclawek +Copyright (c) 2005-2007 Steven Solie +Copyright (c) 2016-2022 Sebastian Pipping +Copyright (c) 2017 Rhodri James +Copyright (c) 2019 David Loffredo +Copyright (c) 2020 Joe Orton +Copyright (c) 2020 Kleber Tarcísio +Copyright (c) 2021 Tim Bray +Copyright (c) 2022 Martin Ettl + +Licensed under the MIT license: + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the +following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +USE OR OTHER DEALINGS IN THE SOFTWARE. +-------------------------------------------------------------------------------- +expat + +Copyright (c) 1997-2000 Thai Open Source Software Center Ltd +Copyright (c) 2000 Clark Cooper +Copyright (c) 2001-2004 Fred L. Drake, Jr. +Copyright (c) 2002-2009 Karl Waclawek +Copyright (c) 2016-2017 Sebastian Pipping +Copyright (c) 2017 Rhodri James +Copyright (c) 2017 Franek Korta + +Licensed under the MIT license: + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the +following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +USE OR OTHER DEALINGS IN THE SOFTWARE. +-------------------------------------------------------------------------------- +expat + +Copyright (c) 1997-2000 Thai Open Source Software Center Ltd +Copyright (c) 2000 Clark Cooper +Copyright (c) 2002 Fred L. Drake, Jr. +Copyright (c) 2002-2005 Karl Waclawek +Copyright (c) 2016-2017 Sebastian Pipping +Copyright (c) 2017 Rhodri James + +Licensed under the MIT license: + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the +following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +USE OR OTHER DEALINGS IN THE SOFTWARE. +-------------------------------------------------------------------------------- +expat + +Copyright (c) 1997-2000 Thai Open Source Software Center Ltd +Copyright (c) 2000 Clark Cooper +Copyright (c) 2002 Fred L. Drake, Jr. +Copyright (c) 2002-2016 Karl Waclawek +Copyright (c) 2016-2022 Sebastian Pipping +Copyright (c) 2017 Rhodri James +Copyright (c) 2018 Benjamin Peterson +Copyright (c) 2018 Anton Maklakov +Copyright (c) 2019 David Loffredo +Copyright (c) 2020 Boris Kolpackov +Copyright (c) 2022 Martin Ettl + +Licensed under the MIT license: + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the +following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +USE OR OTHER DEALINGS IN THE SOFTWARE. +-------------------------------------------------------------------------------- +expat + +Copyright (c) 1997-2000 Thai Open Source Software Center Ltd +Copyright (c) 2000 Clark Cooper +Copyright (c) 2002 Fred L. Drake, Jr. +Copyright (c) 2005 Karl Waclawek +Copyright (c) 2016-2019 Sebastian Pipping + +Licensed under the MIT license: + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the +following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +USE OR OTHER DEALINGS IN THE SOFTWARE. +-------------------------------------------------------------------------------- +expat + +Copyright (c) 1997-2000 Thai Open Source Software Center Ltd +Copyright (c) 2000 Clark Cooper +Copyright (c) 2002 Fred L. Drake, Jr. +Copyright (c) 2005-2006 Karl Waclawek +Copyright (c) 2016-2019 Sebastian Pipping +Copyright (c) 2019 David Loffredo + +Licensed under the MIT license: + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the +following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +USE OR OTHER DEALINGS IN THE SOFTWARE. +-------------------------------------------------------------------------------- +expat + +Copyright (c) 1997-2000 Thai Open Source Software Center Ltd +Copyright (c) 2000 Clark Cooper +Copyright (c) 2002 Fred L. Drake, Jr. +Copyright (c) 2016-2017 Sebastian Pipping + +Licensed under the MIT license: + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the +following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +USE OR OTHER DEALINGS IN THE SOFTWARE. +-------------------------------------------------------------------------------- +expat + +Copyright (c) 1997-2000 Thai Open Source Software Center Ltd +Copyright (c) 2000 Clark Cooper +Copyright (c) 2002 Fred L. Drake, Jr. +Copyright (c) 2016-2022 Sebastian Pipping +Copyright (c) 2022 Martin Ettl + +Licensed under the MIT license: + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the +following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +USE OR OTHER DEALINGS IN THE SOFTWARE. +-------------------------------------------------------------------------------- +expat + +Copyright (c) 1997-2000 Thai Open Source Software Center Ltd +Copyright (c) 2000 Clark Cooper +Copyright (c) 2002 Fred L. Drake, Jr. +Copyright (c) 2017 Sebastian Pipping + +Licensed under the MIT license: + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the +following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +USE OR OTHER DEALINGS IN THE SOFTWARE. +-------------------------------------------------------------------------------- +expat + +Copyright (c) 1997-2000 Thai Open Source Software Center Ltd +Copyright (c) 2000 Clark Cooper +Copyright (c) 2002 Greg Stein +Copyright (c) 2002 Fred L. Drake, Jr. +Copyright (c) 2002-2006 Karl Waclawek +Copyright (c) 2017-2021 Sebastian Pipping + +Licensed under the MIT license: + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the +following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +USE OR OTHER DEALINGS IN THE SOFTWARE. +-------------------------------------------------------------------------------- +expat + +Copyright (c) 1997-2000 Thai Open Source Software Center Ltd +Copyright (c) 2000 Clark Cooper +Copyright (c) 2002 Greg Stein +Copyright (c) 2002-2006 Karl Waclawek +Copyright (c) 2002-2003 Fred L. Drake, Jr. +Copyright (c) 2005-2009 Steven Solie +Copyright (c) 2016-2021 Sebastian Pipping +Copyright (c) 2017 Rhodri James +Copyright (c) 2019 David Loffredo +Copyright (c) 2021 Dong-hee Na + +Licensed under the MIT license: + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the +following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +USE OR OTHER DEALINGS IN THE SOFTWARE. +-------------------------------------------------------------------------------- +expat + +Copyright (c) 1997-2000 Thai Open Source Software Center Ltd +Copyright (c) 2000 Clark Cooper +Copyright (c) 2002 Karl Waclawek +Copyright (c) 2002 Fred L. Drake, Jr. +Copyright (c) 2017 Sebastian Pipping + +Licensed under the MIT license: + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the +following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +USE OR OTHER DEALINGS IN THE SOFTWARE. +-------------------------------------------------------------------------------- +expat + +Copyright (c) 1997-2000 Thai Open Source Software Center Ltd +Copyright (c) 2000 Clark Cooper +Copyright (c) 2002-2003 Fred L. Drake, Jr. +Copyright (c) 2004-2006 Karl Waclawek +Copyright (c) 2005-2007 Steven Solie +Copyright (c) 2016-2021 Sebastian Pipping +Copyright (c) 2017 Rhodri James +Copyright (c) 2019 David Loffredo +Copyright (c) 2021 Dong-hee Na + +Licensed under the MIT license: + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the +following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +USE OR OTHER DEALINGS IN THE SOFTWARE. +-------------------------------------------------------------------------------- +expat + +Copyright (c) 1997-2000 Thai Open Source Software Center Ltd +Copyright (c) 2000 Clark Cooper +Copyright (c) 2017-2019 Sebastian Pipping + +Licensed under the MIT license: + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the +following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +USE OR OTHER DEALINGS IN THE SOFTWARE. +-------------------------------------------------------------------------------- +expat + +Copyright (c) 1997-2000 Thai Open Source Software Center Ltd +Copyright (c) 2002 Fred L. Drake, Jr. +Copyright (c) 2016-2017 Sebastian Pipping + +Licensed under the MIT license: + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the +following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +USE OR OTHER DEALINGS IN THE SOFTWARE. +-------------------------------------------------------------------------------- +expat + +Copyright (c) 1997-2000 Thai Open Source Software Center Ltd +Copyright (c) 2002 Fred L. Drake, Jr. +Copyright (c) 2016-2018 Sebastian Pipping +Copyright (c) 2018 Marco Maggi + +Licensed under the MIT license: + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the +following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +USE OR OTHER DEALINGS IN THE SOFTWARE. +-------------------------------------------------------------------------------- +expat + +Copyright (c) 1997-2000 Thai Open Source Software Center Ltd +Copyright (c) 2016-2021 Sebastian Pipping +Copyright (c) 2017 Rhodri James + +Licensed under the MIT license: + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the +following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +USE OR OTHER DEALINGS IN THE SOFTWARE. +-------------------------------------------------------------------------------- +expat + +Copyright (c) 1998-2000 Thai Open Source Software Center Ltd and Clark Cooper +Copyright (c) 2001-2022 Expat maintainers + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +-------------------------------------------------------------------------------- +expat + +Copyright (c) 1999-2000 Thai Open Source Software Center Ltd +Copyright (c) 2000 Clark Cooper +Copyright (c) 2002 Fred L. Drake, Jr. +Copyright (c) 2007 Karl Waclawek +Copyright (c) 2017 Sebastian Pipping + +Licensed under the MIT license: + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the +following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +USE OR OTHER DEALINGS IN THE SOFTWARE. +-------------------------------------------------------------------------------- +expat + +Copyright (c) 2000 Clark Cooper +Copyright (c) 2002 Greg Stein +Copyright (c) 2005 Karl Waclawek +Copyright (c) 2017-2021 Sebastian Pipping + +Licensed under the MIT license: + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the +following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +USE OR OTHER DEALINGS IN THE SOFTWARE. +-------------------------------------------------------------------------------- +expat + +Copyright (c) 2000 Clark Cooper +Copyright (c) 2017 Sebastian Pipping + +Licensed under the MIT license: + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the +following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +USE OR OTHER DEALINGS IN THE SOFTWARE. +-------------------------------------------------------------------------------- +expat + +Copyright (c) 2002-2003 Fred L. Drake, Jr. +Copyright (c) 2002-2006 Karl Waclawek +Copyright (c) 2003 Greg Stein +Copyright (c) 2016-2022 Sebastian Pipping +Copyright (c) 2018 Yury Gribov +Copyright (c) 2019 David Loffredo + +Licensed under the MIT license: + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the +following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +USE OR OTHER DEALINGS IN THE SOFTWARE. +-------------------------------------------------------------------------------- +expat +harfbuzz + +Copyright (c) 2021 Google Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +ffx_spd + +Copyright (c) 2017-2019 Advanced Micro Devices, Inc. All rights reserved. +Copyright (c) <2014> + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, +modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the +Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +-------------------------------------------------------------------------------- +ffx_spd + +Copyright (c) 2017-2020 Advanced Micro Devices, Inc. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, +modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the +Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +-------------------------------------------------------------------------------- +fiat + +Copyright (c) 2015-2020 the fiat-crypto authors (see + +https://github.com/mit-plv/fiat-crypto/blob/master/AUTHORS). + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +-------------------------------------------------------------------------------- +fl_chart + +MIT License + +Copyright (c) 2022 Flutter 4 Fun + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +-------------------------------------------------------------------------------- +flatbuffers + +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 2014 Google Inc. + +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. +-------------------------------------------------------------------------------- +flutter + +Copyright 2014 The Flutter Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google Inc. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +-------------------------------------------------------------------------------- +flutter_lints +go_router +path_provider +path_provider_android +path_provider_foundation +path_provider_linux +path_provider_platform_interface +path_provider_windows +platform +plugin_platform_interface +url_launcher +url_launcher_android +url_launcher_ios +url_launcher_linux +url_launcher_macos +url_launcher_platform_interface +url_launcher_windows +vector_graphics +vector_graphics_codec +vector_graphics_compiler +xdg_directories + +Copyright 2013 The Flutter Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google Inc. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +-------------------------------------------------------------------------------- +flutter_staggered_grid_view + +MIT License + +Copyright (c) 2018 Romain Rastel + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +-------------------------------------------------------------------------------- +flutter_svg + +Copyright (c) 2018 Dan Field + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +-------------------------------------------------------------------------------- +freetype2 + +Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. +3. This notice may not be removed or altered from any source distribution. +-------------------------------------------------------------------------------- +freetype2 + +Copyright (C) 2000, 2001, 2002, 2003, 2006, 2010 by +Francesco Zappa Nardelli + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +-------------------------------------------------------------------------------- +freetype2 + +Copyright (C) 2000-2004, 2006-2011, 2013, 2014 by +Francesco Zappa Nardelli + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +-------------------------------------------------------------------------------- +freetype2 + +Copyright (C) 2001, 2002 by +Francesco Zappa Nardelli + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +-------------------------------------------------------------------------------- +freetype2 + +Copyright (C) 2001, 2002, 2003, 2004 by +Francesco Zappa Nardelli + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +-------------------------------------------------------------------------------- +freetype2 + +Copyright (C) 2001-2008, 2011, 2013, 2014 by +Francesco Zappa Nardelli + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +-------------------------------------------------------------------------------- +freetype2 + +Copyright 1990, 1994, 1998 The Open Group + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation. + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of The Open Group shall not be +used in advertising or otherwise to promote the sale, use or other dealings +in this Software without prior written authorization from The Open Group. +-------------------------------------------------------------------------------- +freetype2 + +Copyright 2000 Computing Research Labs, New Mexico State University +Copyright 2001-2004, 2011 Francesco Zappa Nardelli + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE COMPUTING RESEARCH LAB OR NEW MEXICO STATE UNIVERSITY BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT +OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR +THE USE OR OTHER DEALINGS IN THE SOFTWARE. +-------------------------------------------------------------------------------- +freetype2 + +Copyright 2000 Computing Research Labs, New Mexico State University +Copyright 2001-2014 + Francesco Zappa Nardelli + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE COMPUTING RESEARCH LAB OR NEW MEXICO STATE UNIVERSITY BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT +OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR +THE USE OR OTHER DEALINGS IN THE SOFTWARE. +-------------------------------------------------------------------------------- +freetype2 + +Copyright 2000 Computing Research Labs, New Mexico State University +Copyright 2001-2015 + Francesco Zappa Nardelli + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE COMPUTING RESEARCH LAB OR NEW MEXICO STATE UNIVERSITY BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT +OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR +THE USE OR OTHER DEALINGS IN THE SOFTWARE. +-------------------------------------------------------------------------------- +freetype2 + +Copyright 2000, 2001, 2004 by +Francesco Zappa Nardelli + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +-------------------------------------------------------------------------------- +freetype2 + +Copyright 2000-2001, 2002 by +Francesco Zappa Nardelli + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +-------------------------------------------------------------------------------- +freetype2 + +Copyright 2000-2001, 2003 by +Francesco Zappa Nardelli + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +-------------------------------------------------------------------------------- +freetype2 + +Copyright 2000-2010, 2012-2014 by +Francesco Zappa Nardelli + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +-------------------------------------------------------------------------------- +freetype2 + +Copyright 2001, 2002, 2012 Francesco Zappa Nardelli + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE COMPUTING RESEARCH LAB OR NEW MEXICO STATE UNIVERSITY BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT +OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR +THE USE OR OTHER DEALINGS IN THE SOFTWARE. +-------------------------------------------------------------------------------- +freetype2 + +Copyright 2003 by +Francesco Zappa Nardelli + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +-------------------------------------------------------------------------------- +freetype2 + +The FreeType Project LICENSE +---------------------------- + + 2006-Jan-27 + + Copyright 1996-2002, 2006 by + David Turner, Robert Wilhelm, and Werner Lemberg + + + +Introduction +============ + + The FreeType Project is distributed in several archive packages; + some of them may contain, in addition to the FreeType font engine, + various tools and contributions which rely on, or relate to, the + FreeType Project. + + This license applies to all files found in such packages, and + which do not fall under their own explicit license. The license + affects thus the FreeType font engine, the test programs, + documentation and makefiles, at the very least. + + This license was inspired by the BSD, Artistic, and IJG + (Independent JPEG Group) licenses, which all encourage inclusion + and use of free software in commercial and freeware products + alike. As a consequence, its main points are that: + + o We don't promise that this software works. However, we will be + interested in any kind of bug reports. (`as is' distribution) + + o You can use this software for whatever you want, in parts or + full form, without having to pay us. (`royalty-free' usage) + + o You may not pretend that you wrote this software. If you use + it, or only parts of it, in a program, you must acknowledge + somewhere in your documentation that you have used the + FreeType code. (`credits') + + We specifically permit and encourage the inclusion of this + software, with or without modifications, in commercial products. + We disclaim all warranties covering The FreeType Project and + assume no liability related to The FreeType Project. + + + Finally, many people asked us for a preferred form for a + credit/disclaimer to use in compliance with this license. We thus + encourage you to use the following text: + + """ + Portions of this software are copyright © The FreeType + Project (www.freetype.org). All rights reserved. + """ + + Please replace with the value from the FreeType version you + actually use. + + +Legal Terms +=========== + +0. Definitions +-------------- + + Throughout this license, the terms `package', `FreeType Project', + and `FreeType archive' refer to the set of files originally + distributed by the authors (David Turner, Robert Wilhelm, and + Werner Lemberg) as the `FreeType Project', be they named as alpha, + beta or final release. + + `You' refers to the licensee, or person using the project, where + `using' is a generic term including compiling the project's source + code as well as linking it to form a `program' or `executable'. + This program is referred to as `a program using the FreeType + engine'. + + This license applies to all files distributed in the original + FreeType Project, including all source code, binaries and + documentation, unless otherwise stated in the file in its + original, unmodified form as distributed in the original archive. + If you are unsure whether or not a particular file is covered by + this license, you must contact us to verify this. + + The FreeType Project is copyright (C) 1996-2000 by David Turner, + Robert Wilhelm, and Werner Lemberg. All rights reserved except as + specified below. + +1. No Warranty +-------------- + + THE FREETYPE PROJECT IS PROVIDED `AS IS' WITHOUT WARRANTY OF ANY + KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE. IN NO EVENT WILL ANY OF THE AUTHORS OR COPYRIGHT HOLDERS + BE LIABLE FOR ANY DAMAGES CAUSED BY THE USE OR THE INABILITY TO + USE, OF THE FREETYPE PROJECT. + +2. Redistribution +----------------- + + This license grants a worldwide, royalty-free, perpetual and + irrevocable right and license to use, execute, perform, compile, + display, copy, create derivative works of, distribute and + sublicense the FreeType Project (in both source and object code + forms) and derivative works thereof for any purpose; and to + authorize others to exercise some or all of the rights granted + herein, subject to the following conditions: + + o Redistribution of source code must retain this license file + (`FTL.TXT') unaltered; any additions, deletions or changes to + the original files must be clearly indicated in accompanying + documentation. The copyright notices of the unaltered, + original files must be preserved in all copies of source + files. + + o Redistribution in binary form must provide a disclaimer that + states that the software is based in part of the work of the + FreeType Team, in the distribution documentation. We also + encourage you to put an URL to the FreeType web page in your + documentation, though this isn't mandatory. + + These conditions apply to any software derived from or based on + the FreeType Project, not just the unmodified files. If you use + our work, you must acknowledge us. However, no fee need be paid + to us. + +3. Advertising +-------------- + + Neither the FreeType authors and contributors nor you shall use + the name of the other for commercial, advertising, or promotional + purposes without specific prior written permission. + + We suggest, but do not require, that you use one or more of the + following phrases to refer to this software in your documentation + or advertising materials: `FreeType Project', `FreeType Engine', + `FreeType library', or `FreeType Distribution'. + + As you have not signed this license, you are not required to + accept it. However, as the FreeType Project is copyrighted + material, only this license, or another one contracted with the + authors, grants you the right to use, distribute, and modify it. + Therefore, by using, distributing, or modifying the FreeType + Project, you indicate that you understand and accept all the terms + of this license. + +4. Contacts +----------- + + There are two mailing lists related to FreeType: + + o freetype@nongnu.org + + Discusses general use and applications of FreeType, as well as + future and wanted additions to the library and distribution. + If you are looking for support, start in this list if you + haven't found anything to help you in the documentation. + + o freetype-devel@nongnu.org + + Discusses bugs, as well as engine internals, design issues, + specific licenses, porting, etc. + + Our home page can be found at + + https://www.freetype.org + + +--- end of FTL.TXT --- +-------------------------------------------------------------------------------- +freetype2 + +This software was written by Alexander Peslyak in 2001. No copyright is +claimed, and the software is hereby placed in the public domain. +In case this attempt to disclaim copyright and place the software in the +public domain is deemed null and void, then the software is +Copyright (c) 2001 Alexander Peslyak and it is hereby released to the +general public under the following terms: + +Redistribution and use in source and binary forms, with or without +modification, are permitted. + +There's ABSOLUTELY NO WARRANTY, express or implied. +-------------------------------------------------------------------------------- +freetype2 + +This software was written by Alexander Peslyak in 2001. No copyright is +claimed, and the software is hereby placed in the public domain. +In case this attempt to disclaim copyright and place the software in the +public domain is deemed null and void, then the software is +Copyright (c) 2001 Alexander Peslyak and it is hereby released to the +general public under the following terms: + +Redistribution and use in source and binary forms, with or without +modification, are permitted. + +There's ABSOLUTELY NO WARRANTY, express or implied. + +(This is a heavily cut-down "BSD license".) +-------------------------------------------------------------------------------- +fuchsia_sdk + +Copyright 2014 The Fuchsia Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +fuchsia_sdk + +Copyright 2016 The Fuchsia Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +fuchsia_sdk + +Copyright 2017 The Fuchsia Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +fuchsia_sdk + +Copyright 2018 The Fuchsia Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +fuchsia_sdk + +Copyright 2019 The Fuchsia Authors. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +fuchsia_sdk + +Copyright 2019 The Fuchsia Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +fuchsia_sdk + +Copyright 2020 The Fuchsia Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +fuchsia_sdk + +Copyright 2021 The Fuchsia Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +fuchsia_sdk + +Copyright 2022 The Fuchsia Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +fuchsia_sdk + +Copyright 2023 The Fuchsia Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +fuchsia_sdk + +musl as a whole is licensed under the following standard MIT license: + + +Copyright © 2005-2014 Rich Felker, et al. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +Authors/contributors include: + +Alex Dowad +Alexander Monakov +Anthony G. Basile +Arvid Picciani +Bobby Bingham +Boris Brezillon +Brent Cook +Chris Spiegel +Clément Vasseur +Daniel Micay +Denys Vlasenko +Emil Renner Berthing +Felix Fietkau +Felix Janda +Gianluca Anzolin +Hauke Mehrtens +Hiltjo Posthuma +Isaac Dunham +Jaydeep Patil +Jens Gustedt +Jeremy Huntwork +Jo-Philipp Wich +Joakim Sindholt +John Spencer +Josiah Worcester +Justin Cormack +Khem Raj +Kylie McClain +Luca Barbato +Luka Perkov +M Farkas-Dyck (Strake) +Mahesh Bodapati +Michael Forney +Natanael Copa +Nicholas J. Kain +orc +Pascal Cuoq +Petr Hosek +Pierre Carrier +Rich Felker +Richard Pennington +Shiz +sin +Solar Designer +Stefan Kristiansson +Szabolcs Nagy +Timo Teräs +Trutz Behn +Valentin Ochs +William Haddon + +Portions of this software are derived from third-party works licensed +under terms compatible with the above MIT license: + +Much of the math library code (third_party/math/* and +third_party/complex/*, and third_party/include/libm.h) is +Copyright © 1993,2004 Sun Microsystems or +Copyright © 2003-2011 David Schultz or +Copyright © 2003-2009 Steven G. Kargl or +Copyright © 2003-2009 Bruce D. Evans or +Copyright © 2008 Stephen L. Moshier +and labelled as such in comments in the individual source files. All +have been licensed under extremely permissive terms. + +The smoothsort implementation (third_party/smoothsort/qsort.c) is +Copyright © 2011 Valentin Ochs and is licensed under an MIT-style +license. + +The x86_64 files in third_party/arch were written by Nicholas J. Kain +and is licensed under the standard MIT terms. + +All other files which have no copyright comments are original works +produced specifically for use as part of this library, written either +by Rich Felker, the main author of the library, or by one or more +contibutors listed above. Details on authorship of individual files +can be found in the git version control history of the project. The +omission of copyright and license comments in each file is in the +interest of source tree size. + +In addition, permission is hereby granted for all public header files +(include/* and arch/*/bits/*) and crt files intended to be linked into +applications (crt/*, ldso/dlstart.c, and arch/*/crt_arch.h) to omit +the copyright notice and permission notice otherwise required by the +license, and to use these files without any requirement of +attribution. These files include substantial contributions from: + +Bobby Bingham +John Spencer +Nicholas J. Kain +Rich Felker +Richard Pennington +Stefan Kristiansson +Szabolcs Nagy + +all of whom have explicitly granted such permission. + +This file previously contained text expressing a belief that most of +the files covered by the above exception were sufficiently trivial not +to be subject to copyright, resulting in confusion over whether it +negated the permissions granted in the license. In the spirit of +permissive licensing, and of not having licensing issues being an +obstacle to adoption, that text has been removed. +-------------------------------------------------------------------------------- +glfw + +Copyright (C) 1997-2013 Sam Lantinga + +This software is provided 'as-is', without any express or implied warranty. +In no event will the authors be held liable for any damages arising from the +use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would + be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + +3. This notice may not be removed or altered from any source distribution. +-------------------------------------------------------------------------------- +glfw + +Copyright (c) 2002-2006 Marcus Geelnard + +Copyright (c) 2006-2019 Camilla Löwy + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would + be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and must not + be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source + distribution. +-------------------------------------------------------------------------------- +glfw + +Copyright (c) 2002-2006 Marcus Geelnard +Copyright (c) 2006-2016 Camilla Löwy + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would + be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and must not + be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source + distribution. +-------------------------------------------------------------------------------- +glfw + +Copyright (c) 2002-2006 Marcus Geelnard +Copyright (c) 2006-2017 Camilla Löwy + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would + be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and must not + be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source + distribution. +-------------------------------------------------------------------------------- +glfw + +Copyright (c) 2002-2006 Marcus Geelnard +Copyright (c) 2006-2018 Camilla Löwy + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would + be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and must not + be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source + distribution. +-------------------------------------------------------------------------------- +glfw + +Copyright (c) 2002-2006 Marcus Geelnard +Copyright (c) 2006-2019 Camilla Löwy + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would + be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and must not + be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source + distribution. +-------------------------------------------------------------------------------- +glfw + +Copyright (c) 2002-2006 Marcus Geelnard +Copyright (c) 2006-2019 Camilla Löwy +Copyright (c) 2012 Torsten Walluhn + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would + be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and must not + be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source + distribution. +-------------------------------------------------------------------------------- +glfw + +Copyright (c) 2006-2017 Camilla Löwy + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would + be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and must not + be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source + distribution. +-------------------------------------------------------------------------------- +glfw + +Copyright (c) 2006-2018 Camilla Löwy + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would + be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and must not + be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source + distribution. +-------------------------------------------------------------------------------- +glfw + +Copyright (c) 2009-2016 Camilla Löwy + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would + be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and must not + be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source + distribution. +-------------------------------------------------------------------------------- +glfw + +Copyright (c) 2009-2019 Camilla Löwy + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would + be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and must not + be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source + distribution. +-------------------------------------------------------------------------------- +glfw + +Copyright (c) 2009-2019 Camilla Löwy +Copyright (c) 2012 Torsten Walluhn + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would + be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and must not + be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source + distribution. +-------------------------------------------------------------------------------- +glfw + +Copyright (c) 2009-2021 Camilla Löwy + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would + be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and must not + be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source + distribution. +-------------------------------------------------------------------------------- +glfw + +Copyright (c) 2014 Jonas Ådahl + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would + be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and must not + be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source + distribution. +-------------------------------------------------------------------------------- +glfw + +Copyright (c) 2016 Google Inc. +Copyright (c) 2016-2017 Camilla Löwy + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would + be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and must not + be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source + distribution. +-------------------------------------------------------------------------------- +glfw + +Copyright (c) 2016 Google Inc. +Copyright (c) 2016-2019 Camilla Löwy + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would + be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and must not + be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source + distribution. +-------------------------------------------------------------------------------- +glfw + +Copyright (c) 2016-2017 Camilla Löwy + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would + be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and must not + be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source + distribution. +-------------------------------------------------------------------------------- +glfw + +Copyright (c) 2021 Camilla Löwy + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would + be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and must not + be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source + distribution. +-------------------------------------------------------------------------------- +glfw + +Copyright (c) 2022 Camilla Löwy + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would + be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and must not + be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source + distribution. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of 3Dlabs Inc. Ltd. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +Copyright (C) 2012-2013 LunarG, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of 3Dlabs Inc. Ltd. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +Copyright (C) 2012-2013 LunarG, Inc. +Copyright (C) 2015-2018 Google, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of 3Dlabs Inc. Ltd. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +Copyright (C) 2012-2013 LunarG, Inc. +Copyright (C) 2017 ARM Limited. +Copyright (C) 2015-2018 Google, Inc. +Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of 3Dlabs Inc. Ltd. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +Copyright (C) 2012-2013 LunarG, Inc. +Copyright (C) 2017 ARM Limited. +Copyright (C) 2015-2019 Google, Inc. +Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of 3Dlabs Inc. Ltd. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +Copyright (C) 2012-2013 LunarG, Inc. +Copyright (C) 2017 ARM Limited. +Copyright (C) 2015-2020 Google, Inc. +Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of 3Dlabs Inc. Ltd. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +Copyright (C) 2012-2013 LunarG, Inc. +Copyright (C) 2017 ARM Limited. +Copyright (C) 2018-2020 Google, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of 3Dlabs Inc. Ltd. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +Copyright (C) 2012-2013 LunarG, Inc. +Copyright (C) 2017 ARM Limited. +Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of 3Dlabs Inc. Ltd. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +Copyright (C) 2012-2015 LunarG, Inc. +Copyright (C) 2015-2018 Google, Inc. +Copyright (C) 2017, 2019 ARM Limited. +Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of 3Dlabs Inc. Ltd. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +Copyright (C) 2012-2015 LunarG, Inc. +Copyright (C) 2015-2020 Google, Inc. +Copyright (C) 2017 ARM Limited. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of 3Dlabs Inc. Ltd. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +Copyright (C) 2012-2016 LunarG, Inc. +Copyright (C) 2015-2016 Google, Inc. +Copyright (C) 2017 ARM Limited. +Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of 3Dlabs Inc. Ltd. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +Copyright (C) 2012-2016 LunarG, Inc. +Copyright (C) 2015-2020 Google, Inc. +Copyright (C) 2017 ARM Limited. +Modifications Copyright (C) 2020-2021 Advanced Micro Devices, Inc. All rights reserved. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of 3Dlabs Inc. Ltd. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +Copyright (C) 2012-2016 LunarG, Inc. +Copyright (C) 2017 ARM Limited. +Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of 3Dlabs Inc. Ltd. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +Copyright (C) 2013 LunarG, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of 3Dlabs Inc. Ltd. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +Copyright (C) 2013 LunarG, Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of 3Dlabs Inc. Ltd. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +Copyright (C) 2013 LunarG, Inc. +Copyright (C) 2015-2018 Google, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of 3Dlabs Inc. Ltd. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +Copyright (C) 2013 LunarG, Inc. +Copyright (C) 2015-2018 Google, Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of 3Dlabs Inc. Ltd. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +Copyright (C) 2013 LunarG, Inc. +Copyright (C) 2017 ARM Limited. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of 3Dlabs Inc. Ltd. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +Copyright (C) 2013 LunarG, Inc. +Copyright (C) 2017 ARM Limited. +Copyright (C) 2015-2018 Google, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of 3Dlabs Inc. Ltd. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +Copyright (C) 2013 LunarG, Inc. +Copyright (C) 2017 ARM Limited. +Copyright (C) 2020 Google, Inc. +Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of 3Dlabs Inc. Ltd. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +Copyright (C) 2013 LunarG, Inc. +Copyright (c) 2002-2010 The ANGLE Project Authors. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of 3Dlabs Inc. Ltd. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +Copyright (C) 2013-2016 LunarG, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of 3Dlabs Inc. Ltd. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +Copyright (C) 2013-2016 LunarG, Inc. +Copyright (C) 2015-2018 Google, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of 3Dlabs Inc. Ltd. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +Copyright (C) 2013-2016 LunarG, Inc. +Copyright (C) 2015-2020 Google, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of 3Dlabs Inc. Ltd. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +Copyright (C) 2013-2016 LunarG, Inc. +Copyright (C) 2016-2020 Google, Inc. +Modifications Copyright(C) 2021 Advanced Micro Devices, Inc.All rights reserved. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of 3Dlabs Inc. Ltd. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +Copyright (C) 2016 Google, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of 3Dlabs Inc. Ltd. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +Copyright (C) 2016 LunarG, Inc. +Copyright (C) 2017 ARM Limited. +Copyright (C) 2015-2018 Google, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of 3Dlabs Inc. Ltd. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +Copyright (C) 2017 Google, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of 3Dlabs Inc. Ltd. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2013 LunarG, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of 3Dlabs Inc. Ltd. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2013 LunarG, Inc. +Copyright (C) 2015-2018 Google, Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of 3Dlabs Inc. Ltd. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2013 LunarG, Inc. +Copyright (C) 2017 ARM Limited. +Copyright (C) 2015-2018 Google, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of 3Dlabs Inc. Ltd. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2013-2016 LunarG, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of 3Dlabs Inc. Ltd. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2014 LunarG, Inc. +Copyright (C) 2015-2018 Google, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of 3Dlabs Inc. Ltd. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2014-2015 LunarG, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of 3Dlabs Inc. Ltd. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2014-2015 LunarG, Inc. +Copyright (C) 2015-2018 Google, Inc. +Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of 3Dlabs Inc. Ltd. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2014-2015 LunarG, Inc. +Copyright (C) 2015-2020 Google, Inc. +Copyright (C) 2017 ARM Limited. +Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of 3Dlabs Inc. Ltd. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2014-2015 LunarG, Inc. +Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of 3Dlabs Inc. Ltd. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2014-2016 LunarG, Inc. +Copyright (C) 2015-2020 Google, Inc. +Copyright (C) 2017 ARM Limited. +Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of 3Dlabs Inc. Ltd. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2014-2016 LunarG, Inc. +Copyright (C) 2018 Google, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of 3Dlabs Inc. Ltd. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2014-2016 LunarG, Inc. +Copyright (C) 2018-2020 Google, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of 3Dlabs Inc. Ltd. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2015 LunarG, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of 3Dlabs Inc. Ltd. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2015-2016 Google, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of Google Inc. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2015-2018 Google, Inc. +Copyright (C) 2017 ARM Limited. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of 3Dlabs Inc. Ltd. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2016 Google, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of 3Dlabs Inc. Ltd. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2016 Google, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of Google Inc. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2016 Google, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of Google, Inc., nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2016 Google, Inc. +Copyright (C) 2016 LunarG, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of Google Inc. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2016 Google, Inc. +Copyright (C) 2016 LunarG, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of Google, Inc., nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2016 Google, Inc. +Copyright (C) 2019 ARM Limited. +Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of Google Inc. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2016 LunarG, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of 3Dlabs Inc. Ltd. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2016 LunarG, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of Google Inc. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2016 LunarG, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of Google, Inc., nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2016-2017 Google, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of Google Inc. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2016-2017 Google, Inc. +Copyright (C) 2020 The Khronos Group Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of 3Dlabs Inc. Ltd. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2016-2017 LunarG, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of 3Dlabs Inc. Ltd. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2016-2018 Google, Inc. +Copyright (C) 2016 LunarG, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of 3Dlabs Inc. Ltd. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2016-2018 Google, Inc. +Copyright (C) 2016 LunarG, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of Google, Inc., nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2017 LunarG, Inc. +Copyright (C) 2018 Google, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of 3Dlabs Inc. Ltd. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2017 LunarG, Inc. +Copyright (C) 2018 Google, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of Google, Inc., nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2017-2018 Google, Inc. +Copyright (C) 2017 LunarG, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of 3Dlabs Inc. Ltd. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2018 Google, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of 3Dlabs Inc. Ltd. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2018 The Khronos Group Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of 3Dlabs Inc. Ltd. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2020 Google, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of Google, Inc., nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +glslang + +Copyright (C) 2020 The Khronos Group Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of The Khronos Group Inc. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +glslang + +Copyright (c) 2002, NVIDIA Corporation. + +NVIDIA Corporation("NVIDIA") supplies this software to you in +consideration of your agreement to the following terms, and your use, +installation, modification or redistribution of this NVIDIA software +constitutes acceptance of these terms. If you do not agree with these +terms, please do not use, install, modify or redistribute this NVIDIA +software. + +In consideration of your agreement to abide by the following terms, and +subject to these terms, NVIDIA grants you a personal, non-exclusive +license, under NVIDIA's copyrights in this original NVIDIA software (the +"NVIDIA Software"), to use, reproduce, modify and redistribute the +NVIDIA Software, with or without modifications, in source and/or binary +forms; provided that if you redistribute the NVIDIA Software, you must +retain the copyright notice of NVIDIA, this notice and the following +text and disclaimers in all such redistributions of the NVIDIA Software. +Neither the name, trademarks, service marks nor logos of NVIDIA +Corporation may be used to endorse or promote products derived from the +NVIDIA Software without specific prior written permission from NVIDIA. +Except as expressly stated in this notice, no other rights or licenses +express or implied, are granted by NVIDIA herein, including but not +limited to any patent rights that may be infringed by your derivative +works or by other works in which the NVIDIA Software may be +incorporated. No hardware is licensed hereunder. + +THE NVIDIA SOFTWARE IS BEING PROVIDED ON AN "AS IS" BASIS, WITHOUT +WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED, +INCLUDING WITHOUT LIMITATION, WARRANTIES OR CONDITIONS OF TITLE, +NON-INFRINGEMENT, MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR +ITS USE AND OPERATION EITHER ALONE OR IN COMBINATION WITH OTHER +PRODUCTS. + +IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY SPECIAL, INDIRECT, +INCIDENTAL, EXEMPLARY, CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +TO, LOST PROFITS; PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF +USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) OR ARISING IN ANY WAY +OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE +NVIDIA SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, +TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF +NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +glslang + +Copyright (c) 2013 The Khronos Group Inc. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and/or associated documentation files (the +"Materials"), to deal in the Materials without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Materials, and to +permit persons to whom the Materials are furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Materials. + +THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. +-------------------------------------------------------------------------------- +glslang + +Copyright (c) 2014-2017 The Khronos Group Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and/or associated documentation files (the "Materials"), +to deal in the Materials without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Materials, and to permit persons to whom the +Materials are furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Materials. + +MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS +STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND +HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ + +THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM,OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS +IN THE MATERIALS. +-------------------------------------------------------------------------------- +glslang + +Copyright (c) 2014-2020 The Khronos Group Inc. +Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and/or associated documentation files (the "Materials"), +to deal in the Materials without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Materials, and to permit persons to whom the +Materials are furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Materials. + +MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS +STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND +HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ + +THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM,OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS +IN THE MATERIALS. +-------------------------------------------------------------------------------- +glslang + +Copyright (c) 2018 The Khronos Group Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and/or associated documentation files (the "Materials"), +to deal in the Materials without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Materials, and to permit persons to whom the +Materials are furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Materials. + +MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS +STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND +HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ + +THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM,OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS +IN THE MATERIALS. +-------------------------------------------------------------------------------- +glslang + +Copyright (c) 2019, Viktor Latypov +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +glslang + +Copyright (c) 2020 The Khronos Group Inc. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and/or associated documentation files (the +"Materials"), to deal in the Materials without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Materials, and to +permit persons to whom the Materials are furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Materials. + +MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS +KHRONOS STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS +SPECIFICATIONS AND HEADER INFORMATION ARE LOCATED AT + https://www.khronos.org/registry/ + +THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. +-------------------------------------------------------------------------------- +glslang + +Copyright (c) 2020, Travis Fort +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +glslang + +Copyright (c) 2022 ARM Limited + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and/or associated documentation files (the "Materials"), +to deal in the Materials without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Materials, and to permit persons to whom the +Materials are furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Materials. + +MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS +STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND +HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ + +THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM,OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS +IN THE MATERIALS. +-------------------------------------------------------------------------------- +glslang + +Copyright(C) 2021 Advanced Micro Devices, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of 3Dlabs Inc. Ltd. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +glslang +skia + +Copyright (c) 2014-2016 The Khronos Group Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and/or associated documentation files (the "Materials"), +to deal in the Materials without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Materials, and to permit persons to whom the +Materials are furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Materials. + +MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS +STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND +HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ + +THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM,OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS +IN THE MATERIALS. +-------------------------------------------------------------------------------- +glslang +spirv-cross + +Copyright (c) 2014-2020 The Khronos Group Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and/or associated documentation files (the "Materials"), +to deal in the Materials without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Materials, and to permit persons to whom the +Materials are furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Materials. + +MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS +STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND +HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ + +THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM,OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS +IN THE MATERIALS. +-------------------------------------------------------------------------------- +google_fonts + + 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. + +-------------------------------------------------------------------------------- +harfbuzz + +Copyright (C) 2011 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright (C) 2012 Grigori Goronzy + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright (C) 2013 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright (c) Microsoft Corporation. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 1998-2004 David Turner and Werner Lemberg +Copyright © 2004,2007,2009 Red Hat, Inc. +Copyright © 2011,2012 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 1998-2004 David Turner and Werner Lemberg +Copyright © 2004,2007,2009,2010 Red Hat, Inc. +Copyright © 2011,2012 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 1998-2004 David Turner and Werner Lemberg +Copyright © 2006 Behdad Esfahbod +Copyright © 2007,2008,2009 Red Hat, Inc. +Copyright © 2012,2013 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2007 Chris Wilson +Copyright © 2009,2010 Red Hat, Inc. +Copyright © 2011,2012 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2007,2008,2009 Red Hat, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2007,2008,2009 Red Hat, Inc. +Copyright © 2010,2011,2012 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2007,2008,2009 Red Hat, Inc. +Copyright © 2010,2012 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2007,2008,2009 Red Hat, Inc. +Copyright © 2011,2012 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2007,2008,2009 Red Hat, Inc. +Copyright © 2012 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2007,2008,2009 Red Hat, Inc. +Copyright © 2012,2013 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2007,2008,2009 Red Hat, Inc. +Copyright © 2012,2013 Google, Inc. +Copyright © 2019, Facebook Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2007,2008,2009 Red Hat, Inc. +Copyright © 2018,2019,2020 Ebrahim Byagowi +Copyright © 2018 Khaled Hosny + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2007,2008,2009,2010 Red Hat, Inc. +Copyright © 2010,2012 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2007,2008,2009,2010 Red Hat, Inc. +Copyright © 2010,2012,2013 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2007,2008,2009,2010 Red Hat, Inc. +Copyright © 2012 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2007,2008,2009,2010 Red Hat, Inc. +Copyright © 2012,2018 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2007,2008,2009,2010 Red Hat, Inc. +Copyright © 2012,2018 Google, Inc. +Copyright © 2019 Facebook, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2009 Red Hat, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2009 Red Hat, Inc. +Copyright © 2009 Keith Stribley +Copyright © 2011 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2009 Red Hat, Inc. +Copyright © 2009 Keith Stribley +Copyright © 2015 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2009 Red Hat, Inc. +Copyright © 2011 Codethink Limited +Copyright © 2010,2011,2012 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2009 Red Hat, Inc. +Copyright © 2011 Codethink Limited +Copyright © 2011,2012 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2009 Red Hat, Inc. +Copyright © 2011 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2009 Red Hat, Inc. +Copyright © 2012 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2009 Red Hat, Inc. +Copyright © 2015 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2009 Red Hat, Inc. +Copyright © 2018 Ebrahim Byagowi + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2009 Red Hat, Inc. +Copyright © 2018 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2009,2010 Red Hat, Inc. +Copyright © 2010,2011,2012 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2009,2010 Red Hat, Inc. +Copyright © 2010,2011,2012,2013 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2009,2010 Red Hat, Inc. +Copyright © 2010,2011,2013 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2009,2010 Red Hat, Inc. +Copyright © 2011,2012 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2010 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2010 Red Hat, Inc. +Copyright © 2012 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2010,2011 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2010,2011,2012 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2010,2011,2013 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2010,2012 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2011 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2011 Martin Hosken +Copyright © 2011 SIL International + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2011 Martin Hosken +Copyright © 2011 SIL International +Copyright © 2011,2012 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2011,2012 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2011,2012 Google, Inc. +Copyright © 2018 Ebrahim Byagowi + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2011,2012,2013 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2011,2012,2013 Google, Inc. +Copyright © 2021 Khaled Hosny + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2011,2012,2014 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2011,2014 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2012 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2012 Mozilla Foundation. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2012,2013 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2012,2013 Mozilla Foundation. +Copyright © 2012,2013 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2012,2017 Google, Inc. +Copyright © 2021 Behdad Esfahbod + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2012,2018 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2013 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2013 Red Hat, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2014 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2015 Google, Inc. +Copyright © 2019 Adobe Inc. +Copyright © 2019 Ebrahim Byagowi + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2015 Mozilla Foundation. +Copyright © 2015 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2015-2019 Ebrahim Byagowi + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2016 Elie Roux +Copyright © 2018 Google, Inc. +Copyright © 2018-2019 Ebrahim Byagowi + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2016 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2016 Google, Inc. +Copyright © 2018 Ebrahim Byagowi + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2016 Google, Inc. +Copyright © 2018 Khaled Hosny +Copyright © 2018 Ebrahim Byagowi + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2016 Igalia S.L. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2017 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2017 Google, Inc. +Copyright © 2018 Ebrahim Byagowi + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2017 Google, Inc. +Copyright © 2019 Facebook, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2017,2018 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2018 Ebrahim Byagowi + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2018 Ebrahim Byagowi +Copyright © 2018 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2018 Ebrahim Byagowi +Copyright © 2020 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2018 Ebrahim Byagowi. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2018 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2018 Google, Inc. +Copyright © 2019 Facebook, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2018 Google, Inc. +Copyright © 2023 Behdad Esfahbod + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2018 Adobe Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2018-2019 Ebrahim Byagowi + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2019 Adobe Inc. +Copyright © 2019 Ebrahim Byagowi + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2019 Adobe, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2019 Ebrahim Byagowi + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2019 Facebook, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2019 Adobe Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2019-2020 Ebrahim Byagowi + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2020 Ebrahim Byagowi + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2020 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2021 Behdad Esfahbod + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2021 Behdad Esfahbod. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2021 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2022 Behdad Esfahbod + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2022 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2022 Red Hat, Inc + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2022 Red Hat, Inc +Copyright © 2021, 2022 Black Foundry + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2022 Red Hat, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2022 Behdad Esfahbod + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2022 Matthias Clasen + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2022 Red Hat, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2023 Behdad Esfahbod + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2023 Behdad Esfahbod +Copyright © 1999 David Turner +Copyright © 2005 Werner Lemberg +Copyright © 2013-2015 Alexei Podtelezhnikov + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +Copyright © 2023 Google, Inc. + +This is part of HarfBuzz, a text shaping library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz + +HarfBuzz is licensed under the so-called "Old MIT" license. Details follow. +For parts of HarfBuzz that are licensed under different licenses see individual +files names COPYING in subdirectories where applicable. + +Copyright © 2010-2022 Google, Inc. +Copyright © 2015-2020 Ebrahim Byagowi +Copyright © 2019,2020 Facebook, Inc. +Copyright © 2012,2015 Mozilla Foundation +Copyright © 2011 Codethink Limited +Copyright © 2008,2010 Nokia Corporation and/or its subsidiary(-ies) +Copyright © 2009 Keith Stribley +Copyright © 2011 Martin Hosken and SIL International +Copyright © 2007 Chris Wilson +Copyright © 2005,2006,2020,2021,2022,2023 Behdad Esfahbod +Copyright © 2004,2007,2008,2009,2010,2013,2021,2022,2023 Red Hat, Inc. +Copyright © 1998-2005 David Turner and Werner Lemberg +Copyright © 2016 Igalia S.L. +Copyright © 2022 Matthias Clasen +Copyright © 2018,2021 Khaled Hosny +Copyright © 2018,2019,2020 Adobe, Inc +Copyright © 2013-2015 Alexei Podtelezhnikov + +For full copyright notices consult the individual files in the package. + + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +-------------------------------------------------------------------------------- +harfbuzz +icu +web_unicode + +Unicode® Copyright and Terms of Use +For the general privacy policy governing access to this site, see the Unicode Privacy Policy. + +A. Unicode Copyright +1. Copyright © 1991-2022 Unicode, Inc. All rights reserved. +B. Definitions +Unicode Data Files ("DATA FILES") include all data files under the directories: +https://www.unicode.org/Public/ +https://www.unicode.org/reports/ +https://www.unicode.org/ivd/data/ + +Unicode Data Files do not include PDF online code charts under the directory: +https://www.unicode.org/Public/ + +Unicode Software ("SOFTWARE") includes any source code published in the Unicode Standard +or any source code or compiled code under the directories: +https://www.unicode.org/Public/PROGRAMS/ +https://www.unicode.org/Public/cldr/ +http://site.icu-project.org/download/ +C. Terms of Use +1. Certain documents and files on this website contain a legend indicating that "Modification is permitted." Any person is hereby authorized, without fee, to modify such documents and files to create derivative works conforming to the Unicode® Standard, subject to Terms and Conditions herein. +2. Any person is hereby authorized, without fee, to view, use, reproduce, and distribute all documents and files, subject to the Terms and Conditions herein. +3. Further specifications of rights and restrictions pertaining to the use of the Unicode DATA FILES and SOFTWARE can be found in the Unicode Data Files and Software License. +4. Each version of the Unicode Standard has further specifications of rights and restrictions of use. For the book editions (Unicode 5.0 and earlier), these are found on the back of the title page. +5. The Unicode PDF online code charts carry specific restrictions. Those restrictions are incorporated as the first page of each PDF code chart. +6. All other files, including online documentation of the core specification for Unicode 6.0 and later, are covered under these general Terms of Use. +7. No license is granted to "mirror" the Unicode website where a fee is charged for access to the "mirror" site. +8. Modification is not permitted with respect to this document. All copies of this document must be verbatim. +D. Restricted Rights Legend +1. Any technical data or software which is licensed to the United States of America, its agencies and/or instrumentalities under this Agreement is commercial technical data or commercial computer software developed exclusively at private expense as defined in FAR 2.101, or DFARS 252.227-7014 (June 1995), as applicable. For technical data, use, duplication, or disclosure by the Government is subject to restrictions as set forth in DFARS 202.227-7015 Technical Data, Commercial and Items (Nov 1995) and this Agreement. For Software, in accordance with FAR 12-212 or DFARS 227-7202, as applicable, use, duplication or disclosure by the Government is subject to the restrictions set forth in this Agreement. +E.Warranties and Disclaimers +1. This publication and/or website may include technical or typographical errors or other inaccuracies. Changes are periodically added to the information herein; these changes will be incorporated in new editions of the publication and/or website. Unicode, Inc. may make improvements and/or changes in the product(s) and/or program(s) described in this publication and/or website at any time. +2. If this file has been purchased on magnetic or optical media from Unicode, Inc. the sole and exclusive remedy for any claim will be exchange of the defective media within ninety (90) days of original purchase. +3. EXCEPT AS PROVIDED IN SECTION E.2, THIS PUBLICATION AND/OR SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND EITHER EXPRESS, IMPLIED, OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. UNICODE, INC. AND ITS LICENSORS ASSUME NO RESPONSIBILITY FOR ERRORS OR OMISSIONS IN THIS PUBLICATION AND/OR SOFTWARE OR OTHER DOCUMENTS WHICH ARE REFERENCED BY OR LINKED TO THIS PUBLICATION OR THE UNICODE WEBSITE. +F. Waiver of Damages +1. In no event shall Unicode, Inc. or its licensors be liable for any special, incidental, indirect or consequential damages of any kind, or any damages whatsoever, whether or not Unicode, Inc. was advised of the possibility of the damage, including, without limitation, those resulting from the following: loss of use, data or profits, in connection with the use, modification or distribution of this information or its derivatives. +G. Trademarks & Logos +1. The Unicode Word Mark and the Unicode Logo are trademarks of Unicode, Inc. “The Unicode Consortium” and “Unicode, Inc.” are trade names of Unicode, Inc. Use of the information and materials found on this website indicates your acknowledgement of Unicode, Inc.’s exclusive worldwide rights in the Unicode Word Mark, the Unicode Logo, and the Unicode trade names. +3. The Unicode Consortium Name and Trademark Usage Policy (“Trademark Policy”) are incorporated herein by reference and you agree to abide by the provisions of the Trademark Policy, which may be changed from time to time in the sole discretion of Unicode, Inc. +4. All third party trademarks referenced herein are the property of their respective owners. +H. Miscellaneous +1. Jurisdiction and Venue. This website is operated from a location in the State of California, United States of America. Unicode, Inc. makes no representation that the materials are appropriate for use in other locations. If you access this website from other locations, you are responsible for compliance with local laws. This Agreement, all use of this website and any claims and damages resulting from use of this website are governed solely by the laws of the State of California without regard to any principles which would apply the laws of a different jurisdiction. The user agrees that any disputes regarding this website shall be resolved solely in the courts located in Santa Clara County, California. The user agrees said courts have personal jurisdiction and agree to waive any right to transfer the dispute to any other forum. +2. Modification by Unicode, Inc. Unicode, Inc. shall have the right to modify this Agreement at any time by posting it to this website. The user may not assign any part of this Agreement without Unicode, Inc.’s prior written consent. +3. Taxes. The user agrees to pay any taxes arising from access to this website or use of the information herein, except for those based on Unicode’s net income. +4. Severability. If any provision of this Agreement is declared invalid or unenforceable, the remaining provisions of this Agreement shall remain in effect. +5. Entire Agreement. This Agreement constitutes the entire agreement between the parties. + +EXHIBIT 1 +UNICODE, INC. LICENSE AGREEMENT - DATA FILES AND SOFTWARE + +See Terms of Use +for definitions of Unicode Inc.’s Data Files and Software. + +NOTICE TO USER: Carefully read the following legal agreement. +BY DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING UNICODE INC.'S +DATA FILES ("DATA FILES"), AND/OR SOFTWARE ("SOFTWARE"), +YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE +TERMS AND CONDITIONS OF THIS AGREEMENT. +IF YOU DO NOT AGREE, DO NOT DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE +THE DATA FILES OR SOFTWARE. + +COPYRIGHT AND PERMISSION NOTICE + +Copyright © 1991-2022 Unicode, Inc. All rights reserved. +Distributed under the Terms of Use in https://www.unicode.org/copyright.html. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +http +http_parser +matcher +path +source_span +string_scanner + +Copyright 2014, the Dart project authors. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google LLC nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +-------------------------------------------------------------------------------- +icu + +# Copyright (c) 2006-2015 International Business Machines Corporation, + # Apple Inc., and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1995-2001, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1995-2002, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1995-2003, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1995-2005, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1995-2006, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1995-2007, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1995-2009, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1995-2010, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1995-2013, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1995-2014, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1995-2015, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1996-2008, International Business Machines Corporation * +and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1996-2012, International Business Machines Corporation +and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1996-2012, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1996-2013, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1996-2013, International Business Machines Corporation +and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1996-2014, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1996-2014, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1996-2014, International Business Machines Corporation and others. +All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1996-2015, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1996-2015, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1996-2015, International Business Machines Corporation and others. +All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1996-2016, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1996-2016, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1996-2016, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1997-2000, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1997-2003, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1997-2005, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1997-2005, International Business Machines Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1997-2006, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1997-2009,2014 International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1997-2010, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1997-2010, International Business Machines Corporation and * +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1997-2011, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1997-2011, International Business Machines Corporation and others. +All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1997-2011,2014-2015 International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1997-2012, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1997-2012, International Business Machines Corporation and * +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1997-2013, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1997-2013, International Business Machines * +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1997-2013, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1997-2013, International Business Machines Corporation and * +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1997-2013, International Business Machines Corporation and others. +All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1997-2014, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1997-2015, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1997-2015, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1997-2015, International Business Machines Corporation +and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1997-2015, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1997-2015, International Business Machines Corporation and * +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1997-2015, International Business Machines Corporation and others. +All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1997-2016, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1997-2016, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1997-2016, International Business Machines Corporation and * +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1997-2016, International Business Machines Corporation and others. +All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1998-2004, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1998-2005, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1998-2006, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1998-2008, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1998-2011, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1998-2012, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1998-2012, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1998-2014, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1998-2015, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1998-2016, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1998-2016, International Business Machines Corporation +and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1999-2001, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1999-2003, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1999-2004, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1999-2005, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1999-2006, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1999-2006,2013 IBM Corp. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1999-2007, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1999-2007, International Business Machines Corporation +and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1999-2008, International Business Machines Corporation +and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1999-2009, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1999-2010, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1999-2010, International Business Machines Corporation and others. +All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1999-2011, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1999-2011, International Business Machines Corporation +and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1999-2012, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1999-2012, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1999-2013, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1999-2013, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1999-2014 International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1999-2014 International Business Machines Corporation * +and others. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1999-2014, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1999-2014, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1999-2015 International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1999-2015, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1999-2015, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1999-2016 International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1999-2016 International Business Machines Corporation +and others. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1999-2016 International Business Machines Corporation * +and others. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1999-2016, International Business Machines + Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1999-2016, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1999-2016, International Business Machines Corporation + and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1999-2016, International Business Machines Corporation +and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1999-2016, International Business Machines Corporation +and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 1999-2016, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2000, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2000-2003, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2000-2004, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2000-2004, International Business Machines Corporation +and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2000-2006, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2000-2007, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2000-2008, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2000-2010, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2000-2011, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2000-2012, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2000-2012, International Business Machines Corporation and others. +All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2000-2013, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2000-2014, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2000-2015, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2000-2016, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2000-2016, International Business Machines Corporation and others. +All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2001, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2001-2003, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2001-2005, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2001-2005, International Business Machines Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2001-2006, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2001-2007, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2001-2008, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2001-2008,2010 IBM and others. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2001-2010, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2001-2011 IBM and others. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2001-2011, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2001-2011, International Business Machines * + Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2001-2011, International Business Machines Corporation +and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2001-2011, International Business Machines Corporation and * +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2001-2011, International Business Machines Corporation. * +All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2001-2011,2014 IBM and others. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2001-2012, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2001-2012, International Business Machines Corporation and * +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2001-2013, International Business Machines + Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2001-2014 IBM and others. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2001-2014 International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2001-2014, International Business Machines + Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2001-2014, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2001-2014, International Business Machines * + Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2001-2014, International Business Machines Corporation and * +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2001-2014, International Business Machines Corporation. +All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2001-2015 IBM and others. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2001-2015, International Business Machines + Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2001-2015, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2001-2016, International Business Machines + Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2001-2016, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2002-2003, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2002-2005, International Business Machines Corporation and * +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2002-2006, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2002-2008 International Business Machines Corporation * +and others. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2002-2008, International Business Machines Corporation and others. +All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2002-2010, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2002-2011 International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2002-2011, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2002-2011, International Business Machines Corporation and others. +All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2002-2012, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2002-2013, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2002-2013, International Business Machines Corporation +and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2002-2014 International Business Machines Corporation +and others. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2002-2014, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2002-2014, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2002-2015 International Business Machines Corporation +and others. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2002-2015, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2002-2015, International Business Machines Corporation and others. + All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2002-2015, International Business Machines Corporation and others. +All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2002-2016 International Business Machines Corporation +and others. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2002-2016 International Business Machines Corporation * +and others. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2002-2016 International Business Machines Corporation and others. +All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2002-2016, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2002-2016, International Business Machines Corporation +and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2002-2016, International Business Machines Corporation and others. + All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2002-2016, International Business Machines Corporation and others. +All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2003 - 2008, International Business Machines Corporation and * +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2003 - 2009, International Business Machines Corporation and * +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2003 - 2013, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2003 - 2013, International Business Machines Corporation and * +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2003-2003, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2003-2004, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2003-2006, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2003-2007, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2003-2008, International Business Machines Corporation +and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2003-2009, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2003-2009,2012,2016 International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2003-2010, International Business Machines Corporation and others. +All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2003-2011, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2003-2012, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2003-2013, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2003-2013, International Business Machines Corporation +and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2003-2013, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2003-2013, International Business Machines Corporation and * +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2003-2014, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2003-2014, International Business Machines Corporation +and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2003-2015, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2003-2015, International Business Machines * + Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2003-2015, International Business Machines Corporation +and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2003-2016, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2003-2016, International Business Machines * + Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2003-2016, International Business Machines Corporation +and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2004 - 2008, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2004-2005, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2004-2006, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2004-2007, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2004-2010, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2004-2011, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2004-2012, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2004-2012, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2004-2014, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2004-2015, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2004-2015, International Business Machines Corporation and others. +All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2004-2016, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2005, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2005-2006, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2005-2008, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2005-2011, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2005-2012, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2005-2013, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2005-2014, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2005-2015, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2005-2016, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2006 International Business Machines Corporation * +and others. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2006, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2006-2012, International Business Machines Corporation and others. * +All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2006-2014, International Business Machines Corporation * +and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2006-2016, International Business Machines Corporation +and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2007, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2007-2008, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2007-2008, International Business Machines Corporation and * +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2007-2008, International Business Machines Corporation and * +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2007-2012, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2007-2012, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2007-2013, International Business Machines Corporation +and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2007-2013, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2007-2013, International Business Machines Corporation and * +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2007-2014, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2007-2014, International Business Machines Corporation +and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2007-2014, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2007-2015, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2007-2016, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2007-2016, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2007-2016, International Business Machines Corporation and * +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2008, Google, International Business Machines Corporation and * +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2008, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2008, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2008-2009, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2008-2011, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2008-2011, International Business Machines +Corporation, Google and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2008-2012, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2008-2012, International Business Machines Corporation * +and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2008-2013, International Business Machines Corporation +and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2008-2013, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2008-2014, Google, International Business Machines Corporation +and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2008-2014, Google, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2008-2015, Google, International Business Machines Corporation +and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2008-2015, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2008-2015, International Business Machines Corporation +and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2008-2015, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2008-2016, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2008-2016, International Business Machines Corporation +and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2008-2016, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2009 International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2009, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2009-2010 IBM Corporation and Others. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2009-2010, Google, International Business Machines Corporation and * +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2009-2010, International Business Machines Corporation and * +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2009-2011, International Business Machines + Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2009-2011, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2009-2011, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2009-2011, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2009-2012, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2009-2012, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2009-2012, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2009-2013, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2009-2013, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2009-2013, International Business Machines Corporation and * +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2009-2014 International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2009-2014, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2009-2014, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2009-2015, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2009-2015, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2009-2015, International Business Machines Corporation and * +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2009-2016, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2009-2016, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2009-2016, International Business Machines Corporation, * +Google, and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2009-2017, International Business Machines Corporation, * +Google, and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2010 , Yahoo! Inc. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2010, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2010-2011, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2010-2011, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2010-2012, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2010-2012, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2010-2012,2014, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2010-2012,2015 International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2010-2013, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2010-2014, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2010-2014, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2010-2014, International Business Machines Corporation and * +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2010-2014, International Business Machines Corporation and others. +All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2010-2015, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2010-2015, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2010-2016 International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2010-2016, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2010-2016, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2010-2016, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2011, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2011-2012, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2011-2012, International Business Machines Corporation and * +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2011-2013, Apple Inc. and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2011-2013, Apple Inc.; Unicode, Inc.; and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2011-2013, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2011-2014 International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2011-2014, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2011-2015, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2011-2015, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2011-2015, International Business Machines Corporation and * +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2011-2016, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2012 International Business Machines Corporation +and others. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2012,2014 International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2012-2014, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2012-2015, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2012-2016, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2013, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2013, International Business Machines Corporation +and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2013, International Business Machines Corporation and * +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2013, International Business Machines Corporation and others. +All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2013-2014, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2013-2014, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2013-2014, International Business Machines Corporation and * +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2013-2014, International Business Machines Corporation and others. +All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2013-2015, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2013-2015, International Business Machines Corporation and others. +All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2013-2016, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2014 International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2014 International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2014, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2014, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2014-2015, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2014-2016, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2014-2016, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2014-2016, International Business Machines Corporation and +others. +All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2014-2016, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2014-2016, International Business Machines Corporation and others. +All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2015, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2015, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2015, International Business Machines Corporation +and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2015, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2015-2016, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2015-2016, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2015-2016, International Business Machines Corporation and others. +All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2016 International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2016 and later: Unicode, Inc. and others. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2016, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) 2016, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (C) The Internet Society (2002). All Rights Reserved. + +This document and translations of it may be copied and furnished to +others, and derivative works that comment on or otherwise explain it +or assist in its implementation may be prepared, copied, published +and distributed, in whole or in part, without restriction of any +kind, provided that the above copyright notice and this paragraph are +included on all such copies and derivative works. However, this +document itself may not be modified in any way, such as by removing +the copyright notice or references to the Internet Society or other +Internet organizations, except as needed for the purpose of +developing Internet standards in which case the procedures for +copyrights defined in the Internet Standards process must be +followed, or as required to translate it into languages other than +English. + +The limited permissions granted above are perpetual and will not be +revoked by the Internet Society or its successors or assigns. + +This document and the information contained herein is provided on an +"AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING +TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING +BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION +HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF +MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. +-------------------------------------------------------------------------------- +icu + +Copyright (C) {1999-2001}, International Business Machines Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 1996-2012, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 1996-2014, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 1996-2015, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 1996-2015, International Business Machines Corporation and others. +All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 1996-2016, International Business Machines Corporation + and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 1996-2016, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 1997-2011, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 1997-2012, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 1997-2012, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 1997-2015, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 1997-2016, International Business Machines Corporation +and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 1999-2012, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 1999-2016, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2000-2004 IBM, Inc. and Others. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2000-2005, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2000-2007, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2001-2005, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2001-2007, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2001-2010 International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2001-2011, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2001-2012, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2001-2012, International Business Machines Corporation +and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2001-2014, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2001-2015, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2001-2016, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2001-2016, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2002-2004, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2002-2005, International Business Machines Corporation +and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2002-2005, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2002-2006, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2002-2006, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2002-2007, International Business Machines Corporation +and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2002-2010, International Business Machines Corporation * +and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2002-2011, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2002-2011, International Business Machines Corporation +and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2002-2012, International Business Machines Corporation +and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2002-2012, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2002-2014, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2002-2014, International Business Machines Corporation +and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2002-2014, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2002-2015, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2002-2016 International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2002-2016, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2003, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2003-2004, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2003-2008, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2003-2010 International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2003-2011, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2003-2013, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2003-2014, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2004, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2004-2006, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2004-2010, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2004-2014 International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2004-2014, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2004-2015, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2004-2015, International Business Machines Corporation +and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2004-2016, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2007-2012, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2007-2012, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2007-2013, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2007-2014, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2007-2016, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2008-2010, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2008-2011, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2008-2015, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2009, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2011-2012 International Business Machines Corporation +and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2014, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2014-2016, International Business Machines +Corporation and others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) 2015, International Business Machines Corporation and +others. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright (c) IBM Corporation, 2000-2010. All rights reserved. + +This software is made available under the terms of the +ICU License -- ICU 1.8.1 and later. +-------------------------------------------------------------------------------- +icu + +Copyright (c) IBM Corporation, 2000-2011. All rights reserved. + +This software is made available under the terms of the +ICU License -- ICU 1.8.1 and later. +-------------------------------------------------------------------------------- +icu + +Copyright (c) IBM Corporation, 2000-2012. All rights reserved. + +This software is made available under the terms of the +ICU License -- ICU 1.8.1 and later. +-------------------------------------------------------------------------------- +icu + +Copyright (c) IBM Corporation, 2000-2014. All rights reserved. + +This software is made available under the terms of the +ICU License -- ICU 1.8.1 and later. +-------------------------------------------------------------------------------- +icu + +Copyright (c) IBM Corporation, 2000-2016. All rights reserved. + +This software is made available under the terms of the +ICU License -- ICU 1.8.1 and later. +-------------------------------------------------------------------------------- +icu + +Copyright 2001 and onwards Google Inc. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright 2004 and onwards Google Inc. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +Copyright 2007 Google Inc. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +-------------------------------------------------------------------------------- +icu + +UNICODE, INC. LICENSE AGREEMENT - DATA FILES AND SOFTWARE + +See Terms of Use +for definitions of Unicode Inc.’s Data Files and Software. + +NOTICE TO USER: Carefully read the following legal agreement. +BY DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING UNICODE INC.'S +DATA FILES ("DATA FILES"), AND/OR SOFTWARE ("SOFTWARE"), +YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE +TERMS AND CONDITIONS OF THIS AGREEMENT. +IF YOU DO NOT AGREE, DO NOT DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE +THE DATA FILES OR SOFTWARE. + +COPYRIGHT AND PERMISSION NOTICE + +Copyright © 1991-2023 Unicode, Inc. All rights reserved. +Distributed under the Terms of Use in https://www.unicode.org/copyright.html. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. + +Third-Party Software Licenses + +This section contains third-party software notices and/or additional +terms for licensed third-party software components included within ICU +libraries. + +ICU License - ICU 1.8.1 to ICU 57.1 + +COPYRIGHT AND PERMISSION NOTICE + +Copyright (c) 1995-2016 International Business Machines Corporation and others +All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, and/or sell copies of the Software, and to permit persons +to whom the Software is furnished to do so, provided that the above +copyright notice(s) and this permission notice appear in all copies of +the Software and that both the above copyright notice(s) and this +permission notice appear in supporting documentation. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY +SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER +RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF +CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, use +or other dealings in this Software without prior written authorization +of the copyright holder. + +All trademarks and registered trademarks mentioned herein are the +property of their respective owners. + +Chinese/Japanese Word Break Dictionary Data (cjdict.txt) + +The Google Chrome software developed by Google is licensed under +the BSD license. Other software included in this distribution is +provided under other licenses, as set forth below. + +The BSD License +http://opensource.org/licenses/bsd-license.php +Copyright (C) 2006-2008, Google Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +Redistributions of source code must retain the above copyright notice, +this list of conditions and the following disclaimer. +Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following +disclaimer in the documentation and/or other materials provided with +the distribution. +Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +The word list in cjdict.txt are generated by combining three word lists +listed below with further processing for compound word breaking. The +frequency is generated with an iterative training against Google web +corpora. + +* Libtabe (Chinese) + - https://sourceforge.net/project/?group_id=1519 + - Its license terms and conditions are shown below. + +* IPADIC (Japanese) + - http://chasen.aist-nara.ac.jp/chasen/distribution.html + - Its license terms and conditions are shown below. + +Copyright (c) 1999 TaBE Project. +Copyright (c) 1999 Pai-Hsiang Hsiao. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +. Neither the name of the TaBE Project nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +OF THE POSSIBILITY OF SUCH DAMAGE. + +Copyright (c) 1999 Computer Systems and Communication Lab, + Institute of Information Science, Academia + Sinica. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +. Neither the name of the Computer Systems and Communication Lab + nor the names of its contributors may be used to endorse or + promote products derived from this software without specific + prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +OF THE POSSIBILITY OF SUCH DAMAGE. + +Copyright 1996 Chih-Hao Tsai @ Beckman Institute, + University of Illinois +c-tsai4@uiuc.edu http://casper.beckman.uiuc.edu/~c-tsai4 + +Copyright 2000, 2001, 2002, 2003 Nara Institute of Science +and Technology. All Rights Reserved. + +Use, reproduction, and distribution of this software is permitted. +Any copy of this software, whether in its original form or modified, +must include both the above copyright notice and the following +paragraphs. + +Nara Institute of Science and Technology (NAIST), +the copyright holders, disclaims all warranties with regard to this +software, including all implied warranties of merchantability and +fitness, in no event shall NAIST be liable for +any special, indirect or consequential damages or any damages +whatsoever resulting from loss of use, data or profits, whether in an +action of contract, negligence or other tortuous action, arising out +of or in connection with the use or performance of this software. + +A large portion of the dictionary entries +originate from ICOT Free Software. The following conditions for ICOT +Free Software applies to the current dictionary as well. + +Each User may also freely distribute the Program, whether in its +original form or modified, to any third party or parties, PROVIDED +that the provisions of Section 3 ("NO WARRANTY") will ALWAYS appear +on, or be attached to, the Program, which is distributed substantially +in the same form as set out herein and that such intended +distribution, if actually made, will neither violate or otherwise +contravene any of the laws and regulations of the countries having +jurisdiction over the User or the intended distribution itself. + +NO WARRANTY + +The program was produced on an experimental basis in the course of the +research and development conducted during the project and is provided +to users as so produced on an experimental basis. Accordingly, the +program is provided without any warranty whatsoever, whether express, +implied, statutory or otherwise. The term "warranty" used herein +includes, but is not limited to, any warranty of the quality, +performance, merchantability and fitness for a particular purpose of +the program and the nonexistence of any infringement or violation of +any right of any third party. + +Each user of the program will agree and understand, and be deemed to +have agreed and understood, that there is no warranty whatsoever for +the program and, accordingly, the entire risk arising from or +otherwise connected with the program is assumed by the user. + +Therefore, neither ICOT, the copyright holder, or any other +organization that participated in or was otherwise related to the +development of the program and their respective officials, directors, +officers and other employees shall be held liable for any and all +damages, including, without limitation, general, special, incidental +and consequential damages, arising out of or otherwise in connection +with the use or inability to use the program or any product, material +or result produced or otherwise obtained by using the program, +regardless of whether they have been advised of, or otherwise had +knowledge of, the possibility of such damages at any time during the +project or thereafter. Each user will be deemed to have agreed to the +foregoing by his or her commencement of use of the program. The term +"use" as used herein includes, but is not limited to, the use, +modification, copying and distribution of the program and the +production of secondary products from the program. + +In the case where the program, whether in its original form or +modified, was distributed or delivered to or received by a user from +any person, organization or entity other than ICOT, unless it makes or +grants independently of ICOT any specific warranty to the user in +writing, such person, organization or entity, will also be exempted +from and not be held liable to the user for any such damages as noted +above as far as the program is concerned. + +Lao Word Break Dictionary Data (laodict.txt) + +Copyright (C) 2016 and later: Unicode, Inc. and others. +License & terms of use: http://www.unicode.org/copyright.html +Copyright (c) 2015 International Business Machines Corporation +and others. All Rights Reserved. + +Project: https://github.com/rober42539/lao-dictionary +Dictionary: https://github.com/rober42539/lao-dictionary/laodict.txt +License: https://github.com/rober42539/lao-dictionary/LICENSE.txt + (copied below) + +This file is derived from the above dictionary version of Nov 22, 2020 + +Copyright (C) 2013 Brian Eugene Wilson, Robert Martin Campbell. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. Redistributions in binary +form must reproduce the above copyright notice, this list of conditions and +the following disclaimer in the documentation and/or other materials +provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +OF THE POSSIBILITY OF SUCH DAMAGE. + +Burmese Word Break Dictionary Data (burmesedict.txt) + +Copyright (c) 2014 International Business Machines Corporation +and others. All Rights Reserved. + +This list is part of a project hosted at: + github.com/kanyawtech/myanmar-karen-word-lists + +Copyright (c) 2013, LeRoy Benjamin Sharon +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: Redistributions of source code must retain the above +copyright notice, this list of conditions and the following +disclaimer. Redistributions in binary form must reproduce the +above copyright notice, this list of conditions and the following +disclaimer in the documentation and/or other materials provided +with the distribution. + + Neither the name Myanmar Karen Word Lists, nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS +BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR +TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF +THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +Google double-conversion + +Copyright 2006-2011, the V8 project authors. All rights reserved. +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google Inc. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +File: install-sh (only for ICU4C) + + +Copyright 1991 by the Massachusetts Institute of Technology + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the name of M.I.T. not be used in advertising or +publicity pertaining to distribution of the software without specific, +written prior permission. M.I.T. makes no representations about the +suitability of this software for any purpose. It is provided "as is" +without express or implied warranty. +-------------------------------------------------------------------------------- +icu + +punycode.c 0.4.0 (2001-Nov-17-Sat) +http://www.cs.berkeley.edu/~amc/idn/ +Adam M. Costello +http://www.nicemice.net/amc/ + +Disclaimer and license + + Regarding this entire document or any portion of it (including + the pseudocode and C code), the author makes no guarantees and + is not responsible for any damage resulting from its use. The + author grants irrevocable permission to anyone to use, modify, + and distribute it in any way that does not diminish the rights + of anyone else to use, modify, and distribute it, provided that + redistributed derivative works do not contain misleading author or + version information. Derivative works need not be licensed under + similar terms. +-------------------------------------------------------------------------------- +include + +Copyright (C) 2011 Nick Bruun +Copyright (C) 2013 Vlad Lazarenko +Copyright (C) 2014 Nicolas Pauss +-------------------------------------------------------------------------------- +include + +Copyright (c) 2008-2009 Bjoern Hoehrmann + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +-------------------------------------------------------------------------------- +include + +Copyright (c) 2009 Florian Loitsch. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +-------------------------------------------------------------------------------- +include + +Copyright (c) 2011 - Nick Bruun. + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. +3. If you meet (any of) the author(s), you're encouraged to buy them a beer, + a drink or whatever is suited to the situation, given that you like the + software. +4. This notice may not be removed or altered from any source + distribution. +-------------------------------------------------------------------------------- +include + +Copyright (c) 2013-2019 Niels Lohmann . + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +-------------------------------------------------------------------------------- +inja + +Copyright (c) 2018-2021 Berscheid + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +-------------------------------------------------------------------------------- +inja + +Copyright (c) 2018-2021 Lars Berscheid + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +-------------------------------------------------------------------------------- +json + +Copyright (c) 2013-2022 Niels Lohmann + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +-------------------------------------------------------------------------------- +khronos + +Copyright (c) 2007-2012 The Khronos Group Inc. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and/or associated documentation files (the +"Materials"), to deal in the Materials without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Materials, and to +permit persons to whom the Materials are furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Materials. + +THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. +-------------------------------------------------------------------------------- +khronos + +Copyright (c) 2008-2009 The Khronos Group Inc. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and/or associated documentation files (the +"Materials"), to deal in the Materials without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Materials, and to +permit persons to whom the Materials are furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Materials. + +THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. +-------------------------------------------------------------------------------- +khronos + +Copyright (c) 2013-2014 The Khronos Group Inc. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and/or associated documentation files (the +"Materials"), to deal in the Materials without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Materials, and to +permit persons to whom the Materials are furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Materials. + +THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. +-------------------------------------------------------------------------------- +khronos + +Copyright (c) 2013-2016 The Khronos Group Inc. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and/or associated documentation files (the +"Materials"), to deal in the Materials without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Materials, and to +permit persons to whom the Materials are furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Materials. + +THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. +-------------------------------------------------------------------------------- +libXNVCtrl + +Copyright (c) 2008 NVIDIA, Corporation + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice (including the next +paragraph) shall be included in all copies or substantial portions of the +Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +-------------------------------------------------------------------------------- +libXNVCtrl + +Copyright (c) 2010 NVIDIA, Corporation + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice (including the next +paragraph) shall be included in all copies or substantial portions of the +Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +-------------------------------------------------------------------------------- +libcxx + +Copyright 2018 Ulf Adams +Copyright (c) Microsoft Corporation. All rights reserved. + +Boost Software License - Version 1.0 - August 17th, 2003 + +Permission is hereby granted, free of charge, to any person or organization +obtaining a copy of the software and accompanying documentation covered by +this license (the "Software") to use, reproduce, display, distribute, +execute, and transmit the Software, and to prepare derivative works of the +Software, and to permit third-parties to whom the Software is furnished to +do so, all subject to the following: + +The copyright notices in the Software and this entire statement, including +the above license grant, this restriction and the following disclaimer, +must be included in all copies of the Software, in whole or in part, and +all derivative works of the Software, unless such copies or derivative +works are solely in the form of machine-executable object code generated by +a source language processor. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT +SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE +FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. +-------------------------------------------------------------------------------- +libcxx +libcxxabi + +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. + + +--- LLVM Exceptions to the Apache 2.0 License ---- + +As an exception, if, as a result of your compiling your source code, portions +of this Software are embedded into an Object form of such source code, you +may redistribute such embedded portions in such Object form without complying +with the conditions of Sections 4(a), 4(b) and 4(d) of the License. + +In addition, if you combine or link compiled forms of this Software with +software that is licensed under the GPLv2 ("Combined Software") and if a +court of competent jurisdiction determines that the patent provision (Section +3), the indemnity provision (Section 9) or other Section of the License +conflicts with the conditions of the GPLv2, you may retroactively and +prospectively choose to deem waived or otherwise exclude such Section(s) of +the License, but only in their entirety and only with respect to the Combined +Software. +-------------------------------------------------------------------------------- +libcxx +libcxxabi + +Copyright (c) 2009-2014 by the contributors listed in CREDITS.TXT + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +-------------------------------------------------------------------------------- +libcxx +libcxxabi + +Copyright (c) 2009-2019 by the contributors listed in CREDITS.TXT + +All rights reserved. + +Developed by: + + LLVM Team + + University of Illinois at Urbana-Champaign + + http://llvm.org + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal with +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimers. + + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimers in the + documentation and/or other materials provided with the distribution. + + * Neither the names of the LLVM Team, University of Illinois at + Urbana-Champaign, nor the names of its contributors may be used to + endorse or promote products derived from this Software without specific + prior written permission. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE +SOFTWARE. +-------------------------------------------------------------------------------- +libjpeg-turbo + +Copyright (C) 1988 by Jef Poskanzer. + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, provided +that the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation. This software is provided "as is" without express or +implied warranty. +-------------------------------------------------------------------------------- +libjpeg-turbo + +Copyright (C) 1989 by Jef Poskanzer. +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, provided +that the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation. This software is provided "as is" without express or +implied warranty. +-------------------------------------------------------------------------------- +libjpeg-turbo + +Copyright (C) 2009-2011, Nokia Corporation and/or its subsidiary(-ies). +All Rights Reserved. +Author: Siarhei Siamashka +Copyright (C) 2013-2014, Linaro Limited. All Rights Reserved. +Author: Ragesh Radhakrishnan +Copyright (C) 2014-2016, D. R. Commander. All Rights Reserved. +Copyright (C) 2015-2016, Matthieu Darbois. All Rights Reserved. +Copyright (C) 2016, Siarhei Siamashka. All Rights Reserved. + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. +3. This notice may not be removed or altered from any source distribution. +-------------------------------------------------------------------------------- +libjpeg-turbo + +Copyright (C) 2009-2011, Nokia Corporation and/or its subsidiary(-ies). +All Rights Reserved. +Author: Siarhei Siamashka +Copyright (C) 2014, Siarhei Siamashka. All Rights Reserved. +Copyright (C) 2014, Linaro Limited. All Rights Reserved. +Copyright (C) 2015, D. R. Commander. All Rights Reserved. +Copyright (C) 2015-2016, Matthieu Darbois. All Rights Reserved. + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. +3. This notice may not be removed or altered from any source distribution. +-------------------------------------------------------------------------------- +libjpeg-turbo + +Copyright (C) 2013, MIPS Technologies, Inc., California. +All Rights Reserved. +Authors: Teodora Novkovic (teodora.novkovic@imgtec.com) + Darko Laus (darko.laus@imgtec.com) +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. +3. This notice may not be removed or altered from any source distribution. +-------------------------------------------------------------------------------- +libjpeg-turbo + +Copyright (C) 2013-2014, MIPS Technologies, Inc., California. +All Rights Reserved. +Authors: Teodora Novkovic (teodora.novkovic@imgtec.com) + Darko Laus (darko.laus@imgtec.com) +Copyright (C) 2015, D. R. Commander. All Rights Reserved. +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. +3. This notice may not be removed or altered from any source distribution. +-------------------------------------------------------------------------------- +libjpeg-turbo + +Copyright (C) 2014, D. R. Commander. All Rights Reserved. + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. +3. This notice may not be removed or altered from any source distribution. +-------------------------------------------------------------------------------- +libjpeg-turbo + +Copyright (C) 2014-2015, D. R. Commander. All Rights Reserved. + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. +3. This notice may not be removed or altered from any source distribution. +-------------------------------------------------------------------------------- +libjpeg-turbo + +Copyright (C) 2014-2015, D. R. Commander. All Rights Reserved. +Copyright (C) 2014, Jay Foad. All Rights Reserved. + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. +3. This notice may not be removed or altered from any source distribution. +-------------------------------------------------------------------------------- +libjpeg-turbo + +Copyright (C) 2015, D. R. Commander. All Rights Reserved. + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. +3. This notice may not be removed or altered from any source distribution. +-------------------------------------------------------------------------------- +libjpeg-turbo + +Copyright (C)2009-2014 D. R. Commander. All Rights Reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +- Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. +- Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. +- Neither the name of the libjpeg-turbo Project nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS", +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +libjpeg-turbo + +Copyright (C)2009-2015 D. R. Commander. All Rights Reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +- Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. +- Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. +- Neither the name of the libjpeg-turbo Project nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS", +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +libjpeg-turbo + +Copyright (C)2009-2016 D. R. Commander. All Rights Reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +- Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. +- Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. +- Neither the name of the libjpeg-turbo Project nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS", +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +libjpeg-turbo + +Copyright (C)2011 D. R. Commander. All Rights Reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +- Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. +- Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. +- Neither the name of the libjpeg-turbo Project nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS", +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +libjpeg-turbo + +Copyright (C)2011, 2015 D. R. Commander. All Rights Reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +- Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. +- Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. +- Neither the name of the libjpeg-turbo Project nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS", +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +libjpeg-turbo + +Copyright (C)2011-2016 D. R. Commander. All Rights Reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +- Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. +- Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. +- Neither the name of the libjpeg-turbo Project nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS", +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +libjpeg-turbo + +Copyright 2009 Pierre Ossman for Cendio AB +Copyright (C) 2010, D. R. Commander. + +Based on the x86 SIMD extension for IJG JPEG library - version 1.02 + +Copyright (C) 1999-2006, MIYASAKA Masaru. + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. +3. This notice may not be removed or altered from any source distribution. +-------------------------------------------------------------------------------- +libjpeg-turbo + +We are also required to state that + "The Graphics Interchange Format(c) is the Copyright property of + CompuServe Incorporated. GIF(sm) is a Service Mark property of + CompuServe Incorporated." +-------------------------------------------------------------------------------- +libjpeg-turbo + +libjpeg-turbo Licenses +====================== + +libjpeg-turbo is covered by three compatible BSD-style open source licenses: + +- The IJG (Independent JPEG Group) License, which is listed in + [README.ijg](README.ijg) + + This license applies to the libjpeg API library and associated programs + (any code inherited from libjpeg, and any modifications to that code.) + +- The Modified (3-clause) BSD License, which is listed in + [turbojpeg.c](turbojpeg.c) + + This license covers the TurboJPEG API library and associated programs. + +- The zlib License, which is listed in [simd/jsimdext.inc](simd/jsimdext.inc) + + This license is a subset of the other two, and it covers the libjpeg-turbo + SIMD extensions. + + +Complying with the libjpeg-turbo Licenses +========================================= + +This section provides a roll-up of the libjpeg-turbo licensing terms, to the +best of our understanding. + +1. If you are distributing a modified version of the libjpeg-turbo source, + then: + + 1. You cannot alter or remove any existing copyright or license notices + from the source. + + **Origin** + - Clause 1 of the IJG License + - Clause 1 of the Modified BSD License + - Clauses 1 and 3 of the zlib License + + 2. You must add your own copyright notice to the header of each source + file you modified, so others can tell that you modified that file (if + there is not an existing copyright header in that file, then you can + simply add a notice stating that you modified the file.) + + **Origin** + - Clause 1 of the IJG License + - Clause 2 of the zlib License + + 3. You must include the IJG README file, and you must not alter any of the + copyright or license text in that file. + + **Origin** + - Clause 1 of the IJG License + +2. If you are distributing only libjpeg-turbo binaries without the source, or + if you are distributing an application that statically links with + libjpeg-turbo, then: + + 1. Your product documentation must include a message stating: + + This software is based in part on the work of the Independent JPEG + Group. + + **Origin** + - Clause 2 of the IJG license + + 2. If your binary distribution includes or uses the TurboJPEG API, then + your product documentation must include the text of the Modified BSD + License. + + **Origin** + - Clause 2 of the Modified BSD License + +3. You cannot use the name of the IJG or The libjpeg-turbo Project or the + contributors thereof in advertising, publicity, etc. + + **Origin** + - IJG License + - Clause 3 of the Modified BSD License + +4. The IJG and The libjpeg-turbo Project do not warrant libjpeg-turbo to be + free of defects, nor do we accept any liability for undesirable + consequences resulting from your use of the software. + + **Origin** + - IJG License + - Modified BSD License + - zlib License +-------------------------------------------------------------------------------- +libjpeg-turbo + +libjpeg-turbo note: This file has been modified by The libjpeg-turbo Project +to include only information relevant to libjpeg-turbo, to wordsmith certain +sections, and to remove impolitic language that existed in the libjpeg v8 +README. It is included only for reference. Please see README.md for +information specific to libjpeg-turbo. + + +The Independent JPEG Group's JPEG software +========================================== + +This distribution contains a release of the Independent JPEG Group's free JPEG +software. You are welcome to redistribute this software and to use it for any +purpose, subject to the conditions under LEGAL ISSUES, below. + +This software is the work of Tom Lane, Guido Vollbeding, Philip Gladstone, +Bill Allombert, Jim Boucher, Lee Crocker, Bob Friesenhahn, Ben Jackson, +Julian Minguillon, Luis Ortiz, George Phillips, Davide Rossi, Ge' Weijers, +and other members of the Independent JPEG Group. + +IJG is not affiliated with the ISO/IEC JTC1/SC29/WG1 standards committee +(also known as JPEG, together with ITU-T SG16). + + +DOCUMENTATION ROADMAP +===================== + +This file contains the following sections: + +OVERVIEW General description of JPEG and the IJG software. +LEGAL ISSUES Copyright, lack of warranty, terms of distribution. +REFERENCES Where to learn more about JPEG. +ARCHIVE LOCATIONS Where to find newer versions of this software. +FILE FORMAT WARS Software *not* to get. +TO DO Plans for future IJG releases. + +Other documentation files in the distribution are: + +User documentation: + usage.txt Usage instructions for cjpeg, djpeg, jpegtran, + rdjpgcom, and wrjpgcom. + *.1 Unix-style man pages for programs (same info as usage.txt). + wizard.txt Advanced usage instructions for JPEG wizards only. + change.log Version-to-version change highlights. +Programmer and internal documentation: + libjpeg.txt How to use the JPEG library in your own programs. + example.c Sample code for calling the JPEG library. + structure.txt Overview of the JPEG library's internal structure. + coderules.txt Coding style rules --- please read if you contribute code. + +Please read at least usage.txt. Some information can also be found in the JPEG +FAQ (Frequently Asked Questions) article. See ARCHIVE LOCATIONS below to find +out where to obtain the FAQ article. + +If you want to understand how the JPEG code works, we suggest reading one or +more of the REFERENCES, then looking at the documentation files (in roughly +the order listed) before diving into the code. + + +OVERVIEW +======== + +This package contains C software to implement JPEG image encoding, decoding, +and transcoding. JPEG (pronounced "jay-peg") is a standardized compression +method for full-color and grayscale images. JPEG's strong suit is compressing +photographic images or other types of images that have smooth color and +brightness transitions between neighboring pixels. Images with sharp lines or +other abrupt features may not compress well with JPEG, and a higher JPEG +quality may have to be used to avoid visible compression artifacts with such +images. + +JPEG is lossy, meaning that the output pixels are not necessarily identical to +the input pixels. However, on photographic content and other "smooth" images, +very good compression ratios can be obtained with no visible compression +artifacts, and extremely high compression ratios are possible if you are +willing to sacrifice image quality (by reducing the "quality" setting in the +compressor.) + +This software implements JPEG baseline, extended-sequential, and progressive +compression processes. Provision is made for supporting all variants of these +processes, although some uncommon parameter settings aren't implemented yet. +We have made no provision for supporting the hierarchical or lossless +processes defined in the standard. + +We provide a set of library routines for reading and writing JPEG image files, +plus two sample applications "cjpeg" and "djpeg", which use the library to +perform conversion between JPEG and some other popular image file formats. +The library is intended to be reused in other applications. + +In order to support file conversion and viewing software, we have included +considerable functionality beyond the bare JPEG coding/decoding capability; +for example, the color quantization modules are not strictly part of JPEG +decoding, but they are essential for output to colormapped file formats or +colormapped displays. These extra functions can be compiled out of the +library if not required for a particular application. + +We have also included "jpegtran", a utility for lossless transcoding between +different JPEG processes, and "rdjpgcom" and "wrjpgcom", two simple +applications for inserting and extracting textual comments in JFIF files. + +The emphasis in designing this software has been on achieving portability and +flexibility, while also making it fast enough to be useful. In particular, +the software is not intended to be read as a tutorial on JPEG. (See the +REFERENCES section for introductory material.) Rather, it is intended to +be reliable, portable, industrial-strength code. We do not claim to have +achieved that goal in every aspect of the software, but we strive for it. + +We welcome the use of this software as a component of commercial products. +No royalty is required, but we do ask for an acknowledgement in product +documentation, as described under LEGAL ISSUES. + + +LEGAL ISSUES +============ + +In plain English: + +1. We don't promise that this software works. (But if you find any bugs, + please let us know!) +2. You can use this software for whatever you want. You don't have to pay us. +3. You may not pretend that you wrote this software. If you use it in a + program, you must acknowledge somewhere in your documentation that + you've used the IJG code. + +In legalese: + +The authors make NO WARRANTY or representation, either express or implied, +with respect to this software, its quality, accuracy, merchantability, or +fitness for a particular purpose. This software is provided "AS IS", and you, +its user, assume the entire risk as to its quality and accuracy. + +This software is copyright (C) 1991-2016, Thomas G. Lane, Guido Vollbeding. +All Rights Reserved except as specified below. + +Permission is hereby granted to use, copy, modify, and distribute this +software (or portions thereof) for any purpose, without fee, subject to these +conditions: +(1) If any part of the source code for this software is distributed, then this +README file must be included, with this copyright and no-warranty notice +unaltered; and any additions, deletions, or changes to the original files +must be clearly indicated in accompanying documentation. +(2) If only executable code is distributed, then the accompanying +documentation must state that "this software is based in part on the work of +the Independent JPEG Group". +(3) Permission for use of this software is granted only if the user accepts +full responsibility for any undesirable consequences; the authors accept +NO LIABILITY for damages of any kind. + +These conditions apply to any software derived from or based on the IJG code, +not just to the unmodified library. If you use our work, you ought to +acknowledge us. + +Permission is NOT granted for the use of any IJG author's name or company name +in advertising or publicity relating to this software or products derived from +it. This software may be referred to only as "the Independent JPEG Group's +software". + +We specifically permit and encourage the use of this software as the basis of +commercial products, provided that all warranty or liability claims are +assumed by the product vendor. + + +The Unix configuration script "configure" was produced with GNU Autoconf. +It is copyright by the Free Software Foundation but is freely distributable. +The same holds for its supporting scripts (config.guess, config.sub, +ltmain.sh). Another support script, install-sh, is copyright by X Consortium +but is also freely distributable. + +The IJG distribution formerly included code to read and write GIF files. +To avoid entanglement with the Unisys LZW patent (now expired), GIF reading +support has been removed altogether, and the GIF writer has been simplified +to produce "uncompressed GIFs". This technique does not use the LZW +algorithm; the resulting GIF files are larger than usual, but are readable +by all standard GIF decoders. + +We are required to state that + "The Graphics Interchange Format(c) is the Copyright property of + CompuServe Incorporated. GIF(sm) is a Service Mark property of + CompuServe Incorporated." + + +REFERENCES +========== + +We recommend reading one or more of these references before trying to +understand the innards of the JPEG software. + +The best short technical introduction to the JPEG compression algorithm is + Wallace, Gregory K. "The JPEG Still Picture Compression Standard", + Communications of the ACM, April 1991 (vol. 34 no. 4), pp. 30-44. +(Adjacent articles in that issue discuss MPEG motion picture compression, +applications of JPEG, and related topics.) If you don't have the CACM issue +handy, a PDF file containing a revised version of Wallace's article is +available at http://www.ijg.org/files/Wallace.JPEG.pdf. The file (actually +a preprint for an article that appeared in IEEE Trans. Consumer Electronics) +omits the sample images that appeared in CACM, but it includes corrections +and some added material. Note: the Wallace article is copyright ACM and IEEE, +and it may not be used for commercial purposes. + +A somewhat less technical, more leisurely introduction to JPEG can be found in +"The Data Compression Book" by Mark Nelson and Jean-loup Gailly, published by +M&T Books (New York), 2nd ed. 1996, ISBN 1-55851-434-1. This book provides +good explanations and example C code for a multitude of compression methods +including JPEG. It is an excellent source if you are comfortable reading C +code but don't know much about data compression in general. The book's JPEG +sample code is far from industrial-strength, but when you are ready to look +at a full implementation, you've got one here... + +The best currently available description of JPEG is the textbook "JPEG Still +Image Data Compression Standard" by William B. Pennebaker and Joan L. +Mitchell, published by Van Nostrand Reinhold, 1993, ISBN 0-442-01272-1. +Price US$59.95, 638 pp. The book includes the complete text of the ISO JPEG +standards (DIS 10918-1 and draft DIS 10918-2). + +The original JPEG standard is divided into two parts, Part 1 being the actual +specification, while Part 2 covers compliance testing methods. Part 1 is +titled "Digital Compression and Coding of Continuous-tone Still Images, +Part 1: Requirements and guidelines" and has document numbers ISO/IEC IS +10918-1, ITU-T T.81. Part 2 is titled "Digital Compression and Coding of +Continuous-tone Still Images, Part 2: Compliance testing" and has document +numbers ISO/IEC IS 10918-2, ITU-T T.83. + +The JPEG standard does not specify all details of an interchangeable file +format. For the omitted details we follow the "JFIF" conventions, revision +1.02. JFIF 1.02 has been adopted as an Ecma International Technical Report +and thus received a formal publication status. It is available as a free +download in PDF format from +http://www.ecma-international.org/publications/techreports/E-TR-098.htm. +A PostScript version of the JFIF document is available at +http://www.ijg.org/files/jfif.ps.gz. There is also a plain text version at +http://www.ijg.org/files/jfif.txt.gz, but it is missing the figures. + +The TIFF 6.0 file format specification can be obtained by FTP from +ftp://ftp.sgi.com/graphics/tiff/TIFF6.ps.gz. The JPEG incorporation scheme +found in the TIFF 6.0 spec of 3-June-92 has a number of serious problems. +IJG does not recommend use of the TIFF 6.0 design (TIFF Compression tag 6). +Instead, we recommend the JPEG design proposed by TIFF Technical Note #2 +(Compression tag 7). Copies of this Note can be obtained from +http://www.ijg.org/files/. It is expected that the next revision +of the TIFF spec will replace the 6.0 JPEG design with the Note's design. +Although IJG's own code does not support TIFF/JPEG, the free libtiff library +uses our library to implement TIFF/JPEG per the Note. + + +ARCHIVE LOCATIONS +================= + +The "official" archive site for this software is www.ijg.org. +The most recent released version can always be found there in +directory "files". + +The JPEG FAQ (Frequently Asked Questions) article is a source of some +general information about JPEG. +It is available on the World Wide Web at http://www.faqs.org/faqs/jpeg-faq/ +and other news.answers archive sites, including the official news.answers +archive at rtfm.mit.edu: ftp://rtfm.mit.edu/pub/usenet/news.answers/jpeg-faq/. +If you don't have Web or FTP access, send e-mail to mail-server@rtfm.mit.edu +with body + send usenet/news.answers/jpeg-faq/part1 + send usenet/news.answers/jpeg-faq/part2 + + +FILE FORMAT WARS +================ + +The ISO/IEC JTC1/SC29/WG1 standards committee (also known as JPEG, together +with ITU-T SG16) currently promotes different formats containing the name +"JPEG" which are incompatible with original DCT-based JPEG. IJG therefore does +not support these formats (see REFERENCES). Indeed, one of the original +reasons for developing this free software was to help force convergence on +common, interoperable format standards for JPEG files. +Don't use an incompatible file format! +(In any case, our decoder will remain capable of reading existing JPEG +image files indefinitely.) + + +TO DO +===== + +Please send bug reports, offers of help, etc. to jpeg-info@jpegclub.org. +-------------------------------------------------------------------------------- +libjxl + +Copyright 2021 The Chromium Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +libmicrohttpd +skia + +Copyright (c) 2011 Google Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +libpng + +COPYRIGHT NOTICE, DISCLAIMER, and LICENSE +========================================= + +PNG Reference Library License version 2 +--------------------------------------- + +* Copyright (c) 1995-2019 The PNG Reference Library Authors. +* Copyright (c) 2018-2019 Cosmin Truta. +* Copyright (c) 2000-2002, 2004, 2006-2018 Glenn Randers-Pehrson. +* Copyright (c) 1996-1997 Andreas Dilger. +* Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc. + +The software is supplied "as is", without warranty of any kind, +express or implied, including, without limitation, the warranties +of merchantability, fitness for a particular purpose, title, and +non-infringement. In no event shall the Copyright owners, or +anyone distributing the software, be liable for any damages or +other liability, whether in contract, tort or otherwise, arising +from, out of, or in connection with the software, or the use or +other dealings in the software, even if advised of the possibility +of such damage. + +Permission is hereby granted to use, copy, modify, and distribute +this software, or portions hereof, for any purpose, without fee, +subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you + must not claim that you wrote the original software. If you + use this software in a product, an acknowledgment in the product + documentation would be appreciated, but is not required. + +2. Altered source versions must be plainly marked as such, and must + not be misrepresented as being the original software. + +3. This Copyright notice may not be removed or altered from any + source or altered source distribution. + + +PNG Reference Library License version 1 (for libpng 0.5 through 1.6.35) +----------------------------------------------------------------------- + +libpng versions 1.0.7, July 1, 2000, through 1.6.35, July 15, 2018 are +Copyright (c) 2000-2002, 2004, 2006-2018 Glenn Randers-Pehrson, are +derived from libpng-1.0.6, and are distributed according to the same +disclaimer and license as libpng-1.0.6 with the following individuals +added to the list of Contributing Authors: + + Simon-Pierre Cadieux + Eric S. Raymond + Mans Rullgard + Cosmin Truta + Gilles Vollant + James Yu + Mandar Sahastrabuddhe + Google Inc. + Vadim Barkov + +and with the following additions to the disclaimer: + + There is no warranty against interference with your enjoyment of + the library or against infringement. There is no warranty that our + efforts or the library will fulfill any of your particular purposes + or needs. This library is provided with all faults, and the entire + risk of satisfactory quality, performance, accuracy, and effort is + with the user. + +Some files in the "contrib" directory and some configure-generated +files that are distributed with libpng have other copyright owners, and +are released under other open source licenses. + +libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are +Copyright (c) 1998-2000 Glenn Randers-Pehrson, are derived from +libpng-0.96, and are distributed according to the same disclaimer and +license as libpng-0.96, with the following individuals added to the +list of Contributing Authors: + + Tom Lane + Glenn Randers-Pehrson + Willem van Schaik + +libpng versions 0.89, June 1996, through 0.96, May 1997, are +Copyright (c) 1996-1997 Andreas Dilger, are derived from libpng-0.88, +and are distributed according to the same disclaimer and license as +libpng-0.88, with the following individuals added to the list of +Contributing Authors: + + John Bowler + Kevin Bracey + Sam Bushell + Magnus Holmgren + Greg Roelofs + Tom Tanner + +Some files in the "scripts" directory have other copyright owners, +but are released under this license. + +libpng versions 0.5, May 1995, through 0.88, January 1996, are +Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc. + +For the purposes of this copyright and license, "Contributing Authors" +is defined as the following set of individuals: + + Andreas Dilger + Dave Martindale + Guy Eric Schalnat + Paul Schmidt + Tim Wegner + +The PNG Reference Library is supplied "AS IS". The Contributing +Authors and Group 42, Inc. disclaim all warranties, expressed or +implied, including, without limitation, the warranties of +merchantability and of fitness for any purpose. The Contributing +Authors and Group 42, Inc. assume no liability for direct, indirect, +incidental, special, exemplary, or consequential damages, which may +result from the use of the PNG Reference Library, even if advised of +the possibility of such damage. + +Permission is hereby granted to use, copy, modify, and distribute this +source code, or portions hereof, for any purpose, without fee, subject +to the following restrictions: + +1. The origin of this source code must not be misrepresented. + +2. Altered versions must be plainly marked as such and must not + be misrepresented as being the original source. + +3. This Copyright notice may not be removed or altered from any + source or altered source distribution. + +The Contributing Authors and Group 42, Inc. specifically permit, +without fee, and encourage the use of this source code as a component +to supporting the PNG file format in commercial products. If you use +this source code in a product, acknowledgment is not required but would +be appreciated. +-------------------------------------------------------------------------------- +libtess2 + +Copyright (C) [dates of first publication] Silicon Graphics, Inc. +All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice including the dates of first publication and either this +permission notice or a reference to http://oss.sgi.com/projects/FreeB/ shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL SILICON GRAPHICS, INC. +BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE +OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of Silicon Graphics, Inc. shall not +be used in advertising or otherwise to promote the sale, use or other dealings in +this Software without prior written authorization from Silicon Graphics, Inc. +-------------------------------------------------------------------------------- +libwebp + +Copyright (c) 2010, Google Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of Google nor the names of its contributors may + be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +libwebp + +Copyright 2010 Google Inc. All Rights Reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of Google nor the names of its contributors may + be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +libwebp + +Copyright 2011 Google Inc. All Rights Reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of Google nor the names of its contributors may + be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +libwebp + +Copyright 2012 Google Inc. All Rights Reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of Google nor the names of its contributors may + be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +libwebp + +Copyright 2013 Google Inc. All Rights Reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of Google nor the names of its contributors may + be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +libwebp + +Copyright 2014 Google Inc. All Rights Reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of Google nor the names of its contributors may + be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +libwebp + +Copyright 2015 Google Inc. All Rights Reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of Google nor the names of its contributors may + be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +libwebp + +Copyright 2016 Google Inc. All Rights Reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of Google nor the names of its contributors may + be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +libwebp + +Copyright 2017 Google Inc. All Rights Reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of Google nor the names of its contributors may + be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +libwebp + +Copyright 2018 Google Inc. All Rights Reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of Google nor the names of its contributors may + be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +libwebp + +Copyright 2021 Google Inc. All Rights Reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of Google nor the names of its contributors may + be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +libwebp + +Copyright 2022 Google Inc. All Rights Reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of Google nor the names of its contributors may + be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +lints + +Copyright 2021, the Dart project authors. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google LLC nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +-------------------------------------------------------------------------------- +nested +provider + +MIT License + +Copyright (c) 2019 Remi Rousselet + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +-------------------------------------------------------------------------------- +package_info_plus + +Copyright 2017 The Chromium Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +-------------------------------------------------------------------------------- +package_info_plus_platform_interface + + + +// Copyright 2017 The Chromium Authors. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +path_parsing + +Copyright (c) 2018 Dan Field + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +-------------------------------------------------------------------------------- +perfetto + +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 + +Copyright (c) 2017, The Android Open Source Project + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. + +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. +-------------------------------------------------------------------------------- +petitparser +xml + +The MIT License + +Copyright (c) 2006-2023 Lukas Renggli. +All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +-------------------------------------------------------------------------------- +platform_detect + + 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 2017 Workiva Inc. + + 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. + +-------------------------------------------------------------------------------- +rapidjson + +Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip-> All rights reserved-> + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +-------------------------------------------------------------------------------- +rapidjson + +Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +-------------------------------------------------------------------------------- +rapidjson + +Copyright (c) 2006-2013 Alexander Chemeris + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + 3. Neither the name of the product nor the names of its contributors may + be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED +WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +rapidjson + +The above software in this distribution may have been modified by +THL A29 Limited ("Tencent Modifications"). +All Tencent Modifications are Copyright (C) 2015 THL A29 Limited. +-------------------------------------------------------------------------------- +root_certificates + +Mozilla Public License Version 2.0 +================================== + +1. Definitions +-------------- + +1.1. "Contributor" + means each individual or legal entity that creates, contributes to + the creation of, or owns Covered Software. + +1.2. "Contributor Version" + means the combination of the Contributions of others (if any) used + by a Contributor and that particular Contributor's Contribution. + +1.3. "Contribution" + means Covered Software of a particular Contributor. + +1.4. "Covered Software" + means Source Code Form to which the initial Contributor has attached + the notice in Exhibit A, the Executable Form of such Source Code + Form, and Modifications of such Source Code Form, in each case + including portions thereof. + +1.5. "Incompatible With Secondary Licenses" + means + + (a) that the initial Contributor has attached the notice described + in Exhibit B to the Covered Software; or + + (b) that the Covered Software was made available under the terms of + version 1.1 or earlier of the License, but not also under the + terms of a Secondary License. + +1.6. "Executable Form" + means any form of the work other than Source Code Form. + +1.7. "Larger Work" + means a work that combines Covered Software with other material, in + a separate file or files, that is not Covered Software. + +1.8. "License" + means this document. + +1.9. "Licensable" + means having the right to grant, to the maximum extent possible, + whether at the time of the initial grant or subsequently, any and + all of the rights conveyed by this License. + +1.10. "Modifications" + means any of the following: + + (a) any file in Source Code Form that results from an addition to, + deletion from, or modification of the contents of Covered + Software; or + + (b) any new file in Source Code Form that contains any Covered + Software. + +1.11. "Patent Claims" of a Contributor + means any patent claim(s), including without limitation, method, + process, and apparatus claims, in any patent Licensable by such + Contributor that would be infringed, but for the grant of the + License, by the making, using, selling, offering for sale, having + made, import, or transfer of either its Contributions or its + Contributor Version. + +1.12. "Secondary License" + means either the GNU General Public License, Version 2.0, the GNU + Lesser General Public License, Version 2.1, the GNU Affero General + Public License, Version 3.0, or any later versions of those + licenses. + +1.13. "Source Code Form" + means the form of the work preferred for making modifications. + +1.14. "You" (or "Your") + means an individual or a legal entity exercising rights under this + License. For legal entities, "You" includes any entity that + controls, is controlled by, or is under common control with You. For + purposes of this definition, "control" means (a) the power, direct + or indirect, to cause the direction or management of such entity, + whether by contract or otherwise, or (b) ownership of more than + fifty percent (50%) of the outstanding shares or beneficial + ownership of such entity. + +2. License Grants and Conditions +-------------------------------- + +2.1. Grants + +Each Contributor hereby grants You a world-wide, royalty-free, +non-exclusive license: + +(a) under intellectual property rights (other than patent or trademark) + Licensable by such Contributor to use, reproduce, make available, + modify, display, perform, distribute, and otherwise exploit its + Contributions, either on an unmodified basis, with Modifications, or + as part of a Larger Work; and + +(b) under Patent Claims of such Contributor to make, use, sell, offer + for sale, have made, import, and otherwise transfer either its + Contributions or its Contributor Version. + +2.2. Effective Date + +The licenses granted in Section 2.1 with respect to any Contribution +become effective for each Contribution on the date the Contributor first +distributes such Contribution. + +2.3. Limitations on Grant Scope + +The licenses granted in this Section 2 are the only rights granted under +this License. No additional rights or licenses will be implied from the +distribution or licensing of Covered Software under this License. +Notwithstanding Section 2.1(b) above, no patent license is granted by a +Contributor: + +(a) for any code that a Contributor has removed from Covered Software; + or + +(b) for infringements caused by: (i) Your and any other third party's + modifications of Covered Software, or (ii) the combination of its + Contributions with other software (except as part of its Contributor + Version); or + +(c) under Patent Claims infringed by Covered Software in the absence of + its Contributions. + +This License does not grant any rights in the trademarks, service marks, +or logos of any Contributor (except as may be necessary to comply with +the notice requirements in Section 3.4). + +2.4. Subsequent Licenses + +No Contributor makes additional grants as a result of Your choice to +distribute the Covered Software under a subsequent version of this +License (see Section 10.2) or under the terms of a Secondary License (if +permitted under the terms of Section 3.3). + +2.5. Representation + +Each Contributor represents that the Contributor believes its +Contributions are its original creation(s) or it has sufficient rights +to grant the rights to its Contributions conveyed by this License. + +2.6. Fair Use + +This License is not intended to limit any rights You have under +applicable copyright doctrines of fair use, fair dealing, or other +equivalents. + +2.7. Conditions + +Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted +in Section 2.1. + +3. Responsibilities +------------------- + +3.1. Distribution of Source Form + +All distribution of Covered Software in Source Code Form, including any +Modifications that You create or to which You contribute, must be under +the terms of this License. You must inform recipients that the Source +Code Form of the Covered Software is governed by the terms of this +License, and how they can obtain a copy of this License. You may not +attempt to alter or restrict the recipients' rights in the Source Code +Form. + +3.2. Distribution of Executable Form + +If You distribute Covered Software in Executable Form then: + +(a) such Covered Software must also be made available in Source Code + Form, as described in Section 3.1, and You must inform recipients of + the Executable Form how they can obtain a copy of such Source Code + Form by reasonable means in a timely manner, at a charge no more + than the cost of distribution to the recipient; and + +(b) You may distribute such Executable Form under the terms of this + License, or sublicense it under different terms, provided that the + license for the Executable Form does not attempt to limit or alter + the recipients' rights in the Source Code Form under this License. + +3.3. Distribution of a Larger Work + +You may create and distribute a Larger Work under terms of Your choice, +provided that You also comply with the requirements of this License for +the Covered Software. If the Larger Work is a combination of Covered +Software with a work governed by one or more Secondary Licenses, and the +Covered Software is not Incompatible With Secondary Licenses, this +License permits You to additionally distribute such Covered Software +under the terms of such Secondary License(s), so that the recipient of +the Larger Work may, at their option, further distribute the Covered +Software under the terms of either this License or such Secondary +License(s). + +3.4. Notices + +You may not remove or alter the substance of any license notices +(including copyright notices, patent notices, disclaimers of warranty, +or limitations of liability) contained within the Source Code Form of +the Covered Software, except that You may alter any license notices to +the extent required to remedy known factual inaccuracies. + +3.5. Application of Additional Terms + +You may choose to offer, and to charge a fee for, warranty, support, +indemnity or liability obligations to one or more recipients of Covered +Software. However, You may do so only on Your own behalf, and not on +behalf of any Contributor. You must make it absolutely clear that any +such warranty, support, indemnity, or liability obligation is offered by +You alone, and You hereby agree to indemnify every Contributor for any +liability incurred by such Contributor as a result of warranty, support, +indemnity or liability terms You offer. You may include additional +disclaimers of warranty and limitations of liability specific to any +jurisdiction. + +4. Inability to Comply Due to Statute or Regulation +--------------------------------------------------- + +If it is impossible for You to comply with any of the terms of this +License with respect to some or all of the Covered Software due to +statute, judicial order, or regulation then You must: (a) comply with +the terms of this License to the maximum extent possible; and (b) +describe the limitations and the code they affect. Such description must +be placed in a text file included with all distributions of the Covered +Software under this License. Except to the extent prohibited by statute +or regulation, such description must be sufficiently detailed for a +recipient of ordinary skill to be able to understand it. + +5. Termination +-------------- + +5.1. The rights granted under this License will terminate automatically +if You fail to comply with any of its terms. However, if You become +compliant, then the rights granted under this License from a particular +Contributor are reinstated (a) provisionally, unless and until such +Contributor explicitly and finally terminates Your grants, and (b) on an +ongoing basis, if such Contributor fails to notify You of the +non-compliance by some reasonable means prior to 60 days after You have +come back into compliance. Moreover, Your grants from a particular +Contributor are reinstated on an ongoing basis if such Contributor +notifies You of the non-compliance by some reasonable means, this is the +first time You have received notice of non-compliance with this License +from such Contributor, and You become compliant prior to 30 days after +Your receipt of the notice. + +5.2. If You initiate litigation against any entity by asserting a patent +infringement claim (excluding declaratory judgment actions, +counter-claims, and cross-claims) alleging that a Contributor Version +directly or indirectly infringes any patent, then the rights granted to +You by any and all Contributors for the Covered Software under Section +2.1 of this License shall terminate. + +5.3. In the event of termination under Sections 5.1 or 5.2 above, all +end user license agreements (excluding distributors and resellers) which +have been validly granted by You or Your distributors under this License +prior to termination shall survive termination. + +************************************************************************ +* * +* 6. Disclaimer of Warranty * +* ------------------------- * +* * +* Covered Software is provided under this License on an "as is" * +* basis, without warranty of any kind, either expressed, implied, or * +* statutory, including, without limitation, warranties that the * +* Covered Software is free of defects, merchantable, fit for a * +* particular purpose or non-infringing. The entire risk as to the * +* quality and performance of the Covered Software is with You. * +* Should any Covered Software prove defective in any respect, You * +* (not any Contributor) assume the cost of any necessary servicing, * +* repair, or correction. This disclaimer of warranty constitutes an * +* essential part of this License. No use of any Covered Software is * +* authorized under this License except under this disclaimer. * +* * +************************************************************************ + +************************************************************************ +* * +* 7. Limitation of Liability * +* -------------------------- * +* * +* Under no circumstances and under no legal theory, whether tort * +* (including negligence), contract, or otherwise, shall any * +* Contributor, or anyone who distributes Covered Software as * +* permitted above, be liable to You for any direct, indirect, * +* special, incidental, or consequential damages of any character * +* including, without limitation, damages for lost profits, loss of * +* goodwill, work stoppage, computer failure or malfunction, or any * +* and all other commercial damages or losses, even if such party * +* shall have been informed of the possibility of such damages. This * +* limitation of liability shall not apply to liability for death or * +* personal injury resulting from such party's negligence to the * +* extent applicable law prohibits such limitation. Some * +* jurisdictions do not allow the exclusion or limitation of * +* incidental or consequential damages, so this exclusion and * +* limitation may not apply to You. * +* * +************************************************************************ + +8. Litigation +------------- + +Any litigation relating to this License may be brought only in the +courts of a jurisdiction where the defendant maintains its principal +place of business and such litigation shall be governed by laws of that +jurisdiction, without reference to its conflict-of-law provisions. +Nothing in this Section shall prevent a party's ability to bring +cross-claims or counter-claims. + +9. Miscellaneous +---------------- + +This License represents the complete agreement concerning the subject +matter hereof. If any provision of this License is held to be +unenforceable, such provision shall be reformed only to the extent +necessary to make it enforceable. Any law or regulation which provides +that the language of a contract shall be construed against the drafter +shall not be used to construe this License against a Contributor. + +10. Versions of the License +--------------------------- + +10.1. New Versions + +Mozilla Foundation is the license steward. Except as provided in Section +10.3, no one other than the license steward has the right to modify or +publish new versions of this License. Each version will be given a +distinguishing version number. + +10.2. Effect of New Versions + +You may distribute the Covered Software under the terms of the version +of the License under which You originally received the Covered Software, +or under the terms of any subsequent version published by the license +steward. + +10.3. Modified Versions + +If you create software not governed by this License, and you want to +create a new license for such software, you may create and use a +modified version of this License if you rename the license and remove +any references to the name of the license steward (except to note that +such modified license differs from this License). + +10.4. Distributing Source Code Form that is Incompatible With Secondary +Licenses + +If You choose to distribute Source Code Form that is Incompatible With +Secondary Licenses under the terms of this version of the License, the +notice described in Exhibit B of this License must be attached. + +Exhibit A - Source Code Form License Notice +------------------------------------------- + + This Source Code Form is subject to the terms of the Mozilla Public + License, v. 2.0. If a copy of the MPL was not distributed with this + file, You can obtain one at http://mozilla.org/MPL/2.0/. + +If it is not possible or desirable to put the notice in a particular +file, then You may include the notice in a location (such as a LICENSE +file in a relevant directory) where a recipient would be likely to look +for such a notice. + +You may add additional accurate notices of copyright ownership. + +Exhibit B - "Incompatible With Secondary Licenses" Notice +--------------------------------------------------------- + + This Source Code Form is "Incompatible With Secondary Licenses", as + defined by the Mozilla Public License, v. 2.0. + +You may obtain a copy of this library's Source Code Form from: https://dart.googlesource.com/root_certificates/+/692f6d6488af68e0121317a9c2c9eb393eb0ee50 + +-------------------------------------------------------------------------------- +skia + +Copyright (C) 2014 Google Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +skia + +Copyright (c) 2011 Google Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +skia + +Copyright (c) 2014 Google Inc. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +skia + +Copyright 2005 The Android Open Source Project + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +skia + +Copyright 2006 The Android Open Source Project + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +skia + +Copyright 2006-2012 The Android Open Source Project +Copyright 2012 Mozilla Foundation + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +skia + +Copyright 2007 The Android Open Source Project + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +skia + +Copyright 2008 Google Inc. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +skia + +Copyright 2008 The Android Open Source Project + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +skia + +Copyright 2009 The Android Open Source Project + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +skia + +Copyright 2009-2015 Google Inc. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +skia + +Copyright 2010 Google Inc. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +skia + +Copyright 2010 The Android Open Source Project + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +skia + +Copyright 2011 Google Inc. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +skia + +Copyright 2011 Google Inc. +Copyright 2012 Mozilla Foundation + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +skia + +Copyright 2011 The Android Open Source Project + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +skia + +Copyright 2012 Google Inc. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +skia + +Copyright 2012 Google LLC + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +skia + +Copyright 2012 The Android Open Source Project + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +skia + +Copyright 2013 Google Inc. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +skia + +Copyright 2013 The Android Open Source Project + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +skia + +Copyright 2014 Google Inc. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +skia + +Copyright 2014 Google Inc. +Copyright 2017 ARM Ltd. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +skia + +Copyright 2014 The Android Open Source Project + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +skia + +Copyright 2015 Google Inc. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +skia + +Copyright 2015 The Android Open Source Project + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +skia + +Copyright 2016 Google Inc. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +skia + +Copyright 2016 Mozilla Foundation + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +skia + +Copyright 2016 The Android Open Source Project + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +skia + +Copyright 2017 ARM Ltd. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +skia + +Copyright 2017 Google Inc. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +skia + +Copyright 2018 Google Inc. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +skia + +Copyright 2018 Google LLC + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +skia + +Copyright 2018 Google LLC. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +skia + +Copyright 2018 Google, LLC + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +skia + +Copyright 2018 The Android Open Source Project + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +skia + +Copyright 2019 Google Inc. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +skia + +Copyright 2019 Google LLC + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +skia + +Copyright 2019 Google LLC. +-------------------------------------------------------------------------------- +skia + +Copyright 2019 Google LLC. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +skia + +Copyright 2019 Google, LLC + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +skia + +Copyright 2019 The Android Open Source Project + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +skia + +Copyright 2020 Google Inc. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +skia + +Copyright 2020 Google LLC + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +skia + +Copyright 2020 Google LLC. +-------------------------------------------------------------------------------- +skia + +Copyright 2020 Google LLC. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +skia + +Copyright 2020 Google, LLC + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +skia + +Copyright 2021 Google Inc. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +skia + +Copyright 2021 Google LLC + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +skia + +Copyright 2021 Google LLC. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +skia + +Copyright 2021 Google, LLC + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +skia + +Copyright 2022 Google Inc. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +skia + +Copyright 2022 Google LLC + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +skia + +Copyright 2022 Google LLC. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +skia + +Copyright 2022 Google, LLC + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +skia + +Copyright 2023 Google Inc. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +skia + +Copyright 2023 Google LLC + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +skia + +Copyright 2023 Google LLC. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +skia + +Copyright 2023 The Android Open Source Project + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +spirv-cross + +Copyright 2014-2016,2021 The Khronos Group, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +-------------------------------------------------------------------------------- +spring_animation + +Copyright (c) Meta Platforms, Inc. and affiliates. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +-------------------------------------------------------------------------------- +sqlite + +The source code for SQLite is in the public domain. No claim of +copyright is made on any part of the core source code. (The +documentation and test code is a different matter - some sections of +documentation and test logic are governed by open-source licenses.) +All contributors to the SQLite core software have signed affidavits +specifically disavowing any copyright interest in the code. This means +that anybody is able to legally do anything they want with the SQLite +source code. + +There are other SQL database engines with liberal licenses that allow +the code to be broadly and freely used. But those other engines are +still governed by copyright law. SQLite is different in that copyright +law simply does not apply. + +The source code files for other SQL database engines typically begin +with a comment describing your legal rights to view and copy that +file. The SQLite source code contains no license since it is not +governed by copyright. Instead of a license, the SQLite source code +offers a blessing: + +May you do good and not evil +May you find forgiveness for yourself and forgive others +May you share freely, never taking more than you give. +-------------------------------------------------------------------------------- +stack_trace + +Copyright 2014, the Dart project authors. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google LLC nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +-------------------------------------------------------------------------------- +term_glyph + +Copyright 2017, the Dart project authors. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google LLC nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +-------------------------------------------------------------------------------- +test_api + +Copyright 2018, the Dart project authors. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google LLC nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +-------------------------------------------------------------------------------- +time + +MIT License + +Copyright (c) 2019 Jeremiah Ogbomo + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +-------------------------------------------------------------------------------- +universal_platform + +MIT License + +Copyright (c) 2019 gskinner.com + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +-------------------------------------------------------------------------------- +vector_math + +Copyright 2015, Google Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Copyright (C) 2013 Andrew Magill + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. +3. This notice may not be removed or altered from any source distribution. + +-------------------------------------------------------------------------------- +vulkan-validation-layers + +Copyright (C) 2012-2020 Yann Collet + +BSD 2-Clause License (https://www.opensource.org/licenses/bsd-license.php) + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following disclaimer + in the documentation and/or other materials provided with the + distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +vulkan-validation-layers +vulkan_memory_allocator + +Copyright (c) 2017-2022 Advanced Micro Devices, Inc. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +-------------------------------------------------------------------------------- +vulkanmemoryallocator + +Copyright 2018 Google Inc. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +web + +Copyright 2023, the Dart project authors. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google LLC nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +-------------------------------------------------------------------------------- +web_locale_keymap + +Copyright (c) 2022 Google LLC + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +-------------------------------------------------------------------------------- +win32 + +Copyright 2019, Dart | Windows. All rights reserved. +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google Inc. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +xxhash + +Copyright (C) 2012-2016, Yann Collet + +BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php) + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +* Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +xxhash + +Copyright (C) 2012-2016, Yann Collet. + +BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php) + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +zlib + +Copyright (C) 1995-2022 Jean-loup Gailly and Mark Adler + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. +3. This notice may not be removed or altered from any source distribution. +-------------------------------------------------------------------------------- +zlib + +Copyright (C) 1998-2005 Gilles Vollant +-------------------------------------------------------------------------------- +zlib + +Copyright (C) 2017 ARM, Inc. +Copyright 2017 The Chromium Authors + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +zlib + +Copyright 2017 The Chromium Authors + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +zlib + +Copyright 2018 The Chromium Authors + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +zlib + +Copyright 2019 The Chromium Authors + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +zlib + +Copyright 2022 The Chromium Authors + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +zlib + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. +3. This notice may not be removed or altered from any source distribution. +-------------------------------------------------------------------------------- +zlib + +version 1.2.12, March 27th, 2022 + +Copyright (C) 1995-2022 Jean-loup Gailly and Mark Adler + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. +3. This notice may not be removed or altered from any source distribution. diff --git a/example/assets/fonts/digital-7.ttf b/assets/assets/fonts/digital-7.ttf similarity index 100% rename from example/assets/fonts/digital-7.ttf rename to assets/assets/fonts/digital-7.ttf diff --git a/example/assets/icons/fitness-svgrepo-com.svg b/assets/assets/icons/fitness-svgrepo-com.svg similarity index 100% rename from example/assets/icons/fitness-svgrepo-com.svg rename to assets/assets/icons/fitness-svgrepo-com.svg diff --git a/example/assets/icons/fl_chart_logo_icon.png b/assets/assets/icons/fl_chart_logo_icon.png similarity index 100% rename from example/assets/icons/fl_chart_logo_icon.png rename to assets/assets/icons/fl_chart_logo_icon.png diff --git a/example/assets/icons/fl_chart_logo_text.svg b/assets/assets/icons/fl_chart_logo_text.svg similarity index 100% rename from example/assets/icons/fl_chart_logo_text.svg rename to assets/assets/icons/fl_chart_logo_text.svg diff --git a/example/assets/icons/ic_bar_chart.svg b/assets/assets/icons/ic_bar_chart.svg similarity index 100% rename from example/assets/icons/ic_bar_chart.svg rename to assets/assets/icons/ic_bar_chart.svg diff --git a/example/assets/icons/ic_line_chart.svg b/assets/assets/icons/ic_line_chart.svg similarity index 100% rename from example/assets/icons/ic_line_chart.svg rename to assets/assets/icons/ic_line_chart.svg diff --git a/example/assets/icons/ic_pie_chart.svg b/assets/assets/icons/ic_pie_chart.svg similarity index 100% rename from example/assets/icons/ic_pie_chart.svg rename to assets/assets/icons/ic_pie_chart.svg diff --git a/example/assets/icons/ic_radar_chart.svg b/assets/assets/icons/ic_radar_chart.svg similarity index 100% rename from example/assets/icons/ic_radar_chart.svg rename to assets/assets/icons/ic_radar_chart.svg diff --git a/example/assets/icons/ic_scatter_chart.svg b/assets/assets/icons/ic_scatter_chart.svg similarity index 100% rename from example/assets/icons/ic_scatter_chart.svg rename to assets/assets/icons/ic_scatter_chart.svg diff --git a/example/assets/icons/image_annotation.png b/assets/assets/icons/image_annotation.png similarity index 100% rename from example/assets/icons/image_annotation.png rename to assets/assets/icons/image_annotation.png diff --git a/example/assets/icons/librarian-svgrepo-com.svg b/assets/assets/icons/librarian-svgrepo-com.svg similarity index 100% rename from example/assets/icons/librarian-svgrepo-com.svg rename to assets/assets/icons/librarian-svgrepo-com.svg diff --git a/example/assets/icons/ophthalmology-svgrepo-com.svg b/assets/assets/icons/ophthalmology-svgrepo-com.svg similarity index 100% rename from example/assets/icons/ophthalmology-svgrepo-com.svg rename to assets/assets/icons/ophthalmology-svgrepo-com.svg diff --git a/example/assets/icons/worker-svgrepo-com.svg b/assets/assets/icons/worker-svgrepo-com.svg similarity index 100% rename from example/assets/icons/worker-svgrepo-com.svg rename to assets/assets/icons/worker-svgrepo-com.svg diff --git a/assets/fonts/MaterialIcons-Regular.otf b/assets/fonts/MaterialIcons-Regular.otf new file mode 100644 index 0000000000..9c1a3b8e8c Binary files /dev/null and b/assets/fonts/MaterialIcons-Regular.otf differ diff --git a/assets/packages/cupertino_icons/assets/CupertinoIcons.ttf b/assets/packages/cupertino_icons/assets/CupertinoIcons.ttf new file mode 100644 index 0000000000..e6b745f90f Binary files /dev/null and b/assets/packages/cupertino_icons/assets/CupertinoIcons.ttf differ diff --git a/assets/shaders/ink_sparkle.frag b/assets/shaders/ink_sparkle.frag new file mode 100644 index 0000000000..04e5efc15d --- /dev/null +++ b/assets/shaders/ink_sparkle.frag @@ -0,0 +1,124 @@ +{ + "sksl": "// This SkSL shader is autogenerated by spirv-cross.\n\nfloat4 flutter_FragCoord;\n\nuniform vec4 u_color;\nuniform vec4 u_composite_1;\nuniform vec2 u_center;\nuniform float u_max_radius;\nuniform vec2 u_resolution_scale;\nuniform vec2 u_noise_scale;\nuniform float u_noise_phase;\nuniform vec2 u_circle1;\nuniform vec2 u_circle2;\nuniform vec2 u_circle3;\nuniform vec2 u_rotation1;\nuniform vec2 u_rotation2;\nuniform vec2 u_rotation3;\n\nvec4 fragColor;\n\nfloat u_alpha;\nfloat u_sparkle_alpha;\nfloat u_blur;\nfloat u_radius_scale;\n\nvec2 FLT_flutter_local_FlutterFragCoord()\n{\n return flutter_FragCoord.xy;\n}\n\nmat2 FLT_flutter_local_rotate2d(vec2 rad)\n{\n return mat2(vec2(rad.x, -rad.y), vec2(rad.y, rad.x));\n}\n\nfloat FLT_flutter_local_soft_circle(vec2 uv, vec2 xy, float radius, float blur)\n{\n float blur_half = blur * 0.5;\n float d = distance(uv, xy);\n return 1.0 - smoothstep(1.0 - blur_half, 1.0 + blur_half, d / radius);\n}\n\nfloat FLT_flutter_local_circle_grid(vec2 resolution, inout vec2 p, vec2 xy, vec2 rotation, float cell_diameter)\n{\n vec2 param = rotation;\n p = (FLT_flutter_local_rotate2d(param) * (xy - p)) + xy;\n p = mod(p, vec2(cell_diameter)) / resolution;\n float cell_uv = (cell_diameter / resolution.y) * 0.5;\n float r = 0.64999997615814208984375 * cell_uv;\n vec2 param_1 = p;\n vec2 param_2 = vec2(cell_uv);\n float param_3 = r;\n float param_4 = r * 50.0;\n return FLT_flutter_local_soft_circle(param_1, param_2, param_3, param_4);\n}\n\nfloat FLT_flutter_local_turbulence(vec2 uv)\n{\n vec2 uv_scale = uv * vec2(0.800000011920928955078125);\n vec2 param = vec2(0.800000011920928955078125);\n vec2 param_1 = uv_scale;\n vec2 param_2 = u_circle1;\n vec2 param_3 = u_rotation1;\n float param_4 = 0.17000000178813934326171875;\n float _319 = FLT_flutter_local_circle_grid(param, param_1, param_2, param_3, param_4);\n float g1 = _319;\n vec2 param_5 = vec2(0.800000011920928955078125);\n vec2 param_6 = uv_scale;\n vec2 param_7 = u_circle2;\n vec2 param_8 = u_rotation2;\n float param_9 = 0.20000000298023223876953125;\n float _331 = FLT_flutter_local_circle_grid(param_5, param_6, param_7, param_8, param_9);\n float g2 = _331;\n vec2 param_10 = vec2(0.800000011920928955078125);\n vec2 param_11 = uv_scale;\n vec2 param_12 = u_circle3;\n vec2 param_13 = u_rotation3;\n float param_14 = 0.2750000059604644775390625;\n float _344 = FLT_flutter_local_circle_grid(param_10, param_11, param_12, param_13, param_14);\n float g3 = _344;\n float v = (((g1 * g1) + g2) - g3) * 0.5;\n return clamp(0.449999988079071044921875 + (0.800000011920928955078125 * v), 0.0, 1.0);\n}\n\nfloat FLT_flutter_local_soft_ring(vec2 uv, vec2 xy, float radius, float thickness, float blur)\n{\n vec2 param = uv;\n vec2 param_1 = xy;\n float param_2 = radius + thickness;\n float param_3 = blur;\n float circle_outer = FLT_flutter_local_soft_circle(param, param_1, param_2, param_3);\n vec2 param_4 = uv;\n vec2 param_5 = xy;\n float param_6 = max(radius - thickness, 0.0);\n float param_7 = blur;\n float circle_inner = FLT_flutter_local_soft_circle(param_4, param_5, param_6, param_7);\n return clamp(circle_outer - circle_inner, 0.0, 1.0);\n}\n\nfloat FLT_flutter_local_triangle_noise(inout vec2 n)\n{\n n = fract(n * vec2(5.398700237274169921875, 5.442100048065185546875));\n n += vec2(dot(n.yx, n + vec2(21.5351009368896484375, 14.3136997222900390625)));\n float xy = n.x * n.y;\n return (fract(xy * 95.43070220947265625) + fract(xy * 75.0496063232421875)) - 1.0;\n}\n\nfloat FLT_flutter_local_threshold(float v, float l, float h)\n{\n return step(l, v) * (1.0 - step(h, v));\n}\n\nfloat FLT_flutter_local_sparkle(vec2 uv, float t)\n{\n vec2 param = uv;\n float _242 = FLT_flutter_local_triangle_noise(param);\n float n = _242;\n float param_1 = n;\n float param_2 = 0.0;\n float param_3 = 0.0500000007450580596923828125;\n float s = FLT_flutter_local_threshold(param_1, param_2, param_3);\n float param_4 = n + sin(3.1415927410125732421875 * (t + 0.3499999940395355224609375));\n float param_5 = 0.100000001490116119384765625;\n float param_6 = 0.1500000059604644775390625;\n s += FLT_flutter_local_threshold(param_4, param_5, param_6);\n float param_7 = n + sin(3.1415927410125732421875 * (t + 0.699999988079071044921875));\n float param_8 = 0.20000000298023223876953125;\n float param_9 = 0.25;\n s += FLT_flutter_local_threshold(param_7, param_8, param_9);\n float param_10 = n + sin(3.1415927410125732421875 * (t + 1.0499999523162841796875));\n float param_11 = 0.300000011920928955078125;\n float param_12 = 0.3499999940395355224609375;\n s += FLT_flutter_local_threshold(param_10, param_11, param_12);\n return clamp(s, 0.0, 1.0) * 0.550000011920928955078125;\n}\n\nvoid FLT_main()\n{\n u_alpha = u_composite_1.x;\n u_sparkle_alpha = u_composite_1.y;\n u_blur = u_composite_1.z;\n u_radius_scale = u_composite_1.w;\n vec2 p = FLT_flutter_local_FlutterFragCoord();\n vec2 uv_1 = p * u_resolution_scale;\n vec2 density_uv = uv_1 - mod(p, u_noise_scale);\n float radius = u_max_radius * u_radius_scale;\n vec2 param_13 = uv_1;\n float turbulence = FLT_flutter_local_turbulence(param_13);\n vec2 param_14 = p;\n vec2 param_15 = u_center;\n float param_16 = radius;\n float param_17 = 0.0500000007450580596923828125 * u_max_radius;\n float param_18 = u_blur;\n float ring = FLT_flutter_local_soft_ring(param_14, param_15, param_16, param_17, param_18);\n vec2 param_19 = density_uv;\n float param_20 = u_noise_phase;\n float sparkle = ((FLT_flutter_local_sparkle(param_19, param_20) * ring) * turbulence) * u_sparkle_alpha;\n vec2 param_21 = p;\n vec2 param_22 = u_center;\n float param_23 = radius;\n float param_24 = u_blur;\n float wave_alpha = (FLT_flutter_local_soft_circle(param_21, param_22, param_23, param_24) * u_alpha) * u_color.w;\n vec4 wave_color = vec4(u_color.xyz * wave_alpha, wave_alpha);\n fragColor = mix(wave_color, vec4(1.0), vec4(sparkle));\n}\n\nhalf4 main(float2 iFragCoord)\n{\n flutter_FragCoord = float4(iFragCoord, 0, 0);\n FLT_main();\n return fragColor;\n}\n", + "stage": 1, + "target_platform": 2, + "uniforms": [ + { + "array_elements": 0, + "bit_width": 32, + "columns": 1, + "location": 0, + "name": "u_color", + "rows": 4, + "type": 10 + }, + { + "array_elements": 0, + "bit_width": 32, + "columns": 1, + "location": 1, + "name": "u_composite_1", + "rows": 4, + "type": 10 + }, + { + "array_elements": 0, + "bit_width": 32, + "columns": 1, + "location": 2, + "name": "u_center", + "rows": 2, + "type": 10 + }, + { + "array_elements": 0, + "bit_width": 32, + "columns": 1, + "location": 3, + "name": "u_max_radius", + "rows": 1, + "type": 10 + }, + { + "array_elements": 0, + "bit_width": 32, + "columns": 1, + "location": 4, + "name": "u_resolution_scale", + "rows": 2, + "type": 10 + }, + { + "array_elements": 0, + "bit_width": 32, + "columns": 1, + "location": 5, + "name": "u_noise_scale", + "rows": 2, + "type": 10 + }, + { + "array_elements": 0, + "bit_width": 32, + "columns": 1, + "location": 6, + "name": "u_noise_phase", + "rows": 1, + "type": 10 + }, + { + "array_elements": 0, + "bit_width": 32, + "columns": 1, + "location": 7, + "name": "u_circle1", + "rows": 2, + "type": 10 + }, + { + "array_elements": 0, + "bit_width": 32, + "columns": 1, + "location": 8, + "name": "u_circle2", + "rows": 2, + "type": 10 + }, + { + "array_elements": 0, + "bit_width": 32, + "columns": 1, + "location": 9, + "name": "u_circle3", + "rows": 2, + "type": 10 + }, + { + "array_elements": 0, + "bit_width": 32, + "columns": 1, + "location": 10, + "name": "u_rotation1", + "rows": 2, + "type": 10 + }, + { + "array_elements": 0, + "bit_width": 32, + "columns": 1, + "location": 11, + "name": "u_rotation2", + "rows": 2, + "type": 10 + }, + { + "array_elements": 0, + "bit_width": 32, + "columns": 1, + "location": 12, + "name": "u_rotation3", + "rows": 2, + "type": 10 + } + ] +} \ No newline at end of file diff --git a/canvaskit/canvaskit.js b/canvaskit/canvaskit.js new file mode 100644 index 0000000000..bb30858767 --- /dev/null +++ b/canvaskit/canvaskit.js @@ -0,0 +1,217 @@ + +var CanvasKitInit = (() => { + var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined; + if (typeof __filename !== 'undefined') _scriptDir = _scriptDir || __filename; + return ( +function(moduleArg = {}) { + +var r=moduleArg,aa,ba;r.ready=new Promise((a,b)=>{aa=a;ba=b}); +(function(a){a.Md=a.Md||[];a.Md.push(function(){a.MakeSWCanvasSurface=function(b){var c=b,d="undefined"!==typeof OffscreenCanvas&&c instanceof OffscreenCanvas;if(!("undefined"!==typeof HTMLCanvasElement&&c instanceof HTMLCanvasElement||d||(c=document.getElementById(b),c)))throw"Canvas with id "+b+" was not found";if(b=a.MakeSurface(c.width,c.height))b.me=c;return b};a.MakeCanvasSurface||(a.MakeCanvasSurface=a.MakeSWCanvasSurface);a.MakeSurface=function(b,c){var d={width:b,height:c,colorType:a.ColorType.RGBA_8888, +alphaType:a.AlphaType.Unpremul,colorSpace:a.ColorSpace.SRGB},f=b*c*4,k=a._malloc(f);if(d=a.Surface._makeRasterDirect(d,k,4*b))d.me=null,d.Ue=b,d.Re=c,d.Se=f,d.xe=k,d.getCanvas().clear(a.TRANSPARENT);return d};a.MakeRasterDirectSurface=function(b,c,d){return a.Surface._makeRasterDirect(b,c.byteOffset,d)};a.Surface.prototype.flush=function(b){a.Jd(this.Id);this._flush();if(this.me){var c=new Uint8ClampedArray(a.HEAPU8.buffer,this.xe,this.Se);c=new ImageData(c,this.Ue,this.Re);b?this.me.getContext("2d").putImageData(c, +0,0,b[0],b[1],b[2]-b[0],b[3]-b[1]):this.me.getContext("2d").putImageData(c,0,0)}};a.Surface.prototype.dispose=function(){this.xe&&a._free(this.xe);this.delete()};a.Jd=a.Jd||function(){};a.ne=a.ne||function(){return null}})})(r); +(function(a){a.Md=a.Md||[];a.Md.push(function(){function b(m,p,w){return m&&m.hasOwnProperty(p)?m[p]:w}function c(m){var p=da(ea);ea[p]=m;return p}function d(m){return m.naturalHeight||m.videoHeight||m.displayHeight||m.height}function f(m){return m.naturalWidth||m.videoWidth||m.displayWidth||m.width}function k(m,p,w,y){m.bindTexture(m.TEXTURE_2D,p);y||w.alphaType!==a.AlphaType.Premul||m.pixelStorei(m.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0);return p}function l(m,p,w){w||p.alphaType!==a.AlphaType.Premul|| +m.pixelStorei(m.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!1);m.bindTexture(m.TEXTURE_2D,null)}a.GetWebGLContext=function(m,p){if(!m)throw"null canvas passed into makeWebGLContext";var w={alpha:b(p,"alpha",1),depth:b(p,"depth",1),stencil:b(p,"stencil",8),antialias:b(p,"antialias",0),premultipliedAlpha:b(p,"premultipliedAlpha",1),preserveDrawingBuffer:b(p,"preserveDrawingBuffer",0),preferLowPowerToHighPerformance:b(p,"preferLowPowerToHighPerformance",0),failIfMajorPerformanceCaveat:b(p,"failIfMajorPerformanceCaveat", +0),enableExtensionsByDefault:b(p,"enableExtensionsByDefault",1),explicitSwapControl:b(p,"explicitSwapControl",0),renderViaOffscreenBackBuffer:b(p,"renderViaOffscreenBackBuffer",0)};w.majorVersion=p&&p.majorVersion?p.majorVersion:"undefined"!==typeof WebGL2RenderingContext?2:1;if(w.explicitSwapControl)throw"explicitSwapControl is not supported";m=fa(m,w);if(!m)return 0;ha(m);v.Ud.getExtension("WEBGL_debug_renderer_info");return m};a.deleteContext=function(m){v===ia[m]&&(v=null);"object"==typeof JSEvents&& +JSEvents.yf(ia[m].Ud.canvas);ia[m]&&ia[m].Ud.canvas&&(ia[m].Ud.canvas.Oe=void 0);ia[m]=null};a._setTextureCleanup({deleteTexture:function(m,p){var w=ea[p];w&&ia[m].Ud.deleteTexture(w);ea[p]=null}});a.MakeWebGLContext=function(m){if(!this.Jd(m))return null;var p=this._MakeGrContext();if(!p)return null;p.Id=m;var w=p.delete.bind(p);p["delete"]=function(){a.Jd(this.Id);w()}.bind(p);return v.ze=p};a.MakeGrContext=a.MakeWebGLContext;a.GrDirectContext.prototype.getResourceCacheLimitBytes=function(){a.Jd(this.Id); +this._getResourceCacheLimitBytes()};a.GrDirectContext.prototype.getResourceCacheUsageBytes=function(){a.Jd(this.Id);this._getResourceCacheUsageBytes()};a.GrDirectContext.prototype.releaseResourcesAndAbandonContext=function(){a.Jd(this.Id);this._releaseResourcesAndAbandonContext()};a.GrDirectContext.prototype.setResourceCacheLimitBytes=function(m){a.Jd(this.Id);this._setResourceCacheLimitBytes(m)};a.MakeOnScreenGLSurface=function(m,p,w,y,B,D){if(!this.Jd(m.Id))return null;p=void 0===B||void 0===D? +this._MakeOnScreenGLSurface(m,p,w,y):this._MakeOnScreenGLSurface(m,p,w,y,B,D);if(!p)return null;p.Id=m.Id;return p};a.MakeRenderTarget=function(){var m=arguments[0];if(!this.Jd(m.Id))return null;if(3===arguments.length){var p=this._MakeRenderTargetWH(m,arguments[1],arguments[2]);if(!p)return null}else if(2===arguments.length){if(p=this._MakeRenderTargetII(m,arguments[1]),!p)return null}else return null;p.Id=m.Id;return p};a.MakeWebGLCanvasSurface=function(m,p,w){p=p||null;var y=m,B="undefined"!== +typeof OffscreenCanvas&&y instanceof OffscreenCanvas;if(!("undefined"!==typeof HTMLCanvasElement&&y instanceof HTMLCanvasElement||B||(y=document.getElementById(m),y)))throw"Canvas with id "+m+" was not found";m=this.GetWebGLContext(y,w);if(!m||0>m)throw"failed to create webgl context: err "+m;m=this.MakeWebGLContext(m);p=this.MakeOnScreenGLSurface(m,y.width,y.height,p);return p?p:(p=y.cloneNode(!0),y.parentNode.replaceChild(p,y),p.classList.add("ck-replaced"),a.MakeSWCanvasSurface(p))};a.MakeCanvasSurface= +a.MakeWebGLCanvasSurface;a.Surface.prototype.makeImageFromTexture=function(m,p){a.Jd(this.Id);m=c(m);if(p=this._makeImageFromTexture(this.Id,m,p))p.he=m;return p};a.Surface.prototype.makeImageFromTextureSource=function(m,p,w){p||(p={height:d(m),width:f(m),colorType:a.ColorType.RGBA_8888,alphaType:w?a.AlphaType.Premul:a.AlphaType.Unpremul});p.colorSpace||(p.colorSpace=a.ColorSpace.SRGB);a.Jd(this.Id);var y=v.Ud;w=k(y,y.createTexture(),p,w);2===v.version?y.texImage2D(y.TEXTURE_2D,0,y.RGBA,p.width,p.height, +0,y.RGBA,y.UNSIGNED_BYTE,m):y.texImage2D(y.TEXTURE_2D,0,y.RGBA,y.RGBA,y.UNSIGNED_BYTE,m);l(y,p);this._resetContext();return this.makeImageFromTexture(w,p)};a.Surface.prototype.updateTextureFromSource=function(m,p,w){if(m.he){a.Jd(this.Id);var y=m.getImageInfo(),B=v.Ud,D=k(B,ea[m.he],y,w);2===v.version?B.texImage2D(B.TEXTURE_2D,0,B.RGBA,f(p),d(p),0,B.RGBA,B.UNSIGNED_BYTE,p):B.texImage2D(B.TEXTURE_2D,0,B.RGBA,B.RGBA,B.UNSIGNED_BYTE,p);l(B,y,w);this._resetContext();ea[m.he]=null;m.he=c(D);y.colorSpace= +m.getColorSpace();p=this._makeImageFromTexture(this.Id,m.he,y);w=m.kd.Kd;B=m.kd.Pd;m.kd.Kd=p.kd.Kd;m.kd.Pd=p.kd.Pd;p.kd.Kd=w;p.kd.Pd=B;p.delete();y.colorSpace.delete()}};a.MakeLazyImageFromTextureSource=function(m,p,w){p||(p={height:d(m),width:f(m),colorType:a.ColorType.RGBA_8888,alphaType:w?a.AlphaType.Premul:a.AlphaType.Unpremul});p.colorSpace||(p.colorSpace=a.ColorSpace.SRGB);var y={makeTexture:function(){var B=v,D=B.Ud,u=k(D,D.createTexture(),p,w);2===B.version?D.texImage2D(D.TEXTURE_2D,0,D.RGBA, +p.width,p.height,0,D.RGBA,D.UNSIGNED_BYTE,m):D.texImage2D(D.TEXTURE_2D,0,D.RGBA,D.RGBA,D.UNSIGNED_BYTE,m);l(D,p,w);return c(u)},freeSrc:function(){}};"VideoFrame"===m.constructor.name&&(y.freeSrc=function(){m.close()});return a.Image._makeFromGenerator(p,y)};a.Jd=function(m){return m?ha(m):!1};a.ne=function(){return v&&v.ze&&!v.ze.isDeleted()?v.ze:null}})})(r); +(function(a){function b(g){return(f(255*g[3])<<24|f(255*g[0])<<16|f(255*g[1])<<8|f(255*g[2])<<0)>>>0}function c(g){if(g&&g._ck)return g;if(g instanceof Float32Array){for(var e=Math.floor(g.length/4),h=new Uint32Array(e),n=0;nz;z++)a.HEAPF32[t+n]=g[x][z],n++;g=h}else g=M;e.Rd=g}else throw"Invalid argument to copyFlexibleColorArray, Not a color array "+typeof g;return e}function p(g){if(!g)return M;var e=T.toTypedArray();if(g.length){if(6===g.length||9===g.length)return l(g,"HEAPF32",H),6===g.length&&a.HEAPF32.set(fd,6+H/4),H;if(16===g.length)return e[0]=g[0],e[1]=g[1],e[2]=g[3],e[3]=g[4],e[4]=g[5],e[5]=g[7],e[6]=g[12],e[7]=g[13],e[8]=g[15],H;throw"invalid matrix size"; +}if(void 0===g.m11)throw"invalid matrix argument";e[0]=g.m11;e[1]=g.m21;e[2]=g.m41;e[3]=g.m12;e[4]=g.m22;e[5]=g.m42;e[6]=g.m14;e[7]=g.m24;e[8]=g.m44;return H}function w(g){if(!g)return M;var e=Y.toTypedArray();if(g.length){if(16!==g.length&&6!==g.length&&9!==g.length)throw"invalid matrix size";if(16===g.length)return l(g,"HEAPF32",ca);e.fill(0);e[0]=g[0];e[1]=g[1];e[3]=g[2];e[4]=g[3];e[5]=g[4];e[7]=g[5];e[10]=1;e[12]=g[6];e[13]=g[7];e[15]=g[8];6===g.length&&(e[12]=0,e[13]=0,e[15]=1);return ca}if(void 0=== +g.m11)throw"invalid matrix argument";e[0]=g.m11;e[1]=g.m21;e[2]=g.m31;e[3]=g.m41;e[4]=g.m12;e[5]=g.m22;e[6]=g.m32;e[7]=g.m42;e[8]=g.m13;e[9]=g.m23;e[10]=g.m33;e[11]=g.m43;e[12]=g.m14;e[13]=g.m24;e[14]=g.m34;e[15]=g.m44;return ca}function y(g,e){return l(g,"HEAPF32",e||va)}function B(g,e,h,n){var t=Ma.toTypedArray();t[0]=g;t[1]=e;t[2]=h;t[3]=n;return va}function D(g){for(var e=new Float32Array(4),h=0;4>h;h++)e[h]=a.HEAPF32[g/4+h];return e}function u(g,e){return l(g,"HEAPF32",e||X)}function F(g,e){return l(g, +"HEAPF32",e||Eb)}a.Color=function(g,e,h,n){void 0===n&&(n=1);return a.Color4f(f(g)/255,f(e)/255,f(h)/255,n)};a.ColorAsInt=function(g,e,h,n){void 0===n&&(n=255);return(f(n)<<24|f(g)<<16|f(e)<<8|f(h)<<0&268435455)>>>0};a.Color4f=function(g,e,h,n){void 0===n&&(n=1);return Float32Array.of(g,e,h,n)};Object.defineProperty(a,"TRANSPARENT",{get:function(){return a.Color4f(0,0,0,0)}});Object.defineProperty(a,"BLACK",{get:function(){return a.Color4f(0,0,0,1)}});Object.defineProperty(a,"WHITE",{get:function(){return a.Color4f(1, +1,1,1)}});Object.defineProperty(a,"RED",{get:function(){return a.Color4f(1,0,0,1)}});Object.defineProperty(a,"GREEN",{get:function(){return a.Color4f(0,1,0,1)}});Object.defineProperty(a,"BLUE",{get:function(){return a.Color4f(0,0,1,1)}});Object.defineProperty(a,"YELLOW",{get:function(){return a.Color4f(1,1,0,1)}});Object.defineProperty(a,"CYAN",{get:function(){return a.Color4f(0,1,1,1)}});Object.defineProperty(a,"MAGENTA",{get:function(){return a.Color4f(1,0,1,1)}});a.getColorComponents=function(g){return[Math.floor(255* +g[0]),Math.floor(255*g[1]),Math.floor(255*g[2]),g[3]]};a.parseColorString=function(g,e){g=g.toLowerCase();if(g.startsWith("#")){e=255;switch(g.length){case 9:e=parseInt(g.slice(7,9),16);case 7:var h=parseInt(g.slice(1,3),16);var n=parseInt(g.slice(3,5),16);var t=parseInt(g.slice(5,7),16);break;case 5:e=17*parseInt(g.slice(4,5),16);case 4:h=17*parseInt(g.slice(1,2),16),n=17*parseInt(g.slice(2,3),16),t=17*parseInt(g.slice(3,4),16)}return a.Color(h,n,t,e/255)}return g.startsWith("rgba")?(g=g.slice(5, +-1),g=g.split(","),a.Color(+g[0],+g[1],+g[2],d(g[3]))):g.startsWith("rgb")?(g=g.slice(4,-1),g=g.split(","),a.Color(+g[0],+g[1],+g[2],d(g[3]))):g.startsWith("gray(")||g.startsWith("hsl")||!e||(g=e[g],void 0===g)?a.BLACK:g};a.multiplyByAlpha=function(g,e){g=g.slice();g[3]=Math.max(0,Math.min(g[3]*e,1));return g};a.Malloc=function(g,e){var h=a._malloc(e*g.BYTES_PER_ELEMENT);return{_ck:!0,length:e,byteOffset:h,be:null,subarray:function(n,t){n=this.toTypedArray().subarray(n,t);n._ck=!0;return n},toTypedArray:function(){if(this.be&& +this.be.length)return this.be;this.be=new g(a.HEAPU8.buffer,h,e);this.be._ck=!0;return this.be}}};a.Free=function(g){a._free(g.byteOffset);g.byteOffset=M;g.toTypedArray=null;g.be=null};var H=M,T,ca=M,Y,va=M,Ma,na,X=M,fc,Ba=M,gc,Fb=M,hc,Gb=M,hb,Sa=M,ic,Eb=M,jc,kc=M,fd=Float32Array.of(0,0,1),M=0;a.onRuntimeInitialized=function(){function g(e,h,n,t,x,z,E){z||(z=4*t.width,t.colorType===a.ColorType.RGBA_F16?z*=2:t.colorType===a.ColorType.RGBA_F32&&(z*=4));var J=z*t.height;var I=x?x.byteOffset:a._malloc(J); +if(E?!e._readPixels(t,I,z,h,n,E):!e._readPixels(t,I,z,h,n))return x||a._free(I),null;if(x)return x.toTypedArray();switch(t.colorType){case a.ColorType.RGBA_8888:case a.ColorType.RGBA_F16:e=(new Uint8Array(a.HEAPU8.buffer,I,J)).slice();break;case a.ColorType.RGBA_F32:e=(new Float32Array(a.HEAPU8.buffer,I,J)).slice();break;default:return null}a._free(I);return e}Ma=a.Malloc(Float32Array,4);va=Ma.byteOffset;Y=a.Malloc(Float32Array,16);ca=Y.byteOffset;T=a.Malloc(Float32Array,9);H=T.byteOffset;ic=a.Malloc(Float32Array, +12);Eb=ic.byteOffset;jc=a.Malloc(Float32Array,12);kc=jc.byteOffset;na=a.Malloc(Float32Array,4);X=na.byteOffset;fc=a.Malloc(Float32Array,4);Ba=fc.byteOffset;gc=a.Malloc(Float32Array,3);Fb=gc.byteOffset;hc=a.Malloc(Float32Array,3);Gb=hc.byteOffset;hb=a.Malloc(Int32Array,4);Sa=hb.byteOffset;a.ColorSpace.SRGB=a.ColorSpace._MakeSRGB();a.ColorSpace.DISPLAY_P3=a.ColorSpace._MakeDisplayP3();a.ColorSpace.ADOBE_RGB=a.ColorSpace._MakeAdobeRGB();a.GlyphRunFlags={IsWhiteSpace:a._GlyphRunFlags_isWhiteSpace};a.Path.MakeFromCmds= +function(e){var h=l(e,"HEAPF32"),n=a.Path._MakeFromCmds(h,e.length);k(h,e);return n};a.Path.MakeFromVerbsPointsWeights=function(e,h,n){var t=l(e,"HEAPU8"),x=l(h,"HEAPF32"),z=l(n,"HEAPF32"),E=a.Path._MakeFromVerbsPointsWeights(t,e.length,x,h.length,z,n&&n.length||0);k(t,e);k(x,h);k(z,n);return E};a.Path.prototype.addArc=function(e,h,n){e=u(e);this._addArc(e,h,n);return this};a.Path.prototype.addCircle=function(e,h,n,t){this._addCircle(e,h,n,!!t);return this};a.Path.prototype.addOval=function(e,h,n){void 0=== +n&&(n=1);e=u(e);this._addOval(e,!!h,n);return this};a.Path.prototype.addPath=function(){var e=Array.prototype.slice.call(arguments),h=e[0],n=!1;"boolean"===typeof e[e.length-1]&&(n=e.pop());if(1===e.length)this._addPath(h,1,0,0,0,1,0,0,0,1,n);else if(2===e.length)e=e[1],this._addPath(h,e[0],e[1],e[2],e[3],e[4],e[5],e[6]||0,e[7]||0,e[8]||1,n);else if(7===e.length||10===e.length)this._addPath(h,e[1],e[2],e[3],e[4],e[5],e[6],e[7]||0,e[8]||0,e[9]||1,n);else return null;return this};a.Path.prototype.addPoly= +function(e,h){var n=l(e,"HEAPF32");this._addPoly(n,e.length/2,h);k(n,e);return this};a.Path.prototype.addRect=function(e,h){e=u(e);this._addRect(e,!!h);return this};a.Path.prototype.addRRect=function(e,h){e=F(e);this._addRRect(e,!!h);return this};a.Path.prototype.addVerbsPointsWeights=function(e,h,n){var t=l(e,"HEAPU8"),x=l(h,"HEAPF32"),z=l(n,"HEAPF32");this._addVerbsPointsWeights(t,e.length,x,h.length,z,n&&n.length||0);k(t,e);k(x,h);k(z,n)};a.Path.prototype.arc=function(e,h,n,t,x,z){e=a.LTRBRect(e- +n,h-n,e+n,h+n);x=(x-t)/Math.PI*180-360*!!z;z=new a.Path;z.addArc(e,t/Math.PI*180,x);this.addPath(z,!0);z.delete();return this};a.Path.prototype.arcToOval=function(e,h,n,t){e=u(e);this._arcToOval(e,h,n,t);return this};a.Path.prototype.arcToRotated=function(e,h,n,t,x,z,E){this._arcToRotated(e,h,n,!!t,!!x,z,E);return this};a.Path.prototype.arcToTangent=function(e,h,n,t,x){this._arcToTangent(e,h,n,t,x);return this};a.Path.prototype.close=function(){this._close();return this};a.Path.prototype.conicTo= +function(e,h,n,t,x){this._conicTo(e,h,n,t,x);return this};a.Path.prototype.computeTightBounds=function(e){this._computeTightBounds(X);var h=na.toTypedArray();return e?(e.set(h),e):h.slice()};a.Path.prototype.cubicTo=function(e,h,n,t,x,z){this._cubicTo(e,h,n,t,x,z);return this};a.Path.prototype.dash=function(e,h,n){return this._dash(e,h,n)?this:null};a.Path.prototype.getBounds=function(e){this._getBounds(X);var h=na.toTypedArray();return e?(e.set(h),e):h.slice()};a.Path.prototype.lineTo=function(e, +h){this._lineTo(e,h);return this};a.Path.prototype.moveTo=function(e,h){this._moveTo(e,h);return this};a.Path.prototype.offset=function(e,h){this._transform(1,0,e,0,1,h,0,0,1);return this};a.Path.prototype.quadTo=function(e,h,n,t){this._quadTo(e,h,n,t);return this};a.Path.prototype.rArcTo=function(e,h,n,t,x,z,E){this._rArcTo(e,h,n,t,x,z,E);return this};a.Path.prototype.rConicTo=function(e,h,n,t,x){this._rConicTo(e,h,n,t,x);return this};a.Path.prototype.rCubicTo=function(e,h,n,t,x,z){this._rCubicTo(e, +h,n,t,x,z);return this};a.Path.prototype.rLineTo=function(e,h){this._rLineTo(e,h);return this};a.Path.prototype.rMoveTo=function(e,h){this._rMoveTo(e,h);return this};a.Path.prototype.rQuadTo=function(e,h,n,t){this._rQuadTo(e,h,n,t);return this};a.Path.prototype.stroke=function(e){e=e||{};e.width=e.width||1;e.miter_limit=e.miter_limit||4;e.cap=e.cap||a.StrokeCap.Butt;e.join=e.join||a.StrokeJoin.Miter;e.precision=e.precision||1;return this._stroke(e)?this:null};a.Path.prototype.transform=function(){if(1=== +arguments.length){var e=arguments[0];this._transform(e[0],e[1],e[2],e[3],e[4],e[5],e[6]||0,e[7]||0,e[8]||1)}else if(6===arguments.length||9===arguments.length)e=arguments,this._transform(e[0],e[1],e[2],e[3],e[4],e[5],e[6]||0,e[7]||0,e[8]||1);else throw"transform expected to take 1 or 9 arguments. Got "+arguments.length;return this};a.Path.prototype.trim=function(e,h,n){return this._trim(e,h,!!n)?this:null};a.Image.prototype.encodeToBytes=function(e,h){var n=a.ne();e=e||a.ImageFormat.PNG;h=h||100; +return n?this._encodeToBytes(e,h,n):this._encodeToBytes(e,h)};a.Image.prototype.makeShaderCubic=function(e,h,n,t,x){x=p(x);return this._makeShaderCubic(e,h,n,t,x)};a.Image.prototype.makeShaderOptions=function(e,h,n,t,x){x=p(x);return this._makeShaderOptions(e,h,n,t,x)};a.Image.prototype.readPixels=function(e,h,n,t,x){var z=a.ne();return g(this,e,h,n,t,x,z)};a.Canvas.prototype.clear=function(e){a.Jd(this.Id);e=y(e);this._clear(e)};a.Canvas.prototype.clipRRect=function(e,h,n){a.Jd(this.Id);e=F(e);this._clipRRect(e, +h,n)};a.Canvas.prototype.clipRect=function(e,h,n){a.Jd(this.Id);e=u(e);this._clipRect(e,h,n)};a.Canvas.prototype.concat=function(e){a.Jd(this.Id);e=w(e);this._concat(e)};a.Canvas.prototype.drawArc=function(e,h,n,t,x){a.Jd(this.Id);e=u(e);this._drawArc(e,h,n,t,x)};a.Canvas.prototype.drawAtlas=function(e,h,n,t,x,z,E){if(e&&t&&h&&n&&h.length===n.length){a.Jd(this.Id);x||(x=a.BlendMode.SrcOver);var J=l(h,"HEAPF32"),I=l(n,"HEAPF32"),U=n.length/4,V=l(c(z),"HEAPU32");if(E&&"B"in E&&"C"in E)this._drawAtlasCubic(e, +I,J,V,U,x,E.B,E.C,t);else{let q=a.FilterMode.Linear,A=a.MipmapMode.None;E&&(q=E.filter,"mipmap"in E&&(A=E.mipmap));this._drawAtlasOptions(e,I,J,V,U,x,q,A,t)}k(J,h);k(I,n);k(V,z)}};a.Canvas.prototype.drawCircle=function(e,h,n,t){a.Jd(this.Id);this._drawCircle(e,h,n,t)};a.Canvas.prototype.drawColor=function(e,h){a.Jd(this.Id);e=y(e);void 0!==h?this._drawColor(e,h):this._drawColor(e)};a.Canvas.prototype.drawColorInt=function(e,h){a.Jd(this.Id);this._drawColorInt(e,h||a.BlendMode.SrcOver)};a.Canvas.prototype.drawColorComponents= +function(e,h,n,t,x){a.Jd(this.Id);e=B(e,h,n,t);void 0!==x?this._drawColor(e,x):this._drawColor(e)};a.Canvas.prototype.drawDRRect=function(e,h,n){a.Jd(this.Id);e=F(e,Eb);h=F(h,kc);this._drawDRRect(e,h,n)};a.Canvas.prototype.drawImage=function(e,h,n,t){a.Jd(this.Id);this._drawImage(e,h,n,t||null)};a.Canvas.prototype.drawImageCubic=function(e,h,n,t,x,z){a.Jd(this.Id);this._drawImageCubic(e,h,n,t,x,z||null)};a.Canvas.prototype.drawImageOptions=function(e,h,n,t,x,z){a.Jd(this.Id);this._drawImageOptions(e, +h,n,t,x,z||null)};a.Canvas.prototype.drawImageNine=function(e,h,n,t,x){a.Jd(this.Id);h=l(h,"HEAP32",Sa);n=u(n);this._drawImageNine(e,h,n,t,x||null)};a.Canvas.prototype.drawImageRect=function(e,h,n,t,x){a.Jd(this.Id);u(h,X);u(n,Ba);this._drawImageRect(e,X,Ba,t,!!x)};a.Canvas.prototype.drawImageRectCubic=function(e,h,n,t,x,z){a.Jd(this.Id);u(h,X);u(n,Ba);this._drawImageRectCubic(e,X,Ba,t,x,z||null)};a.Canvas.prototype.drawImageRectOptions=function(e,h,n,t,x,z){a.Jd(this.Id);u(h,X);u(n,Ba);this._drawImageRectOptions(e, +X,Ba,t,x,z||null)};a.Canvas.prototype.drawLine=function(e,h,n,t,x){a.Jd(this.Id);this._drawLine(e,h,n,t,x)};a.Canvas.prototype.drawOval=function(e,h){a.Jd(this.Id);e=u(e);this._drawOval(e,h)};a.Canvas.prototype.drawPaint=function(e){a.Jd(this.Id);this._drawPaint(e)};a.Canvas.prototype.drawParagraph=function(e,h,n){a.Jd(this.Id);this._drawParagraph(e,h,n)};a.Canvas.prototype.drawPatch=function(e,h,n,t,x){if(24>e.length)throw"Need 12 cubic points";if(h&&4>h.length)throw"Need 4 colors";if(n&&8>n.length)throw"Need 4 shader coordinates"; +a.Jd(this.Id);const z=l(e,"HEAPF32"),E=h?l(c(h),"HEAPU32"):M,J=n?l(n,"HEAPF32"):M;t||(t=a.BlendMode.Modulate);this._drawPatch(z,E,J,t,x);k(J,n);k(E,h);k(z,e)};a.Canvas.prototype.drawPath=function(e,h){a.Jd(this.Id);this._drawPath(e,h)};a.Canvas.prototype.drawPicture=function(e){a.Jd(this.Id);this._drawPicture(e)};a.Canvas.prototype.drawPoints=function(e,h,n){a.Jd(this.Id);var t=l(h,"HEAPF32");this._drawPoints(e,t,h.length/2,n);k(t,h)};a.Canvas.prototype.drawRRect=function(e,h){a.Jd(this.Id);e=F(e); +this._drawRRect(e,h)};a.Canvas.prototype.drawRect=function(e,h){a.Jd(this.Id);e=u(e);this._drawRect(e,h)};a.Canvas.prototype.drawRect4f=function(e,h,n,t,x){a.Jd(this.Id);this._drawRect4f(e,h,n,t,x)};a.Canvas.prototype.drawShadow=function(e,h,n,t,x,z,E){a.Jd(this.Id);var J=l(x,"HEAPF32"),I=l(z,"HEAPF32");h=l(h,"HEAPF32",Fb);n=l(n,"HEAPF32",Gb);this._drawShadow(e,h,n,t,J,I,E);k(J,x);k(I,z)};a.getShadowLocalBounds=function(e,h,n,t,x,z,E){e=p(e);n=l(n,"HEAPF32",Fb);t=l(t,"HEAPF32",Gb);if(!this._getShadowLocalBounds(e, +h,n,t,x,z,X))return null;h=na.toTypedArray();return E?(E.set(h),E):h.slice()};a.Canvas.prototype.drawTextBlob=function(e,h,n,t){a.Jd(this.Id);this._drawTextBlob(e,h,n,t)};a.Canvas.prototype.drawVertices=function(e,h,n){a.Jd(this.Id);this._drawVertices(e,h,n)};a.Canvas.prototype.getDeviceClipBounds=function(e){this._getDeviceClipBounds(Sa);var h=hb.toTypedArray();e?e.set(h):e=h.slice();return e};a.Canvas.prototype.getLocalToDevice=function(){this._getLocalToDevice(ca);for(var e=ca,h=Array(16),n=0;16> +n;n++)h[n]=a.HEAPF32[e/4+n];return h};a.Canvas.prototype.getTotalMatrix=function(){this._getTotalMatrix(H);for(var e=Array(9),h=0;9>h;h++)e[h]=a.HEAPF32[H/4+h];return e};a.Canvas.prototype.makeSurface=function(e){e=this._makeSurface(e);e.Id=this.Id;return e};a.Canvas.prototype.readPixels=function(e,h,n,t,x){a.Jd(this.Id);return g(this,e,h,n,t,x)};a.Canvas.prototype.saveLayer=function(e,h,n,t){h=u(h);return this._saveLayer(e||null,h,n||null,t||0)};a.Canvas.prototype.writePixels=function(e,h,n,t,x, +z,E,J){if(e.byteLength%(h*n))throw"pixels length must be a multiple of the srcWidth * srcHeight";a.Jd(this.Id);var I=e.byteLength/(h*n);z=z||a.AlphaType.Unpremul;E=E||a.ColorType.RGBA_8888;J=J||a.ColorSpace.SRGB;var U=I*h;I=l(e,"HEAPU8");h=this._writePixels({width:h,height:n,colorType:E,alphaType:z,colorSpace:J},I,U,t,x);k(I,e);return h};a.ColorFilter.MakeBlend=function(e,h,n){e=y(e);n=n||a.ColorSpace.SRGB;return a.ColorFilter._MakeBlend(e,h,n)};a.ColorFilter.MakeMatrix=function(e){if(!e||20!==e.length)throw"invalid color matrix"; +var h=l(e,"HEAPF32"),n=a.ColorFilter._makeMatrix(h);k(h,e);return n};a.ContourMeasure.prototype.getPosTan=function(e,h){this._getPosTan(e,X);e=na.toTypedArray();return h?(h.set(e),h):e.slice()};a.ImageFilter.prototype.getOutputBounds=function(e,h,n){e=u(e,X);h=p(h);this._getOutputBounds(e,h,Sa);h=hb.toTypedArray();return n?(n.set(h),n):h.slice()};a.ImageFilter.MakeDropShadow=function(e,h,n,t,x,z){x=y(x,va);return a.ImageFilter._MakeDropShadow(e,h,n,t,x,z)};a.ImageFilter.MakeDropShadowOnly=function(e, +h,n,t,x,z){x=y(x,va);return a.ImageFilter._MakeDropShadowOnly(e,h,n,t,x,z)};a.ImageFilter.MakeImage=function(e,h,n,t){n=u(n,X);t=u(t,Ba);if("B"in h&&"C"in h)return a.ImageFilter._MakeImageCubic(e,h.B,h.C,n,t);const x=h.filter;let z=a.MipmapMode.None;"mipmap"in h&&(z=h.mipmap);return a.ImageFilter._MakeImageOptions(e,x,z,n,t)};a.ImageFilter.MakeMatrixTransform=function(e,h,n){e=p(e);if("B"in h&&"C"in h)return a.ImageFilter._MakeMatrixTransformCubic(e,h.B,h.C,n);const t=h.filter;let x=a.MipmapMode.None; +"mipmap"in h&&(x=h.mipmap);return a.ImageFilter._MakeMatrixTransformOptions(e,t,x,n)};a.Paint.prototype.getColor=function(){this._getColor(va);return D(va)};a.Paint.prototype.setColor=function(e,h){h=h||null;e=y(e);this._setColor(e,h)};a.Paint.prototype.setColorComponents=function(e,h,n,t,x){x=x||null;e=B(e,h,n,t);this._setColor(e,x)};a.Path.prototype.getPoint=function(e,h){this._getPoint(e,X);e=na.toTypedArray();return h?(h[0]=e[0],h[1]=e[1],h):e.slice(0,2)};a.Picture.prototype.makeShader=function(e, +h,n,t,x){t=p(t);x=u(x);return this._makeShader(e,h,n,t,x)};a.Picture.prototype.cullRect=function(e){this._cullRect(X);var h=na.toTypedArray();return e?(e.set(h),e):h.slice()};a.PictureRecorder.prototype.beginRecording=function(e,h){e=u(e);return this._beginRecording(e,!!h)};a.Surface.prototype.getCanvas=function(){var e=this._getCanvas();e.Id=this.Id;return e};a.Surface.prototype.makeImageSnapshot=function(e){a.Jd(this.Id);e=l(e,"HEAP32",Sa);return this._makeImageSnapshot(e)};a.Surface.prototype.makeSurface= +function(e){a.Jd(this.Id);e=this._makeSurface(e);e.Id=this.Id;return e};a.Surface.prototype.Te=function(e,h){this.ge||(this.ge=this.getCanvas());return requestAnimationFrame(function(){a.Jd(this.Id);e(this.ge);this.flush(h)}.bind(this))};a.Surface.prototype.requestAnimationFrame||(a.Surface.prototype.requestAnimationFrame=a.Surface.prototype.Te);a.Surface.prototype.Qe=function(e,h){this.ge||(this.ge=this.getCanvas());requestAnimationFrame(function(){a.Jd(this.Id);e(this.ge);this.flush(h);this.dispose()}.bind(this))}; +a.Surface.prototype.drawOnce||(a.Surface.prototype.drawOnce=a.Surface.prototype.Qe);a.PathEffect.MakeDash=function(e,h){h||(h=0);if(!e.length||1===e.length%2)throw"Intervals array must have even length";var n=l(e,"HEAPF32");h=a.PathEffect._MakeDash(n,e.length,h);k(n,e);return h};a.PathEffect.MakeLine2D=function(e,h){h=p(h);return a.PathEffect._MakeLine2D(e,h)};a.PathEffect.MakePath2D=function(e,h){e=p(e);return a.PathEffect._MakePath2D(e,h)};a.Shader.MakeColor=function(e,h){h=h||null;e=y(e);return a.Shader._MakeColor(e, +h)};a.Shader.Blend=a.Shader.MakeBlend;a.Shader.Color=a.Shader.MakeColor;a.Shader.MakeLinearGradient=function(e,h,n,t,x,z,E,J){J=J||null;var I=m(n),U=l(t,"HEAPF32");E=E||0;z=p(z);var V=na.toTypedArray();V.set(e);V.set(h,2);e=a.Shader._MakeLinearGradient(X,I.Rd,I.colorType,U,I.count,x,E,z,J);k(I.Rd,n);t&&k(U,t);return e};a.Shader.MakeRadialGradient=function(e,h,n,t,x,z,E,J){J=J||null;var I=m(n),U=l(t,"HEAPF32");E=E||0;z=p(z);e=a.Shader._MakeRadialGradient(e[0],e[1],h,I.Rd,I.colorType,U,I.count,x,E, +z,J);k(I.Rd,n);t&&k(U,t);return e};a.Shader.MakeSweepGradient=function(e,h,n,t,x,z,E,J,I,U){U=U||null;var V=m(n),q=l(t,"HEAPF32");E=E||0;J=J||0;I=I||360;z=p(z);e=a.Shader._MakeSweepGradient(e,h,V.Rd,V.colorType,q,V.count,x,J,I,E,z,U);k(V.Rd,n);t&&k(q,t);return e};a.Shader.MakeTwoPointConicalGradient=function(e,h,n,t,x,z,E,J,I,U){U=U||null;var V=m(x),q=l(z,"HEAPF32");I=I||0;J=p(J);var A=na.toTypedArray();A.set(e);A.set(n,2);e=a.Shader._MakeTwoPointConicalGradient(X,h,t,V.Rd,V.colorType,q,V.count,E, +I,J,U);k(V.Rd,x);z&&k(q,z);return e};a.Vertices.prototype.bounds=function(e){this._bounds(X);var h=na.toTypedArray();return e?(e.set(h),e):h.slice()};a.Md&&a.Md.forEach(function(e){e()})};a.computeTonalColors=function(g){var e=l(g.ambient,"HEAPF32"),h=l(g.spot,"HEAPF32");this._computeTonalColors(e,h);var n={ambient:D(e),spot:D(h)};k(e,g.ambient);k(h,g.spot);return n};a.LTRBRect=function(g,e,h,n){return Float32Array.of(g,e,h,n)};a.XYWHRect=function(g,e,h,n){return Float32Array.of(g,e,g+h,e+n)};a.LTRBiRect= +function(g,e,h,n){return Int32Array.of(g,e,h,n)};a.XYWHiRect=function(g,e,h,n){return Int32Array.of(g,e,g+h,e+n)};a.RRectXY=function(g,e,h){return Float32Array.of(g[0],g[1],g[2],g[3],e,h,e,h,e,h,e,h)};a.MakeAnimatedImageFromEncoded=function(g){g=new Uint8Array(g);var e=a._malloc(g.byteLength);a.HEAPU8.set(g,e);return(g=a._decodeAnimatedImage(e,g.byteLength))?g:null};a.MakeImageFromEncoded=function(g){g=new Uint8Array(g);var e=a._malloc(g.byteLength);a.HEAPU8.set(g,e);return(g=a._decodeImage(e,g.byteLength))? +g:null};var Ta=null;a.MakeImageFromCanvasImageSource=function(g){var e=g.width,h=g.height;Ta||(Ta=document.createElement("canvas"));Ta.width=e;Ta.height=h;var n=Ta.getContext("2d",{willReadFrequently:!0});n.drawImage(g,0,0);g=n.getImageData(0,0,e,h);return a.MakeImage({width:e,height:h,alphaType:a.AlphaType.Unpremul,colorType:a.ColorType.RGBA_8888,colorSpace:a.ColorSpace.SRGB},g.data,4*e)};a.MakeImage=function(g,e,h){var n=a._malloc(e.length);a.HEAPU8.set(e,n);return a._MakeImage(g,n,e.length,h)}; +a.MakeVertices=function(g,e,h,n,t,x){var z=t&&t.length||0,E=0;h&&h.length&&(E|=1);n&&n.length&&(E|=2);void 0===x||x||(E|=4);g=new a._VerticesBuilder(g,e.length/2,z,E);l(e,"HEAPF32",g.positions());g.texCoords()&&l(h,"HEAPF32",g.texCoords());g.colors()&&l(c(n),"HEAPU32",g.colors());g.indices()&&l(t,"HEAPU16",g.indices());return g.detach()};(function(g){g.Md=g.Md||[];g.Md.push(function(){function e(q){q&&(q.dir=0===q.dir?g.TextDirection.RTL:g.TextDirection.LTR);return q}function h(q){if(!q||!q.length)return[]; +for(var A=[],P=0;Pe)return a._free(g),null;t=new Uint16Array(a.HEAPU8.buffer,g,e);if(h)return h.set(t),a._free(g),h;h=Uint16Array.from(t);a._free(g);return h};a.Font.prototype.getGlyphIntercepts=function(g,e,h,n){var t=l(g,"HEAPU16"),x=l(e,"HEAPF32");return this._getGlyphIntercepts(t, +g.length,!(g&&g._ck),x,e.length,!(e&&e._ck),h,n)};a.Font.prototype.getGlyphWidths=function(g,e,h){var n=l(g,"HEAPU16"),t=a._malloc(4*g.length);this._getGlyphWidthBounds(n,g.length,t,M,e||null);e=new Float32Array(a.HEAPU8.buffer,t,g.length);k(n,g);if(h)return h.set(e),a._free(t),h;g=Float32Array.from(e);a._free(t);return g};a.FontMgr.FromData=function(){if(!arguments.length)return null;var g=arguments;1===g.length&&Array.isArray(g[0])&&(g=arguments[0]);if(!g.length)return null;for(var e=[],h=[],n= +0;ne)return a._free(g),null;t=new Uint16Array(a.HEAPU8.buffer,g,e);if(h)return h.set(t),a._free(g),h;h=Uint16Array.from(t);a._free(g);return h};a.TextBlob.MakeOnPath=function(g,e,h,n){if(g&&g.length&&e&&e.countPoints()){if(1===e.countPoints())return this.MakeFromText(g,h);n||(n=0);var t=h.getGlyphIDs(g);t=h.getGlyphWidths(t);var x=[];e=new a.ContourMeasureIter(e,!1,1);for(var z=e.next(),E=new Float32Array(4),J=0;Jz.length()){z.delete();z= +e.next();if(!z){g=g.substring(0,J);break}n=I/2}z.getPosTan(n,E);var U=E[2],V=E[3];x.push(U,V,E[0]-I/2*U,E[1]-I/2*V);n+=I/2}g=this.MakeFromRSXform(g,x,h);z&&z.delete();e.delete();return g}};a.TextBlob.MakeFromRSXform=function(g,e,h){var n=ja(g)+1,t=a._malloc(n);ka(g,C,t,n);g=l(e,"HEAPF32");h=a.TextBlob._MakeFromRSXform(t,n-1,g,h);a._free(t);return h?h:null};a.TextBlob.MakeFromRSXformGlyphs=function(g,e,h){var n=l(g,"HEAPU16");e=l(e,"HEAPF32");h=a.TextBlob._MakeFromRSXformGlyphs(n,2*g.length,e,h);k(n, +g);return h?h:null};a.TextBlob.MakeFromGlyphs=function(g,e){var h=l(g,"HEAPU16");e=a.TextBlob._MakeFromGlyphs(h,2*g.length,e);k(h,g);return e?e:null};a.TextBlob.MakeFromText=function(g,e){var h=ja(g)+1,n=a._malloc(h);ka(g,C,n,h);g=a.TextBlob._MakeFromText(n,h-1,e);a._free(n);return g?g:null};a.MallocGlyphIDs=function(g){return a.Malloc(Uint16Array,g)}});a.Md=a.Md||[];a.Md.push(function(){a.MakePicture=function(g){g=new Uint8Array(g);var e=a._malloc(g.byteLength);a.HEAPU8.set(g,e);return(g=a._MakePicture(e, +g.byteLength))?g:null}});a.Md=a.Md||[];a.Md.push(function(){a.RuntimeEffect.Make=function(g,e){return a.RuntimeEffect._Make(g,{onError:e||function(h){console.log("RuntimeEffect error",h)}})};a.RuntimeEffect.MakeForBlender=function(g,e){return a.RuntimeEffect._MakeForBlender(g,{onError:e||function(h){console.log("RuntimeEffect error",h)}})};a.RuntimeEffect.prototype.makeShader=function(g,e){var h=!g._ck,n=l(g,"HEAPF32");e=p(e);return this._makeShader(n,4*g.length,h,e)};a.RuntimeEffect.prototype.makeShaderWithChildren= +function(g,e,h){var n=!g._ck,t=l(g,"HEAPF32");h=p(h);for(var x=[],z=0;z{throw b;},pa="object"==typeof window,ra="function"==typeof importScripts,sa="object"==typeof process&&"object"==typeof process.versions&&"string"==typeof process.versions.node,ta="",ua,wa,xa; +if(sa){var fs=require("fs"),ya=require("path");ta=ra?ya.dirname(ta)+"/":__dirname+"/";ua=(a,b)=>{a=a.startsWith("file://")?new URL(a):ya.normalize(a);return fs.readFileSync(a,b?void 0:"utf8")};xa=a=>{a=ua(a,!0);a.buffer||(a=new Uint8Array(a));return a};wa=(a,b,c,d=!0)=>{a=a.startsWith("file://")?new URL(a):ya.normalize(a);fs.readFile(a,d?void 0:"utf8",(f,k)=>{f?c(f):b(d?k.buffer:k)})};!r.thisProgram&&1{process.exitCode= +a;throw b;};r.inspect=()=>"[Emscripten Module object]"}else if(pa||ra)ra?ta=self.location.href:"undefined"!=typeof document&&document.currentScript&&(ta=document.currentScript.src),_scriptDir&&(ta=_scriptDir),0!==ta.indexOf("blob:")?ta=ta.substr(0,ta.replace(/[?#].*/,"").lastIndexOf("/")+1):ta="",ua=a=>{var b=new XMLHttpRequest;b.open("GET",a,!1);b.send(null);return b.responseText},ra&&(xa=a=>{var b=new XMLHttpRequest;b.open("GET",a,!1);b.responseType="arraybuffer";b.send(null);return new Uint8Array(b.response)}), +wa=(a,b,c)=>{var d=new XMLHttpRequest;d.open("GET",a,!0);d.responseType="arraybuffer";d.onload=()=>{200==d.status||0==d.status&&d.response?b(d.response):c()};d.onerror=c;d.send(null)};var Aa=r.print||console.log.bind(console),Ca=r.printErr||console.error.bind(console);Object.assign(r,la);la=null;r.thisProgram&&(ma=r.thisProgram);r.quit&&(oa=r.quit);var Da;r.wasmBinary&&(Da=r.wasmBinary);var noExitRuntime=r.noExitRuntime||!0;"object"!=typeof WebAssembly&&Ea("no native wasm support detected"); +var Fa,G,Ga=!1,Ha,C,Ia,Ja,K,L,N,Ka;function La(){var a=Fa.buffer;r.HEAP8=Ha=new Int8Array(a);r.HEAP16=Ia=new Int16Array(a);r.HEAP32=K=new Int32Array(a);r.HEAPU8=C=new Uint8Array(a);r.HEAPU16=Ja=new Uint16Array(a);r.HEAPU32=L=new Uint32Array(a);r.HEAPF32=N=new Float32Array(a);r.HEAPF64=Ka=new Float64Array(a)}var Na,Oa=[],Pa=[],Qa=[];function Ra(){var a=r.preRun.shift();Oa.unshift(a)}var Ua=0,Va=null,Wa=null; +function Ea(a){if(r.onAbort)r.onAbort(a);a="Aborted("+a+")";Ca(a);Ga=!0;a=new WebAssembly.RuntimeError(a+". Build with -sASSERTIONS for more info.");ba(a);throw a;}function Xa(a){return a.startsWith("data:application/octet-stream;base64,")}var Ya;Ya="canvaskit.wasm";if(!Xa(Ya)){var Za=Ya;Ya=r.locateFile?r.locateFile(Za,ta):ta+Za}function $a(a){if(a==Ya&&Da)return new Uint8Array(Da);if(xa)return xa(a);throw"both async and sync fetching of the wasm failed";} +function ab(a){if(!Da&&(pa||ra)){if("function"==typeof fetch&&!a.startsWith("file://"))return fetch(a,{credentials:"same-origin"}).then(b=>{if(!b.ok)throw"failed to load wasm binary file at '"+a+"'";return b.arrayBuffer()}).catch(()=>$a(a));if(wa)return new Promise((b,c)=>{wa(a,d=>b(new Uint8Array(d)),c)})}return Promise.resolve().then(()=>$a(a))}function bb(a,b,c){return ab(a).then(d=>WebAssembly.instantiate(d,b)).then(d=>d).then(c,d=>{Ca("failed to asynchronously prepare wasm: "+d);Ea(d)})} +function cb(a,b){var c=Ya;return Da||"function"!=typeof WebAssembly.instantiateStreaming||Xa(c)||c.startsWith("file://")||sa||"function"!=typeof fetch?bb(c,a,b):fetch(c,{credentials:"same-origin"}).then(d=>WebAssembly.instantiateStreaming(d,a).then(b,function(f){Ca("wasm streaming compile failed: "+f);Ca("falling back to ArrayBuffer instantiation");return bb(c,a,b)}))}function db(a){this.name="ExitStatus";this.message=`Program terminated with exit(${a})`;this.status=a}var eb=a=>{for(;0>2]=b};this.we=function(b){L[this.Kd+8>>2]=b};this.Zd=function(b,c){this.ve();this.Pe(b);this.we(c)};this.ve=function(){L[this.Kd+16>>2]=0}} +var gb=0,ib=0,jb="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0,kb=(a,b,c)=>{var d=b+c;for(c=b;a[c]&&!(c>=d);)++c;if(16f?d+=String.fromCharCode(f):(f-=65536,d+=String.fromCharCode(55296|f>>10,56320|f&1023))}}else d+=String.fromCharCode(f)}return d}, +lb={};function mb(a){for(;a.length;){var b=a.pop();a.pop()(b)}}function nb(a){return this.fromWireType(K[a>>2])}var ob={},pb={},qb={},rb=void 0;function sb(a){throw new rb(a);} +function tb(a,b,c){function d(m){m=c(m);m.length!==a.length&&sb("Mismatched type converter count");for(var p=0;p{pb.hasOwnProperty(m)?f[p]=pb[m]:(k.push(m),ob.hasOwnProperty(m)||(ob[m]=[]),ob[m].push(()=>{f[p]=pb[m];++l;l===k.length&&d(f)}))});0===k.length&&d(f)} +function vb(a){switch(a){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError(`Unknown type size: ${a}`);}}var wb=void 0;function O(a){for(var b="";C[a];)b+=wb[C[a++]];return b}var xb=void 0;function Q(a){throw new xb(a);} +function yb(a,b,c={}){var d=b.name;a||Q(`type "${d}" must have a positive integer typeid pointer`);if(pb.hasOwnProperty(a)){if(c.ff)return;Q(`Cannot register type '${d}' twice`)}pb[a]=b;delete qb[a];ob.hasOwnProperty(a)&&(b=ob[a],delete ob[a],b.forEach(f=>f()))}function ub(a,b,c={}){if(!("argPackAdvance"in b))throw new TypeError("registerType registeredInstance requires argPackAdvance");yb(a,b,c)}function zb(a){Q(a.kd.Nd.Ld.name+" instance already deleted")}var Ab=!1;function Bb(){} +function Cb(a){--a.count.value;0===a.count.value&&(a.Pd?a.Td.Xd(a.Pd):a.Nd.Ld.Xd(a.Kd))}function Db(a,b,c){if(b===c)return a;if(void 0===c.Qd)return null;a=Db(a,b,c.Qd);return null===a?null:c.Ye(a)}var Jb={},Kb=[];function Lb(){for(;Kb.length;){var a=Kb.pop();a.kd.ee=!1;a["delete"]()}}var Mb=void 0,Nb={};function Ob(a,b){for(void 0===b&&Q("ptr should not be undefined");a.Qd;)b=a.ke(b),a=a.Qd;return Nb[b]} +function Pb(a,b){b.Nd&&b.Kd||sb("makeClassHandle requires ptr and ptrType");!!b.Td!==!!b.Pd&&sb("Both smartPtrType and smartPtr must be specified");b.count={value:1};return Qb(Object.create(a,{kd:{value:b}}))}function Qb(a){if("undefined"===typeof FinalizationRegistry)return Qb=b=>b,a;Ab=new FinalizationRegistry(b=>{Cb(b.kd)});Qb=b=>{var c=b.kd;c.Pd&&Ab.register(b,{kd:c},b);return b};Bb=b=>{Ab.unregister(b)};return Qb(a)}function Rb(){} +function Sb(a){if(void 0===a)return"_unknown";a=a.replace(/[^a-zA-Z0-9_]/g,"$");var b=a.charCodeAt(0);return 48<=b&&57>=b?`_${a}`:a}function Tb(a,b){a=Sb(a);return{[a]:function(){return b.apply(this,arguments)}}[a]} +function Ub(a,b,c){if(void 0===a[b].Od){var d=a[b];a[b]=function(){a[b].Od.hasOwnProperty(arguments.length)||Q(`Function '${c}' called with an invalid number of arguments (${arguments.length}) - expects one of (${a[b].Od})!`);return a[b].Od[arguments.length].apply(this,arguments)};a[b].Od=[];a[b].Od[d.ce]=d}} +function Vb(a,b,c){r.hasOwnProperty(a)?((void 0===c||void 0!==r[a].Od&&void 0!==r[a].Od[c])&&Q(`Cannot register public name '${a}' twice`),Ub(r,a,a),r.hasOwnProperty(c)&&Q(`Cannot register multiple overloads of a function with the same number of arguments (${c})!`),r[a].Od[c]=b):(r[a]=b,void 0!==c&&(r[a].xf=c))}function Wb(a,b,c,d,f,k,l,m){this.name=a;this.constructor=b;this.fe=c;this.Xd=d;this.Qd=f;this.af=k;this.ke=l;this.Ye=m;this.kf=[]} +function Xb(a,b,c){for(;b!==c;)b.ke||Q(`Expected null or instance of ${c.name}, got an instance of ${b.name}`),a=b.ke(a),b=b.Qd;return a}function Yb(a,b){if(null===b)return this.Ae&&Q(`null is not a valid ${this.name}`),0;b.kd||Q(`Cannot pass "${Zb(b)}" as a ${this.name}`);b.kd.Kd||Q(`Cannot pass deleted object as a pointer of type ${this.name}`);return Xb(b.kd.Kd,b.kd.Nd.Ld,this.Ld)} +function $b(a,b){if(null===b){this.Ae&&Q(`null is not a valid ${this.name}`);if(this.pe){var c=this.Be();null!==a&&a.push(this.Xd,c);return c}return 0}b.kd||Q(`Cannot pass "${Zb(b)}" as a ${this.name}`);b.kd.Kd||Q(`Cannot pass deleted object as a pointer of type ${this.name}`);!this.oe&&b.kd.Nd.oe&&Q(`Cannot convert argument of type ${b.kd.Td?b.kd.Td.name:b.kd.Nd.name} to parameter type ${this.name}`);c=Xb(b.kd.Kd,b.kd.Nd.Ld,this.Ld);if(this.pe)switch(void 0===b.kd.Pd&&Q("Passing raw pointer to smart pointer is illegal"), +this.qf){case 0:b.kd.Td===this?c=b.kd.Pd:Q(`Cannot convert argument of type ${b.kd.Td?b.kd.Td.name:b.kd.Nd.name} to parameter type ${this.name}`);break;case 1:c=b.kd.Pd;break;case 2:if(b.kd.Td===this)c=b.kd.Pd;else{var d=b.clone();c=this.lf(c,ac(function(){d["delete"]()}));null!==a&&a.push(this.Xd,c)}break;default:Q("Unsupporting sharing policy")}return c} +function bc(a,b){if(null===b)return this.Ae&&Q(`null is not a valid ${this.name}`),0;b.kd||Q(`Cannot pass "${Zb(b)}" as a ${this.name}`);b.kd.Kd||Q(`Cannot pass deleted object as a pointer of type ${this.name}`);b.kd.Nd.oe&&Q(`Cannot convert argument of type ${b.kd.Nd.name} to parameter type ${this.name}`);return Xb(b.kd.Kd,b.kd.Nd.Ld,this.Ld)} +function cc(a,b,c,d,f,k,l,m,p,w,y){this.name=a;this.Ld=b;this.Ae=c;this.oe=d;this.pe=f;this.jf=k;this.qf=l;this.Ke=m;this.Be=p;this.lf=w;this.Xd=y;f||void 0!==b.Qd?this.toWireType=$b:(this.toWireType=d?Yb:bc,this.Sd=null)}function dc(a,b,c){r.hasOwnProperty(a)||sb("Replacing nonexistant public symbol");void 0!==r[a].Od&&void 0!==c?r[a].Od[c]=b:(r[a]=b,r[a].ce=c)} +var ec=(a,b)=>{var c=[];return function(){c.length=0;Object.assign(c,arguments);if(a.includes("j")){var d=r["dynCall_"+a];d=c&&c.length?d.apply(null,[b].concat(c)):d.call(null,b)}else d=Na.get(b).apply(null,c);return d}};function mc(a,b){a=O(a);var c=a.includes("j")?ec(a,b):Na.get(b);"function"!=typeof c&&Q(`unknown function pointer with signature ${a}: ${b}`);return c}var nc=void 0;function oc(a){a=pc(a);var b=O(a);qc(a);return b} +function rc(a,b){function c(k){f[k]||pb[k]||(qb[k]?qb[k].forEach(c):(d.push(k),f[k]=!0))}var d=[],f={};b.forEach(c);throw new nc(`${a}: `+d.map(oc).join([", "]));} +function sc(a,b,c,d,f){var k=b.length;2>k&&Q("argTypes array size mismatch! Must at least get return value and 'this' types!");var l=null!==b[1]&&null!==c,m=!1;for(c=1;c>2]);return c}function uc(){this.Wd=[void 0];this.Ie=[]}var vc=new uc;function wc(a){a>=vc.Zd&&0===--vc.get(a).Le&&vc.we(a)} +var xc=a=>{a||Q("Cannot use deleted val. handle = "+a);return vc.get(a).value},ac=a=>{switch(a){case void 0:return 1;case null:return 2;case !0:return 3;case !1:return 4;default:return vc.ve({Le:1,value:a})}};function yc(a,b,c){switch(b){case 0:return function(d){return this.fromWireType((c?Ha:C)[d])};case 1:return function(d){return this.fromWireType((c?Ia:Ja)[d>>1])};case 2:return function(d){return this.fromWireType((c?K:L)[d>>2])};default:throw new TypeError("Unknown integer type: "+a);}} +function zc(a,b){var c=pb[a];void 0===c&&Q(b+" has unknown type "+oc(a));return c}function Zb(a){if(null===a)return"null";var b=typeof a;return"object"===b||"array"===b||"function"===b?a.toString():""+a}function Ac(a,b){switch(b){case 2:return function(c){return this.fromWireType(N[c>>2])};case 3:return function(c){return this.fromWireType(Ka[c>>3])};default:throw new TypeError("Unknown float type: "+a);}} +function Bc(a,b,c){switch(b){case 0:return c?function(d){return Ha[d]}:function(d){return C[d]};case 1:return c?function(d){return Ia[d>>1]}:function(d){return Ja[d>>1]};case 2:return c?function(d){return K[d>>2]}:function(d){return L[d>>2]};default:throw new TypeError("Unknown integer type: "+a);}} +var ka=(a,b,c,d)=>{if(!(0=l){var m=a.charCodeAt(++k);l=65536+((l&1023)<<10)|m&1023}if(127>=l){if(c>=d)break;b[c++]=l}else{if(2047>=l){if(c+1>=d)break;b[c++]=192|l>>6}else{if(65535>=l){if(c+2>=d)break;b[c++]=224|l>>12}else{if(c+3>=d)break;b[c++]=240|l>>18;b[c++]=128|l>>12&63}b[c++]=128|l>>6&63}b[c++]=128|l&63}}b[c]=0;return c-f},ja=a=>{for(var b=0,c=0;c=d?b++:2047>= +d?b+=2:55296<=d&&57343>=d?(b+=4,++c):b+=3}return b},Cc="undefined"!=typeof TextDecoder?new TextDecoder("utf-16le"):void 0,Dc=(a,b)=>{var c=a>>1;for(var d=c+b/2;!(c>=d)&&Ja[c];)++c;c<<=1;if(32=b/2);++d){var f=Ia[a+2*d>>1];if(0==f)break;c+=String.fromCharCode(f)}return c},Ec=(a,b,c)=>{void 0===c&&(c=2147483647);if(2>c)return 0;c-=2;var d=b;c=c<2*a.length?c/2:a.length;for(var f=0;f>1]=a.charCodeAt(f),b+=2;Ia[b>>1]=0;return b-d}, +Fc=a=>2*a.length,Gc=(a,b)=>{for(var c=0,d="";!(c>=b/4);){var f=K[a+4*c>>2];if(0==f)break;++c;65536<=f?(f-=65536,d+=String.fromCharCode(55296|f>>10,56320|f&1023)):d+=String.fromCharCode(f)}return d},Hc=(a,b,c)=>{void 0===c&&(c=2147483647);if(4>c)return 0;var d=b;c=d+c-4;for(var f=0;f=k){var l=a.charCodeAt(++f);k=65536+((k&1023)<<10)|l&1023}K[b>>2]=k;b+=4;if(b+4>c)break}K[b>>2]=0;return b-d},Ic=a=>{for(var b=0,c=0;c=d&&++c;b+=4}return b},Jc={};function Kc(a){var b=Jc[a];return void 0===b?O(a):b}var Lc=[]; +function Mc(){function a(b){b.$$$embind_global$$$=b;var c="object"==typeof $$$embind_global$$$&&b.$$$embind_global$$$==b;c||delete b.$$$embind_global$$$;return c}if("object"==typeof globalThis)return globalThis;if("object"==typeof $$$embind_global$$$)return $$$embind_global$$$;"object"==typeof global&&a(global)?$$$embind_global$$$=global:"object"==typeof self&&a(self)&&($$$embind_global$$$=self);if("object"==typeof $$$embind_global$$$)return $$$embind_global$$$;throw Error("unable to get global object."); +}function Nc(a){var b=Lc.length;Lc.push(a);return b}function Oc(a,b){for(var c=Array(a),d=0;d>2],"parameter "+d);return c}var Pc=[];function Qc(a){var b=Array(a+1);return function(c,d,f){b[0]=c;for(var k=0;k>2],"parameter "+k);b[k+1]=l.readValueFromPointer(f);f+=l.argPackAdvance}c=new (c.bind.apply(c,b));return ac(c)}}var Rc={}; +function Sc(a){var b=a.getExtension("ANGLE_instanced_arrays");b&&(a.vertexAttribDivisor=function(c,d){b.vertexAttribDivisorANGLE(c,d)},a.drawArraysInstanced=function(c,d,f,k){b.drawArraysInstancedANGLE(c,d,f,k)},a.drawElementsInstanced=function(c,d,f,k,l){b.drawElementsInstancedANGLE(c,d,f,k,l)})} +function Tc(a){var b=a.getExtension("OES_vertex_array_object");b&&(a.createVertexArray=function(){return b.createVertexArrayOES()},a.deleteVertexArray=function(c){b.deleteVertexArrayOES(c)},a.bindVertexArray=function(c){b.bindVertexArrayOES(c)},a.isVertexArray=function(c){return b.isVertexArrayOES(c)})}function Uc(a){var b=a.getExtension("WEBGL_draw_buffers");b&&(a.drawBuffers=function(c,d){b.drawBuffersWEBGL(c,d)})} +var Vc=1,Wc=[],Xc=[],Yc=[],Zc=[],ea=[],$c=[],ad=[],ia=[],bd=[],cd=[],dd={},ed={},gd=4;function R(a){hd||(hd=a)}function da(a){for(var b=Vc++,c=a.length;ca.version||!b.Ge)b.Ge=b.getExtension("EXT_disjoint_timer_query");b.wf=b.getExtension("WEBGL_multi_draw");(b.getSupportedExtensions()||[]).forEach(function(c){c.includes("lose_context")||c.includes("debug")||b.getExtension(c)})}} +var v,hd,ld={},nd=()=>{if(!md){var a={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:("object"==typeof navigator&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",_:ma||"./this.program"},b;for(b in ld)void 0===ld[b]?delete a[b]:a[b]=ld[b];var c=[];for(b in a)c.push(`${b}=${a[b]}`);md=c}return md},md,od=[null,[],[]];function pd(a){S.bindVertexArray(ad[a])} +function qd(a,b){for(var c=0;c>2];S.deleteVertexArray(ad[d]);ad[d]=null}}var rd=[];function sd(a,b,c,d){S.drawElements(a,b,c,d)}function td(a,b,c,d){for(var f=0;f>2]=l}}function ud(a,b){td(a,b,"createVertexArray",ad)} +function vd(a,b,c){if(b){var d=void 0;switch(a){case 36346:d=1;break;case 36344:0!=c&&1!=c&&R(1280);return;case 34814:case 36345:d=0;break;case 34466:var f=S.getParameter(34467);d=f?f.length:0;break;case 33309:if(2>v.version){R(1282);return}d=2*(S.getSupportedExtensions()||[]).length;break;case 33307:case 33308:if(2>v.version){R(1280);return}d=33307==a?3:0}if(void 0===d)switch(f=S.getParameter(a),typeof f){case "number":d=f;break;case "boolean":d=f?1:0;break;case "string":R(1280);return;case "object":if(null=== +f)switch(a){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 36662:case 36663:case 35053:case 35055:case 36010:case 35097:case 35869:case 32874:case 36389:case 35983:case 35368:case 34068:d=0;break;default:R(1280);return}else{if(f instanceof Float32Array||f instanceof Uint32Array||f instanceof Int32Array||f instanceof Array){for(a=0;a>2]=f[a];break;case 2:N[b+4*a>>2]=f[a];break;case 4:Ha[b+a>>0]=f[a]?1:0}return}try{d=f.name|0}catch(k){R(1280); +Ca("GL_INVALID_ENUM in glGet"+c+"v: Unknown object returned from WebGL getParameter("+a+")! (error: "+k+")");return}}break;default:R(1280);Ca("GL_INVALID_ENUM in glGet"+c+"v: Native code calling glGet"+c+"v("+a+") and it returns "+f+" of type "+typeof f+"!");return}switch(c){case 1:c=d;L[b>>2]=c;L[b+4>>2]=(c-L[b>>2])/4294967296;break;case 0:K[b>>2]=d;break;case 2:N[b>>2]=d;break;case 4:Ha[b>>0]=d?1:0}}else R(1281)}var xd=a=>{var b=ja(a)+1,c=wd(b);c&&ka(a,C,c,b);return c}; +function yd(a){return"]"==a.slice(-1)&&a.lastIndexOf("[")}function zd(a){a-=5120;return 0==a?Ha:1==a?C:2==a?Ia:4==a?K:6==a?N:5==a||28922==a||28520==a||30779==a||30782==a?L:Ja}function Ad(a,b,c,d,f){a=zd(a);var k=31-Math.clz32(a.BYTES_PER_ELEMENT),l=gd;return a.subarray(f>>k,f+d*(c*({5:3,6:4,8:2,29502:3,29504:4,26917:2,26918:2,29846:3,29847:4}[b-6402]||1)*(1<>k)} +function W(a){var b=S.We;if(b){var c=b.je[a];"number"==typeof c&&(b.je[a]=c=S.getUniformLocation(b,b.Me[a]+(00===a%4&&(0!==a%100||0===a%400),Ed=[31,29,31,30,31,30,31,31,30,31,30,31],Fd=[31,28,31,30,31,30,31,31,30,31,30,31];function Gd(a){var b=Array(ja(a)+1);ka(a,b,0,b.length);return b} +var Hd=(a,b,c,d)=>{function f(u,F,H){for(u="number"==typeof u?u.toString():u||"";u.lengthca?-1:0T-u.getDate())F-=T-u.getDate()+1,u.setDate(1),11>H?u.setMonth(H+1):(u.setMonth(0),u.setFullYear(u.getFullYear()+1));else{u.setDate(u.getDate()+F);break}}H=new Date(u.getFullYear()+1,0,4);F=m(new Date(u.getFullYear(), +0,4));H=m(H);return 0>=l(F,u)?0>=l(H,u)?u.getFullYear()+1:u.getFullYear():u.getFullYear()-1}var w=K[d+40>>2];d={tf:K[d>>2],sf:K[d+4>>2],te:K[d+8>>2],Ce:K[d+12>>2],ue:K[d+16>>2],ae:K[d+20>>2],Vd:K[d+24>>2],$d:K[d+28>>2],zf:K[d+32>>2],rf:K[d+36>>2],uf:w?w?kb(C,w):"":""};c=c?kb(C,c):"";w={"%c":"%a %b %d %H:%M:%S %Y","%D":"%m/%d/%y","%F":"%Y-%m-%d","%h":"%b","%r":"%I:%M:%S %p","%R":"%H:%M","%T":"%H:%M:%S","%x":"%m/%d/%y","%X":"%H:%M:%S","%Ec":"%c","%EC":"%C","%Ex":"%m/%d/%y","%EX":"%H:%M:%S","%Ey":"%y", +"%EY":"%Y","%Od":"%d","%Oe":"%e","%OH":"%H","%OI":"%I","%Om":"%m","%OM":"%M","%OS":"%S","%Ou":"%u","%OU":"%U","%OV":"%V","%Ow":"%w","%OW":"%W","%Oy":"%y"};for(var y in w)c=c.replace(new RegExp(y,"g"),w[y]);var B="Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),D="January February March April May June July August September October November December".split(" ");w={"%a":u=>B[u.Vd].substring(0,3),"%A":u=>B[u.Vd],"%b":u=>D[u.ue].substring(0,3),"%B":u=>D[u.ue],"%C":u=>k((u.ae+1900)/ +100|0,2),"%d":u=>k(u.Ce,2),"%e":u=>f(u.Ce,2," "),"%g":u=>p(u).toString().substring(2),"%G":u=>p(u),"%H":u=>k(u.te,2),"%I":u=>{u=u.te;0==u?u=12:12{for(var F=0,H=0;H<=u.ue-1;F+=(Dd(u.ae+1900)?Ed:Fd)[H++]);return k(u.Ce+F,3)},"%m":u=>k(u.ue+1,2),"%M":u=>k(u.sf,2),"%n":()=>"\n","%p":u=>0<=u.te&&12>u.te?"AM":"PM","%S":u=>k(u.tf,2),"%t":()=>"\t","%u":u=>u.Vd||7,"%U":u=>k(Math.floor((u.$d+7-u.Vd)/7),2),"%V":u=>{var F=Math.floor((u.$d+7-(u.Vd+6)%7)/7);2>=(u.Vd+371-u.$d- +2)%7&&F++;if(F)53==F&&(H=(u.Vd+371-u.$d)%7,4==H||3==H&&Dd(u.ae)||(F=1));else{F=52;var H=(u.Vd+7-u.$d-1)%7;(4==H||5==H&&Dd(u.ae%400-1))&&F++}return k(F,2)},"%w":u=>u.Vd,"%W":u=>k(Math.floor((u.$d+7-(u.Vd+6)%7)/7),2),"%y":u=>(u.ae+1900).toString().substring(2),"%Y":u=>u.ae+1900,"%z":u=>{u=u.rf;var F=0<=u;u=Math.abs(u)/60;return(F?"+":"-")+String("0000"+(u/60*100+u%60)).slice(-4)},"%Z":u=>u.uf,"%%":()=>"%"};c=c.replace(/%%/g,"\x00\x00");for(y in w)c.includes(y)&&(c=c.replace(new RegExp(y,"g"),w[y](d))); +c=c.replace(/\0\0/g,"%");y=Gd(c);if(y.length>b)return 0;Ha.set(y,a);return y.length-1};rb=r.InternalError=class extends Error{constructor(a){super(a);this.name="InternalError"}};for(var Id=Array(256),Jd=0;256>Jd;++Jd)Id[Jd]=String.fromCharCode(Jd);wb=Id;xb=r.BindingError=class extends Error{constructor(a){super(a);this.name="BindingError"}}; +Rb.prototype.isAliasOf=function(a){if(!(this instanceof Rb&&a instanceof Rb))return!1;var b=this.kd.Nd.Ld,c=this.kd.Kd,d=a.kd.Nd.Ld;for(a=a.kd.Kd;b.Qd;)c=b.ke(c),b=b.Qd;for(;d.Qd;)a=d.ke(a),d=d.Qd;return b===d&&c===a}; +Rb.prototype.clone=function(){this.kd.Kd||zb(this);if(this.kd.ie)return this.kd.count.value+=1,this;var a=Qb,b=Object,c=b.create,d=Object.getPrototypeOf(this),f=this.kd;a=a(c.call(b,d,{kd:{value:{count:f.count,ee:f.ee,ie:f.ie,Kd:f.Kd,Nd:f.Nd,Pd:f.Pd,Td:f.Td}}}));a.kd.count.value+=1;a.kd.ee=!1;return a};Rb.prototype["delete"]=function(){this.kd.Kd||zb(this);this.kd.ee&&!this.kd.ie&&Q("Object already scheduled for deletion");Bb(this);Cb(this.kd);this.kd.ie||(this.kd.Pd=void 0,this.kd.Kd=void 0)}; +Rb.prototype.isDeleted=function(){return!this.kd.Kd};Rb.prototype.deleteLater=function(){this.kd.Kd||zb(this);this.kd.ee&&!this.kd.ie&&Q("Object already scheduled for deletion");Kb.push(this);1===Kb.length&&Mb&&Mb(Lb);this.kd.ee=!0;return this};r.getInheritedInstanceCount=function(){return Object.keys(Nb).length};r.getLiveInheritedInstances=function(){var a=[],b;for(b in Nb)Nb.hasOwnProperty(b)&&a.push(Nb[b]);return a};r.flushPendingDeletes=Lb;r.setDelayFunction=function(a){Mb=a;Kb.length&&Mb&&Mb(Lb)}; +cc.prototype.bf=function(a){this.Ke&&(a=this.Ke(a));return a};cc.prototype.Ee=function(a){this.Xd&&this.Xd(a)};cc.prototype.argPackAdvance=8;cc.prototype.readValueFromPointer=nb;cc.prototype.deleteObject=function(a){if(null!==a)a["delete"]()}; +cc.prototype.fromWireType=function(a){function b(){return this.pe?Pb(this.Ld.fe,{Nd:this.jf,Kd:c,Td:this,Pd:a}):Pb(this.Ld.fe,{Nd:this,Kd:a})}var c=this.bf(a);if(!c)return this.Ee(a),null;var d=Ob(this.Ld,c);if(void 0!==d){if(0===d.kd.count.value)return d.kd.Kd=c,d.kd.Pd=a,d.clone();d=d.clone();this.Ee(a);return d}d=this.Ld.af(c);d=Jb[d];if(!d)return b.call(this);d=this.oe?d.Ve:d.pointerType;var f=Db(c,this.Ld,d.Ld);return null===f?b.call(this):this.pe?Pb(d.Ld.fe,{Nd:d,Kd:f,Td:this,Pd:a}):Pb(d.Ld.fe, +{Nd:d,Kd:f})};nc=r.UnboundTypeError=function(a,b){var c=Tb(b,function(d){this.name=b;this.message=d;d=Error(d).stack;void 0!==d&&(this.stack=this.toString()+"\n"+d.replace(/^Error(:[^\n]*)?\n/,""))});c.prototype=Object.create(a.prototype);c.prototype.constructor=c;c.prototype.toString=function(){return void 0===this.message?this.name:`${this.name}: ${this.message}`};return c}(Error,"UnboundTypeError"); +Object.assign(uc.prototype,{get(a){return this.Wd[a]},has(a){return void 0!==this.Wd[a]},ve(a){var b=this.Ie.pop()||this.Wd.length;this.Wd[b]=a;return b},we(a){this.Wd[a]=void 0;this.Ie.push(a)}});vc.Wd.push({value:void 0},{value:null},{value:!0},{value:!1});vc.Zd=vc.Wd.length;r.count_emval_handles=function(){for(var a=0,b=vc.Zd;bKd;++Kd)rd.push(Array(Kd));var Ld=new Float32Array(288); +for(Kd=0;288>Kd;++Kd)Bd[Kd]=Ld.subarray(0,Kd+1);var Md=new Int32Array(288);for(Kd=0;288>Kd;++Kd)Cd[Kd]=Md.subarray(0,Kd+1); +var $d={H:function(a,b,c){(new fb(a)).Zd(b,c);gb=a;ib++;throw gb;},U:function(){return 0},vb:()=>{},xb:function(){return 0},sb:()=>{},tb:()=>{},V:function(){},ub:()=>{},C:function(a){var b=lb[a];delete lb[a];var c=b.Be,d=b.Xd,f=b.He,k=f.map(l=>l.ef).concat(f.map(l=>l.nf));tb([a],k,l=>{var m={};f.forEach((p,w)=>{var y=l[w],B=p.cf,D=p.df,u=l[w+f.length],F=p.mf,H=p.pf;m[p.$e]={read:T=>y.fromWireType(B(D,T)),write:(T,ca)=>{var Y=[];F(H,T,u.toWireType(Y,ca));mb(Y)}}});return[{name:b.name,fromWireType:function(p){var w= +{},y;for(y in m)w[y]=m[y].read(p);d(p);return w},toWireType:function(p,w){for(var y in m)if(!(y in w))throw new TypeError(`Missing field: "${y}"`);var B=c();for(y in m)m[y].write(B,w[y]);null!==p&&p.push(d,B);return B},argPackAdvance:8,readValueFromPointer:nb,Sd:d}]})},kb:function(){},Bb:function(a,b,c,d,f){var k=vb(c);b=O(b);ub(a,{name:b,fromWireType:function(l){return!!l},toWireType:function(l,m){return m?d:f},argPackAdvance:8,readValueFromPointer:function(l){if(1===c)var m=Ha;else if(2===c)m=Ia; +else if(4===c)m=K;else throw new TypeError("Unknown boolean type size: "+b);return this.fromWireType(m[l>>k])},Sd:null})},l:function(a,b,c,d,f,k,l,m,p,w,y,B,D){y=O(y);k=mc(f,k);m&&(m=mc(l,m));w&&(w=mc(p,w));D=mc(B,D);var u=Sb(y);Vb(u,function(){rc(`Cannot construct ${y} due to unbound types`,[d])});tb([a,b,c],d?[d]:[],function(F){F=F[0];if(d){var H=F.Ld;var T=H.fe}else T=Rb.prototype;F=Tb(u,function(){if(Object.getPrototypeOf(this)!==ca)throw new xb("Use 'new' to construct "+y);if(void 0===Y.Yd)throw new xb(y+ +" has no accessible constructor");var Ma=Y.Yd[arguments.length];if(void 0===Ma)throw new xb(`Tried to invoke ctor of ${y} with invalid number of parameters (${arguments.length}) - expected (${Object.keys(Y.Yd).toString()}) parameters instead!`);return Ma.apply(this,arguments)});var ca=Object.create(T,{constructor:{value:F}});F.prototype=ca;var Y=new Wb(y,F,ca,D,H,k,m,w);Y.Qd&&(void 0===Y.Qd.le&&(Y.Qd.le=[]),Y.Qd.le.push(Y));H=new cc(y,Y,!0,!1,!1);T=new cc(y+"*",Y,!1,!1,!1);var va=new cc(y+" const*", +Y,!1,!0,!1);Jb[a]={pointerType:T,Ve:va};dc(u,F);return[H,T,va]})},e:function(a,b,c,d,f,k,l){var m=tc(c,d);b=O(b);k=mc(f,k);tb([],[a],function(p){function w(){rc(`Cannot call ${y} due to unbound types`,m)}p=p[0];var y=`${p.name}.${b}`;b.startsWith("@@")&&(b=Symbol[b.substring(2)]);var B=p.Ld.constructor;void 0===B[b]?(w.ce=c-1,B[b]=w):(Ub(B,b,y),B[b].Od[c-1]=w);tb([],m,function(D){D=[D[0],null].concat(D.slice(1));D=sc(y,D,null,k,l);void 0===B[b].Od?(D.ce=c-1,B[b]=D):B[b].Od[c-1]=D;if(p.Ld.le)for(const u of p.Ld.le)u.constructor.hasOwnProperty(b)|| +(u.constructor[b]=D);return[]});return[]})},A:function(a,b,c,d,f,k){var l=tc(b,c);f=mc(d,f);tb([],[a],function(m){m=m[0];var p=`constructor ${m.name}`;void 0===m.Ld.Yd&&(m.Ld.Yd=[]);if(void 0!==m.Ld.Yd[b-1])throw new xb(`Cannot register multiple constructors with identical number of parameters (${b-1}) for class '${m.name}'! Overload resolution is currently only performed using the parameter count, not actual type info!`);m.Ld.Yd[b-1]=()=>{rc(`Cannot construct ${m.name} due to unbound types`,l)}; +tb([],l,function(w){w.splice(1,0,null);m.Ld.Yd[b-1]=sc(p,w,null,f,k);return[]});return[]})},a:function(a,b,c,d,f,k,l,m){var p=tc(c,d);b=O(b);k=mc(f,k);tb([],[a],function(w){function y(){rc(`Cannot call ${B} due to unbound types`,p)}w=w[0];var B=`${w.name}.${b}`;b.startsWith("@@")&&(b=Symbol[b.substring(2)]);m&&w.Ld.kf.push(b);var D=w.Ld.fe,u=D[b];void 0===u||void 0===u.Od&&u.className!==w.name&&u.ce===c-2?(y.ce=c-2,y.className=w.name,D[b]=y):(Ub(D,b,B),D[b].Od[c-2]=y);tb([],p,function(F){F=sc(B,F, +w,k,l);void 0===D[b].Od?(F.ce=c-2,D[b]=F):D[b].Od[c-2]=F;return[]});return[]})},t:function(a,b,c){a=O(a);tb([],[b],function(d){d=d[0];r[a]=d.fromWireType(c);return[]})},Ab:function(a,b){b=O(b);ub(a,{name:b,fromWireType:function(c){var d=xc(c);wc(c);return d},toWireType:function(c,d){return ac(d)},argPackAdvance:8,readValueFromPointer:nb,Sd:null})},j:function(a,b,c,d){function f(){}c=vb(c);b=O(b);f.values={};ub(a,{name:b,constructor:f,fromWireType:function(k){return this.constructor.values[k]},toWireType:function(k, +l){return l.value},argPackAdvance:8,readValueFromPointer:yc(b,c,d),Sd:null});Vb(b,f)},b:function(a,b,c){var d=zc(a,"enum");b=O(b);a=d.constructor;d=Object.create(d.constructor.prototype,{value:{value:c},constructor:{value:Tb(`${d.name}_${b}`,function(){})}});a.values[c]=d;a[b]=d},X:function(a,b,c){c=vb(c);b=O(b);ub(a,{name:b,fromWireType:function(d){return d},toWireType:function(d,f){return f},argPackAdvance:8,readValueFromPointer:Ac(b,c),Sd:null})},v:function(a,b,c,d,f,k){var l=tc(b,c);a=O(a);f= +mc(d,f);Vb(a,function(){rc(`Cannot call ${a} due to unbound types`,l)},b-1);tb([],l,function(m){m=[m[0],null].concat(m.slice(1));dc(a,sc(a,m,null,f,k),b-1);return[]})},E:function(a,b,c,d,f){b=O(b);-1===f&&(f=4294967295);f=vb(c);var k=m=>m;if(0===d){var l=32-8*c;k=m=>m<>>l}c=b.includes("unsigned")?function(m,p){return p>>>0}:function(m,p){return p};ub(a,{name:b,fromWireType:k,toWireType:c,argPackAdvance:8,readValueFromPointer:Bc(b,f,0!==d),Sd:null})},s:function(a,b,c){function d(k){k>>=2;var l= +L;return new f(l.buffer,l[k+1],l[k])}var f=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array][b];c=O(c);ub(a,{name:c,fromWireType:d,argPackAdvance:8,readValueFromPointer:d},{ff:!0})},q:function(a,b,c,d,f,k,l,m,p,w,y,B){c=O(c);k=mc(f,k);m=mc(l,m);w=mc(p,w);B=mc(y,B);tb([a],[b],function(D){D=D[0];return[new cc(c,D.Ld,!1,!1,!0,D,d,k,m,w,B)]})},W:function(a,b){b=O(b);var c="std::string"===b;ub(a,{name:b,fromWireType:function(d){var f=L[d>>2],k=d+4;if(c)for(var l= +k,m=0;m<=f;++m){var p=k+m;if(m==f||0==C[p]){l=l?kb(C,l,p-l):"";if(void 0===w)var w=l;else w+=String.fromCharCode(0),w+=l;l=p+1}}else{w=Array(f);for(m=0;m>2]= +l;if(c&&k)ka(f,C,p,l+1);else if(k)for(k=0;kJa;var m=1}else 4===b&&(d=Gc,f=Hc,k=Ic,l=()=>L,m=2);ub(a,{name:c,fromWireType:function(p){for(var w=L[p>>2],y=l(),B,D=p+4,u=0;u<=w;++u){var F= +p+4+u*b;if(u==w||0==y[F>>m])D=d(D,F-D),void 0===B?B=D:(B+=String.fromCharCode(0),B+=D),D=F+b}qc(p);return B},toWireType:function(p,w){"string"!=typeof w&&Q(`Cannot pass non-string to C++ string type ${c}`);var y=k(w),B=wd(4+y+b);L[B>>2]=y>>m;f(w,B+4,y+b);null!==p&&p.push(qc,B);return B},argPackAdvance:8,readValueFromPointer:nb,Sd:function(p){qc(p)}})},D:function(a,b,c,d,f,k){lb[a]={name:O(b),Be:mc(c,d),Xd:mc(f,k),He:[]}},d:function(a,b,c,d,f,k,l,m,p,w){lb[a].He.push({$e:O(b),ef:c,cf:mc(d,f),df:k, +nf:l,mf:mc(m,p),pf:w})},Cb:function(a,b){b=O(b);ub(a,{hf:!0,name:b,argPackAdvance:0,fromWireType:function(){},toWireType:function(){}})},zb:()=>!0,ob:()=>{throw Infinity;},F:function(a,b,c){a=xc(a);b=zc(b,"emval::as");var d=[],f=ac(d);L[c>>2]=f;return b.toWireType(d,a)},P:function(a,b,c,d,f){a=Lc[a];b=xc(b);c=Kc(c);var k=[];L[d>>2]=ac(k);return a(b,c,k,f)},u:function(a,b,c,d){a=Lc[a];b=xc(b);c=Kc(c);a(b,c,null,d)},c:wc,K:function(a){if(0===a)return ac(Mc());a=Kc(a);return ac(Mc()[a])},r:function(a, +b){var c=Oc(a,b),d=c[0];b=d.name+"_$"+c.slice(1).map(function(l){return l.name}).join("_")+"$";var f=Pc[b];if(void 0!==f)return f;var k=Array(a-1);f=Nc((l,m,p,w)=>{for(var y=0,B=0;B{Ea("")},yb:()=>performance.now(),pb:a=>{var b=C.length;a>>>=0;if(2147483648=c;c*=2){var d=b*(1+.2/c); +d=Math.min(d,a+100663296);var f=Math;d=Math.max(a,d);a:{f=f.min.call(f,2147483648,d+(65536-d%65536)%65536)-Fa.buffer.byteLength+65535>>>16;try{Fa.grow(f);La();var k=1;break a}catch(l){}k=void 0}if(k)return!0}return!1},fb:function(){return v?v.handle:0},qb:(a,b)=>{var c=0;nd().forEach(function(d,f){var k=b+c;f=L[a+4*f>>2]=k;for(k=0;k>0]=d.charCodeAt(k);Ha[f>>0]=0;c+=d.length+1});return 0},rb:(a,b)=>{var c=nd();L[a>>2]=c.length;var d=0;c.forEach(function(f){d+=f.length+1});L[b>> +2]=d;return 0},Db:a=>{if(!noExitRuntime){if(r.onExit)r.onExit(a);Ga=!0}oa(a,new db(a))},M:()=>52,gb:function(){return 52},wb:()=>52,jb:function(){return 70},T:(a,b,c,d)=>{for(var f=0,k=0;k>2],m=L[b+4>>2];b+=8;for(var p=0;p>2]=f;return 0},Wc:function(a){S.activeTexture(a)},Xc:function(a,b){S.attachShader(Xc[a],$c[b])},Yc:function(a,b,c){S.bindAttribLocation(Xc[a],b,c?kb(C,c):"")},Zc:function(a, +b){35051==a?S.ye=b:35052==a&&(S.de=b);S.bindBuffer(a,Wc[b])},$:function(a,b){S.bindFramebuffer(a,Yc[b])},_b:function(a,b){S.bindRenderbuffer(a,Zc[b])},Kb:function(a,b){S.bindSampler(a,bd[b])},_c:function(a,b){S.bindTexture(a,ea[b])},sc:pd,vc:pd,$c:function(a,b,c,d){S.blendColor(a,b,c,d)},aa:function(a){S.blendEquation(a)},ba:function(a,b){S.blendFunc(a,b)},Ub:function(a,b,c,d,f,k,l,m,p,w){S.blitFramebuffer(a,b,c,d,f,k,l,m,p,w)},ca:function(a,b,c,d){2<=v.version?c&&b?S.bufferData(a,C,d,c,b):S.bufferData(a, +b,d):S.bufferData(a,c?C.subarray(c,c+b):b,d)},da:function(a,b,c,d){2<=v.version?c&&S.bufferSubData(a,b,C,d,c):S.bufferSubData(a,b,C.subarray(d,d+c))},$b:function(a){return S.checkFramebufferStatus(a)},R:function(a){S.clear(a)},_:function(a,b,c,d){S.clearColor(a,b,c,d)},S:function(a){S.clearStencil(a)},mb:function(a,b,c,d){return S.clientWaitSync(cd[a],b,(c>>>0)+4294967296*d)},ea:function(a,b,c,d){S.colorMask(!!a,!!b,!!c,!!d)},fa:function(a){S.compileShader($c[a])},ga:function(a,b,c,d,f,k,l,m){2<= +v.version?S.de||!l?S.compressedTexImage2D(a,b,c,d,f,k,l,m):S.compressedTexImage2D(a,b,c,d,f,k,C,m,l):S.compressedTexImage2D(a,b,c,d,f,k,m?C.subarray(m,m+l):null)},ha:function(a,b,c,d,f,k,l,m,p){2<=v.version?S.de||!m?S.compressedTexSubImage2D(a,b,c,d,f,k,l,m,p):S.compressedTexSubImage2D(a,b,c,d,f,k,l,C,p,m):S.compressedTexSubImage2D(a,b,c,d,f,k,l,p?C.subarray(p,p+m):null)},Sb:function(a,b,c,d,f){S.copyBufferSubData(a,b,c,d,f)},ia:function(a,b,c,d,f,k,l,m){S.copyTexSubImage2D(a,b,c,d,f,k,l,m)},ja:function(){var a= +da(Xc),b=S.createProgram();b.name=a;b.se=b.qe=b.re=0;b.De=1;Xc[a]=b;return a},ka:function(a){var b=da($c);$c[b]=S.createShader(a);return b},la:function(a){S.cullFace(a)},ma:function(a,b){for(var c=0;c>2],f=Wc[d];f&&(S.deleteBuffer(f),f.name=0,Wc[d]=null,d==S.ye&&(S.ye=0),d==S.de&&(S.de=0))}},ac:function(a,b){for(var c=0;c>2],f=Yc[d];f&&(S.deleteFramebuffer(f),f.name=0,Yc[d]=null)}},na:function(a){if(a){var b=Xc[a];b?(S.deleteProgram(b),b.name=0,Xc[a]=null): +R(1281)}},bc:function(a,b){for(var c=0;c>2],f=Zc[d];f&&(S.deleteRenderbuffer(f),f.name=0,Zc[d]=null)}},Lb:function(a,b){for(var c=0;c>2],f=bd[d];f&&(S.deleteSampler(f),f.name=0,bd[d]=null)}},oa:function(a){if(a){var b=$c[a];b?(S.deleteShader(b),$c[a]=null):R(1281)}},Tb:function(a){if(a){var b=cd[a];b?(S.deleteSync(b),b.name=0,cd[a]=null):R(1281)}},pa:function(a,b){for(var c=0;c>2],f=ea[d];f&&(S.deleteTexture(f),f.name=0,ea[d]=null)}}, +tc:qd,wc:qd,qa:function(a){S.depthMask(!!a)},ra:function(a){S.disable(a)},sa:function(a){S.disableVertexAttribArray(a)},ta:function(a,b,c){S.drawArrays(a,b,c)},qc:function(a,b,c,d){S.drawArraysInstanced(a,b,c,d)},oc:function(a,b,c,d,f){S.Fe.drawArraysInstancedBaseInstanceWEBGL(a,b,c,d,f)},mc:function(a,b){for(var c=rd[a],d=0;d>2];S.drawBuffers(c)},ua:sd,rc:function(a,b,c,d,f){S.drawElementsInstanced(a,b,c,d,f)},pc:function(a,b,c,d,f,k,l){S.Fe.drawElementsInstancedBaseVertexBaseInstanceWEBGL(a, +b,c,d,f,k,l)},gc:function(a,b,c,d,f,k){sd(a,d,f,k)},va:function(a){S.enable(a)},wa:function(a){S.enableVertexAttribArray(a)},Qb:function(a,b){return(a=S.fenceSync(a,b))?(b=da(cd),a.name=b,cd[b]=a,b):0},xa:function(){S.finish()},ya:function(){S.flush()},cc:function(a,b,c,d){S.framebufferRenderbuffer(a,b,c,Zc[d])},dc:function(a,b,c,d,f){S.framebufferTexture2D(a,b,c,ea[d],f)},za:function(a){S.frontFace(a)},Aa:function(a,b){td(a,b,"createBuffer",Wc)},ec:function(a,b){td(a,b,"createFramebuffer",Yc)},fc:function(a, +b){td(a,b,"createRenderbuffer",Zc)},Mb:function(a,b){td(a,b,"createSampler",bd)},Ba:function(a,b){td(a,b,"createTexture",ea)},uc:ud,xc:ud,Wb:function(a){S.generateMipmap(a)},Ca:function(a,b,c){c?K[c>>2]=S.getBufferParameter(a,b):R(1281)},Da:function(){var a=S.getError()||hd;hd=0;return a},Ea:function(a,b){vd(a,b,2)},Xb:function(a,b,c,d){a=S.getFramebufferAttachmentParameter(a,b,c);if(a instanceof WebGLRenderbuffer||a instanceof WebGLTexture)a=a.name|0;K[d>>2]=a},L:function(a,b){vd(a,b,0)},Fa:function(a, +b,c,d){a=S.getProgramInfoLog(Xc[a]);null===a&&(a="(unknown error)");b=0>2]=b)},Ga:function(a,b,c){if(c)if(a>=Vc)R(1281);else if(a=Xc[a],35716==b)a=S.getProgramInfoLog(a),null===a&&(a="(unknown error)"),K[c>>2]=a.length+1;else if(35719==b){if(!a.se)for(b=0;b>2]=a.se}else if(35722==b){if(!a.qe)for(b=0;b>2]=a.qe}else if(35381==b){if(!a.re)for(b=0;b>2]=a.re}else K[c>>2]=S.getProgramParameter(a,b);else R(1281)},Yb:function(a,b,c){c?K[c>>2]=S.getRenderbufferParameter(a,b):R(1281)},Ha:function(a,b,c,d){a=S.getShaderInfoLog($c[a]);null===a&&(a="(unknown error)");b=0>2]=b)},Hb:function(a,b,c,d){a=S.getShaderPrecisionFormat(a,b);K[c>>2]=a.rangeMin;K[c+4>> +2]=a.rangeMax;K[d>>2]=a.precision},Ia:function(a,b,c){c?35716==b?(a=S.getShaderInfoLog($c[a]),null===a&&(a="(unknown error)"),K[c>>2]=a?a.length+1:0):35720==b?(a=S.getShaderSource($c[a]),K[c>>2]=a?a.length+1:0):K[c>>2]=S.getShaderParameter($c[a],b):R(1281)},Q:function(a){var b=dd[a];if(!b){switch(a){case 7939:b=S.getSupportedExtensions()||[];b=b.concat(b.map(function(d){return"GL_"+d}));b=xd(b.join(" "));break;case 7936:case 7937:case 37445:case 37446:(b=S.getParameter(a))||R(1280);b=b&&xd(b);break; +case 7938:b=S.getParameter(7938);b=2<=v.version?"OpenGL ES 3.0 ("+b+")":"OpenGL ES 2.0 ("+b+")";b=xd(b);break;case 35724:b=S.getParameter(35724);var c=b.match(/^WebGL GLSL ES ([0-9]\.[0-9][0-9]?)(?:$| .*)/);null!==c&&(3==c[1].length&&(c[1]+="0"),b="OpenGL ES GLSL ES "+c[1]+" ("+b+")");b=xd(b);break;default:R(1280)}dd[a]=b}return b},db:function(a,b){if(2>v.version)return R(1282),0;var c=ed[a];if(c)return 0>b||b>=c.length?(R(1281),0):c[b];switch(a){case 7939:return c=S.getSupportedExtensions()||[], +c=c.concat(c.map(function(d){return"GL_"+d})),c=c.map(function(d){return xd(d)}),c=ed[a]=c,0>b||b>=c.length?(R(1281),0):c[b];default:return R(1280),0}},Ja:function(a,b){b=b?kb(C,b):"";if(a=Xc[a]){var c=a,d=c.je,f=c.Ne,k;if(!d)for(c.je=d={},c.Me={},k=0;k>>0,f=b.slice(0, +k));if((f=a.Ne[f])&&d>2];S.invalidateFramebuffer(a,d)},Jb:function(a,b,c,d,f,k,l){for(var m=rd[b],p=0;p>2];S.invalidateSubFramebuffer(a,m,d,f,k,l)},Rb:function(a){return S.isSync(cd[a])},Ka:function(a){return(a=ea[a])?S.isTexture(a):0},La:function(a){S.lineWidth(a)},Ma:function(a){a=Xc[a];S.linkProgram(a);a.je=0;a.Ne={}},kc:function(a, +b,c,d,f,k){S.Je.multiDrawArraysInstancedBaseInstanceWEBGL(a,K,b>>2,K,c>>2,K,d>>2,L,f>>2,k)},lc:function(a,b,c,d,f,k,l,m){S.Je.multiDrawElementsInstancedBaseVertexBaseInstanceWEBGL(a,K,b>>2,c,K,d>>2,K,f>>2,K,k>>2,L,l>>2,m)},Na:function(a,b){3317==a&&(gd=b);S.pixelStorei(a,b)},nc:function(a){S.readBuffer(a)},Oa:function(a,b,c,d,f,k,l){if(2<=v.version)if(S.ye)S.readPixels(a,b,c,d,f,k,l);else{var m=zd(k);S.readPixels(a,b,c,d,f,k,m,l>>31-Math.clz32(m.BYTES_PER_ELEMENT))}else(l=Ad(k,f,c,d,l))?S.readPixels(a, +b,c,d,f,k,l):R(1280)},Zb:function(a,b,c,d){S.renderbufferStorage(a,b,c,d)},Vb:function(a,b,c,d,f){S.renderbufferStorageMultisample(a,b,c,d,f)},Nb:function(a,b,c){S.samplerParameterf(bd[a],b,c)},Ob:function(a,b,c){S.samplerParameteri(bd[a],b,c)},Pb:function(a,b,c){S.samplerParameteri(bd[a],b,K[c>>2])},Pa:function(a,b,c,d){S.scissor(a,b,c,d)},Qa:function(a,b,c,d){for(var f="",k=0;k>2]:-1,m=K[c+4*k>>2];l=m?kb(C,m,0>l?void 0:l):"";f+=l}S.shaderSource($c[a],f)},Ra:function(a,b, +c){S.stencilFunc(a,b,c)},Sa:function(a,b,c,d){S.stencilFuncSeparate(a,b,c,d)},Ta:function(a){S.stencilMask(a)},Ua:function(a,b){S.stencilMaskSeparate(a,b)},Va:function(a,b,c){S.stencilOp(a,b,c)},Wa:function(a,b,c,d){S.stencilOpSeparate(a,b,c,d)},Xa:function(a,b,c,d,f,k,l,m,p){if(2<=v.version)if(S.de)S.texImage2D(a,b,c,d,f,k,l,m,p);else if(p){var w=zd(m);S.texImage2D(a,b,c,d,f,k,l,m,w,p>>31-Math.clz32(w.BYTES_PER_ELEMENT))}else S.texImage2D(a,b,c,d,f,k,l,m,null);else S.texImage2D(a,b,c,d,f,k,l,m,p? +Ad(m,l,d,f,p):null)},Ya:function(a,b,c){S.texParameterf(a,b,c)},Za:function(a,b,c){S.texParameterf(a,b,N[c>>2])},_a:function(a,b,c){S.texParameteri(a,b,c)},$a:function(a,b,c){S.texParameteri(a,b,K[c>>2])},hc:function(a,b,c,d,f){S.texStorage2D(a,b,c,d,f)},ab:function(a,b,c,d,f,k,l,m,p){if(2<=v.version)if(S.de)S.texSubImage2D(a,b,c,d,f,k,l,m,p);else if(p){var w=zd(m);S.texSubImage2D(a,b,c,d,f,k,l,m,w,p>>31-Math.clz32(w.BYTES_PER_ELEMENT))}else S.texSubImage2D(a,b,c,d,f,k,l,m,null);else w=null,p&&(w= +Ad(m,l,f,k,p)),S.texSubImage2D(a,b,c,d,f,k,l,m,w)},bb:function(a,b){S.uniform1f(W(a),b)},cb:function(a,b,c){if(2<=v.version)b&&S.uniform1fv(W(a),N,c>>2,b);else{if(288>=b)for(var d=Bd[b-1],f=0;f>2];else d=N.subarray(c>>2,c+4*b>>2);S.uniform1fv(W(a),d)}},Sc:function(a,b){S.uniform1i(W(a),b)},Tc:function(a,b,c){if(2<=v.version)b&&S.uniform1iv(W(a),K,c>>2,b);else{if(288>=b)for(var d=Cd[b-1],f=0;f>2];else d=K.subarray(c>>2,c+4*b>>2);S.uniform1iv(W(a),d)}},Uc:function(a, +b,c){S.uniform2f(W(a),b,c)},Vc:function(a,b,c){if(2<=v.version)b&&S.uniform2fv(W(a),N,c>>2,2*b);else{if(144>=b)for(var d=Bd[2*b-1],f=0;f<2*b;f+=2)d[f]=N[c+4*f>>2],d[f+1]=N[c+(4*f+4)>>2];else d=N.subarray(c>>2,c+8*b>>2);S.uniform2fv(W(a),d)}},Rc:function(a,b,c){S.uniform2i(W(a),b,c)},Qc:function(a,b,c){if(2<=v.version)b&&S.uniform2iv(W(a),K,c>>2,2*b);else{if(144>=b)for(var d=Cd[2*b-1],f=0;f<2*b;f+=2)d[f]=K[c+4*f>>2],d[f+1]=K[c+(4*f+4)>>2];else d=K.subarray(c>>2,c+8*b>>2);S.uniform2iv(W(a),d)}},Pc:function(a, +b,c,d){S.uniform3f(W(a),b,c,d)},Oc:function(a,b,c){if(2<=v.version)b&&S.uniform3fv(W(a),N,c>>2,3*b);else{if(96>=b)for(var d=Bd[3*b-1],f=0;f<3*b;f+=3)d[f]=N[c+4*f>>2],d[f+1]=N[c+(4*f+4)>>2],d[f+2]=N[c+(4*f+8)>>2];else d=N.subarray(c>>2,c+12*b>>2);S.uniform3fv(W(a),d)}},Nc:function(a,b,c,d){S.uniform3i(W(a),b,c,d)},Mc:function(a,b,c){if(2<=v.version)b&&S.uniform3iv(W(a),K,c>>2,3*b);else{if(96>=b)for(var d=Cd[3*b-1],f=0;f<3*b;f+=3)d[f]=K[c+4*f>>2],d[f+1]=K[c+(4*f+4)>>2],d[f+2]=K[c+(4*f+8)>>2];else d= +K.subarray(c>>2,c+12*b>>2);S.uniform3iv(W(a),d)}},Lc:function(a,b,c,d,f){S.uniform4f(W(a),b,c,d,f)},Kc:function(a,b,c){if(2<=v.version)b&&S.uniform4fv(W(a),N,c>>2,4*b);else{if(72>=b){var d=Bd[4*b-1],f=N;c>>=2;for(var k=0;k<4*b;k+=4){var l=c+k;d[k]=f[l];d[k+1]=f[l+1];d[k+2]=f[l+2];d[k+3]=f[l+3]}}else d=N.subarray(c>>2,c+16*b>>2);S.uniform4fv(W(a),d)}},yc:function(a,b,c,d,f){S.uniform4i(W(a),b,c,d,f)},zc:function(a,b,c){if(2<=v.version)b&&S.uniform4iv(W(a),K,c>>2,4*b);else{if(72>=b)for(var d=Cd[4*b- +1],f=0;f<4*b;f+=4)d[f]=K[c+4*f>>2],d[f+1]=K[c+(4*f+4)>>2],d[f+2]=K[c+(4*f+8)>>2],d[f+3]=K[c+(4*f+12)>>2];else d=K.subarray(c>>2,c+16*b>>2);S.uniform4iv(W(a),d)}},Ac:function(a,b,c,d){if(2<=v.version)b&&S.uniformMatrix2fv(W(a),!!c,N,d>>2,4*b);else{if(72>=b)for(var f=Bd[4*b-1],k=0;k<4*b;k+=4)f[k]=N[d+4*k>>2],f[k+1]=N[d+(4*k+4)>>2],f[k+2]=N[d+(4*k+8)>>2],f[k+3]=N[d+(4*k+12)>>2];else f=N.subarray(d>>2,d+16*b>>2);S.uniformMatrix2fv(W(a),!!c,f)}},Bc:function(a,b,c,d){if(2<=v.version)b&&S.uniformMatrix3fv(W(a), +!!c,N,d>>2,9*b);else{if(32>=b)for(var f=Bd[9*b-1],k=0;k<9*b;k+=9)f[k]=N[d+4*k>>2],f[k+1]=N[d+(4*k+4)>>2],f[k+2]=N[d+(4*k+8)>>2],f[k+3]=N[d+(4*k+12)>>2],f[k+4]=N[d+(4*k+16)>>2],f[k+5]=N[d+(4*k+20)>>2],f[k+6]=N[d+(4*k+24)>>2],f[k+7]=N[d+(4*k+28)>>2],f[k+8]=N[d+(4*k+32)>>2];else f=N.subarray(d>>2,d+36*b>>2);S.uniformMatrix3fv(W(a),!!c,f)}},Cc:function(a,b,c,d){if(2<=v.version)b&&S.uniformMatrix4fv(W(a),!!c,N,d>>2,16*b);else{if(18>=b){var f=Bd[16*b-1],k=N;d>>=2;for(var l=0;l<16*b;l+=16){var m=d+l;f[l]= +k[m];f[l+1]=k[m+1];f[l+2]=k[m+2];f[l+3]=k[m+3];f[l+4]=k[m+4];f[l+5]=k[m+5];f[l+6]=k[m+6];f[l+7]=k[m+7];f[l+8]=k[m+8];f[l+9]=k[m+9];f[l+10]=k[m+10];f[l+11]=k[m+11];f[l+12]=k[m+12];f[l+13]=k[m+13];f[l+14]=k[m+14];f[l+15]=k[m+15]}}else f=N.subarray(d>>2,d+64*b>>2);S.uniformMatrix4fv(W(a),!!c,f)}},Dc:function(a){a=Xc[a];S.useProgram(a);S.We=a},Ec:function(a,b){S.vertexAttrib1f(a,b)},Fc:function(a,b){S.vertexAttrib2f(a,N[b>>2],N[b+4>>2])},Gc:function(a,b){S.vertexAttrib3f(a,N[b>>2],N[b+4>>2],N[b+8>>2])}, +Hc:function(a,b){S.vertexAttrib4f(a,N[b>>2],N[b+4>>2],N[b+8>>2],N[b+12>>2])},ic:function(a,b){S.vertexAttribDivisor(a,b)},jc:function(a,b,c,d,f){S.vertexAttribIPointer(a,b,c,d,f)},Ic:function(a,b,c,d,f,k){S.vertexAttribPointer(a,b,c,!!d,f,k)},Jc:function(a,b,c,d){S.viewport(a,b,c,d)},lb:function(a,b,c,d){S.waitSync(cd[a],b,(c>>>0)+4294967296*d)},o:Nd,n:Od,k:Pd,O:Qd,Z:Rd,Y:Sd,x:Td,y:Ud,p:Vd,w:Wd,Eb:Xd,Fb:Yd,Gb:Zd,nb:(a,b,c,d)=>Hd(a,b,c,d)}; +(function(){function a(c){G=c=c.exports;Fa=G.ad;La();Na=G.cd;Pa.unshift(G.bd);Ua--;r.monitorRunDependencies&&r.monitorRunDependencies(Ua);if(0==Ua&&(null!==Va&&(clearInterval(Va),Va=null),Wa)){var d=Wa;Wa=null;d()}return c}var b={a:$d};Ua++;r.monitorRunDependencies&&r.monitorRunDependencies(Ua);if(r.instantiateWasm)try{return r.instantiateWasm(b,a)}catch(c){Ca("Module.instantiateWasm callback failed with error: "+c),ba(c)}cb(b,function(c){a(c.instance)}).catch(ba);return{}})(); +var qc=r._free=a=>(qc=r._free=G.dd)(a),wd=r._malloc=a=>(wd=r._malloc=G.ed)(a),pc=a=>(pc=G.fd)(a);r.__embind_initialize_bindings=()=>(r.__embind_initialize_bindings=G.gd)();var ae=(a,b)=>(ae=G.hd)(a,b),be=()=>(be=G.id)(),ce=a=>(ce=G.jd)(a);r.dynCall_viji=(a,b,c,d,f)=>(r.dynCall_viji=G.ld)(a,b,c,d,f);r.dynCall_vijiii=(a,b,c,d,f,k,l)=>(r.dynCall_vijiii=G.md)(a,b,c,d,f,k,l);r.dynCall_viiiiij=(a,b,c,d,f,k,l,m)=>(r.dynCall_viiiiij=G.nd)(a,b,c,d,f,k,l,m); +r.dynCall_iiiji=(a,b,c,d,f,k)=>(r.dynCall_iiiji=G.od)(a,b,c,d,f,k);r.dynCall_jii=(a,b,c)=>(r.dynCall_jii=G.pd)(a,b,c);r.dynCall_vij=(a,b,c,d)=>(r.dynCall_vij=G.qd)(a,b,c,d);r.dynCall_iiij=(a,b,c,d,f)=>(r.dynCall_iiij=G.rd)(a,b,c,d,f);r.dynCall_iiiij=(a,b,c,d,f,k)=>(r.dynCall_iiiij=G.sd)(a,b,c,d,f,k);r.dynCall_viij=(a,b,c,d,f)=>(r.dynCall_viij=G.td)(a,b,c,d,f);r.dynCall_viiij=(a,b,c,d,f,k)=>(r.dynCall_viiij=G.ud)(a,b,c,d,f,k);r.dynCall_ji=(a,b)=>(r.dynCall_ji=G.vd)(a,b); +r.dynCall_iij=(a,b,c,d)=>(r.dynCall_iij=G.wd)(a,b,c,d);r.dynCall_jiiiiii=(a,b,c,d,f,k,l)=>(r.dynCall_jiiiiii=G.xd)(a,b,c,d,f,k,l);r.dynCall_jiiiiji=(a,b,c,d,f,k,l,m)=>(r.dynCall_jiiiiji=G.yd)(a,b,c,d,f,k,l,m);r.dynCall_iijj=(a,b,c,d,f,k)=>(r.dynCall_iijj=G.zd)(a,b,c,d,f,k);r.dynCall_iiji=(a,b,c,d,f)=>(r.dynCall_iiji=G.Ad)(a,b,c,d,f);r.dynCall_iijjiii=(a,b,c,d,f,k,l,m,p)=>(r.dynCall_iijjiii=G.Bd)(a,b,c,d,f,k,l,m,p); +r.dynCall_vijjjii=(a,b,c,d,f,k,l,m,p,w)=>(r.dynCall_vijjjii=G.Cd)(a,b,c,d,f,k,l,m,p,w);r.dynCall_jiji=(a,b,c,d,f)=>(r.dynCall_jiji=G.Dd)(a,b,c,d,f);r.dynCall_viijii=(a,b,c,d,f,k,l)=>(r.dynCall_viijii=G.Ed)(a,b,c,d,f,k,l);r.dynCall_iiiiij=(a,b,c,d,f,k,l)=>(r.dynCall_iiiiij=G.Fd)(a,b,c,d,f,k,l);r.dynCall_iiiiijj=(a,b,c,d,f,k,l,m,p)=>(r.dynCall_iiiiijj=G.Gd)(a,b,c,d,f,k,l,m,p);r.dynCall_iiiiiijj=(a,b,c,d,f,k,l,m,p,w)=>(r.dynCall_iiiiiijj=G.Hd)(a,b,c,d,f,k,l,m,p,w); +function Wd(a,b,c,d,f){var k=be();try{Na.get(a)(b,c,d,f)}catch(l){ce(k);if(l!==l+0)throw l;ae(1,0)}}function Od(a,b,c){var d=be();try{return Na.get(a)(b,c)}catch(f){ce(d);if(f!==f+0)throw f;ae(1,0)}}function Ud(a,b,c){var d=be();try{Na.get(a)(b,c)}catch(f){ce(d);if(f!==f+0)throw f;ae(1,0)}}function Nd(a,b){var c=be();try{return Na.get(a)(b)}catch(d){ce(c);if(d!==d+0)throw d;ae(1,0)}}function Td(a,b){var c=be();try{Na.get(a)(b)}catch(d){ce(c);if(d!==d+0)throw d;ae(1,0)}} +function Pd(a,b,c,d){var f=be();try{return Na.get(a)(b,c,d)}catch(k){ce(f);if(k!==k+0)throw k;ae(1,0)}}function Zd(a,b,c,d,f,k,l,m,p,w){var y=be();try{Na.get(a)(b,c,d,f,k,l,m,p,w)}catch(B){ce(y);if(B!==B+0)throw B;ae(1,0)}}function Vd(a,b,c,d){var f=be();try{Na.get(a)(b,c,d)}catch(k){ce(f);if(k!==k+0)throw k;ae(1,0)}}function Yd(a,b,c,d,f,k,l){var m=be();try{Na.get(a)(b,c,d,f,k,l)}catch(p){ce(m);if(p!==p+0)throw p;ae(1,0)}} +function Qd(a,b,c,d,f){var k=be();try{return Na.get(a)(b,c,d,f)}catch(l){ce(k);if(l!==l+0)throw l;ae(1,0)}}function Rd(a,b,c,d,f,k,l){var m=be();try{return Na.get(a)(b,c,d,f,k,l)}catch(p){ce(m);if(p!==p+0)throw p;ae(1,0)}}function Xd(a,b,c,d,f,k){var l=be();try{Na.get(a)(b,c,d,f,k)}catch(m){ce(l);if(m!==m+0)throw m;ae(1,0)}}function Sd(a,b,c,d,f,k,l,m,p,w){var y=be();try{return Na.get(a)(b,c,d,f,k,l,m,p,w)}catch(B){ce(y);if(B!==B+0)throw B;ae(1,0)}}var de;Wa=function ee(){de||fe();de||(Wa=ee)}; +function fe(){function a(){if(!de&&(de=!0,r.calledRun=!0,!Ga)){eb(Pa);aa(r);if(r.onRuntimeInitialized)r.onRuntimeInitialized();if(r.postRun)for("function"==typeof r.postRun&&(r.postRun=[r.postRun]);r.postRun.length;){var b=r.postRun.shift();Qa.unshift(b)}eb(Qa)}}if(!(0 CanvasKitInit); diff --git a/canvaskit/canvaskit.wasm b/canvaskit/canvaskit.wasm new file mode 100644 index 0000000000..0a2ad3a894 Binary files /dev/null and b/canvaskit/canvaskit.wasm differ diff --git a/canvaskit/chromium/canvaskit.js b/canvaskit/chromium/canvaskit.js new file mode 100644 index 0000000000..43e946e398 --- /dev/null +++ b/canvaskit/chromium/canvaskit.js @@ -0,0 +1,217 @@ + +var CanvasKitInit = (() => { + var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined; + if (typeof __filename !== 'undefined') _scriptDir = _scriptDir || __filename; + return ( +function(moduleArg = {}) { + +var r=moduleArg,aa,ba;r.ready=new Promise((a,b)=>{aa=a;ba=b}); +(function(a){a.Hd=a.Hd||[];a.Hd.push(function(){a.MakeSWCanvasSurface=function(b){var c=b,e="undefined"!==typeof OffscreenCanvas&&c instanceof OffscreenCanvas;if(!("undefined"!==typeof HTMLCanvasElement&&c instanceof HTMLCanvasElement||e||(c=document.getElementById(b),c)))throw"Canvas with id "+b+" was not found";if(b=a.MakeSurface(c.width,c.height))b.he=c;return b};a.MakeCanvasSurface||(a.MakeCanvasSurface=a.MakeSWCanvasSurface);a.MakeSurface=function(b,c){var e={width:b,height:c,colorType:a.ColorType.RGBA_8888, +alphaType:a.AlphaType.Unpremul,colorSpace:a.ColorSpace.SRGB},f=b*c*4,k=a._malloc(f);if(e=a.Surface._makeRasterDirect(e,k,4*b))e.he=null,e.Pe=b,e.Me=c,e.Ne=f,e.se=k,e.getCanvas().clear(a.TRANSPARENT);return e};a.MakeRasterDirectSurface=function(b,c,e){return a.Surface._makeRasterDirect(b,c.byteOffset,e)};a.Surface.prototype.flush=function(b){a.Ed(this.Dd);this._flush();if(this.he){var c=new Uint8ClampedArray(a.HEAPU8.buffer,this.se,this.Ne);c=new ImageData(c,this.Pe,this.Me);b?this.he.getContext("2d").putImageData(c, +0,0,b[0],b[1],b[2]-b[0],b[3]-b[1]):this.he.getContext("2d").putImageData(c,0,0)}};a.Surface.prototype.dispose=function(){this.se&&a._free(this.se);this.delete()};a.Ed=a.Ed||function(){};a.ie=a.ie||function(){return null}})})(r); +(function(a){a.Hd=a.Hd||[];a.Hd.push(function(){function b(m,q,w){return m&&m.hasOwnProperty(q)?m[q]:w}function c(m){var q=da(ea);ea[q]=m;return q}function e(m){return m.naturalHeight||m.videoHeight||m.displayHeight||m.height}function f(m){return m.naturalWidth||m.videoWidth||m.displayWidth||m.width}function k(m,q,w,y){m.bindTexture(m.TEXTURE_2D,q);y||w.alphaType!==a.AlphaType.Premul||m.pixelStorei(m.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0);return q}function l(m,q,w){w||q.alphaType!==a.AlphaType.Premul|| +m.pixelStorei(m.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!1);m.bindTexture(m.TEXTURE_2D,null)}a.GetWebGLContext=function(m,q){if(!m)throw"null canvas passed into makeWebGLContext";var w={alpha:b(q,"alpha",1),depth:b(q,"depth",1),stencil:b(q,"stencil",8),antialias:b(q,"antialias",0),premultipliedAlpha:b(q,"premultipliedAlpha",1),preserveDrawingBuffer:b(q,"preserveDrawingBuffer",0),preferLowPowerToHighPerformance:b(q,"preferLowPowerToHighPerformance",0),failIfMajorPerformanceCaveat:b(q,"failIfMajorPerformanceCaveat", +0),enableExtensionsByDefault:b(q,"enableExtensionsByDefault",1),explicitSwapControl:b(q,"explicitSwapControl",0),renderViaOffscreenBackBuffer:b(q,"renderViaOffscreenBackBuffer",0)};w.majorVersion=q&&q.majorVersion?q.majorVersion:"undefined"!==typeof WebGL2RenderingContext?2:1;if(w.explicitSwapControl)throw"explicitSwapControl is not supported";m=fa(m,w);if(!m)return 0;ha(m);x.Pd.getExtension("WEBGL_debug_renderer_info");return m};a.deleteContext=function(m){x===ia[m]&&(x=null);"object"==typeof JSEvents&& +JSEvents.tf(ia[m].Pd.canvas);ia[m]&&ia[m].Pd.canvas&&(ia[m].Pd.canvas.Ke=void 0);ia[m]=null};a._setTextureCleanup({deleteTexture:function(m,q){var w=ea[q];w&&ia[m].Pd.deleteTexture(w);ea[q]=null}});a.MakeWebGLContext=function(m){if(!this.Ed(m))return null;var q=this._MakeGrContext();if(!q)return null;q.Dd=m;var w=q.delete.bind(q);q["delete"]=function(){a.Ed(this.Dd);w()}.bind(q);return x.ue=q};a.MakeGrContext=a.MakeWebGLContext;a.GrDirectContext.prototype.getResourceCacheLimitBytes=function(){a.Ed(this.Dd); +this._getResourceCacheLimitBytes()};a.GrDirectContext.prototype.getResourceCacheUsageBytes=function(){a.Ed(this.Dd);this._getResourceCacheUsageBytes()};a.GrDirectContext.prototype.releaseResourcesAndAbandonContext=function(){a.Ed(this.Dd);this._releaseResourcesAndAbandonContext()};a.GrDirectContext.prototype.setResourceCacheLimitBytes=function(m){a.Ed(this.Dd);this._setResourceCacheLimitBytes(m)};a.MakeOnScreenGLSurface=function(m,q,w,y,B,D){if(!this.Ed(m.Dd))return null;q=void 0===B||void 0===D? +this._MakeOnScreenGLSurface(m,q,w,y):this._MakeOnScreenGLSurface(m,q,w,y,B,D);if(!q)return null;q.Dd=m.Dd;return q};a.MakeRenderTarget=function(){var m=arguments[0];if(!this.Ed(m.Dd))return null;if(3===arguments.length){var q=this._MakeRenderTargetWH(m,arguments[1],arguments[2]);if(!q)return null}else if(2===arguments.length){if(q=this._MakeRenderTargetII(m,arguments[1]),!q)return null}else return null;q.Dd=m.Dd;return q};a.MakeWebGLCanvasSurface=function(m,q,w){q=q||null;var y=m,B="undefined"!== +typeof OffscreenCanvas&&y instanceof OffscreenCanvas;if(!("undefined"!==typeof HTMLCanvasElement&&y instanceof HTMLCanvasElement||B||(y=document.getElementById(m),y)))throw"Canvas with id "+m+" was not found";m=this.GetWebGLContext(y,w);if(!m||0>m)throw"failed to create webgl context: err "+m;m=this.MakeWebGLContext(m);q=this.MakeOnScreenGLSurface(m,y.width,y.height,q);return q?q:(q=y.cloneNode(!0),y.parentNode.replaceChild(q,y),q.classList.add("ck-replaced"),a.MakeSWCanvasSurface(q))};a.MakeCanvasSurface= +a.MakeWebGLCanvasSurface;a.Surface.prototype.makeImageFromTexture=function(m,q){a.Ed(this.Dd);m=c(m);if(q=this._makeImageFromTexture(this.Dd,m,q))q.ce=m;return q};a.Surface.prototype.makeImageFromTextureSource=function(m,q,w){q||(q={height:e(m),width:f(m),colorType:a.ColorType.RGBA_8888,alphaType:w?a.AlphaType.Premul:a.AlphaType.Unpremul});q.colorSpace||(q.colorSpace=a.ColorSpace.SRGB);a.Ed(this.Dd);var y=x.Pd;w=k(y,y.createTexture(),q,w);2===x.version?y.texImage2D(y.TEXTURE_2D,0,y.RGBA,q.width,q.height, +0,y.RGBA,y.UNSIGNED_BYTE,m):y.texImage2D(y.TEXTURE_2D,0,y.RGBA,y.RGBA,y.UNSIGNED_BYTE,m);l(y,q);this._resetContext();return this.makeImageFromTexture(w,q)};a.Surface.prototype.updateTextureFromSource=function(m,q,w){if(m.ce){a.Ed(this.Dd);var y=m.getImageInfo(),B=x.Pd,D=k(B,ea[m.ce],y,w);2===x.version?B.texImage2D(B.TEXTURE_2D,0,B.RGBA,f(q),e(q),0,B.RGBA,B.UNSIGNED_BYTE,q):B.texImage2D(B.TEXTURE_2D,0,B.RGBA,B.RGBA,B.UNSIGNED_BYTE,q);l(B,y,w);this._resetContext();ea[m.ce]=null;m.ce=c(D);y.colorSpace= +m.getColorSpace();q=this._makeImageFromTexture(this.Dd,m.ce,y);w=m.jd.Fd;B=m.jd.Kd;m.jd.Fd=q.jd.Fd;m.jd.Kd=q.jd.Kd;q.jd.Fd=w;q.jd.Kd=B;q.delete();y.colorSpace.delete()}};a.MakeLazyImageFromTextureSource=function(m,q,w){q||(q={height:e(m),width:f(m),colorType:a.ColorType.RGBA_8888,alphaType:w?a.AlphaType.Premul:a.AlphaType.Unpremul});q.colorSpace||(q.colorSpace=a.ColorSpace.SRGB);var y={makeTexture:function(){var B=x,D=B.Pd,u=k(D,D.createTexture(),q,w);2===B.version?D.texImage2D(D.TEXTURE_2D,0,D.RGBA, +q.width,q.height,0,D.RGBA,D.UNSIGNED_BYTE,m):D.texImage2D(D.TEXTURE_2D,0,D.RGBA,D.RGBA,D.UNSIGNED_BYTE,m);l(D,q,w);return c(u)},freeSrc:function(){}};"VideoFrame"===m.constructor.name&&(y.freeSrc=function(){m.close()});return a.Image._makeFromGenerator(q,y)};a.Ed=function(m){return m?ha(m):!1};a.ie=function(){return x&&x.ue&&!x.ue.isDeleted()?x.ue:null}})})(r); +(function(a){function b(g){return(f(255*g[3])<<24|f(255*g[0])<<16|f(255*g[1])<<8|f(255*g[2])<<0)>>>0}function c(g){if(g&&g._ck)return g;if(g instanceof Float32Array){for(var d=Math.floor(g.length/4),h=new Uint32Array(d),n=0;nz;z++)a.HEAPF32[t+n]=g[v][z],n++;g=h}else g=M;d.Md=g}else throw"Invalid argument to copyFlexibleColorArray, Not a color array "+typeof g;return d}function q(g){if(!g)return M;var d=T.toTypedArray();if(g.length){if(6===g.length||9===g.length)return l(g,"HEAPF32",H),6===g.length&&a.HEAPF32.set(fd,6+H/4),H;if(16===g.length)return d[0]=g[0],d[1]=g[1],d[2]=g[3],d[3]=g[4],d[4]=g[5],d[5]=g[7],d[6]=g[12],d[7]=g[13],d[8]=g[15],H;throw"invalid matrix size"; +}if(void 0===g.m11)throw"invalid matrix argument";d[0]=g.m11;d[1]=g.m21;d[2]=g.m41;d[3]=g.m12;d[4]=g.m22;d[5]=g.m42;d[6]=g.m14;d[7]=g.m24;d[8]=g.m44;return H}function w(g){if(!g)return M;var d=Y.toTypedArray();if(g.length){if(16!==g.length&&6!==g.length&&9!==g.length)throw"invalid matrix size";if(16===g.length)return l(g,"HEAPF32",ca);d.fill(0);d[0]=g[0];d[1]=g[1];d[3]=g[2];d[4]=g[3];d[5]=g[4];d[7]=g[5];d[10]=1;d[12]=g[6];d[13]=g[7];d[15]=g[8];6===g.length&&(d[12]=0,d[13]=0,d[15]=1);return ca}if(void 0=== +g.m11)throw"invalid matrix argument";d[0]=g.m11;d[1]=g.m21;d[2]=g.m31;d[3]=g.m41;d[4]=g.m12;d[5]=g.m22;d[6]=g.m32;d[7]=g.m42;d[8]=g.m13;d[9]=g.m23;d[10]=g.m33;d[11]=g.m43;d[12]=g.m14;d[13]=g.m24;d[14]=g.m34;d[15]=g.m44;return ca}function y(g,d){return l(g,"HEAPF32",d||va)}function B(g,d,h,n){var t=Ma.toTypedArray();t[0]=g;t[1]=d;t[2]=h;t[3]=n;return va}function D(g){for(var d=new Float32Array(4),h=0;4>h;h++)d[h]=a.HEAPF32[g/4+h];return d}function u(g,d){return l(g,"HEAPF32",d||X)}function F(g,d){return l(g, +"HEAPF32",d||Eb)}a.Color=function(g,d,h,n){void 0===n&&(n=1);return a.Color4f(f(g)/255,f(d)/255,f(h)/255,n)};a.ColorAsInt=function(g,d,h,n){void 0===n&&(n=255);return(f(n)<<24|f(g)<<16|f(d)<<8|f(h)<<0&268435455)>>>0};a.Color4f=function(g,d,h,n){void 0===n&&(n=1);return Float32Array.of(g,d,h,n)};Object.defineProperty(a,"TRANSPARENT",{get:function(){return a.Color4f(0,0,0,0)}});Object.defineProperty(a,"BLACK",{get:function(){return a.Color4f(0,0,0,1)}});Object.defineProperty(a,"WHITE",{get:function(){return a.Color4f(1, +1,1,1)}});Object.defineProperty(a,"RED",{get:function(){return a.Color4f(1,0,0,1)}});Object.defineProperty(a,"GREEN",{get:function(){return a.Color4f(0,1,0,1)}});Object.defineProperty(a,"BLUE",{get:function(){return a.Color4f(0,0,1,1)}});Object.defineProperty(a,"YELLOW",{get:function(){return a.Color4f(1,1,0,1)}});Object.defineProperty(a,"CYAN",{get:function(){return a.Color4f(0,1,1,1)}});Object.defineProperty(a,"MAGENTA",{get:function(){return a.Color4f(1,0,1,1)}});a.getColorComponents=function(g){return[Math.floor(255* +g[0]),Math.floor(255*g[1]),Math.floor(255*g[2]),g[3]]};a.parseColorString=function(g,d){g=g.toLowerCase();if(g.startsWith("#")){d=255;switch(g.length){case 9:d=parseInt(g.slice(7,9),16);case 7:var h=parseInt(g.slice(1,3),16);var n=parseInt(g.slice(3,5),16);var t=parseInt(g.slice(5,7),16);break;case 5:d=17*parseInt(g.slice(4,5),16);case 4:h=17*parseInt(g.slice(1,2),16),n=17*parseInt(g.slice(2,3),16),t=17*parseInt(g.slice(3,4),16)}return a.Color(h,n,t,d/255)}return g.startsWith("rgba")?(g=g.slice(5, +-1),g=g.split(","),a.Color(+g[0],+g[1],+g[2],e(g[3]))):g.startsWith("rgb")?(g=g.slice(4,-1),g=g.split(","),a.Color(+g[0],+g[1],+g[2],e(g[3]))):g.startsWith("gray(")||g.startsWith("hsl")||!d||(g=d[g],void 0===g)?a.BLACK:g};a.multiplyByAlpha=function(g,d){g=g.slice();g[3]=Math.max(0,Math.min(g[3]*d,1));return g};a.Malloc=function(g,d){var h=a._malloc(d*g.BYTES_PER_ELEMENT);return{_ck:!0,length:d,byteOffset:h,Xd:null,subarray:function(n,t){n=this.toTypedArray().subarray(n,t);n._ck=!0;return n},toTypedArray:function(){if(this.Xd&& +this.Xd.length)return this.Xd;this.Xd=new g(a.HEAPU8.buffer,h,d);this.Xd._ck=!0;return this.Xd}}};a.Free=function(g){a._free(g.byteOffset);g.byteOffset=M;g.toTypedArray=null;g.Xd=null};var H=M,T,ca=M,Y,va=M,Ma,na,X=M,fc,Ba=M,gc,Fb=M,hc,Gb=M,hb,Sa=M,ic,Eb=M,jc,kc=M,fd=Float32Array.of(0,0,1),M=0;a.onRuntimeInitialized=function(){function g(d,h,n,t,v,z,E){z||(z=4*t.width,t.colorType===a.ColorType.RGBA_F16?z*=2:t.colorType===a.ColorType.RGBA_F32&&(z*=4));var J=z*t.height;var I=v?v.byteOffset:a._malloc(J); +if(E?!d._readPixels(t,I,z,h,n,E):!d._readPixels(t,I,z,h,n))return v||a._free(I),null;if(v)return v.toTypedArray();switch(t.colorType){case a.ColorType.RGBA_8888:case a.ColorType.RGBA_F16:d=(new Uint8Array(a.HEAPU8.buffer,I,J)).slice();break;case a.ColorType.RGBA_F32:d=(new Float32Array(a.HEAPU8.buffer,I,J)).slice();break;default:return null}a._free(I);return d}Ma=a.Malloc(Float32Array,4);va=Ma.byteOffset;Y=a.Malloc(Float32Array,16);ca=Y.byteOffset;T=a.Malloc(Float32Array,9);H=T.byteOffset;ic=a.Malloc(Float32Array, +12);Eb=ic.byteOffset;jc=a.Malloc(Float32Array,12);kc=jc.byteOffset;na=a.Malloc(Float32Array,4);X=na.byteOffset;fc=a.Malloc(Float32Array,4);Ba=fc.byteOffset;gc=a.Malloc(Float32Array,3);Fb=gc.byteOffset;hc=a.Malloc(Float32Array,3);Gb=hc.byteOffset;hb=a.Malloc(Int32Array,4);Sa=hb.byteOffset;a.ColorSpace.SRGB=a.ColorSpace._MakeSRGB();a.ColorSpace.DISPLAY_P3=a.ColorSpace._MakeDisplayP3();a.ColorSpace.ADOBE_RGB=a.ColorSpace._MakeAdobeRGB();a.GlyphRunFlags={IsWhiteSpace:a._GlyphRunFlags_isWhiteSpace};a.Path.MakeFromCmds= +function(d){var h=l(d,"HEAPF32"),n=a.Path._MakeFromCmds(h,d.length);k(h,d);return n};a.Path.MakeFromVerbsPointsWeights=function(d,h,n){var t=l(d,"HEAPU8"),v=l(h,"HEAPF32"),z=l(n,"HEAPF32"),E=a.Path._MakeFromVerbsPointsWeights(t,d.length,v,h.length,z,n&&n.length||0);k(t,d);k(v,h);k(z,n);return E};a.Path.prototype.addArc=function(d,h,n){d=u(d);this._addArc(d,h,n);return this};a.Path.prototype.addCircle=function(d,h,n,t){this._addCircle(d,h,n,!!t);return this};a.Path.prototype.addOval=function(d,h,n){void 0=== +n&&(n=1);d=u(d);this._addOval(d,!!h,n);return this};a.Path.prototype.addPath=function(){var d=Array.prototype.slice.call(arguments),h=d[0],n=!1;"boolean"===typeof d[d.length-1]&&(n=d.pop());if(1===d.length)this._addPath(h,1,0,0,0,1,0,0,0,1,n);else if(2===d.length)d=d[1],this._addPath(h,d[0],d[1],d[2],d[3],d[4],d[5],d[6]||0,d[7]||0,d[8]||1,n);else if(7===d.length||10===d.length)this._addPath(h,d[1],d[2],d[3],d[4],d[5],d[6],d[7]||0,d[8]||0,d[9]||1,n);else return null;return this};a.Path.prototype.addPoly= +function(d,h){var n=l(d,"HEAPF32");this._addPoly(n,d.length/2,h);k(n,d);return this};a.Path.prototype.addRect=function(d,h){d=u(d);this._addRect(d,!!h);return this};a.Path.prototype.addRRect=function(d,h){d=F(d);this._addRRect(d,!!h);return this};a.Path.prototype.addVerbsPointsWeights=function(d,h,n){var t=l(d,"HEAPU8"),v=l(h,"HEAPF32"),z=l(n,"HEAPF32");this._addVerbsPointsWeights(t,d.length,v,h.length,z,n&&n.length||0);k(t,d);k(v,h);k(z,n)};a.Path.prototype.arc=function(d,h,n,t,v,z){d=a.LTRBRect(d- +n,h-n,d+n,h+n);v=(v-t)/Math.PI*180-360*!!z;z=new a.Path;z.addArc(d,t/Math.PI*180,v);this.addPath(z,!0);z.delete();return this};a.Path.prototype.arcToOval=function(d,h,n,t){d=u(d);this._arcToOval(d,h,n,t);return this};a.Path.prototype.arcToRotated=function(d,h,n,t,v,z,E){this._arcToRotated(d,h,n,!!t,!!v,z,E);return this};a.Path.prototype.arcToTangent=function(d,h,n,t,v){this._arcToTangent(d,h,n,t,v);return this};a.Path.prototype.close=function(){this._close();return this};a.Path.prototype.conicTo= +function(d,h,n,t,v){this._conicTo(d,h,n,t,v);return this};a.Path.prototype.computeTightBounds=function(d){this._computeTightBounds(X);var h=na.toTypedArray();return d?(d.set(h),d):h.slice()};a.Path.prototype.cubicTo=function(d,h,n,t,v,z){this._cubicTo(d,h,n,t,v,z);return this};a.Path.prototype.dash=function(d,h,n){return this._dash(d,h,n)?this:null};a.Path.prototype.getBounds=function(d){this._getBounds(X);var h=na.toTypedArray();return d?(d.set(h),d):h.slice()};a.Path.prototype.lineTo=function(d, +h){this._lineTo(d,h);return this};a.Path.prototype.moveTo=function(d,h){this._moveTo(d,h);return this};a.Path.prototype.offset=function(d,h){this._transform(1,0,d,0,1,h,0,0,1);return this};a.Path.prototype.quadTo=function(d,h,n,t){this._quadTo(d,h,n,t);return this};a.Path.prototype.rArcTo=function(d,h,n,t,v,z,E){this._rArcTo(d,h,n,t,v,z,E);return this};a.Path.prototype.rConicTo=function(d,h,n,t,v){this._rConicTo(d,h,n,t,v);return this};a.Path.prototype.rCubicTo=function(d,h,n,t,v,z){this._rCubicTo(d, +h,n,t,v,z);return this};a.Path.prototype.rLineTo=function(d,h){this._rLineTo(d,h);return this};a.Path.prototype.rMoveTo=function(d,h){this._rMoveTo(d,h);return this};a.Path.prototype.rQuadTo=function(d,h,n,t){this._rQuadTo(d,h,n,t);return this};a.Path.prototype.stroke=function(d){d=d||{};d.width=d.width||1;d.miter_limit=d.miter_limit||4;d.cap=d.cap||a.StrokeCap.Butt;d.join=d.join||a.StrokeJoin.Miter;d.precision=d.precision||1;return this._stroke(d)?this:null};a.Path.prototype.transform=function(){if(1=== +arguments.length){var d=arguments[0];this._transform(d[0],d[1],d[2],d[3],d[4],d[5],d[6]||0,d[7]||0,d[8]||1)}else if(6===arguments.length||9===arguments.length)d=arguments,this._transform(d[0],d[1],d[2],d[3],d[4],d[5],d[6]||0,d[7]||0,d[8]||1);else throw"transform expected to take 1 or 9 arguments. Got "+arguments.length;return this};a.Path.prototype.trim=function(d,h,n){return this._trim(d,h,!!n)?this:null};a.Image.prototype.encodeToBytes=function(d,h){var n=a.ie();d=d||a.ImageFormat.PNG;h=h||100; +return n?this._encodeToBytes(d,h,n):this._encodeToBytes(d,h)};a.Image.prototype.makeShaderCubic=function(d,h,n,t,v){v=q(v);return this._makeShaderCubic(d,h,n,t,v)};a.Image.prototype.makeShaderOptions=function(d,h,n,t,v){v=q(v);return this._makeShaderOptions(d,h,n,t,v)};a.Image.prototype.readPixels=function(d,h,n,t,v){var z=a.ie();return g(this,d,h,n,t,v,z)};a.Canvas.prototype.clear=function(d){a.Ed(this.Dd);d=y(d);this._clear(d)};a.Canvas.prototype.clipRRect=function(d,h,n){a.Ed(this.Dd);d=F(d);this._clipRRect(d, +h,n)};a.Canvas.prototype.clipRect=function(d,h,n){a.Ed(this.Dd);d=u(d);this._clipRect(d,h,n)};a.Canvas.prototype.concat=function(d){a.Ed(this.Dd);d=w(d);this._concat(d)};a.Canvas.prototype.drawArc=function(d,h,n,t,v){a.Ed(this.Dd);d=u(d);this._drawArc(d,h,n,t,v)};a.Canvas.prototype.drawAtlas=function(d,h,n,t,v,z,E){if(d&&t&&h&&n&&h.length===n.length){a.Ed(this.Dd);v||(v=a.BlendMode.SrcOver);var J=l(h,"HEAPF32"),I=l(n,"HEAPF32"),U=n.length/4,V=l(c(z),"HEAPU32");if(E&&"B"in E&&"C"in E)this._drawAtlasCubic(d, +I,J,V,U,v,E.B,E.C,t);else{let p=a.FilterMode.Linear,A=a.MipmapMode.None;E&&(p=E.filter,"mipmap"in E&&(A=E.mipmap));this._drawAtlasOptions(d,I,J,V,U,v,p,A,t)}k(J,h);k(I,n);k(V,z)}};a.Canvas.prototype.drawCircle=function(d,h,n,t){a.Ed(this.Dd);this._drawCircle(d,h,n,t)};a.Canvas.prototype.drawColor=function(d,h){a.Ed(this.Dd);d=y(d);void 0!==h?this._drawColor(d,h):this._drawColor(d)};a.Canvas.prototype.drawColorInt=function(d,h){a.Ed(this.Dd);this._drawColorInt(d,h||a.BlendMode.SrcOver)};a.Canvas.prototype.drawColorComponents= +function(d,h,n,t,v){a.Ed(this.Dd);d=B(d,h,n,t);void 0!==v?this._drawColor(d,v):this._drawColor(d)};a.Canvas.prototype.drawDRRect=function(d,h,n){a.Ed(this.Dd);d=F(d,Eb);h=F(h,kc);this._drawDRRect(d,h,n)};a.Canvas.prototype.drawImage=function(d,h,n,t){a.Ed(this.Dd);this._drawImage(d,h,n,t||null)};a.Canvas.prototype.drawImageCubic=function(d,h,n,t,v,z){a.Ed(this.Dd);this._drawImageCubic(d,h,n,t,v,z||null)};a.Canvas.prototype.drawImageOptions=function(d,h,n,t,v,z){a.Ed(this.Dd);this._drawImageOptions(d, +h,n,t,v,z||null)};a.Canvas.prototype.drawImageNine=function(d,h,n,t,v){a.Ed(this.Dd);h=l(h,"HEAP32",Sa);n=u(n);this._drawImageNine(d,h,n,t,v||null)};a.Canvas.prototype.drawImageRect=function(d,h,n,t,v){a.Ed(this.Dd);u(h,X);u(n,Ba);this._drawImageRect(d,X,Ba,t,!!v)};a.Canvas.prototype.drawImageRectCubic=function(d,h,n,t,v,z){a.Ed(this.Dd);u(h,X);u(n,Ba);this._drawImageRectCubic(d,X,Ba,t,v,z||null)};a.Canvas.prototype.drawImageRectOptions=function(d,h,n,t,v,z){a.Ed(this.Dd);u(h,X);u(n,Ba);this._drawImageRectOptions(d, +X,Ba,t,v,z||null)};a.Canvas.prototype.drawLine=function(d,h,n,t,v){a.Ed(this.Dd);this._drawLine(d,h,n,t,v)};a.Canvas.prototype.drawOval=function(d,h){a.Ed(this.Dd);d=u(d);this._drawOval(d,h)};a.Canvas.prototype.drawPaint=function(d){a.Ed(this.Dd);this._drawPaint(d)};a.Canvas.prototype.drawParagraph=function(d,h,n){a.Ed(this.Dd);this._drawParagraph(d,h,n)};a.Canvas.prototype.drawPatch=function(d,h,n,t,v){if(24>d.length)throw"Need 12 cubic points";if(h&&4>h.length)throw"Need 4 colors";if(n&&8>n.length)throw"Need 4 shader coordinates"; +a.Ed(this.Dd);const z=l(d,"HEAPF32"),E=h?l(c(h),"HEAPU32"):M,J=n?l(n,"HEAPF32"):M;t||(t=a.BlendMode.Modulate);this._drawPatch(z,E,J,t,v);k(J,n);k(E,h);k(z,d)};a.Canvas.prototype.drawPath=function(d,h){a.Ed(this.Dd);this._drawPath(d,h)};a.Canvas.prototype.drawPicture=function(d){a.Ed(this.Dd);this._drawPicture(d)};a.Canvas.prototype.drawPoints=function(d,h,n){a.Ed(this.Dd);var t=l(h,"HEAPF32");this._drawPoints(d,t,h.length/2,n);k(t,h)};a.Canvas.prototype.drawRRect=function(d,h){a.Ed(this.Dd);d=F(d); +this._drawRRect(d,h)};a.Canvas.prototype.drawRect=function(d,h){a.Ed(this.Dd);d=u(d);this._drawRect(d,h)};a.Canvas.prototype.drawRect4f=function(d,h,n,t,v){a.Ed(this.Dd);this._drawRect4f(d,h,n,t,v)};a.Canvas.prototype.drawShadow=function(d,h,n,t,v,z,E){a.Ed(this.Dd);var J=l(v,"HEAPF32"),I=l(z,"HEAPF32");h=l(h,"HEAPF32",Fb);n=l(n,"HEAPF32",Gb);this._drawShadow(d,h,n,t,J,I,E);k(J,v);k(I,z)};a.getShadowLocalBounds=function(d,h,n,t,v,z,E){d=q(d);n=l(n,"HEAPF32",Fb);t=l(t,"HEAPF32",Gb);if(!this._getShadowLocalBounds(d, +h,n,t,v,z,X))return null;h=na.toTypedArray();return E?(E.set(h),E):h.slice()};a.Canvas.prototype.drawTextBlob=function(d,h,n,t){a.Ed(this.Dd);this._drawTextBlob(d,h,n,t)};a.Canvas.prototype.drawVertices=function(d,h,n){a.Ed(this.Dd);this._drawVertices(d,h,n)};a.Canvas.prototype.getDeviceClipBounds=function(d){this._getDeviceClipBounds(Sa);var h=hb.toTypedArray();d?d.set(h):d=h.slice();return d};a.Canvas.prototype.getLocalToDevice=function(){this._getLocalToDevice(ca);for(var d=ca,h=Array(16),n=0;16> +n;n++)h[n]=a.HEAPF32[d/4+n];return h};a.Canvas.prototype.getTotalMatrix=function(){this._getTotalMatrix(H);for(var d=Array(9),h=0;9>h;h++)d[h]=a.HEAPF32[H/4+h];return d};a.Canvas.prototype.makeSurface=function(d){d=this._makeSurface(d);d.Dd=this.Dd;return d};a.Canvas.prototype.readPixels=function(d,h,n,t,v){a.Ed(this.Dd);return g(this,d,h,n,t,v)};a.Canvas.prototype.saveLayer=function(d,h,n,t){h=u(h);return this._saveLayer(d||null,h,n||null,t||0)};a.Canvas.prototype.writePixels=function(d,h,n,t,v, +z,E,J){if(d.byteLength%(h*n))throw"pixels length must be a multiple of the srcWidth * srcHeight";a.Ed(this.Dd);var I=d.byteLength/(h*n);z=z||a.AlphaType.Unpremul;E=E||a.ColorType.RGBA_8888;J=J||a.ColorSpace.SRGB;var U=I*h;I=l(d,"HEAPU8");h=this._writePixels({width:h,height:n,colorType:E,alphaType:z,colorSpace:J},I,U,t,v);k(I,d);return h};a.ColorFilter.MakeBlend=function(d,h,n){d=y(d);n=n||a.ColorSpace.SRGB;return a.ColorFilter._MakeBlend(d,h,n)};a.ColorFilter.MakeMatrix=function(d){if(!d||20!==d.length)throw"invalid color matrix"; +var h=l(d,"HEAPF32"),n=a.ColorFilter._makeMatrix(h);k(h,d);return n};a.ContourMeasure.prototype.getPosTan=function(d,h){this._getPosTan(d,X);d=na.toTypedArray();return h?(h.set(d),h):d.slice()};a.ImageFilter.prototype.getOutputBounds=function(d,h,n){d=u(d,X);h=q(h);this._getOutputBounds(d,h,Sa);h=hb.toTypedArray();return n?(n.set(h),n):h.slice()};a.ImageFilter.MakeDropShadow=function(d,h,n,t,v,z){v=y(v,va);return a.ImageFilter._MakeDropShadow(d,h,n,t,v,z)};a.ImageFilter.MakeDropShadowOnly=function(d, +h,n,t,v,z){v=y(v,va);return a.ImageFilter._MakeDropShadowOnly(d,h,n,t,v,z)};a.ImageFilter.MakeImage=function(d,h,n,t){n=u(n,X);t=u(t,Ba);if("B"in h&&"C"in h)return a.ImageFilter._MakeImageCubic(d,h.B,h.C,n,t);const v=h.filter;let z=a.MipmapMode.None;"mipmap"in h&&(z=h.mipmap);return a.ImageFilter._MakeImageOptions(d,v,z,n,t)};a.ImageFilter.MakeMatrixTransform=function(d,h,n){d=q(d);if("B"in h&&"C"in h)return a.ImageFilter._MakeMatrixTransformCubic(d,h.B,h.C,n);const t=h.filter;let v=a.MipmapMode.None; +"mipmap"in h&&(v=h.mipmap);return a.ImageFilter._MakeMatrixTransformOptions(d,t,v,n)};a.Paint.prototype.getColor=function(){this._getColor(va);return D(va)};a.Paint.prototype.setColor=function(d,h){h=h||null;d=y(d);this._setColor(d,h)};a.Paint.prototype.setColorComponents=function(d,h,n,t,v){v=v||null;d=B(d,h,n,t);this._setColor(d,v)};a.Path.prototype.getPoint=function(d,h){this._getPoint(d,X);d=na.toTypedArray();return h?(h[0]=d[0],h[1]=d[1],h):d.slice(0,2)};a.Picture.prototype.makeShader=function(d, +h,n,t,v){t=q(t);v=u(v);return this._makeShader(d,h,n,t,v)};a.Picture.prototype.cullRect=function(d){this._cullRect(X);var h=na.toTypedArray();return d?(d.set(h),d):h.slice()};a.PictureRecorder.prototype.beginRecording=function(d,h){d=u(d);return this._beginRecording(d,!!h)};a.Surface.prototype.getCanvas=function(){var d=this._getCanvas();d.Dd=this.Dd;return d};a.Surface.prototype.makeImageSnapshot=function(d){a.Ed(this.Dd);d=l(d,"HEAP32",Sa);return this._makeImageSnapshot(d)};a.Surface.prototype.makeSurface= +function(d){a.Ed(this.Dd);d=this._makeSurface(d);d.Dd=this.Dd;return d};a.Surface.prototype.Oe=function(d,h){this.be||(this.be=this.getCanvas());return requestAnimationFrame(function(){a.Ed(this.Dd);d(this.be);this.flush(h)}.bind(this))};a.Surface.prototype.requestAnimationFrame||(a.Surface.prototype.requestAnimationFrame=a.Surface.prototype.Oe);a.Surface.prototype.Le=function(d,h){this.be||(this.be=this.getCanvas());requestAnimationFrame(function(){a.Ed(this.Dd);d(this.be);this.flush(h);this.dispose()}.bind(this))}; +a.Surface.prototype.drawOnce||(a.Surface.prototype.drawOnce=a.Surface.prototype.Le);a.PathEffect.MakeDash=function(d,h){h||(h=0);if(!d.length||1===d.length%2)throw"Intervals array must have even length";var n=l(d,"HEAPF32");h=a.PathEffect._MakeDash(n,d.length,h);k(n,d);return h};a.PathEffect.MakeLine2D=function(d,h){h=q(h);return a.PathEffect._MakeLine2D(d,h)};a.PathEffect.MakePath2D=function(d,h){d=q(d);return a.PathEffect._MakePath2D(d,h)};a.Shader.MakeColor=function(d,h){h=h||null;d=y(d);return a.Shader._MakeColor(d, +h)};a.Shader.Blend=a.Shader.MakeBlend;a.Shader.Color=a.Shader.MakeColor;a.Shader.MakeLinearGradient=function(d,h,n,t,v,z,E,J){J=J||null;var I=m(n),U=l(t,"HEAPF32");E=E||0;z=q(z);var V=na.toTypedArray();V.set(d);V.set(h,2);d=a.Shader._MakeLinearGradient(X,I.Md,I.colorType,U,I.count,v,E,z,J);k(I.Md,n);t&&k(U,t);return d};a.Shader.MakeRadialGradient=function(d,h,n,t,v,z,E,J){J=J||null;var I=m(n),U=l(t,"HEAPF32");E=E||0;z=q(z);d=a.Shader._MakeRadialGradient(d[0],d[1],h,I.Md,I.colorType,U,I.count,v,E, +z,J);k(I.Md,n);t&&k(U,t);return d};a.Shader.MakeSweepGradient=function(d,h,n,t,v,z,E,J,I,U){U=U||null;var V=m(n),p=l(t,"HEAPF32");E=E||0;J=J||0;I=I||360;z=q(z);d=a.Shader._MakeSweepGradient(d,h,V.Md,V.colorType,p,V.count,v,J,I,E,z,U);k(V.Md,n);t&&k(p,t);return d};a.Shader.MakeTwoPointConicalGradient=function(d,h,n,t,v,z,E,J,I,U){U=U||null;var V=m(v),p=l(z,"HEAPF32");I=I||0;J=q(J);var A=na.toTypedArray();A.set(d);A.set(n,2);d=a.Shader._MakeTwoPointConicalGradient(X,h,t,V.Md,V.colorType,p,V.count,E, +I,J,U);k(V.Md,v);z&&k(p,z);return d};a.Vertices.prototype.bounds=function(d){this._bounds(X);var h=na.toTypedArray();return d?(d.set(h),d):h.slice()};a.Hd&&a.Hd.forEach(function(d){d()})};a.computeTonalColors=function(g){var d=l(g.ambient,"HEAPF32"),h=l(g.spot,"HEAPF32");this._computeTonalColors(d,h);var n={ambient:D(d),spot:D(h)};k(d,g.ambient);k(h,g.spot);return n};a.LTRBRect=function(g,d,h,n){return Float32Array.of(g,d,h,n)};a.XYWHRect=function(g,d,h,n){return Float32Array.of(g,d,g+h,d+n)};a.LTRBiRect= +function(g,d,h,n){return Int32Array.of(g,d,h,n)};a.XYWHiRect=function(g,d,h,n){return Int32Array.of(g,d,g+h,d+n)};a.RRectXY=function(g,d,h){return Float32Array.of(g[0],g[1],g[2],g[3],d,h,d,h,d,h,d,h)};a.MakeAnimatedImageFromEncoded=function(g){g=new Uint8Array(g);var d=a._malloc(g.byteLength);a.HEAPU8.set(g,d);return(g=a._decodeAnimatedImage(d,g.byteLength))?g:null};a.MakeImageFromEncoded=function(g){g=new Uint8Array(g);var d=a._malloc(g.byteLength);a.HEAPU8.set(g,d);return(g=a._decodeImage(d,g.byteLength))? +g:null};var Ta=null;a.MakeImageFromCanvasImageSource=function(g){var d=g.width,h=g.height;Ta||(Ta=document.createElement("canvas"));Ta.width=d;Ta.height=h;var n=Ta.getContext("2d",{willReadFrequently:!0});n.drawImage(g,0,0);g=n.getImageData(0,0,d,h);return a.MakeImage({width:d,height:h,alphaType:a.AlphaType.Unpremul,colorType:a.ColorType.RGBA_8888,colorSpace:a.ColorSpace.SRGB},g.data,4*d)};a.MakeImage=function(g,d,h){var n=a._malloc(d.length);a.HEAPU8.set(d,n);return a._MakeImage(g,n,d.length,h)}; +a.MakeVertices=function(g,d,h,n,t,v){var z=t&&t.length||0,E=0;h&&h.length&&(E|=1);n&&n.length&&(E|=2);void 0===v||v||(E|=4);g=new a._VerticesBuilder(g,d.length/2,z,E);l(d,"HEAPF32",g.positions());g.texCoords()&&l(h,"HEAPF32",g.texCoords());g.colors()&&l(c(n),"HEAPU32",g.colors());g.indices()&&l(t,"HEAPU16",g.indices());return g.detach()};(function(g){g.Hd=g.Hd||[];g.Hd.push(function(){function d(p){p&&(p.dir=0===p.dir?g.TextDirection.RTL:g.TextDirection.LTR);return p}function h(p){if(!p||!p.length)return[]; +for(var A=[],O=0;Od)return a._free(g),null;t=new Uint16Array(a.HEAPU8.buffer,g,d);if(h)return h.set(t),a._free(g),h;h=Uint16Array.from(t);a._free(g);return h};a.Font.prototype.getGlyphIntercepts=function(g,d,h,n){var t=l(g,"HEAPU16"),v=l(d,"HEAPF32");return this._getGlyphIntercepts(t, +g.length,!(g&&g._ck),v,d.length,!(d&&d._ck),h,n)};a.Font.prototype.getGlyphWidths=function(g,d,h){var n=l(g,"HEAPU16"),t=a._malloc(4*g.length);this._getGlyphWidthBounds(n,g.length,t,M,d||null);d=new Float32Array(a.HEAPU8.buffer,t,g.length);k(n,g);if(h)return h.set(d),a._free(t),h;g=Float32Array.from(d);a._free(t);return g};a.FontMgr.FromData=function(){if(!arguments.length)return null;var g=arguments;1===g.length&&Array.isArray(g[0])&&(g=arguments[0]);if(!g.length)return null;for(var d=[],h=[],n= +0;nd)return a._free(g),null;t=new Uint16Array(a.HEAPU8.buffer,g,d);if(h)return h.set(t),a._free(g),h;h=Uint16Array.from(t);a._free(g);return h};a.TextBlob.MakeOnPath=function(g,d,h,n){if(g&&g.length&&d&&d.countPoints()){if(1===d.countPoints())return this.MakeFromText(g,h);n||(n=0);var t=h.getGlyphIDs(g);t=h.getGlyphWidths(t);var v=[];d=new a.ContourMeasureIter(d,!1,1);for(var z=d.next(),E=new Float32Array(4),J=0;Jz.length()){z.delete();z= +d.next();if(!z){g=g.substring(0,J);break}n=I/2}z.getPosTan(n,E);var U=E[2],V=E[3];v.push(U,V,E[0]-I/2*U,E[1]-I/2*V);n+=I/2}g=this.MakeFromRSXform(g,v,h);z&&z.delete();d.delete();return g}};a.TextBlob.MakeFromRSXform=function(g,d,h){var n=ja(g)+1,t=a._malloc(n);ka(g,C,t,n);g=l(d,"HEAPF32");h=a.TextBlob._MakeFromRSXform(t,n-1,g,h);a._free(t);return h?h:null};a.TextBlob.MakeFromRSXformGlyphs=function(g,d,h){var n=l(g,"HEAPU16");d=l(d,"HEAPF32");h=a.TextBlob._MakeFromRSXformGlyphs(n,2*g.length,d,h);k(n, +g);return h?h:null};a.TextBlob.MakeFromGlyphs=function(g,d){var h=l(g,"HEAPU16");d=a.TextBlob._MakeFromGlyphs(h,2*g.length,d);k(h,g);return d?d:null};a.TextBlob.MakeFromText=function(g,d){var h=ja(g)+1,n=a._malloc(h);ka(g,C,n,h);g=a.TextBlob._MakeFromText(n,h-1,d);a._free(n);return g?g:null};a.MallocGlyphIDs=function(g){return a.Malloc(Uint16Array,g)}});a.Hd=a.Hd||[];a.Hd.push(function(){a.MakePicture=function(g){g=new Uint8Array(g);var d=a._malloc(g.byteLength);a.HEAPU8.set(g,d);return(g=a._MakePicture(d, +g.byteLength))?g:null}});a.Hd=a.Hd||[];a.Hd.push(function(){a.RuntimeEffect.Make=function(g,d){return a.RuntimeEffect._Make(g,{onError:d||function(h){console.log("RuntimeEffect error",h)}})};a.RuntimeEffect.MakeForBlender=function(g,d){return a.RuntimeEffect._MakeForBlender(g,{onError:d||function(h){console.log("RuntimeEffect error",h)}})};a.RuntimeEffect.prototype.makeShader=function(g,d){var h=!g._ck,n=l(g,"HEAPF32");d=q(d);return this._makeShader(n,4*g.length,h,d)};a.RuntimeEffect.prototype.makeShaderWithChildren= +function(g,d,h){var n=!g._ck,t=l(g,"HEAPF32");h=q(h);for(var v=[],z=0;z{throw b;},pa="object"==typeof window,ra="function"==typeof importScripts,sa="object"==typeof process&&"object"==typeof process.versions&&"string"==typeof process.versions.node,ta="",ua,wa,xa; +if(sa){var fs=require("fs"),ya=require("path");ta=ra?ya.dirname(ta)+"/":__dirname+"/";ua=(a,b)=>{a=a.startsWith("file://")?new URL(a):ya.normalize(a);return fs.readFileSync(a,b?void 0:"utf8")};xa=a=>{a=ua(a,!0);a.buffer||(a=new Uint8Array(a));return a};wa=(a,b,c,e=!0)=>{a=a.startsWith("file://")?new URL(a):ya.normalize(a);fs.readFile(a,e?void 0:"utf8",(f,k)=>{f?c(f):b(e?k.buffer:k)})};!r.thisProgram&&1{process.exitCode= +a;throw b;};r.inspect=()=>"[Emscripten Module object]"}else if(pa||ra)ra?ta=self.location.href:"undefined"!=typeof document&&document.currentScript&&(ta=document.currentScript.src),_scriptDir&&(ta=_scriptDir),0!==ta.indexOf("blob:")?ta=ta.substr(0,ta.replace(/[?#].*/,"").lastIndexOf("/")+1):ta="",ua=a=>{var b=new XMLHttpRequest;b.open("GET",a,!1);b.send(null);return b.responseText},ra&&(xa=a=>{var b=new XMLHttpRequest;b.open("GET",a,!1);b.responseType="arraybuffer";b.send(null);return new Uint8Array(b.response)}), +wa=(a,b,c)=>{var e=new XMLHttpRequest;e.open("GET",a,!0);e.responseType="arraybuffer";e.onload=()=>{200==e.status||0==e.status&&e.response?b(e.response):c()};e.onerror=c;e.send(null)};var Aa=r.print||console.log.bind(console),Ca=r.printErr||console.error.bind(console);Object.assign(r,la);la=null;r.thisProgram&&(ma=r.thisProgram);r.quit&&(oa=r.quit);var Da;r.wasmBinary&&(Da=r.wasmBinary);var noExitRuntime=r.noExitRuntime||!0;"object"!=typeof WebAssembly&&Ea("no native wasm support detected"); +var Fa,G,Ga=!1,Ha,C,Ia,Ja,K,L,N,Ka;function La(){var a=Fa.buffer;r.HEAP8=Ha=new Int8Array(a);r.HEAP16=Ia=new Int16Array(a);r.HEAP32=K=new Int32Array(a);r.HEAPU8=C=new Uint8Array(a);r.HEAPU16=Ja=new Uint16Array(a);r.HEAPU32=L=new Uint32Array(a);r.HEAPF32=N=new Float32Array(a);r.HEAPF64=Ka=new Float64Array(a)}var Na,Oa=[],Pa=[],Qa=[];function Ra(){var a=r.preRun.shift();Oa.unshift(a)}var Ua=0,Va=null,Wa=null; +function Ea(a){if(r.onAbort)r.onAbort(a);a="Aborted("+a+")";Ca(a);Ga=!0;a=new WebAssembly.RuntimeError(a+". Build with -sASSERTIONS for more info.");ba(a);throw a;}function Xa(a){return a.startsWith("data:application/octet-stream;base64,")}var Ya;Ya="canvaskit.wasm";if(!Xa(Ya)){var Za=Ya;Ya=r.locateFile?r.locateFile(Za,ta):ta+Za}function $a(a){if(a==Ya&&Da)return new Uint8Array(Da);if(xa)return xa(a);throw"both async and sync fetching of the wasm failed";} +function ab(a){if(!Da&&(pa||ra)){if("function"==typeof fetch&&!a.startsWith("file://"))return fetch(a,{credentials:"same-origin"}).then(b=>{if(!b.ok)throw"failed to load wasm binary file at '"+a+"'";return b.arrayBuffer()}).catch(()=>$a(a));if(wa)return new Promise((b,c)=>{wa(a,e=>b(new Uint8Array(e)),c)})}return Promise.resolve().then(()=>$a(a))}function bb(a,b,c){return ab(a).then(e=>WebAssembly.instantiate(e,b)).then(e=>e).then(c,e=>{Ca("failed to asynchronously prepare wasm: "+e);Ea(e)})} +function cb(a,b){var c=Ya;return Da||"function"!=typeof WebAssembly.instantiateStreaming||Xa(c)||c.startsWith("file://")||sa||"function"!=typeof fetch?bb(c,a,b):fetch(c,{credentials:"same-origin"}).then(e=>WebAssembly.instantiateStreaming(e,a).then(b,function(f){Ca("wasm streaming compile failed: "+f);Ca("falling back to ArrayBuffer instantiation");return bb(c,a,b)}))}function db(a){this.name="ExitStatus";this.message=`Program terminated with exit(${a})`;this.status=a}var eb=a=>{for(;0>2]=b};this.re=function(b){L[this.Fd+8>>2]=b};this.Ud=function(b,c){this.qe();this.Je(b);this.re(c)};this.qe=function(){L[this.Fd+16>>2]=0}} +var gb=0,ib=0,jb="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0,kb=(a,b,c)=>{var e=b+c;for(c=b;a[c]&&!(c>=e);)++c;if(16f?e+=String.fromCharCode(f):(f-=65536,e+=String.fromCharCode(55296|f>>10,56320|f&1023))}}else e+=String.fromCharCode(f)}return e}, +lb={};function mb(a){for(;a.length;){var b=a.pop();a.pop()(b)}}function nb(a){return this.fromWireType(K[a>>2])}var ob={},pb={},qb={},rb=void 0;function sb(a){throw new rb(a);} +function tb(a,b,c){function e(m){m=c(m);m.length!==a.length&&sb("Mismatched type converter count");for(var q=0;q{pb.hasOwnProperty(m)?f[q]=pb[m]:(k.push(m),ob.hasOwnProperty(m)||(ob[m]=[]),ob[m].push(()=>{f[q]=pb[m];++l;l===k.length&&e(f)}))});0===k.length&&e(f)} +function vb(a){switch(a){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError(`Unknown type size: ${a}`);}}var wb=void 0;function P(a){for(var b="";C[a];)b+=wb[C[a++]];return b}var xb=void 0;function Q(a){throw new xb(a);} +function yb(a,b,c={}){var e=b.name;a||Q(`type "${e}" must have a positive integer typeid pointer`);if(pb.hasOwnProperty(a)){if(c.af)return;Q(`Cannot register type '${e}' twice`)}pb[a]=b;delete qb[a];ob.hasOwnProperty(a)&&(b=ob[a],delete ob[a],b.forEach(f=>f()))}function ub(a,b,c={}){if(!("argPackAdvance"in b))throw new TypeError("registerType registeredInstance requires argPackAdvance");yb(a,b,c)}function zb(a){Q(a.jd.Id.Gd.name+" instance already deleted")}var Ab=!1;function Bb(){} +function Cb(a){--a.count.value;0===a.count.value&&(a.Kd?a.Od.Sd(a.Kd):a.Id.Gd.Sd(a.Fd))}function Db(a,b,c){if(b===c)return a;if(void 0===c.Ld)return null;a=Db(a,b,c.Ld);return null===a?null:c.Te(a)}var Jb={},Kb=[];function Lb(){for(;Kb.length;){var a=Kb.pop();a.jd.$d=!1;a["delete"]()}}var Mb=void 0,Nb={};function Ob(a,b){for(void 0===b&&Q("ptr should not be undefined");a.Ld;)b=a.fe(b),a=a.Ld;return Nb[b]} +function Pb(a,b){b.Id&&b.Fd||sb("makeClassHandle requires ptr and ptrType");!!b.Od!==!!b.Kd&&sb("Both smartPtrType and smartPtr must be specified");b.count={value:1};return Qb(Object.create(a,{jd:{value:b}}))}function Qb(a){if("undefined"===typeof FinalizationRegistry)return Qb=b=>b,a;Ab=new FinalizationRegistry(b=>{Cb(b.jd)});Qb=b=>{var c=b.jd;c.Kd&&Ab.register(b,{jd:c},b);return b};Bb=b=>{Ab.unregister(b)};return Qb(a)}function Rb(){} +function Sb(a){if(void 0===a)return"_unknown";a=a.replace(/[^a-zA-Z0-9_]/g,"$");var b=a.charCodeAt(0);return 48<=b&&57>=b?`_${a}`:a}function Tb(a,b){a=Sb(a);return{[a]:function(){return b.apply(this,arguments)}}[a]} +function Ub(a,b,c){if(void 0===a[b].Jd){var e=a[b];a[b]=function(){a[b].Jd.hasOwnProperty(arguments.length)||Q(`Function '${c}' called with an invalid number of arguments (${arguments.length}) - expects one of (${a[b].Jd})!`);return a[b].Jd[arguments.length].apply(this,arguments)};a[b].Jd=[];a[b].Jd[e.Yd]=e}} +function Vb(a,b,c){r.hasOwnProperty(a)?((void 0===c||void 0!==r[a].Jd&&void 0!==r[a].Jd[c])&&Q(`Cannot register public name '${a}' twice`),Ub(r,a,a),r.hasOwnProperty(c)&&Q(`Cannot register multiple overloads of a function with the same number of arguments (${c})!`),r[a].Jd[c]=b):(r[a]=b,void 0!==c&&(r[a].sf=c))}function Wb(a,b,c,e,f,k,l,m){this.name=a;this.constructor=b;this.ae=c;this.Sd=e;this.Ld=f;this.We=k;this.fe=l;this.Te=m;this.ef=[]} +function Xb(a,b,c){for(;b!==c;)b.fe||Q(`Expected null or instance of ${c.name}, got an instance of ${b.name}`),a=b.fe(a),b=b.Ld;return a}function Yb(a,b){if(null===b)return this.ve&&Q(`null is not a valid ${this.name}`),0;b.jd||Q(`Cannot pass "${Zb(b)}" as a ${this.name}`);b.jd.Fd||Q(`Cannot pass deleted object as a pointer of type ${this.name}`);return Xb(b.jd.Fd,b.jd.Id.Gd,this.Gd)} +function $b(a,b){if(null===b){this.ve&&Q(`null is not a valid ${this.name}`);if(this.ke){var c=this.we();null!==a&&a.push(this.Sd,c);return c}return 0}b.jd||Q(`Cannot pass "${Zb(b)}" as a ${this.name}`);b.jd.Fd||Q(`Cannot pass deleted object as a pointer of type ${this.name}`);!this.je&&b.jd.Id.je&&Q(`Cannot convert argument of type ${b.jd.Od?b.jd.Od.name:b.jd.Id.name} to parameter type ${this.name}`);c=Xb(b.jd.Fd,b.jd.Id.Gd,this.Gd);if(this.ke)switch(void 0===b.jd.Kd&&Q("Passing raw pointer to smart pointer is illegal"), +this.kf){case 0:b.jd.Od===this?c=b.jd.Kd:Q(`Cannot convert argument of type ${b.jd.Od?b.jd.Od.name:b.jd.Id.name} to parameter type ${this.name}`);break;case 1:c=b.jd.Kd;break;case 2:if(b.jd.Od===this)c=b.jd.Kd;else{var e=b.clone();c=this.ff(c,ac(function(){e["delete"]()}));null!==a&&a.push(this.Sd,c)}break;default:Q("Unsupporting sharing policy")}return c} +function bc(a,b){if(null===b)return this.ve&&Q(`null is not a valid ${this.name}`),0;b.jd||Q(`Cannot pass "${Zb(b)}" as a ${this.name}`);b.jd.Fd||Q(`Cannot pass deleted object as a pointer of type ${this.name}`);b.jd.Id.je&&Q(`Cannot convert argument of type ${b.jd.Id.name} to parameter type ${this.name}`);return Xb(b.jd.Fd,b.jd.Id.Gd,this.Gd)} +function cc(a,b,c,e,f,k,l,m,q,w,y){this.name=a;this.Gd=b;this.ve=c;this.je=e;this.ke=f;this.df=k;this.kf=l;this.Fe=m;this.we=q;this.ff=w;this.Sd=y;f||void 0!==b.Ld?this.toWireType=$b:(this.toWireType=e?Yb:bc,this.Nd=null)}function dc(a,b,c){r.hasOwnProperty(a)||sb("Replacing nonexistant public symbol");void 0!==r[a].Jd&&void 0!==c?r[a].Jd[c]=b:(r[a]=b,r[a].Yd=c)} +var ec=(a,b)=>{var c=[];return function(){c.length=0;Object.assign(c,arguments);if(a.includes("j")){var e=r["dynCall_"+a];e=c&&c.length?e.apply(null,[b].concat(c)):e.call(null,b)}else e=Na.get(b).apply(null,c);return e}};function mc(a,b){a=P(a);var c=a.includes("j")?ec(a,b):Na.get(b);"function"!=typeof c&&Q(`unknown function pointer with signature ${a}: ${b}`);return c}var nc=void 0;function oc(a){a=pc(a);var b=P(a);qc(a);return b} +function rc(a,b){function c(k){f[k]||pb[k]||(qb[k]?qb[k].forEach(c):(e.push(k),f[k]=!0))}var e=[],f={};b.forEach(c);throw new nc(`${a}: `+e.map(oc).join([", "]));} +function sc(a,b,c,e,f){var k=b.length;2>k&&Q("argTypes array size mismatch! Must at least get return value and 'this' types!");var l=null!==b[1]&&null!==c,m=!1;for(c=1;c>2]);return c}function uc(){this.Rd=[void 0];this.De=[]}var vc=new uc;function wc(a){a>=vc.Ud&&0===--vc.get(a).Ge&&vc.re(a)} +var xc=a=>{a||Q("Cannot use deleted val. handle = "+a);return vc.get(a).value},ac=a=>{switch(a){case void 0:return 1;case null:return 2;case !0:return 3;case !1:return 4;default:return vc.qe({Ge:1,value:a})}};function yc(a,b,c){switch(b){case 0:return function(e){return this.fromWireType((c?Ha:C)[e])};case 1:return function(e){return this.fromWireType((c?Ia:Ja)[e>>1])};case 2:return function(e){return this.fromWireType((c?K:L)[e>>2])};default:throw new TypeError("Unknown integer type: "+a);}} +function zc(a,b){var c=pb[a];void 0===c&&Q(b+" has unknown type "+oc(a));return c}function Zb(a){if(null===a)return"null";var b=typeof a;return"object"===b||"array"===b||"function"===b?a.toString():""+a}function Ac(a,b){switch(b){case 2:return function(c){return this.fromWireType(N[c>>2])};case 3:return function(c){return this.fromWireType(Ka[c>>3])};default:throw new TypeError("Unknown float type: "+a);}} +function Bc(a,b,c){switch(b){case 0:return c?function(e){return Ha[e]}:function(e){return C[e]};case 1:return c?function(e){return Ia[e>>1]}:function(e){return Ja[e>>1]};case 2:return c?function(e){return K[e>>2]}:function(e){return L[e>>2]};default:throw new TypeError("Unknown integer type: "+a);}} +var ka=(a,b,c,e)=>{if(!(0=l){var m=a.charCodeAt(++k);l=65536+((l&1023)<<10)|m&1023}if(127>=l){if(c>=e)break;b[c++]=l}else{if(2047>=l){if(c+1>=e)break;b[c++]=192|l>>6}else{if(65535>=l){if(c+2>=e)break;b[c++]=224|l>>12}else{if(c+3>=e)break;b[c++]=240|l>>18;b[c++]=128|l>>12&63}b[c++]=128|l>>6&63}b[c++]=128|l&63}}b[c]=0;return c-f},ja=a=>{for(var b=0,c=0;c=e?b++:2047>= +e?b+=2:55296<=e&&57343>=e?(b+=4,++c):b+=3}return b},Cc="undefined"!=typeof TextDecoder?new TextDecoder("utf-16le"):void 0,Dc=(a,b)=>{var c=a>>1;for(var e=c+b/2;!(c>=e)&&Ja[c];)++c;c<<=1;if(32=b/2);++e){var f=Ia[a+2*e>>1];if(0==f)break;c+=String.fromCharCode(f)}return c},Ec=(a,b,c)=>{void 0===c&&(c=2147483647);if(2>c)return 0;c-=2;var e=b;c=c<2*a.length?c/2:a.length;for(var f=0;f>1]=a.charCodeAt(f),b+=2;Ia[b>>1]=0;return b-e}, +Fc=a=>2*a.length,Gc=(a,b)=>{for(var c=0,e="";!(c>=b/4);){var f=K[a+4*c>>2];if(0==f)break;++c;65536<=f?(f-=65536,e+=String.fromCharCode(55296|f>>10,56320|f&1023)):e+=String.fromCharCode(f)}return e},Hc=(a,b,c)=>{void 0===c&&(c=2147483647);if(4>c)return 0;var e=b;c=e+c-4;for(var f=0;f=k){var l=a.charCodeAt(++f);k=65536+((k&1023)<<10)|l&1023}K[b>>2]=k;b+=4;if(b+4>c)break}K[b>>2]=0;return b-e},Ic=a=>{for(var b=0,c=0;c=e&&++c;b+=4}return b},Jc={};function Kc(a){var b=Jc[a];return void 0===b?P(a):b}var Lc=[]; +function Mc(){function a(b){b.$$$embind_global$$$=b;var c="object"==typeof $$$embind_global$$$&&b.$$$embind_global$$$==b;c||delete b.$$$embind_global$$$;return c}if("object"==typeof globalThis)return globalThis;if("object"==typeof $$$embind_global$$$)return $$$embind_global$$$;"object"==typeof global&&a(global)?$$$embind_global$$$=global:"object"==typeof self&&a(self)&&($$$embind_global$$$=self);if("object"==typeof $$$embind_global$$$)return $$$embind_global$$$;throw Error("unable to get global object."); +}function Nc(a){var b=Lc.length;Lc.push(a);return b}function Oc(a,b){for(var c=Array(a),e=0;e>2],"parameter "+e);return c}var Pc=[];function Qc(a){var b=Array(a+1);return function(c,e,f){b[0]=c;for(var k=0;k>2],"parameter "+k);b[k+1]=l.readValueFromPointer(f);f+=l.argPackAdvance}c=new (c.bind.apply(c,b));return ac(c)}}var Rc={}; +function Sc(a){var b=a.getExtension("ANGLE_instanced_arrays");b&&(a.vertexAttribDivisor=function(c,e){b.vertexAttribDivisorANGLE(c,e)},a.drawArraysInstanced=function(c,e,f,k){b.drawArraysInstancedANGLE(c,e,f,k)},a.drawElementsInstanced=function(c,e,f,k,l){b.drawElementsInstancedANGLE(c,e,f,k,l)})} +function Tc(a){var b=a.getExtension("OES_vertex_array_object");b&&(a.createVertexArray=function(){return b.createVertexArrayOES()},a.deleteVertexArray=function(c){b.deleteVertexArrayOES(c)},a.bindVertexArray=function(c){b.bindVertexArrayOES(c)},a.isVertexArray=function(c){return b.isVertexArrayOES(c)})}function Uc(a){var b=a.getExtension("WEBGL_draw_buffers");b&&(a.drawBuffers=function(c,e){b.drawBuffersWEBGL(c,e)})} +var Vc=1,Wc=[],Xc=[],Yc=[],Zc=[],ea=[],$c=[],ad=[],ia=[],bd=[],cd=[],dd={},ed={},gd=4;function R(a){hd||(hd=a)}function da(a){for(var b=Vc++,c=a.length;ca.version||!b.Be)b.Be=b.getExtension("EXT_disjoint_timer_query");b.rf=b.getExtension("WEBGL_multi_draw");(b.getSupportedExtensions()||[]).forEach(function(c){c.includes("lose_context")||c.includes("debug")||b.getExtension(c)})}} +var x,hd,ld={},nd=()=>{if(!md){var a={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:("object"==typeof navigator&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",_:ma||"./this.program"},b;for(b in ld)void 0===ld[b]?delete a[b]:a[b]=ld[b];var c=[];for(b in a)c.push(`${b}=${a[b]}`);md=c}return md},md,od=[null,[],[]];function pd(a){S.bindVertexArray(ad[a])} +function qd(a,b){for(var c=0;c>2];S.deleteVertexArray(ad[e]);ad[e]=null}}var rd=[];function sd(a,b,c,e){S.drawElements(a,b,c,e)}function td(a,b,c,e){for(var f=0;f>2]=l}}function ud(a,b){td(a,b,"createVertexArray",ad)} +function vd(a,b,c){if(b){var e=void 0;switch(a){case 36346:e=1;break;case 36344:0!=c&&1!=c&&R(1280);return;case 34814:case 36345:e=0;break;case 34466:var f=S.getParameter(34467);e=f?f.length:0;break;case 33309:if(2>x.version){R(1282);return}e=2*(S.getSupportedExtensions()||[]).length;break;case 33307:case 33308:if(2>x.version){R(1280);return}e=33307==a?3:0}if(void 0===e)switch(f=S.getParameter(a),typeof f){case "number":e=f;break;case "boolean":e=f?1:0;break;case "string":R(1280);return;case "object":if(null=== +f)switch(a){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 36662:case 36663:case 35053:case 35055:case 36010:case 35097:case 35869:case 32874:case 36389:case 35983:case 35368:case 34068:e=0;break;default:R(1280);return}else{if(f instanceof Float32Array||f instanceof Uint32Array||f instanceof Int32Array||f instanceof Array){for(a=0;a>2]=f[a];break;case 2:N[b+4*a>>2]=f[a];break;case 4:Ha[b+a>>0]=f[a]?1:0}return}try{e=f.name|0}catch(k){R(1280); +Ca("GL_INVALID_ENUM in glGet"+c+"v: Unknown object returned from WebGL getParameter("+a+")! (error: "+k+")");return}}break;default:R(1280);Ca("GL_INVALID_ENUM in glGet"+c+"v: Native code calling glGet"+c+"v("+a+") and it returns "+f+" of type "+typeof f+"!");return}switch(c){case 1:c=e;L[b>>2]=c;L[b+4>>2]=(c-L[b>>2])/4294967296;break;case 0:K[b>>2]=e;break;case 2:N[b>>2]=e;break;case 4:Ha[b>>0]=e?1:0}}else R(1281)}var xd=a=>{var b=ja(a)+1,c=wd(b);c&&ka(a,C,c,b);return c}; +function yd(a){return"]"==a.slice(-1)&&a.lastIndexOf("[")}function zd(a){a-=5120;return 0==a?Ha:1==a?C:2==a?Ia:4==a?K:6==a?N:5==a||28922==a||28520==a||30779==a||30782==a?L:Ja}function Ad(a,b,c,e,f){a=zd(a);var k=31-Math.clz32(a.BYTES_PER_ELEMENT),l=gd;return a.subarray(f>>k,f+e*(c*({5:3,6:4,8:2,29502:3,29504:4,26917:2,26918:2,29846:3,29847:4}[b-6402]||1)*(1<>k)} +function W(a){var b=S.Re;if(b){var c=b.ee[a];"number"==typeof c&&(b.ee[a]=c=S.getUniformLocation(b,b.He[a]+(00===a%4&&(0!==a%100||0===a%400),Ed=[31,29,31,30,31,30,31,31,30,31,30,31],Fd=[31,28,31,30,31,30,31,31,30,31,30,31];function Gd(a){var b=Array(ja(a)+1);ka(a,b,0,b.length);return b} +var Hd=(a,b,c,e)=>{function f(u,F,H){for(u="number"==typeof u?u.toString():u||"";u.lengthca?-1:0T-u.getDate())F-=T-u.getDate()+1,u.setDate(1),11>H?u.setMonth(H+1):(u.setMonth(0),u.setFullYear(u.getFullYear()+1));else{u.setDate(u.getDate()+F);break}}H=new Date(u.getFullYear()+1,0,4);F=m(new Date(u.getFullYear(), +0,4));H=m(H);return 0>=l(F,u)?0>=l(H,u)?u.getFullYear()+1:u.getFullYear():u.getFullYear()-1}var w=K[e+40>>2];e={nf:K[e>>2],mf:K[e+4>>2],oe:K[e+8>>2],xe:K[e+12>>2],pe:K[e+16>>2],Wd:K[e+20>>2],Qd:K[e+24>>2],Vd:K[e+28>>2],uf:K[e+32>>2],lf:K[e+36>>2],pf:w?w?kb(C,w):"":""};c=c?kb(C,c):"";w={"%c":"%a %b %d %H:%M:%S %Y","%D":"%m/%d/%y","%F":"%Y-%m-%d","%h":"%b","%r":"%I:%M:%S %p","%R":"%H:%M","%T":"%H:%M:%S","%x":"%m/%d/%y","%X":"%H:%M:%S","%Ec":"%c","%EC":"%C","%Ex":"%m/%d/%y","%EX":"%H:%M:%S","%Ey":"%y", +"%EY":"%Y","%Od":"%d","%Oe":"%e","%OH":"%H","%OI":"%I","%Om":"%m","%OM":"%M","%OS":"%S","%Ou":"%u","%OU":"%U","%OV":"%V","%Ow":"%w","%OW":"%W","%Oy":"%y"};for(var y in w)c=c.replace(new RegExp(y,"g"),w[y]);var B="Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),D="January February March April May June July August September October November December".split(" ");w={"%a":u=>B[u.Qd].substring(0,3),"%A":u=>B[u.Qd],"%b":u=>D[u.pe].substring(0,3),"%B":u=>D[u.pe],"%C":u=>k((u.Wd+1900)/ +100|0,2),"%d":u=>k(u.xe,2),"%e":u=>f(u.xe,2," "),"%g":u=>q(u).toString().substring(2),"%G":u=>q(u),"%H":u=>k(u.oe,2),"%I":u=>{u=u.oe;0==u?u=12:12{for(var F=0,H=0;H<=u.pe-1;F+=(Dd(u.Wd+1900)?Ed:Fd)[H++]);return k(u.xe+F,3)},"%m":u=>k(u.pe+1,2),"%M":u=>k(u.mf,2),"%n":()=>"\n","%p":u=>0<=u.oe&&12>u.oe?"AM":"PM","%S":u=>k(u.nf,2),"%t":()=>"\t","%u":u=>u.Qd||7,"%U":u=>k(Math.floor((u.Vd+7-u.Qd)/7),2),"%V":u=>{var F=Math.floor((u.Vd+7-(u.Qd+6)%7)/7);2>=(u.Qd+371-u.Vd- +2)%7&&F++;if(F)53==F&&(H=(u.Qd+371-u.Vd)%7,4==H||3==H&&Dd(u.Wd)||(F=1));else{F=52;var H=(u.Qd+7-u.Vd-1)%7;(4==H||5==H&&Dd(u.Wd%400-1))&&F++}return k(F,2)},"%w":u=>u.Qd,"%W":u=>k(Math.floor((u.Vd+7-(u.Qd+6)%7)/7),2),"%y":u=>(u.Wd+1900).toString().substring(2),"%Y":u=>u.Wd+1900,"%z":u=>{u=u.lf;var F=0<=u;u=Math.abs(u)/60;return(F?"+":"-")+String("0000"+(u/60*100+u%60)).slice(-4)},"%Z":u=>u.pf,"%%":()=>"%"};c=c.replace(/%%/g,"\x00\x00");for(y in w)c.includes(y)&&(c=c.replace(new RegExp(y,"g"),w[y](e))); +c=c.replace(/\0\0/g,"%");y=Gd(c);if(y.length>b)return 0;Ha.set(y,a);return y.length-1};rb=r.InternalError=class extends Error{constructor(a){super(a);this.name="InternalError"}};for(var Id=Array(256),Jd=0;256>Jd;++Jd)Id[Jd]=String.fromCharCode(Jd);wb=Id;xb=r.BindingError=class extends Error{constructor(a){super(a);this.name="BindingError"}}; +Rb.prototype.isAliasOf=function(a){if(!(this instanceof Rb&&a instanceof Rb))return!1;var b=this.jd.Id.Gd,c=this.jd.Fd,e=a.jd.Id.Gd;for(a=a.jd.Fd;b.Ld;)c=b.fe(c),b=b.Ld;for(;e.Ld;)a=e.fe(a),e=e.Ld;return b===e&&c===a}; +Rb.prototype.clone=function(){this.jd.Fd||zb(this);if(this.jd.de)return this.jd.count.value+=1,this;var a=Qb,b=Object,c=b.create,e=Object.getPrototypeOf(this),f=this.jd;a=a(c.call(b,e,{jd:{value:{count:f.count,$d:f.$d,de:f.de,Fd:f.Fd,Id:f.Id,Kd:f.Kd,Od:f.Od}}}));a.jd.count.value+=1;a.jd.$d=!1;return a};Rb.prototype["delete"]=function(){this.jd.Fd||zb(this);this.jd.$d&&!this.jd.de&&Q("Object already scheduled for deletion");Bb(this);Cb(this.jd);this.jd.de||(this.jd.Kd=void 0,this.jd.Fd=void 0)}; +Rb.prototype.isDeleted=function(){return!this.jd.Fd};Rb.prototype.deleteLater=function(){this.jd.Fd||zb(this);this.jd.$d&&!this.jd.de&&Q("Object already scheduled for deletion");Kb.push(this);1===Kb.length&&Mb&&Mb(Lb);this.jd.$d=!0;return this};r.getInheritedInstanceCount=function(){return Object.keys(Nb).length};r.getLiveInheritedInstances=function(){var a=[],b;for(b in Nb)Nb.hasOwnProperty(b)&&a.push(Nb[b]);return a};r.flushPendingDeletes=Lb;r.setDelayFunction=function(a){Mb=a;Kb.length&&Mb&&Mb(Lb)}; +cc.prototype.Xe=function(a){this.Fe&&(a=this.Fe(a));return a};cc.prototype.ze=function(a){this.Sd&&this.Sd(a)};cc.prototype.argPackAdvance=8;cc.prototype.readValueFromPointer=nb;cc.prototype.deleteObject=function(a){if(null!==a)a["delete"]()}; +cc.prototype.fromWireType=function(a){function b(){return this.ke?Pb(this.Gd.ae,{Id:this.df,Fd:c,Od:this,Kd:a}):Pb(this.Gd.ae,{Id:this,Fd:a})}var c=this.Xe(a);if(!c)return this.ze(a),null;var e=Ob(this.Gd,c);if(void 0!==e){if(0===e.jd.count.value)return e.jd.Fd=c,e.jd.Kd=a,e.clone();e=e.clone();this.ze(a);return e}e=this.Gd.We(c);e=Jb[e];if(!e)return b.call(this);e=this.je?e.Qe:e.pointerType;var f=Db(c,this.Gd,e.Gd);return null===f?b.call(this):this.ke?Pb(e.Gd.ae,{Id:e,Fd:f,Od:this,Kd:a}):Pb(e.Gd.ae, +{Id:e,Fd:f})};nc=r.UnboundTypeError=function(a,b){var c=Tb(b,function(e){this.name=b;this.message=e;e=Error(e).stack;void 0!==e&&(this.stack=this.toString()+"\n"+e.replace(/^Error(:[^\n]*)?\n/,""))});c.prototype=Object.create(a.prototype);c.prototype.constructor=c;c.prototype.toString=function(){return void 0===this.message?this.name:`${this.name}: ${this.message}`};return c}(Error,"UnboundTypeError"); +Object.assign(uc.prototype,{get(a){return this.Rd[a]},has(a){return void 0!==this.Rd[a]},qe(a){var b=this.De.pop()||this.Rd.length;this.Rd[b]=a;return b},re(a){this.Rd[a]=void 0;this.De.push(a)}});vc.Rd.push({value:void 0},{value:null},{value:!0},{value:!1});vc.Ud=vc.Rd.length;r.count_emval_handles=function(){for(var a=0,b=vc.Ud;bKd;++Kd)rd.push(Array(Kd));var Ld=new Float32Array(288); +for(Kd=0;288>Kd;++Kd)Bd[Kd]=Ld.subarray(0,Kd+1);var Md=new Int32Array(288);for(Kd=0;288>Kd;++Kd)Cd[Kd]=Md.subarray(0,Kd+1); +var $d={H:function(a,b,c){(new fb(a)).Ud(b,c);gb=a;ib++;throw gb;},T:function(){return 0},tb:()=>{},vb:function(){return 0},rb:()=>{},wb:function(){},sb:()=>{},C:function(a){var b=lb[a];delete lb[a];var c=b.we,e=b.Sd,f=b.Ce,k=f.map(l=>l.$e).concat(f.map(l=>l.hf));tb([a],k,l=>{var m={};f.forEach((q,w)=>{var y=l[w],B=q.Ye,D=q.Ze,u=l[w+f.length],F=q.gf,H=q.jf;m[q.Ve]={read:T=>y.fromWireType(B(D,T)),write:(T,ca)=>{var Y=[];F(H,T,u.toWireType(Y,ca));mb(Y)}}});return[{name:b.name,fromWireType:function(q){var w= +{},y;for(y in m)w[y]=m[y].read(q);e(q);return w},toWireType:function(q,w){for(var y in m)if(!(y in w))throw new TypeError(`Missing field: "${y}"`);var B=c();for(y in m)m[y].write(B,w[y]);null!==q&&q.push(e,B);return B},argPackAdvance:8,readValueFromPointer:nb,Nd:e}]})},jb:function(){},Ab:function(a,b,c,e,f){var k=vb(c);b=P(b);ub(a,{name:b,fromWireType:function(l){return!!l},toWireType:function(l,m){return m?e:f},argPackAdvance:8,readValueFromPointer:function(l){if(1===c)var m=Ha;else if(2===c)m=Ia; +else if(4===c)m=K;else throw new TypeError("Unknown boolean type size: "+b);return this.fromWireType(m[l>>k])},Nd:null})},l:function(a,b,c,e,f,k,l,m,q,w,y,B,D){y=P(y);k=mc(f,k);m&&(m=mc(l,m));w&&(w=mc(q,w));D=mc(B,D);var u=Sb(y);Vb(u,function(){rc(`Cannot construct ${y} due to unbound types`,[e])});tb([a,b,c],e?[e]:[],function(F){F=F[0];if(e){var H=F.Gd;var T=H.ae}else T=Rb.prototype;F=Tb(u,function(){if(Object.getPrototypeOf(this)!==ca)throw new xb("Use 'new' to construct "+y);if(void 0===Y.Td)throw new xb(y+ +" has no accessible constructor");var Ma=Y.Td[arguments.length];if(void 0===Ma)throw new xb(`Tried to invoke ctor of ${y} with invalid number of parameters (${arguments.length}) - expected (${Object.keys(Y.Td).toString()}) parameters instead!`);return Ma.apply(this,arguments)});var ca=Object.create(T,{constructor:{value:F}});F.prototype=ca;var Y=new Wb(y,F,ca,D,H,k,m,w);Y.Ld&&(void 0===Y.Ld.ge&&(Y.Ld.ge=[]),Y.Ld.ge.push(Y));H=new cc(y,Y,!0,!1,!1);T=new cc(y+"*",Y,!1,!1,!1);var va=new cc(y+" const*", +Y,!1,!0,!1);Jb[a]={pointerType:T,Qe:va};dc(u,F);return[H,T,va]})},e:function(a,b,c,e,f,k,l){var m=tc(c,e);b=P(b);k=mc(f,k);tb([],[a],function(q){function w(){rc(`Cannot call ${y} due to unbound types`,m)}q=q[0];var y=`${q.name}.${b}`;b.startsWith("@@")&&(b=Symbol[b.substring(2)]);var B=q.Gd.constructor;void 0===B[b]?(w.Yd=c-1,B[b]=w):(Ub(B,b,y),B[b].Jd[c-1]=w);tb([],m,function(D){D=[D[0],null].concat(D.slice(1));D=sc(y,D,null,k,l);void 0===B[b].Jd?(D.Yd=c-1,B[b]=D):B[b].Jd[c-1]=D;if(q.Gd.ge)for(const u of q.Gd.ge)u.constructor.hasOwnProperty(b)|| +(u.constructor[b]=D);return[]});return[]})},A:function(a,b,c,e,f,k){var l=tc(b,c);f=mc(e,f);tb([],[a],function(m){m=m[0];var q=`constructor ${m.name}`;void 0===m.Gd.Td&&(m.Gd.Td=[]);if(void 0!==m.Gd.Td[b-1])throw new xb(`Cannot register multiple constructors with identical number of parameters (${b-1}) for class '${m.name}'! Overload resolution is currently only performed using the parameter count, not actual type info!`);m.Gd.Td[b-1]=()=>{rc(`Cannot construct ${m.name} due to unbound types`,l)}; +tb([],l,function(w){w.splice(1,0,null);m.Gd.Td[b-1]=sc(q,w,null,f,k);return[]});return[]})},a:function(a,b,c,e,f,k,l,m){var q=tc(c,e);b=P(b);k=mc(f,k);tb([],[a],function(w){function y(){rc(`Cannot call ${B} due to unbound types`,q)}w=w[0];var B=`${w.name}.${b}`;b.startsWith("@@")&&(b=Symbol[b.substring(2)]);m&&w.Gd.ef.push(b);var D=w.Gd.ae,u=D[b];void 0===u||void 0===u.Jd&&u.className!==w.name&&u.Yd===c-2?(y.Yd=c-2,y.className=w.name,D[b]=y):(Ub(D,b,B),D[b].Jd[c-2]=y);tb([],q,function(F){F=sc(B,F, +w,k,l);void 0===D[b].Jd?(F.Yd=c-2,D[b]=F):D[b].Jd[c-2]=F;return[]});return[]})},t:function(a,b,c){a=P(a);tb([],[b],function(e){e=e[0];r[a]=e.fromWireType(c);return[]})},zb:function(a,b){b=P(b);ub(a,{name:b,fromWireType:function(c){var e=xc(c);wc(c);return e},toWireType:function(c,e){return ac(e)},argPackAdvance:8,readValueFromPointer:nb,Nd:null})},i:function(a,b,c,e){function f(){}c=vb(c);b=P(b);f.values={};ub(a,{name:b,constructor:f,fromWireType:function(k){return this.constructor.values[k]},toWireType:function(k, +l){return l.value},argPackAdvance:8,readValueFromPointer:yc(b,c,e),Nd:null});Vb(b,f)},b:function(a,b,c){var e=zc(a,"enum");b=P(b);a=e.constructor;e=Object.create(e.constructor.prototype,{value:{value:c},constructor:{value:Tb(`${e.name}_${b}`,function(){})}});a.values[c]=e;a[b]=e},W:function(a,b,c){c=vb(c);b=P(b);ub(a,{name:b,fromWireType:function(e){return e},toWireType:function(e,f){return f},argPackAdvance:8,readValueFromPointer:Ac(b,c),Nd:null})},v:function(a,b,c,e,f,k){var l=tc(b,c);a=P(a);f= +mc(e,f);Vb(a,function(){rc(`Cannot call ${a} due to unbound types`,l)},b-1);tb([],l,function(m){m=[m[0],null].concat(m.slice(1));dc(a,sc(a,m,null,f,k),b-1);return[]})},E:function(a,b,c,e,f){b=P(b);-1===f&&(f=4294967295);f=vb(c);var k=m=>m;if(0===e){var l=32-8*c;k=m=>m<>>l}c=b.includes("unsigned")?function(m,q){return q>>>0}:function(m,q){return q};ub(a,{name:b,fromWireType:k,toWireType:c,argPackAdvance:8,readValueFromPointer:Bc(b,f,0!==e),Nd:null})},s:function(a,b,c){function e(k){k>>=2;var l= +L;return new f(l.buffer,l[k+1],l[k])}var f=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array][b];c=P(c);ub(a,{name:c,fromWireType:e,argPackAdvance:8,readValueFromPointer:e},{af:!0})},q:function(a,b,c,e,f,k,l,m,q,w,y,B){c=P(c);k=mc(f,k);m=mc(l,m);w=mc(q,w);B=mc(y,B);tb([a],[b],function(D){D=D[0];return[new cc(c,D.Gd,!1,!1,!0,D,e,k,m,w,B)]})},V:function(a,b){b=P(b);var c="std::string"===b;ub(a,{name:b,fromWireType:function(e){var f=L[e>>2],k=e+4;if(c)for(var l= +k,m=0;m<=f;++m){var q=k+m;if(m==f||0==C[q]){l=l?kb(C,l,q-l):"";if(void 0===w)var w=l;else w+=String.fromCharCode(0),w+=l;l=q+1}}else{w=Array(f);for(m=0;m>2]= +l;if(c&&k)ka(f,C,q,l+1);else if(k)for(k=0;kJa;var m=1}else 4===b&&(e=Gc,f=Hc,k=Ic,l=()=>L,m=2);ub(a,{name:c,fromWireType:function(q){for(var w=L[q>>2],y=l(),B,D=q+4,u=0;u<=w;++u){var F= +q+4+u*b;if(u==w||0==y[F>>m])D=e(D,F-D),void 0===B?B=D:(B+=String.fromCharCode(0),B+=D),D=F+b}qc(q);return B},toWireType:function(q,w){"string"!=typeof w&&Q(`Cannot pass non-string to C++ string type ${c}`);var y=k(w),B=wd(4+y+b);L[B>>2]=y>>m;f(w,B+4,y+b);null!==q&&q.push(qc,B);return B},argPackAdvance:8,readValueFromPointer:nb,Nd:function(q){qc(q)}})},D:function(a,b,c,e,f,k){lb[a]={name:P(b),we:mc(c,e),Sd:mc(f,k),Ce:[]}},d:function(a,b,c,e,f,k,l,m,q,w){lb[a].Ce.push({Ve:P(b),$e:c,Ye:mc(e,f),Ze:k, +hf:l,gf:mc(m,q),jf:w})},Bb:function(a,b){b=P(b);ub(a,{cf:!0,name:b,argPackAdvance:0,fromWireType:function(){},toWireType:function(){}})},yb:()=>!0,nb:()=>{throw Infinity;},F:function(a,b,c){a=xc(a);b=zc(b,"emval::as");var e=[],f=ac(e);L[c>>2]=f;return b.toWireType(e,a)},O:function(a,b,c,e,f){a=Lc[a];b=xc(b);c=Kc(c);var k=[];L[e>>2]=ac(k);return a(b,c,k,f)},u:function(a,b,c,e){a=Lc[a];b=xc(b);c=Kc(c);a(b,c,null,e)},c:wc,K:function(a){if(0===a)return ac(Mc());a=Kc(a);return ac(Mc()[a])},r:function(a, +b){var c=Oc(a,b),e=c[0];b=e.name+"_$"+c.slice(1).map(function(l){return l.name}).join("_")+"$";var f=Pc[b];if(void 0!==f)return f;var k=Array(a-1);f=Nc((l,m,q,w)=>{for(var y=0,B=0;B{Ea("")},xb:()=>performance.now(),ob:a=>{var b=C.length;a>>>=0;if(2147483648=c;c*=2){var e=b*(1+.2/c); +e=Math.min(e,a+100663296);var f=Math;e=Math.max(a,e);a:{f=f.min.call(f,2147483648,e+(65536-e%65536)%65536)-Fa.buffer.byteLength+65535>>>16;try{Fa.grow(f);La();var k=1;break a}catch(l){}k=void 0}if(k)return!0}return!1},eb:function(){return x?x.handle:0},pb:(a,b)=>{var c=0;nd().forEach(function(e,f){var k=b+c;f=L[a+4*f>>2]=k;for(k=0;k>0]=e.charCodeAt(k);Ha[f>>0]=0;c+=e.length+1});return 0},qb:(a,b)=>{var c=nd();L[a>>2]=c.length;var e=0;c.forEach(function(f){e+=f.length+1});L[b>> +2]=e;return 0},Cb:a=>{if(!noExitRuntime){if(r.onExit)r.onExit(a);Ga=!0}oa(a,new db(a))},U:()=>52,fb:function(){return 52},ub:()=>52,ib:function(){return 70},S:(a,b,c,e)=>{for(var f=0,k=0;k>2],m=L[b+4>>2];b+=8;for(var q=0;q>2]=f;return 0},Vc:function(a){S.activeTexture(a)},Wc:function(a,b){S.attachShader(Xc[a],$c[b])},Xc:function(a,b,c){S.bindAttribLocation(Xc[a],b,c?kb(C,c):"")},Yc:function(a, +b){35051==a?S.te=b:35052==a&&(S.Zd=b);S.bindBuffer(a,Wc[b])},_:function(a,b){S.bindFramebuffer(a,Yc[b])},Zb:function(a,b){S.bindRenderbuffer(a,Zc[b])},Jb:function(a,b){S.bindSampler(a,bd[b])},Zc:function(a,b){S.bindTexture(a,ea[b])},rc:pd,uc:pd,_c:function(a,b,c,e){S.blendColor(a,b,c,e)},$:function(a){S.blendEquation(a)},aa:function(a,b){S.blendFunc(a,b)},Tb:function(a,b,c,e,f,k,l,m,q,w){S.blitFramebuffer(a,b,c,e,f,k,l,m,q,w)},ba:function(a,b,c,e){2<=x.version?c&&b?S.bufferData(a,C,e,c,b):S.bufferData(a, +b,e):S.bufferData(a,c?C.subarray(c,c+b):b,e)},ca:function(a,b,c,e){2<=x.version?c&&S.bufferSubData(a,b,C,e,c):S.bufferSubData(a,b,C.subarray(e,e+c))},_b:function(a){return S.checkFramebufferStatus(a)},Q:function(a){S.clear(a)},Z:function(a,b,c,e){S.clearColor(a,b,c,e)},R:function(a){S.clearStencil(a)},lb:function(a,b,c,e){return S.clientWaitSync(cd[a],b,(c>>>0)+4294967296*e)},da:function(a,b,c,e){S.colorMask(!!a,!!b,!!c,!!e)},ea:function(a){S.compileShader($c[a])},fa:function(a,b,c,e,f,k,l,m){2<= +x.version?S.Zd||!l?S.compressedTexImage2D(a,b,c,e,f,k,l,m):S.compressedTexImage2D(a,b,c,e,f,k,C,m,l):S.compressedTexImage2D(a,b,c,e,f,k,m?C.subarray(m,m+l):null)},ga:function(a,b,c,e,f,k,l,m,q){2<=x.version?S.Zd||!m?S.compressedTexSubImage2D(a,b,c,e,f,k,l,m,q):S.compressedTexSubImage2D(a,b,c,e,f,k,l,C,q,m):S.compressedTexSubImage2D(a,b,c,e,f,k,l,q?C.subarray(q,q+m):null)},Rb:function(a,b,c,e,f){S.copyBufferSubData(a,b,c,e,f)},ha:function(a,b,c,e,f,k,l,m){S.copyTexSubImage2D(a,b,c,e,f,k,l,m)},ia:function(){var a= +da(Xc),b=S.createProgram();b.name=a;b.ne=b.le=b.me=0;b.ye=1;Xc[a]=b;return a},ja:function(a){var b=da($c);$c[b]=S.createShader(a);return b},ka:function(a){S.cullFace(a)},la:function(a,b){for(var c=0;c>2],f=Wc[e];f&&(S.deleteBuffer(f),f.name=0,Wc[e]=null,e==S.te&&(S.te=0),e==S.Zd&&(S.Zd=0))}},$b:function(a,b){for(var c=0;c>2],f=Yc[e];f&&(S.deleteFramebuffer(f),f.name=0,Yc[e]=null)}},ma:function(a){if(a){var b=Xc[a];b?(S.deleteProgram(b),b.name=0,Xc[a]=null): +R(1281)}},ac:function(a,b){for(var c=0;c>2],f=Zc[e];f&&(S.deleteRenderbuffer(f),f.name=0,Zc[e]=null)}},Kb:function(a,b){for(var c=0;c>2],f=bd[e];f&&(S.deleteSampler(f),f.name=0,bd[e]=null)}},na:function(a){if(a){var b=$c[a];b?(S.deleteShader(b),$c[a]=null):R(1281)}},Sb:function(a){if(a){var b=cd[a];b?(S.deleteSync(b),b.name=0,cd[a]=null):R(1281)}},oa:function(a,b){for(var c=0;c>2],f=ea[e];f&&(S.deleteTexture(f),f.name=0,ea[e]=null)}}, +sc:qd,vc:qd,pa:function(a){S.depthMask(!!a)},qa:function(a){S.disable(a)},ra:function(a){S.disableVertexAttribArray(a)},sa:function(a,b,c){S.drawArrays(a,b,c)},pc:function(a,b,c,e){S.drawArraysInstanced(a,b,c,e)},nc:function(a,b,c,e,f){S.Ae.drawArraysInstancedBaseInstanceWEBGL(a,b,c,e,f)},lc:function(a,b){for(var c=rd[a],e=0;e>2];S.drawBuffers(c)},ta:sd,qc:function(a,b,c,e,f){S.drawElementsInstanced(a,b,c,e,f)},oc:function(a,b,c,e,f,k,l){S.Ae.drawElementsInstancedBaseVertexBaseInstanceWEBGL(a, +b,c,e,f,k,l)},fc:function(a,b,c,e,f,k){sd(a,e,f,k)},ua:function(a){S.enable(a)},va:function(a){S.enableVertexAttribArray(a)},Pb:function(a,b){return(a=S.fenceSync(a,b))?(b=da(cd),a.name=b,cd[b]=a,b):0},wa:function(){S.finish()},xa:function(){S.flush()},bc:function(a,b,c,e){S.framebufferRenderbuffer(a,b,c,Zc[e])},cc:function(a,b,c,e,f){S.framebufferTexture2D(a,b,c,ea[e],f)},ya:function(a){S.frontFace(a)},za:function(a,b){td(a,b,"createBuffer",Wc)},dc:function(a,b){td(a,b,"createFramebuffer",Yc)},ec:function(a, +b){td(a,b,"createRenderbuffer",Zc)},Lb:function(a,b){td(a,b,"createSampler",bd)},Aa:function(a,b){td(a,b,"createTexture",ea)},tc:ud,wc:ud,Vb:function(a){S.generateMipmap(a)},Ba:function(a,b,c){c?K[c>>2]=S.getBufferParameter(a,b):R(1281)},Ca:function(){var a=S.getError()||hd;hd=0;return a},Da:function(a,b){vd(a,b,2)},Wb:function(a,b,c,e){a=S.getFramebufferAttachmentParameter(a,b,c);if(a instanceof WebGLRenderbuffer||a instanceof WebGLTexture)a=a.name|0;K[e>>2]=a},L:function(a,b){vd(a,b,0)},Ea:function(a, +b,c,e){a=S.getProgramInfoLog(Xc[a]);null===a&&(a="(unknown error)");b=0>2]=b)},Fa:function(a,b,c){if(c)if(a>=Vc)R(1281);else if(a=Xc[a],35716==b)a=S.getProgramInfoLog(a),null===a&&(a="(unknown error)"),K[c>>2]=a.length+1;else if(35719==b){if(!a.ne)for(b=0;b>2]=a.ne}else if(35722==b){if(!a.le)for(b=0;b>2]=a.le}else if(35381==b){if(!a.me)for(b=0;b>2]=a.me}else K[c>>2]=S.getProgramParameter(a,b);else R(1281)},Xb:function(a,b,c){c?K[c>>2]=S.getRenderbufferParameter(a,b):R(1281)},Ga:function(a,b,c,e){a=S.getShaderInfoLog($c[a]);null===a&&(a="(unknown error)");b=0>2]=b)},Gb:function(a,b,c,e){a=S.getShaderPrecisionFormat(a,b);K[c>>2]=a.rangeMin;K[c+4>> +2]=a.rangeMax;K[e>>2]=a.precision},Ha:function(a,b,c){c?35716==b?(a=S.getShaderInfoLog($c[a]),null===a&&(a="(unknown error)"),K[c>>2]=a?a.length+1:0):35720==b?(a=S.getShaderSource($c[a]),K[c>>2]=a?a.length+1:0):K[c>>2]=S.getShaderParameter($c[a],b):R(1281)},P:function(a){var b=dd[a];if(!b){switch(a){case 7939:b=S.getSupportedExtensions()||[];b=b.concat(b.map(function(e){return"GL_"+e}));b=xd(b.join(" "));break;case 7936:case 7937:case 37445:case 37446:(b=S.getParameter(a))||R(1280);b=b&&xd(b);break; +case 7938:b=S.getParameter(7938);b=2<=x.version?"OpenGL ES 3.0 ("+b+")":"OpenGL ES 2.0 ("+b+")";b=xd(b);break;case 35724:b=S.getParameter(35724);var c=b.match(/^WebGL GLSL ES ([0-9]\.[0-9][0-9]?)(?:$| .*)/);null!==c&&(3==c[1].length&&(c[1]+="0"),b="OpenGL ES GLSL ES "+c[1]+" ("+b+")");b=xd(b);break;default:R(1280)}dd[a]=b}return b},cb:function(a,b){if(2>x.version)return R(1282),0;var c=ed[a];if(c)return 0>b||b>=c.length?(R(1281),0):c[b];switch(a){case 7939:return c=S.getSupportedExtensions()||[], +c=c.concat(c.map(function(e){return"GL_"+e})),c=c.map(function(e){return xd(e)}),c=ed[a]=c,0>b||b>=c.length?(R(1281),0):c[b];default:return R(1280),0}},Ia:function(a,b){b=b?kb(C,b):"";if(a=Xc[a]){var c=a,e=c.ee,f=c.Ie,k;if(!e)for(c.ee=e={},c.He={},k=0;k>>0,f=b.slice(0, +k));if((f=a.Ie[f])&&e>2];S.invalidateFramebuffer(a,e)},Ib:function(a,b,c,e,f,k,l){for(var m=rd[b],q=0;q>2];S.invalidateSubFramebuffer(a,m,e,f,k,l)},Qb:function(a){return S.isSync(cd[a])},Ja:function(a){return(a=ea[a])?S.isTexture(a):0},Ka:function(a){S.lineWidth(a)},La:function(a){a=Xc[a];S.linkProgram(a);a.ee=0;a.Ie={}},jc:function(a, +b,c,e,f,k){S.Ee.multiDrawArraysInstancedBaseInstanceWEBGL(a,K,b>>2,K,c>>2,K,e>>2,L,f>>2,k)},kc:function(a,b,c,e,f,k,l,m){S.Ee.multiDrawElementsInstancedBaseVertexBaseInstanceWEBGL(a,K,b>>2,c,K,e>>2,K,f>>2,K,k>>2,L,l>>2,m)},Ma:function(a,b){3317==a&&(gd=b);S.pixelStorei(a,b)},mc:function(a){S.readBuffer(a)},Na:function(a,b,c,e,f,k,l){if(2<=x.version)if(S.te)S.readPixels(a,b,c,e,f,k,l);else{var m=zd(k);S.readPixels(a,b,c,e,f,k,m,l>>31-Math.clz32(m.BYTES_PER_ELEMENT))}else(l=Ad(k,f,c,e,l))?S.readPixels(a, +b,c,e,f,k,l):R(1280)},Yb:function(a,b,c,e){S.renderbufferStorage(a,b,c,e)},Ub:function(a,b,c,e,f){S.renderbufferStorageMultisample(a,b,c,e,f)},Mb:function(a,b,c){S.samplerParameterf(bd[a],b,c)},Nb:function(a,b,c){S.samplerParameteri(bd[a],b,c)},Ob:function(a,b,c){S.samplerParameteri(bd[a],b,K[c>>2])},Oa:function(a,b,c,e){S.scissor(a,b,c,e)},Pa:function(a,b,c,e){for(var f="",k=0;k>2]:-1,m=K[c+4*k>>2];l=m?kb(C,m,0>l?void 0:l):"";f+=l}S.shaderSource($c[a],f)},Qa:function(a,b, +c){S.stencilFunc(a,b,c)},Ra:function(a,b,c,e){S.stencilFuncSeparate(a,b,c,e)},Sa:function(a){S.stencilMask(a)},Ta:function(a,b){S.stencilMaskSeparate(a,b)},Ua:function(a,b,c){S.stencilOp(a,b,c)},Va:function(a,b,c,e){S.stencilOpSeparate(a,b,c,e)},Wa:function(a,b,c,e,f,k,l,m,q){if(2<=x.version)if(S.Zd)S.texImage2D(a,b,c,e,f,k,l,m,q);else if(q){var w=zd(m);S.texImage2D(a,b,c,e,f,k,l,m,w,q>>31-Math.clz32(w.BYTES_PER_ELEMENT))}else S.texImage2D(a,b,c,e,f,k,l,m,null);else S.texImage2D(a,b,c,e,f,k,l,m,q? +Ad(m,l,e,f,q):null)},Xa:function(a,b,c){S.texParameterf(a,b,c)},Ya:function(a,b,c){S.texParameterf(a,b,N[c>>2])},Za:function(a,b,c){S.texParameteri(a,b,c)},_a:function(a,b,c){S.texParameteri(a,b,K[c>>2])},gc:function(a,b,c,e,f){S.texStorage2D(a,b,c,e,f)},$a:function(a,b,c,e,f,k,l,m,q){if(2<=x.version)if(S.Zd)S.texSubImage2D(a,b,c,e,f,k,l,m,q);else if(q){var w=zd(m);S.texSubImage2D(a,b,c,e,f,k,l,m,w,q>>31-Math.clz32(w.BYTES_PER_ELEMENT))}else S.texSubImage2D(a,b,c,e,f,k,l,m,null);else w=null,q&&(w= +Ad(m,l,f,k,q)),S.texSubImage2D(a,b,c,e,f,k,l,m,w)},ab:function(a,b){S.uniform1f(W(a),b)},bb:function(a,b,c){if(2<=x.version)b&&S.uniform1fv(W(a),N,c>>2,b);else{if(288>=b)for(var e=Bd[b-1],f=0;f>2];else e=N.subarray(c>>2,c+4*b>>2);S.uniform1fv(W(a),e)}},Rc:function(a,b){S.uniform1i(W(a),b)},Sc:function(a,b,c){if(2<=x.version)b&&S.uniform1iv(W(a),K,c>>2,b);else{if(288>=b)for(var e=Cd[b-1],f=0;f>2];else e=K.subarray(c>>2,c+4*b>>2);S.uniform1iv(W(a),e)}},Tc:function(a, +b,c){S.uniform2f(W(a),b,c)},Uc:function(a,b,c){if(2<=x.version)b&&S.uniform2fv(W(a),N,c>>2,2*b);else{if(144>=b)for(var e=Bd[2*b-1],f=0;f<2*b;f+=2)e[f]=N[c+4*f>>2],e[f+1]=N[c+(4*f+4)>>2];else e=N.subarray(c>>2,c+8*b>>2);S.uniform2fv(W(a),e)}},Qc:function(a,b,c){S.uniform2i(W(a),b,c)},Pc:function(a,b,c){if(2<=x.version)b&&S.uniform2iv(W(a),K,c>>2,2*b);else{if(144>=b)for(var e=Cd[2*b-1],f=0;f<2*b;f+=2)e[f]=K[c+4*f>>2],e[f+1]=K[c+(4*f+4)>>2];else e=K.subarray(c>>2,c+8*b>>2);S.uniform2iv(W(a),e)}},Oc:function(a, +b,c,e){S.uniform3f(W(a),b,c,e)},Nc:function(a,b,c){if(2<=x.version)b&&S.uniform3fv(W(a),N,c>>2,3*b);else{if(96>=b)for(var e=Bd[3*b-1],f=0;f<3*b;f+=3)e[f]=N[c+4*f>>2],e[f+1]=N[c+(4*f+4)>>2],e[f+2]=N[c+(4*f+8)>>2];else e=N.subarray(c>>2,c+12*b>>2);S.uniform3fv(W(a),e)}},Mc:function(a,b,c,e){S.uniform3i(W(a),b,c,e)},Lc:function(a,b,c){if(2<=x.version)b&&S.uniform3iv(W(a),K,c>>2,3*b);else{if(96>=b)for(var e=Cd[3*b-1],f=0;f<3*b;f+=3)e[f]=K[c+4*f>>2],e[f+1]=K[c+(4*f+4)>>2],e[f+2]=K[c+(4*f+8)>>2];else e= +K.subarray(c>>2,c+12*b>>2);S.uniform3iv(W(a),e)}},Kc:function(a,b,c,e,f){S.uniform4f(W(a),b,c,e,f)},Jc:function(a,b,c){if(2<=x.version)b&&S.uniform4fv(W(a),N,c>>2,4*b);else{if(72>=b){var e=Bd[4*b-1],f=N;c>>=2;for(var k=0;k<4*b;k+=4){var l=c+k;e[k]=f[l];e[k+1]=f[l+1];e[k+2]=f[l+2];e[k+3]=f[l+3]}}else e=N.subarray(c>>2,c+16*b>>2);S.uniform4fv(W(a),e)}},xc:function(a,b,c,e,f){S.uniform4i(W(a),b,c,e,f)},yc:function(a,b,c){if(2<=x.version)b&&S.uniform4iv(W(a),K,c>>2,4*b);else{if(72>=b)for(var e=Cd[4*b- +1],f=0;f<4*b;f+=4)e[f]=K[c+4*f>>2],e[f+1]=K[c+(4*f+4)>>2],e[f+2]=K[c+(4*f+8)>>2],e[f+3]=K[c+(4*f+12)>>2];else e=K.subarray(c>>2,c+16*b>>2);S.uniform4iv(W(a),e)}},zc:function(a,b,c,e){if(2<=x.version)b&&S.uniformMatrix2fv(W(a),!!c,N,e>>2,4*b);else{if(72>=b)for(var f=Bd[4*b-1],k=0;k<4*b;k+=4)f[k]=N[e+4*k>>2],f[k+1]=N[e+(4*k+4)>>2],f[k+2]=N[e+(4*k+8)>>2],f[k+3]=N[e+(4*k+12)>>2];else f=N.subarray(e>>2,e+16*b>>2);S.uniformMatrix2fv(W(a),!!c,f)}},Ac:function(a,b,c,e){if(2<=x.version)b&&S.uniformMatrix3fv(W(a), +!!c,N,e>>2,9*b);else{if(32>=b)for(var f=Bd[9*b-1],k=0;k<9*b;k+=9)f[k]=N[e+4*k>>2],f[k+1]=N[e+(4*k+4)>>2],f[k+2]=N[e+(4*k+8)>>2],f[k+3]=N[e+(4*k+12)>>2],f[k+4]=N[e+(4*k+16)>>2],f[k+5]=N[e+(4*k+20)>>2],f[k+6]=N[e+(4*k+24)>>2],f[k+7]=N[e+(4*k+28)>>2],f[k+8]=N[e+(4*k+32)>>2];else f=N.subarray(e>>2,e+36*b>>2);S.uniformMatrix3fv(W(a),!!c,f)}},Bc:function(a,b,c,e){if(2<=x.version)b&&S.uniformMatrix4fv(W(a),!!c,N,e>>2,16*b);else{if(18>=b){var f=Bd[16*b-1],k=N;e>>=2;for(var l=0;l<16*b;l+=16){var m=e+l;f[l]= +k[m];f[l+1]=k[m+1];f[l+2]=k[m+2];f[l+3]=k[m+3];f[l+4]=k[m+4];f[l+5]=k[m+5];f[l+6]=k[m+6];f[l+7]=k[m+7];f[l+8]=k[m+8];f[l+9]=k[m+9];f[l+10]=k[m+10];f[l+11]=k[m+11];f[l+12]=k[m+12];f[l+13]=k[m+13];f[l+14]=k[m+14];f[l+15]=k[m+15]}}else f=N.subarray(e>>2,e+64*b>>2);S.uniformMatrix4fv(W(a),!!c,f)}},Cc:function(a){a=Xc[a];S.useProgram(a);S.Re=a},Dc:function(a,b){S.vertexAttrib1f(a,b)},Ec:function(a,b){S.vertexAttrib2f(a,N[b>>2],N[b+4>>2])},Fc:function(a,b){S.vertexAttrib3f(a,N[b>>2],N[b+4>>2],N[b+8>>2])}, +Gc:function(a,b){S.vertexAttrib4f(a,N[b>>2],N[b+4>>2],N[b+8>>2],N[b+12>>2])},hc:function(a,b){S.vertexAttribDivisor(a,b)},ic:function(a,b,c,e,f){S.vertexAttribIPointer(a,b,c,e,f)},Hc:function(a,b,c,e,f,k){S.vertexAttribPointer(a,b,c,!!e,f,k)},Ic:function(a,b,c,e){S.viewport(a,b,c,e)},kb:function(a,b,c,e){S.waitSync(cd[a],b,(c>>>0)+4294967296*e)},o:Nd,n:Od,j:Pd,N:Qd,Y:Rd,X:Sd,x:Td,y:Ud,p:Vd,w:Wd,Db:Xd,Eb:Yd,Fb:Zd,mb:(a,b,c,e)=>Hd(a,b,c,e)}; +(function(){function a(c){G=c=c.exports;Fa=G.$c;La();Na=G.bd;Pa.unshift(G.ad);Ua--;r.monitorRunDependencies&&r.monitorRunDependencies(Ua);if(0==Ua&&(null!==Va&&(clearInterval(Va),Va=null),Wa)){var e=Wa;Wa=null;e()}return c}var b={a:$d};Ua++;r.monitorRunDependencies&&r.monitorRunDependencies(Ua);if(r.instantiateWasm)try{return r.instantiateWasm(b,a)}catch(c){Ca("Module.instantiateWasm callback failed with error: "+c),ba(c)}cb(b,function(c){a(c.instance)}).catch(ba);return{}})(); +var qc=r._free=a=>(qc=r._free=G.cd)(a),wd=r._malloc=a=>(wd=r._malloc=G.dd)(a),pc=a=>(pc=G.ed)(a);r.__embind_initialize_bindings=()=>(r.__embind_initialize_bindings=G.fd)();var ae=(a,b)=>(ae=G.gd)(a,b),be=()=>(be=G.hd)(),ce=a=>(ce=G.id)(a);r.dynCall_viji=(a,b,c,e,f)=>(r.dynCall_viji=G.kd)(a,b,c,e,f);r.dynCall_vijiii=(a,b,c,e,f,k,l)=>(r.dynCall_vijiii=G.ld)(a,b,c,e,f,k,l);r.dynCall_viiiiij=(a,b,c,e,f,k,l,m)=>(r.dynCall_viiiiij=G.md)(a,b,c,e,f,k,l,m);r.dynCall_jii=(a,b,c)=>(r.dynCall_jii=G.nd)(a,b,c); +r.dynCall_vij=(a,b,c,e)=>(r.dynCall_vij=G.od)(a,b,c,e);r.dynCall_iiij=(a,b,c,e,f)=>(r.dynCall_iiij=G.pd)(a,b,c,e,f);r.dynCall_iiiij=(a,b,c,e,f,k)=>(r.dynCall_iiiij=G.qd)(a,b,c,e,f,k);r.dynCall_viij=(a,b,c,e,f)=>(r.dynCall_viij=G.rd)(a,b,c,e,f);r.dynCall_viiij=(a,b,c,e,f,k)=>(r.dynCall_viiij=G.sd)(a,b,c,e,f,k);r.dynCall_ji=(a,b)=>(r.dynCall_ji=G.td)(a,b);r.dynCall_iij=(a,b,c,e)=>(r.dynCall_iij=G.ud)(a,b,c,e);r.dynCall_jiiiiii=(a,b,c,e,f,k,l)=>(r.dynCall_jiiiiii=G.vd)(a,b,c,e,f,k,l); +r.dynCall_jiiiiji=(a,b,c,e,f,k,l,m)=>(r.dynCall_jiiiiji=G.wd)(a,b,c,e,f,k,l,m);r.dynCall_iijj=(a,b,c,e,f,k)=>(r.dynCall_iijj=G.xd)(a,b,c,e,f,k);r.dynCall_jiji=(a,b,c,e,f)=>(r.dynCall_jiji=G.yd)(a,b,c,e,f);r.dynCall_viijii=(a,b,c,e,f,k,l)=>(r.dynCall_viijii=G.zd)(a,b,c,e,f,k,l);r.dynCall_iiiiij=(a,b,c,e,f,k,l)=>(r.dynCall_iiiiij=G.Ad)(a,b,c,e,f,k,l);r.dynCall_iiiiijj=(a,b,c,e,f,k,l,m,q)=>(r.dynCall_iiiiijj=G.Bd)(a,b,c,e,f,k,l,m,q); +r.dynCall_iiiiiijj=(a,b,c,e,f,k,l,m,q,w)=>(r.dynCall_iiiiiijj=G.Cd)(a,b,c,e,f,k,l,m,q,w);function Wd(a,b,c,e,f){var k=be();try{Na.get(a)(b,c,e,f)}catch(l){ce(k);if(l!==l+0)throw l;ae(1,0)}}function Od(a,b,c){var e=be();try{return Na.get(a)(b,c)}catch(f){ce(e);if(f!==f+0)throw f;ae(1,0)}}function Ud(a,b,c){var e=be();try{Na.get(a)(b,c)}catch(f){ce(e);if(f!==f+0)throw f;ae(1,0)}}function Nd(a,b){var c=be();try{return Na.get(a)(b)}catch(e){ce(c);if(e!==e+0)throw e;ae(1,0)}} +function Td(a,b){var c=be();try{Na.get(a)(b)}catch(e){ce(c);if(e!==e+0)throw e;ae(1,0)}}function Pd(a,b,c,e){var f=be();try{return Na.get(a)(b,c,e)}catch(k){ce(f);if(k!==k+0)throw k;ae(1,0)}}function Zd(a,b,c,e,f,k,l,m,q,w){var y=be();try{Na.get(a)(b,c,e,f,k,l,m,q,w)}catch(B){ce(y);if(B!==B+0)throw B;ae(1,0)}}function Vd(a,b,c,e){var f=be();try{Na.get(a)(b,c,e)}catch(k){ce(f);if(k!==k+0)throw k;ae(1,0)}} +function Yd(a,b,c,e,f,k,l){var m=be();try{Na.get(a)(b,c,e,f,k,l)}catch(q){ce(m);if(q!==q+0)throw q;ae(1,0)}}function Qd(a,b,c,e,f){var k=be();try{return Na.get(a)(b,c,e,f)}catch(l){ce(k);if(l!==l+0)throw l;ae(1,0)}}function Rd(a,b,c,e,f,k,l){var m=be();try{return Na.get(a)(b,c,e,f,k,l)}catch(q){ce(m);if(q!==q+0)throw q;ae(1,0)}}function Xd(a,b,c,e,f,k){var l=be();try{Na.get(a)(b,c,e,f,k)}catch(m){ce(l);if(m!==m+0)throw m;ae(1,0)}} +function Sd(a,b,c,e,f,k,l,m,q,w){var y=be();try{return Na.get(a)(b,c,e,f,k,l,m,q,w)}catch(B){ce(y);if(B!==B+0)throw B;ae(1,0)}}var de;Wa=function ee(){de||fe();de||(Wa=ee)}; +function fe(){function a(){if(!de&&(de=!0,r.calledRun=!0,!Ga)){eb(Pa);aa(r);if(r.onRuntimeInitialized)r.onRuntimeInitialized();if(r.postRun)for("function"==typeof r.postRun&&(r.postRun=[r.postRun]);r.postRun.length;){var b=r.postRun.shift();Qa.unshift(b)}eb(Qa)}}if(!(0 CanvasKitInit); diff --git a/canvaskit/chromium/canvaskit.wasm b/canvaskit/chromium/canvaskit.wasm new file mode 100644 index 0000000000..390d080c92 Binary files /dev/null and b/canvaskit/chromium/canvaskit.wasm differ diff --git a/canvaskit/skwasm.js b/canvaskit/skwasm.js new file mode 100644 index 0000000000..4833fcf9ba --- /dev/null +++ b/canvaskit/skwasm.js @@ -0,0 +1,169 @@ + +var skwasm = (() => { + var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined; + if (typeof __filename !== 'undefined') _scriptDir = _scriptDir || __filename; + return ( +function(moduleArg = {}) { + +function aa(){d.buffer!=h.buffer&&k();return h}function p(){d.buffer!=h.buffer&&k();return ca}function q(){d.buffer!=h.buffer&&k();return da}function t(){d.buffer!=h.buffer&&k();return ea}function v(){d.buffer!=h.buffer&&k();return fa}function ha(){d.buffer!=h.buffer&&k();return ia}var w=moduleArg,ja,ka;w.ready=new Promise((a,b)=>{ja=a;ka=b}); +var la=Object.assign({},w),ma="./this.program",na=(a,b)=>{throw b;},oa="object"==typeof window,pa="function"==typeof importScripts,x="object"==typeof process&&"object"==typeof process.versions&&"string"==typeof process.versions.node,A=w.ENVIRONMENT_IS_PTHREAD||!1,C="";function qa(a){return w.locateFile?w.locateFile(a,C):C+a}var ra,sa,ta; +if(x){var fs=require("fs"),ua=require("path");C=pa?ua.dirname(C)+"/":__dirname+"/";ra=(b,c)=>{b=b.startsWith("file://")?new URL(b):ua.normalize(b);return fs.readFileSync(b,c?void 0:"utf8")};ta=b=>{b=ra(b,!0);b.buffer||(b=new Uint8Array(b));return b};sa=(b,c,e,f=!0)=>{b=b.startsWith("file://")?new URL(b):ua.normalize(b);fs.readFile(b,f?void 0:"utf8",(g,l)=>{g?e(g):c(f?l.buffer:l)})};!w.thisProgram&&1{process.exitCode= +b;throw c;};w.inspect=()=>"[Emscripten Module object]";let a;try{a=require("worker_threads")}catch(b){throw console.error('The "worker_threads" module is not supported in this node.js build - perhaps a newer version is needed?'),b;}global.Worker=a.Worker}else if(oa||pa)pa?C=self.location.href:"undefined"!=typeof document&&document.currentScript&&(C=document.currentScript.src),_scriptDir&&(C=_scriptDir),0!==C.indexOf("blob:")?C=C.substr(0,C.replace(/[?#].*/,"").lastIndexOf("/")+1):C="",x||(ra=a=>{var b= +new XMLHttpRequest;b.open("GET",a,!1);b.send(null);return b.responseText},pa&&(ta=a=>{var b=new XMLHttpRequest;b.open("GET",a,!1);b.responseType="arraybuffer";b.send(null);return new Uint8Array(b.response)}),sa=(a,b,c)=>{var e=new XMLHttpRequest;e.open("GET",a,!0);e.responseType="arraybuffer";e.onload=()=>{200==e.status||0==e.status&&e.response?b(e.response):c()};e.onerror=c;e.send(null)});x&&"undefined"==typeof performance&&(global.performance=require("perf_hooks").performance); +var va=console.log.bind(console),wa=console.error.bind(console);x&&(va=(...a)=>fs.writeSync(1,a.join(" ")+"\n"),wa=(...a)=>fs.writeSync(2,a.join(" ")+"\n"));var xa=w.print||va,D=w.printErr||wa;Object.assign(w,la);la=null;w.thisProgram&&(ma=w.thisProgram);w.quit&&(na=w.quit);var ya;w.wasmBinary&&(ya=w.wasmBinary);var noExitRuntime=w.noExitRuntime||!0;"object"!=typeof WebAssembly&&za("no native wasm support detected");var d,F,Aa,Ba=!1,Ca,h,ca,Da,Ea,da,ea,fa,ia; +function k(){var a=d.buffer;w.HEAP8=h=new Int8Array(a);w.HEAP16=Da=new Int16Array(a);w.HEAP32=da=new Int32Array(a);w.HEAPU8=ca=new Uint8Array(a);w.HEAPU16=Ea=new Uint16Array(a);w.HEAPU32=ea=new Uint32Array(a);w.HEAPF32=fa=new Float32Array(a);w.HEAPF64=ia=new Float64Array(a)}var Fa=w.INITIAL_MEMORY||16777216;65536<=Fa||za("INITIAL_MEMORY should be larger than STACK_SIZE, was "+Fa+"! (STACK_SIZE=65536)"); +if(A)d=w.wasmMemory;else if(w.wasmMemory)d=w.wasmMemory;else if(d=new WebAssembly.Memory({initial:Fa/65536,maximum:32768,shared:!0}),!(d.buffer instanceof SharedArrayBuffer))throw D("requested a shared WebAssembly.Memory but the returned buffer is not a SharedArrayBuffer, indicating that while the browser has SharedArrayBuffer it does not have WebAssembly threads support - you may need to set a flag"),x&&D("(on node you may need: --experimental-wasm-threads --experimental-wasm-bulk-memory and/or recent version)"), +Error("bad memory");k();Fa=d.buffer.byteLength;var G,Ga=[],Ha=[],Ia=[],Ja=0;function Ka(){return noExitRuntime||0{if(!b.ok)throw"failed to load wasm binary file at '"+a+"'";return b.arrayBuffer()}).catch(()=>Ra(a));if(sa)return new Promise((b,c)=>{sa(a,e=>b(new Uint8Array(e)),c)})}return Promise.resolve().then(()=>Ra(a))}function Ta(a,b,c){return Sa(a).then(e=>WebAssembly.instantiate(e,b)).then(e=>e).then(c,e=>{D("failed to asynchronously prepare wasm: "+e);za(e)})} +function Ua(a,b){var c=Qa;return ya||"function"!=typeof WebAssembly.instantiateStreaming||Pa(c)||c.startsWith("file://")||x||"function"!=typeof fetch?Ta(c,a,b):fetch(c,{credentials:"same-origin"}).then(e=>WebAssembly.instantiateStreaming(e,a).then(b,function(f){D("wasm streaming compile failed: "+f);D("falling back to ArrayBuffer instantiation");return Ta(c,a,b)}))}function Va(a){this.name="ExitStatus";this.message=`Program terminated with exit(${a})`;this.status=a} +function Wa(a){a.terminate();a.onmessage=()=>{}}function Xa(a){(a=I.g[a])||za();I.va(a)}function Ya(a){var b=I.la();if(!b)return 6;I.u.push(b);I.g[a.m]=b;b.m=a.m;var c={cmd:"run",start_routine:a.wa,arg:a.ia,pthread_ptr:a.m};c.D=a.D;c.P=a.P;x&&b.unref();b.postMessage(c,a.Da);return 0} +var Za="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0,$a=(a,b,c)=>{var e=b+c;for(c=b;a[c]&&!(c>=e);)++c;if(16f?e+=String.fromCharCode(f):(f-=65536,e+=String.fromCharCode(55296|f>>10,56320|f&1023))}}else e+=String.fromCharCode(f)}return e}, +J=(a,b)=>a?$a(p(),a,b):"";function ab(a){if(A)return K(1,1,a);Ca=a;if(!Ka()){I.ya();if(w.onExit)w.onExit(a);Ba=!0}na(a,new Va(a))} +var cb=a=>{Ca=a;if(A)throw bb(a),"unwind";ab(a)},I={o:[],u:[],fa:[],g:{},O:function(){A?I.qa():I.pa()},pa:function(){for(var a=1;a--;)I.V();Ga.unshift(()=>{Na();I.sa(()=>Oa())})},qa:function(){I.receiveObjectTransfer=I.ua;I.threadInitTLS=I.ea;I.setExitStatus=I.da;noExitRuntime=!1},da:function(a){Ca=a},Ka:["$terminateWorker"],ya:function(){for(var a of I.u)Wa(a);for(a of I.o)Wa(a);I.o=[];I.u=[];I.g=[]},va:function(a){var b=a.m;delete I.g[b];I.o.push(a);I.u.splice(I.u.indexOf(a),1);a.m=0;db(b)},ua:function(a){"undefined"!= +typeof eb&&(Object.assign(L,a.P),!w.canvas&&a.D&&L[a.D]&&(w.canvas=L[a.D].F,w.canvas.id=a.D))},ea:function(){I.fa.forEach(a=>a())},$:a=>new Promise(b=>{a.onmessage=g=>{g=g.data;var l=g.cmd;if(g.targetThread&&g.targetThread!=fb()){var n=I.g[g.Ja];n?n.postMessage(g,g.transferList):D('Internal error! Worker sent a message "'+l+'" to target pthread '+g.targetThread+", but that thread no longer exists!")}else if("checkMailbox"===l)gb();else if("spawnThread"===l)Ya(g);else if("cleanupThread"===l)Xa(g.thread); +else if("killThread"===l)g=g.thread,l=I.g[g],delete I.g[g],Wa(l),db(g),I.u.splice(I.u.indexOf(l),1),l.m=0;else if("cancelThread"===l)I.g[g.thread].postMessage({cmd:"cancel"});else if("loaded"===l)a.loaded=!0,x&&!a.m&&a.unref(),b(a);else if("alert"===l)alert("Thread "+g.threadId+": "+g.text);else if("setimmediate"===g.target)a.postMessage(g);else if("callHandler"===l)w[g.handler](...g.args);else l&&D("worker sent an unknown command "+l)};a.onerror=g=>{D("worker sent an error! "+g.filename+":"+g.lineno+ +": "+g.message);throw g;};x&&(a.on("message",function(g){a.onmessage({data:g})}),a.on("error",function(g){a.onerror(g)}));var c=[],e=["onExit","onAbort","print","printErr"],f;for(f of e)w.hasOwnProperty(f)&&c.push(f);a.postMessage({cmd:"load",handlers:c,urlOrBlob:w.mainScriptUrlOrBlob||_scriptDir,wasmMemory:d,wasmModule:Aa})}),sa:function(a){if(A)return a();Promise.all(I.o.map(I.$)).then(a)},V:function(){var a=qa("skwasm.worker.js");a=new Worker(a);I.o.push(a)},la:function(){0==I.o.length&&(I.V(), +I.$(I.o[0]));return I.o.pop()}};w.PThread=I;var hb=a=>{for(;0>2];a=q()[a+56>>2];ib(b,b-a);M(b)};function bb(a){if(A)return K(2,0,a);cb(a)}w.invokeEntryPoint=function(a,b){a=G.get(a)(b);Ka()?I.da(a):jb(a)};function kb(a){this.C=a-24;this.ta=function(b){t()[this.C+4>>2]=b};this.ra=function(b){t()[this.C+8>>2]=b};this.O=function(b,c){this.ma();this.ta(b);this.ra(c)};this.ma=function(){t()[this.C+16>>2]=0}}var lb=0,mb=0; +function nb(a,b,c,e){return A?K(3,1,a,b,c,e):ob(a,b,c,e)} +function ob(a,b,c,e){if("undefined"==typeof SharedArrayBuffer)return D("Current environment does not support SharedArrayBuffer, pthreads are not available!"),6;var f=[],g=0,l=b?t()[b+40>>2]:0;4294967295==l?l="#canvas":l&&(l=J(l).trim());l&&(l=l.split(","));var n={},r=w.canvas?w.canvas.id:"",u;for(u in l){var y=l[u].trim();try{if("#canvas"==y){if(!w.canvas){D('pthread_create: could not find canvas with ID "'+y+'" to transfer to thread!');g=28;break}y=w.canvas.id}if(L[y]){var V=L[y];L[y]=null;w.canvas instanceof +OffscreenCanvas&&y===w.canvas.id&&(w.canvas=null)}else if(!A){var E=w.canvas&&w.canvas.id===y?w.canvas:document.querySelector(y);if(!E){D('pthread_create: could not find canvas with ID "'+y+'" to transfer to thread!');g=28;break}if(E.W){D('pthread_create: cannot transfer canvas with ID "'+y+'" to thread, since the current thread does not have control over it!');g=63;break}if(E.transferControlToOffscreen)E.h||(E.h=pb(12),q()[E.h>>2]=E.width,q()[E.h+4>>2]=E.height,q()[E.h+8>>2]=0),V={F:E.transferControlToOffscreen(), +h:E.h,id:E.id},E.W=!0;else return D('pthread_create: cannot transfer control of canvas "'+y+'" to pthread, because current browser does not support OffscreenCanvas!'),D("pthread_create: Build with -sOFFSCREEN_FRAMEBUFFER to enable fallback proxying of GL commands from pthread to main thread."),52}V&&(f.push(V.F),n[V.id]=V)}catch(m){return D('pthread_create: failed to transfer control of canvas "'+y+'" to OffscreenCanvas! Error: '+m),28}}if(A&&(0===f.length||g))return nb(a,b,c,e);if(g)return g;for(E of Object.values(n))q()[E.h+ +8>>2]=a;a={wa:c,m:a,ia:e,D:r,P:n,Da:f};return A?(a.Fa="spawnThread",postMessage(a,f),0):Ya(a)}function qb(a,b,c){return A?K(4,1,a,b,c):0}function rb(a,b){if(A)return K(5,1,a,b)}function sb(a,b,c){return A?K(6,1,a,b,c):0}function tb(a,b,c,e){if(A)return K(7,1,a,b,c,e)}var ub=a=>{if(!Ba)try{if(a(),!Ka())try{A?jb(Ca):cb(Ca)}catch(b){b instanceof Va||"unwind"==b||na(1,b)}}catch(b){b instanceof Va||"unwind"==b||na(1,b)}}; +function vb(a){"function"===typeof Atomics.Ea&&(Atomics.Ea(q(),a>>2,a).value.then(gb),a+=128,Atomics.store(q(),a>>2,1))}w.__emscripten_thread_mailbox_await=vb;function gb(){var a=fb();a&&(vb(a),ub(()=>wb()))}w.checkMailbox=gb; +var xb=a=>{var b=N();a=a();M(b);return a},yb=a=>{for(var b=0,c=0;c=e?b++:2047>=e?b+=2:55296<=e&&57343>=e?(b+=4,++c):b+=3}return b},zb=(a,b,c,e)=>{if(!(0=l){var n=a.charCodeAt(++g);l=65536+((l&1023)<<10)|n&1023}if(127>=l){if(c>=e)break;b[c++]=l}else{if(2047>=l){if(c+1>=e)break;b[c++]=192|l>>6}else{if(65535>=l){if(c+2>=e)break;b[c++]=224|l>>12}else{if(c+3>=e)break; +b[c++]=240|l>>18;b[c++]=128|l>>12&63}b[c++]=128|l>>6&63}b[c++]=128|l&63}}b[c]=0;return c-f},Ab=a=>{var b=yb(a)+1,c=pb(b);c&&zb(a,p(),c,b);return c};function Bb(a,b,c,e){b=b?J(b):"";xb(function(){var f=Cb(12),g=0;b&&(g=Ab(b));q()[f>>2]=g;q()[f+4>>2]=c;q()[f+8>>2]=e;Db(a,654311424,0,g,f)})} +function Eb(a){var b=a.getExtension("ANGLE_instanced_arrays");b&&(a.vertexAttribDivisor=function(c,e){b.vertexAttribDivisorANGLE(c,e)},a.drawArraysInstanced=function(c,e,f,g){b.drawArraysInstancedANGLE(c,e,f,g)},a.drawElementsInstanced=function(c,e,f,g,l){b.drawElementsInstancedANGLE(c,e,f,g,l)})} +function Fb(a){var b=a.getExtension("OES_vertex_array_object");b&&(a.createVertexArray=function(){return b.createVertexArrayOES()},a.deleteVertexArray=function(c){b.deleteVertexArrayOES(c)},a.bindVertexArray=function(c){b.bindVertexArrayOES(c)},a.isVertexArray=function(c){return b.isVertexArrayOES(c)})}function Gb(a){var b=a.getExtension("WEBGL_draw_buffers");b&&(a.drawBuffers=function(c,e){b.drawBuffersWEBGL(c,e)})} +function Hb(a){a.X=a.getExtension("WEBGL_draw_instanced_base_vertex_base_instance")}function Ib(a){a.ba=a.getExtension("WEBGL_multi_draw_instanced_base_vertex_base_instance")}function Jb(a){a.Ia=a.getExtension("WEBGL_multi_draw")}var Kb=1,Lb=[],O=[],Mb=[],Nb=[],P=[],Q=[],Ob=[],Pb={},L={},R=[],Qb=[],Rb={},Sb={},Tb=4;function S(a){Ub||(Ub=a)}function Vb(a){for(var b=Kb++,c=a.length;c>2]=fb();var e={handle:c,attributes:b,version:b.aa,s:a};a.canvas&&(a.canvas.H=e);Pb[c]=e;("undefined"==typeof b.Z||b.Z)&&Yb(e);return c} +function Yb(a){a||(a=T);if(!a.oa){a.oa=!0;var b=a.s;Eb(b);Fb(b);Gb(b);Hb(b);Ib(b);2<=a.version&&(b.Y=b.getExtension("EXT_disjoint_timer_query_webgl2"));if(2>a.version||!b.Y)b.Y=b.getExtension("EXT_disjoint_timer_query");Jb(b);(b.getSupportedExtensions()||[]).forEach(function(c){c.includes("lose_context")||c.includes("debug")||b.getExtension(c)})}}var eb={},Ub,T; +function Zb(a){a=2>2]=b,q()[e.h+4>>2]=c);if(e.F||!e.W)e.F&&(e=e.F),a=!1,e.H&&e.H.s&&(a=e.H.s.getParameter(2978),a=0===a[0]&&0===a[1]&&a[2]===e.width&&a[3]===e.height),e.width=b,e.height=c,a&&e.H.s.viewport(0,0,b,c);else return e.h?(e=q()[e.h+8>>2],Bb(e,a,b,c),1):-4;return 0} +function ac(a,b,c){return A?K(8,1,a,b,c):$b(a,b,c)}function bc(a,b,c,e,f,g,l,n){return A?K(9,1,a,b,c,e,f,g,l,n):-52}function cc(a,b,c,e,f,g,l){if(A)return K(10,1,a,b,c,e,f,g,l)}function dc(a,b){U.bindFramebuffer(a,Mb[b])}function ec(a){U.clear(a)}function fc(a,b,c,e){U.clearColor(a,b,c,e)}function gc(a){U.clearStencil(a)} +function hc(a,b,c){if(b){var e=void 0;switch(a){case 36346:e=1;break;case 36344:0!=c&&1!=c&&S(1280);return;case 34814:case 36345:e=0;break;case 34466:var f=U.getParameter(34467);e=f?f.length:0;break;case 33309:if(2>T.version){S(1282);return}e=2*(U.getSupportedExtensions()||[]).length;break;case 33307:case 33308:if(2>T.version){S(1280);return}e=33307==a?3:0}if(void 0===e)switch(f=U.getParameter(a),typeof f){case "number":e=f;break;case "boolean":e=f?1:0;break;case "string":S(1280);return;case "object":if(null=== +f)switch(a){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 36662:case 36663:case 35053:case 35055:case 36010:case 35097:case 35869:case 32874:case 36389:case 35983:case 35368:case 34068:e=0;break;default:S(1280);return}else{if(f instanceof Float32Array||f instanceof Uint32Array||f instanceof Int32Array||f instanceof Array){for(a=0;a>2]=f[a];break;case 2:v()[b+4*a>>2]=f[a];break;case 4:aa()[b+a>>0]=f[a]?1:0}return}try{e=f.name| +0}catch(g){S(1280);D("GL_INVALID_ENUM in glGet"+c+"v: Unknown object returned from WebGL getParameter("+a+")! (error: "+g+")");return}}break;default:S(1280);D("GL_INVALID_ENUM in glGet"+c+"v: Native code calling glGet"+c+"v("+a+") and it returns "+f+" of type "+typeof f+"!");return}switch(c){case 1:c=e;t()[b>>2]=c;t()[b+4>>2]=(c-t()[b>>2])/4294967296;break;case 0:q()[b>>2]=e;break;case 2:v()[b>>2]=e;break;case 4:aa()[b>>0]=e?1:0}}else S(1281)}function ic(a,b){hc(a,b,0)} +function K(a,b){var c=arguments.length-2,e=arguments;return xb(()=>{for(var f=Cb(8*c),g=f>>3,l=0;l{if(!mc){var a={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:("object"==typeof navigator&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",_:ma||"./this.program"},b;for(b in lc)void 0===lc[b]?delete a[b]:a[b]=lc[b];var c=[];for(b in a)c.push(`${b}=${a[b]}`);mc=c}return mc},mc; +function oc(a,b){if(A)return K(11,1,a,b);var c=0;nc().forEach(function(e,f){var g=b+c;f=t()[a+4*f>>2]=g;for(g=0;g>0]=e.charCodeAt(g);aa()[f>>0]=0;c+=e.length+1});return 0}function pc(a,b){if(A)return K(12,1,a,b);var c=nc();t()[a>>2]=c.length;var e=0;c.forEach(function(f){e+=f.length+1});t()[b>>2]=e;return 0}function qc(a){return A?K(13,1,a):52}function rc(a,b,c,e,f,g){return A?K(14,1,a,b,c,e,f,g):52}function sc(a,b,c,e){return A?K(15,1,a,b,c,e):52} +function tc(a,b,c,e,f){return A?K(16,1,a,b,c,e,f):70}var uc=[null,[],[]];function vc(a,b,c,e){if(A)return K(17,1,a,b,c,e);for(var f=0,g=0;g>2],n=t()[b+4>>2];b+=8;for(var r=0;r>2]=f;return 0}function wc(a){U.bindVertexArray(Ob[a])}function xc(a,b){for(var c=0;c>2];U.deleteVertexArray(Ob[e]);Ob[e]=null}}var yc=[]; +function zc(a,b,c,e){U.drawElements(a,b,c,e)}function Ac(a,b,c,e){for(var f=0;f>2]=l}}function Bc(a,b){Ac(a,b,"createVertexArray",Ob)}function Cc(a){return"]"==a.slice(-1)&&a.lastIndexOf("[")}function Dc(a){a-=5120;0==a?a=aa():1==a?a=p():2==a?(d.buffer!=h.buffer&&k(),a=Da):4==a?a=q():6==a?a=v():5==a||28922==a||28520==a||30779==a||30782==a?a=t():(d.buffer!=h.buffer&&k(),a=Ea);return a} +function Ec(a,b,c,e,f){a=Dc(a);var g=31-Math.clz32(a.BYTES_PER_ELEMENT),l=Tb;return a.subarray(f>>g,f+e*(c*({5:3,6:4,8:2,29502:3,29504:4,26917:2,26918:2,29846:3,29847:4}[b-6402]||1)*(1<>g)}function W(a){var b=U.ka;if(b){var c=b.G[a];"number"==typeof c&&(b.G[a]=c=U.getUniformLocation(b,b.ga[a]+(00===a%4&&(0!==a%100||0===a%400),Qc=[31,29,31,30,31,30,31,31,30,31,30,31],Rc=[31,28,31,30,31,30,31,31,30,31,30,31];function Sc(a){var b=Array(yb(a)+1);zb(a,b,0,b.length);return b} +var Tc=(a,b)=>{aa().set(a,b)},Uc=(a,b,c,e)=>{function f(m,z,B){for(m="number"==typeof m?m.toString():m||"";m.lengthHc?-1:0ba-m.getDate())z-=ba-m.getDate()+1,m.setDate(1),11>B?m.setMonth(B+1):(m.setMonth(0),m.setFullYear(m.getFullYear()+1));else{m.setDate(m.getDate()+z);break}}B=new Date(m.getFullYear()+1,0,4);z=n(new Date(m.getFullYear(), +0,4));B=n(B);return 0>=l(z,m)?0>=l(B,m)?m.getFullYear()+1:m.getFullYear():m.getFullYear()-1}var u=q()[e+40>>2];e={Ba:q()[e>>2],Aa:q()[e+4>>2],L:q()[e+8>>2],T:q()[e+12>>2],M:q()[e+16>>2],A:q()[e+20>>2],l:q()[e+24>>2],v:q()[e+28>>2],La:q()[e+32>>2],za:q()[e+36>>2],Ca:u?J(u):""};c=J(c);u={"%c":"%a %b %d %H:%M:%S %Y","%D":"%m/%d/%y","%F":"%Y-%m-%d","%h":"%b","%r":"%I:%M:%S %p","%R":"%H:%M","%T":"%H:%M:%S","%x":"%m/%d/%y","%X":"%H:%M:%S","%Ec":"%c","%EC":"%C","%Ex":"%m/%d/%y","%EX":"%H:%M:%S","%Ey":"%y", +"%EY":"%Y","%Od":"%d","%Oe":"%e","%OH":"%H","%OI":"%I","%Om":"%m","%OM":"%M","%OS":"%S","%Ou":"%u","%OU":"%U","%OV":"%V","%Ow":"%w","%OW":"%W","%Oy":"%y"};for(var y in u)c=c.replace(new RegExp(y,"g"),u[y]);var V="Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),E="January February March April May June July August September October November December".split(" ");u={"%a":m=>V[m.l].substring(0,3),"%A":m=>V[m.l],"%b":m=>E[m.M].substring(0,3),"%B":m=>E[m.M],"%C":m=>g((m.A+1900)/100| +0,2),"%d":m=>g(m.T,2),"%e":m=>f(m.T,2," "),"%g":m=>r(m).toString().substring(2),"%G":m=>r(m),"%H":m=>g(m.L,2),"%I":m=>{m=m.L;0==m?m=12:12{for(var z=0,B=0;B<=m.M-1;z+=(Pc(m.A+1900)?Qc:Rc)[B++]);return g(m.T+z,3)},"%m":m=>g(m.M+1,2),"%M":m=>g(m.Aa,2),"%n":()=>"\n","%p":m=>0<=m.L&&12>m.L?"AM":"PM","%S":m=>g(m.Ba,2),"%t":()=>"\t","%u":m=>m.l||7,"%U":m=>g(Math.floor((m.v+7-m.l)/7),2),"%V":m=>{var z=Math.floor((m.v+7-(m.l+6)%7)/7);2>=(m.l+371-m.v-2)%7&&z++;if(z)53==z&& +(B=(m.l+371-m.v)%7,4==B||3==B&&Pc(m.A)||(z=1));else{z=52;var B=(m.l+7-m.v-1)%7;(4==B||5==B&&Pc(m.A%400-1))&&z++}return g(z,2)},"%w":m=>m.l,"%W":m=>g(Math.floor((m.v+7-(m.l+6)%7)/7),2),"%y":m=>(m.A+1900).toString().substring(2),"%Y":m=>m.A+1900,"%z":m=>{m=m.za;var z=0<=m;m=Math.abs(m)/60;return(z?"+":"-")+String("0000"+(m/60*100+m%60)).slice(-4)},"%Z":m=>m.Ca,"%%":()=>"%"};c=c.replace(/%%/g,"\x00\x00");for(y in u)c.includes(y)&&(c=c.replace(new RegExp(y,"g"),u[y](e)));c=c.replace(/\0\0/g,"%");y=Sc(c); +if(y.length>b)return 0;Tc(y,a);return y.length-1},Vc=void 0,Wc=[];I.O();for(var U,Y=0;32>Y;++Y)yc.push(Array(Y));var Xc=new Float32Array(288);for(Y=0;288>Y;++Y)X[Y]=Xc.subarray(0,Y+1);var Yc=new Int32Array(288);for(Y=0;288>Y;++Y)Fc[Y]=Yc.subarray(0,Y+1); +(function(){const a=new Map,b=new Map;Oc=function(c,e,f){I.g[c].postMessage({S:"setAssociatedObject",R:e,object:f},[f])};Lc=function(c){return b.get(c)};Mc=function(c){function e({data:f}){var g=f.S;if(g)switch(g){case "onRenderComplete":Zc(f.xa,f.ja,f.na);break;case "setAssociatedObject":b.set(f.R,f.object);break;case "disposeAssociatedObject":f=f.R;g=b.get(f);g.close&&g.close();b.delete(f);break;default:console.warn(`unrecognized skwasm message: ${g}`)}}c?I.g[c].addEventListener("message",e):addEventListener("message", +e)};Jc=function(c,e){c=new OffscreenCanvas(c,e);e=Wb(c);a.set(e,c);return e};Nc=function(c,e,f){c=a.get(c);c.width=e;c.height=f};Gc=async function(c,e,f,g,l){e=a.get(e);g=await createImageBitmap(e,0,0,g,l);postMessage({S:"onRenderComplete",xa:c,ja:f,na:g},[g])};Ic=function(c,e,f){const g=T.s,l=g.createTexture();g.bindTexture(g.TEXTURE_2D,l);g.pixelStorei(g.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0);g.texImage2D(g.TEXTURE_2D,0,g.RGBA,e,f,0,g.RGBA,g.UNSIGNED_BYTE,c);g.pixelStorei(g.UNPACK_PREMULTIPLY_ALPHA_WEBGL, +!1);g.bindTexture(g.TEXTURE_2D,null);c=Vb(P);P[c]=l;return c};Kc=function(c,e){I.g[c].postMessage({S:"disposeAssociatedObject",R:e})}})(); +var $c=[null,ab,bb,nb,qb,rb,sb,tb,ac,bc,cc,oc,pc,qc,rc,sc,tc,vc],md={__cxa_throw:function(a,b,c){(new kb(a)).O(b,c);lb=a;mb++;throw lb;},__emscripten_init_main_thread_js:function(a){ad(a,!pa,1,!oa,65536,!1);I.ea()},__emscripten_thread_cleanup:function(a){A?postMessage({cmd:"cleanupThread",thread:a}):Xa(a)},__pthread_create_js:ob,__syscall_fcntl64:qb,__syscall_fstat64:rb,__syscall_ioctl:sb,__syscall_openat:tb,_emscripten_get_now_is_monotonic:()=>!0,_emscripten_notify_mailbox_postmessage:function(a, +b){a==b?setTimeout(()=>gb()):A?postMessage({targetThread:a,cmd:"checkMailbox"}):(a=I.g[a])&&a.postMessage({cmd:"checkMailbox"})},_emscripten_set_offscreencanvas_size:function(a,b,c){return Zb(a)?$b(a,b,c):ac(a,b,c)},_emscripten_thread_mailbox_await:vb,_emscripten_thread_set_strongref:function(a){x&&I.g[a].ref()},_emscripten_throw_longjmp:()=>{throw Infinity;},_mmap_js:bc,_munmap_js:cc,abort:()=>{za("")},emscripten_check_blocking_allowed:function(){},emscripten_exit_with_live_runtime:()=>{Ja+=1;throw"unwind"; +},emscripten_get_now:()=>performance.timeOrigin+performance.now(),emscripten_glBindFramebuffer:dc,emscripten_glClear:ec,emscripten_glClearColor:fc,emscripten_glClearStencil:gc,emscripten_glGetIntegerv:ic,emscripten_receive_on_main_thread_js:function(a,b,c,e){I.Ha=b;kc.length=c;b=e>>3;for(e=0;e{var b=p().length;a>>>=0;if(a<=b||2147483648=c;c*=2){var e=b*(1+.2/c);e=Math.min(e,a+100663296);var f=Math; +e=Math.max(a,e);a:{f=f.min.call(f,2147483648,e+(65536-e%65536)%65536)-d.buffer.byteLength+65535>>>16;try{d.grow(f);k();var g=1;break a}catch(l){}g=void 0}if(g)return!0}return!1},emscripten_webgl_enable_extension:function(a,b){a=Pb[a];b=J(b);b.startsWith("GL_")&&(b=b.substr(3));"ANGLE_instanced_arrays"==b&&Eb(U);"OES_vertex_array_object"==b&&Fb(U);"WEBGL_draw_buffers"==b&&Gb(U);"WEBGL_draw_instanced_base_vertex_base_instance"==b&&Hb(U);"WEBGL_multi_draw_instanced_base_vertex_base_instance"==b&&Ib(U); +"WEBGL_multi_draw"==b&&Jb(U);return!!a.s.getExtension(b)},emscripten_webgl_get_current_context:function(){return T?T.handle:0},emscripten_webgl_make_context_current:function(a){T=Pb[a];w.Ga=U=T&&T.s;return!a||U?0:-5},environ_get:oc,environ_sizes_get:pc,exit:cb,fd_close:qc,fd_pread:rc,fd_read:sc,fd_seek:tc,fd_write:vc,glActiveTexture:function(a){U.activeTexture(a)},glAttachShader:function(a,b){U.attachShader(O[a],Q[b])},glBindAttribLocation:function(a,b,c){U.bindAttribLocation(O[a],b,J(c))},glBindBuffer:function(a, +b){35051==a?U.N=b:35052==a&&(U.B=b);U.bindBuffer(a,Lb[b])},glBindFramebuffer:dc,glBindRenderbuffer:function(a,b){U.bindRenderbuffer(a,Nb[b])},glBindSampler:function(a,b){U.bindSampler(a,R[b])},glBindTexture:function(a,b){U.bindTexture(a,P[b])},glBindVertexArray:wc,glBindVertexArrayOES:wc,glBlendColor:function(a,b,c,e){U.blendColor(a,b,c,e)},glBlendEquation:function(a){U.blendEquation(a)},glBlendFunc:function(a,b){U.blendFunc(a,b)},glBlitFramebuffer:function(a,b,c,e,f,g,l,n,r,u){U.blitFramebuffer(a, +b,c,e,f,g,l,n,r,u)},glBufferData:function(a,b,c,e){2<=T.version?c&&b?U.bufferData(a,p(),e,c,b):U.bufferData(a,b,e):U.bufferData(a,c?p().subarray(c,c+b):b,e)},glBufferSubData:function(a,b,c,e){2<=T.version?c&&U.bufferSubData(a,b,p(),e,c):U.bufferSubData(a,b,p().subarray(e,e+c))},glCheckFramebufferStatus:function(a){return U.checkFramebufferStatus(a)},glClear:ec,glClearColor:fc,glClearStencil:gc,glClientWaitSync:function(a,b,c,e){return U.clientWaitSync(Qb[a],b,(c>>>0)+4294967296*e)},glColorMask:function(a, +b,c,e){U.colorMask(!!a,!!b,!!c,!!e)},glCompileShader:function(a){U.compileShader(Q[a])},glCompressedTexImage2D:function(a,b,c,e,f,g,l,n){2<=T.version?U.B||!l?U.compressedTexImage2D(a,b,c,e,f,g,l,n):U.compressedTexImage2D(a,b,c,e,f,g,p(),n,l):U.compressedTexImage2D(a,b,c,e,f,g,n?p().subarray(n,n+l):null)},glCompressedTexSubImage2D:function(a,b,c,e,f,g,l,n,r){2<=T.version?U.B||!n?U.compressedTexSubImage2D(a,b,c,e,f,g,l,n,r):U.compressedTexSubImage2D(a,b,c,e,f,g,l,p(),r,n):U.compressedTexSubImage2D(a, +b,c,e,f,g,l,r?p().subarray(r,r+n):null)},glCopyBufferSubData:function(a,b,c,e,f){U.copyBufferSubData(a,b,c,e,f)},glCopyTexSubImage2D:function(a,b,c,e,f,g,l,n){U.copyTexSubImage2D(a,b,c,e,f,g,l,n)},glCreateProgram:function(){var a=Vb(O),b=U.createProgram();b.name=a;b.K=b.I=b.J=0;b.U=1;O[a]=b;return a},glCreateShader:function(a){var b=Vb(Q);Q[b]=U.createShader(a);return b},glCullFace:function(a){U.cullFace(a)},glDeleteBuffers:function(a,b){for(var c=0;c>2],f=Lb[e];f&&(U.deleteBuffer(f), +f.name=0,Lb[e]=null,e==U.N&&(U.N=0),e==U.B&&(U.B=0))}},glDeleteFramebuffers:function(a,b){for(var c=0;c>2],f=Mb[e];f&&(U.deleteFramebuffer(f),f.name=0,Mb[e]=null)}},glDeleteProgram:function(a){if(a){var b=O[a];b?(U.deleteProgram(b),b.name=0,O[a]=null):S(1281)}},glDeleteRenderbuffers:function(a,b){for(var c=0;c>2],f=Nb[e];f&&(U.deleteRenderbuffer(f),f.name=0,Nb[e]=null)}},glDeleteSamplers:function(a,b){for(var c=0;c>2],f=R[e]; +f&&(U.deleteSampler(f),f.name=0,R[e]=null)}},glDeleteShader:function(a){if(a){var b=Q[a];b?(U.deleteShader(b),Q[a]=null):S(1281)}},glDeleteSync:function(a){if(a){var b=Qb[a];b?(U.deleteSync(b),b.name=0,Qb[a]=null):S(1281)}},glDeleteTextures:function(a,b){for(var c=0;c>2],f=P[e];f&&(U.deleteTexture(f),f.name=0,P[e]=null)}},glDeleteVertexArrays:xc,glDeleteVertexArraysOES:xc,glDepthMask:function(a){U.depthMask(!!a)},glDisable:function(a){U.disable(a)},glDisableVertexAttribArray:function(a){U.disableVertexAttribArray(a)}, +glDrawArrays:function(a,b,c){U.drawArrays(a,b,c)},glDrawArraysInstanced:function(a,b,c,e){U.drawArraysInstanced(a,b,c,e)},glDrawArraysInstancedBaseInstanceWEBGL:function(a,b,c,e,f){U.X.drawArraysInstancedBaseInstanceWEBGL(a,b,c,e,f)},glDrawBuffers:function(a,b){for(var c=yc[a],e=0;e>2];U.drawBuffers(c)},glDrawElements:zc,glDrawElementsInstanced:function(a,b,c,e,f){U.drawElementsInstanced(a,b,c,e,f)},glDrawElementsInstancedBaseVertexBaseInstanceWEBGL:function(a,b,c,e,f,g,l){U.X.drawElementsInstancedBaseVertexBaseInstanceWEBGL(a, +b,c,e,f,g,l)},glDrawRangeElements:function(a,b,c,e,f,g){zc(a,e,f,g)},glEnable:function(a){U.enable(a)},glEnableVertexAttribArray:function(a){U.enableVertexAttribArray(a)},glFenceSync:function(a,b){return(a=U.fenceSync(a,b))?(b=Vb(Qb),a.name=b,Qb[b]=a,b):0},glFinish:function(){U.finish()},glFlush:function(){U.flush()},glFramebufferRenderbuffer:function(a,b,c,e){U.framebufferRenderbuffer(a,b,c,Nb[e])},glFramebufferTexture2D:function(a,b,c,e,f){U.framebufferTexture2D(a,b,c,P[e],f)},glFrontFace:function(a){U.frontFace(a)}, +glGenBuffers:function(a,b){Ac(a,b,"createBuffer",Lb)},glGenFramebuffers:function(a,b){Ac(a,b,"createFramebuffer",Mb)},glGenRenderbuffers:function(a,b){Ac(a,b,"createRenderbuffer",Nb)},glGenSamplers:function(a,b){Ac(a,b,"createSampler",R)},glGenTextures:function(a,b){Ac(a,b,"createTexture",P)},glGenVertexArrays:Bc,glGenVertexArraysOES:Bc,glGenerateMipmap:function(a){U.generateMipmap(a)},glGetBufferParameteriv:function(a,b,c){c?q()[c>>2]=U.getBufferParameter(a,b):S(1281)},glGetError:function(){var a= +U.getError()||Ub;Ub=0;return a},glGetFloatv:function(a,b){hc(a,b,2)},glGetFramebufferAttachmentParameteriv:function(a,b,c,e){a=U.getFramebufferAttachmentParameter(a,b,c);if(a instanceof WebGLRenderbuffer||a instanceof WebGLTexture)a=a.name|0;q()[e>>2]=a},glGetIntegerv:ic,glGetProgramInfoLog:function(a,b,c,e){a=U.getProgramInfoLog(O[a]);null===a&&(a="(unknown error)");var f;0>2]=b)},glGetProgramiv:function(a,b,c){if(c)if(a>=Kb)S(1281);else if(a=O[a],35716==b)a= +U.getProgramInfoLog(a),null===a&&(a="(unknown error)"),q()[c>>2]=a.length+1;else if(35719==b){if(!a.K)for(b=0;b>2]=a.K}else if(35722==b){if(!a.I)for(b=0;b>2]=a.I}else if(35381==b){if(!a.J)for(b=0;b>2]=a.J}else q()[c>> +2]=U.getProgramParameter(a,b);else S(1281)},glGetRenderbufferParameteriv:function(a,b,c){c?q()[c>>2]=U.getRenderbufferParameter(a,b):S(1281)},glGetShaderInfoLog:function(a,b,c,e){a=U.getShaderInfoLog(Q[a]);null===a&&(a="(unknown error)");var f;0>2]=b)},glGetShaderPrecisionFormat:function(a,b,c,e){a=U.getShaderPrecisionFormat(a,b);q()[c>>2]=a.rangeMin;q()[c+4>>2]=a.rangeMax;q()[e>>2]=a.precision},glGetShaderiv:function(a,b,c){c?35716==b?(a=U.getShaderInfoLog(Q[a]), +null===a&&(a="(unknown error)"),a=a?a.length+1:0,q()[c>>2]=a):35720==b?(a=(a=U.getShaderSource(Q[a]))?a.length+1:0,q()[c>>2]=a):q()[c>>2]=U.getShaderParameter(Q[a],b):S(1281)},glGetString:function(a){var b=Rb[a];if(!b){switch(a){case 7939:b=U.getSupportedExtensions()||[];b=b.concat(b.map(function(e){return"GL_"+e}));b=Ab(b.join(" "));break;case 7936:case 7937:case 37445:case 37446:(b=U.getParameter(a))||S(1280);b=b&&Ab(b);break;case 7938:b=U.getParameter(7938);b=2<=T.version?"OpenGL ES 3.0 ("+b+")": +"OpenGL ES 2.0 ("+b+")";b=Ab(b);break;case 35724:b=U.getParameter(35724);var c=b.match(/^WebGL GLSL ES ([0-9]\.[0-9][0-9]?)(?:$| .*)/);null!==c&&(3==c[1].length&&(c[1]+="0"),b="OpenGL ES GLSL ES "+c[1]+" ("+b+")");b=Ab(b);break;default:S(1280)}Rb[a]=b}return b},glGetStringi:function(a,b){if(2>T.version)return S(1282),0;var c=Sb[a];if(c)return 0>b||b>=c.length?(S(1281),0):c[b];switch(a){case 7939:return c=U.getSupportedExtensions()||[],c=c.concat(c.map(function(e){return"GL_"+e})),c=c.map(function(e){return Ab(e)}), +c=Sb[a]=c,0>b||b>=c.length?(S(1281),0):c[b];default:return S(1280),0}},glGetUniformLocation:function(a,b){b=J(b);if(a=O[a]){var c=a,e=c.G,f=c.ha,g;if(!e)for(c.G=e={},c.ga={},g=0;g>>0,f=b.slice(0,g));if((f=a.ha[f])&&e>2];U.invalidateFramebuffer(a,e)},glInvalidateSubFramebuffer:function(a,b,c,e,f,g,l){for(var n=yc[b],r=0;r>2];U.invalidateSubFramebuffer(a,n,e,f,g,l)},glIsSync:function(a){return U.isSync(Qb[a])},glIsTexture:function(a){return(a=P[a])?U.isTexture(a):0},glLineWidth:function(a){U.lineWidth(a)},glLinkProgram:function(a){a=O[a];U.linkProgram(a);a.G=0;a.ha={}},glMultiDrawArraysInstancedBaseInstanceWEBGL:function(a, +b,c,e,f,g){U.ba.multiDrawArraysInstancedBaseInstanceWEBGL(a,q(),b>>2,q(),c>>2,q(),e>>2,t(),f>>2,g)},glMultiDrawElementsInstancedBaseVertexBaseInstanceWEBGL:function(a,b,c,e,f,g,l,n){U.ba.multiDrawElementsInstancedBaseVertexBaseInstanceWEBGL(a,q(),b>>2,c,q(),e>>2,q(),f>>2,q(),g>>2,t(),l>>2,n)},glPixelStorei:function(a,b){3317==a&&(Tb=b);U.pixelStorei(a,b)},glReadBuffer:function(a){U.readBuffer(a)},glReadPixels:function(a,b,c,e,f,g,l){if(2<=T.version)if(U.N)U.readPixels(a,b,c,e,f,g,l);else{var n=Dc(g); +U.readPixels(a,b,c,e,f,g,n,l>>31-Math.clz32(n.BYTES_PER_ELEMENT))}else(l=Ec(g,f,c,e,l))?U.readPixels(a,b,c,e,f,g,l):S(1280)},glRenderbufferStorage:function(a,b,c,e){U.renderbufferStorage(a,b,c,e)},glRenderbufferStorageMultisample:function(a,b,c,e,f){U.renderbufferStorageMultisample(a,b,c,e,f)},glSamplerParameterf:function(a,b,c){U.samplerParameterf(R[a],b,c)},glSamplerParameteri:function(a,b,c){U.samplerParameteri(R[a],b,c)},glSamplerParameteriv:function(a,b,c){c=q()[c>>2];U.samplerParameteri(R[a], +b,c)},glScissor:function(a,b,c,e){U.scissor(a,b,c,e)},glShaderSource:function(a,b,c,e){for(var f="",g=0;g>2]:-1;f+=J(q()[c+4*g>>2],0>l?void 0:l)}U.shaderSource(Q[a],f)},glStencilFunc:function(a,b,c){U.stencilFunc(a,b,c)},glStencilFuncSeparate:function(a,b,c,e){U.stencilFuncSeparate(a,b,c,e)},glStencilMask:function(a){U.stencilMask(a)},glStencilMaskSeparate:function(a,b){U.stencilMaskSeparate(a,b)},glStencilOp:function(a,b,c){U.stencilOp(a,b,c)},glStencilOpSeparate:function(a, +b,c,e){U.stencilOpSeparate(a,b,c,e)},glTexImage2D:function(a,b,c,e,f,g,l,n,r){if(2<=T.version)if(U.B)U.texImage2D(a,b,c,e,f,g,l,n,r);else if(r){var u=Dc(n);U.texImage2D(a,b,c,e,f,g,l,n,u,r>>31-Math.clz32(u.BYTES_PER_ELEMENT))}else U.texImage2D(a,b,c,e,f,g,l,n,null);else U.texImage2D(a,b,c,e,f,g,l,n,r?Ec(n,l,e,f,r):null)},glTexParameterf:function(a,b,c){U.texParameterf(a,b,c)},glTexParameterfv:function(a,b,c){c=v()[c>>2];U.texParameterf(a,b,c)},glTexParameteri:function(a,b,c){U.texParameteri(a,b,c)}, +glTexParameteriv:function(a,b,c){c=q()[c>>2];U.texParameteri(a,b,c)},glTexStorage2D:function(a,b,c,e,f){U.texStorage2D(a,b,c,e,f)},glTexSubImage2D:function(a,b,c,e,f,g,l,n,r){if(2<=T.version)if(U.B)U.texSubImage2D(a,b,c,e,f,g,l,n,r);else if(r){var u=Dc(n);U.texSubImage2D(a,b,c,e,f,g,l,n,u,r>>31-Math.clz32(u.BYTES_PER_ELEMENT))}else U.texSubImage2D(a,b,c,e,f,g,l,n,null);else u=null,r&&(u=Ec(n,l,f,g,r)),U.texSubImage2D(a,b,c,e,f,g,l,n,u)},glUniform1f:function(a,b){U.uniform1f(W(a),b)},glUniform1fv:function(a, +b,c){if(2<=T.version)b&&U.uniform1fv(W(a),v(),c>>2,b);else{if(288>=b)for(var e=X[b-1],f=0;f>2];else e=v().subarray(c>>2,c+4*b>>2);U.uniform1fv(W(a),e)}},glUniform1i:function(a,b){U.uniform1i(W(a),b)},glUniform1iv:function(a,b,c){if(2<=T.version)b&&U.uniform1iv(W(a),q(),c>>2,b);else{if(288>=b)for(var e=Fc[b-1],f=0;f>2];else e=q().subarray(c>>2,c+4*b>>2);U.uniform1iv(W(a),e)}},glUniform2f:function(a,b,c){U.uniform2f(W(a),b,c)},glUniform2fv:function(a,b,c){if(2<= +T.version)b&&U.uniform2fv(W(a),v(),c>>2,2*b);else{if(144>=b)for(var e=X[2*b-1],f=0;f<2*b;f+=2)e[f]=v()[c+4*f>>2],e[f+1]=v()[c+(4*f+4)>>2];else e=v().subarray(c>>2,c+8*b>>2);U.uniform2fv(W(a),e)}},glUniform2i:function(a,b,c){U.uniform2i(W(a),b,c)},glUniform2iv:function(a,b,c){if(2<=T.version)b&&U.uniform2iv(W(a),q(),c>>2,2*b);else{if(144>=b)for(var e=Fc[2*b-1],f=0;f<2*b;f+=2)e[f]=q()[c+4*f>>2],e[f+1]=q()[c+(4*f+4)>>2];else e=q().subarray(c>>2,c+8*b>>2);U.uniform2iv(W(a),e)}},glUniform3f:function(a, +b,c,e){U.uniform3f(W(a),b,c,e)},glUniform3fv:function(a,b,c){if(2<=T.version)b&&U.uniform3fv(W(a),v(),c>>2,3*b);else{if(96>=b)for(var e=X[3*b-1],f=0;f<3*b;f+=3)e[f]=v()[c+4*f>>2],e[f+1]=v()[c+(4*f+4)>>2],e[f+2]=v()[c+(4*f+8)>>2];else e=v().subarray(c>>2,c+12*b>>2);U.uniform3fv(W(a),e)}},glUniform3i:function(a,b,c,e){U.uniform3i(W(a),b,c,e)},glUniform3iv:function(a,b,c){if(2<=T.version)b&&U.uniform3iv(W(a),q(),c>>2,3*b);else{if(96>=b)for(var e=Fc[3*b-1],f=0;f<3*b;f+=3)e[f]=q()[c+4*f>>2],e[f+1]=q()[c+ +(4*f+4)>>2],e[f+2]=q()[c+(4*f+8)>>2];else e=q().subarray(c>>2,c+12*b>>2);U.uniform3iv(W(a),e)}},glUniform4f:function(a,b,c,e,f){U.uniform4f(W(a),b,c,e,f)},glUniform4fv:function(a,b,c){if(2<=T.version)b&&U.uniform4fv(W(a),v(),c>>2,4*b);else{if(72>=b){var e=X[4*b-1],f=v();c>>=2;for(var g=0;g<4*b;g+=4){var l=c+g;e[g]=f[l];e[g+1]=f[l+1];e[g+2]=f[l+2];e[g+3]=f[l+3]}}else e=v().subarray(c>>2,c+16*b>>2);U.uniform4fv(W(a),e)}},glUniform4i:function(a,b,c,e,f){U.uniform4i(W(a),b,c,e,f)},glUniform4iv:function(a, +b,c){if(2<=T.version)b&&U.uniform4iv(W(a),q(),c>>2,4*b);else{if(72>=b)for(var e=Fc[4*b-1],f=0;f<4*b;f+=4)e[f]=q()[c+4*f>>2],e[f+1]=q()[c+(4*f+4)>>2],e[f+2]=q()[c+(4*f+8)>>2],e[f+3]=q()[c+(4*f+12)>>2];else e=q().subarray(c>>2,c+16*b>>2);U.uniform4iv(W(a),e)}},glUniformMatrix2fv:function(a,b,c,e){if(2<=T.version)b&&U.uniformMatrix2fv(W(a),!!c,v(),e>>2,4*b);else{if(72>=b)for(var f=X[4*b-1],g=0;g<4*b;g+=4)f[g]=v()[e+4*g>>2],f[g+1]=v()[e+(4*g+4)>>2],f[g+2]=v()[e+(4*g+8)>>2],f[g+3]=v()[e+(4*g+12)>>2];else f= +v().subarray(e>>2,e+16*b>>2);U.uniformMatrix2fv(W(a),!!c,f)}},glUniformMatrix3fv:function(a,b,c,e){if(2<=T.version)b&&U.uniformMatrix3fv(W(a),!!c,v(),e>>2,9*b);else{if(32>=b)for(var f=X[9*b-1],g=0;g<9*b;g+=9)f[g]=v()[e+4*g>>2],f[g+1]=v()[e+(4*g+4)>>2],f[g+2]=v()[e+(4*g+8)>>2],f[g+3]=v()[e+(4*g+12)>>2],f[g+4]=v()[e+(4*g+16)>>2],f[g+5]=v()[e+(4*g+20)>>2],f[g+6]=v()[e+(4*g+24)>>2],f[g+7]=v()[e+(4*g+28)>>2],f[g+8]=v()[e+(4*g+32)>>2];else f=v().subarray(e>>2,e+36*b>>2);U.uniformMatrix3fv(W(a),!!c,f)}}, +glUniformMatrix4fv:function(a,b,c,e){if(2<=T.version)b&&U.uniformMatrix4fv(W(a),!!c,v(),e>>2,16*b);else{if(18>=b){var f=X[16*b-1],g=v();e>>=2;for(var l=0;l<16*b;l+=16){var n=e+l;f[l]=g[n];f[l+1]=g[n+1];f[l+2]=g[n+2];f[l+3]=g[n+3];f[l+4]=g[n+4];f[l+5]=g[n+5];f[l+6]=g[n+6];f[l+7]=g[n+7];f[l+8]=g[n+8];f[l+9]=g[n+9];f[l+10]=g[n+10];f[l+11]=g[n+11];f[l+12]=g[n+12];f[l+13]=g[n+13];f[l+14]=g[n+14];f[l+15]=g[n+15]}}else f=v().subarray(e>>2,e+64*b>>2);U.uniformMatrix4fv(W(a),!!c,f)}},glUseProgram:function(a){a= +O[a];U.useProgram(a);U.ka=a},glVertexAttrib1f:function(a,b){U.vertexAttrib1f(a,b)},glVertexAttrib2fv:function(a,b){U.vertexAttrib2f(a,v()[b>>2],v()[b+4>>2])},glVertexAttrib3fv:function(a,b){U.vertexAttrib3f(a,v()[b>>2],v()[b+4>>2],v()[b+8>>2])},glVertexAttrib4fv:function(a,b){U.vertexAttrib4f(a,v()[b>>2],v()[b+4>>2],v()[b+8>>2],v()[b+12>>2])},glVertexAttribDivisor:function(a,b){U.vertexAttribDivisor(a,b)},glVertexAttribIPointer:function(a,b,c,e,f){U.vertexAttribIPointer(a,b,c,e,f)},glVertexAttribPointer:function(a, +b,c,e,f,g){U.vertexAttribPointer(a,b,c,!!e,f,g)},glViewport:function(a,b,c,e){U.viewport(a,b,c,e)},glWaitSync:function(a,b,c,e){U.waitSync(Qb[a],b,(c>>>0)+4294967296*e)},invoke_ii:bd,invoke_iii:cd,invoke_iiii:dd,invoke_iiiii:ed,invoke_iiiiiii:fd,invoke_vi:gd,invoke_vii:hd,invoke_viii:jd,invoke_viiii:kd,invoke_viiiiiii:ld,memory:d||w.wasmMemory,skwasm_captureImageBitmap:Gc,skwasm_createGlTextureFromTextureSource:Ic,skwasm_createOffscreenCanvas:Jc,skwasm_disposeAssociatedObjectOnThread:Kc,skwasm_getAssociatedObject:Lc, +skwasm_registerMessageListener:Mc,skwasm_resizeCanvas:Nc,skwasm_setAssociatedObjectOnThread:Oc,strftime_l:(a,b,c,e)=>Uc(a,b,c,e)}; +(function(){function a(c,e){F=c=c.exports;w.wasmExports=F;I.fa.push(F._emscripten_tls_init);G=F.__indirect_function_table;Ha.unshift(F.__wasm_call_ctors);Aa=e;Oa();return c}var b={env:md,wasi_snapshot_preview1:md};Na();if(w.instantiateWasm)try{return w.instantiateWasm(b,a)}catch(c){D("Module.instantiateWasm callback failed with error: "+c),ka(c)}Ua(b,function(c){a(c.instance,c.module)}).catch(ka);return{}})();w._canvas_saveLayer=(a,b,c,e)=>(w._canvas_saveLayer=F.canvas_saveLayer)(a,b,c,e); +w._canvas_save=a=>(w._canvas_save=F.canvas_save)(a);w._canvas_restore=a=>(w._canvas_restore=F.canvas_restore)(a);w._canvas_restoreToCount=(a,b)=>(w._canvas_restoreToCount=F.canvas_restoreToCount)(a,b);w._canvas_getSaveCount=a=>(w._canvas_getSaveCount=F.canvas_getSaveCount)(a);w._canvas_translate=(a,b,c)=>(w._canvas_translate=F.canvas_translate)(a,b,c);w._canvas_scale=(a,b,c)=>(w._canvas_scale=F.canvas_scale)(a,b,c);w._canvas_rotate=(a,b)=>(w._canvas_rotate=F.canvas_rotate)(a,b); +w._canvas_skew=(a,b,c)=>(w._canvas_skew=F.canvas_skew)(a,b,c);w._canvas_transform=(a,b)=>(w._canvas_transform=F.canvas_transform)(a,b);w._canvas_clipRect=(a,b,c,e)=>(w._canvas_clipRect=F.canvas_clipRect)(a,b,c,e);w._canvas_clipRRect=(a,b,c)=>(w._canvas_clipRRect=F.canvas_clipRRect)(a,b,c);w._canvas_clipPath=(a,b,c)=>(w._canvas_clipPath=F.canvas_clipPath)(a,b,c);w._canvas_drawColor=(a,b,c)=>(w._canvas_drawColor=F.canvas_drawColor)(a,b,c); +w._canvas_drawLine=(a,b,c,e,f,g)=>(w._canvas_drawLine=F.canvas_drawLine)(a,b,c,e,f,g);w._canvas_drawPaint=(a,b)=>(w._canvas_drawPaint=F.canvas_drawPaint)(a,b);w._canvas_drawRect=(a,b,c)=>(w._canvas_drawRect=F.canvas_drawRect)(a,b,c);w._canvas_drawRRect=(a,b,c)=>(w._canvas_drawRRect=F.canvas_drawRRect)(a,b,c);w._canvas_drawDRRect=(a,b,c,e)=>(w._canvas_drawDRRect=F.canvas_drawDRRect)(a,b,c,e);w._canvas_drawOval=(a,b,c)=>(w._canvas_drawOval=F.canvas_drawOval)(a,b,c); +w._canvas_drawCircle=(a,b,c,e,f)=>(w._canvas_drawCircle=F.canvas_drawCircle)(a,b,c,e,f);w._canvas_drawArc=(a,b,c,e,f,g)=>(w._canvas_drawArc=F.canvas_drawArc)(a,b,c,e,f,g);w._canvas_drawPath=(a,b,c)=>(w._canvas_drawPath=F.canvas_drawPath)(a,b,c);w._canvas_drawShadow=(a,b,c,e,f,g)=>(w._canvas_drawShadow=F.canvas_drawShadow)(a,b,c,e,f,g);w._canvas_drawParagraph=(a,b,c,e)=>(w._canvas_drawParagraph=F.canvas_drawParagraph)(a,b,c,e); +w._canvas_drawPicture=(a,b)=>(w._canvas_drawPicture=F.canvas_drawPicture)(a,b);w._canvas_drawImage=(a,b,c,e,f,g)=>(w._canvas_drawImage=F.canvas_drawImage)(a,b,c,e,f,g);w._canvas_drawImageRect=(a,b,c,e,f,g)=>(w._canvas_drawImageRect=F.canvas_drawImageRect)(a,b,c,e,f,g);w._canvas_drawImageNine=(a,b,c,e,f,g)=>(w._canvas_drawImageNine=F.canvas_drawImageNine)(a,b,c,e,f,g);w._canvas_drawVertices=(a,b,c,e)=>(w._canvas_drawVertices=F.canvas_drawVertices)(a,b,c,e); +w._canvas_drawPoints=(a,b,c,e,f)=>(w._canvas_drawPoints=F.canvas_drawPoints)(a,b,c,e,f);w._canvas_drawAtlas=(a,b,c,e,f,g,l,n,r)=>(w._canvas_drawAtlas=F.canvas_drawAtlas)(a,b,c,e,f,g,l,n,r);w._canvas_getTransform=(a,b)=>(w._canvas_getTransform=F.canvas_getTransform)(a,b);w._canvas_getLocalClipBounds=(a,b)=>(w._canvas_getLocalClipBounds=F.canvas_getLocalClipBounds)(a,b);w._canvas_getDeviceClipBounds=(a,b)=>(w._canvas_getDeviceClipBounds=F.canvas_getDeviceClipBounds)(a,b); +w._contourMeasureIter_create=(a,b,c)=>(w._contourMeasureIter_create=F.contourMeasureIter_create)(a,b,c);w._contourMeasureIter_next=a=>(w._contourMeasureIter_next=F.contourMeasureIter_next)(a);w._contourMeasureIter_dispose=a=>(w._contourMeasureIter_dispose=F.contourMeasureIter_dispose)(a);w._contourMeasure_dispose=a=>(w._contourMeasure_dispose=F.contourMeasure_dispose)(a);w._contourMeasure_length=a=>(w._contourMeasure_length=F.contourMeasure_length)(a); +w._contourMeasure_isClosed=a=>(w._contourMeasure_isClosed=F.contourMeasure_isClosed)(a);w._contourMeasure_getPosTan=(a,b,c,e)=>(w._contourMeasure_getPosTan=F.contourMeasure_getPosTan)(a,b,c,e);w._contourMeasure_getSegment=(a,b,c,e)=>(w._contourMeasure_getSegment=F.contourMeasure_getSegment)(a,b,c,e);w._skData_create=a=>(w._skData_create=F.skData_create)(a);w._skData_getPointer=a=>(w._skData_getPointer=F.skData_getPointer)(a);w._skData_getConstPointer=a=>(w._skData_getConstPointer=F.skData_getConstPointer)(a); +w._skData_getSize=a=>(w._skData_getSize=F.skData_getSize)(a);w._skData_dispose=a=>(w._skData_dispose=F.skData_dispose)(a);w._imageFilter_createBlur=(a,b,c)=>(w._imageFilter_createBlur=F.imageFilter_createBlur)(a,b,c);w._imageFilter_createDilate=(a,b)=>(w._imageFilter_createDilate=F.imageFilter_createDilate)(a,b);w._imageFilter_createErode=(a,b)=>(w._imageFilter_createErode=F.imageFilter_createErode)(a,b); +w._imageFilter_createMatrix=(a,b)=>(w._imageFilter_createMatrix=F.imageFilter_createMatrix)(a,b);w._imageFilter_createFromColorFilter=a=>(w._imageFilter_createFromColorFilter=F.imageFilter_createFromColorFilter)(a);w._imageFilter_compose=(a,b)=>(w._imageFilter_compose=F.imageFilter_compose)(a,b);w._imageFilter_dispose=a=>(w._imageFilter_dispose=F.imageFilter_dispose)(a);w._imageFilter_getFilterBounds=(a,b)=>(w._imageFilter_getFilterBounds=F.imageFilter_getFilterBounds)(a,b); +w._colorFilter_createMode=(a,b)=>(w._colorFilter_createMode=F.colorFilter_createMode)(a,b);w._colorFilter_createMatrix=a=>(w._colorFilter_createMatrix=F.colorFilter_createMatrix)(a);w._colorFilter_createSRGBToLinearGamma=()=>(w._colorFilter_createSRGBToLinearGamma=F.colorFilter_createSRGBToLinearGamma)();w._colorFilter_createLinearToSRGBGamma=()=>(w._colorFilter_createLinearToSRGBGamma=F.colorFilter_createLinearToSRGBGamma)(); +w._colorFilter_compose=(a,b)=>(w._colorFilter_compose=F.colorFilter_compose)(a,b);w._colorFilter_dispose=a=>(w._colorFilter_dispose=F.colorFilter_dispose)(a);w._maskFilter_createBlur=(a,b)=>(w._maskFilter_createBlur=F.maskFilter_createBlur)(a,b);w._maskFilter_dispose=a=>(w._maskFilter_dispose=F.maskFilter_dispose)(a);w._fontCollection_create=()=>(w._fontCollection_create=F.fontCollection_create)();w._fontCollection_dispose=a=>(w._fontCollection_dispose=F.fontCollection_dispose)(a); +w._typeface_create=a=>(w._typeface_create=F.typeface_create)(a);w._typeface_dispose=a=>(w._typeface_dispose=F.typeface_dispose)(a);w._typefaces_filterCoveredCodePoints=(a,b,c,e)=>(w._typefaces_filterCoveredCodePoints=F.typefaces_filterCoveredCodePoints)(a,b,c,e);w._fontCollection_registerTypeface=(a,b,c)=>(w._fontCollection_registerTypeface=F.fontCollection_registerTypeface)(a,b,c);w._fontCollection_clearCaches=a=>(w._fontCollection_clearCaches=F.fontCollection_clearCaches)(a); +w._image_createFromPicture=(a,b,c)=>(w._image_createFromPicture=F.image_createFromPicture)(a,b,c);w._image_createFromPixels=(a,b,c,e,f)=>(w._image_createFromPixels=F.image_createFromPixels)(a,b,c,e,f);w._image_createFromTextureSource=(a,b,c,e)=>(w._image_createFromTextureSource=F.image_createFromTextureSource)(a,b,c,e);w._image_ref=a=>(w._image_ref=F.image_ref)(a);w._image_dispose=a=>(w._image_dispose=F.image_dispose)(a);w._image_getWidth=a=>(w._image_getWidth=F.image_getWidth)(a); +w._image_getHeight=a=>(w._image_getHeight=F.image_getHeight)(a);w._paint_create=()=>(w._paint_create=F.paint_create)();w._paint_dispose=a=>(w._paint_dispose=F.paint_dispose)(a);w._paint_setBlendMode=(a,b)=>(w._paint_setBlendMode=F.paint_setBlendMode)(a,b);w._paint_setStyle=(a,b)=>(w._paint_setStyle=F.paint_setStyle)(a,b);w._paint_getStyle=a=>(w._paint_getStyle=F.paint_getStyle)(a);w._paint_setStrokeWidth=(a,b)=>(w._paint_setStrokeWidth=F.paint_setStrokeWidth)(a,b); +w._paint_getStrokeWidth=a=>(w._paint_getStrokeWidth=F.paint_getStrokeWidth)(a);w._paint_setStrokeCap=(a,b)=>(w._paint_setStrokeCap=F.paint_setStrokeCap)(a,b);w._paint_getStrokeCap=a=>(w._paint_getStrokeCap=F.paint_getStrokeCap)(a);w._paint_setStrokeJoin=(a,b)=>(w._paint_setStrokeJoin=F.paint_setStrokeJoin)(a,b);w._paint_getStrokeJoin=a=>(w._paint_getStrokeJoin=F.paint_getStrokeJoin)(a);w._paint_setAntiAlias=(a,b)=>(w._paint_setAntiAlias=F.paint_setAntiAlias)(a,b); +w._paint_getAntiAlias=a=>(w._paint_getAntiAlias=F.paint_getAntiAlias)(a);w._paint_setColorInt=(a,b)=>(w._paint_setColorInt=F.paint_setColorInt)(a,b);w._paint_getColorInt=a=>(w._paint_getColorInt=F.paint_getColorInt)(a);w._paint_setMiterLimit=(a,b)=>(w._paint_setMiterLimit=F.paint_setMiterLimit)(a,b);w._paint_getMiterLImit=a=>(w._paint_getMiterLImit=F.paint_getMiterLImit)(a);w._paint_setShader=(a,b)=>(w._paint_setShader=F.paint_setShader)(a,b); +w._paint_setImageFilter=(a,b)=>(w._paint_setImageFilter=F.paint_setImageFilter)(a,b);w._paint_setColorFilter=(a,b)=>(w._paint_setColorFilter=F.paint_setColorFilter)(a,b);w._paint_setMaskFilter=(a,b)=>(w._paint_setMaskFilter=F.paint_setMaskFilter)(a,b);w._path_create=()=>(w._path_create=F.path_create)();w._path_dispose=a=>(w._path_dispose=F.path_dispose)(a);w._path_copy=a=>(w._path_copy=F.path_copy)(a);w._path_setFillType=(a,b)=>(w._path_setFillType=F.path_setFillType)(a,b); +w._path_getFillType=a=>(w._path_getFillType=F.path_getFillType)(a);w._path_moveTo=(a,b,c)=>(w._path_moveTo=F.path_moveTo)(a,b,c);w._path_relativeMoveTo=(a,b,c)=>(w._path_relativeMoveTo=F.path_relativeMoveTo)(a,b,c);w._path_lineTo=(a,b,c)=>(w._path_lineTo=F.path_lineTo)(a,b,c);w._path_relativeLineTo=(a,b,c)=>(w._path_relativeLineTo=F.path_relativeLineTo)(a,b,c);w._path_quadraticBezierTo=(a,b,c,e,f)=>(w._path_quadraticBezierTo=F.path_quadraticBezierTo)(a,b,c,e,f); +w._path_relativeQuadraticBezierTo=(a,b,c,e,f)=>(w._path_relativeQuadraticBezierTo=F.path_relativeQuadraticBezierTo)(a,b,c,e,f);w._path_cubicTo=(a,b,c,e,f,g,l)=>(w._path_cubicTo=F.path_cubicTo)(a,b,c,e,f,g,l);w._path_relativeCubicTo=(a,b,c,e,f,g,l)=>(w._path_relativeCubicTo=F.path_relativeCubicTo)(a,b,c,e,f,g,l);w._path_conicTo=(a,b,c,e,f,g)=>(w._path_conicTo=F.path_conicTo)(a,b,c,e,f,g);w._path_relativeConicTo=(a,b,c,e,f,g)=>(w._path_relativeConicTo=F.path_relativeConicTo)(a,b,c,e,f,g); +w._path_arcToOval=(a,b,c,e,f)=>(w._path_arcToOval=F.path_arcToOval)(a,b,c,e,f);w._path_arcToRotated=(a,b,c,e,f,g,l,n)=>(w._path_arcToRotated=F.path_arcToRotated)(a,b,c,e,f,g,l,n);w._path_relativeArcToRotated=(a,b,c,e,f,g,l,n)=>(w._path_relativeArcToRotated=F.path_relativeArcToRotated)(a,b,c,e,f,g,l,n);w._path_addRect=(a,b)=>(w._path_addRect=F.path_addRect)(a,b);w._path_addOval=(a,b)=>(w._path_addOval=F.path_addOval)(a,b);w._path_addArc=(a,b,c,e)=>(w._path_addArc=F.path_addArc)(a,b,c,e); +w._path_addPolygon=(a,b,c,e)=>(w._path_addPolygon=F.path_addPolygon)(a,b,c,e);w._path_addRRect=(a,b)=>(w._path_addRRect=F.path_addRRect)(a,b);w._path_addPath=(a,b,c,e)=>(w._path_addPath=F.path_addPath)(a,b,c,e);w._path_close=a=>(w._path_close=F.path_close)(a);w._path_reset=a=>(w._path_reset=F.path_reset)(a);w._path_contains=(a,b,c)=>(w._path_contains=F.path_contains)(a,b,c);w._path_transform=(a,b)=>(w._path_transform=F.path_transform)(a,b); +w._path_getBounds=(a,b)=>(w._path_getBounds=F.path_getBounds)(a,b);w._path_combine=(a,b,c)=>(w._path_combine=F.path_combine)(a,b,c);w._pictureRecorder_create=()=>(w._pictureRecorder_create=F.pictureRecorder_create)();w._pictureRecorder_dispose=a=>(w._pictureRecorder_dispose=F.pictureRecorder_dispose)(a);w._pictureRecorder_beginRecording=(a,b)=>(w._pictureRecorder_beginRecording=F.pictureRecorder_beginRecording)(a,b);w._pictureRecorder_endRecording=a=>(w._pictureRecorder_endRecording=F.pictureRecorder_endRecording)(a); +w._picture_getCullRect=(a,b)=>(w._picture_getCullRect=F.picture_getCullRect)(a,b);w._picture_dispose=a=>(w._picture_dispose=F.picture_dispose)(a);w._picture_approximateBytesUsed=a=>(w._picture_approximateBytesUsed=F.picture_approximateBytesUsed)(a);w._shader_createLinearGradient=(a,b,c,e,f,g)=>(w._shader_createLinearGradient=F.shader_createLinearGradient)(a,b,c,e,f,g);w._shader_createRadialGradient=(a,b,c,e,f,g,l,n)=>(w._shader_createRadialGradient=F.shader_createRadialGradient)(a,b,c,e,f,g,l,n); +w._shader_createConicalGradient=(a,b,c,e,f,g,l,n)=>(w._shader_createConicalGradient=F.shader_createConicalGradient)(a,b,c,e,f,g,l,n);w._shader_createSweepGradient=(a,b,c,e,f,g,l,n,r)=>(w._shader_createSweepGradient=F.shader_createSweepGradient)(a,b,c,e,f,g,l,n,r);w._shader_dispose=a=>(w._shader_dispose=F.shader_dispose)(a);w._runtimeEffect_create=a=>(w._runtimeEffect_create=F.runtimeEffect_create)(a);w._runtimeEffect_dispose=a=>(w._runtimeEffect_dispose=F.runtimeEffect_dispose)(a); +w._runtimeEffect_getUniformSize=a=>(w._runtimeEffect_getUniformSize=F.runtimeEffect_getUniformSize)(a);w._shader_createRuntimeEffectShader=(a,b,c,e)=>(w._shader_createRuntimeEffectShader=F.shader_createRuntimeEffectShader)(a,b,c,e);w._shader_createFromImage=(a,b,c,e,f)=>(w._shader_createFromImage=F.shader_createFromImage)(a,b,c,e,f);w._skString_allocate=a=>(w._skString_allocate=F.skString_allocate)(a);w._skString_getData=a=>(w._skString_getData=F.skString_getData)(a); +w._skString_free=a=>(w._skString_free=F.skString_free)(a);w._skString16_allocate=a=>(w._skString16_allocate=F.skString16_allocate)(a);w._skString16_getData=a=>(w._skString16_getData=F.skString16_getData)(a);w._skString16_free=a=>(w._skString16_free=F.skString16_free)(a);var Db=(a,b,c,e,f)=>(Db=F.emscripten_dispatch_to_thread_)(a,b,c,e,f);w._surface_create=()=>(w._surface_create=F.surface_create)();w._surface_getThreadId=a=>(w._surface_getThreadId=F.surface_getThreadId)(a); +w._surface_setCallbackHandler=(a,b)=>(w._surface_setCallbackHandler=F.surface_setCallbackHandler)(a,b);w._surface_destroy=a=>(w._surface_destroy=F.surface_destroy)(a);w._surface_renderPicture=(a,b)=>(w._surface_renderPicture=F.surface_renderPicture)(a,b);w._surface_rasterizeImage=(a,b,c)=>(w._surface_rasterizeImage=F.surface_rasterizeImage)(a,b,c);var Zc=w._surface_onRenderComplete=(a,b,c)=>(Zc=w._surface_onRenderComplete=F.surface_onRenderComplete)(a,b,c); +w._lineMetrics_create=(a,b,c,e,f,g,l,n,r)=>(w._lineMetrics_create=F.lineMetrics_create)(a,b,c,e,f,g,l,n,r);w._lineMetrics_dispose=a=>(w._lineMetrics_dispose=F.lineMetrics_dispose)(a);w._lineMetrics_getHardBreak=a=>(w._lineMetrics_getHardBreak=F.lineMetrics_getHardBreak)(a);w._lineMetrics_getAscent=a=>(w._lineMetrics_getAscent=F.lineMetrics_getAscent)(a);w._lineMetrics_getDescent=a=>(w._lineMetrics_getDescent=F.lineMetrics_getDescent)(a); +w._lineMetrics_getUnscaledAscent=a=>(w._lineMetrics_getUnscaledAscent=F.lineMetrics_getUnscaledAscent)(a);w._lineMetrics_getHeight=a=>(w._lineMetrics_getHeight=F.lineMetrics_getHeight)(a);w._lineMetrics_getWidth=a=>(w._lineMetrics_getWidth=F.lineMetrics_getWidth)(a);w._lineMetrics_getLeft=a=>(w._lineMetrics_getLeft=F.lineMetrics_getLeft)(a);w._lineMetrics_getBaseline=a=>(w._lineMetrics_getBaseline=F.lineMetrics_getBaseline)(a);w._lineMetrics_getLineNumber=a=>(w._lineMetrics_getLineNumber=F.lineMetrics_getLineNumber)(a); +w._lineMetrics_getStartIndex=a=>(w._lineMetrics_getStartIndex=F.lineMetrics_getStartIndex)(a);w._lineMetrics_getEndIndex=a=>(w._lineMetrics_getEndIndex=F.lineMetrics_getEndIndex)(a);w._paragraph_dispose=a=>(w._paragraph_dispose=F.paragraph_dispose)(a);w._paragraph_getWidth=a=>(w._paragraph_getWidth=F.paragraph_getWidth)(a);w._paragraph_getHeight=a=>(w._paragraph_getHeight=F.paragraph_getHeight)(a);w._paragraph_getLongestLine=a=>(w._paragraph_getLongestLine=F.paragraph_getLongestLine)(a); +w._paragraph_getMinIntrinsicWidth=a=>(w._paragraph_getMinIntrinsicWidth=F.paragraph_getMinIntrinsicWidth)(a);w._paragraph_getMaxIntrinsicWidth=a=>(w._paragraph_getMaxIntrinsicWidth=F.paragraph_getMaxIntrinsicWidth)(a);w._paragraph_getAlphabeticBaseline=a=>(w._paragraph_getAlphabeticBaseline=F.paragraph_getAlphabeticBaseline)(a);w._paragraph_getIdeographicBaseline=a=>(w._paragraph_getIdeographicBaseline=F.paragraph_getIdeographicBaseline)(a); +w._paragraph_getDidExceedMaxLines=a=>(w._paragraph_getDidExceedMaxLines=F.paragraph_getDidExceedMaxLines)(a);w._paragraph_layout=(a,b)=>(w._paragraph_layout=F.paragraph_layout)(a,b);w._paragraph_getPositionForOffset=(a,b,c,e)=>(w._paragraph_getPositionForOffset=F.paragraph_getPositionForOffset)(a,b,c,e);w._paragraph_getWordBoundary=(a,b,c)=>(w._paragraph_getWordBoundary=F.paragraph_getWordBoundary)(a,b,c);w._paragraph_getLineCount=a=>(w._paragraph_getLineCount=F.paragraph_getLineCount)(a); +w._paragraph_getLineNumberAt=(a,b)=>(w._paragraph_getLineNumberAt=F.paragraph_getLineNumberAt)(a,b);w._paragraph_getLineMetricsAtIndex=(a,b)=>(w._paragraph_getLineMetricsAtIndex=F.paragraph_getLineMetricsAtIndex)(a,b);w._textBoxList_dispose=a=>(w._textBoxList_dispose=F.textBoxList_dispose)(a);w._textBoxList_getLength=a=>(w._textBoxList_getLength=F.textBoxList_getLength)(a);w._textBoxList_getBoxAtIndex=(a,b,c)=>(w._textBoxList_getBoxAtIndex=F.textBoxList_getBoxAtIndex)(a,b,c); +w._paragraph_getBoxesForRange=(a,b,c,e,f)=>(w._paragraph_getBoxesForRange=F.paragraph_getBoxesForRange)(a,b,c,e,f);w._paragraph_getBoxesForPlaceholders=a=>(w._paragraph_getBoxesForPlaceholders=F.paragraph_getBoxesForPlaceholders)(a);w._paragraph_getUnresolvedCodePoints=(a,b,c)=>(w._paragraph_getUnresolvedCodePoints=F.paragraph_getUnresolvedCodePoints)(a,b,c);w._paragraphBuilder_create=(a,b)=>(w._paragraphBuilder_create=F.paragraphBuilder_create)(a,b); +w._paragraphBuilder_dispose=a=>(w._paragraphBuilder_dispose=F.paragraphBuilder_dispose)(a);w._paragraphBuilder_addPlaceholder=(a,b,c,e,f,g)=>(w._paragraphBuilder_addPlaceholder=F.paragraphBuilder_addPlaceholder)(a,b,c,e,f,g);w._paragraphBuilder_addText=(a,b)=>(w._paragraphBuilder_addText=F.paragraphBuilder_addText)(a,b);w._paragraphBuilder_getUtf8Text=(a,b)=>(w._paragraphBuilder_getUtf8Text=F.paragraphBuilder_getUtf8Text)(a,b); +w._paragraphBuilder_pushStyle=(a,b)=>(w._paragraphBuilder_pushStyle=F.paragraphBuilder_pushStyle)(a,b);w._paragraphBuilder_pop=a=>(w._paragraphBuilder_pop=F.paragraphBuilder_pop)(a);w._paragraphBuilder_build=a=>(w._paragraphBuilder_build=F.paragraphBuilder_build)(a);w._unicodePositionBuffer_create=a=>(w._unicodePositionBuffer_create=F.unicodePositionBuffer_create)(a);w._unicodePositionBuffer_getDataPointer=a=>(w._unicodePositionBuffer_getDataPointer=F.unicodePositionBuffer_getDataPointer)(a); +w._unicodePositionBuffer_free=a=>(w._unicodePositionBuffer_free=F.unicodePositionBuffer_free)(a);w._lineBreakBuffer_create=a=>(w._lineBreakBuffer_create=F.lineBreakBuffer_create)(a);w._lineBreakBuffer_getDataPointer=a=>(w._lineBreakBuffer_getDataPointer=F.lineBreakBuffer_getDataPointer)(a);w._lineBreakBuffer_free=a=>(w._lineBreakBuffer_free=F.lineBreakBuffer_free)(a); +w._paragraphBuilder_setGraphemeBreaksUtf16=(a,b)=>(w._paragraphBuilder_setGraphemeBreaksUtf16=F.paragraphBuilder_setGraphemeBreaksUtf16)(a,b);w._paragraphBuilder_setWordBreaksUtf16=(a,b)=>(w._paragraphBuilder_setWordBreaksUtf16=F.paragraphBuilder_setWordBreaksUtf16)(a,b);w._paragraphBuilder_setLineBreaksUtf16=(a,b)=>(w._paragraphBuilder_setLineBreaksUtf16=F.paragraphBuilder_setLineBreaksUtf16)(a,b);w._paragraphStyle_create=()=>(w._paragraphStyle_create=F.paragraphStyle_create)(); +w._paragraphStyle_dispose=a=>(w._paragraphStyle_dispose=F.paragraphStyle_dispose)(a);w._paragraphStyle_setTextAlign=(a,b)=>(w._paragraphStyle_setTextAlign=F.paragraphStyle_setTextAlign)(a,b);w._paragraphStyle_setTextDirection=(a,b)=>(w._paragraphStyle_setTextDirection=F.paragraphStyle_setTextDirection)(a,b);w._paragraphStyle_setMaxLines=(a,b)=>(w._paragraphStyle_setMaxLines=F.paragraphStyle_setMaxLines)(a,b); +w._paragraphStyle_setHeight=(a,b)=>(w._paragraphStyle_setHeight=F.paragraphStyle_setHeight)(a,b);w._paragraphStyle_setTextHeightBehavior=(a,b,c)=>(w._paragraphStyle_setTextHeightBehavior=F.paragraphStyle_setTextHeightBehavior)(a,b,c);w._paragraphStyle_setEllipsis=(a,b)=>(w._paragraphStyle_setEllipsis=F.paragraphStyle_setEllipsis)(a,b);w._paragraphStyle_setStrutStyle=(a,b)=>(w._paragraphStyle_setStrutStyle=F.paragraphStyle_setStrutStyle)(a,b); +w._paragraphStyle_setTextStyle=(a,b)=>(w._paragraphStyle_setTextStyle=F.paragraphStyle_setTextStyle)(a,b);w._strutStyle_create=()=>(w._strutStyle_create=F.strutStyle_create)();w._strutStyle_dispose=a=>(w._strutStyle_dispose=F.strutStyle_dispose)(a);w._strutStyle_setFontFamilies=(a,b,c)=>(w._strutStyle_setFontFamilies=F.strutStyle_setFontFamilies)(a,b,c);w._strutStyle_setFontSize=(a,b)=>(w._strutStyle_setFontSize=F.strutStyle_setFontSize)(a,b); +w._strutStyle_setHeight=(a,b)=>(w._strutStyle_setHeight=F.strutStyle_setHeight)(a,b);w._strutStyle_setHalfLeading=(a,b)=>(w._strutStyle_setHalfLeading=F.strutStyle_setHalfLeading)(a,b);w._strutStyle_setLeading=(a,b)=>(w._strutStyle_setLeading=F.strutStyle_setLeading)(a,b);w._strutStyle_setFontStyle=(a,b,c)=>(w._strutStyle_setFontStyle=F.strutStyle_setFontStyle)(a,b,c);w._strutStyle_setForceStrutHeight=(a,b)=>(w._strutStyle_setForceStrutHeight=F.strutStyle_setForceStrutHeight)(a,b); +w._textStyle_create=()=>(w._textStyle_create=F.textStyle_create)();w._textStyle_copy=a=>(w._textStyle_copy=F.textStyle_copy)(a);w._textStyle_dispose=a=>(w._textStyle_dispose=F.textStyle_dispose)(a);w._textStyle_setColor=(a,b)=>(w._textStyle_setColor=F.textStyle_setColor)(a,b);w._textStyle_setDecoration=(a,b)=>(w._textStyle_setDecoration=F.textStyle_setDecoration)(a,b);w._textStyle_setDecorationColor=(a,b)=>(w._textStyle_setDecorationColor=F.textStyle_setDecorationColor)(a,b); +w._textStyle_setDecorationStyle=(a,b)=>(w._textStyle_setDecorationStyle=F.textStyle_setDecorationStyle)(a,b);w._textStyle_setDecorationThickness=(a,b)=>(w._textStyle_setDecorationThickness=F.textStyle_setDecorationThickness)(a,b);w._textStyle_setFontStyle=(a,b,c)=>(w._textStyle_setFontStyle=F.textStyle_setFontStyle)(a,b,c);w._textStyle_setTextBaseline=(a,b)=>(w._textStyle_setTextBaseline=F.textStyle_setTextBaseline)(a,b);w._textStyle_clearFontFamilies=a=>(w._textStyle_clearFontFamilies=F.textStyle_clearFontFamilies)(a); +w._textStyle_addFontFamilies=(a,b,c)=>(w._textStyle_addFontFamilies=F.textStyle_addFontFamilies)(a,b,c);w._textStyle_setFontSize=(a,b)=>(w._textStyle_setFontSize=F.textStyle_setFontSize)(a,b);w._textStyle_setLetterSpacing=(a,b)=>(w._textStyle_setLetterSpacing=F.textStyle_setLetterSpacing)(a,b);w._textStyle_setWordSpacing=(a,b)=>(w._textStyle_setWordSpacing=F.textStyle_setWordSpacing)(a,b);w._textStyle_setHeight=(a,b)=>(w._textStyle_setHeight=F.textStyle_setHeight)(a,b); +w._textStyle_setHalfLeading=(a,b)=>(w._textStyle_setHalfLeading=F.textStyle_setHalfLeading)(a,b);w._textStyle_setLocale=(a,b)=>(w._textStyle_setLocale=F.textStyle_setLocale)(a,b);w._textStyle_setBackground=(a,b)=>(w._textStyle_setBackground=F.textStyle_setBackground)(a,b);w._textStyle_setForeground=(a,b)=>(w._textStyle_setForeground=F.textStyle_setForeground)(a,b);w._textStyle_addShadow=(a,b,c,e,f)=>(w._textStyle_addShadow=F.textStyle_addShadow)(a,b,c,e,f); +w._textStyle_addFontFeature=(a,b,c)=>(w._textStyle_addFontFeature=F.textStyle_addFontFeature)(a,b,c);w._textStyle_setFontVariations=(a,b,c,e)=>(w._textStyle_setFontVariations=F.textStyle_setFontVariations)(a,b,c,e);w._vertices_create=(a,b,c,e,f,g,l)=>(w._vertices_create=F.vertices_create)(a,b,c,e,f,g,l);w._vertices_dispose=a=>(w._vertices_dispose=F.vertices_dispose)(a);var fb=w._pthread_self=()=>(fb=w._pthread_self=F.pthread_self)(),pb=a=>(pb=F.malloc)(a); +w.__emscripten_tls_init=()=>(w.__emscripten_tls_init=F._emscripten_tls_init)();var ad=w.__emscripten_thread_init=(a,b,c,e,f,g)=>(ad=w.__emscripten_thread_init=F._emscripten_thread_init)(a,b,c,e,f,g);w.__emscripten_thread_crashed=()=>(w.__emscripten_thread_crashed=F._emscripten_thread_crashed)(); +var jc=(a,b,c,e)=>(jc=F._emscripten_run_in_main_runtime_thread_js)(a,b,c,e),db=a=>(db=F._emscripten_thread_free_data)(a),jb=w.__emscripten_thread_exit=a=>(jb=w.__emscripten_thread_exit=F._emscripten_thread_exit)(a),wb=w.__emscripten_check_mailbox=()=>(wb=w.__emscripten_check_mailbox=F._emscripten_check_mailbox)(),Z=(a,b)=>(Z=F.setThrew)(a,b),ib=(a,b)=>(ib=F.emscripten_stack_set_limits)(a,b),N=()=>(N=F.stackSave)(),M=a=>(M=F.stackRestore)(a),Cb=w.stackAlloc=a=>(Cb=w.stackAlloc=F.stackAlloc)(a); +function cd(a,b,c){var e=N();try{return G.get(a)(b,c)}catch(f){M(e);if(f!==f+0)throw f;Z(1,0)}}function hd(a,b,c){var e=N();try{G.get(a)(b,c)}catch(f){M(e);if(f!==f+0)throw f;Z(1,0)}}function bd(a,b){var c=N();try{return G.get(a)(b)}catch(e){M(c);if(e!==e+0)throw e;Z(1,0)}}function jd(a,b,c,e){var f=N();try{G.get(a)(b,c,e)}catch(g){M(f);if(g!==g+0)throw g;Z(1,0)}}function dd(a,b,c,e){var f=N();try{return G.get(a)(b,c,e)}catch(g){M(f);if(g!==g+0)throw g;Z(1,0)}} +function kd(a,b,c,e,f){var g=N();try{G.get(a)(b,c,e,f)}catch(l){M(g);if(l!==l+0)throw l;Z(1,0)}}function ld(a,b,c,e,f,g,l,n){var r=N();try{G.get(a)(b,c,e,f,g,l,n)}catch(u){M(r);if(u!==u+0)throw u;Z(1,0)}}function gd(a,b){var c=N();try{G.get(a)(b)}catch(e){M(c);if(e!==e+0)throw e;Z(1,0)}}function fd(a,b,c,e,f,g,l){var n=N();try{return G.get(a)(b,c,e,f,g,l)}catch(r){M(n);if(r!==r+0)throw r;Z(1,0)}} +function ed(a,b,c,e,f){var g=N();try{return G.get(a)(b,c,e,f)}catch(l){M(g);if(l!==l+0)throw l;Z(1,0)}}w.keepRuntimeAlive=Ka;w.wasmMemory=d;w.wasmExports=F; +w.addFunction=function(a,b){if(!Vc){Vc=new WeakMap;var c=G.length;if(Vc)for(var e=0;e<0+c;e++){var f=G.get(e);f&&Vc.set(f,e)}}if(c=Vc.get(a)||0)return c;if(Wc.length)c=Wc.pop();else{try{G.grow(1)}catch(n){if(!(n instanceof RangeError))throw n;throw"Unable to grow wasm table. Set ALLOW_TABLE_GROWTH.";}c=G.length-1}try{G.set(c,a)}catch(n){if(!(n instanceof TypeError))throw n;if("function"==typeof WebAssembly.Function){e=WebAssembly.Function;f={i:"i32",j:"i64",f:"f32",d:"f64",p:"i32"};for(var g={parameters:[], +results:"v"==b[0]?[]:[f[b[0]]]},l=1;ll?e.push(l):e.push(l%128|128,l>>7);for(l=0;lf?b.push(f):b.push(f%128|128,f>>7);b.push.apply(b,e);b.push(2,7,1,1,101,1,102,0,0,7,5,1,1,102,0,0);b=new WebAssembly.Module(new Uint8Array(b));b=(new WebAssembly.Instance(b, +{e:{f:a}})).exports.f}G.set(c,b)}Vc.set(a,c);return c};w.ExitStatus=Va;w.PThread=I;var nd;Ma=function od(){nd||pd();nd||(Ma=od)}; +function pd(){function a(){if(!nd&&(nd=!0,w.calledRun=!0,!Ba)){A||hb(Ha);ja(w);if(w.onRuntimeInitialized)w.onRuntimeInitialized();if(!A){if(w.postRun)for("function"==typeof w.postRun&&(w.postRun=[w.postRun]);w.postRun.length;){var b=w.postRun.shift();Ia.unshift(b)}hb(Ia)}}}if(!(0 skwasm); diff --git a/canvaskit/skwasm.wasm b/canvaskit/skwasm.wasm new file mode 100644 index 0000000000..3d245a78e4 Binary files /dev/null and b/canvaskit/skwasm.wasm differ diff --git a/canvaskit/skwasm.worker.js b/canvaskit/skwasm.worker.js new file mode 100644 index 0000000000..201afe5382 --- /dev/null +++ b/canvaskit/skwasm.worker.js @@ -0,0 +1 @@ +"use strict";var Module={};var ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string";if(ENVIRONMENT_IS_NODE){var nodeWorkerThreads=require("worker_threads");var parentPort=nodeWorkerThreads.parentPort;parentPort.on("message",data=>onmessage({data:data}));var fs=require("fs");Object.assign(global,{self:global,require:require,Module:Module,location:{href:__filename},Worker:nodeWorkerThreads.Worker,importScripts:f=>(0,eval)(fs.readFileSync(f,"utf8")+"//# sourceURL="+f),postMessage:msg=>parentPort.postMessage(msg),performance:global.performance||{now:Date.now}})}var initializedJS=false;function threadPrintErr(){var text=Array.prototype.slice.call(arguments).join(" ");if(ENVIRONMENT_IS_NODE){fs.writeSync(2,text+"\n");return}console.error(text)}function threadAlert(){var text=Array.prototype.slice.call(arguments).join(" ");postMessage({cmd:"alert",text:text,threadId:Module["_pthread_self"]()})}var err=threadPrintErr;self.alert=threadAlert;Module["instantiateWasm"]=(info,receiveInstance)=>{var module=Module["wasmModule"];Module["wasmModule"]=null;var instance=new WebAssembly.Instance(module,info);return receiveInstance(instance)};self.onunhandledrejection=e=>{throw e.reason??e};function handleMessage(e){try{if(e.data.cmd==="load"){let messageQueue=[];self.onmessage=e=>messageQueue.push(e);self.startWorker=instance=>{Module=instance;postMessage({"cmd":"loaded"});for(let msg of messageQueue){handleMessage(msg)}self.onmessage=handleMessage};Module["wasmModule"]=e.data.wasmModule;for(const handler of e.data.handlers){Module[handler]=(...args)=>{postMessage({cmd:"callHandler",handler:handler,args:args})}}Module["wasmMemory"]=e.data.wasmMemory;Module["buffer"]=Module["wasmMemory"].buffer;Module["ENVIRONMENT_IS_PTHREAD"]=true;if(typeof e.data.urlOrBlob=="string"){importScripts(e.data.urlOrBlob)}else{var objectUrl=URL.createObjectURL(e.data.urlOrBlob);importScripts(objectUrl);URL.revokeObjectURL(objectUrl)}skwasm(Module)}else if(e.data.cmd==="run"){Module["__emscripten_thread_init"](e.data.pthread_ptr,/*isMainBrowserThread=*/0,/*isMainRuntimeThread=*/0,/*canBlock=*/1);Module["__emscripten_thread_mailbox_await"](e.data.pthread_ptr);Module["establishStackSpace"]();Module["PThread"].receiveObjectTransfer(e.data);Module["PThread"].threadInitTLS();if(!initializedJS){initializedJS=true}try{Module["invokeEntryPoint"](e.data.start_routine,e.data.arg)}catch(ex){if(ex!="unwind"){throw ex}}}else if(e.data.cmd==="cancel"){if(Module["_pthread_self"]()){Module["__emscripten_thread_exit"](-1)}}else if(e.data.target==="setimmediate"){}else if(e.data.cmd==="checkMailbox"){if(initializedJS){Module["checkMailbox"]()}}else if(e.data.cmd){err("worker.js received unknown command "+e.data.cmd);err(e.data)}}catch(ex){if(Module["__emscripten_thread_crashed"]){Module["__emscripten_thread_crashed"]()}throw ex}}self.onmessage=handleMessage; diff --git a/example/.gitignore b/example/.gitignore deleted file mode 100644 index 8655937431..0000000000 --- a/example/.gitignore +++ /dev/null @@ -1,76 +0,0 @@ -# Miscellaneous -*.class -*.log -*.pyc -*.swp -.DS_Store -.atom/ -.buildlog/ -.history -.svn/ - -pubspec.lock - -# IntelliJ related -*.iml -*.ipr -*.iws -.idea/ - -# The .vscode folder contains launch configuration and tasks you configure in -# VS Code which you may wish to be included in version control, so this line -# is commented out by default. -#.vscode/ - -# Flutter/Dart/Pub related -**/doc/api/ -.dart_tool/ -.flutter-plugins -.packages -.pub-cache/ -.pub/ -/build/ -.flutter-plugins-dependencies - -# Android related -**/android/**/gradle-wrapper.jar -**/android/.gradle -**/android/captures/ -**/android/gradlew -**/android/gradlew.bat -**/android/local.properties -**/android/**/GeneratedPluginRegistrant.java - -# iOS/XCode related -**/ios/**/*.mode1v3 -**/ios/**/*.mode2v3 -**/ios/**/*.moved-aside -**/ios/**/*.pbxuser -**/ios/**/*.perspectivev3 -**/ios/**/*sync/ -**/ios/**/.sconsign.dblite -**/ios/**/.tags* -**/ios/**/.vagrant/ -**/ios/**/DerivedData/ -**/ios/**/Icon? -**/ios/**/Pods/ -**/ios/**/.symlinks/ -**/ios/**/profile -**/ios/**/xcuserdata -**/ios/.generated/ -**/ios/Flutter/App.framework -**/ios/Flutter/Flutter.framework -**/ios/Flutter/Generated.xcconfig -**/ios/Flutter/app.flx -**/ios/Flutter/app.zip -**/ios/Flutter/flutter_assets/ -**/ios/ServiceDefinitions.json -**/ios/Runner/GeneratedPluginRegistrant.* -**/ios/Flutter/Flutter.podspec - -# Exceptions to above rules. -!**/ios/**/default.mode1v3 -!**/ios/**/default.mode2v3 -!**/ios/**/default.pbxuser -!**/ios/**/default.perspectivev3 -!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages diff --git a/example/.metadata b/example/.metadata deleted file mode 100644 index 7fdf3f26b0..0000000000 --- a/example/.metadata +++ /dev/null @@ -1,30 +0,0 @@ -# This file tracks properties of this Flutter project. -# Used by Flutter tool to assess capabilities and perform upgrades etc. -# -# This file should be version controlled. - -version: - revision: 90c64ed42ba53a52d18f0cb3b17666c8662ed2a0 - channel: stable - -project_type: app - -# Tracks metadata for the flutter migrate command -migration: - platforms: - - platform: root - create_revision: 90c64ed42ba53a52d18f0cb3b17666c8662ed2a0 - base_revision: 90c64ed42ba53a52d18f0cb3b17666c8662ed2a0 - - platform: windows - create_revision: 90c64ed42ba53a52d18f0cb3b17666c8662ed2a0 - base_revision: 90c64ed42ba53a52d18f0cb3b17666c8662ed2a0 - - # User provided section - - # List of Local paths (relative to this file) that should be - # ignored by the migrate tool. - # - # Files that are not part of the templates will be ignored by default. - unmanaged_files: - - 'lib/main.dart' - - 'ios/Runner.xcodeproj/project.pbxproj' diff --git a/example/README.md b/example/README.md deleted file mode 100644 index d02c91b8f5..0000000000 --- a/example/README.md +++ /dev/null @@ -1,4 +0,0 @@ -This is the FL Chart App. -Check it out live here: - -[app.flchart.dev](https://app.flchart.dev) diff --git a/example/analysis_options.yaml b/example/analysis_options.yaml deleted file mode 100644 index 61b6c4de17..0000000000 --- a/example/analysis_options.yaml +++ /dev/null @@ -1,29 +0,0 @@ -# This file configures the analyzer, which statically analyzes Dart code to -# check for errors, warnings, and lints. -# -# The issues identified by the analyzer are surfaced in the UI of Dart-enabled -# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be -# invoked from the command line by running `flutter analyze`. - -# The following line activates a set of recommended lints for Flutter apps, -# packages, and plugins designed to encourage good coding practices. -include: package:flutter_lints/flutter.yaml - -linter: - # The lint rules applied to this project can be customized in the - # section below to disable rules from the `package:flutter_lints/flutter.yaml` - # included above or to enable additional rules. A list of all available lints - # and their documentation is published at - # https://dart-lang.github.io/linter/lints/index.html. - # - # Instead of disabling a lint rule for the entire project in the - # section below, it can also be suppressed for a single line of code - # or a specific dart file by using the `// ignore: name_of_lint` and - # `// ignore_for_file: name_of_lint` syntax on the line or in the file - # producing the lint. - rules: - # avoid_print: false # Uncomment to disable the `avoid_print` rule - # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule - -# Additional information about this file can be found at -# https://dart.dev/guides/language/analysis-options diff --git a/example/android/.gitignore b/example/android/.gitignore deleted file mode 100644 index 6f568019d3..0000000000 --- a/example/android/.gitignore +++ /dev/null @@ -1,13 +0,0 @@ -gradle-wrapper.jar -/.gradle -/captures/ -/gradlew -/gradlew.bat -/local.properties -GeneratedPluginRegistrant.java - -# Remember to never publicly share your keystore. -# See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app -key.properties -**/*.keystore -**/*.jks diff --git a/example/android/app/build.gradle b/example/android/app/build.gradle deleted file mode 100644 index 18a7544127..0000000000 --- a/example/android/app/build.gradle +++ /dev/null @@ -1,71 +0,0 @@ -def localProperties = new Properties() -def localPropertiesFile = rootProject.file('local.properties') -if (localPropertiesFile.exists()) { - localPropertiesFile.withReader('UTF-8') { reader -> - localProperties.load(reader) - } -} - -def flutterRoot = localProperties.getProperty('flutter.sdk') -if (flutterRoot == null) { - throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") -} - -def flutterVersionCode = localProperties.getProperty('flutter.versionCode') -if (flutterVersionCode == null) { - flutterVersionCode = '1' -} - -def flutterVersionName = localProperties.getProperty('flutter.versionName') -if (flutterVersionName == null) { - flutterVersionName = '1.0' -} - -apply plugin: 'com.android.application' -apply plugin: 'kotlin-android' -apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" - -android { - compileSdkVersion flutter.compileSdkVersion - ndkVersion flutter.ndkVersion - - compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = '1.8' - } - - sourceSets { - main.java.srcDirs += 'src/main/kotlin' - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId "dev.flchart.app" - // You can update the following values to match your application needs. - // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-build-configuration. - minSdkVersion flutter.minSdkVersion - targetSdkVersion flutter.targetSdkVersion - versionCode flutterVersionCode.toInteger() - versionName flutterVersionName - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig signingConfigs.debug - } - } -} - -flutter { - source '../..' -} - -dependencies { - implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" -} diff --git a/example/android/app/src/debug/AndroidManifest.xml b/example/android/app/src/debug/AndroidManifest.xml deleted file mode 100644 index cd1ea04e0d..0000000000 --- a/example/android/app/src/debug/AndroidManifest.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - diff --git a/example/android/app/src/main/AndroidManifest.xml b/example/android/app/src/main/AndroidManifest.xml deleted file mode 100644 index 63fa0ba9de..0000000000 --- a/example/android/app/src/main/AndroidManifest.xml +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - - - - - - - - diff --git a/example/android/app/src/main/kotlin/dev/flchart/app/MainActivity.kt b/example/android/app/src/main/kotlin/dev/flchart/app/MainActivity.kt deleted file mode 100644 index 5b21453316..0000000000 --- a/example/android/app/src/main/kotlin/dev/flchart/app/MainActivity.kt +++ /dev/null @@ -1,6 +0,0 @@ -package dev.flchart.app - -import io.flutter.embedding.android.FlutterActivity - -class MainActivity: FlutterActivity() { -} diff --git a/example/android/app/src/main/res/drawable-v21/launch_background.xml b/example/android/app/src/main/res/drawable-v21/launch_background.xml deleted file mode 100644 index f74085f3f6..0000000000 --- a/example/android/app/src/main/res/drawable-v21/launch_background.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - diff --git a/example/android/app/src/main/res/drawable/launch_background.xml b/example/android/app/src/main/res/drawable/launch_background.xml deleted file mode 100644 index 304732f884..0000000000 --- a/example/android/app/src/main/res/drawable/launch_background.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - diff --git a/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index db77bb4b7b..0000000000 Binary files a/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index 17987b79bb..0000000000 Binary files a/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index 09d4391482..0000000000 Binary files a/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index d5f1c8d34e..0000000000 Binary files a/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index 4d6372eebd..0000000000 Binary files a/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/example/android/app/src/main/res/values-night/styles.xml b/example/android/app/src/main/res/values-night/styles.xml deleted file mode 100644 index 06952be745..0000000000 --- a/example/android/app/src/main/res/values-night/styles.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - diff --git a/example/android/app/src/main/res/values/styles.xml b/example/android/app/src/main/res/values/styles.xml deleted file mode 100644 index cb1ef88056..0000000000 --- a/example/android/app/src/main/res/values/styles.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - diff --git a/example/android/app/src/profile/AndroidManifest.xml b/example/android/app/src/profile/AndroidManifest.xml deleted file mode 100644 index cd1ea04e0d..0000000000 --- a/example/android/app/src/profile/AndroidManifest.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - diff --git a/example/android/build.gradle b/example/android/build.gradle deleted file mode 100644 index 83ae220041..0000000000 --- a/example/android/build.gradle +++ /dev/null @@ -1,31 +0,0 @@ -buildscript { - ext.kotlin_version = '1.6.10' - repositories { - google() - mavenCentral() - } - - dependencies { - classpath 'com.android.tools.build:gradle:7.1.2' - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" - } -} - -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = '../build' -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(':app') -} - -task clean(type: Delete) { - delete rootProject.buildDir -} diff --git a/example/android/gradle.properties b/example/android/gradle.properties deleted file mode 100644 index 94adc3a3f9..0000000000 --- a/example/android/gradle.properties +++ /dev/null @@ -1,3 +0,0 @@ -org.gradle.jvmargs=-Xmx1536M -android.useAndroidX=true -android.enableJetifier=true diff --git a/example/android/gradle/wrapper/gradle-wrapper.properties b/example/android/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index cb24abda10..0000000000 --- a/example/android/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,5 +0,0 @@ -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-all.zip diff --git a/example/android/settings.gradle b/example/android/settings.gradle deleted file mode 100644 index 44e62bcf06..0000000000 --- a/example/android/settings.gradle +++ /dev/null @@ -1,11 +0,0 @@ -include ':app' - -def localPropertiesFile = new File(rootProject.projectDir, "local.properties") -def properties = new Properties() - -assert localPropertiesFile.exists() -localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } - -def flutterSdkPath = properties.getProperty("flutter.sdk") -assert flutterSdkPath != null, "flutter.sdk not set in local.properties" -apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" diff --git a/example/ios/.gitignore b/example/ios/.gitignore deleted file mode 100644 index 7a7f9873ad..0000000000 --- a/example/ios/.gitignore +++ /dev/null @@ -1,34 +0,0 @@ -**/dgph -*.mode1v3 -*.mode2v3 -*.moved-aside -*.pbxuser -*.perspectivev3 -**/*sync/ -.sconsign.dblite -.tags* -**/.vagrant/ -**/DerivedData/ -Icon? -**/Pods/ -**/.symlinks/ -profile -xcuserdata -**/.generated/ -Flutter/App.framework -Flutter/Flutter.framework -Flutter/Flutter.podspec -Flutter/Generated.xcconfig -Flutter/ephemeral/ -Flutter/app.flx -Flutter/app.zip -Flutter/flutter_assets/ -Flutter/flutter_export_environment.sh -ServiceDefinitions.json -Runner/GeneratedPluginRegistrant.* - -# Exceptions to above rules. -!default.mode1v3 -!default.mode2v3 -!default.pbxuser -!default.perspectivev3 diff --git a/example/ios/Flutter/AppFrameworkInfo.plist b/example/ios/Flutter/AppFrameworkInfo.plist deleted file mode 100644 index 9625e105df..0000000000 --- a/example/ios/Flutter/AppFrameworkInfo.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - App - CFBundleIdentifier - io.flutter.flutter.app - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - App - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1.0 - MinimumOSVersion - 11.0 - - diff --git a/example/ios/Flutter/Debug.xcconfig b/example/ios/Flutter/Debug.xcconfig deleted file mode 100644 index ec97fc6f30..0000000000 --- a/example/ios/Flutter/Debug.xcconfig +++ /dev/null @@ -1,2 +0,0 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" -#include "Generated.xcconfig" diff --git a/example/ios/Flutter/Release.xcconfig b/example/ios/Flutter/Release.xcconfig deleted file mode 100644 index c4855bfe20..0000000000 --- a/example/ios/Flutter/Release.xcconfig +++ /dev/null @@ -1,2 +0,0 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" -#include "Generated.xcconfig" diff --git a/example/ios/Podfile b/example/ios/Podfile deleted file mode 100644 index 88359b225f..0000000000 --- a/example/ios/Podfile +++ /dev/null @@ -1,41 +0,0 @@ -# Uncomment this line to define a global platform for your project -# platform :ios, '11.0' - -# CocoaPods analytics sends network stats synchronously affecting flutter build latency. -ENV['COCOAPODS_DISABLE_STATS'] = 'true' - -project 'Runner', { - 'Debug' => :debug, - 'Profile' => :release, - 'Release' => :release, -} - -def flutter_root - generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) - unless File.exist?(generated_xcode_build_settings_path) - raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" - end - - File.foreach(generated_xcode_build_settings_path) do |line| - matches = line.match(/FLUTTER_ROOT\=(.*)/) - return matches[1].strip if matches - end - raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" -end - -require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) - -flutter_ios_podfile_setup - -target 'Runner' do - use_frameworks! - use_modular_headers! - - flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) -end - -post_install do |installer| - installer.pods_project.targets.each do |target| - flutter_additional_ios_build_settings(target) - end -end diff --git a/example/ios/Podfile.lock b/example/ios/Podfile.lock deleted file mode 100644 index 08e21c21c8..0000000000 --- a/example/ios/Podfile.lock +++ /dev/null @@ -1,35 +0,0 @@ -PODS: - - Flutter (1.0.0) - - package_info_plus (0.4.5): - - Flutter - - path_provider_foundation (0.0.1): - - Flutter - - FlutterMacOS - - url_launcher_ios (0.0.1): - - Flutter - -DEPENDENCIES: - - Flutter (from `Flutter`) - - package_info_plus (from `.symlinks/plugins/package_info_plus/ios`) - - path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`) - - url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`) - -EXTERNAL SOURCES: - Flutter: - :path: Flutter - package_info_plus: - :path: ".symlinks/plugins/package_info_plus/ios" - path_provider_foundation: - :path: ".symlinks/plugins/path_provider_foundation/darwin" - url_launcher_ios: - :path: ".symlinks/plugins/url_launcher_ios/ios" - -SPEC CHECKSUMS: - Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854 - package_info_plus: 115f4ad11e0698c8c1c5d8a689390df880f47e85 - path_provider_foundation: 29f094ae23ebbca9d3d0cec13889cd9060c0e943 - url_launcher_ios: bf5ce03e0e2088bad9cc378ea97fa0ed5b49673b - -PODFILE CHECKSUM: ef19549a9bc3046e7bb7d2fab4d021637c0c58a3 - -COCOAPODS: 1.14.3 diff --git a/example/ios/Runner.xcodeproj/project.pbxproj b/example/ios/Runner.xcodeproj/project.pbxproj deleted file mode 100644 index fab3d87e79..0000000000 --- a/example/ios/Runner.xcodeproj/project.pbxproj +++ /dev/null @@ -1,555 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 54; - objects = { - -/* Begin PBXBuildFile section */ - 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 3A769574DE769ECF798B0709 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 380B38C853A9B1A4CE259991 /* Pods_Runner.framework */; }; - 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; - 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; - 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; -/* End PBXBuildFile section */ - -/* Begin PBXCopyFilesBuildPhase section */ - 9705A1C41CF9048500538489 /* Embed Frameworks */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 10; - files = ( - ); - name = "Embed Frameworks"; - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXCopyFilesBuildPhase section */ - -/* Begin PBXFileReference section */ - 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; - 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 380B38C853A9B1A4CE259991 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 70B7C328B4B2F1CF5A8F4CD5 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; - 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; - 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; - 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; - 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; - 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - A5FD4176E495AE357451309C /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - F92DACD635C19D794086368F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 97C146EB1CF9000F007C117D /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 3A769574DE769ECF798B0709 /* Pods_Runner.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 387A47388B1D7AAF78141AE7 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 380B38C853A9B1A4CE259991 /* Pods_Runner.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - 87E9D592125921BB4FA5096E /* Pods */ = { - isa = PBXGroup; - children = ( - 70B7C328B4B2F1CF5A8F4CD5 /* Pods-Runner.debug.xcconfig */, - F92DACD635C19D794086368F /* Pods-Runner.release.xcconfig */, - A5FD4176E495AE357451309C /* Pods-Runner.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; - 9740EEB11CF90186004384FC /* Flutter */ = { - isa = PBXGroup; - children = ( - 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, - 9740EEB21CF90195004384FC /* Debug.xcconfig */, - 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, - 9740EEB31CF90195004384FC /* Generated.xcconfig */, - ); - name = Flutter; - sourceTree = ""; - }; - 97C146E51CF9000F007C117D = { - isa = PBXGroup; - children = ( - 9740EEB11CF90186004384FC /* Flutter */, - 97C146F01CF9000F007C117D /* Runner */, - 97C146EF1CF9000F007C117D /* Products */, - 87E9D592125921BB4FA5096E /* Pods */, - 387A47388B1D7AAF78141AE7 /* Frameworks */, - ); - sourceTree = ""; - }; - 97C146EF1CF9000F007C117D /* Products */ = { - isa = PBXGroup; - children = ( - 97C146EE1CF9000F007C117D /* Runner.app */, - ); - name = Products; - sourceTree = ""; - }; - 97C146F01CF9000F007C117D /* Runner */ = { - isa = PBXGroup; - children = ( - 97C146FA1CF9000F007C117D /* Main.storyboard */, - 97C146FD1CF9000F007C117D /* Assets.xcassets */, - 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, - 97C147021CF9000F007C117D /* Info.plist */, - 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, - 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, - 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, - 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, - ); - path = Runner; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 97C146ED1CF9000F007C117D /* Runner */ = { - isa = PBXNativeTarget; - buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; - buildPhases = ( - B16E897CCC57E0F4B2344803 /* [CP] Check Pods Manifest.lock */, - 9740EEB61CF901F6004384FC /* Run Script */, - 97C146EA1CF9000F007C117D /* Sources */, - 97C146EB1CF9000F007C117D /* Frameworks */, - 97C146EC1CF9000F007C117D /* Resources */, - 9705A1C41CF9048500538489 /* Embed Frameworks */, - 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 00C61598CDE2223281B7DB47 /* [CP] Embed Pods Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = Runner; - productName = Runner; - productReference = 97C146EE1CF9000F007C117D /* Runner.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 97C146E61CF9000F007C117D /* Project object */ = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 1430; - ORGANIZATIONNAME = ""; - TargetAttributes = { - 97C146ED1CF9000F007C117D = { - CreatedOnToolsVersion = 7.3.1; - LastSwiftMigration = 1100; - }; - }; - }; - buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; - compatibilityVersion = "Xcode 9.3"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = 97C146E51CF9000F007C117D; - productRefGroup = 97C146EF1CF9000F007C117D /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 97C146ED1CF9000F007C117D /* Runner */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 97C146EC1CF9000F007C117D /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, - 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, - 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, - 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXShellScriptBuildPhase section */ - 00C61598CDE2223281B7DB47 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { - isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", - ); - name = "Thin Binary"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; - }; - 9740EEB61CF901F6004384FC /* Run Script */ = { - isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Run Script"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; - }; - B16E897CCC57E0F4B2344803 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; -/* End PBXShellScriptBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 97C146EA1CF9000F007C117D /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, - 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXVariantGroup section */ - 97C146FA1CF9000F007C117D /* Main.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 97C146FB1CF9000F007C117D /* Base */, - ); - name = Main.storyboard; - sourceTree = ""; - }; - 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 97C147001CF9000F007C117D /* Base */, - ); - name = LaunchScreen.storyboard; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - 249021D3217E4FDB00AE95B9 /* Profile */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = iphoneos; - SUPPORTED_PLATFORMS = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Profile; - }; - 249021D4217E4FDB00AE95B9 /* Profile */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - DEVELOPMENT_TEAM = 7X6Y935Z7G; - ENABLE_BITCODE = NO; - INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = dev.flchart.app.exampleNew; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; - SWIFT_VERSION = 5.0; - VERSIONING_SYSTEM = "apple-generic"; - }; - name = Profile; - }; - 97C147031CF9000F007C117D /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 97C147041CF9000F007C117D /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = iphoneos; - SUPPORTED_PLATFORMS = iphoneos; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_OPTIMIZATION_LEVEL = "-O"; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 97C147061CF9000F007C117D /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - DEVELOPMENT_TEAM = 7X6Y935Z7G; - ENABLE_BITCODE = NO; - INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = dev.flchart.app.exampleNew; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - VERSIONING_SYSTEM = "apple-generic"; - }; - name = Debug; - }; - 97C147071CF9000F007C117D /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - DEVELOPMENT_TEAM = 7X6Y935Z7G; - ENABLE_BITCODE = NO; - INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = dev.flchart.app.exampleNew; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; - SWIFT_VERSION = 5.0; - VERSIONING_SYSTEM = "apple-generic"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 97C147031CF9000F007C117D /* Debug */, - 97C147041CF9000F007C117D /* Release */, - 249021D3217E4FDB00AE95B9 /* Profile */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 97C147061CF9000F007C117D /* Debug */, - 97C147071CF9000F007C117D /* Release */, - 249021D4217E4FDB00AE95B9 /* Profile */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 97C146E61CF9000F007C117D /* Project object */; -} diff --git a/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 919434a625..0000000000 --- a/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d981003d..0000000000 --- a/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEDidComputeMac32BitWarning - - - diff --git a/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings deleted file mode 100644 index f9b0d7c5ea..0000000000 --- a/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings +++ /dev/null @@ -1,8 +0,0 @@ - - - - - PreviewsEnabled - - - diff --git a/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme deleted file mode 100644 index a6b826db27..0000000000 --- a/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/example/ios/Runner.xcworkspace/contents.xcworkspacedata b/example/ios/Runner.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 21a3cc14c7..0000000000 --- a/example/ios/Runner.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - diff --git a/example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d981003d..0000000000 --- a/example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEDidComputeMac32BitWarning - - - diff --git a/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings deleted file mode 100644 index f9b0d7c5ea..0000000000 --- a/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings +++ /dev/null @@ -1,8 +0,0 @@ - - - - - PreviewsEnabled - - - diff --git a/example/ios/Runner/AppDelegate.swift b/example/ios/Runner/AppDelegate.swift deleted file mode 100644 index 70693e4a8c..0000000000 --- a/example/ios/Runner/AppDelegate.swift +++ /dev/null @@ -1,13 +0,0 @@ -import UIKit -import Flutter - -@UIApplicationMain -@objc class AppDelegate: FlutterAppDelegate { - override func application( - _ application: UIApplication, - didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? - ) -> Bool { - GeneratedPluginRegistrant.register(with: self) - return super.application(application, didFinishLaunchingWithOptions: launchOptions) - } -} diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index d36b1fab2d..0000000000 --- a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,122 +0,0 @@ -{ - "images" : [ - { - "size" : "20x20", - "idiom" : "iphone", - "filename" : "Icon-App-20x20@2x.png", - "scale" : "2x" - }, - { - "size" : "20x20", - "idiom" : "iphone", - "filename" : "Icon-App-20x20@3x.png", - "scale" : "3x" - }, - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-App-29x29@1x.png", - "scale" : "1x" - }, - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-App-29x29@2x.png", - "scale" : "2x" - }, - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-App-29x29@3x.png", - "scale" : "3x" - }, - { - "size" : "40x40", - "idiom" : "iphone", - "filename" : "Icon-App-40x40@2x.png", - "scale" : "2x" - }, - { - "size" : "40x40", - "idiom" : "iphone", - "filename" : "Icon-App-40x40@3x.png", - "scale" : "3x" - }, - { - "size" : "60x60", - "idiom" : "iphone", - "filename" : "Icon-App-60x60@2x.png", - "scale" : "2x" - }, - { - "size" : "60x60", - "idiom" : "iphone", - "filename" : "Icon-App-60x60@3x.png", - "scale" : "3x" - }, - { - "size" : "20x20", - "idiom" : "ipad", - "filename" : "Icon-App-20x20@1x.png", - "scale" : "1x" - }, - { - "size" : "20x20", - "idiom" : "ipad", - "filename" : "Icon-App-20x20@2x.png", - "scale" : "2x" - }, - { - "size" : "29x29", - "idiom" : "ipad", - "filename" : "Icon-App-29x29@1x.png", - "scale" : "1x" - }, - { - "size" : "29x29", - "idiom" : "ipad", - "filename" : "Icon-App-29x29@2x.png", - "scale" : "2x" - }, - { - "size" : "40x40", - "idiom" : "ipad", - "filename" : "Icon-App-40x40@1x.png", - "scale" : "1x" - }, - { - "size" : "40x40", - "idiom" : "ipad", - "filename" : "Icon-App-40x40@2x.png", - "scale" : "2x" - }, - { - "size" : "76x76", - "idiom" : "ipad", - "filename" : "Icon-App-76x76@1x.png", - "scale" : "1x" - }, - { - "size" : "76x76", - "idiom" : "ipad", - "filename" : "Icon-App-76x76@2x.png", - "scale" : "2x" - }, - { - "size" : "83.5x83.5", - "idiom" : "ipad", - "filename" : "Icon-App-83.5x83.5@2x.png", - "scale" : "2x" - }, - { - "size" : "1024x1024", - "idiom" : "ios-marketing", - "filename" : "Icon-App-1024x1024@1x.png", - "scale" : "1x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png deleted file mode 100644 index dc9ada4725..0000000000 Binary files a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png and /dev/null differ diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png deleted file mode 100644 index 28c6bf0301..0000000000 Binary files a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png and /dev/null differ diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png deleted file mode 100644 index 2ccbfd967d..0000000000 Binary files a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png and /dev/null differ diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png deleted file mode 100644 index f091b6b0bc..0000000000 Binary files a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png and /dev/null differ diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png deleted file mode 100644 index 4cde12118d..0000000000 Binary files a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png and /dev/null differ diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png deleted file mode 100644 index d0ef06e7ed..0000000000 Binary files a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png and /dev/null differ diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png deleted file mode 100644 index dcdc2306c2..0000000000 Binary files a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png and /dev/null differ diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png deleted file mode 100644 index 2ccbfd967d..0000000000 Binary files a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png and /dev/null differ diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png deleted file mode 100644 index c8f9ed8f5c..0000000000 Binary files a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png and /dev/null differ diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png deleted file mode 100644 index a6d6b8609d..0000000000 Binary files a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png and /dev/null differ diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png deleted file mode 100644 index a6d6b8609d..0000000000 Binary files a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png and /dev/null differ diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png deleted file mode 100644 index 75b2d164a5..0000000000 Binary files a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png and /dev/null differ diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png deleted file mode 100644 index c4df70d39d..0000000000 Binary files a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png and /dev/null differ diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png deleted file mode 100644 index 6a84f41e14..0000000000 Binary files a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png and /dev/null differ diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png deleted file mode 100644 index d0e1f58536..0000000000 Binary files a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png and /dev/null differ diff --git a/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json b/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json deleted file mode 100644 index 0bedcf2fd4..0000000000 --- a/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "LaunchImage.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "LaunchImage@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "LaunchImage@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} diff --git a/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png b/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png deleted file mode 100644 index 9da19eacad..0000000000 Binary files a/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png and /dev/null differ diff --git a/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png deleted file mode 100644 index 9da19eacad..0000000000 Binary files a/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png and /dev/null differ diff --git a/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png deleted file mode 100644 index 9da19eacad..0000000000 Binary files a/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png and /dev/null differ diff --git a/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md deleted file mode 100644 index 89c2725b70..0000000000 --- a/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# Launch Screen Assets - -You can customize the launch screen with your own desired assets by replacing the image files in this directory. - -You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images. \ No newline at end of file diff --git a/example/ios/Runner/Base.lproj/LaunchScreen.storyboard b/example/ios/Runner/Base.lproj/LaunchScreen.storyboard deleted file mode 100644 index f2e259c7c9..0000000000 --- a/example/ios/Runner/Base.lproj/LaunchScreen.storyboard +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/example/ios/Runner/Base.lproj/Main.storyboard b/example/ios/Runner/Base.lproj/Main.storyboard deleted file mode 100644 index f3c28516fb..0000000000 --- a/example/ios/Runner/Base.lproj/Main.storyboard +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/example/ios/Runner/Info.plist b/example/ios/Runner/Info.plist deleted file mode 100644 index 45a944b31e..0000000000 --- a/example/ios/Runner/Info.plist +++ /dev/null @@ -1,51 +0,0 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleDisplayName - Example New - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - FL Chart App - CFBundlePackageType - APPL - CFBundleShortVersionString - $(FLUTTER_BUILD_NAME) - CFBundleSignature - ???? - CFBundleVersion - $(FLUTTER_BUILD_NUMBER) - LSRequiresIPhoneOS - - UILaunchStoryboardName - LaunchScreen - UIMainStoryboardFile - Main - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UISupportedInterfaceOrientations~ipad - - UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UIViewControllerBasedStatusBarAppearance - - CADisableMinimumFrameDurationOnPhone - - UIApplicationSupportsIndirectInputEvents - - - diff --git a/example/ios/Runner/Runner-Bridging-Header.h b/example/ios/Runner/Runner-Bridging-Header.h deleted file mode 100644 index 308a2a560b..0000000000 --- a/example/ios/Runner/Runner-Bridging-Header.h +++ /dev/null @@ -1 +0,0 @@ -#import "GeneratedPluginRegistrant.h" diff --git a/example/lib/cubits/app/app_cubit.dart b/example/lib/cubits/app/app_cubit.dart deleted file mode 100644 index b33f890429..0000000000 --- a/example/lib/cubits/app/app_cubit.dart +++ /dev/null @@ -1,35 +0,0 @@ -import 'package:fl_chart_app/urls.dart'; -import 'package:fl_chart_app/util/app_utils.dart'; -import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:package_info_plus/package_info_plus.dart'; -import 'package:equatable/equatable.dart'; - -part 'app_state.dart'; - -class AppCubit extends Cubit { - AppCubit() : super(const AppState()) { - initialize(); - } - - void initialize() async { - PackageInfo packageInfo = await PackageInfo.fromPlatform(); - emit(state.copyWith( - currentPackageInfo: packageInfo, - availableVersionToUpdate: '', - usingFlChartVersion: BuildConstants.usingFlChartVersion, - )); - } - - void onVersionClicked() { - AppUtils().tryToLaunchUrl( - Urls.getVersionReleaseUrl(state.usingFlChartVersion), - ); - } -} - -class BuildConstants { - static const String usingFlChartVersion = String.fromEnvironment( - 'USING_FL_CHART_VERSION', - defaultValue: '', - ); -} diff --git a/example/lib/cubits/app/app_state.dart b/example/lib/cubits/app/app_state.dart deleted file mode 100644 index 374135336e..0000000000 --- a/example/lib/cubits/app/app_state.dart +++ /dev/null @@ -1,34 +0,0 @@ -part of 'app_cubit.dart'; - -class AppState extends Equatable { - final PackageInfo? currentPackageInfo; - final String availableVersionToUpdate; - final String usingFlChartVersion; - - String? get appVersion => currentPackageInfo?.version; - - const AppState([ - this.currentPackageInfo, - this.availableVersionToUpdate = '', - this.usingFlChartVersion = '', - ]); - - AppState copyWith({ - PackageInfo? currentPackageInfo, - String? availableVersionToUpdate, - String? usingFlChartVersion, - }) { - return AppState( - currentPackageInfo ?? this.currentPackageInfo, - availableVersionToUpdate ?? this.availableVersionToUpdate, - usingFlChartVersion ?? this.usingFlChartVersion, - ); - } - - @override - List get props => [ - currentPackageInfo, - availableVersionToUpdate, - usingFlChartVersion, - ]; -} diff --git a/example/lib/main.dart b/example/lib/main.dart deleted file mode 100644 index a021e21bba..0000000000 --- a/example/lib/main.dart +++ /dev/null @@ -1,38 +0,0 @@ -import 'package:fl_chart_app/cubits/app/app_cubit.dart'; -import 'package:fl_chart_app/presentation/resources/app_resources.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:google_fonts/google_fonts.dart'; - -import 'presentation/router/app_router.dart'; - -void main() { - runApp(const MyApp()); -} - -class MyApp extends StatelessWidget { - const MyApp({super.key}); - - @override - Widget build(BuildContext context) { - return MultiBlocProvider( - providers: [ - BlocProvider(create: (BuildContext context) => AppCubit()), - ], - child: MaterialApp.router( - title: AppTexts.appName, - theme: ThemeData( - brightness: Brightness.dark, - useMaterial3: true, - textTheme: GoogleFonts.assistantTextTheme( - Theme.of(context).textTheme.apply( - bodyColor: AppColors.mainTextColor3, - ), - ), - scaffoldBackgroundColor: AppColors.pageBackground, - ), - routerConfig: appRouterConfig, - ), - ); - } -} diff --git a/example/lib/presentation/menu/app_menu.dart b/example/lib/presentation/menu/app_menu.dart deleted file mode 100644 index 51fcd2daf9..0000000000 --- a/example/lib/presentation/menu/app_menu.dart +++ /dev/null @@ -1,166 +0,0 @@ -import 'package:dartx/dartx.dart'; -import 'package:fl_chart_app/cubits/app/app_cubit.dart'; -import 'package:fl_chart_app/presentation/resources/app_resources.dart'; -import 'package:fl_chart_app/urls.dart'; -import 'package:fl_chart_app/util/app_helper.dart'; -import 'package:fl_chart_app/util/app_utils.dart'; -import 'package:flutter/gestures.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:url_launcher/url_launcher.dart'; - -import 'fl_chart_banner.dart'; -import 'menu_row.dart'; - -class AppMenu extends StatefulWidget { - final List menuItems; - final int currentSelectedIndex; - final Function(int, ChartMenuItem) onItemSelected; - final VoidCallback? onBannerClicked; - - const AppMenu({ - Key? key, - required this.menuItems, - required this.currentSelectedIndex, - required this.onItemSelected, - required this.onBannerClicked, - }) : super(key: key); - - @override - AppMenuState createState() => AppMenuState(); -} - -class AppMenuState extends State { - @override - Widget build(BuildContext context) { - return Container( - color: AppColors.itemsBackground, - child: Column( - children: [ - SafeArea( - child: AspectRatio( - aspectRatio: 3, - child: Center( - child: InkWell( - onTap: widget.onBannerClicked, - child: const FlChartBanner(), - ), - ), - ), - ), - Expanded( - child: ListView.builder( - itemBuilder: (context, position) { - final menuItem = widget.menuItems[position]; - return MenuRow( - text: menuItem.text, - svgPath: menuItem.iconPath, - isSelected: widget.currentSelectedIndex == position, - onTap: () { - widget.onItemSelected(position, menuItem); - }, - onDocumentsTap: () async { - final url = Uri.parse(menuItem.chartType.documentationUrl); - if (await canLaunchUrl(url)) { - await launchUrl(url); - } - }, - ); - }, - itemCount: widget.menuItems.length, - ), - ), - const _AppVersionRow(), - ], - ), - ); - } -} - -class _AppVersionRow extends StatelessWidget { - const _AppVersionRow(); - - @override - Widget build(BuildContext context) { - return BlocBuilder(builder: (context, state) { - if (state.appVersion.isNullOrBlank) { - return Container(); - } - return Container( - margin: const EdgeInsets.all(12), - child: Row( - children: [ - Expanded( - child: Padding( - padding: const EdgeInsets.all(10.0), - child: RichText( - text: TextSpan( - text: '', - style: DefaultTextStyle.of(context).style, - children: [ - const TextSpan(text: 'App version: '), - TextSpan( - text: 'v${state.appVersion!}', - style: const TextStyle( - fontWeight: FontWeight.bold, - ), - ), - if (state.usingFlChartVersion.isNotBlank) ...[ - TextSpan( - text: '\nfl_chart: ', - recognizer: TapGestureRecognizer() - ..onTap = BlocProvider.of(context) - .onVersionClicked, - ), - TextSpan( - text: 'v${state.usingFlChartVersion}', - style: const TextStyle( - fontWeight: FontWeight.bold, - ), - recognizer: TapGestureRecognizer() - ..onTap = BlocProvider.of(context) - .onVersionClicked, - ), - ] - ], - ), - ), - ), - ), - state.availableVersionToUpdate.isNotBlank - ? TextButton( - onPressed: () {}, - child: Text( - 'Update to ${state.availableVersionToUpdate}', - style: const TextStyle( - color: AppColors.primary, - fontSize: 12, - fontWeight: FontWeight.bold, - ), - ), - ) - : TextButton( - onPressed: () => AppUtils().tryToLaunchUrl(Urls.aboutUrl), - child: const Text( - 'About', - style: TextStyle( - color: AppColors.primary, - fontSize: 12, - fontWeight: FontWeight.bold, - ), - ), - ), - ], - ), - ); - }); - } -} - -class ChartMenuItem { - final ChartType chartType; - final String text; - final String iconPath; - - const ChartMenuItem(this.chartType, this.text, this.iconPath); -} diff --git a/example/lib/presentation/menu/fl_chart_banner.dart b/example/lib/presentation/menu/fl_chart_banner.dart deleted file mode 100644 index 009b69a081..0000000000 --- a/example/lib/presentation/menu/fl_chart_banner.dart +++ /dev/null @@ -1,38 +0,0 @@ -import 'package:fl_chart_app/presentation/resources/app_resources.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_svg/flutter_svg.dart'; - -class FlChartBanner extends StatelessWidget { - const FlChartBanner({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return LayoutBuilder(builder: (context, constraints) { - final maxWidth = constraints.maxWidth; - - final imageSize = maxWidth / 5.14; - final space = maxWidth / 16.0; - final textWidth = maxWidth / 2.8; - - return Row( - children: [ - SizedBox( - width: imageSize, - ), - Image.asset( - AppAssets.flChartLogoIcon, - width: imageSize, - height: imageSize, - ), - SizedBox( - width: space, - ), - SvgPicture.asset( - AppAssets.flChartLogoText, - width: textWidth, - ), - ], - ); - }); - } -} diff --git a/example/lib/presentation/menu/menu_row.dart b/example/lib/presentation/menu/menu_row.dart deleted file mode 100644 index 63db6e8df0..0000000000 --- a/example/lib/presentation/menu/menu_row.dart +++ /dev/null @@ -1,100 +0,0 @@ -import 'package:fl_chart_app/presentation/resources/app_resources.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_svg/flutter_svg.dart'; - -class MenuRow extends StatefulWidget { - final String text; - final String svgPath; - final bool isSelected; - final VoidCallback onTap; - final VoidCallback onDocumentsTap; - - const MenuRow({ - Key? key, - required this.text, - required this.svgPath, - required this.isSelected, - required this.onTap, - required this.onDocumentsTap, - }) : super(key: key); - - @override - State createState() => _MenuRowState(); -} - -class _MenuRowState extends State { - bool get _showSelectedState => widget.isSelected; - - bool isHovered = false; - - @override - Widget build(BuildContext context) { - return Material( - color: Colors.transparent, - child: InkWell( - onHover: (bool hovered) { - setState(() { - isHovered = hovered; - }); - }, - onTap: widget.onTap, - child: SizedBox( - height: AppDimens.menuRowHeight, - child: Row( - children: [ - const SizedBox( - width: 36, - ), - SvgPicture.asset( - widget.svgPath, - width: AppDimens.menuIconSize, - height: AppDimens.menuIconSize, - colorFilter: - const ColorFilter.mode(AppColors.primary, BlendMode.srcIn), - ), - const SizedBox( - width: 18, - ), - Text( - widget.text, - style: TextStyle( - color: _showSelectedState ? AppColors.primary : Colors.white, - fontSize: AppDimens.menuTextSize, - ), - ), - Expanded(child: Container()), - _DocumentationIcon(onTap: widget.onDocumentsTap), - const SizedBox( - width: 18, - ), - ], - ), - ), - ), - ); - } -} - -class _DocumentationIcon extends StatelessWidget { - const _DocumentationIcon({ - Key? key, - required this.onTap, - }) : super(key: key); - final VoidCallback onTap; - - @override - Widget build(BuildContext context) { - return SizedBox( - width: AppDimens.menuDocumentationIconSize, - height: AppDimens.menuDocumentationIconSize, - child: IconButton( - onPressed: onTap, - icon: const Icon( - Icons.article, - color: AppColors.contentColorWhite, - ), - tooltip: 'Documentation', - ), - ); - } -} diff --git a/example/lib/presentation/pages/chart_samples_page.dart b/example/lib/presentation/pages/chart_samples_page.dart deleted file mode 100644 index 3f3ad40796..0000000000 --- a/example/lib/presentation/pages/chart_samples_page.dart +++ /dev/null @@ -1,42 +0,0 @@ -import 'package:fl_chart_app/presentation/resources/app_resources.dart'; -import 'package:fl_chart_app/presentation/samples/chart_samples.dart'; -import 'package:fl_chart_app/presentation/widgets/chart_holder.dart'; -import 'package:fl_chart_app/util/app_helper.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart'; - -class ChartSamplesPage extends StatelessWidget { - final ChartType chartType; - - final samples = ChartSamples.samples; - - ChartSamplesPage({ - Key? key, - required this.chartType, - }) : super(key: key); - - @override - Widget build(BuildContext context) { - return Scaffold( - backgroundColor: Colors.transparent, - body: MasonryGridView.builder( - itemCount: samples[chartType]!.length, - key: ValueKey(chartType), - padding: const EdgeInsets.only( - left: AppDimens.chartSamplesSpace, - right: AppDimens.chartSamplesSpace, - top: AppDimens.chartSamplesSpace, - bottom: AppDimens.chartSamplesSpace + 68, - ), - crossAxisSpacing: AppDimens.chartSamplesSpace, - mainAxisSpacing: AppDimens.chartSamplesSpace, - itemBuilder: (BuildContext context, int index) { - return ChartHolder(chartSample: samples[chartType]![index]); - }, - gridDelegate: const SliverSimpleGridDelegateWithMaxCrossAxisExtent( - maxCrossAxisExtent: 600, - ), - ), - ); - } -} diff --git a/example/lib/presentation/pages/home_page.dart b/example/lib/presentation/pages/home_page.dart deleted file mode 100644 index d1e2b02d33..0000000000 --- a/example/lib/presentation/pages/home_page.dart +++ /dev/null @@ -1,91 +0,0 @@ -import 'package:dartx/dartx.dart'; -import 'package:fl_chart_app/presentation/menu/app_menu.dart'; -import 'package:fl_chart_app/presentation/resources/app_resources.dart'; -import 'package:fl_chart_app/urls.dart'; -import 'package:fl_chart_app/util/app_helper.dart'; -import 'package:fl_chart_app/util/app_utils.dart'; -import 'package:flutter/material.dart'; -import 'package:go_router/go_router.dart'; - -import 'chart_samples_page.dart'; - -class HomePage extends StatelessWidget { - HomePage({ - Key? key, - required this.showingChartType, - }) : super(key: key) { - _initMenuItems(); - } - - void _initMenuItems() { - _menuItemsIndices = {}; - _menuItems = ChartType.values.mapIndexed( - (int index, ChartType type) { - _menuItemsIndices[type] = index; - return ChartMenuItem( - type, - type.displayName, - type.assetIcon, - ); - }, - ).toList(); - } - - final ChartType showingChartType; - late final Map _menuItemsIndices; - late final List _menuItems; - - @override - Widget build(BuildContext context) { - final selectedMenuIndex = _menuItemsIndices[showingChartType]!; - return LayoutBuilder( - builder: (context, constraints) { - final needsDrawer = constraints.maxWidth <= - AppDimens.menuMaxNeededWidth + AppDimens.chartBoxMinWidth; - final appMenuWidget = AppMenu( - menuItems: _menuItems, - currentSelectedIndex: selectedMenuIndex, - onItemSelected: (newIndex, chartMenuItem) { - context.go('/${chartMenuItem.chartType.name}'); - if (needsDrawer) { - /// to close the drawer - Navigator.of(context).pop(); - } - }, - onBannerClicked: () => AppUtils().tryToLaunchUrl(Urls.flChartUrl), - ); - final samplesSectionWidget = - ChartSamplesPage(chartType: showingChartType); - final body = needsDrawer - ? samplesSectionWidget - : Row( - children: [ - SizedBox( - width: AppDimens.menuMaxNeededWidth, - child: appMenuWidget, - ), - Expanded( - child: samplesSectionWidget, - ) - ], - ); - - return Scaffold( - body: body, - drawer: needsDrawer - ? Drawer( - child: appMenuWidget, - ) - : null, - appBar: needsDrawer - ? AppBar( - elevation: 0, - backgroundColor: Colors.transparent, - title: Text(showingChartType.displayName), - ) - : null, - ); - }, - ); - } -} diff --git a/example/lib/presentation/resources/app_assets.dart b/example/lib/presentation/resources/app_assets.dart deleted file mode 100644 index 3575724f81..0000000000 --- a/example/lib/presentation/resources/app_assets.dart +++ /dev/null @@ -1,21 +0,0 @@ -import 'package:fl_chart_app/util/app_helper.dart'; - -class AppAssets { - static String getChartIcon(ChartType type) { - switch (type) { - case ChartType.line: - return 'assets/icons/ic_line_chart.svg'; - case ChartType.bar: - return 'assets/icons/ic_bar_chart.svg'; - case ChartType.pie: - return 'assets/icons/ic_pie_chart.svg'; - case ChartType.scatter: - return 'assets/icons/ic_scatter_chart.svg'; - case ChartType.radar: - return 'assets/icons/ic_radar_chart.svg'; - } - } - - static const flChartLogoIcon = 'assets/icons/fl_chart_logo_icon.png'; - static const flChartLogoText = 'assets/icons/fl_chart_logo_text.svg'; -} diff --git a/example/lib/presentation/resources/app_colors.dart b/example/lib/presentation/resources/app_colors.dart deleted file mode 100644 index a1ca589a1c..0000000000 --- a/example/lib/presentation/resources/app_colors.dart +++ /dev/null @@ -1,25 +0,0 @@ -import 'package:flutter/material.dart'; - -class AppColors { - static const Color primary = contentColorCyan; - static const Color menuBackground = Color(0xFF090912); - static const Color itemsBackground = Color(0xFF1B2339); - static const Color pageBackground = Color(0xFF282E45); - static const Color mainTextColor1 = Colors.white; - static const Color mainTextColor2 = Colors.white70; - static const Color mainTextColor3 = Colors.white38; - static const Color mainGridLineColor = Colors.white10; - static const Color borderColor = Colors.white54; - static const Color gridLinesColor = Color(0x11FFFFFF); - - static const Color contentColorBlack = Colors.black; - static const Color contentColorWhite = Colors.white; - static const Color contentColorBlue = Color(0xFF2196F3); - static const Color contentColorYellow = Color(0xFFFFC300); - static const Color contentColorOrange = Color(0xFFFF683B); - static const Color contentColorGreen = Color(0xFF3BFF49); - static const Color contentColorPurple = Color(0xFF6E1BFF); - static const Color contentColorPink = Color(0xFFFF3AF2); - static const Color contentColorRed = Color(0xFFE80054); - static const Color contentColorCyan = Color(0xFF50E4FF); -} diff --git a/example/lib/presentation/resources/app_dimens.dart b/example/lib/presentation/resources/app_dimens.dart deleted file mode 100644 index b11c81b226..0000000000 --- a/example/lib/presentation/resources/app_dimens.dart +++ /dev/null @@ -1,13 +0,0 @@ -class AppDimens { - static const double menuMaxNeededWidth = 304; - static const double menuRowHeight = 74; - static const double menuIconSize = 32; - static const double menuDocumentationIconSize = 44; - static const double menuTextSize = 20; - - static const double chartBoxMinWidth = 350; - - static const double defaultRadius = 8; - static const double chartSamplesSpace = 32.0; - static const double chartSamplesMinWidth = 350; -} diff --git a/example/lib/presentation/resources/app_resources.dart b/example/lib/presentation/resources/app_resources.dart deleted file mode 100644 index 15c103967f..0000000000 --- a/example/lib/presentation/resources/app_resources.dart +++ /dev/null @@ -1,4 +0,0 @@ -export 'app_colors.dart'; -export 'app_assets.dart'; -export 'app_dimens.dart'; -export 'app_texts.dart'; diff --git a/example/lib/presentation/resources/app_texts.dart b/example/lib/presentation/resources/app_texts.dart deleted file mode 100644 index b2ffa4eaf4..0000000000 --- a/example/lib/presentation/resources/app_texts.dart +++ /dev/null @@ -1,3 +0,0 @@ -class AppTexts { - static const appName = 'FL Chart App'; -} diff --git a/example/lib/presentation/router/app_router.dart b/example/lib/presentation/router/app_router.dart deleted file mode 100644 index 4ae2b67693..0000000000 --- a/example/lib/presentation/router/app_router.dart +++ /dev/null @@ -1,39 +0,0 @@ -import 'package:fl_chart_app/presentation/pages/home_page.dart'; -import 'package:fl_chart_app/presentation/resources/app_colors.dart'; -import 'package:fl_chart_app/util/app_helper.dart'; -import 'package:flutter/material.dart'; -import 'package:go_router/go_router.dart'; - -final appRouterConfig = GoRouter( - routes: [ - GoRoute( - path: '/', - builder: (context, state) => Container(color: AppColors.pageBackground), - redirect: (context, state) { - return '/${ChartType.values.first.name}'; - }, - ), - ...ChartType.values - .map( - (ChartType chartType) => GoRoute( - path: '/${chartType.name}', - pageBuilder: (BuildContext context, GoRouterState state) => - MaterialPage( - /// We set a key for HomePage to prevent recreate it - /// when user choose a new chart type to show - key: const ValueKey('home_page'), - child: HomePage(showingChartType: chartType), - ), - ), - ) - .toList(), - GoRoute( - path: '/:any', - builder: (context, state) => Container(color: AppColors.pageBackground), - redirect: (context, state) { - // Unsupported path, we redirect it to /, which redirects it to /line - return '/'; - }, - ), - ], -); diff --git a/example/lib/presentation/samples/bar/bar_chart_sample1.dart b/example/lib/presentation/samples/bar/bar_chart_sample1.dart deleted file mode 100644 index a71f5f04a5..0000000000 --- a/example/lib/presentation/samples/bar/bar_chart_sample1.dart +++ /dev/null @@ -1,397 +0,0 @@ -import 'dart:async'; -import 'dart:math'; - -import 'package:fl_chart_app/presentation/resources/app_resources.dart'; -import 'package:fl_chart_app/util/extensions/color_extensions.dart'; -import 'package:fl_chart/fl_chart.dart'; -import 'package:flutter/material.dart'; - -class BarChartSample1 extends StatefulWidget { - BarChartSample1({super.key}); - - List get availableColors => const [ - AppColors.contentColorPurple, - AppColors.contentColorYellow, - AppColors.contentColorBlue, - AppColors.contentColorOrange, - AppColors.contentColorPink, - AppColors.contentColorRed, - ]; - - final Color barBackgroundColor = - AppColors.contentColorWhite.darken().withOpacity(0.3); - final Color barColor = AppColors.contentColorWhite; - final Color touchedBarColor = AppColors.contentColorGreen; - - @override - State createState() => BarChartSample1State(); -} - -class BarChartSample1State extends State { - final Duration animDuration = const Duration(milliseconds: 250); - - int touchedIndex = -1; - - bool isPlaying = false; - - @override - Widget build(BuildContext context) { - return AspectRatio( - aspectRatio: 1, - child: Stack( - children: [ - Padding( - padding: const EdgeInsets.all(16), - child: Column( - crossAxisAlignment: CrossAxisAlignment.stretch, - children: [ - const Text( - 'Mingguan', - style: TextStyle( - color: AppColors.contentColorGreen, - fontSize: 24, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox( - height: 4, - ), - Text( - 'Grafik konsumsi kalori', - style: TextStyle( - color: AppColors.contentColorGreen.darken(), - fontSize: 18, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox( - height: 38, - ), - Expanded( - child: Padding( - padding: const EdgeInsets.symmetric(horizontal: 8), - child: BarChart( - isPlaying ? randomData() : mainBarData(), - swapAnimationDuration: animDuration, - ), - ), - ), - const SizedBox( - height: 12, - ), - ], - ), - ), - Padding( - padding: const EdgeInsets.all(8), - child: Align( - alignment: Alignment.topRight, - child: IconButton( - icon: Icon( - isPlaying ? Icons.pause : Icons.play_arrow, - color: AppColors.contentColorGreen, - ), - onPressed: () { - setState(() { - isPlaying = !isPlaying; - if (isPlaying) { - refreshState(); - } - }); - }, - ), - ), - ) - ], - ), - ); - } - - BarChartGroupData makeGroupData( - int x, - double y, { - bool isTouched = false, - Color? barColor, - double width = 22, - List showTooltips = const [], - }) { - barColor ??= widget.barColor; - return BarChartGroupData( - x: x, - barRods: [ - BarChartRodData( - toY: isTouched ? y + 1 : y, - color: isTouched ? widget.touchedBarColor : barColor, - width: width, - borderSide: isTouched - ? BorderSide(color: widget.touchedBarColor.darken(80)) - : const BorderSide(color: Colors.white, width: 0), - backDrawRodData: BackgroundBarChartRodData( - show: true, - toY: 20, - color: widget.barBackgroundColor, - ), - ), - ], - showingTooltipIndicators: showTooltips, - ); - } - - List showingGroups() => List.generate(7, (i) { - switch (i) { - case 0: - return makeGroupData(0, 5, isTouched: i == touchedIndex); - case 1: - return makeGroupData(1, 6.5, isTouched: i == touchedIndex); - case 2: - return makeGroupData(2, 5, isTouched: i == touchedIndex); - case 3: - return makeGroupData(3, 7.5, isTouched: i == touchedIndex); - case 4: - return makeGroupData(4, 9, isTouched: i == touchedIndex); - case 5: - return makeGroupData(5, 11.5, isTouched: i == touchedIndex); - case 6: - return makeGroupData(6, 6.5, isTouched: i == touchedIndex); - default: - return throw Error(); - } - }); - - BarChartData mainBarData() { - return BarChartData( - barTouchData: BarTouchData( - touchTooltipData: BarTouchTooltipData( - tooltipBgColor: Colors.blueGrey, - tooltipHorizontalAlignment: FLHorizontalAlignment.right, - tooltipMargin: -10, - getTooltipItem: (group, groupIndex, rod, rodIndex) { - String weekDay; - switch (group.x) { - case 0: - weekDay = 'Monday'; - break; - case 1: - weekDay = 'Tuesday'; - break; - case 2: - weekDay = 'Wednesday'; - break; - case 3: - weekDay = 'Thursday'; - break; - case 4: - weekDay = 'Friday'; - break; - case 5: - weekDay = 'Saturday'; - break; - case 6: - weekDay = 'Sunday'; - break; - default: - throw Error(); - } - return BarTooltipItem( - '$weekDay\n', - const TextStyle( - color: Colors.white, - fontWeight: FontWeight.bold, - fontSize: 18, - ), - children: [ - TextSpan( - text: (rod.toY - 1).toString(), - style: TextStyle( - color: widget.touchedBarColor, - fontSize: 16, - fontWeight: FontWeight.w500, - ), - ), - ], - ); - }, - ), - touchCallback: (FlTouchEvent event, barTouchResponse) { - setState(() { - if (!event.isInterestedForInteractions || - barTouchResponse == null || - barTouchResponse.spot == null) { - touchedIndex = -1; - return; - } - touchedIndex = barTouchResponse.spot!.touchedBarGroupIndex; - }); - }, - ), - titlesData: FlTitlesData( - show: true, - rightTitles: const AxisTitles( - sideTitles: SideTitles(showTitles: false), - ), - topTitles: const AxisTitles( - sideTitles: SideTitles(showTitles: false), - ), - bottomTitles: AxisTitles( - sideTitles: SideTitles( - showTitles: true, - getTitlesWidget: getTitles, - reservedSize: 38, - ), - ), - leftTitles: const AxisTitles( - sideTitles: SideTitles( - showTitles: false, - ), - ), - ), - borderData: FlBorderData( - show: false, - ), - barGroups: showingGroups(), - gridData: const FlGridData(show: false), - ); - } - - Widget getTitles(double value, TitleMeta meta) { - const style = TextStyle( - color: Colors.white, - fontWeight: FontWeight.bold, - fontSize: 14, - ); - Widget text; - switch (value.toInt()) { - case 0: - text = const Text('M', style: style); - break; - case 1: - text = const Text('T', style: style); - break; - case 2: - text = const Text('W', style: style); - break; - case 3: - text = const Text('T', style: style); - break; - case 4: - text = const Text('F', style: style); - break; - case 5: - text = const Text('S', style: style); - break; - case 6: - text = const Text('S', style: style); - break; - default: - text = const Text('', style: style); - break; - } - return SideTitleWidget( - axisSide: meta.axisSide, - space: 16, - child: text, - ); - } - - BarChartData randomData() { - return BarChartData( - barTouchData: BarTouchData( - enabled: false, - ), - titlesData: FlTitlesData( - show: true, - bottomTitles: AxisTitles( - sideTitles: SideTitles( - showTitles: true, - getTitlesWidget: getTitles, - reservedSize: 38, - ), - ), - leftTitles: const AxisTitles( - sideTitles: SideTitles( - showTitles: false, - ), - ), - topTitles: const AxisTitles( - sideTitles: SideTitles( - showTitles: false, - ), - ), - rightTitles: const AxisTitles( - sideTitles: SideTitles( - showTitles: false, - ), - ), - ), - borderData: FlBorderData( - show: false, - ), - barGroups: List.generate(7, (i) { - switch (i) { - case 0: - return makeGroupData( - 0, - Random().nextInt(15).toDouble() + 6, - barColor: widget.availableColors[ - Random().nextInt(widget.availableColors.length)], - ); - case 1: - return makeGroupData( - 1, - Random().nextInt(15).toDouble() + 6, - barColor: widget.availableColors[ - Random().nextInt(widget.availableColors.length)], - ); - case 2: - return makeGroupData( - 2, - Random().nextInt(15).toDouble() + 6, - barColor: widget.availableColors[ - Random().nextInt(widget.availableColors.length)], - ); - case 3: - return makeGroupData( - 3, - Random().nextInt(15).toDouble() + 6, - barColor: widget.availableColors[ - Random().nextInt(widget.availableColors.length)], - ); - case 4: - return makeGroupData( - 4, - Random().nextInt(15).toDouble() + 6, - barColor: widget.availableColors[ - Random().nextInt(widget.availableColors.length)], - ); - case 5: - return makeGroupData( - 5, - Random().nextInt(15).toDouble() + 6, - barColor: widget.availableColors[ - Random().nextInt(widget.availableColors.length)], - ); - case 6: - return makeGroupData( - 6, - Random().nextInt(15).toDouble() + 6, - barColor: widget.availableColors[ - Random().nextInt(widget.availableColors.length)], - ); - default: - return throw Error(); - } - }), - gridData: const FlGridData(show: false), - ); - } - - Future refreshState() async { - setState(() {}); - await Future.delayed( - animDuration + const Duration(milliseconds: 50), - ); - if (isPlaying) { - await refreshState(); - } - } -} diff --git a/example/lib/presentation/samples/bar/bar_chart_sample2.dart b/example/lib/presentation/samples/bar/bar_chart_sample2.dart deleted file mode 100644 index 9972134c33..0000000000 --- a/example/lib/presentation/samples/bar/bar_chart_sample2.dart +++ /dev/null @@ -1,281 +0,0 @@ -import 'package:fl_chart_app/presentation/resources/app_resources.dart'; -import 'package:fl_chart_app/util/extensions/color_extensions.dart'; -import 'package:fl_chart/fl_chart.dart'; -import 'package:flutter/material.dart'; - -class BarChartSample2 extends StatefulWidget { - BarChartSample2({super.key}); - final Color leftBarColor = AppColors.contentColorYellow; - final Color rightBarColor = AppColors.contentColorRed; - final Color avgColor = - AppColors.contentColorOrange.avg(AppColors.contentColorRed); - @override - State createState() => BarChartSample2State(); -} - -class BarChartSample2State extends State { - final double width = 7; - - late List rawBarGroups; - late List showingBarGroups; - - int touchedGroupIndex = -1; - - @override - void initState() { - super.initState(); - final barGroup1 = makeGroupData(0, 5, 12); - final barGroup2 = makeGroupData(1, 16, 12); - final barGroup3 = makeGroupData(2, 18, 5); - final barGroup4 = makeGroupData(3, 20, 16); - final barGroup5 = makeGroupData(4, 17, 6); - final barGroup6 = makeGroupData(5, 19, 1.5); - final barGroup7 = makeGroupData(6, 10, 1.5); - - final items = [ - barGroup1, - barGroup2, - barGroup3, - barGroup4, - barGroup5, - barGroup6, - barGroup7, - ]; - - rawBarGroups = items; - - showingBarGroups = rawBarGroups; - } - - @override - Widget build(BuildContext context) { - return AspectRatio( - aspectRatio: 1, - child: Padding( - padding: const EdgeInsets.all(16), - child: Column( - crossAxisAlignment: CrossAxisAlignment.stretch, - children: [ - Row( - mainAxisSize: MainAxisSize.min, - children: [ - makeTransactionsIcon(), - const SizedBox( - width: 38, - ), - const Text( - 'Transactions', - style: TextStyle(color: Colors.white, fontSize: 22), - ), - const SizedBox( - width: 4, - ), - const Text( - 'state', - style: TextStyle(color: Color(0xff77839a), fontSize: 16), - ), - ], - ), - const SizedBox( - height: 38, - ), - Expanded( - child: BarChart( - BarChartData( - maxY: 20, - barTouchData: BarTouchData( - touchTooltipData: BarTouchTooltipData( - tooltipBgColor: Colors.grey, - getTooltipItem: (a, b, c, d) => null, - ), - touchCallback: (FlTouchEvent event, response) { - if (response == null || response.spot == null) { - setState(() { - touchedGroupIndex = -1; - showingBarGroups = List.of(rawBarGroups); - }); - return; - } - - touchedGroupIndex = response.spot!.touchedBarGroupIndex; - - setState(() { - if (!event.isInterestedForInteractions) { - touchedGroupIndex = -1; - showingBarGroups = List.of(rawBarGroups); - return; - } - showingBarGroups = List.of(rawBarGroups); - if (touchedGroupIndex != -1) { - var sum = 0.0; - for (final rod - in showingBarGroups[touchedGroupIndex].barRods) { - sum += rod.toY; - } - final avg = sum / - showingBarGroups[touchedGroupIndex] - .barRods - .length; - - showingBarGroups[touchedGroupIndex] = - showingBarGroups[touchedGroupIndex].copyWith( - barRods: showingBarGroups[touchedGroupIndex] - .barRods - .map((rod) { - return rod.copyWith( - toY: avg, color: widget.avgColor); - }).toList(), - ); - } - }); - }, - ), - titlesData: FlTitlesData( - show: true, - rightTitles: const AxisTitles( - sideTitles: SideTitles(showTitles: false), - ), - topTitles: const AxisTitles( - sideTitles: SideTitles(showTitles: false), - ), - bottomTitles: AxisTitles( - sideTitles: SideTitles( - showTitles: true, - getTitlesWidget: bottomTitles, - reservedSize: 42, - ), - ), - leftTitles: AxisTitles( - sideTitles: SideTitles( - showTitles: true, - reservedSize: 28, - interval: 1, - getTitlesWidget: leftTitles, - ), - ), - ), - borderData: FlBorderData( - show: false, - ), - barGroups: showingBarGroups, - gridData: const FlGridData(show: false), - ), - ), - ), - const SizedBox( - height: 12, - ), - ], - ), - ), - ); - } - - Widget leftTitles(double value, TitleMeta meta) { - const style = TextStyle( - color: Color(0xff7589a2), - fontWeight: FontWeight.bold, - fontSize: 14, - ); - String text; - if (value == 0) { - text = '1K'; - } else if (value == 10) { - text = '5K'; - } else if (value == 19) { - text = '10K'; - } else { - return Container(); - } - return SideTitleWidget( - axisSide: meta.axisSide, - space: 0, - child: Text(text, style: style), - ); - } - - Widget bottomTitles(double value, TitleMeta meta) { - final titles = ['Mn', 'Te', 'Wd', 'Tu', 'Fr', 'St', 'Su']; - - final Widget text = Text( - titles[value.toInt()], - style: const TextStyle( - color: Color(0xff7589a2), - fontWeight: FontWeight.bold, - fontSize: 14, - ), - ); - - return SideTitleWidget( - axisSide: meta.axisSide, - space: 16, //margin top - child: text, - ); - } - - BarChartGroupData makeGroupData(int x, double y1, double y2) { - return BarChartGroupData( - barsSpace: 4, - x: x, - barRods: [ - BarChartRodData( - toY: y1, - color: widget.leftBarColor, - width: width, - ), - BarChartRodData( - toY: y2, - color: widget.rightBarColor, - width: width, - ), - ], - ); - } - - Widget makeTransactionsIcon() { - const width = 4.5; - const space = 3.5; - return Row( - mainAxisSize: MainAxisSize.min, - children: [ - Container( - width: width, - height: 10, - color: Colors.white.withOpacity(0.4), - ), - const SizedBox( - width: space, - ), - Container( - width: width, - height: 28, - color: Colors.white.withOpacity(0.8), - ), - const SizedBox( - width: space, - ), - Container( - width: width, - height: 42, - color: Colors.white.withOpacity(1), - ), - const SizedBox( - width: space, - ), - Container( - width: width, - height: 28, - color: Colors.white.withOpacity(0.8), - ), - const SizedBox( - width: space, - ), - Container( - width: width, - height: 10, - color: Colors.white.withOpacity(0.4), - ), - ], - ); - } -} diff --git a/example/lib/presentation/samples/bar/bar_chart_sample3.dart b/example/lib/presentation/samples/bar/bar_chart_sample3.dart deleted file mode 100644 index 3db1cbe79a..0000000000 --- a/example/lib/presentation/samples/bar/bar_chart_sample3.dart +++ /dev/null @@ -1,209 +0,0 @@ -import 'package:fl_chart_app/presentation/resources/app_resources.dart'; -import 'package:fl_chart_app/util/extensions/color_extensions.dart'; -import 'package:fl_chart/fl_chart.dart'; -import 'package:flutter/material.dart'; - -class _BarChart extends StatelessWidget { - const _BarChart(); - - @override - Widget build(BuildContext context) { - return BarChart( - BarChartData( - barTouchData: barTouchData, - titlesData: titlesData, - borderData: borderData, - barGroups: barGroups, - gridData: const FlGridData(show: false), - alignment: BarChartAlignment.spaceAround, - maxY: 20, - ), - ); - } - - BarTouchData get barTouchData => BarTouchData( - enabled: false, - touchTooltipData: BarTouchTooltipData( - tooltipBgColor: Colors.transparent, - tooltipPadding: EdgeInsets.zero, - tooltipMargin: 8, - getTooltipItem: ( - BarChartGroupData group, - int groupIndex, - BarChartRodData rod, - int rodIndex, - ) { - return BarTooltipItem( - rod.toY.round().toString(), - const TextStyle( - color: AppColors.contentColorCyan, - fontWeight: FontWeight.bold, - ), - ); - }, - ), - ); - - Widget getTitles(double value, TitleMeta meta) { - final style = TextStyle( - color: AppColors.contentColorBlue.darken(20), - fontWeight: FontWeight.bold, - fontSize: 14, - ); - String text; - switch (value.toInt()) { - case 0: - text = 'Mn'; - break; - case 1: - text = 'Te'; - break; - case 2: - text = 'Wd'; - break; - case 3: - text = 'Tu'; - break; - case 4: - text = 'Fr'; - break; - case 5: - text = 'St'; - break; - case 6: - text = 'Sn'; - break; - default: - text = ''; - break; - } - return SideTitleWidget( - axisSide: meta.axisSide, - space: 4, - child: Text(text, style: style), - ); - } - - FlTitlesData get titlesData => FlTitlesData( - show: true, - bottomTitles: AxisTitles( - sideTitles: SideTitles( - showTitles: true, - reservedSize: 30, - getTitlesWidget: getTitles, - ), - ), - leftTitles: const AxisTitles( - sideTitles: SideTitles(showTitles: false), - ), - topTitles: const AxisTitles( - sideTitles: SideTitles(showTitles: false), - ), - rightTitles: const AxisTitles( - sideTitles: SideTitles(showTitles: false), - ), - ); - - FlBorderData get borderData => FlBorderData( - show: false, - ); - - LinearGradient get _barsGradient => LinearGradient( - colors: [ - AppColors.contentColorBlue.darken(20), - AppColors.contentColorCyan, - ], - begin: Alignment.bottomCenter, - end: Alignment.topCenter, - ); - - List get barGroups => [ - BarChartGroupData( - x: 0, - barRods: [ - BarChartRodData( - toY: 8, - gradient: _barsGradient, - ) - ], - showingTooltipIndicators: [0], - ), - BarChartGroupData( - x: 1, - barRods: [ - BarChartRodData( - toY: 10, - gradient: _barsGradient, - ) - ], - showingTooltipIndicators: [0], - ), - BarChartGroupData( - x: 2, - barRods: [ - BarChartRodData( - toY: 14, - gradient: _barsGradient, - ) - ], - showingTooltipIndicators: [0], - ), - BarChartGroupData( - x: 3, - barRods: [ - BarChartRodData( - toY: 15, - gradient: _barsGradient, - ) - ], - showingTooltipIndicators: [0], - ), - BarChartGroupData( - x: 4, - barRods: [ - BarChartRodData( - toY: 13, - gradient: _barsGradient, - ) - ], - showingTooltipIndicators: [0], - ), - BarChartGroupData( - x: 5, - barRods: [ - BarChartRodData( - toY: 10, - gradient: _barsGradient, - ) - ], - showingTooltipIndicators: [0], - ), - BarChartGroupData( - x: 6, - barRods: [ - BarChartRodData( - toY: 16, - gradient: _barsGradient, - ) - ], - showingTooltipIndicators: [0], - ), - ]; -} - -class BarChartSample3 extends StatefulWidget { - const BarChartSample3({super.key}); - - @override - State createState() => BarChartSample3State(); -} - -class BarChartSample3State extends State { - @override - Widget build(BuildContext context) { - return const AspectRatio( - aspectRatio: 1.6, - child: _BarChart(), - ); - } -} diff --git a/example/lib/presentation/samples/bar/bar_chart_sample4.dart b/example/lib/presentation/samples/bar/bar_chart_sample4.dart deleted file mode 100644 index 55241a7e00..0000000000 --- a/example/lib/presentation/samples/bar/bar_chart_sample4.dart +++ /dev/null @@ -1,352 +0,0 @@ -import 'package:fl_chart_app/presentation/resources/app_resources.dart'; -import 'package:fl_chart_app/util/extensions/color_extensions.dart'; -import 'package:fl_chart/fl_chart.dart'; -import 'package:flutter/material.dart'; - -class BarChartSample4 extends StatefulWidget { - BarChartSample4({super.key}); - - final Color dark = AppColors.contentColorCyan.darken(60); - final Color normal = AppColors.contentColorCyan.darken(30); - final Color light = AppColors.contentColorCyan; - - @override - State createState() => BarChartSample4State(); -} - -class BarChartSample4State extends State { - Widget bottomTitles(double value, TitleMeta meta) { - const style = TextStyle(fontSize: 10); - String text; - switch (value.toInt()) { - case 0: - text = 'Apr'; - break; - case 1: - text = 'May'; - break; - case 2: - text = 'Jun'; - break; - case 3: - text = 'Jul'; - break; - case 4: - text = 'Aug'; - break; - default: - text = ''; - break; - } - return SideTitleWidget( - axisSide: meta.axisSide, - child: Text(text, style: style), - ); - } - - Widget leftTitles(double value, TitleMeta meta) { - if (value == meta.max) { - return Container(); - } - const style = TextStyle( - fontSize: 10, - ); - return SideTitleWidget( - axisSide: meta.axisSide, - child: Text( - meta.formattedValue, - style: style, - ), - ); - } - - @override - Widget build(BuildContext context) { - return AspectRatio( - aspectRatio: 1.66, - child: Padding( - padding: const EdgeInsets.only(top: 16), - child: LayoutBuilder( - builder: (context, constraints) { - final barsSpace = 4.0 * constraints.maxWidth / 400; - final barsWidth = 8.0 * constraints.maxWidth / 400; - return BarChart( - BarChartData( - alignment: BarChartAlignment.center, - barTouchData: BarTouchData( - enabled: false, - ), - titlesData: FlTitlesData( - show: true, - bottomTitles: AxisTitles( - sideTitles: SideTitles( - showTitles: true, - reservedSize: 28, - getTitlesWidget: bottomTitles, - ), - ), - leftTitles: AxisTitles( - sideTitles: SideTitles( - showTitles: true, - reservedSize: 40, - getTitlesWidget: leftTitles, - ), - ), - topTitles: const AxisTitles( - sideTitles: SideTitles(showTitles: false), - ), - rightTitles: const AxisTitles( - sideTitles: SideTitles(showTitles: false), - ), - ), - gridData: FlGridData( - show: true, - checkToShowHorizontalLine: (value) => value % 10 == 0, - getDrawingHorizontalLine: (value) => FlLine( - color: AppColors.borderColor.withOpacity(0.1), - strokeWidth: 1, - ), - drawVerticalLine: false, - ), - borderData: FlBorderData( - show: false, - ), - groupsSpace: barsSpace, - barGroups: getData(barsWidth, barsSpace), - ), - ); - }, - ), - ), - ); - } - - List getData(double barsWidth, double barsSpace) { - return [ - BarChartGroupData( - x: 0, - barsSpace: barsSpace, - barRods: [ - BarChartRodData( - toY: 17000000000, - rodStackItems: [ - BarChartRodStackItem(0, 2000000000, widget.dark), - BarChartRodStackItem(2000000000, 12000000000, widget.normal), - BarChartRodStackItem(12000000000, 17000000000, widget.light), - ], - borderRadius: BorderRadius.zero, - width: barsWidth, - ), - BarChartRodData( - toY: 24000000000, - rodStackItems: [ - BarChartRodStackItem(0, 13000000000, widget.dark), - BarChartRodStackItem(13000000000, 14000000000, widget.normal), - BarChartRodStackItem(14000000000, 24000000000, widget.light), - ], - borderRadius: BorderRadius.zero, - width: barsWidth, - ), - BarChartRodData( - toY: 23000000000.5, - rodStackItems: [ - BarChartRodStackItem(0, 6000000000.5, widget.dark), - BarChartRodStackItem(6000000000.5, 18000000000, widget.normal), - BarChartRodStackItem(18000000000, 23000000000.5, widget.light), - ], - borderRadius: BorderRadius.zero, - width: barsWidth, - ), - BarChartRodData( - toY: 29000000000, - rodStackItems: [ - BarChartRodStackItem(0, 9000000000, widget.dark), - BarChartRodStackItem(9000000000, 15000000000, widget.normal), - BarChartRodStackItem(15000000000, 29000000000, widget.light), - ], - borderRadius: BorderRadius.zero, - width: barsWidth, - ), - BarChartRodData( - toY: 32000000000, - rodStackItems: [ - BarChartRodStackItem(0, 2000000000.5, widget.dark), - BarChartRodStackItem(2000000000.5, 17000000000.5, widget.normal), - BarChartRodStackItem(17000000000.5, 32000000000, widget.light), - ], - borderRadius: BorderRadius.zero, - width: barsWidth, - ), - ], - ), - BarChartGroupData( - x: 1, - barsSpace: barsSpace, - barRods: [ - BarChartRodData( - toY: 31000000000, - rodStackItems: [ - BarChartRodStackItem(0, 11000000000, widget.dark), - BarChartRodStackItem(11000000000, 18000000000, widget.normal), - BarChartRodStackItem(18000000000, 31000000000, widget.light), - ], - borderRadius: BorderRadius.zero, - width: barsWidth, - ), - BarChartRodData( - toY: 35000000000, - rodStackItems: [ - BarChartRodStackItem(0, 14000000000, widget.dark), - BarChartRodStackItem(14000000000, 27000000000, widget.normal), - BarChartRodStackItem(27000000000, 35000000000, widget.light), - ], - borderRadius: BorderRadius.zero, - width: barsWidth, - ), - BarChartRodData( - toY: 31000000000, - rodStackItems: [ - BarChartRodStackItem(0, 8000000000, widget.dark), - BarChartRodStackItem(8000000000, 24000000000, widget.normal), - BarChartRodStackItem(24000000000, 31000000000, widget.light), - ], - borderRadius: BorderRadius.zero, - width: barsWidth, - ), - BarChartRodData( - toY: 15000000000, - rodStackItems: [ - BarChartRodStackItem(0, 6000000000.5, widget.dark), - BarChartRodStackItem(6000000000.5, 12000000000.5, widget.normal), - BarChartRodStackItem(12000000000.5, 15000000000, widget.light), - ], - borderRadius: BorderRadius.zero, - width: barsWidth, - ), - BarChartRodData( - toY: 17000000000, - rodStackItems: [ - BarChartRodStackItem(0, 9000000000, widget.dark), - BarChartRodStackItem(9000000000, 15000000000, widget.normal), - BarChartRodStackItem(15000000000, 17000000000, widget.light), - ], - borderRadius: BorderRadius.zero, - width: barsWidth, - ), - ], - ), - BarChartGroupData( - x: 2, - barsSpace: barsSpace, - barRods: [ - BarChartRodData( - toY: 34000000000, - rodStackItems: [ - BarChartRodStackItem(0, 6000000000, widget.dark), - BarChartRodStackItem(6000000000, 23000000000, widget.normal), - BarChartRodStackItem(23000000000, 34000000000, widget.light), - ], - borderRadius: BorderRadius.zero, - width: barsWidth, - ), - BarChartRodData( - toY: 32000000000, - rodStackItems: [ - BarChartRodStackItem(0, 7000000000, widget.dark), - BarChartRodStackItem(7000000000, 24000000000, widget.normal), - BarChartRodStackItem(24000000000, 32000000000, widget.light), - ], - borderRadius: BorderRadius.zero, - width: barsWidth, - ), - BarChartRodData( - toY: 14000000000.5, - rodStackItems: [ - BarChartRodStackItem(0, 1000000000.5, widget.dark), - BarChartRodStackItem(1000000000.5, 12000000000, widget.normal), - BarChartRodStackItem(12000000000, 14000000000.5, widget.light), - ], - borderRadius: BorderRadius.zero, - width: barsWidth, - ), - BarChartRodData( - toY: 20000000000, - rodStackItems: [ - BarChartRodStackItem(0, 4000000000, widget.dark), - BarChartRodStackItem(4000000000, 15000000000, widget.normal), - BarChartRodStackItem(15000000000, 20000000000, widget.light), - ], - borderRadius: BorderRadius.zero, - width: barsWidth, - ), - BarChartRodData( - toY: 24000000000, - rodStackItems: [ - BarChartRodStackItem(0, 4000000000, widget.dark), - BarChartRodStackItem(4000000000, 15000000000, widget.normal), - BarChartRodStackItem(15000000000, 24000000000, widget.light), - ], - borderRadius: BorderRadius.zero, - width: barsWidth, - ), - ], - ), - BarChartGroupData( - x: 3, - barsSpace: barsSpace, - barRods: [ - BarChartRodData( - toY: 14000000000, - rodStackItems: [ - BarChartRodStackItem(0, 1000000000.5, widget.dark), - BarChartRodStackItem(1000000000.5, 12000000000, widget.normal), - BarChartRodStackItem(12000000000, 14000000000, widget.light), - ], - borderRadius: BorderRadius.zero, - width: barsWidth, - ), - BarChartRodData( - toY: 27000000000, - rodStackItems: [ - BarChartRodStackItem(0, 7000000000, widget.dark), - BarChartRodStackItem(7000000000, 25000000000, widget.normal), - BarChartRodStackItem(25000000000, 27000000000, widget.light), - ], - borderRadius: BorderRadius.zero, - width: barsWidth, - ), - BarChartRodData( - toY: 29000000000, - rodStackItems: [ - BarChartRodStackItem(0, 6000000000, widget.dark), - BarChartRodStackItem(6000000000, 23000000000, widget.normal), - BarChartRodStackItem(23000000000, 29000000000, widget.light), - ], - borderRadius: BorderRadius.zero, - width: barsWidth, - ), - BarChartRodData( - toY: 16000000000.5, - rodStackItems: [ - BarChartRodStackItem(0, 9000000000, widget.dark), - BarChartRodStackItem(9000000000, 15000000000, widget.normal), - BarChartRodStackItem(15000000000, 16000000000.5, widget.light), - ], - borderRadius: BorderRadius.zero, - width: barsWidth, - ), - BarChartRodData( - toY: 15000000000, - rodStackItems: [ - BarChartRodStackItem(0, 7000000000, widget.dark), - BarChartRodStackItem(7000000000, 12000000000.5, widget.normal), - BarChartRodStackItem(12000000000.5, 15000000000, widget.light), - ], - borderRadius: BorderRadius.zero, - width: barsWidth, - ), - ], - ), - ]; - } -} diff --git a/example/lib/presentation/samples/bar/bar_chart_sample5.dart b/example/lib/presentation/samples/bar/bar_chart_sample5.dart deleted file mode 100644 index 54f4db165e..0000000000 --- a/example/lib/presentation/samples/bar/bar_chart_sample5.dart +++ /dev/null @@ -1,360 +0,0 @@ -import 'package:fl_chart_app/presentation/resources/app_resources.dart'; -import 'package:fl_chart_app/util/app_utils.dart'; -import 'package:fl_chart/fl_chart.dart'; -import 'package:flutter/material.dart'; - -class BarChartSample5 extends StatefulWidget { - const BarChartSample5({super.key}); - - @override - State createState() => BarChartSample5State(); -} - -class BarChartSample5State extends State { - static const double barWidth = 22; - static const shadowOpacity = 0.2; - static const mainItems = >{ - 0: [2, 3, 2.5, 8], - 1: [-1.8, -2.7, -3, -6.5], - 2: [1.5, 2, 3.5, 6], - 3: [1.5, 1.5, 4, 6.5], - 4: [-2, -2, -5, -9], - 5: [-1.2, -1.5, -4.3, -10], - 6: [1.2, 4.8, 5, 5], - }; - int touchedIndex = -1; - - @override - void initState() { - super.initState(); - } - - Widget bottomTitles(double value, TitleMeta meta) { - const style = TextStyle(color: Colors.white, fontSize: 10); - String text; - switch (value.toInt()) { - case 0: - text = 'Mon'; - break; - case 1: - text = 'Tue'; - break; - case 2: - text = 'Wed'; - break; - case 3: - text = 'Thu'; - break; - case 4: - text = 'Fri'; - break; - case 5: - text = 'Sat'; - break; - case 6: - text = 'Sun'; - break; - default: - text = ''; - break; - } - return SideTitleWidget( - axisSide: meta.axisSide, - child: Text(text, style: style), - ); - } - - Widget topTitles(double value, TitleMeta meta) { - const style = TextStyle(color: Colors.white, fontSize: 10); - String text; - switch (value.toInt()) { - case 0: - text = 'Mon'; - break; - case 1: - text = 'Tue'; - break; - case 2: - text = 'Wed'; - break; - case 3: - text = 'Thu'; - break; - case 4: - text = 'Fri'; - break; - case 5: - text = 'Sat'; - break; - case 6: - text = 'Sun'; - break; - default: - return Container(); - } - return SideTitleWidget( - axisSide: meta.axisSide, - child: Text(text, style: style), - ); - } - - Widget leftTitles(double value, TitleMeta meta) { - const style = TextStyle(color: Colors.white, fontSize: 10); - String text; - if (value == 0) { - text = '0'; - } else { - text = '${value.toInt()}0k'; - } - return SideTitleWidget( - angle: AppUtils().degreeToRadian(value < 0 ? -45 : 45), - axisSide: meta.axisSide, - space: 4, - child: Text( - text, - style: style, - textAlign: TextAlign.center, - ), - ); - } - - Widget rightTitles(double value, TitleMeta meta) { - const style = TextStyle(color: Colors.white, fontSize: 10); - String text; - if (value == 0) { - text = '0'; - } else { - text = '${value.toInt()}0k'; - } - return SideTitleWidget( - angle: AppUtils().degreeToRadian(90), - axisSide: meta.axisSide, - space: 0, - child: Text( - text, - style: style, - textAlign: TextAlign.center, - ), - ); - } - - BarChartGroupData generateGroup( - int x, - double value1, - double value2, - double value3, - double value4, - ) { - final isTop = value1 > 0; - final sum = value1 + value2 + value3 + value4; - final isTouched = touchedIndex == x; - return BarChartGroupData( - x: x, - groupVertically: true, - showingTooltipIndicators: isTouched ? [0] : [], - barRods: [ - BarChartRodData( - toY: sum, - width: barWidth, - borderRadius: isTop - ? const BorderRadius.only( - topLeft: Radius.circular(6), - topRight: Radius.circular(6), - ) - : const BorderRadius.only( - bottomLeft: Radius.circular(6), - bottomRight: Radius.circular(6), - ), - rodStackItems: [ - BarChartRodStackItem( - 0, - value1, - AppColors.contentColorGreen, - BorderSide( - color: Colors.white, - width: isTouched ? 2 : 0, - ), - ), - BarChartRodStackItem( - value1, - value1 + value2, - AppColors.contentColorYellow, - BorderSide( - color: Colors.white, - width: isTouched ? 2 : 0, - ), - ), - BarChartRodStackItem( - value1 + value2, - value1 + value2 + value3, - AppColors.contentColorPink, - BorderSide( - color: Colors.white, - width: isTouched ? 2 : 0, - ), - ), - BarChartRodStackItem( - value1 + value2 + value3, - value1 + value2 + value3 + value4, - AppColors.contentColorBlue, - BorderSide( - color: Colors.white, - width: isTouched ? 2 : 0, - ), - ), - ], - ), - BarChartRodData( - toY: -sum, - width: barWidth, - color: Colors.transparent, - borderRadius: isTop - ? const BorderRadius.only( - bottomLeft: Radius.circular(6), - bottomRight: Radius.circular(6), - ) - : const BorderRadius.only( - topLeft: Radius.circular(6), - topRight: Radius.circular(6), - ), - rodStackItems: [ - BarChartRodStackItem( - 0, - -value1, - AppColors.contentColorGreen - .withOpacity(isTouched ? shadowOpacity * 2 : shadowOpacity), - const BorderSide(color: Colors.transparent), - ), - BarChartRodStackItem( - -value1, - -(value1 + value2), - AppColors.contentColorYellow - .withOpacity(isTouched ? shadowOpacity * 2 : shadowOpacity), - const BorderSide(color: Colors.transparent), - ), - BarChartRodStackItem( - -(value1 + value2), - -(value1 + value2 + value3), - AppColors.contentColorPink - .withOpacity(isTouched ? shadowOpacity * 2 : shadowOpacity), - const BorderSide(color: Colors.transparent), - ), - BarChartRodStackItem( - -(value1 + value2 + value3), - -(value1 + value2 + value3 + value4), - AppColors.contentColorBlue - .withOpacity(isTouched ? shadowOpacity * 2 : shadowOpacity), - const BorderSide(color: Colors.transparent), - ), - ], - ), - ], - ); - } - - bool isShadowBar(int rodIndex) => rodIndex == 1; - - @override - Widget build(BuildContext context) { - return AspectRatio( - aspectRatio: 0.8, - child: Padding( - padding: const EdgeInsets.only(top: 16), - child: BarChart( - BarChartData( - alignment: BarChartAlignment.center, - maxY: 20, - minY: -20, - groupsSpace: 12, - barTouchData: BarTouchData( - handleBuiltInTouches: false, - touchCallback: (FlTouchEvent event, barTouchResponse) { - if (!event.isInterestedForInteractions || - barTouchResponse == null || - barTouchResponse.spot == null) { - setState(() { - touchedIndex = -1; - }); - return; - } - final rodIndex = barTouchResponse.spot!.touchedRodDataIndex; - if (isShadowBar(rodIndex)) { - setState(() { - touchedIndex = -1; - }); - return; - } - setState(() { - touchedIndex = barTouchResponse.spot!.touchedBarGroupIndex; - }); - }, - ), - titlesData: FlTitlesData( - show: true, - topTitles: AxisTitles( - sideTitles: SideTitles( - showTitles: true, - reservedSize: 32, - getTitlesWidget: topTitles, - ), - ), - bottomTitles: AxisTitles( - sideTitles: SideTitles( - showTitles: true, - reservedSize: 32, - getTitlesWidget: bottomTitles, - ), - ), - leftTitles: AxisTitles( - sideTitles: SideTitles( - showTitles: true, - getTitlesWidget: leftTitles, - interval: 5, - reservedSize: 42, - ), - ), - rightTitles: AxisTitles( - sideTitles: SideTitles( - showTitles: true, - getTitlesWidget: rightTitles, - interval: 5, - reservedSize: 42, - ), - ), - ), - gridData: FlGridData( - show: true, - checkToShowHorizontalLine: (value) => value % 5 == 0, - getDrawingHorizontalLine: (value) { - if (value == 0) { - return FlLine( - color: AppColors.borderColor.withOpacity(0.1), - strokeWidth: 3, - ); - } - return FlLine( - color: AppColors.borderColor.withOpacity(0.05), - strokeWidth: 0.8, - ); - }, - ), - borderData: FlBorderData( - show: false, - ), - barGroups: mainItems.entries - .map( - (e) => generateGroup( - e.key, - e.value[0], - e.value[1], - e.value[2], - e.value[3], - ), - ) - .toList(), - ), - ), - ), - ); - } -} diff --git a/example/lib/presentation/samples/bar/bar_chart_sample6.dart b/example/lib/presentation/samples/bar/bar_chart_sample6.dart deleted file mode 100644 index 7600b2d1b8..0000000000 --- a/example/lib/presentation/samples/bar/bar_chart_sample6.dart +++ /dev/null @@ -1,184 +0,0 @@ -import 'package:fl_chart_app/presentation/resources/app_resources.dart'; -import 'package:fl_chart_app/presentation/widgets/legend_widget.dart'; -import 'package:fl_chart/fl_chart.dart'; -import 'package:flutter/material.dart'; - -class BarChartSample6 extends StatelessWidget { - const BarChartSample6({super.key}); - - final pilateColor = AppColors.contentColorPurple; - final cyclingColor = AppColors.contentColorCyan; - final quickWorkoutColor = AppColors.contentColorBlue; - final betweenSpace = 0.2; - - BarChartGroupData generateGroupData( - int x, - double pilates, - double quickWorkout, - double cycling, - ) { - return BarChartGroupData( - x: x, - groupVertically: true, - barRods: [ - BarChartRodData( - fromY: 0, - toY: pilates, - color: pilateColor, - width: 5, - ), - BarChartRodData( - fromY: pilates + betweenSpace, - toY: pilates + betweenSpace + quickWorkout, - color: quickWorkoutColor, - width: 5, - ), - BarChartRodData( - fromY: pilates + betweenSpace + quickWorkout + betweenSpace, - toY: pilates + betweenSpace + quickWorkout + betweenSpace + cycling, - color: cyclingColor, - width: 5, - ), - ], - ); - } - - Widget bottomTitles(double value, TitleMeta meta) { - const style = TextStyle(fontSize: 10); - String text; - switch (value.toInt()) { - case 0: - text = 'JAN'; - break; - case 1: - text = 'FEB'; - break; - case 2: - text = 'MAR'; - break; - case 3: - text = 'APR'; - break; - case 4: - text = 'MAY'; - break; - case 5: - text = 'JUN'; - break; - case 6: - text = 'JUL'; - break; - case 7: - text = 'AUG'; - break; - case 8: - text = 'SEP'; - break; - case 9: - text = 'OCT'; - break; - case 10: - text = 'NOV'; - break; - case 11: - text = 'DEC'; - break; - default: - text = ''; - } - return SideTitleWidget( - axisSide: meta.axisSide, - child: Text(text, style: style), - ); - } - - @override - Widget build(BuildContext context) { - return Padding( - padding: const EdgeInsets.all(24), - child: Column( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - const Text( - 'Activity', - style: TextStyle( - color: AppColors.contentColorBlue, - fontSize: 16, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(height: 8), - LegendsListWidget( - legends: [ - Legend('Pilates', pilateColor), - Legend('Quick workouts', quickWorkoutColor), - Legend('Cycling', cyclingColor), - ], - ), - const SizedBox(height: 14), - AspectRatio( - aspectRatio: 2, - child: BarChart( - BarChartData( - alignment: BarChartAlignment.spaceBetween, - titlesData: FlTitlesData( - leftTitles: const AxisTitles(), - rightTitles: const AxisTitles(), - topTitles: const AxisTitles(), - bottomTitles: AxisTitles( - sideTitles: SideTitles( - showTitles: true, - getTitlesWidget: bottomTitles, - reservedSize: 20, - ), - ), - ), - barTouchData: BarTouchData(enabled: false), - borderData: FlBorderData(show: false), - gridData: const FlGridData(show: false), - barGroups: [ - generateGroupData(0, 2, 3, 2), - generateGroupData(1, 2, 5, 1.7), - generateGroupData(2, 1.3, 3.1, 2.8), - generateGroupData(3, 3.1, 4, 3.1), - generateGroupData(4, 0.8, 3.3, 3.4), - generateGroupData(5, 2, 5.6, 1.8), - generateGroupData(6, 1.3, 3.2, 2), - generateGroupData(7, 2.3, 3.2, 3), - generateGroupData(8, 2, 4.8, 2.5), - generateGroupData(9, 1.2, 3.2, 2.5), - generateGroupData(10, 1, 4.8, 3), - generateGroupData(11, 2, 4.4, 2.8), - ], - maxY: 11 + (betweenSpace * 3), - extraLinesData: ExtraLinesData( - horizontalLines: [ - HorizontalLine( - y: 3.3, - color: pilateColor, - strokeWidth: 1, - dashArray: [20, 4], - ), - HorizontalLine( - y: 8, - color: quickWorkoutColor, - strokeWidth: 1, - dashArray: [20, 4], - ), - HorizontalLine( - y: 11, - color: cyclingColor, - strokeWidth: 1, - dashArray: [20, 4], - ), - ], - ), - ), - ), - ), - ], - ), - ); - } -} diff --git a/example/lib/presentation/samples/bar/bar_chart_sample7.dart b/example/lib/presentation/samples/bar/bar_chart_sample7.dart deleted file mode 100644 index 03b5393607..0000000000 --- a/example/lib/presentation/samples/bar/bar_chart_sample7.dart +++ /dev/null @@ -1,219 +0,0 @@ -import 'dart:math' as math; - -import 'package:fl_chart_app/presentation/resources/app_resources.dart'; -import 'package:fl_chart/fl_chart.dart'; -import 'package:flutter/material.dart'; - -class BarChartSample7 extends StatefulWidget { - BarChartSample7({super.key}); - - final shadowColor = const Color(0xFFCCCCCC); - final dataList = [ - const _BarData(AppColors.contentColorYellow, 18, 18), - const _BarData(AppColors.contentColorGreen, 17, 8), - const _BarData(AppColors.contentColorOrange, 10, 15), - const _BarData(AppColors.contentColorPink, 2.5, 5), - const _BarData(AppColors.contentColorBlue, 2, 2.5), - const _BarData(AppColors.contentColorRed, 2, 2), - ]; - - @override - State createState() => _BarChartSample7State(); -} - -class _BarChartSample7State extends State { - BarChartGroupData generateBarGroup( - int x, - Color color, - double value, - double shadowValue, - ) { - return BarChartGroupData( - x: x, - barRods: [ - BarChartRodData( - toY: value, - color: color, - width: 6, - ), - BarChartRodData( - toY: shadowValue, - color: widget.shadowColor, - width: 6, - ), - ], - showingTooltipIndicators: touchedGroupIndex == x ? [0] : [], - ); - } - - int touchedGroupIndex = -1; - - @override - Widget build(BuildContext context) { - return Padding( - padding: const EdgeInsets.all(24), - child: AspectRatio( - aspectRatio: 1.4, - child: BarChart( - BarChartData( - alignment: BarChartAlignment.spaceBetween, - borderData: FlBorderData( - show: true, - border: Border.symmetric( - horizontal: BorderSide( - color: AppColors.borderColor.withOpacity(0.2), - ), - ), - ), - titlesData: FlTitlesData( - show: true, - leftTitles: AxisTitles( - drawBelowEverything: true, - sideTitles: SideTitles( - showTitles: true, - reservedSize: 30, - getTitlesWidget: (value, meta) { - return Text( - value.toInt().toString(), - textAlign: TextAlign.left, - ); - }, - ), - ), - bottomTitles: AxisTitles( - sideTitles: SideTitles( - showTitles: true, - reservedSize: 36, - getTitlesWidget: (value, meta) { - final index = value.toInt(); - return SideTitleWidget( - axisSide: meta.axisSide, - child: _IconWidget( - color: widget.dataList[index].color, - isSelected: touchedGroupIndex == index, - ), - ); - }, - ), - ), - rightTitles: const AxisTitles(), - topTitles: const AxisTitles(), - ), - gridData: FlGridData( - show: true, - drawVerticalLine: false, - getDrawingHorizontalLine: (value) => FlLine( - color: AppColors.borderColor.withOpacity(0.2), - strokeWidth: 1, - ), - ), - barGroups: widget.dataList.asMap().entries.map((e) { - final index = e.key; - final data = e.value; - return generateBarGroup( - index, - data.color, - data.value, - data.shadowValue, - ); - }).toList(), - maxY: 20, - barTouchData: BarTouchData( - enabled: true, - handleBuiltInTouches: false, - touchTooltipData: BarTouchTooltipData( - tooltipBgColor: Colors.transparent, - tooltipMargin: 0, - getTooltipItem: ( - BarChartGroupData group, - int groupIndex, - BarChartRodData rod, - int rodIndex, - ) { - return BarTooltipItem( - rod.toY.toString(), - TextStyle( - fontWeight: FontWeight.bold, - color: rod.color, - fontSize: 18, - shadows: const [ - Shadow( - color: Colors.black26, - blurRadius: 12, - ) - ], - ), - ); - }, - ), - touchCallback: (event, response) { - if (event.isInterestedForInteractions && - response != null && - response.spot != null) { - setState(() { - touchedGroupIndex = response.spot!.touchedBarGroupIndex; - }); - } else { - setState(() { - touchedGroupIndex = -1; - }); - } - }, - ), - ), - ), - ), - ); - } -} - -class _BarData { - const _BarData(this.color, this.value, this.shadowValue); - final Color color; - final double value; - final double shadowValue; -} - -class _IconWidget extends ImplicitlyAnimatedWidget { - const _IconWidget({ - required this.color, - required this.isSelected, - }) : super(duration: const Duration(milliseconds: 300)); - final Color color; - final bool isSelected; - - @override - ImplicitlyAnimatedWidgetState createState() => - _IconWidgetState(); -} - -class _IconWidgetState extends AnimatedWidgetBaseState<_IconWidget> { - Tween? _rotationTween; - - @override - Widget build(BuildContext context) { - final rotation = math.pi * 4 * _rotationTween!.evaluate(animation); - final scale = 1 + _rotationTween!.evaluate(animation) * 0.5; - return Transform( - transform: Matrix4.rotationZ(rotation).scaled(scale, scale), - origin: const Offset(14, 14), - child: Icon( - widget.isSelected ? Icons.face_retouching_natural : Icons.face, - color: widget.color, - size: 28, - ), - ); - } - - @override - void forEachTween(TweenVisitor visitor) { - _rotationTween = visitor( - _rotationTween, - widget.isSelected ? 1.0 : 0.0, - (dynamic value) => Tween( - begin: value as double, - end: widget.isSelected ? 1.0 : 0.0, - ), - ) as Tween?; - } -} diff --git a/example/lib/presentation/samples/bar/bar_chart_sample8.dart b/example/lib/presentation/samples/bar/bar_chart_sample8.dart deleted file mode 100644 index 2198fb0720..0000000000 --- a/example/lib/presentation/samples/bar/bar_chart_sample8.dart +++ /dev/null @@ -1,145 +0,0 @@ -import 'dart:math'; - -import 'package:fl_chart_app/presentation/resources/app_resources.dart'; -import 'package:fl_chart_app/util/extensions/color_extensions.dart'; -import 'package:fl_chart/fl_chart.dart'; -import 'package:flutter/material.dart'; - -class BarChartSample8 extends StatefulWidget { - BarChartSample8({super.key}); - - final Color barBackgroundColor = - AppColors.contentColorWhite.darken().withOpacity(0.3); - final Color barColor = AppColors.contentColorWhite; - - @override - State createState() => BarChartSample1State(); -} - -class BarChartSample1State extends State { - @override - Widget build(BuildContext context) { - return AspectRatio( - aspectRatio: 1, - child: Padding( - padding: const EdgeInsets.all(16), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - const Icon(Icons.graphic_eq), - const SizedBox( - width: 32, - ), - Text( - 'Sales forecasting chart', - style: TextStyle( - color: widget.barColor, - fontSize: 18, - fontWeight: FontWeight.bold, - ), - ), - ], - ), - const SizedBox( - height: 32, - ), - Expanded( - child: BarChart( - randomData(), - ), - ), - ], - ), - ), - ); - } - - BarChartGroupData makeGroupData( - int x, - double y, - ) { - return BarChartGroupData( - x: x, - barRods: [ - BarChartRodData( - toY: y, - color: x >= 4 ? Colors.transparent : widget.barColor, - borderRadius: BorderRadius.zero, - borderDashArray: x >= 4 ? [4, 4] : null, - width: 22, - borderSide: BorderSide(color: widget.barColor, width: 2.0), - ), - ], - ); - } - - Widget getTitles(double value, TitleMeta meta) { - const style = TextStyle( - color: Colors.white, - fontWeight: FontWeight.bold, - fontSize: 14, - ); - List days = ['M', 'T', 'W', 'T', 'F', 'S', 'S']; - - Widget text = Text( - days[value.toInt()], - style: style, - ); - - return SideTitleWidget( - axisSide: meta.axisSide, - space: 16, - child: text, - ); - } - - BarChartData randomData() { - return BarChartData( - maxY: 300.0, - barTouchData: BarTouchData( - enabled: false, - ), - titlesData: FlTitlesData( - show: true, - bottomTitles: AxisTitles( - sideTitles: SideTitles( - showTitles: true, - getTitlesWidget: getTitles, - reservedSize: 38, - ), - ), - leftTitles: const AxisTitles( - sideTitles: SideTitles( - reservedSize: 30, - showTitles: true, - ), - ), - topTitles: const AxisTitles( - sideTitles: SideTitles( - showTitles: false, - ), - ), - rightTitles: const AxisTitles( - sideTitles: SideTitles( - showTitles: false, - ), - ), - ), - borderData: FlBorderData( - show: false, - ), - barGroups: List.generate( - 7, - (i) => makeGroupData( - i, - Random().nextInt(290).toDouble() + 10, - ), - ), - gridData: const FlGridData(show: false), - ); - } -} diff --git a/example/lib/presentation/samples/chart_sample.dart b/example/lib/presentation/samples/chart_sample.dart deleted file mode 100644 index 6d753be251..0000000000 --- a/example/lib/presentation/samples/chart_sample.dart +++ /dev/null @@ -1,42 +0,0 @@ -import 'package:fl_chart_app/urls.dart'; -import 'package:fl_chart_app/util/app_helper.dart'; -import 'package:flutter/cupertino.dart'; - -abstract class ChartSample { - final int number; - final WidgetBuilder builder; - ChartType get type; - String get name => '${type.displayName} Sample $number'; - String get url => Urls.getChartSourceCodeUrl(type, number); - ChartSample(this.number, this.builder); -} - -class LineChartSample extends ChartSample { - LineChartSample(super.number, super.builder); - @override - ChartType get type => ChartType.line; -} - -class BarChartSample extends ChartSample { - BarChartSample(super.number, super.builder); - @override - ChartType get type => ChartType.bar; -} - -class PieChartSample extends ChartSample { - PieChartSample(super.number, super.builder); - @override - ChartType get type => ChartType.pie; -} - -class ScatterChartSample extends ChartSample { - ScatterChartSample(super.number, super.builder); - @override - ChartType get type => ChartType.scatter; -} - -class RadarChartSample extends ChartSample { - RadarChartSample(super.number, super.builder); - @override - ChartType get type => ChartType.radar; -} diff --git a/example/lib/presentation/samples/chart_samples.dart b/example/lib/presentation/samples/chart_samples.dart deleted file mode 100644 index 98e090148a..0000000000 --- a/example/lib/presentation/samples/chart_samples.dart +++ /dev/null @@ -1,68 +0,0 @@ -import 'package:fl_chart_app/util/app_helper.dart'; - -import 'bar/bar_chart_sample1.dart'; -import 'bar/bar_chart_sample2.dart'; -import 'bar/bar_chart_sample3.dart'; -import 'bar/bar_chart_sample4.dart'; -import 'bar/bar_chart_sample5.dart'; -import 'bar/bar_chart_sample6.dart'; -import 'bar/bar_chart_sample7.dart'; -import 'bar/bar_chart_sample8.dart'; -import 'chart_sample.dart'; -import 'line/line_chart_sample1.dart'; -import 'line/line_chart_sample10.dart'; -import 'line/line_chart_sample11.dart'; -import 'line/line_chart_sample2.dart'; -import 'line/line_chart_sample3.dart'; -import 'line/line_chart_sample4.dart'; -import 'line/line_chart_sample5.dart'; -import 'line/line_chart_sample6.dart'; -import 'line/line_chart_sample7.dart'; -import 'line/line_chart_sample8.dart'; -import 'line/line_chart_sample9.dart'; -import 'pie/pie_chart_sample1.dart'; -import 'pie/pie_chart_sample2.dart'; -import 'pie/pie_chart_sample3.dart'; -import 'radar/radar_chart_sample1.dart'; -import 'scatter/scatter_chart_sample1.dart'; -import 'scatter/scatter_chart_sample2.dart'; - -class ChartSamples { - static final Map> samples = { - ChartType.line: [ - LineChartSample(1, (context) => const LineChartSample1()), - LineChartSample(2, (context) => const LineChartSample2()), - LineChartSample(3, (context) => LineChartSample3()), - LineChartSample(4, (context) => LineChartSample4()), - LineChartSample(5, (context) => const LineChartSample5()), - LineChartSample(6, (context) => LineChartSample6()), - LineChartSample(7, (context) => LineChartSample7()), - LineChartSample(8, (context) => const LineChartSample8()), - LineChartSample(9, (context) => LineChartSample9()), - LineChartSample(10, (context) => const LineChartSample10()), - LineChartSample(11, (context) => const LineChartSample11()), - ], - ChartType.bar: [ - BarChartSample(1, (context) => BarChartSample1()), - BarChartSample(2, (context) => BarChartSample2()), - BarChartSample(3, (context) => const BarChartSample3()), - BarChartSample(4, (context) => BarChartSample4()), - BarChartSample(5, (context) => const BarChartSample5()), - BarChartSample(6, (context) => const BarChartSample6()), - BarChartSample(7, (context) => BarChartSample7()), - BarChartSample(8, (context) => BarChartSample8()), - ], - ChartType.pie: [ - PieChartSample(1, (context) => const PieChartSample1()), - PieChartSample(2, (context) => const PieChartSample2()), - PieChartSample(3, (context) => const PieChartSample3()), - ], - ChartType.scatter: [ - ScatterChartSample(1, (context) => ScatterChartSample1()), - ScatterChartSample(2, (context) => const ScatterChartSample2()), - ], - ChartType.radar: [ - RadarChartSample(1, (context) => RadarChartSample1()), - ], - }; -} diff --git a/example/lib/presentation/samples/line/line_chart_sample1.dart b/example/lib/presentation/samples/line/line_chart_sample1.dart deleted file mode 100644 index d85e7e971f..0000000000 --- a/example/lib/presentation/samples/line/line_chart_sample1.dart +++ /dev/null @@ -1,357 +0,0 @@ -import 'package:fl_chart_app/presentation/resources/app_resources.dart'; -import 'package:fl_chart/fl_chart.dart'; -import 'package:flutter/material.dart'; - -class _LineChart extends StatelessWidget { - const _LineChart({required this.isShowingMainData}); - - final bool isShowingMainData; - - @override - Widget build(BuildContext context) { - return LineChart( - isShowingMainData ? sampleData1 : sampleData2, - duration: const Duration(milliseconds: 250), - ); - } - - LineChartData get sampleData1 => LineChartData( - lineTouchData: lineTouchData1, - gridData: gridData, - titlesData: titlesData1, - borderData: borderData, - lineBarsData: lineBarsData1, - minX: 0, - maxX: 14, - maxY: 4, - minY: 0, - ); - - LineChartData get sampleData2 => LineChartData( - lineTouchData: lineTouchData2, - gridData: gridData, - titlesData: titlesData2, - borderData: borderData, - lineBarsData: lineBarsData2, - minX: 0, - maxX: 14, - maxY: 6, - minY: 0, - ); - - LineTouchData get lineTouchData1 => LineTouchData( - handleBuiltInTouches: true, - touchTooltipData: LineTouchTooltipData( - tooltipBgColor: Colors.blueGrey.withOpacity(0.8), - ), - ); - - FlTitlesData get titlesData1 => FlTitlesData( - bottomTitles: AxisTitles( - sideTitles: bottomTitles, - ), - rightTitles: const AxisTitles( - sideTitles: SideTitles(showTitles: false), - ), - topTitles: const AxisTitles( - sideTitles: SideTitles(showTitles: false), - ), - leftTitles: AxisTitles( - sideTitles: leftTitles(), - ), - ); - - List get lineBarsData1 => [ - lineChartBarData1_1, - lineChartBarData1_2, - lineChartBarData1_3, - ]; - - LineTouchData get lineTouchData2 => const LineTouchData( - enabled: false, - ); - - FlTitlesData get titlesData2 => FlTitlesData( - bottomTitles: AxisTitles( - sideTitles: bottomTitles, - ), - rightTitles: const AxisTitles( - sideTitles: SideTitles(showTitles: false), - ), - topTitles: const AxisTitles( - sideTitles: SideTitles(showTitles: false), - ), - leftTitles: AxisTitles( - sideTitles: leftTitles(), - ), - ); - - List get lineBarsData2 => [ - lineChartBarData2_1, - lineChartBarData2_2, - lineChartBarData2_3, - ]; - - Widget leftTitleWidgets(double value, TitleMeta meta) { - const style = TextStyle( - fontWeight: FontWeight.bold, - fontSize: 14, - ); - String text; - switch (value.toInt()) { - case 1: - text = '1m'; - break; - case 2: - text = '2m'; - break; - case 3: - text = '3m'; - break; - case 4: - text = '5m'; - break; - case 5: - text = '6m'; - break; - default: - return Container(); - } - - return Text(text, style: style, textAlign: TextAlign.center); - } - - SideTitles leftTitles() => SideTitles( - getTitlesWidget: leftTitleWidgets, - showTitles: true, - interval: 1, - reservedSize: 40, - ); - - Widget bottomTitleWidgets(double value, TitleMeta meta) { - const style = TextStyle( - fontWeight: FontWeight.bold, - fontSize: 16, - ); - Widget text; - switch (value.toInt()) { - case 2: - text = const Text('SEPT', style: style); - break; - case 7: - text = const Text('OCT', style: style); - break; - case 12: - text = const Text('DEC', style: style); - break; - default: - text = const Text(''); - break; - } - - return SideTitleWidget( - axisSide: meta.axisSide, - space: 10, - child: text, - ); - } - - SideTitles get bottomTitles => SideTitles( - showTitles: true, - reservedSize: 32, - interval: 1, - getTitlesWidget: bottomTitleWidgets, - ); - - FlGridData get gridData => const FlGridData(show: false); - - FlBorderData get borderData => FlBorderData( - show: true, - border: Border( - bottom: - BorderSide(color: AppColors.primary.withOpacity(0.2), width: 4), - left: const BorderSide(color: Colors.transparent), - right: const BorderSide(color: Colors.transparent), - top: const BorderSide(color: Colors.transparent), - ), - ); - - LineChartBarData get lineChartBarData1_1 => LineChartBarData( - isCurved: true, - color: AppColors.contentColorGreen, - barWidth: 8, - isStrokeCapRound: true, - dotData: const FlDotData(show: false), - belowBarData: BarAreaData(show: false), - spots: const [ - FlSpot(1, 1), - FlSpot(3, 1.5), - FlSpot(5, 1.4), - FlSpot(7, 3.4), - FlSpot(10, 2), - FlSpot(12, 2.2), - FlSpot(13, 1.8), - ], - ); - - LineChartBarData get lineChartBarData1_2 => LineChartBarData( - isCurved: true, - color: AppColors.contentColorPink, - barWidth: 8, - isStrokeCapRound: true, - dotData: const FlDotData(show: false), - belowBarData: BarAreaData( - show: false, - color: AppColors.contentColorPink.withOpacity(0), - ), - spots: const [ - FlSpot(1, 1), - FlSpot(3, 2.8), - FlSpot(7, 1.2), - FlSpot(10, 2.8), - FlSpot(12, 2.6), - FlSpot(13, 3.9), - ], - ); - - LineChartBarData get lineChartBarData1_3 => LineChartBarData( - isCurved: true, - color: AppColors.contentColorCyan, - barWidth: 8, - isStrokeCapRound: true, - dotData: const FlDotData(show: false), - belowBarData: BarAreaData(show: false), - spots: const [ - FlSpot(1, 2.8), - FlSpot(3, 1.9), - FlSpot(6, 3), - FlSpot(10, 1.3), - FlSpot(13, 2.5), - ], - ); - - LineChartBarData get lineChartBarData2_1 => LineChartBarData( - isCurved: true, - curveSmoothness: 0, - color: AppColors.contentColorGreen.withOpacity(0.5), - barWidth: 4, - isStrokeCapRound: true, - dotData: const FlDotData(show: false), - belowBarData: BarAreaData(show: false), - spots: const [ - FlSpot(1, 1), - FlSpot(3, 4), - FlSpot(5, 1.8), - FlSpot(7, 5), - FlSpot(10, 2), - FlSpot(12, 2.2), - FlSpot(13, 1.8), - ], - ); - - LineChartBarData get lineChartBarData2_2 => LineChartBarData( - isCurved: true, - color: AppColors.contentColorPink.withOpacity(0.5), - barWidth: 4, - isStrokeCapRound: true, - dotData: const FlDotData(show: false), - belowBarData: BarAreaData( - show: true, - color: AppColors.contentColorPink.withOpacity(0.2), - ), - spots: const [ - FlSpot(1, 1), - FlSpot(3, 2.8), - FlSpot(7, 1.2), - FlSpot(10, 2.8), - FlSpot(12, 2.6), - FlSpot(13, 3.9), - ], - ); - - LineChartBarData get lineChartBarData2_3 => LineChartBarData( - isCurved: true, - curveSmoothness: 0, - color: AppColors.contentColorCyan.withOpacity(0.5), - barWidth: 2, - isStrokeCapRound: true, - dotData: const FlDotData(show: true), - belowBarData: BarAreaData(show: false), - spots: const [ - FlSpot(1, 3.8), - FlSpot(3, 1.9), - FlSpot(6, 5), - FlSpot(10, 3.3), - FlSpot(13, 4.5), - ], - ); -} - -class LineChartSample1 extends StatefulWidget { - const LineChartSample1({super.key}); - - @override - State createState() => LineChartSample1State(); -} - -class LineChartSample1State extends State { - late bool isShowingMainData; - - @override - void initState() { - super.initState(); - isShowingMainData = true; - } - - @override - Widget build(BuildContext context) { - return AspectRatio( - aspectRatio: 1.23, - child: Stack( - children: [ - Column( - crossAxisAlignment: CrossAxisAlignment.stretch, - children: [ - const SizedBox( - height: 37, - ), - const Text( - 'Monthly Sales', - style: TextStyle( - color: AppColors.primary, - fontSize: 32, - fontWeight: FontWeight.bold, - letterSpacing: 2, - ), - textAlign: TextAlign.center, - ), - const SizedBox( - height: 37, - ), - Expanded( - child: Padding( - padding: const EdgeInsets.only(right: 16, left: 6), - child: _LineChart(isShowingMainData: isShowingMainData), - ), - ), - const SizedBox( - height: 10, - ), - ], - ), - IconButton( - icon: Icon( - Icons.refresh, - color: Colors.white.withOpacity(isShowingMainData ? 1.0 : 0.5), - ), - onPressed: () { - setState(() { - isShowingMainData = !isShowingMainData; - }); - }, - ) - ], - ), - ); - } -} diff --git a/example/lib/presentation/samples/line/line_chart_sample10.dart b/example/lib/presentation/samples/line/line_chart_sample10.dart deleted file mode 100644 index a90fd0f1e7..0000000000 --- a/example/lib/presentation/samples/line/line_chart_sample10.dart +++ /dev/null @@ -1,146 +0,0 @@ -import 'dart:async'; -import 'dart:math' as math; - -import 'package:fl_chart/fl_chart.dart'; -import 'package:fl_chart_app/presentation/resources/app_resources.dart'; -import 'package:flutter/material.dart'; - -class LineChartSample10 extends StatefulWidget { - const LineChartSample10({super.key}); - - final Color sinColor = AppColors.contentColorBlue; - final Color cosColor = AppColors.contentColorPink; - - @override - State createState() => _LineChartSample10State(); -} - -class _LineChartSample10State extends State { - final limitCount = 100; - final sinPoints = []; - final cosPoints = []; - - double xValue = 0; - double step = 0.05; - - late Timer timer; - - @override - void initState() { - super.initState(); - timer = Timer.periodic(const Duration(milliseconds: 40), (timer) { - while (sinPoints.length > limitCount) { - sinPoints.removeAt(0); - cosPoints.removeAt(0); - } - setState(() { - sinPoints.add(FlSpot(xValue, math.sin(xValue))); - cosPoints.add(FlSpot(xValue, math.cos(xValue))); - }); - xValue += step; - }); - } - - @override - Widget build(BuildContext context) { - return cosPoints.isNotEmpty - ? Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - const SizedBox(height: 12), - Text( - 'x: ${xValue.toStringAsFixed(1)}', - style: const TextStyle( - color: AppColors.mainTextColor2, - fontSize: 18, - fontWeight: FontWeight.bold, - ), - ), - Text( - 'sin: ${sinPoints.last.y.toStringAsFixed(1)}', - style: TextStyle( - color: widget.sinColor, - fontSize: 18, - fontWeight: FontWeight.bold, - ), - ), - Text( - 'cos: ${cosPoints.last.y.toStringAsFixed(1)}', - style: TextStyle( - color: widget.cosColor, - fontSize: 18, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox( - height: 12, - ), - AspectRatio( - aspectRatio: 1.5, - child: Padding( - padding: const EdgeInsets.only(bottom: 24.0), - child: LineChart( - LineChartData( - minY: -1, - maxY: 1, - minX: sinPoints.first.x, - maxX: sinPoints.last.x, - lineTouchData: const LineTouchData(enabled: false), - clipData: const FlClipData.all(), - gridData: const FlGridData( - show: true, - drawVerticalLine: false, - ), - borderData: FlBorderData(show: false), - lineBarsData: [ - sinLine(sinPoints), - cosLine(cosPoints), - ], - titlesData: const FlTitlesData( - show: false, - ), - ), - ), - ), - ) - ], - ) - : Container(); - } - - LineChartBarData sinLine(List points) { - return LineChartBarData( - spots: points, - dotData: const FlDotData( - show: false, - ), - gradient: LinearGradient( - colors: [widget.sinColor.withOpacity(0), widget.sinColor], - stops: const [0.1, 1.0], - ), - barWidth: 4, - isCurved: false, - ); - } - - LineChartBarData cosLine(List points) { - return LineChartBarData( - spots: points, - dotData: const FlDotData( - show: false, - ), - gradient: LinearGradient( - colors: [widget.cosColor.withOpacity(0), widget.cosColor], - stops: const [0.1, 1.0], - ), - barWidth: 4, - isCurved: false, - ); - } - - @override - void dispose() { - timer.cancel(); - super.dispose(); - } -} diff --git a/example/lib/presentation/samples/line/line_chart_sample11.dart b/example/lib/presentation/samples/line/line_chart_sample11.dart deleted file mode 100644 index 303ddf24af..0000000000 --- a/example/lib/presentation/samples/line/line_chart_sample11.dart +++ /dev/null @@ -1,202 +0,0 @@ -import 'package:fl_chart/fl_chart.dart'; -import 'package:flutter/material.dart'; - -class LineChartSample11 extends StatefulWidget { - const LineChartSample11({super.key}); - - @override - State createState() => _LineChartSample11State(); -} - -class _LineChartSample11State extends State { - var baselineX = 0.0; - var baselineY = 0.0; - - @override - Widget build(BuildContext context) { - return AspectRatio( - aspectRatio: 1.5, - child: Padding( - padding: const EdgeInsets.only( - top: 18.0, - right: 18.0, - ), - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Expanded( - child: Row( - children: [ - RotatedBox( - quarterTurns: 1, - child: Slider( - value: baselineY, - onChanged: (newValue) { - setState(() { - baselineY = newValue; - }); - }, - min: -10, - max: 10, - ), - ), - Expanded( - child: _Chart( - baselineX, - (20 - (baselineY + 10)) - 10, - ), - ) - ], - ), - ), - Slider( - value: baselineX, - onChanged: (newValue) { - setState(() { - baselineX = newValue; - }); - }, - min: -10, - max: 10, - ), - ], - ), - ), - ); - } -} - -class _Chart extends StatelessWidget { - final double baselineX; - final double baselineY; - - const _Chart(this.baselineX, this.baselineY) : super(); - - Widget getHorizontalTitles(value, TitleMeta meta) { - TextStyle style; - if ((value - baselineX).abs() <= 0.1) { - style = const TextStyle( - color: Colors.white, - fontSize: 18, - fontWeight: FontWeight.bold, - ); - } else { - style = const TextStyle( - color: Colors.white60, - fontSize: 14, - ); - } - return Padding( - padding: const EdgeInsets.all(4.0), - child: Text(meta.formattedValue, style: style), - ); - } - - Widget getVerticalTitles(value, TitleMeta meta) { - TextStyle style; - if ((value - baselineY).abs() <= 0.1) { - style = const TextStyle( - color: Colors.white, - fontSize: 18, - fontWeight: FontWeight.bold, - ); - } else { - style = const TextStyle( - color: Colors.white60, - fontSize: 14, - ); - } - - return Padding( - padding: const EdgeInsets.all(4.0), - child: Text(meta.formattedValue, style: style), - ); - } - - FlLine getHorizontalVerticalLine(double value) { - if ((value - baselineY).abs() <= 0.1) { - return const FlLine( - color: Colors.white70, - strokeWidth: 1, - dashArray: [8, 4], - ); - } else { - return const FlLine( - color: Colors.blueGrey, - strokeWidth: 0.4, - dashArray: [8, 4], - ); - } - } - - FlLine getVerticalVerticalLine(double value) { - if ((value - baselineX).abs() <= 0.1) { - return const FlLine( - color: Colors.white70, - strokeWidth: 1, - dashArray: [8, 4], - ); - } else { - return const FlLine( - color: Colors.blueGrey, - strokeWidth: 0.4, - dashArray: [8, 4], - ); - } - } - - @override - Widget build(BuildContext context) { - return LineChart( - LineChartData( - lineBarsData: [ - LineChartBarData( - spots: [], - ), - ], - titlesData: FlTitlesData( - leftTitles: AxisTitles( - sideTitles: SideTitles( - showTitles: true, - getTitlesWidget: getVerticalTitles, - reservedSize: 36, - ), - ), - topTitles: AxisTitles( - sideTitles: SideTitles( - showTitles: true, - getTitlesWidget: getHorizontalTitles, - reservedSize: 32), - ), - rightTitles: AxisTitles( - sideTitles: SideTitles( - showTitles: true, - getTitlesWidget: getVerticalTitles, - reservedSize: 36, - ), - ), - bottomTitles: AxisTitles( - sideTitles: SideTitles( - showTitles: true, - getTitlesWidget: getHorizontalTitles, - reservedSize: 32), - ), - ), - gridData: FlGridData( - show: true, - drawHorizontalLine: true, - drawVerticalLine: true, - getDrawingHorizontalLine: getHorizontalVerticalLine, - getDrawingVerticalLine: getVerticalVerticalLine, - ), - minY: -10, - maxY: 10, - baselineY: baselineY, - minX: -10, - maxX: 10, - baselineX: baselineX, - ), - duration: Duration.zero, - ); - } -} diff --git a/example/lib/presentation/samples/line/line_chart_sample2.dart b/example/lib/presentation/samples/line/line_chart_sample2.dart deleted file mode 100644 index d3e5a514f6..0000000000 --- a/example/lib/presentation/samples/line/line_chart_sample2.dart +++ /dev/null @@ -1,292 +0,0 @@ -import 'package:fl_chart_app/presentation/resources/app_resources.dart'; -import 'package:fl_chart/fl_chart.dart'; -import 'package:flutter/material.dart'; - -class LineChartSample2 extends StatefulWidget { - const LineChartSample2({super.key}); - - @override - State createState() => _LineChartSample2State(); -} - -class _LineChartSample2State extends State { - List gradientColors = [ - AppColors.contentColorCyan, - AppColors.contentColorBlue, - ]; - - bool showAvg = false; - - @override - Widget build(BuildContext context) { - return Stack( - children: [ - AspectRatio( - aspectRatio: 1.70, - child: Padding( - padding: const EdgeInsets.only( - right: 18, - left: 12, - top: 24, - bottom: 12, - ), - child: LineChart( - showAvg ? avgData() : mainData(), - ), - ), - ), - SizedBox( - width: 60, - height: 34, - child: TextButton( - onPressed: () { - setState(() { - showAvg = !showAvg; - }); - }, - child: Text( - 'avg', - style: TextStyle( - fontSize: 12, - color: showAvg ? Colors.white.withOpacity(0.5) : Colors.white, - ), - ), - ), - ), - ], - ); - } - - Widget bottomTitleWidgets(double value, TitleMeta meta) { - const style = TextStyle( - fontWeight: FontWeight.bold, - fontSize: 16, - ); - Widget text; - switch (value.toInt()) { - case 2: - text = const Text('MAR', style: style); - break; - case 5: - text = const Text('JUN', style: style); - break; - case 8: - text = const Text('SEP', style: style); - break; - default: - text = const Text('', style: style); - break; - } - - return SideTitleWidget( - axisSide: meta.axisSide, - child: text, - ); - } - - Widget leftTitleWidgets(double value, TitleMeta meta) { - const style = TextStyle( - fontWeight: FontWeight.bold, - fontSize: 15, - ); - String text; - switch (value.toInt()) { - case 1: - text = '10K'; - break; - case 3: - text = '30k'; - break; - case 5: - text = '50k'; - break; - default: - return Container(); - } - - return Text(text, style: style, textAlign: TextAlign.left); - } - - LineChartData mainData() { - return LineChartData( - gridData: FlGridData( - show: true, - drawVerticalLine: true, - horizontalInterval: 1, - verticalInterval: 1, - getDrawingHorizontalLine: (value) { - return const FlLine( - color: AppColors.mainGridLineColor, - strokeWidth: 1, - ); - }, - getDrawingVerticalLine: (value) { - return const FlLine( - color: AppColors.mainGridLineColor, - strokeWidth: 1, - ); - }, - ), - titlesData: FlTitlesData( - show: true, - rightTitles: const AxisTitles( - sideTitles: SideTitles(showTitles: false), - ), - topTitles: const AxisTitles( - sideTitles: SideTitles(showTitles: false), - ), - bottomTitles: AxisTitles( - sideTitles: SideTitles( - showTitles: true, - reservedSize: 30, - interval: 1, - getTitlesWidget: bottomTitleWidgets, - ), - ), - leftTitles: AxisTitles( - sideTitles: SideTitles( - showTitles: true, - interval: 1, - getTitlesWidget: leftTitleWidgets, - reservedSize: 42, - ), - ), - ), - borderData: FlBorderData( - show: true, - border: Border.all(color: const Color(0xff37434d)), - ), - minX: 0, - maxX: 11, - minY: 0, - maxY: 6, - lineBarsData: [ - LineChartBarData( - spots: const [ - FlSpot(0, 3), - FlSpot(2.6, 2), - FlSpot(4.9, 5), - FlSpot(6.8, 3.1), - FlSpot(8, 4), - FlSpot(9.5, 3), - FlSpot(11, 4), - ], - isCurved: true, - gradient: LinearGradient( - colors: gradientColors, - ), - barWidth: 5, - isStrokeCapRound: true, - dotData: const FlDotData( - show: false, - ), - belowBarData: BarAreaData( - show: true, - gradient: LinearGradient( - colors: gradientColors - .map((color) => color.withOpacity(0.3)) - .toList(), - ), - ), - ), - ], - ); - } - - LineChartData avgData() { - return LineChartData( - lineTouchData: const LineTouchData(enabled: false), - gridData: FlGridData( - show: true, - drawHorizontalLine: true, - verticalInterval: 1, - horizontalInterval: 1, - getDrawingVerticalLine: (value) { - return const FlLine( - color: Color(0xff37434d), - strokeWidth: 1, - ); - }, - getDrawingHorizontalLine: (value) { - return const FlLine( - color: Color(0xff37434d), - strokeWidth: 1, - ); - }, - ), - titlesData: FlTitlesData( - show: true, - bottomTitles: AxisTitles( - sideTitles: SideTitles( - showTitles: true, - reservedSize: 30, - getTitlesWidget: bottomTitleWidgets, - interval: 1, - ), - ), - leftTitles: AxisTitles( - sideTitles: SideTitles( - showTitles: true, - getTitlesWidget: leftTitleWidgets, - reservedSize: 42, - interval: 1, - ), - ), - topTitles: const AxisTitles( - sideTitles: SideTitles(showTitles: false), - ), - rightTitles: const AxisTitles( - sideTitles: SideTitles(showTitles: false), - ), - ), - borderData: FlBorderData( - show: true, - border: Border.all(color: const Color(0xff37434d)), - ), - minX: 0, - maxX: 11, - minY: 0, - maxY: 6, - lineBarsData: [ - LineChartBarData( - spots: const [ - FlSpot(0, 3.44), - FlSpot(2.6, 3.44), - FlSpot(4.9, 3.44), - FlSpot(6.8, 3.44), - FlSpot(8, 3.44), - FlSpot(9.5, 3.44), - FlSpot(11, 3.44), - ], - isCurved: true, - gradient: LinearGradient( - colors: [ - ColorTween(begin: gradientColors[0], end: gradientColors[1]) - .lerp(0.2)!, - ColorTween(begin: gradientColors[0], end: gradientColors[1]) - .lerp(0.2)!, - ], - ), - barWidth: 5, - isStrokeCapRound: true, - dotData: const FlDotData( - show: false, - ), - belowBarData: BarAreaData( - show: true, - gradient: LinearGradient( - colors: [ - ColorTween(begin: gradientColors[0], end: gradientColors[1]) - .lerp(0.2)! - .withOpacity(0.1), - ColorTween(begin: gradientColors[0], end: gradientColors[1]) - .lerp(0.2)! - .withOpacity(0.1), - ], - ), - ), - ), - ], - ); - } -} diff --git a/example/lib/presentation/samples/line/line_chart_sample3.dart b/example/lib/presentation/samples/line/line_chart_sample3.dart deleted file mode 100644 index 7109ee7119..0000000000 --- a/example/lib/presentation/samples/line/line_chart_sample3.dart +++ /dev/null @@ -1,451 +0,0 @@ -import 'package:fl_chart_app/presentation/resources/app_resources.dart'; -import 'package:fl_chart/fl_chart.dart'; -import 'package:flutter/material.dart'; - -class LineChartSample3 extends StatefulWidget { - LineChartSample3({ - super.key, - Color? lineColor, - Color? indicatorLineColor, - Color? indicatorTouchedLineColor, - Color? indicatorSpotStrokeColor, - Color? indicatorTouchedSpotStrokeColor, - Color? bottomTextColor, - Color? bottomTouchedTextColor, - Color? averageLineColor, - Color? tooltipBgColor, - Color? tooltipTextColor, - }) : lineColor = lineColor ?? AppColors.contentColorRed, - indicatorLineColor = - indicatorLineColor ?? AppColors.contentColorYellow.withOpacity(0.2), - indicatorTouchedLineColor = - indicatorTouchedLineColor ?? AppColors.contentColorYellow, - indicatorSpotStrokeColor = indicatorSpotStrokeColor ?? - AppColors.contentColorYellow.withOpacity(0.5), - indicatorTouchedSpotStrokeColor = - indicatorTouchedSpotStrokeColor ?? AppColors.contentColorYellow, - bottomTextColor = - bottomTextColor ?? AppColors.contentColorYellow.withOpacity(0.2), - bottomTouchedTextColor = - bottomTouchedTextColor ?? AppColors.contentColorYellow, - averageLineColor = - averageLineColor ?? AppColors.contentColorGreen.withOpacity(0.8), - tooltipBgColor = tooltipBgColor ?? AppColors.contentColorGreen, - tooltipTextColor = tooltipTextColor ?? Colors.black; - - final Color lineColor; - final Color indicatorLineColor; - final Color indicatorTouchedLineColor; - final Color indicatorSpotStrokeColor; - final Color indicatorTouchedSpotStrokeColor; - final Color bottomTextColor; - final Color bottomTouchedTextColor; - final Color averageLineColor; - final Color tooltipBgColor; - final Color tooltipTextColor; - - List get weekDays => - const ['Sat', 'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri']; - - List get yValues => const [1.3, 1, 1.8, 1.5, 2.2, 1.8, 3]; - - @override - State createState() => _LineChartSample3State(); -} - -class _LineChartSample3State extends State { - late double touchedValue; - - bool fitInsideBottomTitle = true; - bool fitInsideLeftTitle = false; - - @override - void initState() { - touchedValue = -1; - super.initState(); - } - - Widget leftTitleWidgets(double value, TitleMeta meta) { - if (value % 1 != 0) { - return Container(); - } - final style = TextStyle( - color: AppColors.mainTextColor1.withOpacity(0.5), - fontSize: 10, - ); - String text; - switch (value.toInt()) { - case 0: - text = ''; - break; - case 1: - text = '1k calories'; - break; - case 2: - text = '2k calories'; - break; - case 3: - text = '3k calories'; - break; - default: - return Container(); - } - - return SideTitleWidget( - axisSide: meta.axisSide, - space: 6, - fitInside: fitInsideLeftTitle - ? SideTitleFitInsideData.fromTitleMeta(meta) - : SideTitleFitInsideData.disable(), - child: Text(text, style: style, textAlign: TextAlign.center), - ); - } - - Widget bottomTitleWidgets(double value, TitleMeta meta) { - final isTouched = value == touchedValue; - final style = TextStyle( - color: isTouched ? widget.bottomTouchedTextColor : widget.bottomTextColor, - fontWeight: FontWeight.bold, - ); - - if (value % 1 != 0) { - return Container(); - } - return SideTitleWidget( - space: 4, - axisSide: meta.axisSide, - fitInside: fitInsideBottomTitle - ? SideTitleFitInsideData.fromTitleMeta(meta, distanceFromEdge: 0) - : SideTitleFitInsideData.disable(), - child: Text( - widget.weekDays[value.toInt()], - style: style, - ), - ); - } - - @override - Widget build(BuildContext context) { - return Column( - mainAxisSize: MainAxisSize.min, - children: [ - const SizedBox(height: 10), - Row( - mainAxisSize: MainAxisSize.min, - children: [ - Text( - 'Average Line', - style: TextStyle( - color: widget.averageLineColor.withOpacity(1), - fontWeight: FontWeight.bold, - fontSize: 16, - ), - ), - const Text( - ' and ', - style: TextStyle( - color: AppColors.mainTextColor1, - fontWeight: FontWeight.bold, - fontSize: 16, - ), - ), - Text( - 'Indicators', - style: TextStyle( - color: widget.indicatorLineColor.withOpacity(1), - fontWeight: FontWeight.bold, - fontSize: 16, - ), - ), - ], - ), - const SizedBox( - height: 18, - ), - AspectRatio( - aspectRatio: 2, - child: Padding( - padding: const EdgeInsets.only(right: 20.0, left: 12), - child: LineChart( - LineChartData( - lineTouchData: LineTouchData( - getTouchedSpotIndicator: - (LineChartBarData barData, List spotIndexes) { - return spotIndexes.map((spotIndex) { - final spot = barData.spots[spotIndex]; - if (spot.x == 0 || spot.x == 6) { - return null; - } - return TouchedSpotIndicatorData( - FlLine( - color: widget.indicatorTouchedLineColor, - strokeWidth: 4, - ), - FlDotData( - getDotPainter: (spot, percent, barData, index) { - if (index.isEven) { - return FlDotCirclePainter( - radius: 8, - color: Colors.white, - strokeWidth: 5, - strokeColor: - widget.indicatorTouchedSpotStrokeColor, - ); - } else { - return FlDotSquarePainter( - size: 16, - color: Colors.white, - strokeWidth: 5, - strokeColor: - widget.indicatorTouchedSpotStrokeColor, - ); - } - }, - ), - ); - }).toList(); - }, - touchTooltipData: LineTouchTooltipData( - tooltipBgColor: widget.tooltipBgColor, - getTooltipItems: (List touchedBarSpots) { - return touchedBarSpots.map((barSpot) { - final flSpot = barSpot; - if (flSpot.x == 0 || flSpot.x == 6) { - return null; - } - - TextAlign textAlign; - switch (flSpot.x.toInt()) { - case 1: - textAlign = TextAlign.left; - break; - case 5: - textAlign = TextAlign.right; - break; - default: - textAlign = TextAlign.center; - } - - return LineTooltipItem( - '${widget.weekDays[flSpot.x.toInt()]} \n', - TextStyle( - color: widget.tooltipTextColor, - fontWeight: FontWeight.bold, - ), - children: [ - TextSpan( - text: flSpot.y.toString(), - style: TextStyle( - color: widget.tooltipTextColor, - fontWeight: FontWeight.w900, - ), - ), - const TextSpan( - text: ' k ', - style: TextStyle( - fontStyle: FontStyle.italic, - fontWeight: FontWeight.w900, - ), - ), - const TextSpan( - text: 'calories', - style: TextStyle( - fontWeight: FontWeight.normal, - ), - ), - ], - textAlign: textAlign, - ); - }).toList(); - }, - ), - touchCallback: - (FlTouchEvent event, LineTouchResponse? lineTouch) { - if (!event.isInterestedForInteractions || - lineTouch == null || - lineTouch.lineBarSpots == null) { - setState(() { - touchedValue = -1; - }); - return; - } - final value = lineTouch.lineBarSpots![0].x; - - if (value == 0 || value == 6) { - setState(() { - touchedValue = -1; - }); - return; - } - - setState(() { - touchedValue = value; - }); - }, - ), - extraLinesData: ExtraLinesData( - horizontalLines: [ - HorizontalLine( - y: 1.8, - color: widget.averageLineColor, - strokeWidth: 3, - dashArray: [20, 10], - ), - ], - ), - lineBarsData: [ - LineChartBarData( - isStepLineChart: true, - spots: widget.yValues.asMap().entries.map((e) { - return FlSpot(e.key.toDouble(), e.value); - }).toList(), - isCurved: false, - barWidth: 4, - color: widget.lineColor, - belowBarData: BarAreaData( - show: true, - gradient: LinearGradient( - colors: [ - widget.lineColor.withOpacity(0.5), - widget.lineColor.withOpacity(0), - ], - stops: const [0.5, 1.0], - begin: Alignment.topCenter, - end: Alignment.bottomCenter, - ), - spotsLine: BarAreaSpotsLine( - show: true, - flLineStyle: FlLine( - color: widget.indicatorLineColor, - strokeWidth: 2, - ), - checkToShowSpotLine: (spot) { - if (spot.x == 0 || spot.x == 6) { - return false; - } - - return true; - }, - ), - ), - dotData: FlDotData( - show: true, - getDotPainter: (spot, percent, barData, index) { - if (index.isEven) { - return FlDotCirclePainter( - radius: 6, - color: Colors.white, - strokeWidth: 3, - strokeColor: widget.indicatorSpotStrokeColor, - ); - } else { - return FlDotSquarePainter( - size: 12, - color: Colors.white, - strokeWidth: 3, - strokeColor: widget.indicatorSpotStrokeColor, - ); - } - }, - checkToShowDot: (spot, barData) { - return spot.x != 0 && spot.x != 6; - }, - ), - ), - ], - minY: 0, - borderData: FlBorderData( - show: true, - border: Border.all( - color: AppColors.borderColor, - ), - ), - gridData: FlGridData( - show: true, - drawHorizontalLine: true, - drawVerticalLine: true, - checkToShowHorizontalLine: (value) => value % 1 == 0, - checkToShowVerticalLine: (value) => value % 1 == 0, - getDrawingHorizontalLine: (value) { - if (value == 0) { - return const FlLine( - color: AppColors.contentColorOrange, - strokeWidth: 2, - ); - } else { - return const FlLine( - color: AppColors.mainGridLineColor, - strokeWidth: 0.5, - ); - } - }, - getDrawingVerticalLine: (value) { - if (value == 0) { - return const FlLine( - color: Colors.redAccent, - strokeWidth: 10, - ); - } else { - return const FlLine( - color: AppColors.mainGridLineColor, - strokeWidth: 0.5, - ); - } - }, - ), - titlesData: FlTitlesData( - show: true, - topTitles: const AxisTitles( - sideTitles: SideTitles(showTitles: false), - ), - rightTitles: const AxisTitles( - sideTitles: SideTitles(showTitles: false), - ), - leftTitles: AxisTitles( - sideTitles: SideTitles( - showTitles: true, - reservedSize: 46, - getTitlesWidget: leftTitleWidgets, - ), - ), - bottomTitles: AxisTitles( - sideTitles: SideTitles( - showTitles: true, - reservedSize: 40, - getTitlesWidget: bottomTitleWidgets, - ), - ), - ), - ), - ), - ), - ), - Column( - children: [ - const Text('Fit Inside Title Option'), - const Divider(), - Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - const Text('Left Title'), - Switch( - value: fitInsideLeftTitle, - onChanged: (value) => setState(() { - fitInsideLeftTitle = value; - }), - ), - const Text('Bottom Title'), - Switch( - value: fitInsideBottomTitle, - onChanged: (value) => setState(() { - fitInsideBottomTitle = value; - }), - ) - ], - ), - ], - ), - ], - ); - } -} diff --git a/example/lib/presentation/samples/line/line_chart_sample4.dart b/example/lib/presentation/samples/line/line_chart_sample4.dart deleted file mode 100644 index 9e7175f155..0000000000 --- a/example/lib/presentation/samples/line/line_chart_sample4.dart +++ /dev/null @@ -1,202 +0,0 @@ -import 'package:fl_chart_app/presentation/resources/app_resources.dart'; -import 'package:fl_chart/fl_chart.dart'; -import 'package:flutter/material.dart'; - -class LineChartSample4 extends StatelessWidget { - LineChartSample4({ - super.key, - Color? mainLineColor, - Color? belowLineColor, - Color? aboveLineColor, - }) : mainLineColor = - mainLineColor ?? AppColors.contentColorYellow.withOpacity(1), - belowLineColor = - belowLineColor ?? AppColors.contentColorPink.withOpacity(1), - aboveLineColor = - aboveLineColor ?? AppColors.contentColorPurple.withOpacity(0.7); - - final Color mainLineColor; - final Color belowLineColor; - final Color aboveLineColor; - - Widget bottomTitleWidgets(double value, TitleMeta meta) { - String text; - switch (value.toInt()) { - case 0: - text = 'Jan'; - break; - case 1: - text = 'Feb'; - break; - case 2: - text = 'Mar'; - break; - case 3: - text = 'Apr'; - break; - case 4: - text = 'May'; - break; - case 5: - text = 'Jun'; - break; - case 6: - text = 'Jul'; - break; - case 7: - text = 'Aug'; - break; - case 8: - text = 'Sep'; - break; - case 9: - text = 'Oct'; - break; - case 10: - text = 'Nov'; - break; - case 11: - text = 'Dec'; - break; - default: - return Container(); - } - - return SideTitleWidget( - axisSide: meta.axisSide, - space: 4, - child: Text( - text, - style: TextStyle( - fontSize: 10, - color: mainLineColor, - fontWeight: FontWeight.bold, - ), - ), - ); - } - - Widget leftTitleWidgets(double value, TitleMeta meta) { - const style = TextStyle( - color: AppColors.mainTextColor3, - fontSize: 12, - ); - return SideTitleWidget( - axisSide: meta.axisSide, - child: Text('\$ ${value + 0.5}', style: style), - ); - } - - @override - Widget build(BuildContext context) { - const cutOffYValue = 5.0; - - return AspectRatio( - aspectRatio: 2, - child: Padding( - padding: const EdgeInsets.only( - left: 12, - right: 28, - top: 22, - bottom: 12, - ), - child: LineChart( - LineChartData( - lineTouchData: const LineTouchData(enabled: false), - lineBarsData: [ - LineChartBarData( - spots: const [ - FlSpot(0, 4), - FlSpot(1, 3.5), - FlSpot(2, 4.5), - FlSpot(3, 1), - FlSpot(4, 4), - FlSpot(5, 6), - FlSpot(6, 6.5), - FlSpot(7, 6), - FlSpot(8, 4), - FlSpot(9, 6), - FlSpot(10, 6), - FlSpot(11, 7), - ], - isCurved: true, - barWidth: 8, - color: mainLineColor, - belowBarData: BarAreaData( - show: true, - color: belowLineColor, - cutOffY: cutOffYValue, - applyCutOffY: true, - ), - aboveBarData: BarAreaData( - show: true, - color: aboveLineColor, - cutOffY: cutOffYValue, - applyCutOffY: true, - ), - dotData: const FlDotData( - show: false, - ), - ), - ], - minY: 0, - titlesData: FlTitlesData( - show: true, - topTitles: const AxisTitles( - sideTitles: SideTitles(showTitles: false), - ), - rightTitles: const AxisTitles( - sideTitles: SideTitles(showTitles: false), - ), - bottomTitles: AxisTitles( - axisNameWidget: Text( - '2019', - style: TextStyle( - fontSize: 10, - color: mainLineColor, - fontWeight: FontWeight.bold, - ), - ), - sideTitles: SideTitles( - showTitles: true, - reservedSize: 18, - interval: 1, - getTitlesWidget: bottomTitleWidgets, - ), - ), - leftTitles: AxisTitles( - axisNameSize: 20, - axisNameWidget: const Text( - 'Value', - style: TextStyle( - color: AppColors.mainTextColor2, - ), - ), - sideTitles: SideTitles( - showTitles: true, - interval: 1, - reservedSize: 40, - getTitlesWidget: leftTitleWidgets, - ), - ), - ), - borderData: FlBorderData( - show: true, - border: Border.all( - color: AppColors.borderColor, - ), - ), - gridData: FlGridData( - show: true, - drawVerticalLine: false, - horizontalInterval: 1, - checkToShowHorizontalLine: (double value) { - return value == 1 || value == 6 || value == 4 || value == 5; - }, - ), - ), - ), - ), - ); - } -} diff --git a/example/lib/presentation/samples/line/line_chart_sample5.dart b/example/lib/presentation/samples/line/line_chart_sample5.dart deleted file mode 100644 index 26d7656147..0000000000 --- a/example/lib/presentation/samples/line/line_chart_sample5.dart +++ /dev/null @@ -1,289 +0,0 @@ -import 'package:fl_chart_app/presentation/resources/app_resources.dart'; -import 'package:fl_chart/fl_chart.dart'; -import 'package:flutter/material.dart'; - -class LineChartSample5 extends StatefulWidget { - const LineChartSample5({ - super.key, - Color? gradientColor1, - Color? gradientColor2, - Color? gradientColor3, - Color? indicatorStrokeColor, - }) : gradientColor1 = gradientColor1 ?? AppColors.contentColorBlue, - gradientColor2 = gradientColor2 ?? AppColors.contentColorPink, - gradientColor3 = gradientColor3 ?? AppColors.contentColorRed, - indicatorStrokeColor = indicatorStrokeColor ?? AppColors.mainTextColor1; - - final Color gradientColor1; - final Color gradientColor2; - final Color gradientColor3; - final Color indicatorStrokeColor; - - @override - State createState() => _LineChartSample5State(); -} - -class _LineChartSample5State extends State { - List showingTooltipOnSpots = [1, 3, 5]; - - List get allSpots => const [ - FlSpot(0, 1), - FlSpot(1, 2), - FlSpot(2, 1.5), - FlSpot(3, 3), - FlSpot(4, 3.5), - FlSpot(5, 5), - FlSpot(6, 8), - ]; - - Widget bottomTitleWidgets(double value, TitleMeta meta, double chartWidth) { - final style = TextStyle( - fontWeight: FontWeight.bold, - color: AppColors.contentColorPink, - fontFamily: 'Digital', - fontSize: 18 * chartWidth / 500, - ); - String text; - switch (value.toInt()) { - case 0: - text = '00:00'; - break; - case 1: - text = '04:00'; - break; - case 2: - text = '08:00'; - break; - case 3: - text = '12:00'; - break; - case 4: - text = '16:00'; - break; - case 5: - text = '20:00'; - break; - case 6: - text = '23:59'; - break; - default: - return Container(); - } - - return SideTitleWidget( - axisSide: meta.axisSide, - child: Text(text, style: style), - ); - } - - @override - Widget build(BuildContext context) { - final lineBarsData = [ - LineChartBarData( - showingIndicators: showingTooltipOnSpots, - spots: allSpots, - isCurved: true, - barWidth: 4, - shadow: const Shadow( - blurRadius: 8, - ), - belowBarData: BarAreaData( - show: true, - gradient: LinearGradient( - colors: [ - widget.gradientColor1.withOpacity(0.4), - widget.gradientColor2.withOpacity(0.4), - widget.gradientColor3.withOpacity(0.4), - ], - ), - ), - dotData: const FlDotData(show: false), - gradient: LinearGradient( - colors: [ - widget.gradientColor1, - widget.gradientColor2, - widget.gradientColor3, - ], - stops: const [0.1, 0.4, 0.9], - ), - ), - ]; - - final tooltipsOnBar = lineBarsData[0]; - - return AspectRatio( - aspectRatio: 2.5, - child: Padding( - padding: const EdgeInsets.symmetric( - horizontal: 24.0, - vertical: 10, - ), - child: LayoutBuilder(builder: (context, constraints) { - return LineChart( - LineChartData( - showingTooltipIndicators: showingTooltipOnSpots.map((index) { - return ShowingTooltipIndicators([ - LineBarSpot( - tooltipsOnBar, - lineBarsData.indexOf(tooltipsOnBar), - tooltipsOnBar.spots[index], - ), - ]); - }).toList(), - lineTouchData: LineTouchData( - enabled: true, - handleBuiltInTouches: false, - touchCallback: - (FlTouchEvent event, LineTouchResponse? response) { - if (response == null || response.lineBarSpots == null) { - return; - } - if (event is FlTapUpEvent) { - final spotIndex = response.lineBarSpots!.first.spotIndex; - setState(() { - if (showingTooltipOnSpots.contains(spotIndex)) { - showingTooltipOnSpots.remove(spotIndex); - } else { - showingTooltipOnSpots.add(spotIndex); - } - }); - } - }, - mouseCursorResolver: - (FlTouchEvent event, LineTouchResponse? response) { - if (response == null || response.lineBarSpots == null) { - return SystemMouseCursors.basic; - } - return SystemMouseCursors.click; - }, - getTouchedSpotIndicator: - (LineChartBarData barData, List spotIndexes) { - return spotIndexes.map((index) { - return TouchedSpotIndicatorData( - const FlLine( - color: Colors.pink, - ), - FlDotData( - show: true, - getDotPainter: (spot, percent, barData, index) => - FlDotCirclePainter( - radius: 8, - color: lerpGradient( - barData.gradient!.colors, - barData.gradient!.stops!, - percent / 100, - ), - strokeWidth: 2, - strokeColor: widget.indicatorStrokeColor, - ), - ), - ); - }).toList(); - }, - touchTooltipData: LineTouchTooltipData( - tooltipBgColor: Colors.pink, - tooltipRoundedRadius: 8, - getTooltipItems: (List lineBarsSpot) { - return lineBarsSpot.map((lineBarSpot) { - return LineTooltipItem( - lineBarSpot.y.toString(), - const TextStyle( - color: Colors.white, - fontWeight: FontWeight.bold, - ), - ); - }).toList(); - }, - ), - ), - lineBarsData: lineBarsData, - minY: 0, - titlesData: FlTitlesData( - leftTitles: const AxisTitles( - axisNameWidget: Text('count'), - axisNameSize: 24, - sideTitles: SideTitles( - showTitles: false, - reservedSize: 0, - ), - ), - bottomTitles: AxisTitles( - sideTitles: SideTitles( - showTitles: true, - interval: 1, - getTitlesWidget: (value, meta) { - return bottomTitleWidgets( - value, - meta, - constraints.maxWidth, - ); - }, - reservedSize: 30, - ), - ), - rightTitles: const AxisTitles( - axisNameWidget: Text('count'), - sideTitles: SideTitles( - showTitles: false, - reservedSize: 0, - ), - ), - topTitles: const AxisTitles( - axisNameWidget: Text( - 'Wall clock', - textAlign: TextAlign.left, - ), - axisNameSize: 24, - sideTitles: SideTitles( - showTitles: true, - reservedSize: 0, - ), - ), - ), - gridData: const FlGridData(show: false), - borderData: FlBorderData( - show: true, - border: Border.all( - color: AppColors.borderColor, - ), - ), - ), - ); - }), - ), - ); - } -} - -/// Lerps between a [LinearGradient] colors, based on [t] -Color lerpGradient(List colors, List stops, double t) { - if (colors.isEmpty) { - throw ArgumentError('"colors" is empty.'); - } else if (colors.length == 1) { - return colors[0]; - } - - if (stops.length != colors.length) { - stops = []; - - /// provided gradientColorStops is invalid and we calculate it here - colors.asMap().forEach((index, color) { - final percent = 1.0 / (colors.length - 1); - stops.add(percent * index); - }); - } - - for (var s = 0; s < stops.length - 1; s++) { - final leftStop = stops[s]; - final rightStop = stops[s + 1]; - final leftColor = colors[s]; - final rightColor = colors[s + 1]; - if (t <= leftStop) { - return leftColor; - } else if (t < rightStop) { - final sectionT = (t - leftStop) / (rightStop - leftStop); - return Color.lerp(leftColor, rightColor, sectionT)!; - } - } - return colors.last; -} diff --git a/example/lib/presentation/samples/line/line_chart_sample6.dart b/example/lib/presentation/samples/line/line_chart_sample6.dart deleted file mode 100644 index d9561af4d9..0000000000 --- a/example/lib/presentation/samples/line/line_chart_sample6.dart +++ /dev/null @@ -1,242 +0,0 @@ -import 'package:fl_chart_app/presentation/resources/app_resources.dart'; -import 'package:fl_chart_app/util/extensions/color_extensions.dart'; -import 'package:fl_chart/fl_chart.dart'; -import 'package:flutter/material.dart'; - -// ignore: must_be_immutable -class LineChartSample6 extends StatelessWidget { - LineChartSample6({ - super.key, - Color? line1Color1, - Color? line1Color2, - Color? line2Color1, - Color? line2Color2, - }) : line1Color1 = line1Color1 ?? AppColors.contentColorOrange, - line1Color2 = line1Color2 ?? AppColors.contentColorOrange.darken(60), - line2Color1 = line2Color1 ?? AppColors.contentColorBlue.darken(60), - line2Color2 = line2Color2 ?? AppColors.contentColorBlue { - minSpotX = spots.first.x; - maxSpotX = spots.first.x; - minSpotY = spots.first.y; - maxSpotY = spots.first.y; - - for (final spot in spots) { - if (spot.x > maxSpotX) { - maxSpotX = spot.x; - } - - if (spot.x < minSpotX) { - minSpotX = spot.x; - } - - if (spot.y > maxSpotY) { - maxSpotY = spot.y; - } - - if (spot.y < minSpotY) { - minSpotY = spot.y; - } - } - } - - final Color line1Color1; - final Color line1Color2; - final Color line2Color1; - final Color line2Color2; - - final spots = const [ - FlSpot(0, 1), - FlSpot(2, 5), - FlSpot(4, 3), - FlSpot(6, 5), - ]; - - final spots2 = const [ - FlSpot(0, 3), - FlSpot(2, 1), - FlSpot(4, 2), - FlSpot(6, 1), - ]; - - late double minSpotX; - late double maxSpotX; - late double minSpotY; - late double maxSpotY; - - Widget leftTitleWidgets(double value, TitleMeta meta) { - final style = TextStyle( - color: line1Color1, - fontWeight: FontWeight.bold, - fontSize: 18, - ); - - final intValue = reverseY(value, minSpotY, maxSpotY).toInt(); - - if (intValue == (maxSpotY + minSpotY)) { - return Text('', style: style); - } - - return Padding( - padding: const EdgeInsets.only(right: 6), - child: Text( - intValue.toString(), - style: style, - textAlign: TextAlign.center, - ), - ); - } - - Widget rightTitleWidgets(double value, TitleMeta meta) { - final style = TextStyle( - color: line2Color2, - fontWeight: FontWeight.bold, - fontSize: 18, - ); - final intValue = reverseY(value, minSpotY, maxSpotY).toInt(); - - if (intValue == (maxSpotY + minSpotY)) { - return Text('', style: style); - } - - return Text(intValue.toString(), style: style, textAlign: TextAlign.right); - } - - Widget topTitleWidgets(double value, TitleMeta meta) { - if (value % 1 != 0) { - return Container(); - } - const style = TextStyle( - fontWeight: FontWeight.bold, - color: AppColors.mainTextColor2, - ); - return SideTitleWidget( - axisSide: meta.axisSide, - child: Text(value.toInt().toString(), style: style), - ); - } - - @override - Widget build(BuildContext context) { - return Padding( - padding: const EdgeInsets.only(right: 22, bottom: 20), - child: AspectRatio( - aspectRatio: 2, - child: LineChart( - LineChartData( - lineTouchData: const LineTouchData(enabled: false), - lineBarsData: [ - LineChartBarData( - gradient: LinearGradient( - colors: [ - line1Color1, - line1Color2, - ], - ), - spots: reverseSpots(spots, minSpotY, maxSpotY), - isCurved: true, - isStrokeCapRound: true, - barWidth: 10, - belowBarData: BarAreaData( - show: false, - ), - dotData: FlDotData( - show: true, - getDotPainter: (spot, percent, barData, index) => - FlDotCirclePainter( - radius: 12, - color: Colors.transparent, - strokeColor: AppColors.mainTextColor2, - ), - ), - ), - LineChartBarData( - gradient: LinearGradient( - colors: [ - line2Color1, - line2Color2, - ], - ), - spots: reverseSpots(spots2, minSpotY, maxSpotY), - isCurved: true, - isStrokeCapRound: true, - barWidth: 10, - belowBarData: BarAreaData( - show: false, - ), - dotData: FlDotData( - show: true, - getDotPainter: (spot, percent, barData, index) => - FlDotCirclePainter( - radius: 12, - color: Colors.transparent, - strokeColor: AppColors.mainTextColor2, - ), - ), - ), - ], - minY: 0, - maxY: maxSpotY + minSpotY, - titlesData: FlTitlesData( - leftTitles: AxisTitles( - sideTitles: SideTitles( - showTitles: true, - getTitlesWidget: leftTitleWidgets, - reservedSize: 38, - ), - ), - rightTitles: AxisTitles( - sideTitles: SideTitles( - showTitles: true, - getTitlesWidget: rightTitleWidgets, - reservedSize: 30, - ), - ), - bottomTitles: const AxisTitles( - sideTitles: SideTitles(showTitles: false), - ), - topTitles: AxisTitles( - sideTitles: SideTitles( - showTitles: true, - reservedSize: 32, - getTitlesWidget: topTitleWidgets, - ), - ), - ), - gridData: FlGridData( - show: true, - drawVerticalLine: true, - checkToShowHorizontalLine: (value) { - final intValue = reverseY(value, minSpotY, maxSpotY).toInt(); - - if (intValue == (maxSpotY + minSpotY).toInt()) { - return false; - } - - return true; - }, - ), - borderData: FlBorderData( - show: true, - border: const Border( - left: BorderSide(color: AppColors.borderColor), - top: BorderSide(color: AppColors.borderColor), - bottom: BorderSide(color: Colors.transparent), - right: BorderSide(color: Colors.transparent), - ), - ), - ), - ), - ), - ); - } - - double reverseY(double y, double minX, double maxX) { - return (maxX + minX) - y; - } - - List reverseSpots(List inputSpots, double minY, double maxY) { - return inputSpots.map((spot) { - return spot.copyWith(y: (maxY + minY) - spot.y); - }).toList(); - } -} diff --git a/example/lib/presentation/samples/line/line_chart_sample7.dart b/example/lib/presentation/samples/line/line_chart_sample7.dart deleted file mode 100644 index 2d4b11a73e..0000000000 --- a/example/lib/presentation/samples/line/line_chart_sample7.dart +++ /dev/null @@ -1,193 +0,0 @@ -import 'package:fl_chart_app/presentation/resources/app_resources.dart'; -import 'package:fl_chart/fl_chart.dart'; -import 'package:flutter/material.dart'; - -class LineChartSample7 extends StatelessWidget { - LineChartSample7({ - super.key, - Color? line1Color, - Color? line2Color, - Color? betweenColor, - }) : line1Color = line1Color ?? AppColors.contentColorGreen, - line2Color = line2Color ?? AppColors.contentColorRed, - betweenColor = - betweenColor ?? AppColors.contentColorRed.withOpacity(0.5); - - final Color line1Color; - final Color line2Color; - final Color betweenColor; - - Widget bottomTitleWidgets(double value, TitleMeta meta) { - const style = TextStyle( - fontSize: 10, - fontWeight: FontWeight.bold, - ); - String text; - switch (value.toInt()) { - case 0: - text = 'Jan'; - break; - case 1: - text = 'Feb'; - break; - case 2: - text = 'Mar'; - break; - case 3: - text = 'Apr'; - break; - case 4: - text = 'May'; - break; - case 5: - text = 'Jun'; - break; - case 6: - text = 'Jul'; - break; - case 7: - text = 'Aug'; - break; - case 8: - text = 'Sep'; - break; - case 9: - text = 'Oct'; - break; - case 10: - text = 'Nov'; - break; - case 11: - text = 'Dec'; - break; - default: - return Container(); - } - - return SideTitleWidget( - axisSide: meta.axisSide, - space: 4, - child: Text(text, style: style), - ); - } - - Widget leftTitleWidgets(double value, TitleMeta meta) { - const style = TextStyle(fontSize: 10); - - return SideTitleWidget( - axisSide: meta.axisSide, - child: Text( - '\$ ${value + 0.5}', - style: style, - ), - ); - } - - @override - Widget build(BuildContext context) { - return AspectRatio( - aspectRatio: 2, - child: Padding( - padding: const EdgeInsets.only( - left: 10, - right: 18, - top: 10, - bottom: 4, - ), - child: LineChart( - LineChartData( - lineTouchData: const LineTouchData(enabled: false), - lineBarsData: [ - LineChartBarData( - spots: const [ - FlSpot(0, 4), - FlSpot(1, 3.5), - FlSpot(2, 4.5), - FlSpot(3, 1), - FlSpot(4, 4), - FlSpot(5, 6), - FlSpot(6, 6.5), - FlSpot(7, 6), - FlSpot(8, 4), - FlSpot(9, 6), - FlSpot(10, 6), - FlSpot(11, 7), - ], - isCurved: true, - barWidth: 2, - color: line1Color, - dotData: const FlDotData( - show: false, - ), - ), - LineChartBarData( - spots: const [ - FlSpot(0, 7), - FlSpot(1, 3), - FlSpot(2, 4), - FlSpot(3, 2), - FlSpot(4, 3), - FlSpot(5, 4), - FlSpot(6, 5), - FlSpot(7, 3), - FlSpot(8, 1), - FlSpot(9, 8), - FlSpot(10, 1), - FlSpot(11, 3), - ], - isCurved: false, - barWidth: 2, - color: line2Color, - dotData: const FlDotData( - show: false, - ), - ), - ], - betweenBarsData: [ - BetweenBarsData( - fromIndex: 0, - toIndex: 1, - color: betweenColor, - ) - ], - minY: 0, - borderData: FlBorderData( - show: false, - ), - titlesData: FlTitlesData( - bottomTitles: AxisTitles( - sideTitles: SideTitles( - showTitles: true, - interval: 1, - getTitlesWidget: bottomTitleWidgets, - ), - ), - leftTitles: AxisTitles( - sideTitles: SideTitles( - showTitles: true, - getTitlesWidget: leftTitleWidgets, - interval: 1, - reservedSize: 36, - ), - ), - topTitles: const AxisTitles( - sideTitles: SideTitles(showTitles: false), - ), - rightTitles: const AxisTitles( - sideTitles: SideTitles(showTitles: false), - ), - ), - gridData: FlGridData( - show: true, - drawVerticalLine: false, - horizontalInterval: 1, - checkToShowHorizontalLine: (double value) { - return value == 1 || value == 6 || value == 4 || value == 5; - }, - ), - ), - ), - ), - ); - } -} diff --git a/example/lib/presentation/samples/line/line_chart_sample8.dart b/example/lib/presentation/samples/line/line_chart_sample8.dart deleted file mode 100644 index 75b629a1ce..0000000000 --- a/example/lib/presentation/samples/line/line_chart_sample8.dart +++ /dev/null @@ -1,280 +0,0 @@ -import 'dart:async'; -import 'dart:ui' as ui; - -import 'package:fl_chart_app/presentation/resources/app_resources.dart'; -import 'package:fl_chart/fl_chart.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter/services.dart' show rootBundle; -import 'package:flutter_svg/flutter_svg.dart'; - -class LineChartSample8 extends StatefulWidget { - const LineChartSample8({super.key}); - - @override - State createState() => _LineChartSample8State(); -} - -class _LineChartSample8State extends State { - List gradientColors = const [ - Color(0xffEEF3FE), - Color(0xffEEF3FE), - ]; - - bool showAvg = false; - - Future loadImage(String asset) async { - final data = await rootBundle.load(asset); - final codec = await ui.instantiateImageCodec(data.buffer.asUint8List()); - final fi = await codec.getNextFrame(); - return fi.image; - } - - Future loadSvg() async { - const rawSvg = - ''; - - final pictureInfo = - await vg.loadPicture(const SvgStringLoader(rawSvg), null); - - final sizedPicture = SizedPicture(pictureInfo.picture, 14, 14); - return sizedPicture; - } - - @override - Widget build(BuildContext context) { - return FutureBuilder( - future: loadSvg(), - builder: (BuildContext context, imageSnapshot) { - if (imageSnapshot.connectionState == ConnectionState.done) { - return Stack( - children: [ - AspectRatio( - aspectRatio: 1.70, - child: Padding( - padding: const EdgeInsets.only( - right: 18, - left: 12, - top: 24, - bottom: 12, - ), - child: LineChart( - mainData(imageSnapshot.data!), - ), - ), - ), - ], - ); - } else { - return const CircularProgressIndicator(); - } - }, - ); - } - - Widget bottomTitleWidgets(double value, TitleMeta meta) { - const style = TextStyle( - fontSize: 10, - color: AppColors.mainTextColor1, - ); - return SideTitleWidget( - axisSide: meta.axisSide, - child: Text(meta.formattedValue, style: style), - ); - } - - Widget leftTitleWidgets(double value, TitleMeta meta) { - IconData icon; - Color color; - switch (value.toInt()) { - case 0: - icon = Icons.wb_sunny; - color = AppColors.contentColorYellow; - break; - case 2: - icon = Icons.wine_bar_sharp; - color = AppColors.contentColorRed; - break; - case 4: - icon = Icons.watch_later; - color = AppColors.contentColorGreen; - break; - case 6: - icon = Icons.whatshot; - color = AppColors.contentColorOrange; - break; - default: - throw StateError('Invalid'); - } - return SideTitleWidget( - axisSide: meta.axisSide, - child: Icon( - icon, - color: color, - size: 32, - ), - ); - } - - LineChartData mainData(SizedPicture sizedPicture) { - return LineChartData( - rangeAnnotations: RangeAnnotations( - verticalRangeAnnotations: [ - VerticalRangeAnnotation( - x1: 2, - x2: 5, - color: AppColors.contentColorBlue.withOpacity(0.2), - ), - VerticalRangeAnnotation( - x1: 8, - x2: 9, - color: AppColors.contentColorBlue.withOpacity(0.2), - ), - ], - horizontalRangeAnnotations: [ - HorizontalRangeAnnotation( - y1: 2, - y2: 3, - color: AppColors.contentColorGreen.withOpacity(0.3), - ), - ], - ), - // uncomment to see ExtraLines with RangeAnnotations - extraLinesData: ExtraLinesData( -// extraLinesOnTop: true, - horizontalLines: [ - HorizontalLine( - y: 5, - color: AppColors.contentColorGreen, - strokeWidth: 2, - dashArray: [5, 10], - label: HorizontalLineLabel( - show: true, - alignment: Alignment.topRight, - padding: const EdgeInsets.only(right: 5, bottom: 5), - style: const TextStyle( - fontSize: 9, - fontWeight: FontWeight.bold, - ), - labelResolver: (line) => 'H: ${line.y}', - ), - ), - ], - verticalLines: [ - VerticalLine( - x: 5.7, - color: AppColors.contentColorBlue, - strokeWidth: 2, - dashArray: [5, 10], - label: VerticalLineLabel( - show: true, - alignment: Alignment.topRight, - padding: const EdgeInsets.only(left: 10, top: 5), - style: const TextStyle( - fontSize: 9, - fontWeight: FontWeight.bold, - ), - labelResolver: (line) => 'V: ${line.x}', - ), - ), - VerticalLine( - x: 8.5, - color: Colors.transparent, - sizedPicture: sizedPicture, - ), - VerticalLine( - x: 3.5, - color: Colors.transparent, - sizedPicture: sizedPicture, - ) - ], - ), - gridData: const FlGridData( - show: true, - drawVerticalLine: false, - drawHorizontalLine: false, - verticalInterval: 1, - ), - titlesData: FlTitlesData( - show: true, - bottomTitles: AxisTitles( - sideTitles: SideTitles( - showTitles: true, - reservedSize: 30, - getTitlesWidget: bottomTitleWidgets, - interval: 4, - ), - ), - leftTitles: AxisTitles( - drawBelowEverything: true, - sideTitles: SideTitles( - interval: 2, - showTitles: true, - getTitlesWidget: leftTitleWidgets, - reservedSize: 40, - ), - ), - rightTitles: const AxisTitles( - sideTitles: SideTitles(showTitles: false), - ), - topTitles: const AxisTitles( - sideTitles: SideTitles(showTitles: false), - ), - ), - lineTouchData: LineTouchData( - getTouchLineEnd: (data, index) => double.infinity, - getTouchedSpotIndicator: - (LineChartBarData barData, List spotIndexes) { - return spotIndexes.map((spotIndex) { - return TouchedSpotIndicatorData( - const FlLine(color: AppColors.contentColorOrange, strokeWidth: 3), - FlDotData( - getDotPainter: (spot, percent, barData, index) => - FlDotCirclePainter( - radius: 8, - color: AppColors.contentColorOrange, - ), - ), - ); - }).toList(); - }, - touchTooltipData: const LineTouchTooltipData( - tooltipBgColor: AppColors.contentColorBlue, - ), - ), - borderData: FlBorderData( - show: true, - border: Border.all( - color: AppColors.borderColor, - ), - ), - minX: 0, - maxX: 11, - minY: 0, - maxY: 6, - lineBarsData: [ - LineChartBarData( - spots: const [ - FlSpot(0, 1), - FlSpot(2, 1), - FlSpot(4.9, 5), - FlSpot(6.8, 5), - FlSpot(7.5, 3.5), - FlSpot.nullSpot, - FlSpot(7.5, 2), - FlSpot(8, 1), - FlSpot(10, 2), - FlSpot(11, 2.5), - ], - dashArray: [10, 6], - isCurved: true, - color: AppColors.contentColorRed, - barWidth: 4, - isStrokeCapRound: true, - dotData: const FlDotData( - show: false, - ), - ), - ], - ); - } -} diff --git a/example/lib/presentation/samples/line/line_chart_sample9.dart b/example/lib/presentation/samples/line/line_chart_sample9.dart deleted file mode 100644 index 3acb9c0a52..0000000000 --- a/example/lib/presentation/samples/line/line_chart_sample9.dart +++ /dev/null @@ -1,154 +0,0 @@ -import 'dart:math'; - -import 'package:fl_chart_app/presentation/resources/app_resources.dart'; -import 'package:fl_chart/fl_chart.dart'; -import 'package:flutter/material.dart'; - -// ignore: must_be_immutable -class LineChartSample9 extends StatelessWidget { - LineChartSample9({super.key}); - - final spots = List.generate(101, (i) => (i - 50) / 10) - .map((x) => FlSpot(x, cos(x))) - .toList(); - - Widget bottomTitleWidgets(double value, TitleMeta meta, double chartWidth) { - if (value % 1 != 0) { - return Container(); - } - final style = TextStyle( - color: AppColors.contentColorBlue, - fontWeight: FontWeight.bold, - fontSize: min(18, 18 * chartWidth / 300), - ); - return SideTitleWidget( - axisSide: meta.axisSide, - space: 16, - child: Text(meta.formattedValue, style: style), - ); - } - - Widget leftTitleWidgets(double value, TitleMeta meta, double chartWidth) { - final style = TextStyle( - color: AppColors.contentColorYellow, - fontWeight: FontWeight.bold, - fontSize: min(18, 18 * chartWidth / 300), - ); - return SideTitleWidget( - axisSide: meta.axisSide, - space: 16, - child: Text(meta.formattedValue, style: style), - ); - } - - @override - Widget build(BuildContext context) { - return Padding( - padding: const EdgeInsets.only( - left: 12, - bottom: 12, - right: 20, - top: 20, - ), - child: AspectRatio( - aspectRatio: 1, - child: LayoutBuilder( - builder: (context, constraints) { - return LineChart( - LineChartData( - lineTouchData: LineTouchData( - touchTooltipData: LineTouchTooltipData( - maxContentWidth: 100, - tooltipBgColor: Colors.black, - getTooltipItems: (touchedSpots) { - return touchedSpots.map((LineBarSpot touchedSpot) { - final textStyle = TextStyle( - color: touchedSpot.bar.gradient?.colors[0] ?? - touchedSpot.bar.color, - fontWeight: FontWeight.bold, - fontSize: 14, - ); - return LineTooltipItem( - '${touchedSpot.x}, ${touchedSpot.y.toStringAsFixed(2)}', - textStyle, - ); - }).toList(); - }, - ), - handleBuiltInTouches: true, - getTouchLineStart: (data, index) => 0, - ), - lineBarsData: [ - LineChartBarData( - color: AppColors.contentColorPink, - spots: spots, - isCurved: true, - isStrokeCapRound: true, - barWidth: 3, - belowBarData: BarAreaData( - show: false, - ), - dotData: const FlDotData(show: false), - ), - ], - minY: -1.5, - maxY: 1.5, - titlesData: FlTitlesData( - leftTitles: AxisTitles( - sideTitles: SideTitles( - showTitles: true, - getTitlesWidget: (value, meta) => - leftTitleWidgets(value, meta, constraints.maxWidth), - reservedSize: 56, - ), - drawBelowEverything: true, - ), - rightTitles: const AxisTitles( - sideTitles: SideTitles(showTitles: false), - ), - bottomTitles: AxisTitles( - sideTitles: SideTitles( - showTitles: true, - getTitlesWidget: (value, meta) => - bottomTitleWidgets(value, meta, constraints.maxWidth), - reservedSize: 36, - interval: 1, - ), - drawBelowEverything: true, - ), - topTitles: const AxisTitles( - sideTitles: SideTitles(showTitles: false), - ), - ), - gridData: FlGridData( - show: true, - drawHorizontalLine: true, - drawVerticalLine: true, - horizontalInterval: 1.5, - verticalInterval: 5, - checkToShowHorizontalLine: (value) { - return value.toInt() == 0; - }, - getDrawingHorizontalLine: (_) => FlLine( - color: AppColors.contentColorBlue.withOpacity(1), - dashArray: [8, 2], - strokeWidth: 0.8, - ), - getDrawingVerticalLine: (_) => FlLine( - color: AppColors.contentColorYellow.withOpacity(1), - dashArray: [8, 2], - strokeWidth: 0.8, - ), - checkToShowVerticalLine: (value) { - return value.toInt() == 0; - }, - ), - borderData: FlBorderData(show: false), - ), - ); - }, - ), - ), - ); - } -} diff --git a/example/lib/presentation/samples/pie/pie_chart_sample1.dart b/example/lib/presentation/samples/pie/pie_chart_sample1.dart deleted file mode 100644 index 957735aaa5..0000000000 --- a/example/lib/presentation/samples/pie/pie_chart_sample1.dart +++ /dev/null @@ -1,173 +0,0 @@ -import 'package:fl_chart_app/presentation/resources/app_resources.dart'; -import 'package:fl_chart_app/presentation/widgets/indicator.dart'; -import 'package:fl_chart/fl_chart.dart'; -import 'package:flutter/material.dart'; - -class PieChartSample1 extends StatefulWidget { - const PieChartSample1({super.key}); - - @override - State createState() => PieChartSample1State(); -} - -class PieChartSample1State extends State { - int touchedIndex = -1; - - @override - Widget build(BuildContext context) { - return AspectRatio( - aspectRatio: 1.3, - child: Column( - children: [ - const SizedBox( - height: 28, - ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - Indicator( - color: AppColors.contentColorBlue, - text: 'One', - isSquare: false, - size: touchedIndex == 0 ? 18 : 16, - textColor: touchedIndex == 0 - ? AppColors.mainTextColor1 - : AppColors.mainTextColor3, - ), - Indicator( - color: AppColors.contentColorYellow, - text: 'Two', - isSquare: false, - size: touchedIndex == 1 ? 18 : 16, - textColor: touchedIndex == 1 - ? AppColors.mainTextColor1 - : AppColors.mainTextColor3, - ), - Indicator( - color: AppColors.contentColorPink, - text: 'Three', - isSquare: false, - size: touchedIndex == 2 ? 18 : 16, - textColor: touchedIndex == 2 - ? AppColors.mainTextColor1 - : AppColors.mainTextColor3, - ), - Indicator( - color: AppColors.contentColorGreen, - text: 'Four', - isSquare: false, - size: touchedIndex == 3 ? 18 : 16, - textColor: touchedIndex == 3 - ? AppColors.mainTextColor1 - : AppColors.mainTextColor3, - ), - ], - ), - const SizedBox( - height: 18, - ), - Expanded( - child: AspectRatio( - aspectRatio: 1, - child: PieChart( - PieChartData( - pieTouchData: PieTouchData( - touchCallback: (FlTouchEvent event, pieTouchResponse) { - setState(() { - if (!event.isInterestedForInteractions || - pieTouchResponse == null || - pieTouchResponse.touchedSection == null) { - touchedIndex = -1; - return; - } - touchedIndex = pieTouchResponse - .touchedSection!.touchedSectionIndex; - }); - }, - ), - startDegreeOffset: 180, - borderData: FlBorderData( - show: false, - ), - sectionsSpace: 1, - centerSpaceRadius: 0, - sections: showingSections(), - ), - ), - ), - ), - ], - ), - ); - } - - List showingSections() { - return List.generate( - 4, - (i) { - final isTouched = i == touchedIndex; - const color0 = AppColors.contentColorBlue; - const color1 = AppColors.contentColorYellow; - const color2 = AppColors.contentColorPink; - const color3 = AppColors.contentColorGreen; - - switch (i) { - case 0: - return PieChartSectionData( - color: color0, - value: 25, - title: '', - radius: 80, - titlePositionPercentageOffset: 0.55, - borderSide: isTouched - ? const BorderSide( - color: AppColors.contentColorWhite, width: 6) - : BorderSide( - color: AppColors.contentColorWhite.withOpacity(0)), - ); - case 1: - return PieChartSectionData( - color: color1, - value: 25, - title: '', - radius: 65, - titlePositionPercentageOffset: 0.55, - borderSide: isTouched - ? const BorderSide( - color: AppColors.contentColorWhite, width: 6) - : BorderSide( - color: AppColors.contentColorWhite.withOpacity(0)), - ); - case 2: - return PieChartSectionData( - color: color2, - value: 25, - title: '', - radius: 60, - titlePositionPercentageOffset: 0.6, - borderSide: isTouched - ? const BorderSide( - color: AppColors.contentColorWhite, width: 6) - : BorderSide( - color: AppColors.contentColorWhite.withOpacity(0)), - ); - case 3: - return PieChartSectionData( - color: color3, - value: 25, - title: '', - radius: 70, - titlePositionPercentageOffset: 0.55, - borderSide: isTouched - ? const BorderSide( - color: AppColors.contentColorWhite, width: 6) - : BorderSide( - color: AppColors.contentColorWhite.withOpacity(0)), - ); - default: - throw Error(); - } - }, - ); - } -} diff --git a/example/lib/presentation/samples/pie/pie_chart_sample2.dart b/example/lib/presentation/samples/pie/pie_chart_sample2.dart deleted file mode 100644 index 5b0b6cc038..0000000000 --- a/example/lib/presentation/samples/pie/pie_chart_sample2.dart +++ /dev/null @@ -1,164 +0,0 @@ -import 'package:fl_chart_app/presentation/resources/app_resources.dart'; -import 'package:fl_chart/fl_chart.dart'; -import 'package:fl_chart_app/presentation/widgets/indicator.dart'; -import 'package:flutter/material.dart'; - -class PieChartSample2 extends StatefulWidget { - const PieChartSample2({super.key}); - - @override - State createState() => PieChart2State(); -} - -class PieChart2State extends State { - int touchedIndex = -1; - - @override - Widget build(BuildContext context) { - return AspectRatio( - aspectRatio: 1.3, - child: Row( - children: [ - const SizedBox( - height: 18, - ), - Expanded( - child: AspectRatio( - aspectRatio: 1, - child: PieChart( - PieChartData( - pieTouchData: PieTouchData( - touchCallback: (FlTouchEvent event, pieTouchResponse) { - setState(() { - if (!event.isInterestedForInteractions || - pieTouchResponse == null || - pieTouchResponse.touchedSection == null) { - touchedIndex = -1; - return; - } - touchedIndex = pieTouchResponse - .touchedSection!.touchedSectionIndex; - }); - }, - ), - borderData: FlBorderData( - show: false, - ), - sectionsSpace: 0, - centerSpaceRadius: 40, - sections: showingSections(), - ), - ), - ), - ), - const Column( - mainAxisAlignment: MainAxisAlignment.end, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Indicator( - color: AppColors.contentColorBlue, - text: 'First', - isSquare: true, - ), - SizedBox( - height: 4, - ), - Indicator( - color: AppColors.contentColorYellow, - text: 'Second', - isSquare: true, - ), - SizedBox( - height: 4, - ), - Indicator( - color: AppColors.contentColorPurple, - text: 'Third', - isSquare: true, - ), - SizedBox( - height: 4, - ), - Indicator( - color: AppColors.contentColorGreen, - text: 'Fourth', - isSquare: true, - ), - SizedBox( - height: 18, - ), - ], - ), - const SizedBox( - width: 28, - ), - ], - ), - ); - } - - List showingSections() { - return List.generate(4, (i) { - final isTouched = i == touchedIndex; - final fontSize = isTouched ? 25.0 : 16.0; - final radius = isTouched ? 60.0 : 50.0; - const shadows = [Shadow(color: Colors.black, blurRadius: 2)]; - switch (i) { - case 0: - return PieChartSectionData( - color: AppColors.contentColorBlue, - value: 40, - title: '40%', - radius: radius, - titleStyle: TextStyle( - fontSize: fontSize, - fontWeight: FontWeight.bold, - color: AppColors.mainTextColor1, - shadows: shadows, - ), - ); - case 1: - return PieChartSectionData( - color: AppColors.contentColorYellow, - value: 30, - title: '30%', - radius: radius, - titleStyle: TextStyle( - fontSize: fontSize, - fontWeight: FontWeight.bold, - color: AppColors.mainTextColor1, - shadows: shadows, - ), - ); - case 2: - return PieChartSectionData( - color: AppColors.contentColorPurple, - value: 15, - title: '15%', - radius: radius, - titleStyle: TextStyle( - fontSize: fontSize, - fontWeight: FontWeight.bold, - color: AppColors.mainTextColor1, - shadows: shadows, - ), - ); - case 3: - return PieChartSectionData( - color: AppColors.contentColorGreen, - value: 15, - title: '15%', - radius: radius, - titleStyle: TextStyle( - fontSize: fontSize, - fontWeight: FontWeight.bold, - color: AppColors.mainTextColor1, - shadows: shadows, - ), - ); - default: - throw Error(); - } - }); - } -} diff --git a/example/lib/presentation/samples/pie/pie_chart_sample3.dart b/example/lib/presentation/samples/pie/pie_chart_sample3.dart deleted file mode 100644 index 1492f05ebb..0000000000 --- a/example/lib/presentation/samples/pie/pie_chart_sample3.dart +++ /dev/null @@ -1,181 +0,0 @@ -import 'package:fl_chart_app/presentation/resources/app_resources.dart'; -import 'package:fl_chart/fl_chart.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_svg/flutter_svg.dart'; - -class PieChartSample3 extends StatefulWidget { - const PieChartSample3({super.key}); - - @override - State createState() => PieChartSample3State(); -} - -class PieChartSample3State extends State { - int touchedIndex = 0; - - @override - Widget build(BuildContext context) { - return AspectRatio( - aspectRatio: 1.3, - child: AspectRatio( - aspectRatio: 1, - child: PieChart( - PieChartData( - pieTouchData: PieTouchData( - touchCallback: (FlTouchEvent event, pieTouchResponse) { - setState(() { - if (!event.isInterestedForInteractions || - pieTouchResponse == null || - pieTouchResponse.touchedSection == null) { - touchedIndex = -1; - return; - } - touchedIndex = - pieTouchResponse.touchedSection!.touchedSectionIndex; - }); - }, - ), - borderData: FlBorderData( - show: false, - ), - sectionsSpace: 0, - centerSpaceRadius: 0, - sections: showingSections(), - ), - ), - ), - ); - } - - List showingSections() { - return List.generate(4, (i) { - final isTouched = i == touchedIndex; - final fontSize = isTouched ? 20.0 : 16.0; - final radius = isTouched ? 110.0 : 100.0; - final widgetSize = isTouched ? 55.0 : 40.0; - const shadows = [Shadow(color: Colors.black, blurRadius: 2)]; - - switch (i) { - case 0: - return PieChartSectionData( - color: AppColors.contentColorBlue, - value: 40, - title: '40%', - radius: radius, - titleStyle: TextStyle( - fontSize: fontSize, - fontWeight: FontWeight.bold, - color: const Color(0xffffffff), - shadows: shadows, - ), - badgeWidget: _Badge( - 'assets/icons/ophthalmology-svgrepo-com.svg', - size: widgetSize, - borderColor: AppColors.contentColorBlack, - ), - badgePositionPercentageOffset: .98, - ); - case 1: - return PieChartSectionData( - color: AppColors.contentColorYellow, - value: 30, - title: '30%', - radius: radius, - titleStyle: TextStyle( - fontSize: fontSize, - fontWeight: FontWeight.bold, - color: const Color(0xffffffff), - shadows: shadows, - ), - badgeWidget: _Badge( - 'assets/icons/librarian-svgrepo-com.svg', - size: widgetSize, - borderColor: AppColors.contentColorBlack, - ), - badgePositionPercentageOffset: .98, - ); - case 2: - return PieChartSectionData( - color: AppColors.contentColorPurple, - value: 16, - title: '16%', - radius: radius, - titleStyle: TextStyle( - fontSize: fontSize, - fontWeight: FontWeight.bold, - color: const Color(0xffffffff), - shadows: shadows, - ), - badgeWidget: _Badge( - 'assets/icons/fitness-svgrepo-com.svg', - size: widgetSize, - borderColor: AppColors.contentColorBlack, - ), - badgePositionPercentageOffset: .98, - ); - case 3: - return PieChartSectionData( - color: AppColors.contentColorGreen, - value: 15, - title: '15%', - radius: radius, - titleStyle: TextStyle( - fontSize: fontSize, - fontWeight: FontWeight.bold, - color: const Color(0xffffffff), - shadows: shadows, - ), - badgeWidget: _Badge( - 'assets/icons/worker-svgrepo-com.svg', - size: widgetSize, - borderColor: AppColors.contentColorBlack, - ), - badgePositionPercentageOffset: .98, - ); - default: - throw Exception('Oh no'); - } - }); - } -} - -class _Badge extends StatelessWidget { - const _Badge( - this.svgAsset, { - required this.size, - required this.borderColor, - }); - final String svgAsset; - final double size; - final Color borderColor; - - @override - Widget build(BuildContext context) { - return AnimatedContainer( - duration: PieChart.defaultDuration, - width: size, - height: size, - decoration: BoxDecoration( - color: Colors.white, - shape: BoxShape.circle, - border: Border.all( - color: borderColor, - width: 2, - ), - boxShadow: [ - BoxShadow( - color: Colors.black.withOpacity(.5), - offset: const Offset(3, 3), - blurRadius: 3, - ), - ], - ), - padding: EdgeInsets.all(size * .15), - child: Center( - child: SvgPicture.asset( - svgAsset, - ), - ), - ); - } -} diff --git a/example/lib/presentation/samples/radar/radar_chart_sample1.dart b/example/lib/presentation/samples/radar/radar_chart_sample1.dart deleted file mode 100644 index a30b1dc495..0000000000 --- a/example/lib/presentation/samples/radar/radar_chart_sample1.dart +++ /dev/null @@ -1,284 +0,0 @@ -import 'package:fl_chart_app/presentation/resources/app_resources.dart'; -import 'package:fl_chart_app/util/extensions/color_extensions.dart'; -import 'package:fl_chart/fl_chart.dart'; -import 'package:flutter/material.dart'; - -class RadarChartSample1 extends StatefulWidget { - RadarChartSample1({super.key}); - - final gridColor = AppColors.contentColorPurple.lighten(80); - final titleColor = AppColors.contentColorPurple.lighten(80); - final fashionColor = AppColors.contentColorRed; - final artColor = AppColors.contentColorCyan; - final boxingColor = AppColors.contentColorGreen; - final entertainmentColor = AppColors.contentColorWhite; - final offRoadColor = AppColors.contentColorYellow; - - @override - State createState() => _RadarChartSample1State(); -} - -class _RadarChartSample1State extends State { - int selectedDataSetIndex = -1; - double angleValue = 0; - bool relativeAngleMode = true; - - @override - Widget build(BuildContext context) { - return Padding( - padding: const EdgeInsets.all(16), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisAlignment: MainAxisAlignment.center, - children: [ - const Text( - 'Title configuration', - style: TextStyle( - color: AppColors.mainTextColor2, - ), - ), - Row( - children: [ - const Text( - 'Angle', - style: TextStyle( - color: AppColors.mainTextColor2, - ), - ), - Slider( - value: angleValue, - max: 360, - onChanged: (double value) => setState(() => angleValue = value), - ), - ], - ), - Row( - children: [ - Checkbox( - value: relativeAngleMode, - onChanged: (v) => setState(() => relativeAngleMode = v!), - ), - const Text('Relative'), - ], - ), - GestureDetector( - onTap: () { - setState(() { - selectedDataSetIndex = -1; - }); - }, - child: Text( - 'Categories'.toUpperCase(), - style: const TextStyle( - fontSize: 32, - fontWeight: FontWeight.w300, - color: AppColors.mainTextColor1, - ), - ), - ), - const SizedBox(height: 4), - Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: rawDataSets() - .asMap() - .map((index, value) { - final isSelected = index == selectedDataSetIndex; - return MapEntry( - index, - GestureDetector( - onTap: () { - setState(() { - selectedDataSetIndex = index; - }); - }, - child: AnimatedContainer( - duration: const Duration(milliseconds: 300), - margin: const EdgeInsets.symmetric(vertical: 2), - height: 26, - decoration: BoxDecoration( - color: isSelected - ? AppColors.pageBackground - : Colors.transparent, - borderRadius: BorderRadius.circular(46), - ), - padding: const EdgeInsets.symmetric( - vertical: 4, - horizontal: 6, - ), - child: Row( - mainAxisSize: MainAxisSize.min, - children: [ - AnimatedContainer( - duration: const Duration(milliseconds: 400), - curve: Curves.easeInToLinear, - padding: EdgeInsets.all(isSelected ? 8 : 6), - decoration: BoxDecoration( - color: value.color, - shape: BoxShape.circle, - ), - ), - const SizedBox(width: 8), - AnimatedDefaultTextStyle( - duration: const Duration(milliseconds: 300), - curve: Curves.easeInToLinear, - style: TextStyle( - color: - isSelected ? value.color : widget.gridColor, - ), - child: Text(value.title), - ), - ], - ), - ), - ), - ); - }) - .values - .toList(), - ), - AspectRatio( - aspectRatio: 1.3, - child: RadarChart( - RadarChartData( - radarTouchData: RadarTouchData( - touchCallback: (FlTouchEvent event, response) { - if (!event.isInterestedForInteractions) { - setState(() { - selectedDataSetIndex = -1; - }); - return; - } - setState(() { - selectedDataSetIndex = - response?.touchedSpot?.touchedDataSetIndex ?? -1; - }); - }, - ), - dataSets: showingDataSets(), - radarBackgroundColor: Colors.transparent, - borderData: FlBorderData(show: false), - radarBorderData: const BorderSide(color: Colors.transparent), - titlePositionPercentageOffset: 0.2, - titleTextStyle: - TextStyle(color: widget.titleColor, fontSize: 14), - getTitle: (index, angle) { - final usedAngle = - relativeAngleMode ? angle + angleValue : angleValue; - switch (index) { - case 0: - return RadarChartTitle( - text: 'Mobile or Tablet', - angle: usedAngle, - ); - case 2: - return RadarChartTitle( - text: 'Desktop', - angle: usedAngle, - ); - case 1: - return RadarChartTitle(text: 'TV', angle: usedAngle); - default: - return const RadarChartTitle(text: ''); - } - }, - tickCount: 1, - ticksTextStyle: - const TextStyle(color: Colors.transparent, fontSize: 10), - tickBorderData: const BorderSide(color: Colors.transparent), - gridBorderData: BorderSide(color: widget.gridColor, width: 2), - ), - swapAnimationDuration: const Duration(milliseconds: 400), - ), - ), - ], - ), - ); - } - - List showingDataSets() { - return rawDataSets().asMap().entries.map((entry) { - final index = entry.key; - final rawDataSet = entry.value; - - final isSelected = index == selectedDataSetIndex - ? true - : selectedDataSetIndex == -1 - ? true - : false; - - return RadarDataSet( - fillColor: isSelected - ? rawDataSet.color.withOpacity(0.2) - : rawDataSet.color.withOpacity(0.05), - borderColor: - isSelected ? rawDataSet.color : rawDataSet.color.withOpacity(0.25), - entryRadius: isSelected ? 3 : 2, - dataEntries: - rawDataSet.values.map((e) => RadarEntry(value: e)).toList(), - borderWidth: isSelected ? 2.3 : 2, - ); - }).toList(); - } - - List rawDataSets() { - return [ - RawDataSet( - title: 'Fashion', - color: widget.fashionColor, - values: [ - 300, - 50, - 250, - ], - ), - RawDataSet( - title: 'Art & Tech', - color: widget.artColor, - values: [ - 250, - 100, - 200, - ], - ), - RawDataSet( - title: 'Entertainment', - color: widget.entertainmentColor, - values: [ - 200, - 150, - 50, - ], - ), - RawDataSet( - title: 'Off-road Vehicle', - color: widget.offRoadColor, - values: [ - 150, - 200, - 150, - ], - ), - RawDataSet( - title: 'Boxing', - color: widget.boxingColor, - values: [ - 100, - 250, - 100, - ], - ), - ]; - } -} - -class RawDataSet { - RawDataSet({ - required this.title, - required this.color, - required this.values, - }); - - final String title; - final Color color; - final List values; -} diff --git a/example/lib/presentation/samples/scatter/scatter_chart_sample1.dart b/example/lib/presentation/samples/scatter/scatter_chart_sample1.dart deleted file mode 100644 index 86125b19aa..0000000000 --- a/example/lib/presentation/samples/scatter/scatter_chart_sample1.dart +++ /dev/null @@ -1,194 +0,0 @@ -import 'dart:math'; - -import 'package:fl_chart_app/presentation/resources/app_resources.dart'; -import 'package:fl_chart/fl_chart.dart'; -import 'package:flutter/material.dart'; - -class ScatterChartSample1 extends StatefulWidget { - ScatterChartSample1({super.key}); - - final blue1 = AppColors.contentColorBlue.withOpacity(0.5); - final blue2 = AppColors.contentColorBlue; - - @override - State createState() => ScatterChartSample1State(); -} - -class ScatterChartSample1State extends State { - final maxX = 50.0; - final maxY = 50.0; - final radius = 8.0; - - bool showFlutter = true; - - @override - Widget build(BuildContext context) { - return GestureDetector( - onTap: () { - setState(() { - showFlutter = !showFlutter; - }); - }, - child: AspectRatio( - aspectRatio: 1, - child: ScatterChart( - ScatterChartData( - scatterSpots: showFlutter ? flutterLogoData() : randomData(), - minX: 0, - maxX: maxX, - minY: 0, - maxY: maxY, - borderData: FlBorderData( - show: false, - ), - gridData: const FlGridData( - show: false, - ), - titlesData: const FlTitlesData( - show: false, - ), - scatterTouchData: ScatterTouchData( - enabled: false, - ), - ), - swapAnimationDuration: const Duration(milliseconds: 600), - swapAnimationCurve: Curves.fastOutSlowIn, - ), - ), - ); - } - - List flutterLogoData() { - return [ - /// section 1 - ScatterSpot(20, 14.5, color: widget.blue1, radius: radius), - ScatterSpot(22, 16.5, color: widget.blue1, radius: radius), - ScatterSpot(24, 18.5, color: widget.blue1, radius: radius), - - ScatterSpot(22, 12.5, color: widget.blue1, radius: radius), - ScatterSpot(24, 14.5, color: widget.blue1, radius: radius), - ScatterSpot(26, 16.5, color: widget.blue1, radius: radius), - - ScatterSpot(24, 10.5, color: widget.blue1, radius: radius), - ScatterSpot(26, 12.5, color: widget.blue1, radius: radius), - ScatterSpot(28, 14.5, color: widget.blue1, radius: radius), - - ScatterSpot(26, 8.5, color: widget.blue1, radius: radius), - ScatterSpot(28, 10.5, color: widget.blue1, radius: radius), - ScatterSpot(30, 12.5, color: widget.blue1, radius: radius), - - ScatterSpot(28, 6.5, color: widget.blue1, radius: radius), - ScatterSpot(30, 8.5, color: widget.blue1, radius: radius), - ScatterSpot(32, 10.5, color: widget.blue1, radius: radius), - - ScatterSpot(30, 4.5, color: widget.blue1, radius: radius), - ScatterSpot(32, 6.5, color: widget.blue1, radius: radius), - ScatterSpot(34, 8.5, color: widget.blue1, radius: radius), - - ScatterSpot(34, 4.5, color: widget.blue1, radius: radius), - ScatterSpot(36, 6.5, color: widget.blue1, radius: radius), - - ScatterSpot(38, 4.5, color: widget.blue1, radius: radius), - - /// section 2 - ScatterSpot(20, 14.5, color: widget.blue2, radius: radius), - ScatterSpot(22, 12.5, color: widget.blue2, radius: radius), - ScatterSpot(24, 10.5, color: widget.blue2, radius: radius), - - ScatterSpot(22, 16.5, color: widget.blue2, radius: radius), - ScatterSpot(24, 14.5, color: widget.blue2, radius: radius), - ScatterSpot(26, 12.5, color: widget.blue2, radius: radius), - - ScatterSpot(24, 18.5, color: widget.blue2, radius: radius), - ScatterSpot(26, 16.5, color: widget.blue2, radius: radius), - ScatterSpot(28, 14.5, color: widget.blue2, radius: radius), - - ScatterSpot(26, 20.5, color: widget.blue2, radius: radius), - ScatterSpot(28, 18.5, color: widget.blue2, radius: radius), - ScatterSpot(30, 16.5, color: widget.blue2, radius: radius), - - ScatterSpot(28, 22.5, color: widget.blue2, radius: radius), - ScatterSpot(30, 20.5, color: widget.blue2, radius: radius), - ScatterSpot(32, 18.5, color: widget.blue2, radius: radius), - - ScatterSpot(30, 24.5, color: widget.blue2, radius: radius), - ScatterSpot(32, 22.5, color: widget.blue2, radius: radius), - ScatterSpot(34, 20.5, color: widget.blue2, radius: radius), - - ScatterSpot(34, 24.5, color: widget.blue2, radius: radius), - ScatterSpot(36, 22.5, color: widget.blue2, radius: radius), - - ScatterSpot(38, 24.5, color: widget.blue2, radius: radius), - - /// section 3 - ScatterSpot(10, 25, color: widget.blue2, radius: radius), - ScatterSpot(12, 23, color: widget.blue2, radius: radius), - ScatterSpot(14, 21, color: widget.blue2, radius: radius), - - ScatterSpot(12, 27, color: widget.blue2, radius: radius), - ScatterSpot(14, 25, color: widget.blue2, radius: radius), - ScatterSpot(16, 23, color: widget.blue2, radius: radius), - - ScatterSpot(14, 29, color: widget.blue2, radius: radius), - ScatterSpot(16, 27, color: widget.blue2, radius: radius), - ScatterSpot(18, 25, color: widget.blue2, radius: radius), - - ScatterSpot(16, 31, color: widget.blue2, radius: radius), - ScatterSpot(18, 29, color: widget.blue2, radius: radius), - ScatterSpot(20, 27, color: widget.blue2, radius: radius), - - ScatterSpot(18, 33, color: widget.blue2, radius: radius), - ScatterSpot(20, 31, color: widget.blue2, radius: radius), - ScatterSpot(22, 29, color: widget.blue2, radius: radius), - - ScatterSpot(20, 35, color: widget.blue2, radius: radius), - ScatterSpot(22, 33, color: widget.blue2, radius: radius), - ScatterSpot(24, 31, color: widget.blue2, radius: radius), - - ScatterSpot(22, 37, color: widget.blue2, radius: radius), - ScatterSpot(24, 35, color: widget.blue2, radius: radius), - ScatterSpot(26, 33, color: widget.blue2, radius: radius), - - ScatterSpot(24, 39, color: widget.blue2, radius: radius), - ScatterSpot(26, 37, color: widget.blue2, radius: radius), - ScatterSpot(28, 35, color: widget.blue2, radius: radius), - - ScatterSpot(26, 41, color: widget.blue2, radius: radius), - ScatterSpot(28, 39, color: widget.blue2, radius: radius), - ScatterSpot(30, 37, color: widget.blue2, radius: radius), - - ScatterSpot(28, 43, color: widget.blue2, radius: radius), - ScatterSpot(30, 41, color: widget.blue2, radius: radius), - ScatterSpot(32, 39, color: widget.blue2, radius: radius), - - ScatterSpot(30, 45, color: widget.blue2, radius: radius), - ScatterSpot(32, 43, color: widget.blue2, radius: radius), - ScatterSpot(34, 41, color: widget.blue2, radius: radius), - - ScatterSpot(34, 45, color: widget.blue2, radius: radius), - ScatterSpot(36, 43, color: widget.blue2, radius: radius), - - ScatterSpot(38, 45, color: widget.blue2, radius: radius), - ]; - } - - List randomData() { - const blue1Count = 21; - const blue2Count = 57; - return List.generate(blue1Count + blue2Count, (i) { - Color color; - if (i < blue1Count) { - color = widget.blue1; - } else { - color = widget.blue2; - } - - return ScatterSpot( - (Random().nextDouble() * (maxX - 8)) + 4, - (Random().nextDouble() * (maxY - 8)) + 4, - color: color, - radius: (Random().nextDouble() * 16) + 4, - ); - }); - } -} diff --git a/example/lib/presentation/samples/scatter/scatter_chart_sample2.dart b/example/lib/presentation/samples/scatter/scatter_chart_sample2.dart deleted file mode 100644 index 242ce01af0..0000000000 --- a/example/lib/presentation/samples/scatter/scatter_chart_sample2.dart +++ /dev/null @@ -1,184 +0,0 @@ -import 'package:fl_chart_app/presentation/resources/app_resources.dart'; -import 'package:fl_chart/fl_chart.dart'; -import 'package:flutter/material.dart'; - -class ScatterChartSample2 extends StatefulWidget { - const ScatterChartSample2({super.key}); - - @override - State createState() => _ScatterChartSample2State(); -} - -class _ScatterChartSample2State extends State { - int touchedIndex = -1; - - Color greyColor = Colors.grey; - - List selectedSpots = []; - - @override - Widget build(BuildContext context) { - return AspectRatio( - aspectRatio: 1, - child: ScatterChart( - ScatterChartData( - scatterSpots: [ - ScatterSpot( - 4, - 4, - color: selectedSpots.contains(0) - ? AppColors.contentColorGreen - : AppColors.contentColorWhite.withOpacity(0.5), - ), - ScatterSpot( - 2, - 5, - color: selectedSpots.contains(1) - ? AppColors.contentColorYellow - : AppColors.contentColorWhite.withOpacity(0.5), - radius: 12, - ), - ScatterSpot( - 4, - 5, - color: selectedSpots.contains(2) - ? AppColors.contentColorPink - : AppColors.contentColorWhite.withOpacity(0.5), - radius: 8, - ), - ScatterSpot( - 8, - 6, - color: selectedSpots.contains(3) - ? AppColors.contentColorOrange - : AppColors.contentColorWhite.withOpacity(0.5), - radius: 20, - ), - ScatterSpot( - 5, - 7, - color: selectedSpots.contains(4) - ? AppColors.contentColorPurple - : AppColors.contentColorWhite.withOpacity(0.5), - radius: 14, - ), - ScatterSpot( - 7, - 2, - color: selectedSpots.contains(5) - ? AppColors.contentColorBlue - : AppColors.contentColorWhite.withOpacity(0.5), - radius: 18, - ), - ScatterSpot( - 3, - 2, - color: selectedSpots.contains(6) - ? AppColors.contentColorRed - : AppColors.contentColorWhite.withOpacity(0.5), - radius: 36, - ), - ScatterSpot( - 2, - 8, - color: selectedSpots.contains(7) - ? AppColors.contentColorCyan - : AppColors.contentColorWhite.withOpacity(0.5), - radius: 22, - ), - ], - minX: 0, - maxX: 10, - minY: 0, - maxY: 10, - borderData: FlBorderData( - show: false, - ), - gridData: FlGridData( - show: true, - drawHorizontalLine: true, - checkToShowHorizontalLine: (value) => true, - getDrawingHorizontalLine: (value) => const FlLine( - color: AppColors.gridLinesColor, - ), - drawVerticalLine: true, - checkToShowVerticalLine: (value) => true, - getDrawingVerticalLine: (value) => const FlLine( - color: AppColors.gridLinesColor, - ), - ), - titlesData: const FlTitlesData( - show: false, - ), - showingTooltipIndicators: selectedSpots, - scatterTouchData: ScatterTouchData( - enabled: true, - handleBuiltInTouches: false, - mouseCursorResolver: - (FlTouchEvent touchEvent, ScatterTouchResponse? response) { - return response == null || response.touchedSpot == null - ? MouseCursor.defer - : SystemMouseCursors.click; - }, - touchTooltipData: ScatterTouchTooltipData( - tooltipBgColor: Colors.black, - getTooltipItems: (ScatterSpot touchedBarSpot) { - return ScatterTooltipItem( - 'X: ', - textStyle: TextStyle( - height: 1.2, - color: Colors.grey[100], - fontStyle: FontStyle.italic, - ), - bottomMargin: 10, - children: [ - TextSpan( - text: '${touchedBarSpot.x.toInt()} \n', - style: const TextStyle( - color: Colors.white, - fontStyle: FontStyle.normal, - fontWeight: FontWeight.bold, - ), - ), - TextSpan( - text: 'Y: ', - style: TextStyle( - height: 1.2, - color: Colors.grey[100], - fontStyle: FontStyle.italic, - ), - ), - TextSpan( - text: touchedBarSpot.y.toInt().toString(), - style: const TextStyle( - color: Colors.white, - fontStyle: FontStyle.normal, - fontWeight: FontWeight.bold, - ), - ), - ], - ); - }, - ), - touchCallback: - (FlTouchEvent event, ScatterTouchResponse? touchResponse) { - if (touchResponse == null || touchResponse.touchedSpot == null) { - return; - } - if (event is FlTapUpEvent) { - final sectionIndex = touchResponse.touchedSpot!.spotIndex; - setState(() { - if (selectedSpots.contains(sectionIndex)) { - selectedSpots.remove(sectionIndex); - } else { - selectedSpots.add(sectionIndex); - } - }); - } - }, - ), - ), - ), - ); - } -} diff --git a/example/lib/presentation/widgets/chart_holder.dart b/example/lib/presentation/widgets/chart_holder.dart deleted file mode 100644 index 3428d08381..0000000000 --- a/example/lib/presentation/widgets/chart_holder.dart +++ /dev/null @@ -1,54 +0,0 @@ -import 'package:fl_chart_app/presentation/resources/app_resources.dart'; -import 'package:fl_chart_app/presentation/samples/chart_sample.dart'; -import 'package:fl_chart_app/util/app_utils.dart'; -import 'package:flutter/material.dart'; - -class ChartHolder extends StatelessWidget { - final ChartSample chartSample; - - const ChartHolder({ - Key? key, - required this.chartSample, - }) : super(key: key); - - @override - Widget build(BuildContext context) { - return Column( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.stretch, - children: [ - Row( - children: [ - const SizedBox(width: 6), - Text( - chartSample.name, - style: const TextStyle( - color: AppColors.primary, - fontSize: 18, - fontWeight: FontWeight.bold, - ), - ), - Expanded(child: Container()), - IconButton( - onPressed: () => AppUtils().tryToLaunchUrl(chartSample.url), - icon: const Icon( - Icons.code, - color: AppColors.primary, - ), - tooltip: 'Source code', - ), - ], - ), - const SizedBox(height: 2), - Container( - decoration: const BoxDecoration( - color: AppColors.itemsBackground, - borderRadius: - BorderRadius.all(Radius.circular(AppDimens.defaultRadius)), - ), - child: chartSample.builder(context), - ), - ], - ); - } -} diff --git a/example/lib/presentation/widgets/indicator.dart b/example/lib/presentation/widgets/indicator.dart deleted file mode 100644 index 4a8ae9fec8..0000000000 --- a/example/lib/presentation/widgets/indicator.dart +++ /dev/null @@ -1,44 +0,0 @@ -import 'package:flutter/material.dart'; - -class Indicator extends StatelessWidget { - const Indicator({ - super.key, - required this.color, - required this.text, - required this.isSquare, - this.size = 16, - this.textColor, - }); - final Color color; - final String text; - final bool isSquare; - final double size; - final Color? textColor; - - @override - Widget build(BuildContext context) { - return Row( - children: [ - Container( - width: size, - height: size, - decoration: BoxDecoration( - shape: isSquare ? BoxShape.rectangle : BoxShape.circle, - color: color, - ), - ), - const SizedBox( - width: 4, - ), - Text( - text, - style: TextStyle( - fontSize: 16, - fontWeight: FontWeight.bold, - color: textColor, - ), - ) - ], - ); - } -} diff --git a/example/lib/presentation/widgets/legend_widget.dart b/example/lib/presentation/widgets/legend_widget.dart deleted file mode 100644 index fcc5c9e56c..0000000000 --- a/example/lib/presentation/widgets/legend_widget.dart +++ /dev/null @@ -1,65 +0,0 @@ -import 'package:flutter/material.dart'; - -class LegendWidget extends StatelessWidget { - const LegendWidget({ - super.key, - required this.name, - required this.color, - }); - final String name; - final Color color; - - @override - Widget build(BuildContext context) { - return Row( - mainAxisSize: MainAxisSize.min, - children: [ - Container( - width: 10, - height: 10, - decoration: BoxDecoration( - shape: BoxShape.circle, - color: color, - ), - ), - const SizedBox(width: 6), - Text( - name, - style: const TextStyle( - color: Color(0xff757391), - fontSize: 12, - ), - ), - ], - ); - } -} - -class LegendsListWidget extends StatelessWidget { - const LegendsListWidget({ - super.key, - required this.legends, - }); - final List legends; - - @override - Widget build(BuildContext context) { - return Wrap( - spacing: 16, - children: legends - .map( - (e) => LegendWidget( - name: e.name, - color: e.color, - ), - ) - .toList(), - ); - } -} - -class Legend { - Legend(this.name, this.color); - final String name; - final Color color; -} diff --git a/example/lib/urls.dart b/example/lib/urls.dart deleted file mode 100644 index c1af6f5476..0000000000 --- a/example/lib/urls.dart +++ /dev/null @@ -1,21 +0,0 @@ -import 'package:fl_chart_app/util/app_helper.dart'; - -class Urls { - static const flChartUrl = 'https://flchart.dev'; - static const flChartGithubUrl = 'https://github.com/imaNNeo/fl_chart'; - - static String get aboutUrl => '$flChartUrl/about'; - - static String getChartSourceCodeUrl(ChartType chartType, int sampleNumber) { - final chartDir = chartType.name.toLowerCase(); - return 'https://github.com/imaNNeo/fl_chart/blob/master/example/lib/presentation/samples/$chartDir/${chartDir}_chart_sample$sampleNumber.dart'; - } - - static String getChartDocumentationUrl(ChartType chartType) { - final chartDir = chartType.name.toLowerCase(); - return 'https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/${chartDir}_chart.md'; - } - - static String getVersionReleaseUrl(String version) => - '$flChartGithubUrl/releases/tag/$version'; -} diff --git a/example/lib/util/app_helper.dart b/example/lib/util/app_helper.dart deleted file mode 100644 index 38c5ac882b..0000000000 --- a/example/lib/util/app_helper.dart +++ /dev/null @@ -1,20 +0,0 @@ -import 'package:fl_chart_app/presentation/resources/app_resources.dart'; -import 'package:fl_chart_app/urls.dart'; - -enum ChartType { line, bar, pie, scatter, radar } - -extension ChartTypeExtension on ChartType { - String get displayName => '$simpleName Chart'; - - String get simpleName => switch (this) { - ChartType.line => 'Line', - ChartType.bar => 'Bar', - ChartType.pie => 'Pie', - ChartType.scatter => 'Scatter', - ChartType.radar => 'Radar', - }; - - String get documentationUrl => Urls.getChartDocumentationUrl(this); - - String get assetIcon => AppAssets.getChartIcon(this); -} diff --git a/example/lib/util/app_utils.dart b/example/lib/util/app_utils.dart deleted file mode 100644 index 51e2095039..0000000000 --- a/example/lib/util/app_utils.dart +++ /dev/null @@ -1,28 +0,0 @@ -import 'dart:math' as math; - -import 'package:url_launcher/url_launcher.dart'; - -class AppUtils { - factory AppUtils() { - return _singleton; - } - - AppUtils._internal(); - static final AppUtils _singleton = AppUtils._internal(); - - double degreeToRadian(double degree) { - return degree * math.pi / 180; - } - - double radianToDegree(double radian) { - return radian * 180 / math.pi; - } - - Future tryToLaunchUrl(String url) async { - final uri = Uri.parse(url); - if (await canLaunchUrl(uri)) { - return await launchUrl(uri); - } - return false; - } -} diff --git a/example/lib/util/device_info.dart b/example/lib/util/device_info.dart deleted file mode 100644 index 169aca0e98..0000000000 --- a/example/lib/util/device_info.dart +++ /dev/null @@ -1,46 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/foundation.dart'; -import 'package:universal_platform/universal_platform.dart'; - -enum FormFactorType { monitor, smallPhone, largePhone, tablet } - -// Copied from https://github.com/gskinnerTeam/flutter-folio/blob/master/lib/_utils/device_info.dart -class DeviceOS { - // Syntax sugar, proxy the UniversalPlatform methods so our views can reference a single class - static bool isIOS = UniversalPlatform.isIOS; - static bool isAndroid = UniversalPlatform.isAndroid; - static bool isMacOS = UniversalPlatform.isMacOS; - static bool isLinux = UniversalPlatform.isLinux; - static bool isWindows = UniversalPlatform.isWindows; - - // Higher level device class abstractions (more syntax sugar for the views) - static bool isWeb = kIsWeb; - static bool get isDesktop => isWindows || isMacOS || isLinux; - static bool get isMobile => isAndroid || isIOS; - static bool get isDesktopOrWeb => isDesktop || isWeb; - static bool get isMobileOrWeb => isMobile || isWeb; -} - -class DeviceScreen { - // Get the device form factor as best we can. - // Otherwise we will use the screen size to determine which class we fall into. - static FormFactorType get(BuildContext context) { - var shortestSide = MediaQuery.of(context).size.shortestSide; - if (shortestSide <= 300) return FormFactorType.smallPhone; - if (shortestSide <= 600) return FormFactorType.largePhone; - if (shortestSide <= 900) return FormFactorType.tablet; - return FormFactorType.monitor; - } - - // Shortcuts for various mobile device types - static bool isPhone(BuildContext context) => - isSmallPhone(context) || isLargePhone(context); - static bool isTablet(BuildContext context) => - get(context) == FormFactorType.tablet; - static bool isMonitor(BuildContext context) => - get(context) == FormFactorType.monitor; - static bool isSmallPhone(BuildContext context) => - get(context) == FormFactorType.smallPhone; - static bool isLargePhone(BuildContext context) => - get(context) == FormFactorType.largePhone; -} diff --git a/example/lib/util/extensions/color_extensions.dart b/example/lib/util/extensions/color_extensions.dart deleted file mode 100644 index 123356d594..0000000000 --- a/example/lib/util/extensions/color_extensions.dart +++ /dev/null @@ -1,34 +0,0 @@ -import 'dart:ui'; - -extension ColorExtension on Color { - /// Convert the color to a darken color based on the [percent] - Color darken([int percent = 40]) { - assert(1 <= percent && percent <= 100); - final value = 1 - percent / 100; - return Color.fromARGB( - alpha, - (red * value).round(), - (green * value).round(), - (blue * value).round(), - ); - } - - Color lighten([int percent = 40]) { - assert(1 <= percent && percent <= 100); - final value = percent / 100; - return Color.fromARGB( - alpha, - (red + ((255 - red) * value)).round(), - (green + ((255 - green) * value)).round(), - (blue + ((255 - blue) * value)).round(), - ); - } - - Color avg(Color other) { - final red = (this.red + other.red) ~/ 2; - final green = (this.green + other.green) ~/ 2; - final blue = (this.blue + other.blue) ~/ 2; - final alpha = (this.alpha + other.alpha) ~/ 2; - return Color.fromARGB(alpha, red, green, blue); - } -} diff --git a/example/lib/util/extensions/iterable_extensions.dart b/example/lib/util/extensions/iterable_extensions.dart deleted file mode 100644 index fe4598fef5..0000000000 --- a/example/lib/util/extensions/iterable_extensions.dart +++ /dev/null @@ -1,3 +0,0 @@ -extension IterableToMapExtension on Iterable> { - Map get asMap => Map.fromEntries(this); -} diff --git a/example/lib/util/extensions/list_extensions.dart b/example/lib/util/extensions/list_extensions.dart deleted file mode 100644 index 00732987ce..0000000000 --- a/example/lib/util/extensions/list_extensions.dart +++ /dev/null @@ -1,3 +0,0 @@ -extension ListToMapExtension on List> { - Map get asMap => Map.fromEntries(this); -} diff --git a/example/linux/.gitignore b/example/linux/.gitignore deleted file mode 100644 index d3896c9844..0000000000 --- a/example/linux/.gitignore +++ /dev/null @@ -1 +0,0 @@ -flutter/ephemeral diff --git a/example/linux/CMakeLists.txt b/example/linux/CMakeLists.txt deleted file mode 100644 index 49b2e31018..0000000000 --- a/example/linux/CMakeLists.txt +++ /dev/null @@ -1,138 +0,0 @@ -# Project-level configuration. -cmake_minimum_required(VERSION 3.10) -project(runner LANGUAGES CXX) - -# The name of the executable created for the application. Change this to change -# the on-disk name of your application. -set(BINARY_NAME "FL Chart App") -# The unique GTK application identifier for this application. See: -# https://wiki.gnome.org/HowDoI/ChooseApplicationID -set(APPLICATION_ID "dev.flchart.app") - -# Explicitly opt in to modern CMake behaviors to avoid warnings with recent -# versions of CMake. -cmake_policy(SET CMP0063 NEW) - -# Load bundled libraries from the lib/ directory relative to the binary. -set(CMAKE_INSTALL_RPATH "$ORIGIN/lib") - -# Root filesystem for cross-building. -if(FLUTTER_TARGET_PLATFORM_SYSROOT) - set(CMAKE_SYSROOT ${FLUTTER_TARGET_PLATFORM_SYSROOT}) - set(CMAKE_FIND_ROOT_PATH ${CMAKE_SYSROOT}) - set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) - set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) - set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) - set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) -endif() - -# Define build configuration options. -if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) - set(CMAKE_BUILD_TYPE "Debug" CACHE - STRING "Flutter build mode" FORCE) - set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS - "Debug" "Profile" "Release") -endif() - -# Compilation settings that should be applied to most targets. -# -# Be cautious about adding new options here, as plugins use this function by -# default. In most cases, you should add new options to specific targets instead -# of modifying this function. -function(APPLY_STANDARD_SETTINGS TARGET) - target_compile_features(${TARGET} PUBLIC cxx_std_14) - target_compile_options(${TARGET} PRIVATE -Wall -Werror) - target_compile_options(${TARGET} PRIVATE "$<$>:-O3>") - target_compile_definitions(${TARGET} PRIVATE "$<$>:NDEBUG>") -endfunction() - -# Flutter library and tool build rules. -set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") -add_subdirectory(${FLUTTER_MANAGED_DIR}) - -# System-level dependencies. -find_package(PkgConfig REQUIRED) -pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) - -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) - -# Run the Flutter tool portions of the build. This must not be removed. -add_dependencies(${BINARY_NAME} flutter_assemble) - -# Only the install-generated bundle's copy of the executable will launch -# correctly, since the resources must in the right relative locations. To avoid -# people trying to run the unbundled copy, put it in a subdirectory instead of -# the default top-level location. -set_target_properties(${BINARY_NAME} - PROPERTIES - RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/intermediates_do_not_run" -) - -# Generated plugin build rules, which manage building the plugins and adding -# them to the application. -include(flutter/generated_plugins.cmake) - - -# === Installation === -# By default, "installing" just makes a relocatable bundle in the build -# directory. -set(BUILD_BUNDLE_DIR "${PROJECT_BINARY_DIR}/bundle") -if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) - set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) -endif() - -# Start with a clean build bundle directory every time. -install(CODE " - file(REMOVE_RECURSE \"${BUILD_BUNDLE_DIR}/\") - " COMPONENT Runtime) - -set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") -set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib") - -install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" - COMPONENT Runtime) - -install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" - COMPONENT Runtime) - -install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" - COMPONENT Runtime) - -foreach(bundled_library ${PLUGIN_BUNDLED_LIBRARIES}) - install(FILES "${bundled_library}" - DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" - COMPONENT Runtime) -endforeach(bundled_library) - -# Fully re-copy the assets directory on each build to avoid having stale files -# from a previous install. -set(FLUTTER_ASSET_DIR_NAME "flutter_assets") -install(CODE " - file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") - " COMPONENT Runtime) -install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" - DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) - -# Install the AOT library on non-Debug builds only. -if(NOT CMAKE_BUILD_TYPE MATCHES "Debug") - install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" - COMPONENT Runtime) -endif() diff --git a/example/linux/flutter/CMakeLists.txt b/example/linux/flutter/CMakeLists.txt deleted file mode 100644 index d5bd01648a..0000000000 --- a/example/linux/flutter/CMakeLists.txt +++ /dev/null @@ -1,88 +0,0 @@ -# This file controls Flutter-level build steps. It should not be edited. -cmake_minimum_required(VERSION 3.10) - -set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") - -# Configuration provided via flutter tool. -include(${EPHEMERAL_DIR}/generated_config.cmake) - -# TODO: Move the rest of this into files in ephemeral. See -# https://github.com/flutter/flutter/issues/57146. - -# Serves the same purpose as list(TRANSFORM ... PREPEND ...), -# which isn't available in 3.10. -function(list_prepend LIST_NAME PREFIX) - set(NEW_LIST "") - foreach(element ${${LIST_NAME}}) - list(APPEND NEW_LIST "${PREFIX}${element}") - endforeach(element) - set(${LIST_NAME} "${NEW_LIST}" PARENT_SCOPE) -endfunction() - -# === Flutter Library === -# System-level dependencies. -find_package(PkgConfig REQUIRED) -pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -pkg_check_modules(GLIB REQUIRED IMPORTED_TARGET glib-2.0) -pkg_check_modules(GIO REQUIRED IMPORTED_TARGET gio-2.0) - -set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/libflutter_linux_gtk.so") - -# Published to parent scope for install step. -set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) -set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) -set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) -set(AOT_LIBRARY "${PROJECT_DIR}/build/lib/libapp.so" PARENT_SCOPE) - -list(APPEND FLUTTER_LIBRARY_HEADERS - "fl_basic_message_channel.h" - "fl_binary_codec.h" - "fl_binary_messenger.h" - "fl_dart_project.h" - "fl_engine.h" - "fl_json_message_codec.h" - "fl_json_method_codec.h" - "fl_message_codec.h" - "fl_method_call.h" - "fl_method_channel.h" - "fl_method_codec.h" - "fl_method_response.h" - "fl_plugin_registrar.h" - "fl_plugin_registry.h" - "fl_standard_message_codec.h" - "fl_standard_method_codec.h" - "fl_string_codec.h" - "fl_value.h" - "fl_view.h" - "flutter_linux.h" -) -list_prepend(FLUTTER_LIBRARY_HEADERS "${EPHEMERAL_DIR}/flutter_linux/") -add_library(flutter INTERFACE) -target_include_directories(flutter INTERFACE - "${EPHEMERAL_DIR}" -) -target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}") -target_link_libraries(flutter INTERFACE - PkgConfig::GTK - PkgConfig::GLIB - PkgConfig::GIO -) -add_dependencies(flutter flutter_assemble) - -# === Flutter tool backend === -# _phony_ is a non-existent file to force this command to run every time, -# since currently there's no way to get a full input/output list from the -# flutter tool. -add_custom_command( - OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} - ${CMAKE_CURRENT_BINARY_DIR}/_phony_ - COMMAND ${CMAKE_COMMAND} -E env - ${FLUTTER_TOOL_ENVIRONMENT} - "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.sh" - ${FLUTTER_TARGET_PLATFORM} ${CMAKE_BUILD_TYPE} - VERBATIM -) -add_custom_target(flutter_assemble DEPENDS - "${FLUTTER_LIBRARY}" - ${FLUTTER_LIBRARY_HEADERS} -) diff --git a/example/linux/flutter/generated_plugin_registrant.cc b/example/linux/flutter/generated_plugin_registrant.cc deleted file mode 100644 index f6f23bfe97..0000000000 --- a/example/linux/flutter/generated_plugin_registrant.cc +++ /dev/null @@ -1,15 +0,0 @@ -// -// Generated file. Do not edit. -// - -// clang-format off - -#include "generated_plugin_registrant.h" - -#include - -void fl_register_plugins(FlPluginRegistry* registry) { - g_autoptr(FlPluginRegistrar) url_launcher_linux_registrar = - fl_plugin_registry_get_registrar_for_plugin(registry, "UrlLauncherPlugin"); - url_launcher_plugin_register_with_registrar(url_launcher_linux_registrar); -} diff --git a/example/linux/flutter/generated_plugin_registrant.h b/example/linux/flutter/generated_plugin_registrant.h deleted file mode 100644 index e0f0a47bc0..0000000000 --- a/example/linux/flutter/generated_plugin_registrant.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// Generated file. Do not edit. -// - -// clang-format off - -#ifndef GENERATED_PLUGIN_REGISTRANT_ -#define GENERATED_PLUGIN_REGISTRANT_ - -#include - -// Registers Flutter plugins. -void fl_register_plugins(FlPluginRegistry* registry); - -#endif // GENERATED_PLUGIN_REGISTRANT_ diff --git a/example/linux/flutter/generated_plugins.cmake b/example/linux/flutter/generated_plugins.cmake deleted file mode 100644 index f16b4c3421..0000000000 --- a/example/linux/flutter/generated_plugins.cmake +++ /dev/null @@ -1,24 +0,0 @@ -# -# Generated file, do not edit. -# - -list(APPEND FLUTTER_PLUGIN_LIST - url_launcher_linux -) - -list(APPEND FLUTTER_FFI_PLUGIN_LIST -) - -set(PLUGIN_BUNDLED_LIBRARIES) - -foreach(plugin ${FLUTTER_PLUGIN_LIST}) - add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/linux plugins/${plugin}) - target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) - list(APPEND PLUGIN_BUNDLED_LIBRARIES $) - list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) -endforeach(plugin) - -foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) - add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/linux plugins/${ffi_plugin}) - list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) -endforeach(ffi_plugin) diff --git a/example/linux/main.cc b/example/linux/main.cc deleted file mode 100644 index e7c5c54370..0000000000 --- a/example/linux/main.cc +++ /dev/null @@ -1,6 +0,0 @@ -#include "my_application.h" - -int main(int argc, char** argv) { - g_autoptr(MyApplication) app = my_application_new(); - return g_application_run(G_APPLICATION(app), argc, argv); -} diff --git a/example/linux/my_application.cc b/example/linux/my_application.cc deleted file mode 100644 index 235cbbb0f3..0000000000 --- a/example/linux/my_application.cc +++ /dev/null @@ -1,104 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "FL Chart App"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "FL Chart App"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/example/linux/my_application.h b/example/linux/my_application.h deleted file mode 100644 index 72271d5e41..0000000000 --- a/example/linux/my_application.h +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef FLUTTER_MY_APPLICATION_H_ -#define FLUTTER_MY_APPLICATION_H_ - -#include - -G_DECLARE_FINAL_TYPE(MyApplication, my_application, MY, APPLICATION, - GtkApplication) - -/** - * my_application_new: - * - * Creates a new Flutter-based application. - * - * Returns: a new #MyApplication. - */ -MyApplication* my_application_new(); - -#endif // FLUTTER_MY_APPLICATION_H_ diff --git a/example/macos/.gitignore b/example/macos/.gitignore deleted file mode 100644 index 746adbb6b9..0000000000 --- a/example/macos/.gitignore +++ /dev/null @@ -1,7 +0,0 @@ -# Flutter-related -**/Flutter/ephemeral/ -**/Pods/ - -# Xcode-related -**/dgph -**/xcuserdata/ diff --git a/example/macos/Flutter/Flutter-Debug.xcconfig b/example/macos/Flutter/Flutter-Debug.xcconfig deleted file mode 100644 index 4b81f9b2d2..0000000000 --- a/example/macos/Flutter/Flutter-Debug.xcconfig +++ /dev/null @@ -1,2 +0,0 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" -#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/example/macos/Flutter/Flutter-Release.xcconfig b/example/macos/Flutter/Flutter-Release.xcconfig deleted file mode 100644 index 5caa9d1579..0000000000 --- a/example/macos/Flutter/Flutter-Release.xcconfig +++ /dev/null @@ -1,2 +0,0 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" -#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/example/macos/Flutter/GeneratedPluginRegistrant.swift b/example/macos/Flutter/GeneratedPluginRegistrant.swift deleted file mode 100644 index 92f1781208..0000000000 --- a/example/macos/Flutter/GeneratedPluginRegistrant.swift +++ /dev/null @@ -1,16 +0,0 @@ -// -// Generated file. Do not edit. -// - -import FlutterMacOS -import Foundation - -import package_info_plus -import path_provider_foundation -import url_launcher_macos - -func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { - FPPPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FPPPackageInfoPlusPlugin")) - PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) - UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin")) -} diff --git a/example/macos/Podfile b/example/macos/Podfile deleted file mode 100644 index 049abe2954..0000000000 --- a/example/macos/Podfile +++ /dev/null @@ -1,40 +0,0 @@ -platform :osx, '10.14' - -# CocoaPods analytics sends network stats synchronously affecting flutter build latency. -ENV['COCOAPODS_DISABLE_STATS'] = 'true' - -project 'Runner', { - 'Debug' => :debug, - 'Profile' => :release, - 'Release' => :release, -} - -def flutter_root - generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'ephemeral', 'Flutter-Generated.xcconfig'), __FILE__) - unless File.exist?(generated_xcode_build_settings_path) - raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure \"flutter pub get\" is executed first" - end - - File.foreach(generated_xcode_build_settings_path) do |line| - matches = line.match(/FLUTTER_ROOT\=(.*)/) - return matches[1].strip if matches - end - raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Flutter-Generated.xcconfig, then run \"flutter pub get\"" -end - -require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) - -flutter_macos_podfile_setup - -target 'Runner' do - use_frameworks! - use_modular_headers! - - flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) -end - -post_install do |installer| - installer.pods_project.targets.each do |target| - flutter_additional_macos_build_settings(target) - end -end diff --git a/example/macos/Podfile.lock b/example/macos/Podfile.lock deleted file mode 100644 index 42e492b507..0000000000 --- a/example/macos/Podfile.lock +++ /dev/null @@ -1,35 +0,0 @@ -PODS: - - FlutterMacOS (1.0.0) - - package_info_plus (0.0.1): - - FlutterMacOS - - path_provider_foundation (0.0.1): - - Flutter - - FlutterMacOS - - url_launcher_macos (0.0.1): - - FlutterMacOS - -DEPENDENCIES: - - FlutterMacOS (from `Flutter/ephemeral`) - - package_info_plus (from `Flutter/ephemeral/.symlinks/plugins/package_info_plus/macos`) - - path_provider_foundation (from `Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin`) - - url_launcher_macos (from `Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos`) - -EXTERNAL SOURCES: - FlutterMacOS: - :path: Flutter/ephemeral - package_info_plus: - :path: Flutter/ephemeral/.symlinks/plugins/package_info_plus/macos - path_provider_foundation: - :path: Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin - url_launcher_macos: - :path: Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos - -SPEC CHECKSUMS: - FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24 - package_info_plus: 02d7a575e80f194102bef286361c6c326e4c29ce - path_provider_foundation: 29f094ae23ebbca9d3d0cec13889cd9060c0e943 - url_launcher_macos: d2691c7dd33ed713bf3544850a623080ec693d95 - -PODFILE CHECKSUM: 353c8bcc5d5b0994e508d035b5431cfe18c1dea7 - -COCOAPODS: 1.14.3 diff --git a/example/macos/Runner.xcodeproj/project.pbxproj b/example/macos/Runner.xcodeproj/project.pbxproj deleted file mode 100644 index 9b6f9c6b6e..0000000000 --- a/example/macos/Runner.xcodeproj/project.pbxproj +++ /dev/null @@ -1,633 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 54; - objects = { - -/* Begin PBXAggregateTarget section */ - 33CC111A2044C6BA0003C045 /* Flutter Assemble */ = { - isa = PBXAggregateTarget; - buildConfigurationList = 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */; - buildPhases = ( - 33CC111E2044C6BF0003C045 /* ShellScript */, - ); - dependencies = ( - ); - name = "Flutter Assemble"; - productName = FLX; - }; -/* End PBXAggregateTarget section */ - -/* Begin PBXBuildFile section */ - 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; - 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; - 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; - 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; - 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - CD3C0E2CB86F97227A57A462 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0A6D7D2B0395281ED83347AF /* Pods_Runner.framework */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 33CC10E52044A3C60003C045 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 33CC111A2044C6BA0003C045; - remoteInfo = FLX; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXCopyFilesBuildPhase section */ - 33CC110E2044A8840003C045 /* Bundle Framework */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 10; - files = ( - ); - name = "Bundle Framework"; - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXCopyFilesBuildPhase section */ - -/* Begin PBXFileReference section */ - 0A6D7D2B0395281ED83347AF /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 290F1FF0B02A72A883051281 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; - 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; - 33CC10ED2044A3C60003C045 /* fl_chart.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = fl_chart.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; - 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; - 33CC10F72044A3C60003C045 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = Runner/Info.plist; sourceTree = ""; }; - 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainFlutterWindow.swift; sourceTree = ""; }; - 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; }; - 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; }; - 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; }; - 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; - 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; - 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 4FD09C27857801C704F06757 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - A0C43ED3CC8F9FE13408EE45 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 33CC10EA2044A3C60003C045 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - CD3C0E2CB86F97227A57A462 /* Pods_Runner.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 33BA886A226E78AF003329D5 /* Configs */ = { - isa = PBXGroup; - children = ( - 33E5194F232828860026EE4D /* AppInfo.xcconfig */, - 9740EEB21CF90195004384FC /* Debug.xcconfig */, - 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, - 333000ED22D3DE5D00554162 /* Warnings.xcconfig */, - ); - path = Configs; - sourceTree = ""; - }; - 33CC10E42044A3C60003C045 = { - isa = PBXGroup; - children = ( - 33FAB671232836740065AC1E /* Runner */, - 33CEB47122A05771004F2AC0 /* Flutter */, - 33CC10EE2044A3C60003C045 /* Products */, - D73912EC22F37F3D000D13A0 /* Frameworks */, - F4A78FA3CEF98654E14A7A43 /* Pods */, - ); - sourceTree = ""; - }; - 33CC10EE2044A3C60003C045 /* Products */ = { - isa = PBXGroup; - children = ( - 33CC10ED2044A3C60003C045 /* fl_chart.app */, - ); - name = Products; - sourceTree = ""; - }; - 33CC11242044D66E0003C045 /* Resources */ = { - isa = PBXGroup; - children = ( - 33CC10F22044A3C60003C045 /* Assets.xcassets */, - 33CC10F42044A3C60003C045 /* MainMenu.xib */, - 33CC10F72044A3C60003C045 /* Info.plist */, - ); - name = Resources; - path = ..; - sourceTree = ""; - }; - 33CEB47122A05771004F2AC0 /* Flutter */ = { - isa = PBXGroup; - children = ( - 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */, - 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */, - 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */, - 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */, - ); - path = Flutter; - sourceTree = ""; - }; - 33FAB671232836740065AC1E /* Runner */ = { - isa = PBXGroup; - children = ( - 33CC10F02044A3C60003C045 /* AppDelegate.swift */, - 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */, - 33E51913231747F40026EE4D /* DebugProfile.entitlements */, - 33E51914231749380026EE4D /* Release.entitlements */, - 33CC11242044D66E0003C045 /* Resources */, - 33BA886A226E78AF003329D5 /* Configs */, - ); - path = Runner; - sourceTree = ""; - }; - D73912EC22F37F3D000D13A0 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 0A6D7D2B0395281ED83347AF /* Pods_Runner.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - F4A78FA3CEF98654E14A7A43 /* Pods */ = { - isa = PBXGroup; - children = ( - 290F1FF0B02A72A883051281 /* Pods-Runner.debug.xcconfig */, - 4FD09C27857801C704F06757 /* Pods-Runner.release.xcconfig */, - A0C43ED3CC8F9FE13408EE45 /* Pods-Runner.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 33CC10EC2044A3C60003C045 /* Runner */ = { - isa = PBXNativeTarget; - buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; - buildPhases = ( - 1D2964E42B7E6986BA4115FC /* [CP] Check Pods Manifest.lock */, - 33CC10E92044A3C60003C045 /* Sources */, - 33CC10EA2044A3C60003C045 /* Frameworks */, - 33CC10EB2044A3C60003C045 /* Resources */, - 33CC110E2044A8840003C045 /* Bundle Framework */, - 3399D490228B24CF009A79C7 /* ShellScript */, - 06400C1AB8DC605AC029909F /* [CP] Embed Pods Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - 33CC11202044C79F0003C045 /* PBXTargetDependency */, - ); - name = Runner; - productName = Runner; - productReference = 33CC10ED2044A3C60003C045 /* fl_chart.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 33CC10E52044A3C60003C045 /* Project object */ = { - isa = PBXProject; - attributes = { - LastSwiftUpdateCheck = 0920; - LastUpgradeCheck = 1430; - ORGANIZATIONNAME = ""; - TargetAttributes = { - 33CC10EC2044A3C60003C045 = { - CreatedOnToolsVersion = 9.2; - LastSwiftMigration = 1100; - ProvisioningStyle = Automatic; - SystemCapabilities = { - com.apple.Sandbox = { - enabled = 1; - }; - }; - }; - 33CC111A2044C6BA0003C045 = { - CreatedOnToolsVersion = 9.2; - ProvisioningStyle = Manual; - }; - }; - }; - buildConfigurationList = 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */; - compatibilityVersion = "Xcode 9.3"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = 33CC10E42044A3C60003C045; - productRefGroup = 33CC10EE2044A3C60003C045 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 33CC10EC2044A3C60003C045 /* Runner */, - 33CC111A2044C6BA0003C045 /* Flutter Assemble */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 33CC10EB2044A3C60003C045 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */, - 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXShellScriptBuildPhase section */ - 06400C1AB8DC605AC029909F /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - 1D2964E42B7E6986BA4115FC /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - 3399D490228B24CF009A79C7 /* ShellScript */ = { - isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - ); - outputFileListPaths = ( - ); - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; - }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, - ); - inputPaths = ( - Flutter/ephemeral/tripwire, - ); - outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, - ); - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; - }; -/* End PBXShellScriptBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 33CC10E92044A3C60003C045 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */, - 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */, - 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - 33CC11202044C79F0003C045 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 33CC111A2044C6BA0003C045 /* Flutter Assemble */; - targetProxy = 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin PBXVariantGroup section */ - 33CC10F42044A3C60003C045 /* MainMenu.xib */ = { - isa = PBXVariantGroup; - children = ( - 33CC10F52044A3C60003C045 /* Base */, - ); - name = MainMenu.xib; - path = Runner; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - 338D0CE9231458BD00FA5F75 /* Profile */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CODE_SIGN_IDENTITY = "-"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.14; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = macosx; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_OPTIMIZATION_LEVEL = "-O"; - }; - name = Profile; - }; - 338D0CEA231458BD00FA5F75 /* Profile */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; - CODE_SIGN_STYLE = Automatic; - COMBINE_HIDPI_IMAGES = YES; - INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - ); - PROVISIONING_PROFILE_SPECIFIER = ""; - SWIFT_VERSION = 5.0; - }; - name = Profile; - }; - 338D0CEB231458BD00FA5F75 /* Profile */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_STYLE = Manual; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = Profile; - }; - 33CC10F92044A3C60003C045 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CODE_SIGN_IDENTITY = "-"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.14; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = macosx; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - }; - name = Debug; - }; - 33CC10FA2044A3C60003C045 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CODE_SIGN_IDENTITY = "-"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.14; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = macosx; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_OPTIMIZATION_LEVEL = "-O"; - }; - name = Release; - }; - 33CC10FC2044A3C60003C045 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; - CODE_SIGN_STYLE = Automatic; - COMBINE_HIDPI_IMAGES = YES; - INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - ); - PROVISIONING_PROFILE_SPECIFIER = ""; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - }; - name = Debug; - }; - 33CC10FD2044A3C60003C045 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - CODE_SIGN_ENTITLEMENTS = Runner/Release.entitlements; - CODE_SIGN_STYLE = Automatic; - COMBINE_HIDPI_IMAGES = YES; - INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - ); - PROVISIONING_PROFILE_SPECIFIER = ""; - SWIFT_VERSION = 5.0; - }; - name = Release; - }; - 33CC111C2044C6BA0003C045 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_STYLE = Manual; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = Debug; - }; - 33CC111D2044C6BA0003C045 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_STYLE = Automatic; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 33CC10F92044A3C60003C045 /* Debug */, - 33CC10FA2044A3C60003C045 /* Release */, - 338D0CE9231458BD00FA5F75 /* Profile */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 33CC10FC2044A3C60003C045 /* Debug */, - 33CC10FD2044A3C60003C045 /* Release */, - 338D0CEA231458BD00FA5F75 /* Profile */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 33CC111C2044C6BA0003C045 /* Debug */, - 33CC111D2044C6BA0003C045 /* Release */, - 338D0CEB231458BD00FA5F75 /* Profile */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 33CC10E52044A3C60003C045 /* Project object */; -} diff --git a/example/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/example/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d981003d..0000000000 --- a/example/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEDidComputeMac32BitWarning - - - diff --git a/example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme deleted file mode 100644 index 6ff55107bb..0000000000 --- a/example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/example/macos/Runner.xcworkspace/contents.xcworkspacedata b/example/macos/Runner.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 21a3cc14c7..0000000000 --- a/example/macos/Runner.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - diff --git a/example/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/example/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d981003d..0000000000 --- a/example/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEDidComputeMac32BitWarning - - - diff --git a/example/macos/Runner/AppDelegate.swift b/example/macos/Runner/AppDelegate.swift deleted file mode 100644 index d53ef64377..0000000000 --- a/example/macos/Runner/AppDelegate.swift +++ /dev/null @@ -1,9 +0,0 @@ -import Cocoa -import FlutterMacOS - -@NSApplicationMain -class AppDelegate: FlutterAppDelegate { - override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { - return true - } -} diff --git a/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index a2ec33f19f..0000000000 --- a/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "images" : [ - { - "size" : "16x16", - "idiom" : "mac", - "filename" : "app_icon_16.png", - "scale" : "1x" - }, - { - "size" : "16x16", - "idiom" : "mac", - "filename" : "app_icon_32.png", - "scale" : "2x" - }, - { - "size" : "32x32", - "idiom" : "mac", - "filename" : "app_icon_32.png", - "scale" : "1x" - }, - { - "size" : "32x32", - "idiom" : "mac", - "filename" : "app_icon_64.png", - "scale" : "2x" - }, - { - "size" : "128x128", - "idiom" : "mac", - "filename" : "app_icon_128.png", - "scale" : "1x" - }, - { - "size" : "128x128", - "idiom" : "mac", - "filename" : "app_icon_256.png", - "scale" : "2x" - }, - { - "size" : "256x256", - "idiom" : "mac", - "filename" : "app_icon_256.png", - "scale" : "1x" - }, - { - "size" : "256x256", - "idiom" : "mac", - "filename" : "app_icon_512.png", - "scale" : "2x" - }, - { - "size" : "512x512", - "idiom" : "mac", - "filename" : "app_icon_512.png", - "scale" : "1x" - }, - { - "size" : "512x512", - "idiom" : "mac", - "filename" : "app_icon_1024.png", - "scale" : "2x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} diff --git a/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png b/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png deleted file mode 100644 index 90e443f8cd..0000000000 Binary files a/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png and /dev/null differ diff --git a/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png b/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png deleted file mode 100644 index baafe3a5cc..0000000000 Binary files a/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png and /dev/null differ diff --git a/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png b/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png deleted file mode 100644 index 3b1acbe9a0..0000000000 Binary files a/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png and /dev/null differ diff --git a/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png b/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png deleted file mode 100644 index e0931cbb8b..0000000000 Binary files a/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png and /dev/null differ diff --git a/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png b/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png deleted file mode 100644 index 29f0f089b7..0000000000 Binary files a/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png and /dev/null differ diff --git a/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png b/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png deleted file mode 100644 index e228403f7c..0000000000 Binary files a/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png and /dev/null differ diff --git a/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png b/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png deleted file mode 100644 index 89a755f367..0000000000 Binary files a/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png and /dev/null differ diff --git a/example/macos/Runner/Base.lproj/MainMenu.xib b/example/macos/Runner/Base.lproj/MainMenu.xib deleted file mode 100644 index 80e867a4e0..0000000000 --- a/example/macos/Runner/Base.lproj/MainMenu.xib +++ /dev/null @@ -1,343 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/example/macos/Runner/Configs/AppInfo.xcconfig b/example/macos/Runner/Configs/AppInfo.xcconfig deleted file mode 100644 index 485bf18fea..0000000000 --- a/example/macos/Runner/Configs/AppInfo.xcconfig +++ /dev/null @@ -1,14 +0,0 @@ -// Application-level settings for the Runner target. -// -// This may be replaced with something auto-generated from metadata (e.g., pubspec.yaml) in the -// future. If not, the values below would default to using the project name when this becomes a -// 'flutter create' template. - -// The application's name. By default this is also the title of the Flutter window. -PRODUCT_NAME = FL Chart App - -// The application's bundle identifier -PRODUCT_BUNDLE_IDENTIFIER = dev.flchart.app.exampleNew - -// The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2023 dev.flchart.app. All rights reserved. diff --git a/example/macos/Runner/Configs/Debug.xcconfig b/example/macos/Runner/Configs/Debug.xcconfig deleted file mode 100644 index 36b0fd9464..0000000000 --- a/example/macos/Runner/Configs/Debug.xcconfig +++ /dev/null @@ -1,2 +0,0 @@ -#include "../../Flutter/Flutter-Debug.xcconfig" -#include "Warnings.xcconfig" diff --git a/example/macos/Runner/Configs/Release.xcconfig b/example/macos/Runner/Configs/Release.xcconfig deleted file mode 100644 index dff4f49561..0000000000 --- a/example/macos/Runner/Configs/Release.xcconfig +++ /dev/null @@ -1,2 +0,0 @@ -#include "../../Flutter/Flutter-Release.xcconfig" -#include "Warnings.xcconfig" diff --git a/example/macos/Runner/Configs/Warnings.xcconfig b/example/macos/Runner/Configs/Warnings.xcconfig deleted file mode 100644 index 42bcbf4780..0000000000 --- a/example/macos/Runner/Configs/Warnings.xcconfig +++ /dev/null @@ -1,13 +0,0 @@ -WARNING_CFLAGS = -Wall -Wconditional-uninitialized -Wnullable-to-nonnull-conversion -Wmissing-method-return-type -Woverlength-strings -GCC_WARN_UNDECLARED_SELECTOR = YES -CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES -CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE -CLANG_WARN__DUPLICATE_METHOD_MATCH = YES -CLANG_WARN_PRAGMA_PACK = YES -CLANG_WARN_STRICT_PROTOTYPES = YES -CLANG_WARN_COMMA = YES -GCC_WARN_STRICT_SELECTOR_MATCH = YES -CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = YES -CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES -GCC_WARN_SHADOW = YES -CLANG_WARN_UNREACHABLE_CODE = YES diff --git a/example/macos/Runner/DebugProfile.entitlements b/example/macos/Runner/DebugProfile.entitlements deleted file mode 100644 index c946719a1a..0000000000 --- a/example/macos/Runner/DebugProfile.entitlements +++ /dev/null @@ -1,14 +0,0 @@ - - - - - com.apple.security.app-sandbox - - com.apple.security.cs.allow-jit - - com.apple.security.network.server - - com.apple.security.network.client - - - diff --git a/example/macos/Runner/Info.plist b/example/macos/Runner/Info.plist deleted file mode 100644 index 4789daa6a4..0000000000 --- a/example/macos/Runner/Info.plist +++ /dev/null @@ -1,32 +0,0 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIconFile - - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - $(FLUTTER_BUILD_NAME) - CFBundleVersion - $(FLUTTER_BUILD_NUMBER) - LSMinimumSystemVersion - $(MACOSX_DEPLOYMENT_TARGET) - NSHumanReadableCopyright - $(PRODUCT_COPYRIGHT) - NSMainNibFile - MainMenu - NSPrincipalClass - NSApplication - - diff --git a/example/macos/Runner/MainFlutterWindow.swift b/example/macos/Runner/MainFlutterWindow.swift deleted file mode 100644 index 2722837ec9..0000000000 --- a/example/macos/Runner/MainFlutterWindow.swift +++ /dev/null @@ -1,15 +0,0 @@ -import Cocoa -import FlutterMacOS - -class MainFlutterWindow: NSWindow { - override func awakeFromNib() { - let flutterViewController = FlutterViewController.init() - let windowFrame = self.frame - self.contentViewController = flutterViewController - self.setFrame(windowFrame, display: true) - - RegisterGeneratedPlugins(registry: flutterViewController) - - super.awakeFromNib() - } -} diff --git a/example/macos/Runner/Release.entitlements b/example/macos/Runner/Release.entitlements deleted file mode 100644 index 852fa1a472..0000000000 --- a/example/macos/Runner/Release.entitlements +++ /dev/null @@ -1,8 +0,0 @@ - - - - - com.apple.security.app-sandbox - - - diff --git a/example/pubspec.yaml b/example/pubspec.yaml deleted file mode 100644 index 29165d5657..0000000000 --- a/example/pubspec.yaml +++ /dev/null @@ -1,41 +0,0 @@ -name: fl_chart_app -description: FL Chart App is an application to demonstrate samples of the fl_chart (A Flutter package to draw charts). -publish_to: 'none' -version: 1.0.0+1 - -environment: - sdk: ^3.0.0 -dependencies: - flutter: - sdk: flutter - flutter_web_plugins: - sdk: flutter - cupertino_icons: ^1.0.6 - google_fonts: ^6.1.0 - flutter_svg: ^2.0.7 - universal_platform: ^1.0.0+1 - flutter_staggered_grid_view: ^0.7.0 - url_launcher: ^6.1.14 - go_router: ^11.1.2 - dartx: ^1.2.0 - fl_chart: - path: ../ - flutter_bloc: ^8.1.3 - package_info_plus: ^4.2.0 - equatable: ^2.0.5 - -dev_dependencies: - flutter_test: - sdk: flutter - flutter_lints: ^2.0.3 - -flutter: - uses-material-design: true - fonts: - - family: Digital - fonts: - - asset: assets/fonts/digital-7.ttf - - assets: - - assets/icons/ - - assets/fonts/ diff --git a/example/windows/.gitignore b/example/windows/.gitignore deleted file mode 100644 index d492d0d98c..0000000000 --- a/example/windows/.gitignore +++ /dev/null @@ -1,17 +0,0 @@ -flutter/ephemeral/ - -# Visual Studio user-specific files. -*.suo -*.user -*.userosscache -*.sln.docstates - -# Visual Studio build-related files. -x64/ -x86/ - -# Visual Studio cache files -# files ending in .cache can be ignored -*.[Cc]ache -# but keep track of directories ending in .cache -!*.[Cc]ache/ diff --git a/example/windows/CMakeLists.txt b/example/windows/CMakeLists.txt deleted file mode 100644 index f26c610032..0000000000 --- a/example/windows/CMakeLists.txt +++ /dev/null @@ -1,101 +0,0 @@ -# Project-level configuration. -cmake_minimum_required(VERSION 3.14) -project(fl_chart_app LANGUAGES CXX) - -# The name of the executable created for the application. Change this to change -# the on-disk name of your application. -set(BINARY_NAME "fl_chart_app") - -# Explicitly opt in to modern CMake behaviors to avoid warnings with recent -# versions of CMake. -cmake_policy(SET CMP0063 NEW) - -# Define build configuration option. -get_property(IS_MULTICONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) -if(IS_MULTICONFIG) - set(CMAKE_CONFIGURATION_TYPES "Debug;Profile;Release" - CACHE STRING "" FORCE) -else() - if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) - set(CMAKE_BUILD_TYPE "Debug" CACHE - STRING "Flutter build mode" FORCE) - set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS - "Debug" "Profile" "Release") - endif() -endif() -# Define settings for the Profile build mode. -set(CMAKE_EXE_LINKER_FLAGS_PROFILE "${CMAKE_EXE_LINKER_FLAGS_RELEASE}") -set(CMAKE_SHARED_LINKER_FLAGS_PROFILE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE}") -set(CMAKE_C_FLAGS_PROFILE "${CMAKE_C_FLAGS_RELEASE}") -set(CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_RELEASE}") - -# Use Unicode for all projects. -add_definitions(-DUNICODE -D_UNICODE) - -# Compilation settings that should be applied to most targets. -# -# Be cautious about adding new options here, as plugins use this function by -# default. In most cases, you should add new options to specific targets instead -# of modifying this function. -function(APPLY_STANDARD_SETTINGS TARGET) - target_compile_features(${TARGET} PUBLIC cxx_std_17) - target_compile_options(${TARGET} PRIVATE /W4 /WX /wd"4100") - target_compile_options(${TARGET} PRIVATE /EHsc) - target_compile_definitions(${TARGET} PRIVATE "_HAS_EXCEPTIONS=0") - target_compile_definitions(${TARGET} PRIVATE "$<$:_DEBUG>") -endfunction() - -# Flutter library and tool build rules. -set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") -add_subdirectory(${FLUTTER_MANAGED_DIR}) - -# Application build; see runner/CMakeLists.txt. -add_subdirectory("runner") - -# Generated plugin build rules, which manage building the plugins and adding -# them to the application. -include(flutter/generated_plugins.cmake) - - -# === Installation === -# Support files are copied into place next to the executable, so that it can -# run in place. This is done instead of making a separate bundle (as on Linux) -# so that building and running from within Visual Studio will work. -set(BUILD_BUNDLE_DIR "$") -# Make the "install" step default, as it's required to run. -set(CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD 1) -if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) - set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) -endif() - -set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") -set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}") - -install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" - COMPONENT Runtime) - -install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" - COMPONENT Runtime) - -install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" - COMPONENT Runtime) - -if(PLUGIN_BUNDLED_LIBRARIES) - install(FILES "${PLUGIN_BUNDLED_LIBRARIES}" - DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" - COMPONENT Runtime) -endif() - -# Fully re-copy the assets directory on each build to avoid having stale files -# from a previous install. -set(FLUTTER_ASSET_DIR_NAME "flutter_assets") -install(CODE " - file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") - " COMPONENT Runtime) -install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" - DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) - -# Install the AOT library on non-Debug builds only. -install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" - CONFIGURATIONS Profile;Release - COMPONENT Runtime) diff --git a/example/windows/flutter/CMakeLists.txt b/example/windows/flutter/CMakeLists.txt deleted file mode 100644 index 930d2071a3..0000000000 --- a/example/windows/flutter/CMakeLists.txt +++ /dev/null @@ -1,104 +0,0 @@ -# This file controls Flutter-level build steps. It should not be edited. -cmake_minimum_required(VERSION 3.14) - -set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") - -# Configuration provided via flutter tool. -include(${EPHEMERAL_DIR}/generated_config.cmake) - -# TODO: Move the rest of this into files in ephemeral. See -# https://github.com/flutter/flutter/issues/57146. -set(WRAPPER_ROOT "${EPHEMERAL_DIR}/cpp_client_wrapper") - -# === Flutter Library === -set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/flutter_windows.dll") - -# Published to parent scope for install step. -set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) -set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) -set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) -set(AOT_LIBRARY "${PROJECT_DIR}/build/windows/app.so" PARENT_SCOPE) - -list(APPEND FLUTTER_LIBRARY_HEADERS - "flutter_export.h" - "flutter_windows.h" - "flutter_messenger.h" - "flutter_plugin_registrar.h" - "flutter_texture_registrar.h" -) -list(TRANSFORM FLUTTER_LIBRARY_HEADERS PREPEND "${EPHEMERAL_DIR}/") -add_library(flutter INTERFACE) -target_include_directories(flutter INTERFACE - "${EPHEMERAL_DIR}" -) -target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}.lib") -add_dependencies(flutter flutter_assemble) - -# === Wrapper === -list(APPEND CPP_WRAPPER_SOURCES_CORE - "core_implementations.cc" - "standard_codec.cc" -) -list(TRANSFORM CPP_WRAPPER_SOURCES_CORE PREPEND "${WRAPPER_ROOT}/") -list(APPEND CPP_WRAPPER_SOURCES_PLUGIN - "plugin_registrar.cc" -) -list(TRANSFORM CPP_WRAPPER_SOURCES_PLUGIN PREPEND "${WRAPPER_ROOT}/") -list(APPEND CPP_WRAPPER_SOURCES_APP - "flutter_engine.cc" - "flutter_view_controller.cc" -) -list(TRANSFORM CPP_WRAPPER_SOURCES_APP PREPEND "${WRAPPER_ROOT}/") - -# Wrapper sources needed for a plugin. -add_library(flutter_wrapper_plugin STATIC - ${CPP_WRAPPER_SOURCES_CORE} - ${CPP_WRAPPER_SOURCES_PLUGIN} -) -apply_standard_settings(flutter_wrapper_plugin) -set_target_properties(flutter_wrapper_plugin PROPERTIES - POSITION_INDEPENDENT_CODE ON) -set_target_properties(flutter_wrapper_plugin PROPERTIES - CXX_VISIBILITY_PRESET hidden) -target_link_libraries(flutter_wrapper_plugin PUBLIC flutter) -target_include_directories(flutter_wrapper_plugin PUBLIC - "${WRAPPER_ROOT}/include" -) -add_dependencies(flutter_wrapper_plugin flutter_assemble) - -# Wrapper sources needed for the runner. -add_library(flutter_wrapper_app STATIC - ${CPP_WRAPPER_SOURCES_CORE} - ${CPP_WRAPPER_SOURCES_APP} -) -apply_standard_settings(flutter_wrapper_app) -target_link_libraries(flutter_wrapper_app PUBLIC flutter) -target_include_directories(flutter_wrapper_app PUBLIC - "${WRAPPER_ROOT}/include" -) -add_dependencies(flutter_wrapper_app flutter_assemble) - -# === Flutter tool backend === -# _phony_ is a non-existent file to force this command to run every time, -# since currently there's no way to get a full input/output list from the -# flutter tool. -set(PHONY_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/_phony_") -set_source_files_properties("${PHONY_OUTPUT}" PROPERTIES SYMBOLIC TRUE) -add_custom_command( - OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} - ${CPP_WRAPPER_SOURCES_CORE} ${CPP_WRAPPER_SOURCES_PLUGIN} - ${CPP_WRAPPER_SOURCES_APP} - ${PHONY_OUTPUT} - COMMAND ${CMAKE_COMMAND} -E env - ${FLUTTER_TOOL_ENVIRONMENT} - "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.bat" - windows-x64 $ - VERBATIM -) -add_custom_target(flutter_assemble DEPENDS - "${FLUTTER_LIBRARY}" - ${FLUTTER_LIBRARY_HEADERS} - ${CPP_WRAPPER_SOURCES_CORE} - ${CPP_WRAPPER_SOURCES_PLUGIN} - ${CPP_WRAPPER_SOURCES_APP} -) diff --git a/example/windows/flutter/generated_plugin_registrant.cc b/example/windows/flutter/generated_plugin_registrant.cc deleted file mode 100644 index 4f7884874d..0000000000 --- a/example/windows/flutter/generated_plugin_registrant.cc +++ /dev/null @@ -1,14 +0,0 @@ -// -// Generated file. Do not edit. -// - -// clang-format off - -#include "generated_plugin_registrant.h" - -#include - -void RegisterPlugins(flutter::PluginRegistry* registry) { - UrlLauncherWindowsRegisterWithRegistrar( - registry->GetRegistrarForPlugin("UrlLauncherWindows")); -} diff --git a/example/windows/flutter/generated_plugin_registrant.h b/example/windows/flutter/generated_plugin_registrant.h deleted file mode 100644 index dc139d85a9..0000000000 --- a/example/windows/flutter/generated_plugin_registrant.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// Generated file. Do not edit. -// - -// clang-format off - -#ifndef GENERATED_PLUGIN_REGISTRANT_ -#define GENERATED_PLUGIN_REGISTRANT_ - -#include - -// Registers Flutter plugins. -void RegisterPlugins(flutter::PluginRegistry* registry); - -#endif // GENERATED_PLUGIN_REGISTRANT_ diff --git a/example/windows/flutter/generated_plugins.cmake b/example/windows/flutter/generated_plugins.cmake deleted file mode 100644 index 88b22e5c77..0000000000 --- a/example/windows/flutter/generated_plugins.cmake +++ /dev/null @@ -1,24 +0,0 @@ -# -# Generated file, do not edit. -# - -list(APPEND FLUTTER_PLUGIN_LIST - url_launcher_windows -) - -list(APPEND FLUTTER_FFI_PLUGIN_LIST -) - -set(PLUGIN_BUNDLED_LIBRARIES) - -foreach(plugin ${FLUTTER_PLUGIN_LIST}) - add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/windows plugins/${plugin}) - target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) - list(APPEND PLUGIN_BUNDLED_LIBRARIES $) - list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) -endforeach(plugin) - -foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) - add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/windows plugins/${ffi_plugin}) - list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) -endforeach(ffi_plugin) diff --git a/example/windows/runner/CMakeLists.txt b/example/windows/runner/CMakeLists.txt deleted file mode 100644 index 2041a04410..0000000000 --- a/example/windows/runner/CMakeLists.txt +++ /dev/null @@ -1,40 +0,0 @@ -cmake_minimum_required(VERSION 3.14) -project(runner LANGUAGES CXX) - -# Define the application target. To change its name, change BINARY_NAME in the -# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer -# work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} WIN32 - "flutter_window.cpp" - "main.cpp" - "utils.cpp" - "win32_window.cpp" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" - "Runner.rc" - "runner.exe.manifest" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add preprocessor definitions for the build version. -target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION=\"${FLUTTER_VERSION}\"") -target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MAJOR=${FLUTTER_VERSION_MAJOR}") -target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MINOR=${FLUTTER_VERSION_MINOR}") -target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_PATCH=${FLUTTER_VERSION_PATCH}") -target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_BUILD=${FLUTTER_VERSION_BUILD}") - -# Disable Windows macros that collide with C++ standard library functions. -target_compile_definitions(${BINARY_NAME} PRIVATE "NOMINMAX") - -# Add dependency libraries and include directories. Add any application-specific -# dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter flutter_wrapper_app) -target_link_libraries(${BINARY_NAME} PRIVATE "dwmapi.lib") -target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") - -# Run the Flutter tool portions of the build. This must not be removed. -add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/example/windows/runner/Runner.rc b/example/windows/runner/Runner.rc deleted file mode 100644 index 67a802a82f..0000000000 --- a/example/windows/runner/Runner.rc +++ /dev/null @@ -1,121 +0,0 @@ -// Microsoft Visual C++ generated resource script. -// -#pragma code_page(65001) -#include "resource.h" - -#define APSTUDIO_READONLY_SYMBOLS -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 2 resource. -// -#include "winres.h" - -///////////////////////////////////////////////////////////////////////////// -#undef APSTUDIO_READONLY_SYMBOLS - -///////////////////////////////////////////////////////////////////////////// -// English (United States) resources - -#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US - -#ifdef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// TEXTINCLUDE -// - -1 TEXTINCLUDE -BEGIN - "resource.h\0" -END - -2 TEXTINCLUDE -BEGIN - "#include ""winres.h""\r\n" - "\0" -END - -3 TEXTINCLUDE -BEGIN - "\r\n" - "\0" -END - -#endif // APSTUDIO_INVOKED - - -///////////////////////////////////////////////////////////////////////////// -// -// Icon -// - -// Icon with lowest ID value placed first to ensure application icon -// remains consistent on all systems. -IDI_APP_ICON ICON "resources\\app_icon.ico" - - -///////////////////////////////////////////////////////////////////////////// -// -// Version -// - -#if defined(FLUTTER_VERSION_MAJOR) && defined(FLUTTER_VERSION_MINOR) && defined(FLUTTER_VERSION_PATCH) && defined(FLUTTER_VERSION_BUILD) -#define VERSION_AS_NUMBER FLUTTER_VERSION_MAJOR,FLUTTER_VERSION_MINOR,FLUTTER_VERSION_PATCH,FLUTTER_VERSION_BUILD -#else -#define VERSION_AS_NUMBER 1,0,0,0 -#endif - -#if defined(FLUTTER_VERSION) -#define VERSION_AS_STRING FLUTTER_VERSION -#else -#define VERSION_AS_STRING "1.0.0" -#endif - -VS_VERSION_INFO VERSIONINFO - FILEVERSION VERSION_AS_NUMBER - PRODUCTVERSION VERSION_AS_NUMBER - FILEFLAGSMASK VS_FFI_FILEFLAGSMASK -#ifdef _DEBUG - FILEFLAGS VS_FF_DEBUG -#else - FILEFLAGS 0x0L -#endif - FILEOS VOS__WINDOWS32 - FILETYPE VFT_APP - FILESUBTYPE 0x0L -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "040904e4" - BEGIN - VALUE "CompanyName", "dev.flchart.app" "\0" - VALUE "FileDescription", "FL Chart App" "\0" - VALUE "FileVersion", VERSION_AS_STRING "\0" - VALUE "InternalName", "FL Chart App" "\0" - VALUE "LegalCopyright", "Copyright (C) 2023 dev.flchart.app. All rights reserved." "\0" - VALUE "OriginalFilename", "fl_chart_app.exe" "\0" - VALUE "ProductName", "fl_chart_app" "\0" - VALUE "ProductVersion", VERSION_AS_STRING "\0" - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x409, 1252 - END -END - -#endif // English (United States) resources -///////////////////////////////////////////////////////////////////////////// - - - -#ifndef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 3 resource. -// - - -///////////////////////////////////////////////////////////////////////////// -#endif // not APSTUDIO_INVOKED diff --git a/example/windows/runner/flutter_window.cpp b/example/windows/runner/flutter_window.cpp deleted file mode 100644 index 490813deb2..0000000000 --- a/example/windows/runner/flutter_window.cpp +++ /dev/null @@ -1,66 +0,0 @@ -#include "flutter_window.h" - -#include - -#include "flutter/generated_plugin_registrant.h" - -FlutterWindow::FlutterWindow(const flutter::DartProject& project) - : project_(project) {} - -FlutterWindow::~FlutterWindow() {} - -bool FlutterWindow::OnCreate() { - if (!Win32Window::OnCreate()) { - return false; - } - - RECT frame = GetClientArea(); - - // The size here must match the window dimensions to avoid unnecessary surface - // creation / destruction in the startup path. - flutter_controller_ = std::make_unique( - frame.right - frame.left, frame.bottom - frame.top, project_); - // Ensure that basic setup of the controller was successful. - if (!flutter_controller_->engine() || !flutter_controller_->view()) { - return false; - } - RegisterPlugins(flutter_controller_->engine()); - SetChildContent(flutter_controller_->view()->GetNativeWindow()); - - flutter_controller_->engine()->SetNextFrameCallback([&]() { - this->Show(); - }); - - return true; -} - -void FlutterWindow::OnDestroy() { - if (flutter_controller_) { - flutter_controller_ = nullptr; - } - - Win32Window::OnDestroy(); -} - -LRESULT -FlutterWindow::MessageHandler(HWND hwnd, UINT const message, - WPARAM const wparam, - LPARAM const lparam) noexcept { - // Give Flutter, including plugins, an opportunity to handle window messages. - if (flutter_controller_) { - std::optional result = - flutter_controller_->HandleTopLevelWindowProc(hwnd, message, wparam, - lparam); - if (result) { - return *result; - } - } - - switch (message) { - case WM_FONTCHANGE: - flutter_controller_->engine()->ReloadSystemFonts(); - break; - } - - return Win32Window::MessageHandler(hwnd, message, wparam, lparam); -} diff --git a/example/windows/runner/flutter_window.h b/example/windows/runner/flutter_window.h deleted file mode 100644 index 6da0652f05..0000000000 --- a/example/windows/runner/flutter_window.h +++ /dev/null @@ -1,33 +0,0 @@ -#ifndef RUNNER_FLUTTER_WINDOW_H_ -#define RUNNER_FLUTTER_WINDOW_H_ - -#include -#include - -#include - -#include "win32_window.h" - -// A window that does nothing but host a Flutter view. -class FlutterWindow : public Win32Window { - public: - // Creates a new FlutterWindow hosting a Flutter view running |project|. - explicit FlutterWindow(const flutter::DartProject& project); - virtual ~FlutterWindow(); - - protected: - // Win32Window: - bool OnCreate() override; - void OnDestroy() override; - LRESULT MessageHandler(HWND window, UINT const message, WPARAM const wparam, - LPARAM const lparam) noexcept override; - - private: - // The project to run. - flutter::DartProject project_; - - // The Flutter instance hosted by this window. - std::unique_ptr flutter_controller_; -}; - -#endif // RUNNER_FLUTTER_WINDOW_H_ diff --git a/example/windows/runner/main.cpp b/example/windows/runner/main.cpp deleted file mode 100644 index 7a1b020b94..0000000000 --- a/example/windows/runner/main.cpp +++ /dev/null @@ -1,43 +0,0 @@ -#include -#include -#include - -#include "flutter_window.h" -#include "utils.h" - -int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev, - _In_ wchar_t *command_line, _In_ int show_command) { - // Attach to console when present (e.g., 'flutter run') or create a - // new console when running with a debugger. - if (!::AttachConsole(ATTACH_PARENT_PROCESS) && ::IsDebuggerPresent()) { - CreateAndAttachConsole(); - } - - // Initialize COM, so that it is available for use in the library and/or - // plugins. - ::CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED); - - flutter::DartProject project(L"data"); - - std::vector command_line_arguments = - GetCommandLineArguments(); - - project.set_dart_entrypoint_arguments(std::move(command_line_arguments)); - - FlutterWindow window(project); - Win32Window::Point origin(10, 10); - Win32Window::Size size(1280, 720); - if (!window.Create(L"FL Chart App", origin, size)) { - return EXIT_FAILURE; - } - window.SetQuitOnClose(true); - - ::MSG msg; - while (::GetMessage(&msg, nullptr, 0, 0)) { - ::TranslateMessage(&msg); - ::DispatchMessage(&msg); - } - - ::CoUninitialize(); - return EXIT_SUCCESS; -} diff --git a/example/windows/runner/resource.h b/example/windows/runner/resource.h deleted file mode 100644 index 66a65d1e4a..0000000000 --- a/example/windows/runner/resource.h +++ /dev/null @@ -1,16 +0,0 @@ -//{{NO_DEPENDENCIES}} -// Microsoft Visual C++ generated include file. -// Used by Runner.rc -// -#define IDI_APP_ICON 101 - -// Next default values for new objects -// -#ifdef APSTUDIO_INVOKED -#ifndef APSTUDIO_READONLY_SYMBOLS -#define _APS_NEXT_RESOURCE_VALUE 102 -#define _APS_NEXT_COMMAND_VALUE 40001 -#define _APS_NEXT_CONTROL_VALUE 1001 -#define _APS_NEXT_SYMED_VALUE 101 -#endif -#endif diff --git a/example/windows/runner/resources/app_icon.ico b/example/windows/runner/resources/app_icon.ico deleted file mode 100644 index c04e20caf6..0000000000 Binary files a/example/windows/runner/resources/app_icon.ico and /dev/null differ diff --git a/example/windows/runner/runner.exe.manifest b/example/windows/runner/runner.exe.manifest deleted file mode 100644 index a42ea7687c..0000000000 --- a/example/windows/runner/runner.exe.manifest +++ /dev/null @@ -1,20 +0,0 @@ - - - - - PerMonitorV2 - - - - - - - - - - - - - - - diff --git a/example/windows/runner/utils.cpp b/example/windows/runner/utils.cpp deleted file mode 100644 index f5bf9fa0f5..0000000000 --- a/example/windows/runner/utils.cpp +++ /dev/null @@ -1,64 +0,0 @@ -#include "utils.h" - -#include -#include -#include -#include - -#include - -void CreateAndAttachConsole() { - if (::AllocConsole()) { - FILE *unused; - if (freopen_s(&unused, "CONOUT$", "w", stdout)) { - _dup2(_fileno(stdout), 1); - } - if (freopen_s(&unused, "CONOUT$", "w", stderr)) { - _dup2(_fileno(stdout), 2); - } - std::ios::sync_with_stdio(); - FlutterDesktopResyncOutputStreams(); - } -} - -std::vector GetCommandLineArguments() { - // Convert the UTF-16 command line arguments to UTF-8 for the Engine to use. - int argc; - wchar_t** argv = ::CommandLineToArgvW(::GetCommandLineW(), &argc); - if (argv == nullptr) { - return std::vector(); - } - - std::vector command_line_arguments; - - // Skip the first argument as it's the binary name. - for (int i = 1; i < argc; i++) { - command_line_arguments.push_back(Utf8FromUtf16(argv[i])); - } - - ::LocalFree(argv); - - return command_line_arguments; -} - -std::string Utf8FromUtf16(const wchar_t* utf16_string) { - if (utf16_string == nullptr) { - return std::string(); - } - int target_length = ::WideCharToMultiByte( - CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, - -1, nullptr, 0, nullptr, nullptr); - std::string utf8_string; - if (target_length == 0 || target_length > utf8_string.max_size()) { - return utf8_string; - } - utf8_string.resize(target_length); - int converted_length = ::WideCharToMultiByte( - CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, - -1, utf8_string.data(), - target_length, nullptr, nullptr); - if (converted_length == 0) { - return std::string(); - } - return utf8_string; -} diff --git a/example/windows/runner/utils.h b/example/windows/runner/utils.h deleted file mode 100644 index 3879d54755..0000000000 --- a/example/windows/runner/utils.h +++ /dev/null @@ -1,19 +0,0 @@ -#ifndef RUNNER_UTILS_H_ -#define RUNNER_UTILS_H_ - -#include -#include - -// Creates a console for the process, and redirects stdout and stderr to -// it for both the runner and the Flutter library. -void CreateAndAttachConsole(); - -// Takes a null-terminated wchar_t* encoded in UTF-16 and returns a std::string -// encoded in UTF-8. Returns an empty std::string on failure. -std::string Utf8FromUtf16(const wchar_t* utf16_string); - -// Gets the command line arguments passed in as a std::vector, -// encoded in UTF-8. Returns an empty std::vector on failure. -std::vector GetCommandLineArguments(); - -#endif // RUNNER_UTILS_H_ diff --git a/example/windows/runner/win32_window.cpp b/example/windows/runner/win32_window.cpp deleted file mode 100644 index 2f91cbb360..0000000000 --- a/example/windows/runner/win32_window.cpp +++ /dev/null @@ -1,288 +0,0 @@ -#include "win32_window.h" - -#include -#include - -#include "resource.h" - -namespace { - -/// Window attribute that enables dark mode window decorations. -/// -/// Redefined in case the developer's machine has a Windows SDK older than -/// version 10.0.22000.0. -/// See: https://docs.microsoft.com/windows/win32/api/dwmapi/ne-dwmapi-dwmwindowattribute -#ifndef DWMWA_USE_IMMERSIVE_DARK_MODE -#define DWMWA_USE_IMMERSIVE_DARK_MODE 20 -#endif - -constexpr const wchar_t kWindowClassName[] = L"FLUTTER_RUNNER_WIN32_WINDOW"; - -/// Registry key for app theme preference. -/// -/// A value of 0 indicates apps should use dark mode. A non-zero or missing -/// value indicates apps should use light mode. -constexpr const wchar_t kGetPreferredBrightnessRegKey[] = - L"Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize"; -constexpr const wchar_t kGetPreferredBrightnessRegValue[] = L"AppsUseLightTheme"; - -// The number of Win32Window objects that currently exist. -static int g_active_window_count = 0; - -using EnableNonClientDpiScaling = BOOL __stdcall(HWND hwnd); - -// Scale helper to convert logical scaler values to physical using passed in -// scale factor -int Scale(int source, double scale_factor) { - return static_cast(source * scale_factor); -} - -// Dynamically loads the |EnableNonClientDpiScaling| from the User32 module. -// This API is only needed for PerMonitor V1 awareness mode. -void EnableFullDpiSupportIfAvailable(HWND hwnd) { - HMODULE user32_module = LoadLibraryA("User32.dll"); - if (!user32_module) { - return; - } - auto enable_non_client_dpi_scaling = - reinterpret_cast( - GetProcAddress(user32_module, "EnableNonClientDpiScaling")); - if (enable_non_client_dpi_scaling != nullptr) { - enable_non_client_dpi_scaling(hwnd); - } - FreeLibrary(user32_module); -} - -} // namespace - -// Manages the Win32Window's window class registration. -class WindowClassRegistrar { - public: - ~WindowClassRegistrar() = default; - - // Returns the singleton registar instance. - static WindowClassRegistrar* GetInstance() { - if (!instance_) { - instance_ = new WindowClassRegistrar(); - } - return instance_; - } - - // Returns the name of the window class, registering the class if it hasn't - // previously been registered. - const wchar_t* GetWindowClass(); - - // Unregisters the window class. Should only be called if there are no - // instances of the window. - void UnregisterWindowClass(); - - private: - WindowClassRegistrar() = default; - - static WindowClassRegistrar* instance_; - - bool class_registered_ = false; -}; - -WindowClassRegistrar* WindowClassRegistrar::instance_ = nullptr; - -const wchar_t* WindowClassRegistrar::GetWindowClass() { - if (!class_registered_) { - WNDCLASS window_class{}; - window_class.hCursor = LoadCursor(nullptr, IDC_ARROW); - window_class.lpszClassName = kWindowClassName; - window_class.style = CS_HREDRAW | CS_VREDRAW; - window_class.cbClsExtra = 0; - window_class.cbWndExtra = 0; - window_class.hInstance = GetModuleHandle(nullptr); - window_class.hIcon = - LoadIcon(window_class.hInstance, MAKEINTRESOURCE(IDI_APP_ICON)); - window_class.hbrBackground = 0; - window_class.lpszMenuName = nullptr; - window_class.lpfnWndProc = Win32Window::WndProc; - RegisterClass(&window_class); - class_registered_ = true; - } - return kWindowClassName; -} - -void WindowClassRegistrar::UnregisterWindowClass() { - UnregisterClass(kWindowClassName, nullptr); - class_registered_ = false; -} - -Win32Window::Win32Window() { - ++g_active_window_count; -} - -Win32Window::~Win32Window() { - --g_active_window_count; - Destroy(); -} - -bool Win32Window::Create(const std::wstring& title, - const Point& origin, - const Size& size) { - Destroy(); - - const wchar_t* window_class = - WindowClassRegistrar::GetInstance()->GetWindowClass(); - - const POINT target_point = {static_cast(origin.x), - static_cast(origin.y)}; - HMONITOR monitor = MonitorFromPoint(target_point, MONITOR_DEFAULTTONEAREST); - UINT dpi = FlutterDesktopGetDpiForMonitor(monitor); - double scale_factor = dpi / 96.0; - - HWND window = CreateWindow( - window_class, title.c_str(), WS_OVERLAPPEDWINDOW, - Scale(origin.x, scale_factor), Scale(origin.y, scale_factor), - Scale(size.width, scale_factor), Scale(size.height, scale_factor), - nullptr, nullptr, GetModuleHandle(nullptr), this); - - if (!window) { - return false; - } - - UpdateTheme(window); - - return OnCreate(); -} - -bool Win32Window::Show() { - return ShowWindow(window_handle_, SW_SHOWNORMAL); -} - -// static -LRESULT CALLBACK Win32Window::WndProc(HWND const window, - UINT const message, - WPARAM const wparam, - LPARAM const lparam) noexcept { - if (message == WM_NCCREATE) { - auto window_struct = reinterpret_cast(lparam); - SetWindowLongPtr(window, GWLP_USERDATA, - reinterpret_cast(window_struct->lpCreateParams)); - - auto that = static_cast(window_struct->lpCreateParams); - EnableFullDpiSupportIfAvailable(window); - that->window_handle_ = window; - } else if (Win32Window* that = GetThisFromHandle(window)) { - return that->MessageHandler(window, message, wparam, lparam); - } - - return DefWindowProc(window, message, wparam, lparam); -} - -LRESULT -Win32Window::MessageHandler(HWND hwnd, - UINT const message, - WPARAM const wparam, - LPARAM const lparam) noexcept { - switch (message) { - case WM_DESTROY: - window_handle_ = nullptr; - Destroy(); - if (quit_on_close_) { - PostQuitMessage(0); - } - return 0; - - case WM_DPICHANGED: { - auto newRectSize = reinterpret_cast(lparam); - LONG newWidth = newRectSize->right - newRectSize->left; - LONG newHeight = newRectSize->bottom - newRectSize->top; - - SetWindowPos(hwnd, nullptr, newRectSize->left, newRectSize->top, newWidth, - newHeight, SWP_NOZORDER | SWP_NOACTIVATE); - - return 0; - } - case WM_SIZE: { - RECT rect = GetClientArea(); - if (child_content_ != nullptr) { - // Size and position the child window. - MoveWindow(child_content_, rect.left, rect.top, rect.right - rect.left, - rect.bottom - rect.top, TRUE); - } - return 0; - } - - case WM_ACTIVATE: - if (child_content_ != nullptr) { - SetFocus(child_content_); - } - return 0; - - case WM_DWMCOLORIZATIONCOLORCHANGED: - UpdateTheme(hwnd); - return 0; - } - - return DefWindowProc(window_handle_, message, wparam, lparam); -} - -void Win32Window::Destroy() { - OnDestroy(); - - if (window_handle_) { - DestroyWindow(window_handle_); - window_handle_ = nullptr; - } - if (g_active_window_count == 0) { - WindowClassRegistrar::GetInstance()->UnregisterWindowClass(); - } -} - -Win32Window* Win32Window::GetThisFromHandle(HWND const window) noexcept { - return reinterpret_cast( - GetWindowLongPtr(window, GWLP_USERDATA)); -} - -void Win32Window::SetChildContent(HWND content) { - child_content_ = content; - SetParent(content, window_handle_); - RECT frame = GetClientArea(); - - MoveWindow(content, frame.left, frame.top, frame.right - frame.left, - frame.bottom - frame.top, true); - - SetFocus(child_content_); -} - -RECT Win32Window::GetClientArea() { - RECT frame; - GetClientRect(window_handle_, &frame); - return frame; -} - -HWND Win32Window::GetHandle() { - return window_handle_; -} - -void Win32Window::SetQuitOnClose(bool quit_on_close) { - quit_on_close_ = quit_on_close; -} - -bool Win32Window::OnCreate() { - // No-op; provided for subclasses. - return true; -} - -void Win32Window::OnDestroy() { - // No-op; provided for subclasses. -} - -void Win32Window::UpdateTheme(HWND const window) { - DWORD light_mode; - DWORD light_mode_size = sizeof(light_mode); - LSTATUS result = RegGetValue(HKEY_CURRENT_USER, kGetPreferredBrightnessRegKey, - kGetPreferredBrightnessRegValue, - RRF_RT_REG_DWORD, nullptr, &light_mode, - &light_mode_size); - - if (result == ERROR_SUCCESS) { - BOOL enable_dark_mode = light_mode == 0; - DwmSetWindowAttribute(window, DWMWA_USE_IMMERSIVE_DARK_MODE, - &enable_dark_mode, sizeof(enable_dark_mode)); - } -} diff --git a/example/windows/runner/win32_window.h b/example/windows/runner/win32_window.h deleted file mode 100644 index 90a704367f..0000000000 --- a/example/windows/runner/win32_window.h +++ /dev/null @@ -1,102 +0,0 @@ -#ifndef RUNNER_WIN32_WINDOW_H_ -#define RUNNER_WIN32_WINDOW_H_ - -#include - -#include -#include -#include - -// A class abstraction for a high DPI-aware Win32 Window. Intended to be -// inherited from by classes that wish to specialize with custom -// rendering and input handling -class Win32Window { - public: - struct Point { - unsigned int x; - unsigned int y; - Point(unsigned int x, unsigned int y) : x(x), y(y) {} - }; - - struct Size { - unsigned int width; - unsigned int height; - Size(unsigned int width, unsigned int height) - : width(width), height(height) {} - }; - - Win32Window(); - virtual ~Win32Window(); - - // Creates a win32 window with |title| that is positioned and sized using - // |origin| and |size|. New windows are created on the default monitor. Window - // sizes are specified to the OS in physical pixels, hence to ensure a - // consistent size this function will scale the inputted width and height as - // as appropriate for the default monitor. The window is invisible until - // |Show| is called. Returns true if the window was created successfully. - bool Create(const std::wstring& title, const Point& origin, const Size& size); - - // Show the current window. Returns true if the window was successfully shown. - bool Show(); - - // Release OS resources associated with window. - void Destroy(); - - // Inserts |content| into the window tree. - void SetChildContent(HWND content); - - // Returns the backing Window handle to enable clients to set icon and other - // window properties. Returns nullptr if the window has been destroyed. - HWND GetHandle(); - - // If true, closing this window will quit the application. - void SetQuitOnClose(bool quit_on_close); - - // Return a RECT representing the bounds of the current client area. - RECT GetClientArea(); - - protected: - // Processes and route salient window messages for mouse handling, - // size change and DPI. Delegates handling of these to member overloads that - // inheriting classes can handle. - virtual LRESULT MessageHandler(HWND window, - UINT const message, - WPARAM const wparam, - LPARAM const lparam) noexcept; - - // Called when CreateAndShow is called, allowing subclass window-related - // setup. Subclasses should return false if setup fails. - virtual bool OnCreate(); - - // Called when Destroy is called. - virtual void OnDestroy(); - - private: - friend class WindowClassRegistrar; - - // OS callback called by message pump. Handles the WM_NCCREATE message which - // is passed when the non-client area is being created and enables automatic - // non-client DPI scaling so that the non-client area automatically - // responsponds to changes in DPI. All other messages are handled by - // MessageHandler. - static LRESULT CALLBACK WndProc(HWND const window, - UINT const message, - WPARAM const wparam, - LPARAM const lparam) noexcept; - - // Retrieves a class instance pointer for |window| - static Win32Window* GetThisFromHandle(HWND const window) noexcept; - - // Update the window frame's theme to match the system theme. - static void UpdateTheme(HWND const window); - - bool quit_on_close_ = false; - - // window handle for top level window. - HWND window_handle_ = nullptr; - - // window handle for hosted content. - HWND child_content_ = nullptr; -}; - -#endif // RUNNER_WIN32_WINDOW_H_ diff --git a/example/web/favicon.png b/favicon.png similarity index 100% rename from example/web/favicon.png rename to favicon.png diff --git a/fl_chart.iml b/fl_chart.iml deleted file mode 100644 index 97ae688d59..0000000000 --- a/fl_chart.iml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/flutter.js b/flutter.js new file mode 100644 index 0000000000..4fd0e51f34 --- /dev/null +++ b/flutter.js @@ -0,0 +1,377 @@ +// Copyright 2014 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +if (!_flutter) { + var _flutter = {}; +} +_flutter.loader = null; + +(function () { + "use strict"; + + const baseUri = ensureTrailingSlash(getBaseURI()); + + function getBaseURI() { + const base = document.querySelector("base"); + return (base && base.getAttribute("href")) || ""; + } + + function ensureTrailingSlash(uri) { + if (uri == "") { + return uri; + } + return uri.endsWith("/") ? uri : `${uri}/`; + } + + /** + * Wraps `promise` in a timeout of the given `duration` in ms. + * + * Resolves/rejects with whatever the original `promises` does, or rejects + * if `promise` takes longer to complete than `duration`. In that case, + * `debugName` is used to compose a legible error message. + * + * If `duration` is < 0, the original `promise` is returned unchanged. + * @param {Promise} promise + * @param {number} duration + * @param {string} debugName + * @returns {Promise} a wrapped promise. + */ + async function timeout(promise, duration, debugName) { + if (duration < 0) { + return promise; + } + let timeoutId; + const _clock = new Promise((_, reject) => { + timeoutId = setTimeout(() => { + reject( + new Error( + `${debugName} took more than ${duration}ms to resolve. Moving on.`, + { + cause: timeout, + } + ) + ); + }, duration); + }); + + return Promise.race([promise, _clock]).finally(() => { + clearTimeout(timeoutId); + }); + } + + /** + * Handles the creation of a TrustedTypes `policy` that validates URLs based + * on an (optional) incoming array of RegExes. + */ + class FlutterTrustedTypesPolicy { + /** + * Constructs the policy. + * @param {[RegExp]} validPatterns the patterns to test URLs + * @param {String} policyName the policy name (optional) + */ + constructor(validPatterns, policyName = "flutter-js") { + const patterns = validPatterns || [ + /\.js$/, + ]; + if (window.trustedTypes) { + this.policy = trustedTypes.createPolicy(policyName, { + createScriptURL: function(url) { + const parsed = new URL(url, window.location); + const file = parsed.pathname.split("/").pop(); + const matches = patterns.some((pattern) => pattern.test(file)); + if (matches) { + return parsed.toString(); + } + console.error( + "URL rejected by TrustedTypes policy", + policyName, ":", url, "(download prevented)"); + } + }); + } + } + } + + /** + * Handles loading/reloading Flutter's service worker, if configured. + * + * @see: https://developers.google.com/web/fundamentals/primers/service-workers + */ + class FlutterServiceWorkerLoader { + /** + * Injects a TrustedTypesPolicy (or undefined if the feature is not supported). + * @param {TrustedTypesPolicy | undefined} policy + */ + setTrustedTypesPolicy(policy) { + this._ttPolicy = policy; + } + + /** + * Returns a Promise that resolves when the latest Flutter service worker, + * configured by `settings` has been loaded and activated. + * + * Otherwise, the promise is rejected with an error message. + * @param {*} settings Service worker settings + * @returns {Promise} that resolves when the latest serviceWorker is ready. + */ + loadServiceWorker(settings) { + if (settings == null) { + // In the future, settings = null -> uninstall service worker? + console.debug("Null serviceWorker configuration. Skipping."); + return Promise.resolve(); + } + if (!("serviceWorker" in navigator)) { + let errorMessage = "Service Worker API unavailable."; + if (!window.isSecureContext) { + errorMessage += "\nThe current context is NOT secure." + errorMessage += "\nRead more: https://developer.mozilla.org/en-US/docs/Web/Security/Secure_Contexts"; + } + return Promise.reject( + new Error(errorMessage) + ); + } + const { + serviceWorkerVersion, + serviceWorkerUrl = `${baseUri}flutter_service_worker.js?v=${serviceWorkerVersion}`, + timeoutMillis = 4000, + } = settings; + + // Apply the TrustedTypes policy, if present. + let url = serviceWorkerUrl; + if (this._ttPolicy != null) { + url = this._ttPolicy.createScriptURL(url); + } + + const serviceWorkerActivation = navigator.serviceWorker + .register(url) + .then((serviceWorkerRegistration) => this._getNewServiceWorker(serviceWorkerRegistration, serviceWorkerVersion)) + .then(this._waitForServiceWorkerActivation); + + // Timeout race promise + return timeout( + serviceWorkerActivation, + timeoutMillis, + "prepareServiceWorker" + ); + } + + /** + * Returns the latest service worker for the given `serviceWorkerRegistration`. + * + * This might return the current service worker, if there's no new service worker + * awaiting to be installed/updated. + * + * @param {ServiceWorkerRegistration} serviceWorkerRegistration + * @param {String} serviceWorkerVersion + * @returns {Promise} + */ + async _getNewServiceWorker(serviceWorkerRegistration, serviceWorkerVersion) { + if (!serviceWorkerRegistration.active && (serviceWorkerRegistration.installing || serviceWorkerRegistration.waiting)) { + // No active web worker and we have installed or are installing + // one for the first time. Simply wait for it to activate. + console.debug("Installing/Activating first service worker."); + return serviceWorkerRegistration.installing || serviceWorkerRegistration.waiting; + } else if (!serviceWorkerRegistration.active.scriptURL.endsWith(serviceWorkerVersion)) { + // When the app updates the serviceWorkerVersion changes, so we + // need to ask the service worker to update. + const newRegistration = await serviceWorkerRegistration.update(); + console.debug("Updating service worker."); + return newRegistration.installing || newRegistration.waiting || newRegistration.active; + } else { + console.debug("Loading from existing service worker."); + return serviceWorkerRegistration.active; + } + } + + /** + * Returns a Promise that resolves when the `serviceWorker` changes its + * state to "activated". + * + * @param {ServiceWorker} serviceWorker + * @returns {Promise} + */ + async _waitForServiceWorkerActivation(serviceWorker) { + if (!serviceWorker || serviceWorker.state == "activated") { + if (!serviceWorker) { + throw new Error("Cannot activate a null service worker!"); + } else { + console.debug("Service worker already active."); + return; + } + } + return new Promise((resolve, _) => { + serviceWorker.addEventListener("statechange", () => { + if (serviceWorker.state == "activated") { + console.debug("Activated new service worker."); + resolve(); + } + }); + }); + } + } + + /** + * Handles injecting the main Flutter web entrypoint (main.dart.js), and notifying + * the user when Flutter is ready, through `didCreateEngineInitializer`. + * + * @see https://docs.flutter.dev/development/platform-integration/web/initialization + */ + class FlutterEntrypointLoader { + /** + * Creates a FlutterEntrypointLoader. + */ + constructor() { + // Watchdog to prevent injecting the main entrypoint multiple times. + this._scriptLoaded = false; + } + + /** + * Injects a TrustedTypesPolicy (or undefined if the feature is not supported). + * @param {TrustedTypesPolicy | undefined} policy + */ + setTrustedTypesPolicy(policy) { + this._ttPolicy = policy; + } + + /** + * Loads flutter main entrypoint, specified by `entrypointUrl`, and calls a + * user-specified `onEntrypointLoaded` callback with an EngineInitializer + * object when it's done. + * + * @param {*} options + * @returns {Promise | undefined} that will eventually resolve with an + * EngineInitializer, or will be rejected with the error caused by the loader. + * Returns undefined when an `onEntrypointLoaded` callback is supplied in `options`. + */ + async loadEntrypoint(options) { + const { entrypointUrl = `${baseUri}main.dart.js`, onEntrypointLoaded } = + options || {}; + + return this._loadEntrypoint(entrypointUrl, onEntrypointLoaded); + } + + /** + * Resolves the promise created by loadEntrypoint, and calls the `onEntrypointLoaded` + * function supplied by the user (if needed). + * + * Called by Flutter through `_flutter.loader.didCreateEngineInitializer` method, + * which is bound to the correct instance of the FlutterEntrypointLoader by + * the FlutterLoader object. + * + * @param {Function} engineInitializer @see https://github.com/flutter/engine/blob/main/lib/web_ui/lib/src/engine/js_interop/js_loader.dart#L42 + */ + didCreateEngineInitializer(engineInitializer) { + if (typeof this._didCreateEngineInitializerResolve === "function") { + this._didCreateEngineInitializerResolve(engineInitializer); + // Remove the resolver after the first time, so Flutter Web can hot restart. + this._didCreateEngineInitializerResolve = null; + // Make the engine revert to "auto" initialization on hot restart. + delete _flutter.loader.didCreateEngineInitializer; + } + if (typeof this._onEntrypointLoaded === "function") { + this._onEntrypointLoaded(engineInitializer); + } + } + + /** + * Injects a script tag into the DOM, and configures this loader to be able to + * handle the "entrypoint loaded" notifications received from Flutter web. + * + * @param {string} entrypointUrl the URL of the script that will initialize + * Flutter. + * @param {Function} onEntrypointLoaded a callback that will be called when + * Flutter web notifies this object that the entrypoint is + * loaded. + * @returns {Promise | undefined} a Promise that resolves when the entrypoint + * is loaded, or undefined if `onEntrypointLoaded` + * is a function. + */ + _loadEntrypoint(entrypointUrl, onEntrypointLoaded) { + const useCallback = typeof onEntrypointLoaded === "function"; + + if (!this._scriptLoaded) { + this._scriptLoaded = true; + const scriptTag = this._createScriptTag(entrypointUrl); + if (useCallback) { + // Just inject the script tag, and return nothing; Flutter will call + // `didCreateEngineInitializer` when it's done. + console.debug("Injecting diff --git a/lib/fl_chart.dart b/lib/fl_chart.dart deleted file mode 100644 index d3597fb81e..0000000000 --- a/lib/fl_chart.dart +++ /dev/null @@ -1,17 +0,0 @@ -/// A highly customizable Flutter chart library that supports Line Chart, Bar Chart, Pie Chart, Scatter Chart, and Radar Chart. -library fl_chart; - -export 'src/chart/bar_chart/bar_chart.dart'; -export 'src/chart/bar_chart/bar_chart_data.dart'; -export 'src/chart/base/axis_chart/axis_chart_data.dart'; -export 'src/chart/base/axis_chart/axis_chart_widgets.dart'; -export 'src/chart/base/base_chart/base_chart_data.dart'; -export 'src/chart/base/base_chart/fl_touch_event.dart'; -export 'src/chart/line_chart/line_chart.dart'; -export 'src/chart/line_chart/line_chart_data.dart'; -export 'src/chart/pie_chart/pie_chart.dart'; -export 'src/chart/pie_chart/pie_chart_data.dart'; -export 'src/chart/radar_chart/radar_chart.dart'; -export 'src/chart/radar_chart/radar_chart_data.dart'; -export 'src/chart/scatter_chart/scatter_chart.dart'; -export 'src/chart/scatter_chart/scatter_chart_data.dart'; diff --git a/lib/src/chart/bar_chart/bar_chart.dart b/lib/src/chart/bar_chart/bar_chart.dart deleted file mode 100644 index 83c19e5cdb..0000000000 --- a/lib/src/chart/bar_chart/bar_chart.dart +++ /dev/null @@ -1,129 +0,0 @@ -import 'package:fl_chart/fl_chart.dart'; -import 'package:fl_chart/src/chart/bar_chart/bar_chart_renderer.dart'; -import 'package:fl_chart/src/chart/base/axis_chart/axis_chart_scaffold_widget.dart'; -import 'package:flutter/cupertino.dart'; - -/// Renders a bar chart as a widget, using provided [BarChartData]. -class BarChart extends ImplicitlyAnimatedWidget { - /// [data] determines how the [BarChart] should be look like, - /// when you make any change in the [BarChartData], it updates - /// new values with animation, and duration is [swapAnimationDuration]. - /// also you can change the [swapAnimationCurve] - /// which default is [Curves.linear]. - const BarChart( - this.data, { - this.chartRendererKey, - super.key, - Duration swapAnimationDuration = const Duration(milliseconds: 150), - Curve swapAnimationCurve = Curves.linear, - }) : super( - duration: swapAnimationDuration, - curve: swapAnimationCurve, - ); - - /// Determines how the [BarChart] should be look like. - final BarChartData data; - - /// We pass this key to our renderers which are supposed to - /// render the chart itself (without anything around the chart). - final Key? chartRendererKey; - - /// Creates a [_BarChartState] - @override - _BarChartState createState() => _BarChartState(); -} - -class _BarChartState extends AnimatedWidgetBaseState { - /// we handle under the hood animations (implicit animations) via this tween, - /// it lerps between the old [BarChartData] to the new one. - BarChartDataTween? _barChartDataTween; - - /// If [BarTouchData.handleBuiltInTouches] is true, we override the callback to handle touches internally, - /// but we need to keep the provided callback to notify it too. - BaseTouchCallback? _providedTouchCallback; - - final Map> _showingTouchedTooltips = {}; - - @override - Widget build(BuildContext context) { - final showingData = _getData(); - - return AxisChartScaffoldWidget( - data: showingData, - chart: BarChartLeaf( - data: _withTouchedIndicators(_barChartDataTween!.evaluate(animation)), - targetData: _withTouchedIndicators(showingData), - key: widget.chartRendererKey, - ), - ); - } - - BarChartData _withTouchedIndicators(BarChartData barChartData) { - if (!barChartData.barTouchData.enabled || - !barChartData.barTouchData.handleBuiltInTouches) { - return barChartData; - } - - final newGroups = []; - for (var i = 0; i < barChartData.barGroups.length; i++) { - final group = barChartData.barGroups[i]; - - newGroups.add( - group.copyWith( - showingTooltipIndicators: _showingTouchedTooltips[i], - ), - ); - } - - return barChartData.copyWith( - barGroups: newGroups, - ); - } - - BarChartData _getData() { - final barTouchData = widget.data.barTouchData; - if (barTouchData.enabled && barTouchData.handleBuiltInTouches) { - _providedTouchCallback = barTouchData.touchCallback; - return widget.data.copyWith( - barTouchData: widget.data.barTouchData - .copyWith(touchCallback: _handleBuiltInTouch), - ); - } - return widget.data; - } - - void _handleBuiltInTouch( - FlTouchEvent event, - BarTouchResponse? touchResponse, - ) { - if (!mounted) { - return; - } - _providedTouchCallback?.call(event, touchResponse); - - if (!event.isInterestedForInteractions || - touchResponse == null || - touchResponse.spot == null) { - setState(_showingTouchedTooltips.clear); - return; - } - setState(() { - final spot = touchResponse.spot!; - final groupIndex = spot.touchedBarGroupIndex; - final rodIndex = spot.touchedRodDataIndex; - - _showingTouchedTooltips.clear(); - _showingTouchedTooltips[groupIndex] = [rodIndex]; - }); - } - - @override - void forEachTween(TweenVisitor visitor) { - _barChartDataTween = visitor( - _barChartDataTween, - widget.data, - (dynamic value) => - BarChartDataTween(begin: value as BarChartData, end: widget.data), - ) as BarChartDataTween?; - } -} diff --git a/lib/src/chart/bar_chart/bar_chart_data.dart b/lib/src/chart/bar_chart/bar_chart_data.dart deleted file mode 100644 index c0207de667..0000000000 --- a/lib/src/chart/bar_chart/bar_chart_data.dart +++ /dev/null @@ -1,934 +0,0 @@ -// coverage:ignore-file -import 'dart:math'; -import 'dart:ui'; - -import 'package:equatable/equatable.dart'; -import 'package:fl_chart/fl_chart.dart'; -import 'package:fl_chart/src/chart/bar_chart/bar_chart_helper.dart'; -import 'package:fl_chart/src/extensions/color_extension.dart'; -import 'package:fl_chart/src/utils/lerp.dart'; -import 'package:fl_chart/src/utils/utils.dart'; -import 'package:flutter/material.dart'; - -/// [BarChart] needs this class to render itself. -/// -/// It holds data needed to draw a bar chart, -/// including bar lines, colors, spaces, touches, ... -class BarChartData extends AxisChartData with EquatableMixin { - /// [BarChart] draws some [barGroups] and aligns them using [alignment], - /// if [alignment] is [BarChartAlignment.center], you can define [groupsSpace] - /// to apply space between them. - /// - /// It draws some titles on left, top, right, bottom sides per each axis number, - /// you can modify [titlesData] to have your custom titles, - /// also you can define the axis title (one text per axis) for each side - /// using [axisTitleData], you can restrict the y axis using [minX], and [maxY] values. - /// - /// It draws a color as a background behind everything you can set it using [backgroundColor], - /// then a grid over it, you can customize it using [gridData], - /// and it draws 4 borders around your chart, you can customize it using [borderData]. - /// - /// You can annotate some regions with a highlight color using [rangeAnnotations]. - /// - /// You can modify [barTouchData] to customize touch behaviors and responses. - /// - /// Horizontal lines are drawn with [extraLinesData]. Vertical lines will not be painted if received. - /// Please see issue #1149 (https://github.com/imaNNeo/fl_chart/issues/1149) for vertical lines. - BarChartData({ - List? barGroups, - double? groupsSpace, - BarChartAlignment? alignment, - FlTitlesData? titlesData, - BarTouchData? barTouchData, - double? maxY, - double? minY, - super.baselineY, - FlGridData? gridData, - super.borderData, - RangeAnnotations? rangeAnnotations, - super.backgroundColor, - ExtraLinesData? extraLinesData, - }) : barGroups = barGroups ?? const [], - groupsSpace = groupsSpace ?? 16, - alignment = alignment ?? BarChartAlignment.spaceEvenly, - barTouchData = barTouchData ?? BarTouchData(), - super( - titlesData: titlesData ?? - const FlTitlesData( - topTitles: AxisTitles(), - ), - gridData: gridData ?? const FlGridData(), - rangeAnnotations: rangeAnnotations ?? const RangeAnnotations(), - touchData: barTouchData ?? BarTouchData(), - extraLinesData: extraLinesData ?? const ExtraLinesData(), - minX: 0, - maxX: 1, - maxY: maxY ?? - BarChartHelper.calculateMaxAxisValues(barGroups ?? []).maxY, - minY: minY ?? - BarChartHelper.calculateMaxAxisValues(barGroups ?? []).minY, - ); - - /// [BarChart] draws [barGroups] that each of them contains a list of [BarChartRodData]. - final List barGroups; - - /// Apply space between the [barGroups]. - final double groupsSpace; - - /// Arrange the [barGroups], see [BarChartAlignment]. - final BarChartAlignment alignment; - - /// Handles touch behaviors and responses. - final BarTouchData barTouchData; - - /// Copies current [BarChartData] to a new [BarChartData], - /// and replaces provided values. - BarChartData copyWith({ - List? barGroups, - double? groupsSpace, - BarChartAlignment? alignment, - FlTitlesData? titlesData, - RangeAnnotations? rangeAnnotations, - BarTouchData? barTouchData, - FlGridData? gridData, - FlBorderData? borderData, - double? maxY, - double? minY, - double? baselineY, - Color? backgroundColor, - ExtraLinesData? extraLinesData, - }) { - return BarChartData( - barGroups: barGroups ?? this.barGroups, - groupsSpace: groupsSpace ?? this.groupsSpace, - alignment: alignment ?? this.alignment, - titlesData: titlesData ?? this.titlesData, - rangeAnnotations: rangeAnnotations ?? this.rangeAnnotations, - barTouchData: barTouchData ?? this.barTouchData, - gridData: gridData ?? this.gridData, - borderData: borderData ?? this.borderData, - maxY: maxY ?? this.maxY, - minY: minY ?? this.minY, - baselineY: baselineY ?? this.baselineY, - backgroundColor: backgroundColor ?? this.backgroundColor, - extraLinesData: extraLinesData ?? this.extraLinesData, - ); - } - - /// Lerps a [BaseChartData] based on [t] value, check [Tween.lerp]. - @override - BarChartData lerp(BaseChartData a, BaseChartData b, double t) { - if (a is BarChartData && b is BarChartData) { - return BarChartData( - barGroups: lerpBarChartGroupDataList(a.barGroups, b.barGroups, t), - groupsSpace: lerpDouble(a.groupsSpace, b.groupsSpace, t), - alignment: b.alignment, - titlesData: FlTitlesData.lerp(a.titlesData, b.titlesData, t), - rangeAnnotations: - RangeAnnotations.lerp(a.rangeAnnotations, b.rangeAnnotations, t), - barTouchData: b.barTouchData, - gridData: FlGridData.lerp(a.gridData, b.gridData, t), - borderData: FlBorderData.lerp(a.borderData, b.borderData, t), - maxY: lerpDouble(a.maxY, b.maxY, t), - minY: lerpDouble(a.minY, b.minY, t), - baselineY: lerpDouble(a.baselineY, b.baselineY, t), - backgroundColor: Color.lerp(a.backgroundColor, b.backgroundColor, t), - extraLinesData: - ExtraLinesData.lerp(a.extraLinesData, b.extraLinesData, t), - ); - } else { - throw Exception('Illegal State'); - } - } - - /// Used for equality check, see [EquatableMixin]. - @override - List get props => [ - barGroups, - groupsSpace, - alignment, - titlesData, - barTouchData, - maxY, - minY, - baselineY, - gridData, - borderData, - rangeAnnotations, - backgroundColor, - extraLinesData, - ]; -} - -/// defines arrangement of [barGroups], check [MainAxisAlignment] for more details. -enum BarChartAlignment { - start, - end, - center, - spaceEvenly, - spaceAround, - spaceBetween, -} - -/// Represents a group of rods (or bars) inside the [BarChart]. -/// -/// in the [BarChart] we have some rods, they can be grouped or not, -/// if you want to have grouped bars, simply put them in each group, -/// otherwise just pass one of them in each group. -class BarChartGroupData with EquatableMixin { - /// [BarChart] renders groups, and arrange them using [alignment], - /// [x] value defines the group's value in the x axis (set them incrementally). - /// it renders a list of [BarChartRodData] that represents a rod (or a bar) in the bar chart, - /// and applies [barsSpace] between them. - /// - /// you can show some tooltipIndicators (a popup with an information) - /// on top of each [BarChartRodData] using [showingTooltipIndicators], - /// just put indices you want to show it on top of them. - BarChartGroupData({ - required this.x, - bool? groupVertically, - List? barRods, - double? barsSpace, - List? showingTooltipIndicators, - }) : groupVertically = groupVertically ?? false, - barRods = barRods ?? const [], - barsSpace = barsSpace ?? 2, - showingTooltipIndicators = showingTooltipIndicators ?? const []; - - /// Order along the x axis in which titles, and titles only, will be shown. - /// - /// Note [x] does not reorder bars from [barRods]; instead, it gets the title - /// in [x] position through [SideTitles.getTitlesWidget] function. - @required - final int x; - - /// If set true, it will show bars below/above each other. - /// Otherwise, it will show bars beside each other. - final bool groupVertically; - - /// [BarChart] renders [barRods] that represents a rod (or a bar) in the bar chart. - final List barRods; - - /// [BarChart] applies [barsSpace] between [barRods] if [groupVertically] is false. - final double barsSpace; - - /// you can show some tooltipIndicators (a popup with an information) - /// on top of each [BarChartRodData] using [showingTooltipIndicators], - /// just put indices you want to show it on top of them. - final List showingTooltipIndicators; - - /// width of the group (sum of all [BarChartRodData]'s width and spaces) - double get width { - if (barRods.isEmpty) { - return 0; - } - - if (groupVertically) { - return barRods.map((rodData) => rodData.width).reduce(max); - } else { - final sumWidth = barRods - .map((rodData) => rodData.width) - .reduce((first, second) => first + second); - final spaces = (barRods.length - 1) * barsSpace; - - return sumWidth + spaces; - } - } - - /// Copies current [BarChartGroupData] to a new [BarChartGroupData], - /// and replaces provided values. - BarChartGroupData copyWith({ - int? x, - bool? groupVertically, - List? barRods, - double? barsSpace, - List? showingTooltipIndicators, - }) { - return BarChartGroupData( - x: x ?? this.x, - groupVertically: groupVertically ?? this.groupVertically, - barRods: barRods ?? this.barRods, - barsSpace: barsSpace ?? this.barsSpace, - showingTooltipIndicators: - showingTooltipIndicators ?? this.showingTooltipIndicators, - ); - } - - /// Lerps a [BarChartGroupData] based on [t] value, check [Tween.lerp]. - static BarChartGroupData lerp( - BarChartGroupData a, - BarChartGroupData b, - double t, - ) { - return BarChartGroupData( - x: (a.x + (b.x - a.x) * t).round(), - groupVertically: b.groupVertically, - barRods: lerpBarChartRodDataList(a.barRods, b.barRods, t), - barsSpace: lerpDouble(a.barsSpace, b.barsSpace, t), - showingTooltipIndicators: lerpIntList( - a.showingTooltipIndicators, - b.showingTooltipIndicators, - t, - ), - ); - } - - /// Used for equality check, see [EquatableMixin]. - @override - List get props => [ - x, - groupVertically, - barRods, - barsSpace, - showingTooltipIndicators, - ]; -} - -/// Holds data about rendering each rod (or bar) in the [BarChart]. -class BarChartRodData with EquatableMixin { - /// [BarChart] renders rods vertically from zero to [toY], - /// and the x is equivalent to the [BarChartGroupData.x] value. - /// - /// It renders each rod using [color], [width], and [borderRadius] for rounding corners and also [borderSide] for stroke border. - /// Optionally you can use [borderDashArray] if you want your borders to have dashed lines. - /// - /// This bar draws with provided [color] or [gradient]. - /// You must provide one of them. - /// - /// If you want to have a bar drawn in rear of this rod, use [backDrawRodData], - /// it uses to have a bar with a passive color in rear of the rod, - /// for example you can use it as the maximum value place holder. - /// - /// If you are a fan of stacked charts (If you don't know what is it, google it), - /// you can fill up the [rodStackItems] to have a Stacked Chart. - /// for example if you want to have a Stacked Chart with three colors: - /// ``` - /// BarChartRodData( - /// y: 9, - /// color: Colors.grey, - /// rodStackItems: [ - /// BarChartRodStackItem(0, 3, Colors.red), - /// BarChartRodStackItem(3, 6, Colors.green), - /// BarChartRodStackItem(6, 9, Colors.blue), - /// ] - /// ) - /// ``` - BarChartRodData({ - double? fromY, - required this.toY, - Color? color, - this.gradient, - double? width, - BorderRadius? borderRadius, - this.borderDashArray, - BorderSide? borderSide, - BackgroundBarChartRodData? backDrawRodData, - List? rodStackItems, - }) : fromY = fromY ?? 0, - color = - color ?? ((color == null && gradient == null) ? Colors.cyan : null), - width = width ?? 8, - borderRadius = Utils().normalizeBorderRadius(borderRadius, width ?? 8), - borderSide = Utils().normalizeBorderSide(borderSide, width ?? 8), - backDrawRodData = backDrawRodData ?? BackgroundBarChartRodData(), - rodStackItems = rodStackItems ?? const []; - - /// [BarChart] renders rods vertically from [fromY]. - final double fromY; - - /// [BarChart] renders rods vertically from [fromY] to [toY]. - final double toY; - - /// If provided, this [BarChartRodData] draws with this [color] - /// Otherwise we use [gradient] to draw the background. - /// It throws an exception if you provide both [color] and [gradient] - final Color? color; - - /// If provided, this [BarChartRodData] draws with this [gradient]. - /// Otherwise we use [color] to draw the background. - /// It throws an exception if you provide both [color] and [gradient] - final Gradient? gradient; - - /// [BarChart] renders each rods with this value. - final double width; - - /// If you want to have a rounded rod, set this value. - final BorderRadius? borderRadius; - - /// If you want to have dashed border, set this value. - final List? borderDashArray; - - /// If you want to have a border for rod, set this value. - final BorderSide borderSide; - - /// If you want to have a bar drawn in rear of this rod, use [backDrawRodData], - /// it uses to have a bar with a passive color in rear of the rod, - /// for example you can use it as the maximum value place holder. - final BackgroundBarChartRodData backDrawRodData; - - /// If you are a fan of stacked charts (If you don't know what is it, google it), - /// you can fill up the [rodStackItems] to have a Stacked Chart. - final List rodStackItems; - - /// Determines the upward or downward direction - bool isUpward() => toY >= fromY; - - /// Copies current [BarChartRodData] to a new [BarChartRodData], - /// and replaces provided values. - BarChartRodData copyWith({ - double? fromY, - double? toY, - Color? color, - Gradient? gradient, - double? width, - BorderRadius? borderRadius, - List? dashArray, - BorderSide? borderSide, - BackgroundBarChartRodData? backDrawRodData, - List? rodStackItems, - }) { - return BarChartRodData( - fromY: fromY ?? this.fromY, - toY: toY ?? this.toY, - color: color ?? this.color, - gradient: gradient ?? this.gradient, - width: width ?? this.width, - borderRadius: borderRadius ?? this.borderRadius, - borderDashArray: borderDashArray, - borderSide: borderSide ?? this.borderSide, - backDrawRodData: backDrawRodData ?? this.backDrawRodData, - rodStackItems: rodStackItems ?? this.rodStackItems, - ); - } - - /// Lerps a [BarChartRodData] based on [t] value, check [Tween.lerp]. - static BarChartRodData lerp(BarChartRodData a, BarChartRodData b, double t) { - return BarChartRodData( - // ignore: invalid_use_of_protected_member - gradient: a.gradient?.lerpTo(b.gradient, t), - color: Color.lerp(a.color, b.color, t), - width: lerpDouble(a.width, b.width, t), - borderRadius: BorderRadius.lerp(a.borderRadius, b.borderRadius, t), - borderDashArray: lerpIntList(a.borderDashArray, b.borderDashArray, t), - borderSide: BorderSide.lerp(a.borderSide, b.borderSide, t), - fromY: lerpDouble(a.fromY, b.fromY, t), - toY: lerpDouble(a.toY, b.toY, t)!, - backDrawRodData: BackgroundBarChartRodData.lerp( - a.backDrawRodData, - b.backDrawRodData, - t, - ), - rodStackItems: - lerpBarChartRodStackList(a.rodStackItems, b.rodStackItems, t), - ); - } - - /// Used for equality check, see [EquatableMixin]. - @override - List get props => [ - fromY, - toY, - width, - borderRadius, - borderDashArray, - borderSide, - backDrawRodData, - rodStackItems, - color, - gradient, - ]; -} - -/// A colored section of Stacked Chart rod item -/// -/// Each [BarChartRodData] can have a list of [BarChartRodStackItem] (with different colors -/// and position) to represent a Stacked Chart rod, -class BarChartRodStackItem with EquatableMixin { - /// Renders a section of Stacked Chart from [fromY] to [toY] with [color] - /// for example if you want to have a Stacked Chart with three colors: - /// ``` - /// BarChartRodData( - /// y: 9, - /// color: Colors.grey, - /// rodStackItems: [ - /// BarChartRodStackItem(0, 3, Colors.red), - /// BarChartRodStackItem(3, 6, Colors.green), - /// BarChartRodStackItem(6, 9, Colors.blue), - /// ] - /// ) - /// ``` - BarChartRodStackItem( - this.fromY, - this.toY, - this.color, [ - this.borderSide = Utils.defaultBorderSide, - ]); - - /// Renders a Stacked Chart section from [fromY] - final double fromY; - - /// Renders a Stacked Chart section to [toY] - final double toY; - - /// Renders a Stacked Chart section with [color] - final Color color; - - /// Renders border stroke for a Stacked Chart section - final BorderSide borderSide; - - /// Copies current [BarChartRodStackItem] to a new [BarChartRodStackItem], - /// and replaces provided values. - BarChartRodStackItem copyWith({ - double? fromY, - double? toY, - Color? color, - BorderSide? borderSide, - }) { - return BarChartRodStackItem( - fromY ?? this.fromY, - toY ?? this.toY, - color ?? this.color, - borderSide ?? this.borderSide, - ); - } - - /// Lerps a [BarChartRodStackItem] based on [t] value, check [Tween.lerp]. - static BarChartRodStackItem lerp( - BarChartRodStackItem a, - BarChartRodStackItem b, - double t, - ) { - return BarChartRodStackItem( - lerpDouble(a.fromY, b.fromY, t)!, - lerpDouble(a.toY, b.toY, t)!, - Color.lerp(a.color, b.color, t)!, - BorderSide.lerp(a.borderSide, b.borderSide, t), - ); - } - - /// Used for equality check, see [EquatableMixin]. - @override - List get props => [fromY, toY, color, borderSide]; -} - -/// Holds values to draw a rod in rear of the main rod. -/// -/// If you want to have a bar drawn in rear of the main rod, use [BarChartRodData.backDrawRodData], -/// it uses to have a bar with a passive color in rear of the rod, -/// for example you can use it as the maximum value place holder in rear of your rod. -class BackgroundBarChartRodData with EquatableMixin { - /// It will be rendered in rear of the main rod, - /// background starts to show from [fromY] to [toY], - /// It draws with [color] or [gradient]. You must provide one of them, - /// you prevent to show it, using [show] property. - BackgroundBarChartRodData({ - double? fromY, - double? toY, - bool? show, - Color? color, - this.gradient, - }) : fromY = fromY ?? 0, - toY = toY ?? 0, - show = show ?? false, - color = color ?? - ((color == null && gradient == null) ? Colors.blueGrey : null); - - /// Determines to show or hide this - final bool show; - - /// [fromY] is where background starts to show - final double fromY; - - /// background starts to show from [fromY] to [toY] - final double toY; - - /// If provided, Background draws with this [color] - /// Otherwise we use [gradient] to draw the background. - /// It throws an exception if you provide both [color] and [gradient] - final Color? color; - - /// If provided, background draws with this [gradient]. - /// Otherwise we use [color] to draw the background. - /// It throws an exception if you provide both [color] and [gradient] - final Gradient? gradient; - - /// Lerps a [BackgroundBarChartRodData] based on [t] value, check [Tween.lerp]. - static BackgroundBarChartRodData lerp( - BackgroundBarChartRodData a, - BackgroundBarChartRodData b, - double t, - ) { - return BackgroundBarChartRodData( - fromY: lerpDouble(a.fromY, b.fromY, t), - toY: lerpDouble(a.toY, b.toY, t), - color: Color.lerp(a.color, b.color, t), - // ignore: invalid_use_of_protected_member - gradient: a.gradient?.lerpTo(b.gradient, t), - show: b.show, - ); - } - - /// Used for equality check, see [EquatableMixin]. - @override - List get props => [ - show, - fromY, - toY, - color, - gradient, - ]; -} - -/// Holds data to handle touch events, and touch responses in the [BarChart]. -/// -/// There is a touch flow, explained [here](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/handle_touches.md) -/// in a simple way, each chart's renderer captures the touch events, and passes the pointerEvent -/// to the painter, and gets touched spot, and wraps it into a concrete [BarTouchResponse]. -class BarTouchData extends FlTouchData with EquatableMixin { - /// You can disable or enable the touch system using [enabled] flag, - /// - /// [touchCallback] notifies you about the happened touch/pointer events. - /// It gives you a [FlTouchEvent] which is the happened event such as [FlPointerHoverEvent], [FlTapUpEvent], ... - /// It also gives you a [BarTouchResponse] which contains information - /// about the elements that has touched. - /// - /// Using [mouseCursorResolver] you can change the mouse cursor - /// based on the provided [FlTouchEvent] and [BarTouchResponse] - /// - /// if [handleBuiltInTouches] is true, [BarChart] shows a tooltip popup on top of the bars if - /// touch occurs (or you can show it manually using, [BarChartGroupData.showingTooltipIndicators]), - /// You can customize this tooltip using [touchTooltipData]. - /// If you need to have a distance threshold for handling touches, use [touchExtraThreshold]. - /// If [allowTouchBarBackDraw] sets to true, touches will work - /// on [BarChartRodData.backDrawRodData] too (by default it only works on the main rods). - BarTouchData({ - bool? enabled, - BaseTouchCallback? touchCallback, - MouseCursorResolver? mouseCursorResolver, - Duration? longPressDuration, - BarTouchTooltipData? touchTooltipData, - EdgeInsets? touchExtraThreshold, - bool? allowTouchBarBackDraw, - bool? handleBuiltInTouches, - }) : touchTooltipData = touchTooltipData ?? BarTouchTooltipData(), - touchExtraThreshold = touchExtraThreshold ?? const EdgeInsets.all(4), - allowTouchBarBackDraw = allowTouchBarBackDraw ?? false, - handleBuiltInTouches = handleBuiltInTouches ?? true, - super( - enabled ?? true, - touchCallback, - mouseCursorResolver, - longPressDuration, - ); - - /// Configs of how touch tooltip popup. - final BarTouchTooltipData touchTooltipData; - - /// Distance threshold to handle the touch event. - final EdgeInsets touchExtraThreshold; - - /// Determines to handle touches on the back draw bar. - final bool allowTouchBarBackDraw; - - /// Determines to handle default built-in touch responses, - /// [BarTouchResponse] shows a tooltip popup above the touched spot. - final bool handleBuiltInTouches; - - /// Copies current [BarTouchData] to a new [BarTouchData], - /// and replaces provided values. - BarTouchData copyWith({ - bool? enabled, - BaseTouchCallback? touchCallback, - MouseCursorResolver? mouseCursorResolver, - Duration? longPressDuration, - BarTouchTooltipData? touchTooltipData, - EdgeInsets? touchExtraThreshold, - bool? allowTouchBarBackDraw, - bool? handleBuiltInTouches, - }) { - return BarTouchData( - enabled: enabled ?? this.enabled, - touchCallback: touchCallback ?? this.touchCallback, - mouseCursorResolver: mouseCursorResolver ?? this.mouseCursorResolver, - longPressDuration: longPressDuration ?? this.longPressDuration, - touchTooltipData: touchTooltipData ?? this.touchTooltipData, - touchExtraThreshold: touchExtraThreshold ?? this.touchExtraThreshold, - allowTouchBarBackDraw: - allowTouchBarBackDraw ?? this.allowTouchBarBackDraw, - handleBuiltInTouches: handleBuiltInTouches ?? this.handleBuiltInTouches, - ); - } - - /// Used for equality check, see [EquatableMixin]. - @override - List get props => [ - enabled, - touchCallback, - mouseCursorResolver, - longPressDuration, - touchTooltipData, - touchExtraThreshold, - allowTouchBarBackDraw, - handleBuiltInTouches, - ]; -} - -/// Controls showing tooltip on top or bottom. -enum TooltipDirection { - /// Tooltip shows on top if value is positive, on bottom if value is negative. - auto, - - /// Tooltip always shows on top. - top, - - /// Tooltip always shows on bottom. - bottom, -} - -/// Holds representation data for showing tooltip popup on top of rods. -class BarTouchTooltipData with EquatableMixin { - /// if [BarTouchData.handleBuiltInTouches] is true, - /// [BarChart] shows a tooltip popup on top of rods automatically when touch happens, - /// otherwise you can show it manually using [BarChartGroupData.showingTooltipIndicators]. - /// Tooltip shows on top of rods, with [tooltipBgColor] as a background color, - /// and you can set corner radius using [tooltipRoundedRadius]. - /// If you want to have a padding inside the tooltip, fill [tooltipPadding], - /// or If you want to have a bottom margin, set [tooltipMargin]. - /// Content of the tooltip will provide using [getTooltipItem] callback, you can override it - /// and pass your custom data to show in the tooltip. - /// You can restrict the tooltip's width using [maxContentWidth]. - /// Sometimes, [BarChart] shows the tooltip outside of the chart, - /// you can set [fitInsideHorizontally] true to force it to shift inside the chart horizontally, - /// also you can set [fitInsideVertically] true to force it to shift inside the chart vertically. - BarTouchTooltipData({ - Color? tooltipBgColor, - double? tooltipRoundedRadius, - EdgeInsets? tooltipPadding, - double? tooltipMargin, - FLHorizontalAlignment? tooltipHorizontalAlignment, - double? tooltipHorizontalOffset, - double? maxContentWidth, - GetBarTooltipItem? getTooltipItem, - bool? fitInsideHorizontally, - bool? fitInsideVertically, - TooltipDirection? direction, - double? rotateAngle, - BorderSide? tooltipBorder, - }) : tooltipBgColor = tooltipBgColor ?? Colors.blueGrey.darken(15), - tooltipRoundedRadius = tooltipRoundedRadius ?? 4, - tooltipPadding = tooltipPadding ?? - const EdgeInsets.symmetric(horizontal: 16, vertical: 8), - tooltipMargin = tooltipMargin ?? 16, - tooltipHorizontalAlignment = - tooltipHorizontalAlignment ?? FLHorizontalAlignment.center, - tooltipHorizontalOffset = tooltipHorizontalOffset ?? 0, - maxContentWidth = maxContentWidth ?? 120, - getTooltipItem = getTooltipItem ?? defaultBarTooltipItem, - fitInsideHorizontally = fitInsideHorizontally ?? false, - fitInsideVertically = fitInsideVertically ?? false, - direction = direction ?? TooltipDirection.auto, - rotateAngle = rotateAngle ?? 0.0, - tooltipBorder = tooltipBorder ?? BorderSide.none, - super(); - - /// The tooltip background color. - final Color tooltipBgColor; - - /// Sets a rounded radius for the tooltip. - final double tooltipRoundedRadius; - - /// Applies a padding for showing contents inside the tooltip. - final EdgeInsets tooltipPadding; - - /// Applies a bottom margin for showing tooltip on top of rods. - final double tooltipMargin; - - /// Controls showing tooltip on left side, right side or center aligned with rod, default is center - final FLHorizontalAlignment tooltipHorizontalAlignment; - - /// Applies horizontal offset for showing tooltip, default is zero. - final double tooltipHorizontalOffset; - - /// Restricts the tooltip's width. - final double maxContentWidth; - - /// Retrieves data for showing content inside the tooltip. - final GetBarTooltipItem getTooltipItem; - - /// Forces the tooltip to shift horizontally inside the chart, if overflow happens. - final bool fitInsideHorizontally; - - /// Forces the tooltip to shift vertically inside the chart, if overflow happens. - final bool fitInsideVertically; - - /// Controls showing tooltip on top or bottom, default is auto. - final TooltipDirection direction; - - /// Controls the rotation of the tooltip. - final double rotateAngle; - - /// The tooltip border color. - final BorderSide tooltipBorder; - - /// Used for equality check, see [EquatableMixin]. - @override - List get props => [ - tooltipBgColor, - tooltipRoundedRadius, - tooltipPadding, - tooltipMargin, - tooltipHorizontalAlignment, - tooltipHorizontalOffset, - maxContentWidth, - getTooltipItem, - fitInsideHorizontally, - fitInsideVertically, - rotateAngle, - tooltipBorder, - ]; -} - -/// Provides a [BarTooltipItem] for showing content inside the [BarTouchTooltipData]. -/// -/// You can override [BarTouchTooltipData.getTooltipItem], it gives you -/// [group], [groupIndex], [rod], and [rodIndex] that touch happened on, -/// then you should and pass your custom [BarTooltipItem] to show inside the tooltip popup. -typedef GetBarTooltipItem = BarTooltipItem? Function( - BarChartGroupData group, - int groupIndex, - BarChartRodData rod, - int rodIndex, -); - -/// Default implementation for [BarTouchTooltipData.getTooltipItem]. -BarTooltipItem? defaultBarTooltipItem( - BarChartGroupData group, - int groupIndex, - BarChartRodData rod, - int rodIndex, -) { - final color = rod.gradient?.colors.first ?? rod.color; - final textStyle = TextStyle( - color: color, - fontWeight: FontWeight.bold, - fontSize: 14, - ); - return BarTooltipItem(rod.toY.toString(), textStyle); -} - -/// Holds data needed for showing custom tooltip content. -class BarTooltipItem with EquatableMixin { - /// content of the tooltip, is a [text] String with a [textStyle], - /// [textDirection] and optional [children]. - BarTooltipItem( - this.text, - this.textStyle, { - this.textAlign = TextAlign.center, - this.textDirection = TextDirection.ltr, - this.children, - }); - - /// Text of the content. - final String text; - - /// TextStyle of the showing content. - final TextStyle textStyle; - - /// TextAlign of the showing content. - final TextAlign textAlign; - - /// Direction of showing text. - final TextDirection textDirection; - - /// List add further style and format to the text of the tooltip - final List? children; - - /// Used for equality check, see [EquatableMixin]. - @override - List get props => [ - text, - textStyle, - textAlign, - textDirection, - children, - ]; -} - -/// Holds information about touch response in the [BarChart]. -/// -/// You can override [BarTouchData.touchCallback] to handle touch events, -/// it gives you a [BarTouchResponse] and you can do whatever you want. -class BarTouchResponse extends BaseTouchResponse { - /// If touch happens, [BarChart] processes it internally and passes out a BarTouchedSpot - /// that contains a [spot], it gives you information about the touched spot. - BarTouchResponse(this.spot) : super(); - - /// Gives information about the touched spot - final BarTouchedSpot? spot; - - /// Copies current [BarTouchResponse] to a new [BarTouchResponse], - /// and replaces provided values. - BarTouchResponse copyWith({ - BarTouchedSpot? spot, - }) { - return BarTouchResponse( - spot ?? this.spot, - ); - } -} - -/// It gives you information about the touched spot. -class BarTouchedSpot extends TouchedSpot with EquatableMixin { - /// When touch happens, a [BarTouchedSpot] returns as a output, - /// it tells you where the touch happened. - /// [touchedBarGroup], and [touchedBarGroupIndex] tell you in which group touch happened, - /// [touchedRodData], and [touchedRodDataIndex] tell you in which rod touch happened, - /// [touchedStackItem], and [touchedStackItemIndex] tell you in which rod stack touch happened - /// ([touchedStackItemIndex] means nothing found). - /// You can also have the touched x and y in the chart as a [FlSpot] using [spot] value, - /// and you can have the local touch coordinates on the screen as a [Offset] using [offset] value. - BarTouchedSpot( - this.touchedBarGroup, - this.touchedBarGroupIndex, - this.touchedRodData, - this.touchedRodDataIndex, - this.touchedStackItem, - this.touchedStackItemIndex, - FlSpot spot, - Offset offset, - ) : super(spot, offset); - final BarChartGroupData touchedBarGroup; - final int touchedBarGroupIndex; - - final BarChartRodData touchedRodData; - final int touchedRodDataIndex; - - /// It can be null, if nothing found - final BarChartRodStackItem? touchedStackItem; - - /// It can be -1, if nothing found - final int touchedStackItemIndex; - - /// Used for equality check, see [EquatableMixin]. - @override - List get props => [ - touchedBarGroup, - touchedBarGroupIndex, - touchedRodData, - touchedRodDataIndex, - touchedStackItem, - touchedStackItemIndex, - spot, - offset, - ]; -} - -/// It lerps a [BarChartData] to another [BarChartData] (handles animation for updating values) -class BarChartDataTween extends Tween { - BarChartDataTween({required BarChartData begin, required BarChartData end}) - : super(begin: begin, end: end); - - /// Lerps a [BarChartData] based on [t] value, check [Tween.lerp]. - @override - BarChartData lerp(double t) => begin!.lerp(begin!, end!, t); -} diff --git a/lib/src/chart/bar_chart/bar_chart_helper.dart b/lib/src/chart/bar_chart/bar_chart_helper.dart deleted file mode 100644 index 10763170d6..0000000000 --- a/lib/src/chart/bar_chart/bar_chart_helper.dart +++ /dev/null @@ -1,89 +0,0 @@ -import 'dart:math'; - -import 'package:equatable/equatable.dart'; -import 'package:fl_chart/src/chart/bar_chart/bar_chart_data.dart'; -import 'package:fl_chart/src/utils/list_wrapper.dart'; - -/// Contains anything that helps BarChart works -class BarChartHelper { - /// Contains List of cached results, base on [List] - /// - /// We use it to prevent redundant calculations - static final Map, BarChartMinMaxAxisValues> - _cachedResults = {}; - - /// Calculates minY, and maxY based on [barGroups], - /// returns cached values, to prevent redundant calculations. - static BarChartMinMaxAxisValues calculateMaxAxisValues( - List barGroups, - ) { - if (barGroups.isEmpty) { - return BarChartMinMaxAxisValues(0, 0); - } - - final listWrapper = barGroups.toWrapperClass(); - - if (_cachedResults.containsKey(listWrapper)) { - return _cachedResults[listWrapper]!.copyWith(readFromCache: true); - } - - final BarChartGroupData barGroup; - try { - barGroup = barGroups.firstWhere((element) => element.barRods.isNotEmpty); - } catch (e) { - // There is no barChartGroupData with at least one barRod - return BarChartMinMaxAxisValues(0, 0); - } - - var maxY = max(barGroup.barRods[0].fromY, barGroup.barRods[0].toY); - var minY = min(barGroup.barRods[0].fromY, barGroup.barRods[0].toY); - - for (var i = 0; i < barGroups.length; i++) { - final barGroup = barGroups[i]; - for (var j = 0; j < barGroup.barRods.length; j++) { - final rod = barGroup.barRods[j]; - - maxY = max(maxY, rod.fromY); - minY = min(minY, rod.fromY); - - maxY = max(maxY, rod.toY); - minY = min(minY, rod.toY); - - if (rod.backDrawRodData.show) { - maxY = max(maxY, rod.backDrawRodData.fromY); - minY = min(minY, rod.backDrawRodData.fromY); - maxY = max(maxY, rod.backDrawRodData.toY); - minY = min(minY, rod.backDrawRodData.toY); - } - } - } - - final result = BarChartMinMaxAxisValues(minY, maxY); - _cachedResults[listWrapper] = result; - return result; - } -} - -/// Holds minY, and maxY for use in [BarChartData] -class BarChartMinMaxAxisValues with EquatableMixin { - BarChartMinMaxAxisValues(this.minY, this.maxY, {this.readFromCache = false}); - - final double minY; - final double maxY; - final bool readFromCache; - - @override - List get props => [minY, maxY, readFromCache]; - - BarChartMinMaxAxisValues copyWith({ - double? minY, - double? maxY, - bool? readFromCache, - }) { - return BarChartMinMaxAxisValues( - minY ?? this.minY, - maxY ?? this.maxY, - readFromCache: readFromCache ?? this.readFromCache, - ); - } -} diff --git a/lib/src/chart/bar_chart/bar_chart_painter.dart b/lib/src/chart/bar_chart/bar_chart_painter.dart deleted file mode 100644 index 0214682faf..0000000000 --- a/lib/src/chart/bar_chart/bar_chart_painter.dart +++ /dev/null @@ -1,718 +0,0 @@ -import 'dart:core'; -import 'dart:math'; - -import 'package:fl_chart/fl_chart.dart'; -import 'package:fl_chart/src/chart/base/axis_chart/axis_chart_painter.dart'; -import 'package:fl_chart/src/chart/base/base_chart/base_chart_painter.dart'; -import 'package:fl_chart/src/extensions/bar_chart_data_extension.dart'; -import 'package:fl_chart/src/extensions/paint_extension.dart'; -import 'package:fl_chart/src/extensions/path_extension.dart'; -import 'package:fl_chart/src/extensions/rrect_extension.dart'; -import 'package:fl_chart/src/utils/canvas_wrapper.dart'; -import 'package:fl_chart/src/utils/utils.dart'; -import 'package:flutter/material.dart'; - -/// Paints [BarChartData] in the canvas, it can be used in a [CustomPainter] -class BarChartPainter extends AxisChartPainter { - /// Paints [dataList] into canvas, it is the animating [BarChartData], - /// [targetData] is the animation's target and remains the same - /// during animation, then we should use it when we need to show - /// tooltips or something like that, because [dataList] is changing constantly. - /// - /// [textScale] used for scaling texts inside the chart, - /// parent can use [MediaQuery.textScaleFactor] to respect - /// the system's font size. - BarChartPainter() : super() { - _barPaint = Paint()..style = PaintingStyle.fill; - _barStrokePaint = Paint()..style = PaintingStyle.stroke; - - _bgTouchTooltipPaint = Paint() - ..style = PaintingStyle.fill - ..color = Colors.white; - - _borderTouchTooltipPaint = Paint() - ..style = PaintingStyle.stroke - ..color = Colors.transparent - ..strokeWidth = 1.0; - } - late Paint _barPaint; - late Paint _barStrokePaint; - late Paint _bgTouchTooltipPaint; - late Paint _borderTouchTooltipPaint; - - List? _groupBarsPosition; - - /// Paints [BarChartData] into the provided canvas. - @override - void paint( - BuildContext context, - CanvasWrapper canvasWrapper, - PaintHolder holder, - ) { - super.paint(context, canvasWrapper, holder); - final data = holder.data; - final targetData = holder.targetData; - - if (data.barGroups.isEmpty) { - return; - } - - final groupsX = data.calculateGroupsX(canvasWrapper.size.width); - _groupBarsPosition = calculateGroupAndBarsPosition( - canvasWrapper.size, - groupsX, - data.barGroups, - ); - - if (!data.extraLinesData.extraLinesOnTop) { - super.drawHorizontalLines( - context, - canvasWrapper, - holder, - canvasWrapper.size, - ); - } - - drawBars(canvasWrapper, _groupBarsPosition!, holder); - - if (data.extraLinesData.extraLinesOnTop) { - super.drawHorizontalLines( - context, - canvasWrapper, - holder, - canvasWrapper.size, - ); - } - - for (var i = 0; i < targetData.barGroups.length; i++) { - final barGroup = targetData.barGroups[i]; - for (var j = 0; j < barGroup.barRods.length; j++) { - if (!barGroup.showingTooltipIndicators.contains(j)) { - continue; - } - final barRod = barGroup.barRods[j]; - - drawTouchTooltip( - context, - canvasWrapper, - _groupBarsPosition!, - targetData.barTouchData.touchTooltipData, - barGroup, - i, - barRod, - j, - holder, - ); - } - } - } - - /// Calculates bars position alongside group positions. - @visibleForTesting - List calculateGroupAndBarsPosition( - Size viewSize, - List groupsX, - List barGroups, - ) { - if (groupsX.length != barGroups.length) { - throw Exception('inconsistent state groupsX.length != barGroups.length'); - } - - final groupBarsPosition = []; - for (var i = 0; i < barGroups.length; i++) { - final barGroup = barGroups[i]; - final groupX = groupsX[i]; - if (barGroup.groupVertically) { - groupBarsPosition.add( - GroupBarsPosition( - groupX, - List.generate(barGroup.barRods.length, (index) => groupX), - ), - ); - continue; - } - - var tempX = 0.0; - final barsX = []; - barGroup.barRods.asMap().forEach((barIndex, barRod) { - final widthHalf = barRod.width / 2; - barsX.add(groupX - (barGroup.width / 2) + tempX + widthHalf); - tempX += barRod.width + barGroup.barsSpace; - }); - groupBarsPosition.add(GroupBarsPosition(groupX, barsX)); - } - return groupBarsPosition; - } - - @visibleForTesting - void drawBars( - CanvasWrapper canvasWrapper, - List groupBarsPosition, - PaintHolder holder, - ) { - final data = holder.data; - final viewSize = canvasWrapper.size; - - for (var i = 0; i < data.barGroups.length; i++) { - final barGroup = data.barGroups[i]; - for (var j = 0; j < barGroup.barRods.length; j++) { - final barRod = barGroup.barRods[j]; - final widthHalf = barRod.width / 2; - final borderRadius = - barRod.borderRadius ?? BorderRadius.circular(barRod.width / 2); - final borderSide = barRod.borderSide; - - final x = groupBarsPosition[i].barsX[j]; - - final left = x - widthHalf; - final right = x + widthHalf; - final cornerHeight = - max(borderRadius.topLeft.y, borderRadius.topRight.y) + - max(borderRadius.bottomLeft.y, borderRadius.bottomRight.y); - - RRect barRRect; - - /// Draw [BackgroundBarChartRodData] - if (barRod.backDrawRodData.show && - barRod.backDrawRodData.toY != barRod.backDrawRodData.fromY) { - if (barRod.backDrawRodData.toY > barRod.backDrawRodData.fromY) { - // positive - final bottom = getPixelY( - max(data.minY, barRod.backDrawRodData.fromY), - viewSize, - holder, - ); - final top = min( - getPixelY(barRod.backDrawRodData.toY, viewSize, holder), - bottom - cornerHeight, - ); - - barRRect = RRect.fromLTRBAndCorners( - left, - top, - right, - bottom, - topLeft: borderRadius.topLeft, - topRight: borderRadius.topRight, - bottomLeft: borderRadius.bottomLeft, - bottomRight: borderRadius.bottomRight, - ); - } else { - // negative - final top = getPixelY( - min(data.maxY, barRod.backDrawRodData.fromY), - viewSize, - holder, - ); - final bottom = max( - getPixelY(barRod.backDrawRodData.toY, viewSize, holder), - top + cornerHeight, - ); - - barRRect = RRect.fromLTRBAndCorners( - left, - top, - right, - bottom, - topLeft: borderRadius.topLeft, - topRight: borderRadius.topRight, - bottomLeft: borderRadius.bottomLeft, - bottomRight: borderRadius.bottomRight, - ); - } - - final backDraw = barRod.backDrawRodData; - _barPaint.setColorOrGradient( - backDraw.color, - backDraw.gradient, - barRRect.getRect(), - ); - canvasWrapper.drawRRect(barRRect, _barPaint); - } - - // draw Main Rod - if (barRod.toY != barRod.fromY) { - if (barRod.toY > barRod.fromY) { - // positive - final bottom = - getPixelY(max(data.minY, barRod.fromY), viewSize, holder); - final top = min( - getPixelY(barRod.toY, viewSize, holder), - bottom - cornerHeight, - ); - - barRRect = RRect.fromLTRBAndCorners( - left, - top, - right, - bottom, - topLeft: borderRadius.topLeft, - topRight: borderRadius.topRight, - bottomLeft: borderRadius.bottomLeft, - bottomRight: borderRadius.bottomRight, - ); - } else { - // negative - final top = - getPixelY(min(data.maxY, barRod.fromY), viewSize, holder); - final bottom = max( - getPixelY(barRod.toY, viewSize, holder), - top + cornerHeight, - ); - - barRRect = RRect.fromLTRBAndCorners( - left, - top, - right, - bottom, - topLeft: borderRadius.topLeft, - topRight: borderRadius.topRight, - bottomLeft: borderRadius.bottomLeft, - bottomRight: borderRadius.bottomRight, - ); - } - _barPaint.setColorOrGradient( - barRod.color, - barRod.gradient, - barRRect.getRect(), - ); - canvasWrapper.drawRRect(barRRect, _barPaint); - - // draw rod stack - if (barRod.rodStackItems.isNotEmpty) { - for (var i = 0; i < barRod.rodStackItems.length; i++) { - final stackItem = barRod.rodStackItems[i]; - final stackFromY = getPixelY(stackItem.fromY, viewSize, holder); - final stackToY = getPixelY(stackItem.toY, viewSize, holder); - - final isNegative = stackItem.toY < stackItem.fromY; - _barPaint.color = stackItem.color; - final rect = isNegative - ? Rect.fromLTRB(left, stackFromY, right, stackToY) - : Rect.fromLTRB(left, stackToY, right, stackFromY); - canvasWrapper - ..save() - ..clipRect(rect) - ..drawRRect(barRRect, _barPaint) - ..restore(); - - // draw border stroke for each stack item - drawStackItemBorderStroke( - canvasWrapper, - stackItem, - i, - barRod.rodStackItems.length, - barRod.width, - barRRect, - viewSize, - holder, - ); - } - } - - // draw border stroke - if (borderSide.width > 0 && borderSide.color.opacity > 0) { - _barStrokePaint - ..color = borderSide.color - ..strokeWidth = borderSide.width; - - final borderPath = Path()..addRRect(barRRect); - - canvasWrapper.drawPath( - borderPath.toDashedPath( - barRod.borderDashArray, - ), - _barStrokePaint, - ); - } - } - } - } - } - - @visibleForTesting - void drawTouchTooltip( - BuildContext context, - CanvasWrapper canvasWrapper, - List groupPositions, - BarTouchTooltipData tooltipData, - BarChartGroupData showOnBarGroup, - int barGroupIndex, - BarChartRodData showOnRodData, - int barRodIndex, - PaintHolder holder, - ) { - final viewSize = canvasWrapper.size; - - const textsBelowMargin = 4; - - final tooltipItem = tooltipData.getTooltipItem( - showOnBarGroup, - barGroupIndex, - showOnRodData, - barRodIndex, - ); - - if (tooltipItem == null) { - return; - } - - final span = TextSpan( - style: Utils().getThemeAwareTextStyle(context, tooltipItem.textStyle), - text: tooltipItem.text, - children: tooltipItem.children, - ); - - final tp = TextPainter( - text: span, - textAlign: tooltipItem.textAlign, - textDirection: tooltipItem.textDirection, - textScaler: holder.textScaler, - )..layout(maxWidth: tooltipData.maxContentWidth); - - /// creating TextPainters to calculate the width and height of the tooltip - final drawingTextPainter = tp; - - /// biggerWidth - /// some texts maybe larger, then we should - /// draw the tooltip' width as wide as biggerWidth - /// - /// sumTextsHeight - /// sum up all Texts height, then we should - /// draw the tooltip's height as tall as sumTextsHeight - final textWidth = drawingTextPainter.width; - final textHeight = drawingTextPainter.height + textsBelowMargin; - - /// if we have multiple bar lines, - /// there are more than one FlCandidate on touch area, - /// we should get the most top FlSpot Offset to draw the tooltip on top of it - final barOffset = Offset( - groupPositions[barGroupIndex].barsX[barRodIndex], - getPixelY(showOnRodData.toY, viewSize, holder), - ); - - final tooltipWidth = textWidth + tooltipData.tooltipPadding.horizontal; - final tooltipHeight = textHeight + tooltipData.tooltipPadding.vertical; - - final zeroY = getPixelY(0, viewSize, holder); - final barTopY = min(zeroY, barOffset.dy); - final barBottomY = max(zeroY, barOffset.dy); - final drawTooltipOnTop = tooltipData.direction == TooltipDirection.top || - (tooltipData.direction == TooltipDirection.auto && - showOnRodData.isUpward()); - final tooltipTop = drawTooltipOnTop - ? barTopY - tooltipHeight - tooltipData.tooltipMargin - : barBottomY + tooltipData.tooltipMargin; - - final tooltipLeft = getTooltipLeft( - barOffset.dx, - tooltipWidth, - tooltipData.tooltipHorizontalAlignment, - tooltipData.tooltipHorizontalOffset, - ); - - /// draw the background rect with rounded radius - // ignore: omit_local_variable_types - Rect rect = Rect.fromLTWH( - tooltipLeft, - tooltipTop, - tooltipWidth, - tooltipHeight, - ); - - if (tooltipData.fitInsideHorizontally) { - if (rect.left < 0) { - final shiftAmount = 0 - rect.left; - rect = Rect.fromLTRB( - rect.left + shiftAmount, - rect.top, - rect.right + shiftAmount, - rect.bottom, - ); - } - - if (rect.right > viewSize.width) { - final shiftAmount = rect.right - viewSize.width; - rect = Rect.fromLTRB( - rect.left - shiftAmount, - rect.top, - rect.right - shiftAmount, - rect.bottom, - ); - } - } - - if (tooltipData.fitInsideVertically) { - if (rect.top < 0) { - final shiftAmount = 0 - rect.top; - rect = Rect.fromLTRB( - rect.left, - rect.top + shiftAmount, - rect.right, - rect.bottom + shiftAmount, - ); - } - - if (rect.bottom > viewSize.height) { - final shiftAmount = rect.bottom - viewSize.height; - rect = Rect.fromLTRB( - rect.left, - rect.top - shiftAmount, - rect.right, - rect.bottom - shiftAmount, - ); - } - } - - final radius = Radius.circular(tooltipData.tooltipRoundedRadius); - final roundedRect = RRect.fromRectAndCorners( - rect, - topLeft: radius, - topRight: radius, - bottomLeft: radius, - bottomRight: radius, - ); - _bgTouchTooltipPaint.color = tooltipData.tooltipBgColor; - - final rotateAngle = tooltipData.rotateAngle; - final rectRotationOffset = - Offset(0, Utils().calculateRotationOffset(rect.size, rotateAngle).dy); - final rectDrawOffset = Offset(roundedRect.left, roundedRect.top); - - final textRotationOffset = - Utils().calculateRotationOffset(tp.size, rotateAngle); - - /// draw the texts one by one in below of each other - final top = tooltipData.tooltipPadding.top; - final drawOffset = Offset( - rect.center.dx - (tp.width / 2), - rect.topCenter.dy + top - textRotationOffset.dy + rectRotationOffset.dy, - ); - - if (tooltipData.tooltipBorder != BorderSide.none) { - _borderTouchTooltipPaint - ..color = tooltipData.tooltipBorder.color - ..strokeWidth = tooltipData.tooltipBorder.width; - } - - canvasWrapper.drawRotated( - size: rect.size, - rotationOffset: rectRotationOffset, - drawOffset: rectDrawOffset, - angle: rotateAngle, - drawCallback: () { - canvasWrapper - ..drawRRect(roundedRect, _bgTouchTooltipPaint) - ..drawRRect(roundedRect, _borderTouchTooltipPaint) - ..drawText(tp, drawOffset); - }, - ); - } - - @visibleForTesting - void drawStackItemBorderStroke( - CanvasWrapper canvasWrapper, - BarChartRodStackItem stackItem, - int index, - int rodStacksSize, - double barThickSize, - RRect barRRect, - Size drawSize, - PaintHolder holder, - ) { - if (stackItem.borderSide.width == 0 || - stackItem.borderSide.color.opacity == 0) return; - RRect strokeBarRect; - if (index == 0) { - strokeBarRect = RRect.fromLTRBAndCorners( - barRRect.left, - getPixelY(stackItem.toY, drawSize, holder), - barRRect.right, - getPixelY(stackItem.fromY, drawSize, holder), - bottomLeft: - stackItem.fromY < stackItem.toY ? barRRect.blRadius : Radius.zero, - bottomRight: - stackItem.fromY < stackItem.toY ? barRRect.brRadius : Radius.zero, - topLeft: - stackItem.fromY < stackItem.toY ? Radius.zero : barRRect.tlRadius, - topRight: - stackItem.fromY < stackItem.toY ? Radius.zero : barRRect.trRadius, - ); - } else if (index == rodStacksSize - 1) { - strokeBarRect = RRect.fromLTRBAndCorners( - barRRect.left, - max(getPixelY(stackItem.toY, drawSize, holder), barRRect.top), - barRRect.right, - getPixelY(stackItem.fromY, drawSize, holder), - bottomLeft: - stackItem.fromY < stackItem.toY ? Radius.zero : barRRect.blRadius, - bottomRight: - stackItem.fromY < stackItem.toY ? Radius.zero : barRRect.brRadius, - topLeft: - stackItem.fromY < stackItem.toY ? barRRect.tlRadius : Radius.zero, - topRight: - stackItem.fromY < stackItem.toY ? barRRect.trRadius : Radius.zero, - ); - } else { - strokeBarRect = RRect.fromLTRBR( - barRRect.left, - getPixelY(stackItem.toY, drawSize, holder), - barRRect.right, - getPixelY(stackItem.fromY, drawSize, holder), - Radius.zero, - ); - } - _barStrokePaint - ..color = stackItem.borderSide.color - ..strokeWidth = min(stackItem.borderSide.width, barThickSize / 2); - canvasWrapper.drawRRect(strokeBarRect, _barStrokePaint); - } - - /// Makes a [BarTouchedSpot] based on the provided [localPosition] - /// - /// Processes [localPosition] and checks - /// the elements of the chart that are near the offset, - /// then makes a [BarTouchedSpot] from the elements that has been touched. - /// - /// Returns null if finds nothing! - BarTouchedSpot? handleTouch( - Offset localPosition, - Size viewSize, - PaintHolder holder, - ) { - final data = holder.data; - final targetData = holder.targetData; - final touchedPoint = localPosition; - if (targetData.barGroups.isEmpty) { - return null; - } - - if (_groupBarsPosition == null) { - final groupsX = data.calculateGroupsX(viewSize.width); - _groupBarsPosition = - calculateGroupAndBarsPosition(viewSize, groupsX, data.barGroups); - } - - /// Find the nearest barRod - for (var i = 0; i < _groupBarsPosition!.length; i++) { - final groupBarPos = _groupBarsPosition![i]; - for (var j = 0; j < groupBarPos.barsX.length; j++) { - final barX = groupBarPos.barsX[j]; - final barWidth = targetData.barGroups[i].barRods[j].width; - final halfBarWidth = barWidth / 2; - - double barTopY; - double barBotY; - - final isUpward = targetData.barGroups[i].barRods[j].isUpward(); - if (isUpward) { - barTopY = getPixelY( - targetData.barGroups[i].barRods[j].toY, - viewSize, - holder, - ); - barBotY = getPixelY( - targetData.barGroups[i].barRods[j].fromY + - targetData.barGroups[i].barRods[j].backDrawRodData.fromY, - viewSize, - holder, - ); - } else { - barTopY = getPixelY( - targetData.barGroups[i].barRods[j].fromY + - targetData.barGroups[i].barRods[j].backDrawRodData.fromY, - viewSize, - holder, - ); - barBotY = getPixelY( - targetData.barGroups[i].barRods[j].toY, - viewSize, - holder, - ); - } - - final backDrawBarY = getPixelY( - targetData.barGroups[i].barRods[j].backDrawRodData.toY, - viewSize, - holder, - ); - final touchExtraThreshold = targetData.barTouchData.touchExtraThreshold; - - final isXInTouchBounds = (touchedPoint.dx <= - barX + halfBarWidth + touchExtraThreshold.right) && - (touchedPoint.dx >= barX - halfBarWidth - touchExtraThreshold.left); - - bool isYInBarBounds; - if (isUpward) { - isYInBarBounds = - (touchedPoint.dy <= barBotY + touchExtraThreshold.bottom) && - (touchedPoint.dy >= barTopY - touchExtraThreshold.top); - } else { - isYInBarBounds = - (touchedPoint.dy >= barTopY - touchExtraThreshold.top) && - (touchedPoint.dy <= barBotY + touchExtraThreshold.bottom); - } - - bool isYInBarBackDrawBounds; - if (isUpward) { - isYInBarBackDrawBounds = - (touchedPoint.dy <= barBotY + touchExtraThreshold.bottom) && - (touchedPoint.dy >= backDrawBarY - touchExtraThreshold.top); - } else { - isYInBarBackDrawBounds = (touchedPoint.dy >= - barTopY - touchExtraThreshold.top) && - (touchedPoint.dy <= backDrawBarY + touchExtraThreshold.bottom); - } - - final isYInTouchBounds = - (targetData.barTouchData.allowTouchBarBackDraw && - isYInBarBackDrawBounds) || - isYInBarBounds; - - if (isXInTouchBounds && isYInTouchBounds) { - final nearestGroup = targetData.barGroups[i]; - final nearestBarRod = nearestGroup.barRods[j]; - final nearestSpot = - FlSpot(nearestGroup.x.toDouble(), nearestBarRod.toY); - final nearestSpotPos = - Offset(barX, getPixelY(nearestSpot.y, viewSize, holder)); - - var touchedStackIndex = -1; - BarChartRodStackItem? touchedStack; - for (var stackIndex = 0; - stackIndex < nearestBarRod.rodStackItems.length; - stackIndex++) { - final stackItem = nearestBarRod.rodStackItems[stackIndex]; - final fromPixel = getPixelY(stackItem.fromY, viewSize, holder); - final toPixel = getPixelY(stackItem.toY, viewSize, holder); - if (touchedPoint.dy <= fromPixel && touchedPoint.dy >= toPixel) { - touchedStackIndex = stackIndex; - touchedStack = stackItem; - break; - } - } - - return BarTouchedSpot( - nearestGroup, - i, - nearestBarRod, - j, - touchedStack, - touchedStackIndex, - nearestSpot, - nearestSpotPos, - ); - } - } - } - - return null; - } -} - -@visibleForTesting -class GroupBarsPosition { - GroupBarsPosition(this.groupX, this.barsX); - final double groupX; - final List barsX; -} diff --git a/lib/src/chart/bar_chart/bar_chart_renderer.dart b/lib/src/chart/bar_chart/bar_chart_renderer.dart deleted file mode 100644 index fca83a4d5a..0000000000 --- a/lib/src/chart/bar_chart/bar_chart_renderer.dart +++ /dev/null @@ -1,108 +0,0 @@ -import 'package:fl_chart/fl_chart.dart'; -import 'package:fl_chart/src/chart/bar_chart/bar_chart_painter.dart'; -import 'package:fl_chart/src/chart/base/base_chart/base_chart_painter.dart'; -import 'package:fl_chart/src/chart/base/base_chart/render_base_chart.dart'; -import 'package:fl_chart/src/utils/canvas_wrapper.dart'; -import 'package:flutter/cupertino.dart'; - -// coverage:ignore-start - -/// Low level BarChart Widget. -class BarChartLeaf extends LeafRenderObjectWidget { - const BarChartLeaf({super.key, required this.data, required this.targetData}); - - final BarChartData data; - final BarChartData targetData; - - @override - RenderBarChart createRenderObject(BuildContext context) => RenderBarChart( - context, - data, - targetData, - MediaQuery.of(context).textScaler, - ); - - @override - void updateRenderObject(BuildContext context, RenderBarChart renderObject) { - renderObject - ..data = data - ..targetData = targetData - ..textScaler = MediaQuery.of(context).textScaler - ..buildContext = context; - } -} -// coverage:ignore-end - -/// Renders our BarChart, also handles hitTest. -class RenderBarChart extends RenderBaseChart { - RenderBarChart( - BuildContext context, - BarChartData data, - BarChartData targetData, - TextScaler textScaler, - ) : _data = data, - _targetData = targetData, - _textScaler = textScaler, - super(targetData.barTouchData, context); - - BarChartData get data => _data; - BarChartData _data; - - set data(BarChartData value) { - if (_data == value) return; - _data = value; - markNeedsPaint(); - } - - BarChartData get targetData => _targetData; - BarChartData _targetData; - - set targetData(BarChartData value) { - if (_targetData == value) return; - _targetData = value; - super.updateBaseTouchData(_targetData.barTouchData); - markNeedsPaint(); - } - - TextScaler get textScaler => _textScaler; - TextScaler _textScaler; - - set textScaler(TextScaler value) { - if (_textScaler == value) return; - _textScaler = value; - markNeedsPaint(); - } - - // We couldn't mock [size] property of this class, that's why we have this - @visibleForTesting - Size? mockTestSize; - - @visibleForTesting - BarChartPainter painter = BarChartPainter(); - - PaintHolder get paintHolder => - PaintHolder(data, targetData, textScaler); - - @override - void paint(PaintingContext context, Offset offset) { - final canvas = context.canvas - ..save() - ..translate(offset.dx, offset.dy); - painter.paint( - buildContext, - CanvasWrapper(canvas, mockTestSize ?? size), - paintHolder, - ); - canvas.restore(); - } - - @override - BarTouchResponse getResponseAtLocation(Offset localPosition) { - final touchedSpot = painter.handleTouch( - localPosition, - mockTestSize ?? size, - paintHolder, - ); - return BarTouchResponse(touchedSpot); - } -} diff --git a/lib/src/chart/base/axis_chart/axis_chart_data.dart b/lib/src/chart/base/axis_chart/axis_chart_data.dart deleted file mode 100644 index ee07e06219..0000000000 --- a/lib/src/chart/base/axis_chart/axis_chart_data.dart +++ /dev/null @@ -1,1314 +0,0 @@ -// coverage:ignore-file -import 'dart:ui'; - -import 'package:equatable/equatable.dart'; -import 'package:fl_chart/fl_chart.dart'; -import 'package:fl_chart/src/chart/base/axis_chart/axis_chart_painter.dart'; -import 'package:fl_chart/src/utils/lerp.dart'; -import 'package:flutter/material.dart' hide Image; - -/// This is the base class for axis base charts data -/// that contains a [FlGridData] that holds data for showing grid lines, -/// also we have [minX], [maxX], [minY], [maxY] values -/// we use them to determine how much is the scale of chart, -/// and calculate x and y according to the scale. -/// each child have to set it in their constructor. -abstract class AxisChartData extends BaseChartData with EquatableMixin { - AxisChartData({ - FlGridData? gridData, - required this.titlesData, - RangeAnnotations? rangeAnnotations, - required this.minX, - required this.maxX, - double? baselineX, - required this.minY, - required this.maxY, - double? baselineY, - FlClipData? clipData, - Color? backgroundColor, - super.borderData, - required super.touchData, - ExtraLinesData? extraLinesData, - }) : gridData = gridData ?? const FlGridData(), - rangeAnnotations = rangeAnnotations ?? const RangeAnnotations(), - baselineX = baselineX ?? 0, - baselineY = baselineY ?? 0, - clipData = clipData ?? const FlClipData.none(), - backgroundColor = backgroundColor ?? Colors.transparent, - extraLinesData = extraLinesData ?? const ExtraLinesData(); - final FlGridData gridData; - final FlTitlesData titlesData; - final RangeAnnotations rangeAnnotations; - - double minX; - double maxX; - double baselineX; - double minY; - double maxY; - double baselineY; - - /// clip the chart to the border (prevent draw outside the border) - FlClipData clipData; - - /// A background color which is drawn behind the chart. - Color backgroundColor; - - /// Difference of [maxY] and [minY] - double get verticalDiff => maxY - minY; - - /// Difference of [maxX] and [minX] - double get horizontalDiff => maxX - minX; - - /// Extra horizontal or vertical lines to draw on the chart. - final ExtraLinesData extraLinesData; - - /// Used for equality check, see [EquatableMixin]. - @override - List get props => [ - gridData, - titlesData, - rangeAnnotations, - minX, - maxX, - baselineX, - minY, - maxY, - baselineY, - clipData, - backgroundColor, - borderData, - touchData, - extraLinesData, - ]; -} - -/// Represents a side of the chart -enum AxisSide { left, top, right, bottom } - -/// Contains meta information about the drawing title. -class TitleMeta { - TitleMeta({ - required this.min, - required this.max, - required this.parentAxisSize, - required this.axisPosition, - required this.appliedInterval, - required this.sideTitles, - required this.formattedValue, - required this.axisSide, - }); - - /// min axis value - final double min; - - /// max axis value - final double max; - - /// parent axis max width/height - final double parentAxisSize; - - /// The position (in pixel) that applied to - /// this drawing title along its axis. - final double axisPosition; - - /// The interval that applied to this drawing title - final double appliedInterval; - - /// Reference of [SideTitles] object. - final SideTitles sideTitles; - - /// Formatted value that is suitable to show, for example 100, 2k, 5m, ... - final String formattedValue; - - /// Determines the axis side of titles (left, top, right, bottom) - final AxisSide axisSide; -} - -/// It gives you the axis value and gets a String value based on it. -typedef GetTitleWidgetFunction = Widget Function(double value, TitleMeta meta); - -/// The default [SideTitles.getTitlesWidget] function. -/// -/// formats the axis number to a shorter string using [formatNumber]. -Widget defaultGetTitle(double value, TitleMeta meta) { - return SideTitleWidget( - axisSide: meta.axisSide, - child: Text( - meta.formattedValue, - ), - ); -} - -/// Holds data for showing label values on axis numbers -class SideTitles with EquatableMixin { - /// It draws some title on an axis, per axis values, - /// [showTitles] determines showing or hiding this side, - /// - /// Texts are depend on the axis value, you can override [getTitles], - /// it gives you an axis value (double value) and a [TitleMeta] which contains - /// additional information about the axis. - /// Then you should return a [Widget] to show. - /// It allows you to do anything you want, For example you can show icons - /// instead of texts, because it accepts a [Widget] - /// - /// [reservedSize] determines the maximum space that your titles need, - /// (All titles will stretch using this value) - /// - /// Texts are showing with provided [interval]. If you don't provide anything, - /// we try to find a suitable value to set as [interval] under the hood. - const SideTitles({ - this.showTitles = false, - this.getTitlesWidget = defaultGetTitle, - this.reservedSize = 22, - this.interval, - }) : assert(interval != 0, "SideTitles.interval couldn't be zero"); - - /// Determines showing or hiding this side titles - final bool showTitles; - - /// You can override it to pass your custom widget to show in each axis value - /// We recommend you to use [SideTitleWidget]. - final GetTitleWidgetFunction getTitlesWidget; - - /// It determines the maximum space that your titles need, - /// (All titles will stretch using this value) - final double reservedSize; - - /// Texts are showing with provided [interval]. If you don't provide anything, - /// we try to find a suitable value to set as [interval] under the hood. - final double? interval; - - /// Lerps a [SideTitles] based on [t] value, check [Tween.lerp]. - static SideTitles lerp(SideTitles a, SideTitles b, double t) { - return SideTitles( - showTitles: b.showTitles, - getTitlesWidget: b.getTitlesWidget, - reservedSize: lerpDouble(a.reservedSize, b.reservedSize, t)!, - interval: lerpDouble(a.interval, b.interval, t), - ); - } - - /// Copies current [SideTitles] to a new [SideTitles], - /// and replaces provided values. - SideTitles copyWith({ - bool? showTitles, - GetTitleWidgetFunction? getTitlesWidget, - double? reservedSize, - double? interval, - }) { - return SideTitles( - showTitles: showTitles ?? this.showTitles, - getTitlesWidget: getTitlesWidget ?? this.getTitlesWidget, - reservedSize: reservedSize ?? this.reservedSize, - interval: interval ?? this.interval, - ); - } - - /// Used for equality check, see [EquatableMixin]. - @override - List get props => [ - showTitles, - getTitlesWidget, - reservedSize, - interval, - ]; -} - -/// Force child widget to be positioned inside its -/// corresponding axis bounding box -/// -/// To makes things simpler, it's recommended to use -/// [SideTitleFitInsideData.fromTitleMeta] and pass the -/// TitleMeta provided from [SideTitles.getTitlesWidget] -class SideTitleFitInsideData with EquatableMixin { - /// Force child widget to be positioned inside its - /// corresponding axis bounding box - /// - /// To makes things simpler, it's recommended to use - /// [SideTitleFitInsideData.fromTitleMeta] and pass the - /// TitleMeta provided from [SideTitles.getTitlesWidget] - /// - /// Some translations will be applied to force - /// children to be positioned inside the parent axis bounding box. - /// - /// Will override the [SideTitleWidget.space] and caused - /// spacing between [SideTitles] children might be not equal. - const SideTitleFitInsideData({ - required this.enabled, - required this.axisPosition, - required this.parentAxisSize, - required this.distanceFromEdge, - }); - - /// Create a disabled [SideTitleFitInsideData]. - /// If used, the child widget wouldn't be fitted - /// inside its corresponding axis bounding box - factory SideTitleFitInsideData.disable() => const SideTitleFitInsideData( - enabled: false, - distanceFromEdge: 0, - parentAxisSize: 0, - axisPosition: 0, - ); - - /// Help to Create [SideTitleFitInsideData] from [TitleMeta]. - /// [TitleMeta] is provided by [SideTitles.getTitlesWidget] function. - factory SideTitleFitInsideData.fromTitleMeta( - TitleMeta meta, { - bool enabled = true, - double distanceFromEdge = 6, - }) => - SideTitleFitInsideData( - enabled: enabled, - distanceFromEdge: distanceFromEdge, - parentAxisSize: meta.parentAxisSize, - axisPosition: meta.axisPosition, - ); - - /// Whether to enable fit inside to SideTitleWidget - final bool enabled; - - /// Distance between child widget and its closest corresponding axis edge - final double distanceFromEdge; - - /// Parent axis max width/height - final double parentAxisSize; - - /// The position (in pixel) that applied to - /// the child widget along its corresponding axis. - final double axisPosition; - - @override - List get props => [ - enabled, - distanceFromEdge, - parentAxisSize, - axisPosition, - ]; -} - -/// Holds data for showing each side titles (left, top, right, bottom) -class AxisTitles with EquatableMixin { - /// you can provide [axisName] if you want to show a general - /// label on this axis, - /// - /// [axisNameSize] determines the maximum size that [axisName] can use - /// - /// [sideTitles] property is responsible to show your axis side labels - const AxisTitles({ - this.axisNameWidget, - this.axisNameSize = 16, - this.sideTitles = const SideTitles(), - this.drawBelowEverything = true, - }); - - /// Determines the size of [axisName] - final double axisNameSize; - - /// It shows the name of axis, for example your x-axis shows year, - /// then you might want to show it using [axisNameWidget] property as a widget - final Widget? axisNameWidget; - - /// It is responsible to show your axis side labels. - final SideTitles sideTitles; - - /// If titles are showing on top of your tooltip, you can draw them below everything. - /// - /// In the future, we will convert tooltips to a widget, that would solve this problem. - final bool drawBelowEverything; - - /// If there is something to show as axisTitles, it returns true - bool get showAxisTitles => axisNameWidget != null && axisNameSize != 0; - - /// If there is something to show as sideTitles, it returns true - bool get showSideTitles => - sideTitles.showTitles && sideTitles.reservedSize != 0; - - /// Lerps a [AxisTitles] based on [t] value, check [Tween.lerp]. - static AxisTitles lerp(AxisTitles a, AxisTitles b, double t) { - return AxisTitles( - axisNameWidget: b.axisNameWidget, - axisNameSize: lerpDouble(a.axisNameSize, b.axisNameSize, t)!, - sideTitles: SideTitles.lerp(a.sideTitles, b.sideTitles, t), - drawBelowEverything: b.drawBelowEverything, - ); - } - - /// Copies current [SideTitles] to a new [SideTitles], - /// and replaces provided values. - AxisTitles copyWith({ - Widget? axisNameWidget, - double? axisNameSize, - SideTitles? sideTitles, - bool? drawBelowEverything, - }) { - return AxisTitles( - axisNameWidget: axisNameWidget ?? this.axisNameWidget, - axisNameSize: axisNameSize ?? this.axisNameSize, - sideTitles: sideTitles ?? this.sideTitles, - drawBelowEverything: drawBelowEverything ?? this.drawBelowEverything, - ); - } - - /// Used for equality check, see [EquatableMixin]. - @override - List get props => [ - axisNameWidget, - axisNameSize, - sideTitles, - drawBelowEverything, - ]; -} - -/// Holds data for showing titles on each side of charts. -class FlTitlesData with EquatableMixin { - /// [show] determines showing or hiding all titles, - /// [leftTitles], [topTitles], [rightTitles], [bottomTitles] defines - /// side titles of left, top, right, bottom sides respectively. - const FlTitlesData({ - this.show = true, - this.leftTitles = const AxisTitles( - sideTitles: SideTitles( - reservedSize: 44, - showTitles: true, - ), - ), - this.topTitles = const AxisTitles( - sideTitles: SideTitles( - reservedSize: 30, - showTitles: true, - ), - ), - this.rightTitles = const AxisTitles( - sideTitles: SideTitles( - reservedSize: 44, - showTitles: true, - ), - ), - this.bottomTitles = const AxisTitles( - sideTitles: SideTitles( - reservedSize: 30, - showTitles: true, - ), - ), - }); - - final bool show; - final AxisTitles leftTitles; - final AxisTitles topTitles; - final AxisTitles rightTitles; - final AxisTitles bottomTitles; - - /// Lerps a [FlTitlesData] based on [t] value, check [Tween.lerp]. - static FlTitlesData lerp(FlTitlesData a, FlTitlesData b, double t) { - return FlTitlesData( - show: b.show, - leftTitles: AxisTitles.lerp(a.leftTitles, b.leftTitles, t), - rightTitles: AxisTitles.lerp(a.rightTitles, b.rightTitles, t), - bottomTitles: AxisTitles.lerp(a.bottomTitles, b.bottomTitles, t), - topTitles: AxisTitles.lerp(a.topTitles, b.topTitles, t), - ); - } - - /// Copies current [FlTitlesData] to a new [FlTitlesData], - /// and replaces provided values. - FlTitlesData copyWith({ - bool? show, - AxisTitles? leftTitles, - AxisTitles? topTitles, - AxisTitles? rightTitles, - AxisTitles? bottomTitles, - }) { - return FlTitlesData( - show: show ?? this.show, - leftTitles: leftTitles ?? this.leftTitles, - topTitles: topTitles ?? this.topTitles, - rightTitles: rightTitles ?? this.rightTitles, - bottomTitles: bottomTitles ?? this.bottomTitles, - ); - } - - /// Used for equality check, see [EquatableMixin]. - @override - List get props => [ - show, - leftTitles, - topTitles, - rightTitles, - bottomTitles, - ]; -} - -/// Represents a conceptual position in cartesian (axis based) space. -class FlSpot with EquatableMixin { - /// [x] determines cartesian (axis based) horizontally position - /// 0 means most left point of the chart - /// - /// [y] determines cartesian (axis based) vertically position - /// 0 means most bottom point of the chart - const FlSpot(this.x, this.y); - final double x; - final double y; - - /// Copies current [FlSpot] to a new [FlSpot], - /// and replaces provided values. - FlSpot copyWith({ - double? x, - double? y, - }) { - return FlSpot( - x ?? this.x, - y ?? this.y, - ); - } - - ///Prints x and y coordinates of FlSpot list - @override - String toString() => '($x, $y)'; - - /// Used for splitting lines, or maybe other concepts. - static const FlSpot nullSpot = FlSpot(double.nan, double.nan); - - /// Sets zero for x and y - static const FlSpot zero = FlSpot(0, 0); - - /// Determines if [x] or [y] is null. - bool isNull() => this == nullSpot; - - /// Determines if [x] and [y] is not null. - bool isNotNull() => !isNull(); - - /// Used for equality check, see [EquatableMixin]. - @override - List get props => [ - x, - y, - ]; - - /// Lerps a [FlSpot] based on [t] value, check [Tween.lerp]. - static FlSpot lerp(FlSpot a, FlSpot b, double t) { - if (a == FlSpot.nullSpot) { - return b; - } - - if (b == FlSpot.nullSpot) { - return a; - } - - return FlSpot( - lerpDouble(a.x, b.x, t)!, - lerpDouble(a.y, b.y, t)!, - ); - } -} - -/// Responsible to hold grid data, -class FlGridData with EquatableMixin { - /// Responsible for rendering grid lines behind the content of charts, - /// [show] determines showing or hiding all grids, - /// - /// [AxisChartPainter] draws horizontal lines from left to right of the chart, - /// with increasing y value, it increases by [horizontalInterval]. - /// Representation of each line determines by [getDrawingHorizontalLine] callback, - /// it gives you a double value (in the y axis), and you should return a [FlLine] that represents - /// a horizontal line. - /// You are allowed to show or hide any horizontal line, using [checkToShowHorizontalLine] callback, - /// it gives you a double value (in the y axis), and you should return a boolean that determines - /// showing or hiding specified line. - /// or you can hide all horizontal lines by setting [drawHorizontalLine] false. - /// - /// [AxisChartPainter] draws vertical lines from bottom to top of the chart, - /// with increasing x value, it increases by [verticalInterval]. - /// Representation of each line determines by [getDrawingVerticalLine] callback, - /// it gives you a double value (in the x axis), and you should return a [FlLine] that represents - /// a horizontal line. - /// You are allowed to show or hide any vertical line, using [checkToShowVerticalLine] callback, - /// it gives you a double value (in the x axis), and you should return a boolean that determines - /// showing or hiding specified line. - /// or you can hide all vertical lines by setting [drawVerticalLine] false. - const FlGridData({ - this.show = true, - this.drawHorizontalLine = true, - this.horizontalInterval, - this.getDrawingHorizontalLine = defaultGridLine, - this.checkToShowHorizontalLine = showAllGrids, - this.drawVerticalLine = true, - this.verticalInterval, - this.getDrawingVerticalLine = defaultGridLine, - this.checkToShowVerticalLine = showAllGrids, - }) : assert( - horizontalInterval != 0, - "FlGridData.horizontalInterval couldn't be zero", - ), - assert( - verticalInterval != 0, - "FlGridData.verticalInterval couldn't be zero", - ); - - /// Determines showing or hiding all horizontal and vertical lines. - final bool show; - - /// Determines showing or hiding all horizontal lines. - final bool drawHorizontalLine; - - /// Determines interval between horizontal lines, left it null to be auto calculated. - final double? horizontalInterval; - - /// Gives you a y value, and gets a [FlLine] that represents specified line. - final GetDrawingGridLine getDrawingHorizontalLine; - - /// Gives you a y value, and gets a boolean that determines showing or hiding specified line. - final CheckToShowGrid checkToShowHorizontalLine; - - /// Determines showing or hiding all vertical lines. - final bool drawVerticalLine; - - /// Determines interval between vertical lines, left it null to be auto calculated. - final double? verticalInterval; - - /// Gives you a x value, and gets a [FlLine] that represents specified line. - final GetDrawingGridLine getDrawingVerticalLine; - - /// Gives you a x value, and gets a boolean that determines showing or hiding specified line. - final CheckToShowGrid checkToShowVerticalLine; - - /// Lerps a [FlGridData] based on [t] value, check [Tween.lerp]. - static FlGridData lerp(FlGridData a, FlGridData b, double t) { - return FlGridData( - show: b.show, - drawHorizontalLine: b.drawHorizontalLine, - horizontalInterval: - lerpDouble(a.horizontalInterval, b.horizontalInterval, t), - getDrawingHorizontalLine: b.getDrawingHorizontalLine, - checkToShowHorizontalLine: b.checkToShowHorizontalLine, - drawVerticalLine: b.drawVerticalLine, - verticalInterval: lerpDouble(a.verticalInterval, b.verticalInterval, t), - getDrawingVerticalLine: b.getDrawingVerticalLine, - checkToShowVerticalLine: b.checkToShowVerticalLine, - ); - } - - /// Copies current [FlGridData] to a new [FlGridData], - /// and replaces provided values. - FlGridData copyWith({ - bool? show, - bool? drawHorizontalLine, - double? horizontalInterval, - GetDrawingGridLine? getDrawingHorizontalLine, - CheckToShowGrid? checkToShowHorizontalLine, - bool? drawVerticalLine, - double? verticalInterval, - GetDrawingGridLine? getDrawingVerticalLine, - CheckToShowGrid? checkToShowVerticalLine, - }) { - return FlGridData( - show: show ?? this.show, - drawHorizontalLine: drawHorizontalLine ?? this.drawHorizontalLine, - horizontalInterval: horizontalInterval ?? this.horizontalInterval, - getDrawingHorizontalLine: - getDrawingHorizontalLine ?? this.getDrawingHorizontalLine, - checkToShowHorizontalLine: - checkToShowHorizontalLine ?? this.checkToShowHorizontalLine, - drawVerticalLine: drawVerticalLine ?? this.drawVerticalLine, - verticalInterval: verticalInterval ?? this.verticalInterval, - getDrawingVerticalLine: - getDrawingVerticalLine ?? this.getDrawingVerticalLine, - checkToShowVerticalLine: - checkToShowVerticalLine ?? this.checkToShowVerticalLine, - ); - } - - /// Used for equality check, see [EquatableMixin]. - @override - List get props => [ - show, - drawHorizontalLine, - horizontalInterval, - getDrawingHorizontalLine, - checkToShowHorizontalLine, - drawVerticalLine, - verticalInterval, - getDrawingVerticalLine, - checkToShowVerticalLine, - ]; -} - -/// Determines showing or hiding specified line. -typedef CheckToShowGrid = bool Function(double value); - -/// Shows all lines. -bool showAllGrids(double value) { - return true; -} - -/// Determines the appearance of specified line. -/// -/// It gives you an axis [value] (horizontal or vertical), -/// you should pass a [FlLine] that represents style of specified line. -typedef GetDrawingGridLine = FlLine Function(double value); - -/// Returns a grey line for all values. -FlLine defaultGridLine(double value) { - return const FlLine( - color: Colors.blueGrey, - strokeWidth: 0.4, - dashArray: [8, 4], - ); -} - -/// Defines style of a line. -class FlLine with EquatableMixin { - /// Renders a line, color it by [color], - /// thickness is defined by [strokeWidth], - /// and if you want to have dashed line, you should fill [dashArray], - /// it is a circular array of dash offsets and lengths. - /// For example, the array `[5, 10]` would result in dashes 5 pixels long - /// followed by blank spaces 10 pixels long. - const FlLine({ - Color? color, - this.gradient, - this.strokeWidth = 2, - this.dashArray, - }) : color = color ?? - ((color == null && gradient == null) ? Colors.black : null); - - /// Defines color of the line. - final Color? color; - - /// Defines the gradient of the line. - final Gradient? gradient; - - /// Defines thickness of the line. - final double strokeWidth; - - /// Defines dash effect of the line. - /// - /// it is a circular array of dash offsets and lengths. - /// For example, the array `[5, 10]` would result in dashes 5 pixels long - /// followed by blank spaces 10 pixels long. - final List? dashArray; - - /// Lerps a [FlLine] based on [t] value, check [Tween.lerp]. - static FlLine lerp(FlLine a, FlLine b, double t) { - return FlLine( - color: Color.lerp(a.color, b.color, t), - gradient: Gradient.lerp(a.gradient, b.gradient, t), - strokeWidth: lerpDouble(a.strokeWidth, b.strokeWidth, t)!, - dashArray: lerpIntList(a.dashArray, b.dashArray, t), - ); - } - - /// Copies current [FlLine] to a new [FlLine], - /// and replaces provided values. - FlLine copyWith({ - Color? color, - Gradient? gradient, - double? strokeWidth, - List? dashArray, - }) { - return FlLine( - color: color ?? this.color, - gradient: gradient ?? this.gradient, - strokeWidth: strokeWidth ?? this.strokeWidth, - dashArray: dashArray ?? this.dashArray, - ); - } - - /// Used for equality check, see [EquatableMixin]. - @override - List get props => [ - color, - gradient, - strokeWidth, - dashArray, - ]; -} - -/// holds information about touched spot on the axis based charts. -abstract class TouchedSpot with EquatableMixin { - /// [spot] represents the spot inside our axis based chart, - /// 0, 0 is bottom left, and 1, 1 is top right. - /// - /// [offset] is the touch position in device pixels, - /// 0, 0 is top, left, and 1, 1 is bottom right. - TouchedSpot( - this.spot, - this.offset, - ); - - /// Represents the spot inside our axis based chart, - /// 0, 0 is bottom left, and 1, 1 is top right. - final FlSpot spot; - - /// Represents the touch position in device pixels, - /// 0, 0 is top, left, and 1, 1 is bottom right. - final Offset offset; - - /// Used for equality check, see [EquatableMixin]. - @override - List get props => [ - spot, - offset, - ]; -} - -/// Holds data for rendering horizontal and vertical range annotations. -class RangeAnnotations with EquatableMixin { - /// Axis based charts can annotate some horizontal and vertical regions, - /// using [horizontalRangeAnnotations], and [verticalRangeAnnotations] respectively. - const RangeAnnotations({ - this.horizontalRangeAnnotations = const [], - this.verticalRangeAnnotations = const [], - }); - - final List horizontalRangeAnnotations; - final List verticalRangeAnnotations; - - /// Lerps a [RangeAnnotations] based on [t] value, check [Tween.lerp]. - static RangeAnnotations lerp( - RangeAnnotations a, - RangeAnnotations b, - double t, - ) { - return RangeAnnotations( - horizontalRangeAnnotations: lerpHorizontalRangeAnnotationList( - a.horizontalRangeAnnotations, - b.horizontalRangeAnnotations, - t, - )!, - verticalRangeAnnotations: lerpVerticalRangeAnnotationList( - a.verticalRangeAnnotations, - b.verticalRangeAnnotations, - t, - )!, - ); - } - - /// Copies current [RangeAnnotations] to a new [RangeAnnotations], - /// and replaces provided values. - RangeAnnotations copyWith({ - List? horizontalRangeAnnotations, - List? verticalRangeAnnotations, - }) { - return RangeAnnotations( - horizontalRangeAnnotations: - horizontalRangeAnnotations ?? this.horizontalRangeAnnotations, - verticalRangeAnnotations: - verticalRangeAnnotations ?? this.verticalRangeAnnotations, - ); - } - - /// Used for equality check, see [EquatableMixin]. - @override - List get props => [ - horizontalRangeAnnotations, - verticalRangeAnnotations, - ]; -} - -/// Defines an annotation region in y (vertical) axis. -class HorizontalRangeAnnotation with EquatableMixin { - /// Annotates a horizontal region from most left to most right point of the chart, and - /// from [y1] to [y2], and fills the area with [color] or [gradient]. - HorizontalRangeAnnotation({ - required this.y1, - required this.y2, - Color? color, - this.gradient, - }) : color = color ?? - ((color == null && gradient == null) ? Colors.white : null); - - /// Determines starting point in vertical (y) axis. - final double y1; - - /// Determines ending point in vertical (y) axis. - final double y2; - - /// If provided, this [HorizontalRangeAnnotation] draws with this [color] - /// Otherwise we use [gradient] to draw the background. - /// It draws with [gradient] if you provide both [color] and [gradient]. - /// If none is provided, it draws with a white color. - final Color? color; - - /// If provided, this [HorizontalRangeAnnotation] draws with this [gradient] - /// Otherwise we use [color] to draw the background. - /// It draws with [gradient] if you provide both [color] and [gradient]. - /// If none is provided, it draws with a white color. - final Gradient? gradient; - - /// Lerps a [HorizontalRangeAnnotation] based on [t] value, check [Tween.lerp]. - static HorizontalRangeAnnotation lerp( - HorizontalRangeAnnotation a, - HorizontalRangeAnnotation b, - double t, - ) { - return HorizontalRangeAnnotation( - y1: lerpDouble(a.y1, b.y1, t)!, - y2: lerpDouble(a.y2, b.y2, t)!, - color: Color.lerp(a.color, b.color, t), - gradient: Gradient.lerp(a.gradient, b.gradient, t), - ); - } - - /// Copies current [HorizontalRangeAnnotation] to a new [HorizontalRangeAnnotation], - /// and replaces provided values. - HorizontalRangeAnnotation copyWith({ - double? y1, - double? y2, - Color? color, - Gradient? gradient, - }) { - return HorizontalRangeAnnotation( - y1: y1 ?? this.y1, - y2: y2 ?? this.y2, - color: color ?? this.color, - gradient: gradient ?? this.gradient, - ); - } - - /// Used for equality check, see [EquatableMixin]. - @override - List get props => [ - y1, - y2, - color, - gradient, - ]; -} - -/// Defines an annotation region in x (horizontal) axis. -class VerticalRangeAnnotation with EquatableMixin { - /// Annotates a vertical region from most bottom to most top point of the chart, and - /// from [x1] to [x2], and fills the area with [color] or [gradient]. - VerticalRangeAnnotation({ - required this.x1, - required this.x2, - Color? color, - this.gradient, - }) : color = color ?? - ((color == null && gradient == null) ? Colors.white : null); - - /// Determines starting point in horizontal (x) axis. - final double x1; - - /// Determines ending point in horizontal (x) axis. - final double x2; - - /// If provided, this [VerticalRangeAnnotation] draws with this [color] - /// Otherwise we use [gradient] to draw the background. - /// It draws with [gradient] if you provide both [color] and [gradient]. - /// If none is provided, it draws with a white color. - final Color? color; - - /// If provided, this [VerticalRangeAnnotation] draws with this [gradient] - /// Otherwise we use [color] to draw the background. - /// It draws with [gradient] if you provide both [color] and [gradient]. - /// If none is provided, it draws with a white color. - final Gradient? gradient; - - /// Lerps a [VerticalRangeAnnotation] based on [t] value, check [Tween.lerp]. - static VerticalRangeAnnotation lerp( - VerticalRangeAnnotation a, - VerticalRangeAnnotation b, - double t, - ) { - return VerticalRangeAnnotation( - x1: lerpDouble(a.x1, b.x1, t)!, - x2: lerpDouble(a.x2, b.x2, t)!, - color: Color.lerp(a.color, b.color, t), - gradient: Gradient.lerp(a.gradient, b.gradient, t), - ); - } - - /// Copies current [VerticalRangeAnnotation] to a new [VerticalRangeAnnotation], - /// and replaces provided values. - VerticalRangeAnnotation copyWith({ - double? x1, - double? x2, - Color? color, - Gradient? gradient, - }) { - return VerticalRangeAnnotation( - x1: x1 ?? this.x1, - x2: x2 ?? this.x2, - color: color ?? this.color, - gradient: gradient ?? this.gradient, - ); - } - - /// Used for equality check, see [EquatableMixin]. - @override - List get props => [ - x1, - x2, - color, - gradient, - ]; -} - -/// Holds data for drawing extra horizontal lines. -/// -/// [LineChart] draws some [HorizontalLine] (set by [LineChartData.extraLinesData]), -/// in below or above of everything, it draws from left to right side of the chart. -class HorizontalLine extends FlLine with EquatableMixin { - /// [LineChart] draws horizontal lines from left to right side of the chart - /// in the provided [y] value, and color it using [color]. - /// You can define the thickness using [strokeWidth] - /// - /// It draws a [label] over it. - /// - /// You can have a dashed line by filling [dashArray] with dash size and space respectively. - /// - /// It draws an image in left side of the chart, use [sizedPicture] for vectors, - /// or [image] for any kind of image. - HorizontalLine({ - required this.y, - HorizontalLineLabel? label, - Color? color, - double? strokeWidth, - super.dashArray, - this.image, - this.sizedPicture, - this.strokeCap = StrokeCap.butt, - }) : label = label ?? HorizontalLineLabel(), - super( - color: color ?? Colors.black, - strokeWidth: strokeWidth ?? 2, - ); - - /// Draws from left to right of the chart using the [y] value. - final double y; - - /// Use it for any kind of image, to draw it in left side of the chart. - Image? image; - - /// Use it for vector images, to draw it in left side of the chart. - SizedPicture? sizedPicture; - - /// Draws a text label over the line. - final HorizontalLineLabel label; - - /// if not drawing dash line, then this is the Strokecap for the line. - /// i.e. if the two ends of the line is round or butt or square. - final StrokeCap strokeCap; - - /// Lerps a [HorizontalLine] based on [t] value, check [Tween.lerp]. - static HorizontalLine lerp(HorizontalLine a, HorizontalLine b, double t) { - return HorizontalLine( - y: lerpDouble(a.y, b.y, t)!, - label: HorizontalLineLabel.lerp(a.label, b.label, t), - color: Color.lerp(a.color, b.color, t), - strokeWidth: lerpDouble(a.strokeWidth, b.strokeWidth, t), - dashArray: lerpIntList(a.dashArray, b.dashArray, t), - image: b.image, - sizedPicture: b.sizedPicture, - strokeCap: b.strokeCap, - ); - } - - /// Used for equality check, see [EquatableMixin]. - @override - List get props => [ - y, - label, - color, - strokeWidth, - dashArray, - image, - sizedPicture, - strokeCap, - ]; -} - -/// Holds data for drawing extra vertical lines. -/// -/// [LineChart] draws some [VerticalLine] (set by [LineChartData.extraLinesData]), -/// in below or above of everything, it draws from bottom to top side of the chart. -class VerticalLine extends FlLine with EquatableMixin { - /// [LineChart] draws vertical lines from bottom to top side of the chart - /// in the provided [x] value, and color it using [color]. - /// You can define the thickness using [strokeWidth] - /// - /// It draws a [label] over it. - /// - /// You can have a dashed line by filling [dashArray] with dash size and space respectively. - /// - /// It draws an image in bottom side of the chart, use [sizedPicture] for vectors, - /// or [image] for any kind of image. - VerticalLine({ - required this.x, - VerticalLineLabel? label, - Color? color, - double? strokeWidth, - super.dashArray, - this.image, - this.sizedPicture, - this.strokeCap = StrokeCap.butt, - }) : label = label ?? VerticalLineLabel(), - super( - color: color ?? Colors.black, - strokeWidth: strokeWidth ?? 2, - ); - - /// Draws from bottom to top of the chart using the [x] value. - final double x; - - /// Use it for any kind of image, to draw it in bottom side of the chart. - Image? image; - - /// Use it for vector images, to draw it in bottom side of the chart. - SizedPicture? sizedPicture; - - /// Draws a text label over the line. - final VerticalLineLabel label; - - /// if not drawing dash line, then this is the Strokecap for the line. - /// i.e. if the two ends of the line is round or butt or square. - final StrokeCap strokeCap; - - /// Lerps a [VerticalLine] based on [t] value, check [Tween.lerp]. - static VerticalLine lerp(VerticalLine a, VerticalLine b, double t) { - return VerticalLine( - x: lerpDouble(a.x, b.x, t)!, - label: VerticalLineLabel.lerp(a.label, b.label, t), - color: Color.lerp(a.color, b.color, t), - strokeWidth: lerpDouble(a.strokeWidth, b.strokeWidth, t), - dashArray: lerpIntList(a.dashArray, b.dashArray, t), - image: b.image, - sizedPicture: b.sizedPicture, - strokeCap: b.strokeCap, - ); - } - - /// Copies current [VerticalLine] to a new [VerticalLine] - /// and replaces provided values. - VerticalLine copyVerticalLineWith({ - double? x, - VerticalLineLabel? label, - Color? color, - double? strokeWidth, - List? dashArray, - Image? image, - SizedPicture? sizedPicture, - StrokeCap? strokeCap, - }) { - return VerticalLine( - x: x ?? this.x, - label: label ?? this.label, - color: color ?? this.color, - strokeWidth: strokeWidth ?? this.strokeWidth, - dashArray: dashArray ?? this.dashArray, - image: image ?? this.image, - sizedPicture: sizedPicture ?? this.sizedPicture, - strokeCap: strokeCap ?? this.strokeCap, - ); - } - - /// Used for equality check, see [EquatableMixin]. - @override - List get props => [ - x, - label, - color, - strokeWidth, - dashArray, - image, - sizedPicture, - strokeCap, - ]; -} - -/// Draws a title on the [HorizontalLine] -class HorizontalLineLabel extends FlLineLabel with EquatableMixin { - /// Draws a title on the [HorizontalLine], align it with [alignment] over the line, - /// applies [padding] for spaces, and applies [style for changing color, - /// size, ... of the text. - /// Drawing text will retrieve through [labelResolver], - /// you can override it with your custom data. - /// /// [show] determines showing label or not. - HorizontalLineLabel({ - EdgeInsets? padding, - super.style, - Alignment? alignment, - super.show = false, - String Function(HorizontalLine)? labelResolver, - }) : labelResolver = - labelResolver ?? HorizontalLineLabel.defaultLineLabelResolver, - super( - padding: padding ?? const EdgeInsets.all(6), - alignment: alignment ?? Alignment.topLeft, - ); - - /// Resolves a label for showing. - final String Function(HorizontalLine) labelResolver; - - /// Returns the [HorizontalLine.y] as the drawing label. - static String defaultLineLabelResolver(HorizontalLine line) => - line.y.toStringAsFixed(1); - - /// Lerps a [HorizontalLineLabel] based on [t] value, check [Tween.lerp]. - static HorizontalLineLabel lerp( - HorizontalLineLabel a, - HorizontalLineLabel b, - double t, - ) { - return HorizontalLineLabel( - padding: - EdgeInsets.lerp(a.padding as EdgeInsets, b.padding as EdgeInsets, t), - style: TextStyle.lerp(a.style, b.style, t), - alignment: Alignment.lerp(a.alignment, b.alignment, t), - labelResolver: b.labelResolver, - show: b.show, - ); - } - - /// Used for equality check, see [EquatableMixin]. - @override - List get props => [ - labelResolver, - show, - padding, - style, - alignment, - ]; -} - -/// Draws a title on the [VerticalLine] -class VerticalLineLabel extends FlLineLabel with EquatableMixin { - /// Draws a title on the [VerticalLine], align it with [alignment] over the line, - /// applies [padding] for spaces, and applies [style for changing color, - /// size, ... of the text. - /// Drawing text will retrieve through [labelResolver], - /// you can override it with your custom data. - /// [show] determines showing label or not. - VerticalLineLabel({ - EdgeInsets? padding, - TextStyle? style, - Alignment? alignment, - bool? show, - String Function(VerticalLine)? labelResolver, - }) : labelResolver = - labelResolver ?? VerticalLineLabel.defaultLineLabelResolver, - super( - show: show ?? false, - padding: padding ?? const EdgeInsets.all(6), - style: style ?? - const TextStyle( - color: Colors.black, - fontWeight: FontWeight.bold, - fontSize: 14, - ), - alignment: alignment ?? Alignment.bottomRight, - ); - - /// Resolves a label for showing. - final String Function(VerticalLine) labelResolver; - - /// Returns the [VerticalLine.x] as the drawing label. - static String defaultLineLabelResolver(VerticalLine line) => - line.x.toStringAsFixed(1); - - /// Lerps a [VerticalLineLabel] based on [t] value, check [Tween.lerp]. - static VerticalLineLabel lerp( - VerticalLineLabel a, - VerticalLineLabel b, - double t, - ) { - return VerticalLineLabel( - padding: - EdgeInsets.lerp(a.padding as EdgeInsets, b.padding as EdgeInsets, t), - style: TextStyle.lerp(a.style, b.style, t), - alignment: Alignment.lerp(a.alignment, b.alignment, t), - labelResolver: b.labelResolver, - show: b.show, - ); - } - - /// Used for equality check, see [EquatableMixin]. - @override - List get props => [ - labelResolver, - show, - padding, - style, - alignment, - ]; -} - -/// Holds data for showing a vector image inside the chart. -/// -/// for example: -/// ``` -/// Future loadSvg() async { -/// const String rawSvg = 'your svg string'; -/// final DrawableRoot svgRoot = await svg.fromSvgString(rawSvg, rawSvg); -/// final sizedPicture = SizedPicture(svgRoot.toPicture(), 14, 14); -/// return sizedPicture; -/// } -/// ``` -class SizedPicture with EquatableMixin { - /// [picture] is the showing image, - /// it can retrieve from a svg icon, - /// for example: - /// ``` - /// const String rawSvg = 'your svg string'; - /// final DrawableRoot svgRoot = await svg.fromSvgString(rawSvg, rawSvg); - /// final picture = svgRoot.toPicture() - /// ``` - /// [width] and [height] determines the size of our picture. - SizedPicture(this.picture, this.width, this.height); - - /// Is the showing image. - Picture picture; - - /// width of our [picture]. - int width; - - /// height of our [picture]. - int height; - - /// Used for equality check, see [EquatableMixin]. - @override - List get props => [ - picture, - width, - height, - ]; -} - -/// Draws some straight horizontal or vertical lines in the [LineChart] -class ExtraLinesData with EquatableMixin { - /// [LineChart] draws some straight horizontal or vertical lines, - /// you should set [LineChartData.extraLinesData]. - /// Draws horizontal lines using [horizontalLines], - /// and vertical lines using [verticalLines]. - /// - /// If [extraLinesOnTop] sets true, it draws the line above the main bar lines, otherwise - /// it draws them below the main bar lines. - const ExtraLinesData({ - this.horizontalLines = const [], - this.verticalLines = const [], - this.extraLinesOnTop = true, - }); - - final List horizontalLines; - final List verticalLines; - final bool extraLinesOnTop; - - /// Lerps a [ExtraLinesData] based on [t] value, check [Tween.lerp]. - static ExtraLinesData lerp(ExtraLinesData a, ExtraLinesData b, double t) { - return ExtraLinesData( - extraLinesOnTop: b.extraLinesOnTop, - horizontalLines: - lerpHorizontalLineList(a.horizontalLines, b.horizontalLines, t)!, - verticalLines: lerpVerticalLineList(a.verticalLines, b.verticalLines, t)!, - ); - } - - /// Used for equality check, see [EquatableMixin]. - @override - List get props => [ - horizontalLines, - verticalLines, - extraLinesOnTop, - ]; -} diff --git a/lib/src/chart/base/axis_chart/axis_chart_extensions.dart b/lib/src/chart/base/axis_chart/axis_chart_extensions.dart deleted file mode 100644 index db05738825..0000000000 --- a/lib/src/chart/base/axis_chart/axis_chart_extensions.dart +++ /dev/null @@ -1,23 +0,0 @@ -import 'package:fl_chart/fl_chart.dart'; - -extension FlSpotListExtension on List { - /// Splits a line by [FlSpot.nullSpot] values inside it. - List> splitByNullSpots() { - final barList = >[[]]; - - // handle nullability by splitting off the list into multiple - // separate lists when separated by nulls - for (final spot in this) { - if (spot.isNotNull()) { - barList.last.add(spot); - } else if (barList.last.isNotEmpty) { - barList.add([]); - } - } - // remove last item if one or more last spots were null - if (barList.last.isEmpty) { - barList.removeLast(); - } - return barList; - } -} diff --git a/lib/src/chart/base/axis_chart/axis_chart_helper.dart b/lib/src/chart/base/axis_chart/axis_chart_helper.dart deleted file mode 100644 index 4d16a411b0..0000000000 --- a/lib/src/chart/base/axis_chart/axis_chart_helper.dart +++ /dev/null @@ -1,104 +0,0 @@ -import 'package:fl_chart/fl_chart.dart'; -import 'package:fl_chart/src/utils/utils.dart'; -import 'package:flutter/material.dart'; - -class AxisChartHelper { - factory AxisChartHelper() { - return _singleton; - } - - AxisChartHelper._internal(); - static final _singleton = AxisChartHelper._internal(); - - /// Iterates over an axis from [min] to [max]. - /// - /// [interval] determines each step - /// - /// If [minIncluded] is true, it starts from [min] value, - /// otherwise it starts from [min] + [interval] - /// - /// If [maxIncluded] is true, it ends at [max] value, - /// otherwise it ends at [max] - [interval] - Iterable iterateThroughAxis({ - required double min, - bool minIncluded = true, - required double max, - bool maxIncluded = true, - required double baseLine, - required double interval, - }) sync* { - final initialValue = Utils() - .getBestInitialIntervalValue(min, max, interval, baseline: baseLine); - var axisSeek = initialValue; - final firstPositionOverlapsWithMin = axisSeek == min; - if (!minIncluded && firstPositionOverlapsWithMin) { - axisSeek += interval; - } - final diff = max - min; - final count = diff ~/ interval; - final lastPosition = initialValue + (count * interval); - final lastPositionOverlapsWithMax = lastPosition == max; - final end = - !maxIncluded && lastPositionOverlapsWithMax ? max - interval : max; - - final epsilon = interval / 100000; - if (minIncluded && !firstPositionOverlapsWithMin) { - yield min; - } - while (axisSeek <= end + epsilon) { - yield axisSeek; - axisSeek += interval; - } - if (maxIncluded && !lastPositionOverlapsWithMax) { - yield max; - } - } - - /// Calculate translate offset to keep [SideTitle] child - /// placed inside its corresponding axis. - /// The offset will translate the child to the closest edge inside - /// of the corresponding axis bounding box - Offset calcFitInsideOffset({ - required AxisSide axisSide, - required double? childSize, - required double parentAxisSize, - required double axisPosition, - required double distanceFromEdge, - }) { - if (childSize == null) return Offset.zero; - - // Find title alignment along its axis - final axisMid = parentAxisSize / 2; - final mainAxisAlignment = (axisPosition - axisMid).isNegative - ? MainAxisAlignment.start - : MainAxisAlignment.end; - - // Find if child widget overflowed outside the chart - late bool isOverflowed; - if (mainAxisAlignment == MainAxisAlignment.start) { - isOverflowed = (axisPosition - (childSize / 2)).isNegative; - } else { - isOverflowed = (axisPosition + (childSize / 2)) > parentAxisSize; - } - - if (isOverflowed == false) return Offset.zero; - - // Calc offset if child overflowed - late double offset; - if (mainAxisAlignment == MainAxisAlignment.start) { - offset = (childSize / 2) - axisPosition + distanceFromEdge; - } else { - offset = - -(childSize / 2) + (parentAxisSize - axisPosition) - distanceFromEdge; - } - - switch (axisSide) { - case AxisSide.left: - case AxisSide.right: - return Offset(0, offset); - case AxisSide.top: - case AxisSide.bottom: - return Offset(offset, 0); - } - } -} diff --git a/lib/src/chart/base/axis_chart/axis_chart_painter.dart b/lib/src/chart/base/axis_chart/axis_chart_painter.dart deleted file mode 100644 index 833b7ee918..0000000000 --- a/lib/src/chart/base/axis_chart/axis_chart_painter.dart +++ /dev/null @@ -1,457 +0,0 @@ -import 'package:fl_chart/fl_chart.dart'; -import 'package:fl_chart/src/chart/bar_chart/bar_chart_painter.dart'; -import 'package:fl_chart/src/chart/base/axis_chart/axis_chart_helper.dart'; -import 'package:fl_chart/src/chart/base/base_chart/base_chart_painter.dart'; -import 'package:fl_chart/src/chart/line_chart/line_chart_painter.dart'; -import 'package:fl_chart/src/extensions/paint_extension.dart'; -import 'package:fl_chart/src/utils/canvas_wrapper.dart'; -import 'package:fl_chart/src/utils/utils.dart'; -import 'package:flutter/material.dart'; - -/// This class is responsible to draw the grid behind all axis base charts. -/// also we have two useful function [getPixelX] and [getPixelY] that used -/// in child classes -> [BarChartPainter], [LineChartPainter] -/// [dataList] is the currently showing data (it may produced by an animation using lerp function), -/// [targetData] is the target data, that animation is going to show (if animating) -abstract class AxisChartPainter - extends BaseChartPainter { - AxisChartPainter() { - _gridPaint = Paint()..style = PaintingStyle.stroke; - - _backgroundPaint = Paint()..style = PaintingStyle.fill; - - _rangeAnnotationPaint = Paint()..style = PaintingStyle.fill; - - _extraLinesPaint = Paint()..style = PaintingStyle.stroke; - - _imagePaint = Paint(); - } - late Paint _gridPaint; - late Paint _backgroundPaint; - late Paint _extraLinesPaint; - late Paint _imagePaint; - - /// [_rangeAnnotationPaint] draws range annotations; - late Paint _rangeAnnotationPaint; - - /// Paints [AxisChartData] into the provided canvas. - @override - void paint( - BuildContext context, - CanvasWrapper canvasWrapper, - PaintHolder holder, - ) { - super.paint(context, canvasWrapper, holder); - drawBackground(canvasWrapper, holder); - drawRangeAnnotation(canvasWrapper, holder); - drawGrid(canvasWrapper, holder); - } - - @visibleForTesting - void drawGrid(CanvasWrapper canvasWrapper, PaintHolder holder) { - final data = holder.data; - if (!data.gridData.show) { - return; - } - final viewSize = canvasWrapper.size; - // Show Vertical Grid - if (data.gridData.drawVerticalLine) { - final verticalInterval = data.gridData.verticalInterval ?? - Utils().getEfficientInterval( - viewSize.width, - data.horizontalDiff, - ); - final axisValues = AxisChartHelper().iterateThroughAxis( - min: data.minX, - minIncluded: false, - max: data.maxX, - maxIncluded: false, - baseLine: data.baselineX, - interval: verticalInterval, - ); - for (final axisValue in axisValues) { - if (!data.gridData.checkToShowVerticalLine(axisValue)) { - continue; - } - final bothX = getPixelX(axisValue, viewSize, holder); - final x1 = bothX; - const y1 = 0.0; - final x2 = bothX; - final y2 = viewSize.height; - final from = Offset(x1, y1); - final to = Offset(x2, y2); - - final flLineStyle = data.gridData.getDrawingVerticalLine(axisValue); - _gridPaint - ..setColorOrGradientForLine( - flLineStyle.color, - flLineStyle.gradient, - from: from, - to: to, - ) - ..strokeWidth = flLineStyle.strokeWidth - ..transparentIfWidthIsZero(); - - canvasWrapper.drawDashedLine( - from, - to, - _gridPaint, - flLineStyle.dashArray, - ); - } - } - - // Show Horizontal Grid - if (data.gridData.drawHorizontalLine) { - final horizontalInterval = data.gridData.horizontalInterval ?? - Utils().getEfficientInterval(viewSize.height, data.verticalDiff); - - final axisValues = AxisChartHelper().iterateThroughAxis( - min: data.minY, - minIncluded: false, - max: data.maxY, - maxIncluded: false, - baseLine: data.baselineY, - interval: horizontalInterval, - ); - for (final axisValue in axisValues) { - if (!data.gridData.checkToShowHorizontalLine(axisValue)) { - continue; - } - final flLine = data.gridData.getDrawingHorizontalLine(axisValue); - - final bothY = getPixelY(axisValue, viewSize, holder); - const x1 = 0.0; - final y1 = bothY; - final x2 = viewSize.width; - final y2 = bothY; - final from = Offset(x1, y1); - final to = Offset(x2, y2); - - _gridPaint - ..setColorOrGradientForLine( - flLine.color, - flLine.gradient, - from: from, - to: to, - ) - ..strokeWidth = flLine.strokeWidth - ..transparentIfWidthIsZero(); - - canvasWrapper.drawDashedLine( - from, - to, - _gridPaint, - flLine.dashArray, - ); - } - } - } - - /// This function draws a colored background behind the chart. - @visibleForTesting - void drawBackground(CanvasWrapper canvasWrapper, PaintHolder holder) { - final data = holder.data; - if (data.backgroundColor.opacity == 0.0) { - return; - } - - final viewSize = canvasWrapper.size; - _backgroundPaint.color = data.backgroundColor; - canvasWrapper.drawRect( - Rect.fromLTWH(0, 0, viewSize.width, viewSize.height), - _backgroundPaint, - ); - } - - @visibleForTesting - void drawRangeAnnotation(CanvasWrapper canvasWrapper, PaintHolder holder) { - final data = holder.data; - final viewSize = canvasWrapper.size; - - if (data.rangeAnnotations.verticalRangeAnnotations.isNotEmpty) { - for (final annotation in data.rangeAnnotations.verticalRangeAnnotations) { - final from = Offset(getPixelX(annotation.x1, viewSize, holder), 0); - final to = Offset( - getPixelX(annotation.x2, viewSize, holder), - viewSize.height, - ); - - final rect = Rect.fromPoints(from, to); - - _rangeAnnotationPaint.setColorOrGradient( - annotation.color, - annotation.gradient, - rect, - ); - - canvasWrapper.drawRect(rect, _rangeAnnotationPaint); - } - } - - if (data.rangeAnnotations.horizontalRangeAnnotations.isNotEmpty) { - for (final annotation - in data.rangeAnnotations.horizontalRangeAnnotations) { - final from = Offset(0, getPixelY(annotation.y1, viewSize, holder)); - final to = Offset( - viewSize.width, - getPixelY(annotation.y2, viewSize, holder), - ); - - final rect = Rect.fromPoints(from, to); - - _rangeAnnotationPaint.setColorOrGradient( - annotation.color, - annotation.gradient, - rect, - ); - - canvasWrapper.drawRect(rect, _rangeAnnotationPaint); - } - } - } - - void drawExtraLines( - BuildContext context, - CanvasWrapper canvasWrapper, - PaintHolder holder, - ) { - super.paint(context, canvasWrapper, holder); - final data = holder.data; - final viewSize = canvasWrapper.size; - - if (data.extraLinesData.horizontalLines.isNotEmpty) { - drawHorizontalLines(context, canvasWrapper, holder, viewSize); - } - - if (data.extraLinesData.verticalLines.isNotEmpty) { - drawVerticalLines(context, canvasWrapper, holder, viewSize); - } - } - - void drawHorizontalLines( - BuildContext context, - CanvasWrapper canvasWrapper, - PaintHolder holder, - Size viewSize, - ) { - for (final line in holder.data.extraLinesData.horizontalLines) { - final from = Offset(0, getPixelY(line.y, viewSize, holder)); - final to = Offset(viewSize.width, getPixelY(line.y, viewSize, holder)); - - final isLineOutsideOfChart = from.dy < 0 || - to.dy < 0 || - from.dy > viewSize.height || - to.dy > viewSize.height; - - if (!isLineOutsideOfChart) { - _extraLinesPaint - ..setColorOrGradientForLine( - line.color, - line.gradient, - from: from, - to: to, - ) - ..strokeWidth = line.strokeWidth - ..transparentIfWidthIsZero() - ..strokeCap = line.strokeCap; - - canvasWrapper.drawDashedLine( - from, - to, - _extraLinesPaint, - line.dashArray, - ); - - if (line.sizedPicture != null) { - final centerX = line.sizedPicture!.width / 2; - final centerY = line.sizedPicture!.height / 2; - final xPosition = centerX; - final yPosition = to.dy - centerY; - - canvasWrapper - ..save() - ..translate(xPosition, yPosition) - ..drawPicture(line.sizedPicture!.picture) - ..restore(); - } - - if (line.image != null) { - final centerX = line.image!.width / 2; - final centerY = line.image!.height / 2; - final centeredImageOffset = Offset(centerX, to.dy - centerY); - canvasWrapper.drawImage( - line.image!, - centeredImageOffset, - _imagePaint, - ); - } - - if (line.label.show) { - final label = line.label; - final style = - TextStyle(fontSize: 11, color: line.color).merge(label.style); - final padding = label.padding as EdgeInsets; - - final span = TextSpan( - text: label.labelResolver(line), - style: Utils().getThemeAwareTextStyle(context, style), - ); - - final tp = TextPainter( - text: span, - textDirection: TextDirection.ltr, - ); - // ignore: cascade_invocations - tp.layout(); - - canvasWrapper.drawText( - tp, - label.alignment.withinRect( - Rect.fromLTRB( - from.dx + padding.left, - from.dy - padding.bottom - tp.height, - to.dx - padding.right - tp.width, - to.dy + padding.top, - ), - ), - ); - } - } - } - } - - void drawVerticalLines( - BuildContext context, - CanvasWrapper canvasWrapper, - PaintHolder holder, - Size viewSize, - ) { - for (final line in holder.data.extraLinesData.verticalLines) { - final from = Offset(getPixelX(line.x, viewSize, holder), 0); - final to = Offset(getPixelX(line.x, viewSize, holder), viewSize.height); - - final isLineOutsideOfChart = from.dx < 0 || - to.dx < 0 || - from.dx > viewSize.width || - to.dx > viewSize.width; - - if (!isLineOutsideOfChart) { - _extraLinesPaint - ..setColorOrGradientForLine( - line.color, - line.gradient, - from: from, - to: to, - ) - ..strokeWidth = line.strokeWidth - ..transparentIfWidthIsZero() - ..strokeCap = line.strokeCap; - - canvasWrapper.drawDashedLine( - from, - to, - _extraLinesPaint, - line.dashArray, - ); - - if (line.sizedPicture != null) { - final centerX = line.sizedPicture!.width / 2; - final centerY = line.sizedPicture!.height / 2; - final xPosition = to.dx - centerX; - final yPosition = viewSize.height - centerY; - - canvasWrapper - ..save() - ..translate(xPosition, yPosition) - ..drawPicture(line.sizedPicture!.picture) - ..restore(); - } - - if (line.image != null) { - final centerX = line.image!.width / 2; - final centerY = line.image!.height + 2; - final centeredImageOffset = - Offset(to.dx - centerX, viewSize.height - centerY); - canvasWrapper.drawImage( - line.image!, - centeredImageOffset, - _imagePaint, - ); - } - - if (line.label.show) { - final label = line.label; - final style = - TextStyle(fontSize: 11, color: line.color).merge(label.style); - final padding = label.padding as EdgeInsets; - - final span = TextSpan( - text: label.labelResolver(line), - style: Utils().getThemeAwareTextStyle(context, style), - ); - - final tp = TextPainter( - text: span, - textDirection: TextDirection.ltr, - ); - // ignore: cascade_invocations - tp.layout(); - - canvasWrapper.drawText( - tp, - label.alignment.withinRect( - Rect.fromLTRB( - to.dx - padding.right - tp.width, - from.dy + padding.top, - from.dx + padding.left, - to.dy - padding.bottom, - ), - ), - ); - } - } - } - } - - /// With this function we can convert our [FlSpot] x - /// to the view base axis x . - /// the view 0, 0 is on the top/left, but the spots is bottom/left - double getPixelX(double spotX, Size viewSize, PaintHolder holder) { - final data = holder.data; - final deltaX = data.maxX - data.minX; - if (deltaX == 0.0) { - return 0; - } - return ((spotX - data.minX) / deltaX) * viewSize.width; - } - - /// With this function we can convert our [FlSpot] y - /// to the view base axis y. - double getPixelY(double spotY, Size viewSize, PaintHolder holder) { - final data = holder.data; - final deltaY = data.maxY - data.minY; - if (deltaY == 0.0) { - return viewSize.height; - } - return viewSize.height - (((spotY - data.minY) / deltaY) * viewSize.height); - } - - /// With this function we can get horizontal - /// position for the tooltip. - double getTooltipLeft( - double dx, - double tooltipWidth, - FLHorizontalAlignment tooltipHorizontalAlignment, - double tooltipHorizontalOffset, - ) { - switch (tooltipHorizontalAlignment) { - case FLHorizontalAlignment.center: - return dx - (tooltipWidth / 2) + tooltipHorizontalOffset; - case FLHorizontalAlignment.right: - return dx + tooltipHorizontalOffset; - case FLHorizontalAlignment.left: - return dx - tooltipWidth + tooltipHorizontalOffset; - } - } -} diff --git a/lib/src/chart/base/axis_chart/axis_chart_scaffold_widget.dart b/lib/src/chart/base/axis_chart/axis_chart_scaffold_widget.dart deleted file mode 100644 index d674214502..0000000000 --- a/lib/src/chart/base/axis_chart/axis_chart_scaffold_widget.dart +++ /dev/null @@ -1,134 +0,0 @@ -import 'package:fl_chart/fl_chart.dart'; -import 'package:fl_chart/src/chart/base/axis_chart/side_titles/side_titles_widget.dart'; -import 'package:fl_chart/src/extensions/fl_titles_data_extension.dart'; -import 'package:flutter/material.dart'; - -/// A scaffold to show an axis-based chart -/// -/// It contains some placeholders to represent an axis-based chart. -/// -/// It's something like the below graph: -/// |----------------------| -/// | | top | | -/// |------|-------|-------| -/// | left | chart | right | -/// |------|-------|-------| -/// | | bottom| | -/// |----------------------| -/// -/// `left`, `top`, `right`, `bottom` are some place holders to show titles -/// provided by [AxisChartData.titlesData] around the chart -/// `chart` is a centered place holder to show a raw chart. -class AxisChartScaffoldWidget extends StatelessWidget { - const AxisChartScaffoldWidget({ - super.key, - required this.chart, - required this.data, - }); - final Widget chart; - final AxisChartData data; - - bool get showLeftTitles { - if (!data.titlesData.show) { - return false; - } - final showAxisTitles = data.titlesData.leftTitles.showAxisTitles; - final showSideTitles = data.titlesData.leftTitles.showSideTitles; - return showAxisTitles || showSideTitles; - } - - bool get showRightTitles { - if (!data.titlesData.show) { - return false; - } - final showAxisTitles = data.titlesData.rightTitles.showAxisTitles; - final showSideTitles = data.titlesData.rightTitles.showSideTitles; - return showAxisTitles || showSideTitles; - } - - bool get showTopTitles { - if (!data.titlesData.show) { - return false; - } - final showAxisTitles = data.titlesData.topTitles.showAxisTitles; - final showSideTitles = data.titlesData.topTitles.showSideTitles; - return showAxisTitles || showSideTitles; - } - - bool get showBottomTitles { - if (!data.titlesData.show) { - return false; - } - final showAxisTitles = data.titlesData.bottomTitles.showAxisTitles; - final showSideTitles = data.titlesData.bottomTitles.showSideTitles; - return showAxisTitles || showSideTitles; - } - - List stackWidgets(BoxConstraints constraints) { - final widgets = [ - Container( - margin: data.titlesData.allSidesPadding, - decoration: BoxDecoration( - border: data.borderData.isVisible() ? data.borderData.border : null, - ), - child: chart, - ), - ]; - - int insertIndex(bool drawBelow) => drawBelow ? 0 : widgets.length; - - if (showLeftTitles) { - widgets.insert( - insertIndex(data.titlesData.leftTitles.drawBelowEverything), - SideTitlesWidget( - side: AxisSide.left, - axisChartData: data, - parentSize: constraints.biggest, - ), - ); - } - - if (showTopTitles) { - widgets.insert( - insertIndex(data.titlesData.topTitles.drawBelowEverything), - SideTitlesWidget( - side: AxisSide.top, - axisChartData: data, - parentSize: constraints.biggest, - ), - ); - } - - if (showRightTitles) { - widgets.insert( - insertIndex(data.titlesData.rightTitles.drawBelowEverything), - SideTitlesWidget( - side: AxisSide.right, - axisChartData: data, - parentSize: constraints.biggest, - ), - ); - } - - if (showBottomTitles) { - widgets.insert( - insertIndex(data.titlesData.bottomTitles.drawBelowEverything), - SideTitlesWidget( - side: AxisSide.bottom, - axisChartData: data, - parentSize: constraints.biggest, - ), - ); - } - return widgets; - } - - @override - Widget build(BuildContext context) { - return LayoutBuilder( - builder: (context, constraints) { - return Stack(children: stackWidgets(constraints)); - }, - ); - } -} diff --git a/lib/src/chart/base/axis_chart/axis_chart_widgets.dart b/lib/src/chart/base/axis_chart/axis_chart_widgets.dart deleted file mode 100644 index c3e1788e00..0000000000 --- a/lib/src/chart/base/axis_chart/axis_chart_widgets.dart +++ /dev/null @@ -1,142 +0,0 @@ -import 'package:fl_chart/fl_chart.dart'; -import 'package:fl_chart/src/chart/base/axis_chart/axis_chart_helper.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter/scheduler.dart'; - -/// Wraps a [child] widget and applies some default behaviours -/// -/// Recommended to be used in [SideTitles.getTitlesWidget] -/// You need to pass [axisSide] value that provided by [TitleMeta] -/// It forces the widget to be close to the chart. -/// It also applies a [space] to the chart. -/// You can also fill [angle] in radians if you need to rotate your widget. -/// To force widget to be positioned within its axis bounding box, -/// define [fitInside] by passing [SideTitleFitInsideData] -class SideTitleWidget extends StatefulWidget { - const SideTitleWidget({ - super.key, - required this.child, - required this.axisSide, - this.space = 8.0, - this.angle = 0.0, - this.fitInside = const SideTitleFitInsideData( - enabled: false, - distanceFromEdge: 0, - parentAxisSize: 0, - axisPosition: 0, - ), - }); - - final AxisSide axisSide; - final double space; - final Widget child; - final double angle; - - /// Define fitInside options with [SideTitleFitInsideData] - /// - /// To makes things simpler, it's recommended to use - /// [SideTitleFitInsideData.fromTitleMeta] and pass the - /// TitleMeta provided from [SideTitles.getTitlesWidget] - /// - /// If [fitInside.enabled] is true, the widget will be placed - /// inside the parent axis bounding box. - /// - /// Some translations will be applied to force - /// children to be positioned inside the parent axis bounding box. - /// - /// Will override the [SideTitleWidget.space] and caused - /// spacing between [SideTitles] children might be not equal. - final SideTitleFitInsideData fitInside; - - @override - State createState() => _SideTitleWidgetState(); -} - -class _SideTitleWidgetState extends State { - Alignment _getAlignment() { - switch (widget.axisSide) { - case AxisSide.left: - return Alignment.centerRight; - case AxisSide.top: - return Alignment.bottomCenter; - case AxisSide.right: - return Alignment.centerLeft; - case AxisSide.bottom: - return Alignment.topCenter; - } - } - - EdgeInsets _getMargin() { - switch (widget.axisSide) { - case AxisSide.left: - return EdgeInsets.only(right: widget.space); - case AxisSide.top: - return EdgeInsets.only(bottom: widget.space); - case AxisSide.right: - return EdgeInsets.only(left: widget.space); - case AxisSide.bottom: - return EdgeInsets.only(top: widget.space); - } - } - - /// Calculate child width/height - final GlobalKey widgetKey = GlobalKey(); - double? _childSize; - void _getChildSize(_) { - // If fitInside is false, no need to find child size - if (!widget.fitInside.enabled) return; - - // If childSize is not null, no need to find the size anymore - if (_childSize != null) return; - - final context = widgetKey.currentContext; - if (context == null) return; - - // Set size based on its axis side - final size = switch (widget.axisSide) { - AxisSide.left || AxisSide.right => context.size?.height ?? 0, - AxisSide.top || AxisSide.bottom => context.size?.width ?? 0, - }; - - // If childSize is the same, no need to set new value - if (_childSize == size) return; - - setState(() => _childSize = size); - } - - @override - void initState() { - super.initState(); - SchedulerBinding.instance.addPostFrameCallback(_getChildSize); - } - - @override - void didUpdateWidget(covariant SideTitleWidget oldWidget) { - super.didUpdateWidget(oldWidget); - SchedulerBinding.instance.addPostFrameCallback(_getChildSize); - } - - @override - Widget build(BuildContext context) { - return Transform.translate( - offset: !widget.fitInside.enabled - ? Offset.zero - : AxisChartHelper().calcFitInsideOffset( - axisSide: widget.axisSide, - childSize: _childSize, - parentAxisSize: widget.fitInside.parentAxisSize, - axisPosition: widget.fitInside.axisPosition, - distanceFromEdge: widget.fitInside.distanceFromEdge, - ), - child: Transform.rotate( - angle: widget.angle, - child: Container( - key: widgetKey, - margin: _getMargin(), - alignment: _getAlignment(), - child: widget.child, - ), - ), - ); - } -} diff --git a/lib/src/chart/base/axis_chart/side_titles/side_titles_flex.dart b/lib/src/chart/base/axis_chart/side_titles/side_titles_flex.dart deleted file mode 100644 index eacb08c213..0000000000 --- a/lib/src/chart/base/axis_chart/side_titles/side_titles_flex.dart +++ /dev/null @@ -1,298 +0,0 @@ -import 'dart:math' as math; - -import 'package:equatable/equatable.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter/rendering.dart'; - -/// Inspired from [Flex] -class SideTitlesFlex extends MultiChildRenderObjectWidget { - SideTitlesFlex({ - super.key, - required this.direction, - required this.axisSideMetaData, - List widgetHolders = - const [], - }) : axisSideTitlesMetaData = widgetHolders.map((e) => e.metaData).toList(), - super(children: widgetHolders.map((e) => e.widget).toList()); - - final Axis direction; - final AxisSideMetaData axisSideMetaData; - final List axisSideTitlesMetaData; - - @override - AxisSideTitlesRenderFlex createRenderObject(BuildContext context) { - return AxisSideTitlesRenderFlex( - direction: direction, - axisSideMetaData: axisSideMetaData, - axisSideTitlesMetaData: axisSideTitlesMetaData, - ); - } - - @override - void updateRenderObject( - BuildContext context, - covariant AxisSideTitlesRenderFlex renderObject, - ) { - renderObject - ..direction = direction - ..axisSideMetaData = axisSideMetaData - ..axisSideTitlesMetaData = axisSideTitlesMetaData; - } - - @override - void debugFillProperties(DiagnosticPropertiesBuilder properties) { - super.debugFillProperties(properties); - properties.add(EnumProperty('direction', direction)); - } -} - -class AxisSideTitlesRenderFlex extends RenderBox - with - ContainerRenderObjectMixin, - RenderBoxContainerDefaultsMixin, - DebugOverflowIndicatorMixin { - AxisSideTitlesRenderFlex({ - Axis direction = Axis.horizontal, - required AxisSideMetaData axisSideMetaData, - required List axisSideTitlesMetaData, - }) : _direction = direction, - _axisSideMetaData = axisSideMetaData, - _axisSideTitlesMetaData = axisSideTitlesMetaData; - - Axis get direction => _direction; - Axis _direction; - - set direction(Axis value) { - if (_direction != value) { - _direction = value; - markNeedsLayout(); - } - } - - AxisSideMetaData get axisSideMetaData => _axisSideMetaData; - AxisSideMetaData _axisSideMetaData; - - set axisSideMetaData(AxisSideMetaData value) { - if (_axisSideMetaData != value) { - _axisSideMetaData = value; - markNeedsLayout(); - } - } - - List get axisSideTitlesMetaData => - _axisSideTitlesMetaData; - List _axisSideTitlesMetaData; - - set axisSideTitlesMetaData(List value) { - if (_axisSideTitlesMetaData != value) { - _axisSideTitlesMetaData = value; - markNeedsLayout(); - } - } - - @override - void setupParentData(RenderBox child) { - if (child.parentData is! FlexParentData) { - child.parentData = FlexParentData(); - } - } - - @override - bool get debugNeedsLayout => false; - - @override - double? computeDistanceToActualBaseline(TextBaseline baseline) { - if (_direction == Axis.horizontal) { - return defaultComputeDistanceToHighestActualBaseline(baseline); - } - return defaultComputeDistanceToFirstActualBaseline(baseline); - } - - double _getCrossSize(Size size) { - switch (_direction) { - case Axis.horizontal: - return size.height; - case Axis.vertical: - return size.width; - } - } - - double _getMainSize(Size size) { - switch (_direction) { - case Axis.horizontal: - return size.width; - case Axis.vertical: - return size.height; - } - } - - @override - Size computeDryLayout(BoxConstraints constraints) { - final sizes = _computeSizes( - layoutChild: ChildLayoutHelper.dryLayoutChild, - constraints: constraints, - ); - - switch (_direction) { - case Axis.horizontal: - return constraints.constrain(Size(sizes.mainSize, sizes.crossSize)); - case Axis.vertical: - return constraints.constrain(Size(sizes.crossSize, sizes.mainSize)); - } - } - - _LayoutSizes _computeSizes({ - required BoxConstraints constraints, - required ChildLayouter layoutChild, - }) { - // Determine used flex factor, size inflexible items, calculate free space. - final maxMainSize = _direction == Axis.horizontal - ? constraints.maxWidth - : constraints.maxHeight; - final canFlex = maxMainSize < double.infinity; - - var crossSize = 0.0; - var allocatedSize = 0.0; // Sum of the sizes of the non-flexible children. - var child = firstChild; - while (child != null) { - final childParentData = child.parentData! as FlexParentData; - - // Stretch - final innerConstraints = switch (_direction) { - Axis.horizontal => BoxConstraints.tightFor( - height: constraints.maxHeight, - ), - Axis.vertical => BoxConstraints.tightFor( - width: constraints.maxWidth, - ), - }; - - final childSize = layoutChild(child, innerConstraints); - allocatedSize += _getMainSize(childSize); - crossSize = math.max(crossSize, _getCrossSize(childSize)); - assert(child.parentData == childParentData); - child = childParentData.nextSibling; - } - - final idealSize = canFlex ? maxMainSize : allocatedSize; - return _LayoutSizes( - mainSize: idealSize, - crossSize: crossSize, - allocatedSize: allocatedSize, - ); - } - - @override - void performLayout() { - final constraints = this.constraints; - final sizes = _computeSizes( - layoutChild: ChildLayoutHelper.layoutChild, - constraints: constraints, - ); - - var actualSize = sizes.mainSize; - var crossSize = sizes.crossSize; - - // Align items along the main axis. - switch (_direction) { - case Axis.horizontal: - size = constraints.constrain(Size(actualSize, crossSize)); - actualSize = size.width; - crossSize = size.height; - case Axis.vertical: - size = constraints.constrain(Size(crossSize, actualSize)); - actualSize = size.height; - crossSize = size.width; - } - - // Position elements - var child = firstChild; - var counter = 0; - while (child != null) { - final childParentData = child.parentData! as FlexParentData; - final metaData = _axisSideTitlesMetaData[counter]; - final double childCrossPosition; - - // Stretch - childCrossPosition = 0.0; - final childMainPosition = - metaData.axisPixelLocation - (_getMainSize(child.size) / 2); - childParentData.offset = switch (_direction) { - Axis.horizontal => Offset(childMainPosition, childCrossPosition), - Axis.vertical => Offset(childCrossPosition, childMainPosition), - }; - child = childParentData.nextSibling; - counter++; - } - } - - @override - bool hitTestChildren(BoxHitTestResult result, {required Offset position}) { - return defaultHitTestChildren(result, position: position); - } - - @override - void paint(PaintingContext context, Offset offset) { - // There's no point in drawing the children if we're empty. - if (size.isEmpty) { - return; - } - - _clipRectLayer.layer = null; - defaultPaint(context, offset); - } - - final LayerHandle _clipRectLayer = - LayerHandle(); - - @override - void dispose() { - _clipRectLayer.layer = null; - super.dispose(); - } - - @override - void debugFillProperties(DiagnosticPropertiesBuilder properties) { - super.debugFillProperties(properties); - properties.add(EnumProperty('direction', direction)); - } -} - -class _LayoutSizes { - const _LayoutSizes({ - required this.mainSize, - required this.crossSize, - required this.allocatedSize, - }); - - final double mainSize; - final double crossSize; - final double allocatedSize; -} - -class AxisSideMetaData { - AxisSideMetaData(this.minValue, this.maxValue, this.axisViewSize); - final double minValue; - final double maxValue; - final double axisViewSize; - - double get diff => maxValue - minValue; -} - -class AxisSideTitleMetaData with EquatableMixin { - AxisSideTitleMetaData(this.axisValue, this.axisPixelLocation); - final double axisValue; - final double axisPixelLocation; - - @override - List get props => [ - axisValue, - axisPixelLocation, - ]; -} - -class AxisSideTitleWidgetHolder { - AxisSideTitleWidgetHolder(this.metaData, this.widget); - final AxisSideTitleMetaData metaData; - final Widget widget; -} diff --git a/lib/src/chart/base/axis_chart/side_titles/side_titles_widget.dart b/lib/src/chart/base/axis_chart/side_titles/side_titles_widget.dart deleted file mode 100644 index aa3f58ea55..0000000000 --- a/lib/src/chart/base/axis_chart/side_titles/side_titles_widget.dart +++ /dev/null @@ -1,266 +0,0 @@ -import 'package:fl_chart/fl_chart.dart'; -import 'package:fl_chart/src/chart/base/axis_chart/axis_chart_helper.dart'; -import 'package:fl_chart/src/chart/base/axis_chart/side_titles/side_titles_flex.dart'; -import 'package:fl_chart/src/extensions/bar_chart_data_extension.dart'; -import 'package:fl_chart/src/extensions/edge_insets_extension.dart'; -import 'package:fl_chart/src/extensions/fl_border_data_extension.dart'; -import 'package:fl_chart/src/extensions/fl_titles_data_extension.dart'; -import 'package:fl_chart/src/utils/utils.dart'; -import 'package:flutter/material.dart'; - -class SideTitlesWidget extends StatelessWidget { - const SideTitlesWidget({ - super.key, - required this.side, - required this.axisChartData, - required this.parentSize, - }); - final AxisSide side; - final AxisChartData axisChartData; - final Size parentSize; - - bool get isHorizontal => side == AxisSide.top || side == AxisSide.bottom; - - bool get isVertical => !isHorizontal; - - double get minX => axisChartData.minX; - - double get maxX => axisChartData.maxX; - - double get baselineX => axisChartData.baselineX; - - double get minY => axisChartData.minY; - - double get maxY => axisChartData.maxY; - - double get baselineY => axisChartData.baselineY; - - double get axisMin => isHorizontal ? minX : minY; - - double get axisMax => isHorizontal ? maxX : maxY; - - double get axisBaseLine => isHorizontal ? baselineX : baselineY; - - FlTitlesData get titlesData => axisChartData.titlesData; - - bool get isLeftOrTop => side == AxisSide.left || side == AxisSide.top; - - bool get isRightOrBottom => side == AxisSide.right || side == AxisSide.bottom; - - AxisTitles get axisTitles { - switch (side) { - case AxisSide.left: - return titlesData.leftTitles; - case AxisSide.top: - return titlesData.topTitles; - case AxisSide.right: - return titlesData.rightTitles; - case AxisSide.bottom: - return titlesData.bottomTitles; - } - } - - SideTitles get sideTitles => axisTitles.sideTitles; - - Axis get direction => isHorizontal ? Axis.horizontal : Axis.vertical; - - Axis get counterDirection => isHorizontal ? Axis.vertical : Axis.horizontal; - - Alignment get alignment { - switch (side) { - case AxisSide.left: - return Alignment.centerLeft; - case AxisSide.top: - return Alignment.topCenter; - case AxisSide.right: - return Alignment.centerRight; - case AxisSide.bottom: - return Alignment.bottomCenter; - } - } - - EdgeInsets get thisSidePadding { - final titlesPadding = titlesData.allSidesPadding; - final borderPadding = axisChartData.borderData.allSidesPadding; - switch (side) { - case AxisSide.right: - case AxisSide.left: - return titlesPadding.onlyTopBottom + borderPadding.onlyTopBottom; - case AxisSide.top: - case AxisSide.bottom: - return titlesPadding.onlyLeftRight + borderPadding.onlyLeftRight; - } - } - - double get thisSidePaddingTotal { - final borderPadding = axisChartData.borderData.allSidesPadding; - final titlesPadding = titlesData.allSidesPadding; - switch (side) { - case AxisSide.right: - case AxisSide.left: - return titlesPadding.vertical + borderPadding.vertical; - case AxisSide.top: - case AxisSide.bottom: - return titlesPadding.horizontal + borderPadding.horizontal; - } - } - - List makeWidgets( - double axisViewSize, - double axisMin, - double axisMax, - AxisSide side, - ) { - List axisPositions; - final interval = sideTitles.interval ?? - Utils().getEfficientInterval( - axisViewSize, - axisMax - axisMin, - ); - if (isHorizontal && axisChartData is BarChartData) { - final barChartData = axisChartData as BarChartData; - if (barChartData.barGroups.isEmpty) { - return []; - } - final xLocations = barChartData.calculateGroupsX(axisViewSize); - axisPositions = xLocations.asMap().entries.map((e) { - final index = e.key; - final xLocation = e.value; - final xValue = barChartData.barGroups[index].x; - return AxisSideTitleMetaData(xValue.toDouble(), xLocation); - }).toList(); - } else { - final axisValues = AxisChartHelper().iterateThroughAxis( - min: axisMin, - max: axisMax, - baseLine: axisBaseLine, - interval: interval, - ); - axisPositions = axisValues.map((axisValue) { - final axisDiff = axisMax - axisMin; - var portion = 0.0; - if (axisDiff > 0) { - portion = (axisValue - axisMin) / axisDiff; - } - if (isVertical) { - portion = 1 - portion; - } - final axisLocation = portion * axisViewSize; - return AxisSideTitleMetaData(axisValue, axisLocation); - }).toList(); - } - return axisPositions.map( - (metaData) { - return AxisSideTitleWidgetHolder( - metaData, - sideTitles.getTitlesWidget( - metaData.axisValue, - TitleMeta( - min: axisMin, - max: axisMax, - appliedInterval: interval, - sideTitles: sideTitles, - formattedValue: Utils().formatNumber( - axisMin, - axisMax, - metaData.axisValue, - ), - axisSide: side, - parentAxisSize: axisViewSize, - axisPosition: metaData.axisPixelLocation, - ), - ), - ); - }, - ).toList(); - } - - @override - Widget build(BuildContext context) { - if (!axisTitles.showAxisTitles && !axisTitles.showSideTitles) { - return Container(); - } - final axisViewSize = isHorizontal ? parentSize.width : parentSize.height; - return Align( - alignment: alignment, - child: Flex( - direction: counterDirection, - mainAxisSize: MainAxisSize.min, - children: [ - if (isLeftOrTop && axisTitles.axisNameWidget != null) - _AxisTitleWidget( - axisTitles: axisTitles, - side: side, - axisViewSize: axisViewSize, - ), - if (sideTitles.showTitles) - Container( - width: isHorizontal ? axisViewSize : sideTitles.reservedSize, - height: isHorizontal ? sideTitles.reservedSize : axisViewSize, - margin: thisSidePadding, - child: SideTitlesFlex( - direction: direction, - axisSideMetaData: AxisSideMetaData( - axisMin, - axisMax, - axisViewSize - thisSidePaddingTotal, - ), - widgetHolders: makeWidgets( - axisViewSize - thisSidePaddingTotal, - axisMin, - axisMax, - side, - ), - ), - ), - if (isRightOrBottom && axisTitles.axisNameWidget != null) - _AxisTitleWidget( - axisTitles: axisTitles, - side: side, - axisViewSize: axisViewSize, - ), - ], - ), - ); - } -} - -class _AxisTitleWidget extends StatelessWidget { - const _AxisTitleWidget({ - required this.axisTitles, - required this.side, - required this.axisViewSize, - }); - final AxisTitles axisTitles; - final AxisSide side; - final double axisViewSize; - - int get axisNameQuarterTurns { - switch (side) { - case AxisSide.right: - return 3; - case AxisSide.left: - return 3; - case AxisSide.top: - return 0; - case AxisSide.bottom: - return 0; - } - } - - bool get isHorizontal => side == AxisSide.top || side == AxisSide.bottom; - - @override - Widget build(BuildContext context) { - return SizedBox( - width: isHorizontal ? axisViewSize : axisTitles.axisNameSize, - height: isHorizontal ? axisTitles.axisNameSize : axisViewSize, - child: Center( - child: RotatedBox( - quarterTurns: axisNameQuarterTurns, - child: axisTitles.axisNameWidget, - ), - ), - ); - } -} diff --git a/lib/src/chart/base/base_chart/base_chart_data.dart b/lib/src/chart/base/base_chart/base_chart_data.dart deleted file mode 100644 index ebb522a7be..0000000000 --- a/lib/src/chart/base/base_chart/base_chart_data.dart +++ /dev/null @@ -1,206 +0,0 @@ -// coverage:ignore-file -import 'dart:core'; - -import 'package:equatable/equatable.dart'; -import 'package:fl_chart/fl_chart.dart'; -import 'package:fl_chart/src/chart/base/base_chart/base_chart_painter.dart'; -import 'package:fl_chart/src/extensions/border_extension.dart'; -import 'package:flutter/material.dart'; - -/// This class holds all data needed for [BaseChartPainter]. -/// -/// In this phase we draw the border, -/// and handle touches in an abstract way. -abstract class BaseChartData with EquatableMixin { - /// It draws 4 borders around your chart, you can customize it using [borderData], - /// [touchData] defines the touch behavior and responses. - BaseChartData({ - FlBorderData? borderData, - required this.touchData, - }) : borderData = borderData ?? FlBorderData(); - - /// Holds data to drawing border around the chart. - FlBorderData borderData; - - /// Holds data needed to touch behavior and responses. - FlTouchData touchData; - - BaseChartData lerp(BaseChartData a, BaseChartData b, double t); - - /// Used for equality check, see [EquatableMixin]. - @override - List get props => [ - borderData, - touchData, - ]; -} - -/// Holds data to drawing border around the chart. -class FlBorderData with EquatableMixin { - /// [show] Determines showing or hiding border around the chart. - /// [border] Determines the visual look of 4 borders, see [Border]. - FlBorderData({ - bool? show, - Border? border, - }) : show = show ?? true, - border = border ?? Border.all(); - final bool show; - Border border; - - /// returns false if all borders have 0 width or 0 opacity - bool isVisible() => show && border.isVisible(); - - /// Lerps a [FlBorderData] based on [t] value, check [Tween.lerp]. - static FlBorderData lerp(FlBorderData a, FlBorderData b, double t) { - return FlBorderData( - show: b.show, - border: Border.lerp(a.border, b.border, t), - ); - } - - /// Copies current [FlBorderData] to a new [FlBorderData], - /// and replaces provided values. - FlBorderData copyWith({ - bool? show, - Border? border, - }) { - return FlBorderData( - show: show ?? this.show, - border: border ?? this.border, - ); - } - - /// Used for equality check, see [EquatableMixin]. - @override - List get props => [ - show, - border, - ]; -} - -/// Holds data to handle touch events, and touch responses in abstract way. -/// -/// There is a touch flow, explained [here](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/handle_touches.md) -/// in a simple way, each chart's renderer captures the touch events, and passes the pointerEvent -/// to the painter, and gets touched spot, and wraps it into a concrete [BaseTouchResponse]. -abstract class FlTouchData with EquatableMixin { - /// You can disable or enable the touch system using [enabled] flag, - const FlTouchData( - this.enabled, - this.touchCallback, - this.mouseCursorResolver, - this.longPressDuration, - ); - - /// You can disable or enable the touch system using [enabled] flag, - final bool enabled; - - /// [touchCallback] notifies you about the happened touch/pointer events. - /// It gives you a [FlTouchEvent] which is the happened event such as [FlPointerHoverEvent], [FlTapUpEvent], ... - /// It also gives you a [BaseTouchResponse] which is the chart specific type and contains information - /// about the elements that has touched. - final BaseTouchCallback? touchCallback; - - /// Using [mouseCursorResolver] you can change the mouse cursor - /// based on the provided [FlTouchEvent] and [BaseTouchResponse] - final MouseCursorResolver? mouseCursorResolver; - - /// This property that allows to customize the duration of the longPress gesture. - /// default to 500 milliseconds refer to [kLongPressTimeout]. - final Duration? longPressDuration; - - /// Used for equality check, see [EquatableMixin]. - @override - List get props => [ - enabled, - touchCallback, - mouseCursorResolver, - longPressDuration, - ]; -} - -/// Holds data to clipping chart around its borders. -class FlClipData with EquatableMixin { - /// Creates data that clips specified sides - const FlClipData({ - required this.top, - required this.bottom, - required this.left, - required this.right, - }); - - /// Creates data that clips all sides - const FlClipData.all() - : this(top: true, bottom: true, left: true, right: true); - - /// Creates data that clips only top and bottom side - const FlClipData.vertical() - : this(top: true, bottom: true, left: false, right: false); - - /// Creates data that clips only left and right side - const FlClipData.horizontal() - : this(top: false, bottom: false, left: true, right: true); - - /// Creates data that doesn't clip any side - const FlClipData.none() - : this(top: false, bottom: false, left: false, right: false); - - final bool top; - final bool bottom; - final bool left; - final bool right; - - /// Checks whether any of the sides should be clipped - bool get any => top || bottom || left || right; - - /// Copies current [FlBorderData] to a new [FlBorderData], - /// and replaces provided values. - FlClipData copyWith({ - bool? top, - bool? bottom, - bool? left, - bool? right, - }) { - return FlClipData( - top: top ?? this.top, - bottom: bottom ?? this.bottom, - left: left ?? this.left, - right: right ?? this.right, - ); - } - - /// Used for equality check, see [EquatableMixin]. - @override - List get props => [top, bottom, left, right]; -} - -/// Chart's touch callback. -typedef BaseTouchCallback = void Function( - FlTouchEvent, - R?, -); - -/// It gives you the happened [FlTouchEvent] and existed [R] data at the event's location, -/// then you should provide a [MouseCursor] to change the cursor at the event's location. -/// For example you can pass the [SystemMouseCursors.click] to change the mouse cursor to click. -typedef MouseCursorResolver = MouseCursor Function( - FlTouchEvent, - R?, -); - -/// This class holds the touch response details of charts. -abstract class BaseTouchResponse { - const BaseTouchResponse(); -} - -/// Controls an element horizontal alignment to given point. -enum FLHorizontalAlignment { - /// Element shown horizontally center aligned to a given point. - center, - - /// Element shown on the left side of the given point. - left, - - /// Element shown on the right side of the given point. - right, -} diff --git a/lib/src/chart/base/base_chart/base_chart_painter.dart b/lib/src/chart/base/base_chart/base_chart_painter.dart deleted file mode 100644 index 3e3d1ee950..0000000000 --- a/lib/src/chart/base/base_chart/base_chart_painter.dart +++ /dev/null @@ -1,32 +0,0 @@ -// coverage:ignore-file -import 'package:fl_chart/src/chart/base/base_chart/base_chart_data.dart'; -import 'package:fl_chart/src/utils/canvas_wrapper.dart'; -import 'package:flutter/material.dart'; - -/// Base class of our painters. -class BaseChartPainter { - /// Draws some basic elements - const BaseChartPainter(); - - // Paints [BaseChartData] into the provided canvas. - void paint( - BuildContext context, - CanvasWrapper canvasWrapper, - PaintHolder holder, - ) {} -} - -/// Holds data for painting on canvas -class PaintHolder { - /// Holds data for painting on canvas - const PaintHolder(this.data, this.targetData, this.textScaler); - - /// [data] is what we need to show frame by frame (it might be changed by an animator) - final Data data; - - /// [targetData] is the target of animation that is playing. - final Data targetData; - - /// system [TextScaler] used for scaling texts for better readability - final TextScaler textScaler; -} diff --git a/lib/src/chart/base/base_chart/fl_touch_event.dart b/lib/src/chart/base/base_chart/fl_touch_event.dart deleted file mode 100644 index 73e235dfdc..0000000000 --- a/lib/src/chart/base/base_chart/fl_touch_event.dart +++ /dev/null @@ -1,249 +0,0 @@ -// coverage:ignore-file -import 'package:flutter/foundation.dart'; -import 'package:flutter/gestures.dart'; -import 'package:flutter/services.dart'; - -/// Parent class for several kind of touch/pointer events (like tap, panMode, longPressStart, ...) -abstract class FlTouchEvent { - const FlTouchEvent(); - - /// Represents the position of happened touch/pointer event - /// - /// Some events such as [FlPanCancelEvent] and [FlTapCancelEvent] - /// doesn't have any position (their details come from flutter engine). - /// That's why this field is nullable - Offset? get localPosition => null; - - /// excludes exit or up events to show interactions on charts - bool get isInterestedForInteractions { - final isLinux = defaultTargetPlatform == TargetPlatform.linux; - final isMacOS = defaultTargetPlatform == TargetPlatform.macOS; - final isWindows = defaultTargetPlatform == TargetPlatform.windows; - - final isDesktopOrWeb = kIsWeb || isLinux || isMacOS || isWindows; - - /// In desktop when mouse hovers into a chart element using [FlPointerHoverEvent], we show the interaction - /// and when tap happens at the same position, interaction will be dismissed because of [FlTapUpEvent]. - /// That's why we exclude it on desktop or web - if (isDesktopOrWeb && this is FlTapUpEvent) { - return true; - } - - return this is! FlPanEndEvent && - this is! FlPanCancelEvent && - this is! FlPointerExitEvent && - this is! FlLongPressEnd && - this is! FlTapUpEvent && - this is! FlTapCancelEvent; - } -} - -/// When a pointer has contacted the screen and might begin to move -/// -/// The [details] object provides the position of the touch. -/// Inspired from [GestureDragDownCallback] -class FlPanDownEvent extends FlTouchEvent { - const FlPanDownEvent(this.details); - - /// Contains information of happened touch gesture - final DragDownDetails details; - - /// Represents the position of happened touch/pointer event - @override - Offset get localPosition => details.localPosition; -} - -/// When a pointer has contacted the screen and has begun to move. -/// -/// The [details] object provides the position of the touch when it first -/// touched the surface. -/// Inspired from [GestureDragStartCallback]. -class FlPanStartEvent extends FlTouchEvent { - /// Creates - const FlPanStartEvent(this.details); - - /// Contains information of happened touch gesture - final DragStartDetails details; - - /// Represents the position of happened touch/pointer event - @override - Offset get localPosition => details.localPosition; -} - -/// When a pointer that is in contact with the screen and moving -/// has moved again. -/// -/// The [details] object provides the position of the touch and the distance it -/// has traveled since the last update. -/// Inspired from [GestureDragUpdateCallback] -class FlPanUpdateEvent extends FlTouchEvent { - const FlPanUpdateEvent(this.details); - - /// Contains information of happened touch gesture - final DragUpdateDetails details; - - /// Represents the position of happened touch/pointer event - @override - Offset get localPosition => details.localPosition; -} - -/// When the pointer that previously triggered a [FlPanStartEvent] did not complete. -/// Inspired from [GestureDragCancelCallback] -class FlPanCancelEvent extends FlTouchEvent { - const FlPanCancelEvent(); -} - -/// When a pointer that was previously in contact with the screen -/// and moving is no longer in contact with the screen. -/// -/// The velocity at which the pointer was moving when it stopped contacting -/// the screen is available in the [details]. -/// Inspired from [GestureDragEndCallback] -class FlPanEndEvent extends FlTouchEvent { - const FlPanEndEvent(this.details); - - /// Contains information of happened touch gesture - final DragEndDetails details; -} - -/// When a pointer that might cause a tap has contacted the -/// screen. -/// -/// The position at which the pointer contacted the screen is available in the -/// [details]. -/// Inspired from [GestureTapDownCallback] -class FlTapDownEvent extends FlTouchEvent { - const FlTapDownEvent(this.details); - - /// Contains information of happened touch gesture - final TapDownDetails details; - - /// Represents the position of happened touch/pointer event - @override - Offset get localPosition => details.localPosition; -} - -/// When the pointer that previously triggered a [FlTapDownEvent] will not end up causing a tap. -/// Inspired from [GestureTapCancelCallback] -class FlTapCancelEvent extends FlTouchEvent { - const FlTapCancelEvent(); -} - -/// When a pointer that will trigger a tap has stopped contacting -/// the screen. -/// -/// The position at which the pointer stopped contacting the screen is available -/// in the [details]. -/// Inspired from [GestureTapUpCallback] -class FlTapUpEvent extends FlTouchEvent { - const FlTapUpEvent(this.details); - - /// Contains information of happened touch gesture - final TapUpDetails details; - - /// Represents the position of happened touch/pointer event - @override - Offset get localPosition => details.localPosition; -} - -/// Called When a pointer has remained in contact with the screen at the -/// same location for a long period of time. -/// -/// Details are available in the [details]. -/// -/// Inspired from [GestureLongPressStartCallback] -class FlLongPressStart extends FlTouchEvent { - const FlLongPressStart(this.details); - - /// Contains information of happened touch gesture - final LongPressStartDetails details; - - /// Represents the position of happened touch/pointer event - @override - Offset get localPosition => details.localPosition; -} - -/// When a pointer is moving after being held in contact at the same -/// location for a long period of time. Reports the new position and its offset -/// from the original down position. -/// -/// Details are available in the [details] -/// -/// Inspired from [GestureLongPressMoveUpdateCallback] -class FlLongPressMoveUpdate extends FlTouchEvent { - const FlLongPressMoveUpdate(this.details); - - /// Contains information of happened touch gesture - final LongPressMoveUpdateDetails details; - - /// Represents the position of happened touch/pointer event - @override - Offset get localPosition => details.localPosition; -} - -/// When a pointer stops contacting the screen after a long press -/// gesture was detected. Also reports the position where the pointer stopped -/// contacting the screen. -/// -/// Details are available in the [details] -/// -/// Inspired from [GestureLongPressEndCallback] -class FlLongPressEnd extends FlTouchEvent { - const FlLongPressEnd(this.details); - - /// Contains information of happened touch gesture - final LongPressEndDetails details; - - /// Represents the position of happened touch/pointer event - @override - Offset get localPosition => details.localPosition; -} - -/// The pointer has moved with respect to the device while the pointer is or is -/// not in contact with the device, and it has entered our chart. -/// -/// Details are available in the [event] -/// -/// Inspired from [PointerEnterEventListener] -class FlPointerEnterEvent extends FlTouchEvent { - const FlPointerEnterEvent(this.event); - - /// Contains information of happened pointer event - final PointerEnterEvent event; - - /// Represents the position of happened touch/pointer event - @override - Offset get localPosition => event.localPosition; -} - -/// The pointer has moved with respect to the device while the pointer is not -/// in contact with the device. -/// -/// Details are available in the [event] -/// -/// Inspired from [PointerHoverEventListener] -class FlPointerHoverEvent extends FlTouchEvent { - const FlPointerHoverEvent(this.event); - - /// Contains information of happened pointer event - final PointerHoverEvent event; - - /// Represents the position of happened touch/pointer event - @override - Offset get localPosition => event.localPosition; -} - -/// The pointer has moved with respect to the device while the pointer is or is -/// not in contact with the device, and exited our chart. -/// -/// Inspired from [PointerExitEventListener] which contains [PointerExitEvent] -class FlPointerExitEvent extends FlTouchEvent { - const FlPointerExitEvent(this.event); - - /// Contains information of happened pointer event - final PointerExitEvent event; - - /// Represents the position of happened touch/pointer event - @override - Offset get localPosition => event.localPosition; -} diff --git a/lib/src/chart/base/base_chart/render_base_chart.dart b/lib/src/chart/base/base_chart/render_base_chart.dart deleted file mode 100644 index 7652cc6d4e..0000000000 --- a/lib/src/chart/base/base_chart/render_base_chart.dart +++ /dev/null @@ -1,190 +0,0 @@ -// coverage:ignore-file -import 'package:fl_chart/src/chart/base/base_chart/base_chart_data.dart'; -import 'package:fl_chart/src/chart/base/base_chart/fl_touch_event.dart'; -import 'package:flutter/cupertino.dart'; -import 'package:flutter/gestures.dart'; -import 'package:flutter/rendering.dart'; -import 'package:flutter/services.dart'; - -/// It implements shared logics between our renderers such as touch/pointer events recognition, size, layout, ... -abstract class RenderBaseChart extends RenderBox - implements MouseTrackerAnnotation { - /// We use [FlTouchData] to retrieve [FlTouchData.touchCallback] and [FlTouchData.mouseCursorResolver] - /// to invoke them when touch happens. - RenderBaseChart(FlTouchData? touchData, BuildContext context) - : _buildContext = context { - updateBaseTouchData(touchData); - initGestureRecognizers(); - } - - // We use buildContext to retrieve Theme data - BuildContext get buildContext => _buildContext; - BuildContext _buildContext; - set buildContext(BuildContext value) { - _buildContext = value; - markNeedsPaint(); - } - - void updateBaseTouchData(FlTouchData? value) { - _touchCallback = value?.touchCallback; - _mouseCursorResolver = value?.mouseCursorResolver; - _longPressDuration = value?.longPressDuration; - } - - BaseTouchCallback? _touchCallback; - MouseCursorResolver? _mouseCursorResolver; - Duration? _longPressDuration; - - MouseCursor _latestMouseCursor = MouseCursor.defer; - - late bool _validForMouseTracker; - - /// Recognizes pan gestures, such as onDown, onStart, onUpdate, onCancel, ... - late PanGestureRecognizer _panGestureRecognizer; - - /// Recognizes tap gestures, such as onTapDown, onTapCancel and onTapUp - late TapGestureRecognizer _tapGestureRecognizer; - - /// Recognizes longPress gestures, such as onLongPressStart, onLongPressMoveUpdate and onLongPressEnd - late LongPressGestureRecognizer _longPressGestureRecognizer; - - /// Initializes our recognizers and implement their callbacks. - void initGestureRecognizers() { - _panGestureRecognizer = PanGestureRecognizer(); - _panGestureRecognizer - ..onDown = (dragDownDetails) { - _notifyTouchEvent(FlPanDownEvent(dragDownDetails)); - } - ..onStart = (dragStartDetails) { - _notifyTouchEvent(FlPanStartEvent(dragStartDetails)); - } - ..onUpdate = (dragUpdateDetails) { - _notifyTouchEvent(FlPanUpdateEvent(dragUpdateDetails)); - } - ..onCancel = () { - _notifyTouchEvent(const FlPanCancelEvent()); - } - ..onEnd = (dragEndDetails) { - _notifyTouchEvent(FlPanEndEvent(dragEndDetails)); - }; - - _tapGestureRecognizer = TapGestureRecognizer(); - _tapGestureRecognizer - ..onTapDown = (tapDownDetails) { - _notifyTouchEvent(FlTapDownEvent(tapDownDetails)); - } - ..onTapCancel = () { - _notifyTouchEvent(const FlTapCancelEvent()); - } - ..onTapUp = (tapUpDetails) { - _notifyTouchEvent(FlTapUpEvent(tapUpDetails)); - }; - - _longPressGestureRecognizer = - LongPressGestureRecognizer(duration: _longPressDuration); - _longPressGestureRecognizer - ..onLongPressStart = (longPressStartDetails) { - _notifyTouchEvent(FlLongPressStart(longPressStartDetails)); - } - ..onLongPressMoveUpdate = (longPressMoveUpdateDetails) { - _notifyTouchEvent( - FlLongPressMoveUpdate(longPressMoveUpdateDetails), - ); - } - ..onLongPressEnd = (longPressEndDetails) => - _notifyTouchEvent(FlLongPressEnd(longPressEndDetails)); - } - - @override - void performLayout() { - size = computeDryLayout(constraints); - } - - @override - Size computeDryLayout(BoxConstraints constraints) { - return Size(constraints.maxWidth, constraints.maxHeight); - } - - @override - bool hitTestSelf(Offset position) => true; - - /// Feeds our gesture recognizers for handling events, we also handle [PointerHoverEvent] here. - /// - /// Our gesture recognizers are responsible for notifying us about happened gestures (such as tap, panMove, ...) - /// we need to give them [PointerDownEvent] then they will listen to the global [GestureBinding] for further events. - /// - /// We need to handle [PointerHoverEvent] because there is no gesture recognizer - /// for mouse hover events (in fact they don't have any gestures, they are just events). - @override - void handleEvent(PointerEvent event, covariant BoxHitTestEntry entry) { - assert(debugHandleEvent(event, entry)); - if (_touchCallback == null) { - return; - } - if (event is PointerDownEvent) { - _longPressGestureRecognizer.addPointer(event); - _tapGestureRecognizer.addPointer(event); - _panGestureRecognizer.addPointer(event); - } else if (event is PointerHoverEvent) { - _notifyTouchEvent(FlPointerHoverEvent(event)); - } - } - - /// Here we handle mouse hover enter event - @override - PointerEnterEventListener? get onEnter => - (event) => _notifyTouchEvent(FlPointerEnterEvent(event)); - - /// Here we handle mouse hover exit event - @override - PointerExitEventListener? get onExit => - (event) => _notifyTouchEvent(FlPointerExitEvent(event)); - - /// Invokes the [_touchCallback] to notify listeners of this [FlTouchEvent] - /// - /// We get a [BaseTouchResponse] using [getResponseAtLocation] for events which contains a localPosition. - /// Then we invoke [_touchCallback] using the [event] and [response]. - void _notifyTouchEvent(FlTouchEvent event) { - if (_touchCallback == null) { - return; - } - final localPosition = event.localPosition; - R? response; - if (localPosition != null) { - response = getResponseAtLocation(localPosition); - } - _touchCallback!(event, response); - - if (_mouseCursorResolver == null) { - _latestMouseCursor = MouseCursor.defer; - } else { - _latestMouseCursor = _mouseCursorResolver!(event, response); - } - } - - /// Represents the mouse cursor style when hovers on our chart - /// In the future we can change it runtime, for example we can turn it to - /// [SystemMouseCursors.click] when mouse hovers a specific point of our chart. - @override - MouseCursor get cursor => _latestMouseCursor; - - /// [MouseTracker] will catch us if this variable is true - @override - bool get validForMouseTracker => _validForMouseTracker; - - /// Charts need to implement this class to tell us what [BaseTouchResponse] is available at provided [localPosition] - /// When touch/pointer event happens, we send it to the user alongside the [FlTouchEvent] using [_touchCallback] - R getResponseAtLocation(Offset localPosition); - - @override - void attach(PipelineOwner owner) { - super.attach(owner); - _validForMouseTracker = true; - } - - @override - void detach() { - _validForMouseTracker = false; - super.detach(); - } -} diff --git a/lib/src/chart/base/line.dart b/lib/src/chart/base/line.dart deleted file mode 100644 index 7a42eca064..0000000000 --- a/lib/src/chart/base/line.dart +++ /dev/null @@ -1,34 +0,0 @@ -import 'dart:math' as math; - -import 'package:flutter/painting.dart'; - -/// Describes a line model (contains [from], and end [to]) -class Line { - const Line(this.from, this.to); - - /// Start of the line - final Offset from; - - /// End of the line - final Offset to; - - /// Returns the length of line - double magnitude() { - final diff = to - from; - final dx = diff.dx; - final dy = diff.dy; - return math.sqrt(dx * dx + dy * dy); - } - - /// Returns angle of the line in radians - double direction() { - final diff = to - from; - return math.atan(diff.dy / diff.dx); - } - - /// Returns the line in magnitude of 1.0 - Offset normalize() { - final diffOffset = to - from; - return diffOffset * (1.0 / magnitude()); - } -} diff --git a/lib/src/chart/line_chart/line_chart.dart b/lib/src/chart/line_chart/line_chart.dart deleted file mode 100644 index cee6c9d60d..0000000000 --- a/lib/src/chart/line_chart/line_chart.dart +++ /dev/null @@ -1,135 +0,0 @@ -import 'package:fl_chart/fl_chart.dart'; -import 'package:fl_chart/src/chart/base/axis_chart/axis_chart_scaffold_widget.dart'; -import 'package:fl_chart/src/chart/line_chart/line_chart_renderer.dart'; -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - -/// Renders a line chart as a widget, using provided [LineChartData]. -class LineChart extends ImplicitlyAnimatedWidget { - /// [data] determines how the [LineChart] should be look like, - /// when you make any change in the [LineChartData], it updates - /// new values with animation, and duration is [swapAnimationDuration]. - /// also you can change the [swapAnimationCurve] - /// which default is [Curves.linear]. - const LineChart( - this.data, { - this.chartRendererKey, - super.key, - super.duration = const Duration(milliseconds: 150), - super.curve = Curves.linear, - }); - - /// Determines how the [LineChart] should be look like. - final LineChartData data; - - /// We pass this key to our renderers which are supposed to - /// render the chart itself (without anything around the chart). - final Key? chartRendererKey; - - /// Creates a [_LineChartState] - @override - _LineChartState createState() => _LineChartState(); -} - -class _LineChartState extends AnimatedWidgetBaseState { - /// we handle under the hood animations (implicit animations) via this tween, - /// it lerps between the old [LineChartData] to the new one. - LineChartDataTween? _lineChartDataTween; - - /// If [LineTouchData.handleBuiltInTouches] is true, we override the callback to handle touches internally, - /// but we need to keep the provided callback to notify it too. - BaseTouchCallback? _providedTouchCallback; - - final List _showingTouchedTooltips = []; - - final Map> _showingTouchedIndicators = {}; - - @override - Widget build(BuildContext context) { - final showingData = _getData(); - - return AxisChartScaffoldWidget( - chart: LineChartLeaf( - data: _withTouchedIndicators(_lineChartDataTween!.evaluate(animation)), - targetData: _withTouchedIndicators(showingData), - key: widget.chartRendererKey, - ), - data: showingData, - ); - } - - LineChartData _withTouchedIndicators(LineChartData lineChartData) { - if (!lineChartData.lineTouchData.enabled || - !lineChartData.lineTouchData.handleBuiltInTouches) { - return lineChartData; - } - - return lineChartData.copyWith( - showingTooltipIndicators: _showingTouchedTooltips, - lineBarsData: lineChartData.lineBarsData.map((barData) { - final index = lineChartData.lineBarsData.indexOf(barData); - return barData.copyWith( - showingIndicators: _showingTouchedIndicators[index] ?? [], - ); - }).toList(), - ); - } - - LineChartData _getData() { - final lineTouchData = widget.data.lineTouchData; - if (lineTouchData.enabled && lineTouchData.handleBuiltInTouches) { - _providedTouchCallback = lineTouchData.touchCallback; - return widget.data.copyWith( - lineTouchData: widget.data.lineTouchData - .copyWith(touchCallback: _handleBuiltInTouch), - ); - } - return widget.data; - } - - void _handleBuiltInTouch( - FlTouchEvent event, - LineTouchResponse? touchResponse, - ) { - if (!mounted) { - return; - } - _providedTouchCallback?.call(event, touchResponse); - - if (!event.isInterestedForInteractions || - touchResponse?.lineBarSpots == null || - touchResponse!.lineBarSpots!.isEmpty) { - setState(() { - _showingTouchedTooltips.clear(); - _showingTouchedIndicators.clear(); - }); - return; - } - - setState(() { - final sortedLineSpots = List.of(touchResponse.lineBarSpots!) - ..sort((spot1, spot2) => spot2.y.compareTo(spot1.y)); - - _showingTouchedIndicators.clear(); - for (var i = 0; i < touchResponse.lineBarSpots!.length; i++) { - final touchedBarSpot = touchResponse.lineBarSpots![i]; - final barPos = touchedBarSpot.barIndex; - _showingTouchedIndicators[barPos] = [touchedBarSpot.spotIndex]; - } - - _showingTouchedTooltips - ..clear() - ..add(ShowingTooltipIndicators(sortedLineSpots)); - }); - } - - @override - void forEachTween(TweenVisitor visitor) { - _lineChartDataTween = visitor( - _lineChartDataTween, - _getData(), - (dynamic value) => - LineChartDataTween(begin: value as LineChartData, end: widget.data), - ) as LineChartDataTween?; - } -} diff --git a/lib/src/chart/line_chart/line_chart_data.dart b/lib/src/chart/line_chart/line_chart_data.dart deleted file mode 100644 index 3985e76eb4..0000000000 --- a/lib/src/chart/line_chart/line_chart_data.dart +++ /dev/null @@ -1,1497 +0,0 @@ -// coverage:ignore-file -import 'dart:ui'; - -import 'package:equatable/equatable.dart'; -import 'package:fl_chart/fl_chart.dart'; -import 'package:fl_chart/src/chart/line_chart/line_chart_helper.dart'; -import 'package:fl_chart/src/extensions/color_extension.dart'; -import 'package:fl_chart/src/extensions/gradient_extension.dart'; -import 'package:fl_chart/src/utils/lerp.dart'; -import 'package:flutter/material.dart' hide Image; - -/// [LineChart] needs this class to render itself. -/// -/// It holds data needed to draw a line chart, -/// including bar lines, spots, colors, touches, ... -class LineChartData extends AxisChartData with EquatableMixin { - /// [LineChart] draws some lines in various shapes and overlaps them. - /// lines are defined in [lineBarsData], sometimes you need to fill space between two bars - /// with a color or gradient, you can use [betweenBarsData] to achieve that. - /// - /// It draws some titles on left, top, right, bottom sides per each axis number, - /// you can modify [titlesData] to have your custom titles, - /// also you can define the axis title (one text per axis) for each side - /// using [axisTitleData], you can restrict the y axis using [minY] and [maxY] value, - /// and restrict x axis using [minX] and [maxX]. - /// - /// It draws a color as a background behind everything you can set it using [backgroundColor], - /// then a grid over it, you can customize it using [gridData], - /// and it draws 4 borders around your chart, you can customize it using [borderData]. - /// - /// You can annotate some regions with a highlight color using [rangeAnnotations]. - /// - /// You can modify [lineTouchData] to customize touch behaviors and responses. - /// - /// you can show some tooltipIndicators (a popup with an information) - /// on top of each [LineChartBarData.spots] using [showingTooltipIndicators], - /// just put line indicator number and spots indices you want to show it on top of them. - /// - /// [LineChart] draws some horizontal or vertical lines on above or below of everything, - /// they are useful in some scenarios, for example you can show average line, you can fill - /// [extraLinesData] property to have your extra lines. - /// - /// [clipData] forces the [LineChart] to draw lines inside the chart bounding box. - LineChartData({ - this.lineBarsData = const [], - this.betweenBarsData = const [], - super.titlesData = const FlTitlesData(), - super.extraLinesData = const ExtraLinesData(), - this.lineTouchData = const LineTouchData(), - this.showingTooltipIndicators = const [], - super.gridData = const FlGridData(), - super.borderData, - super.rangeAnnotations = const RangeAnnotations(), - double? minX, - double? maxX, - super.baselineX, - double? minY, - double? maxY, - super.baselineY, - super.clipData = const FlClipData.none(), - super.backgroundColor, - }) : super( - touchData: lineTouchData, - minX: - minX ?? LineChartHelper.calculateMaxAxisValues(lineBarsData).minX, - maxX: - maxX ?? LineChartHelper.calculateMaxAxisValues(lineBarsData).maxX, - minY: - minY ?? LineChartHelper.calculateMaxAxisValues(lineBarsData).minY, - maxY: - maxY ?? LineChartHelper.calculateMaxAxisValues(lineBarsData).maxY, - ); - - /// [LineChart] draws some lines in various shapes and overlaps them. - final List lineBarsData; - - /// Fills area between two [LineChartBarData] with a color or gradient. - final List betweenBarsData; - - /// Handles touch behaviors and responses. - final LineTouchData lineTouchData; - - /// You can show some tooltipIndicators (a popup with an information) - /// on top of each [LineChartBarData.spots] using [showingTooltipIndicators], - /// just put line indicator number and spots indices you want to show it on top of them. - final List showingTooltipIndicators; - - /// Lerps a [BaseChartData] based on [t] value, check [Tween.lerp]. - @override - LineChartData lerp(BaseChartData a, BaseChartData b, double t) { - if (a is LineChartData && b is LineChartData) { - return LineChartData( - minX: lerpDouble(a.minX, b.minX, t), - maxX: lerpDouble(a.maxX, b.maxX, t), - baselineX: lerpDouble(a.baselineX, b.baselineX, t), - minY: lerpDouble(a.minY, b.minY, t), - maxY: lerpDouble(a.maxY, b.maxY, t), - baselineY: lerpDouble(a.baselineY, b.baselineY, t), - backgroundColor: Color.lerp(a.backgroundColor, b.backgroundColor, t), - borderData: FlBorderData.lerp(a.borderData, b.borderData, t), - clipData: b.clipData, - extraLinesData: - ExtraLinesData.lerp(a.extraLinesData, b.extraLinesData, t), - gridData: FlGridData.lerp(a.gridData, b.gridData, t), - titlesData: FlTitlesData.lerp(a.titlesData, b.titlesData, t), - rangeAnnotations: - RangeAnnotations.lerp(a.rangeAnnotations, b.rangeAnnotations, t), - lineBarsData: - lerpLineChartBarDataList(a.lineBarsData, b.lineBarsData, t)!, - betweenBarsData: - lerpBetweenBarsDataList(a.betweenBarsData, b.betweenBarsData, t)!, - lineTouchData: b.lineTouchData, - showingTooltipIndicators: b.showingTooltipIndicators, - ); - } else { - throw Exception('Illegal State'); - } - } - - /// Copies current [LineChartData] to a new [LineChartData], - /// and replaces provided values. - LineChartData copyWith({ - List? lineBarsData, - List? betweenBarsData, - FlTitlesData? titlesData, - RangeAnnotations? rangeAnnotations, - ExtraLinesData? extraLinesData, - LineTouchData? lineTouchData, - List? showingTooltipIndicators, - FlGridData? gridData, - FlBorderData? borderData, - double? minX, - double? maxX, - double? baselineX, - double? minY, - double? maxY, - double? baselineY, - FlClipData? clipData, - Color? backgroundColor, - }) { - return LineChartData( - lineBarsData: lineBarsData ?? this.lineBarsData, - betweenBarsData: betweenBarsData ?? this.betweenBarsData, - titlesData: titlesData ?? this.titlesData, - rangeAnnotations: rangeAnnotations ?? this.rangeAnnotations, - extraLinesData: extraLinesData ?? this.extraLinesData, - lineTouchData: lineTouchData ?? this.lineTouchData, - showingTooltipIndicators: - showingTooltipIndicators ?? this.showingTooltipIndicators, - gridData: gridData ?? this.gridData, - borderData: borderData ?? this.borderData, - minX: minX ?? this.minX, - maxX: maxX ?? this.maxX, - baselineX: baselineX ?? this.baselineX, - minY: minY ?? this.minY, - maxY: maxY ?? this.maxY, - baselineY: baselineY ?? this.baselineY, - clipData: clipData ?? this.clipData, - backgroundColor: backgroundColor ?? this.backgroundColor, - ); - } - - /// Used for equality check, see [EquatableMixin]. - @override - List get props => [ - lineBarsData, - betweenBarsData, - titlesData, - extraLinesData, - lineTouchData, - showingTooltipIndicators, - gridData, - borderData, - rangeAnnotations, - minX, - maxX, - baselineX, - minY, - maxY, - baselineY, - clipData, - backgroundColor, - ]; -} - -/// Holds data for drawing each individual line in the [LineChart] -class LineChartBarData with EquatableMixin { - /// [BarChart] draws some lines and overlaps them in the chart's view, - /// You can have multiple lines by splitting them, - /// put a [FlSpot.nullSpot] between each section. - /// each line passes through [spots], with hard edges by default, - /// [isCurved] makes it curve for drawing, and [curveSmoothness] determines the curve smoothness. - /// - /// [show] determines the drawing, if set to false, it draws nothing. - /// - /// [mainColors] determines the color of drawing line, if one color provided it applies a solid color, - /// otherwise it gradients between provided colors for drawing the line. - /// Gradient happens using provided [colorStops], [gradientFrom], [gradientTo]. - /// if you want it draw normally, don't touch them, - /// check [LinearGradient] for understanding [colorStops] - /// - /// [barWidth] determines the thickness of drawing line, - /// - /// if [isCurved] is true, in some situations if the spots changes are in high values, - /// an overshooting will happen, we don't have any idea to solve this at the moment, - /// but you can set [preventCurveOverShooting] true, and update the threshold - /// using [preventCurveOvershootingThreshold] to achieve an acceptable curve, - /// check this [issue](https://github.com/imaNNeo/fl_chart/issues/25) - /// to overshooting understand the problem. - /// - /// [isStrokeCapRound] determines the shape of line's cap. - /// - /// [isStrokeJoinRound] determines the shape of the line joins. - /// - /// [belowBarData], and [aboveBarData] used to fill the space below or above the drawn line, - /// you can fill with a solid color or a linear gradient. - /// - /// [LineChart] draws points that the line is going through [spots], - /// you can customize it's appearance using [dotData]. - /// - /// there are some indicators with a line and bold point on each spot, - /// you can show them by filling [showingIndicators] with indices - /// you want to show indicator on them. - /// - /// [LineChart] draws the lines with dashed effect if you fill [dashArray]. - /// - /// If you want to have a Step Line Chart style, just set [isStepLineChart] true, - /// also you can tweak the [LineChartBarData.lineChartStepData]. - LineChartBarData({ - this.spots = const [], - this.show = true, - Color? color, - this.gradient, - this.barWidth = 2.0, - this.isCurved = false, - this.curveSmoothness = 0.35, - this.preventCurveOverShooting = false, - this.preventCurveOvershootingThreshold = 10.0, - this.isStrokeCapRound = false, - this.isStrokeJoinRound = false, - BarAreaData? belowBarData, - BarAreaData? aboveBarData, - this.dotData = const FlDotData(), - this.showingIndicators = const [], - this.dashArray, - this.shadow = const Shadow(color: Colors.transparent), - this.isStepLineChart = false, - this.lineChartStepData = const LineChartStepData(), - }) : color = - color ?? ((color == null && gradient == null) ? Colors.cyan : null), - belowBarData = belowBarData ?? BarAreaData(), - aboveBarData = aboveBarData ?? BarAreaData() { - FlSpot? mostLeft; - FlSpot? mostTop; - FlSpot? mostRight; - FlSpot? mostBottom; - - FlSpot? firstValidSpot; - try { - firstValidSpot = - spots.firstWhere((element) => element != FlSpot.nullSpot); - } catch (e) { - // There is no valid spot - } - if (firstValidSpot != null) { - for (final spot in spots) { - if (spot.isNull()) { - continue; - } - if (mostLeft == null || spot.x < mostLeft.x) { - mostLeft = spot; - } - - if (mostRight == null || spot.x > mostRight.x) { - mostRight = spot; - } - - if (mostTop == null || spot.y > mostTop.y) { - mostTop = spot; - } - - if (mostBottom == null || spot.y < mostBottom.y) { - mostBottom = spot; - } - } - mostLeftSpot = mostLeft!; - mostTopSpot = mostTop!; - mostRightSpot = mostRight!; - mostBottomSpot = mostBottom!; - } - } - - /// This line goes through this spots. - /// - /// You can have multiple lines by splitting them, - /// put a [FlSpot.nullSpot] between each section. - final List spots; - - /// We keep the most left spot to prevent redundant calculations - late final FlSpot mostLeftSpot; - - /// We keep the most top spot to prevent redundant calculations - late final FlSpot mostTopSpot; - - /// We keep the most right spot to prevent redundant calculations - late final FlSpot mostRightSpot; - - /// We keep the most bottom spot to prevent redundant calculations - late final FlSpot mostBottomSpot; - - /// Determines to show or hide the line. - final bool show; - - /// If provided, this [LineChartBarData] draws with this [color] - /// Otherwise we use [gradient] to draw the background. - /// It throws an exception if you provide both [color] and [gradient] - final Color? color; - - /// If provided, this [LineChartBarData] draws with this [gradient]. - /// Otherwise we use [color] to draw the background. - /// It throws an exception if you provide both [color] and [gradient] - final Gradient? gradient; - - /// Determines thickness of drawing line. - final double barWidth; - - /// If it's true, [LineChart] draws the line with curved edges, - /// otherwise it draws line with hard edges. - final bool isCurved; - - /// If [isCurved] is true, it determines smoothness of the curved edges. - final double curveSmoothness; - - /// Prevent overshooting when draw curve line with high value changes. - /// check this [issue](https://github.com/imaNNeo/fl_chart/issues/25) - final bool preventCurveOverShooting; - - /// Applies threshold for [preventCurveOverShooting] algorithm. - final double preventCurveOvershootingThreshold; - - /// Determines the style of line's cap. - final bool isStrokeCapRound; - - /// Determines the style of line joins. - final bool isStrokeJoinRound; - - /// Fills the space blow the line, using a color or gradient. - final BarAreaData belowBarData; - - /// Fills the space above the line, using a color or gradient. - final BarAreaData aboveBarData; - - /// Responsible to showing [spots] on the line as a circular point. - final FlDotData dotData; - - /// Show indicators based on provided indexes - final List showingIndicators; - - /// Determines the dash length and space respectively, fill it if you want to have dashed line. - final List? dashArray; - - /// Drops a shadow behind the bar line. - final Shadow shadow; - - /// If sets true, it draws the chart in Step Line Chart style, using [LineChartBarData.lineChartStepData]. - final bool isStepLineChart; - - /// Holds data for representing a Step Line Chart, and works only if [isStepChart] is true. - final LineChartStepData lineChartStepData; - - /// Lerps a [LineChartBarData] based on [t] value, check [Tween.lerp]. - static LineChartBarData lerp( - LineChartBarData a, - LineChartBarData b, - double t, - ) { - return LineChartBarData( - show: b.show, - barWidth: lerpDouble(a.barWidth, b.barWidth, t)!, - belowBarData: BarAreaData.lerp(a.belowBarData, b.belowBarData, t), - aboveBarData: BarAreaData.lerp(a.aboveBarData, b.aboveBarData, t), - curveSmoothness: b.curveSmoothness, - isCurved: b.isCurved, - isStrokeCapRound: b.isStrokeCapRound, - isStrokeJoinRound: b.isStrokeJoinRound, - preventCurveOverShooting: b.preventCurveOverShooting, - preventCurveOvershootingThreshold: lerpDouble( - a.preventCurveOvershootingThreshold, - b.preventCurveOvershootingThreshold, - t, - )!, - dotData: FlDotData.lerp(a.dotData, b.dotData, t), - dashArray: lerpIntList(a.dashArray, b.dashArray, t), - color: Color.lerp(a.color, b.color, t), - gradient: Gradient.lerp(a.gradient, b.gradient, t), - spots: lerpFlSpotList(a.spots, b.spots, t)!, - showingIndicators: b.showingIndicators, - shadow: Shadow.lerp(a.shadow, b.shadow, t)!, - isStepLineChart: b.isStepLineChart, - lineChartStepData: - LineChartStepData.lerp(a.lineChartStepData, b.lineChartStepData, t), - ); - } - - /// Copies current [LineChartBarData] to a new [LineChartBarData], - /// and replaces provided values. - LineChartBarData copyWith({ - List? spots, - bool? show, - Color? color, - Gradient? gradient, - double? barWidth, - bool? isCurved, - double? curveSmoothness, - bool? preventCurveOverShooting, - double? preventCurveOvershootingThreshold, - bool? isStrokeCapRound, - bool? isStrokeJoinRound, - BarAreaData? belowBarData, - BarAreaData? aboveBarData, - FlDotData? dotData, - List? dashArray, - List? showingIndicators, - Shadow? shadow, - bool? isStepLineChart, - LineChartStepData? lineChartStepData, - }) { - return LineChartBarData( - spots: spots ?? this.spots, - show: show ?? this.show, - color: color ?? this.color, - gradient: gradient ?? this.gradient, - barWidth: barWidth ?? this.barWidth, - isCurved: isCurved ?? this.isCurved, - curveSmoothness: curveSmoothness ?? this.curveSmoothness, - preventCurveOverShooting: - preventCurveOverShooting ?? this.preventCurveOverShooting, - preventCurveOvershootingThreshold: preventCurveOvershootingThreshold ?? - this.preventCurveOvershootingThreshold, - isStrokeCapRound: isStrokeCapRound ?? this.isStrokeCapRound, - isStrokeJoinRound: isStrokeJoinRound ?? this.isStrokeJoinRound, - belowBarData: belowBarData ?? this.belowBarData, - aboveBarData: aboveBarData ?? this.aboveBarData, - dashArray: dashArray ?? this.dashArray, - dotData: dotData ?? this.dotData, - showingIndicators: showingIndicators ?? this.showingIndicators, - shadow: shadow ?? this.shadow, - isStepLineChart: isStepLineChart ?? this.isStepLineChart, - lineChartStepData: lineChartStepData ?? this.lineChartStepData, - ); - } - - /// Used for equality check, see [EquatableMixin]. - @override - List get props => [ - spots, - show, - color, - gradient, - barWidth, - isCurved, - curveSmoothness, - preventCurveOverShooting, - preventCurveOvershootingThreshold, - isStrokeCapRound, - isStrokeJoinRound, - belowBarData, - aboveBarData, - dotData, - showingIndicators, - dashArray, - shadow, - isStepLineChart, - lineChartStepData, - ]; -} - -/// Holds data for representing a Step Line Chart, and works only if [LineChartBarData.isStepChart] is true. -class LineChartStepData with EquatableMixin { - /// Determines the [stepDirection] of each step; - const LineChartStepData({this.stepDirection = stepDirectionMiddle}); - - /// Go to the next spot directly, with the current point's y value. - static const stepDirectionForward = 0.0; - - /// Go to the half with the current spot y, and with the next spot y for the rest. - static const stepDirectionMiddle = 0.5; - - /// Go to the next spot y and direct line to the next spot. - static const stepDirectionBackward = 1.0; - - /// Determines the direction of each step; - final double stepDirection; - - /// Lerps a [LineChartStepData] based on [t] value, check [Tween.lerp]. - static LineChartStepData lerp( - LineChartStepData a, - LineChartStepData b, - double t, - ) { - return LineChartStepData( - stepDirection: lerpDouble(a.stepDirection, b.stepDirection, t)!, - ); - } - - /// Used for equality check, see [EquatableMixin]. - @override - List get props => [stepDirection]; -} - -/// Holds data for filling an area (above or below) of the line with a color or gradient. -class BarAreaData with EquatableMixin { - /// if [show] is true, [LineChart] fills above and below area of each line - /// with a color or gradient. - /// - /// [color] determines the color of above or below space area, - /// if one color provided it applies a solid color, - /// otherwise it gradients between provided colors for drawing the line. - /// Gradient happens using provided [gradientColorStops], [gradientFrom], [gradientTo]. - /// if you want it draw normally, don't touch them, - /// check [LinearGradient] for understanding [gradientColorStops] - /// - /// If [spotsLine] is provided, it draws some lines from each spot - /// to the bottom or top of the chart. - /// - /// If [applyCutOffY] is true, it cuts the drawing by the [cutOffY] line. - BarAreaData({ - this.show = false, - Color? color, - this.gradient, - this.spotsLine = const BarAreaSpotsLine(), - this.cutOffY = 0, - this.applyCutOffY = false, - }) : color = color ?? - ((color == null && gradient == null) - ? Colors.blueGrey.withOpacity(0.5) - : null); - - final bool show; - - /// If provided, this [BarAreaData] draws with this [color] - /// Otherwise we use [gradient] to draw the background. - /// It throws an exception if you provide both [color] and [gradient] - final Color? color; - - /// If provided, this [BarAreaData] draws with this [gradient]. - /// Otherwise we use [color] to draw the background. - /// It throws an exception if you provide both [color] and [gradient] - final Gradient? gradient; - - /// holds data for drawing a line from each spot the the bottom, or top of the chart - final BarAreaSpotsLine spotsLine; - - /// cut the drawing below or above area to this y value - final double cutOffY; - - /// determines should or shouldn't apply cutOffY - final bool applyCutOffY; - - /// Lerps a [BarAreaData] based on [t] value, check [Tween.lerp]. - static BarAreaData lerp(BarAreaData a, BarAreaData b, double t) { - return BarAreaData( - show: b.show, - spotsLine: BarAreaSpotsLine.lerp(a.spotsLine, b.spotsLine, t), - color: Color.lerp(a.color, b.color, t), - // ignore: invalid_use_of_protected_member - gradient: Gradient.lerp(a.gradient, b.gradient, t), - cutOffY: lerpDouble(a.cutOffY, b.cutOffY, t)!, - applyCutOffY: b.applyCutOffY, - ); - } - - /// Used for equality check, see [EquatableMixin]. - @override - List get props => [ - show, - color, - gradient, - spotsLine, - cutOffY, - applyCutOffY, - ]; -} - -/// Holds data about filling below or above space of the bar line, -class BetweenBarsData with EquatableMixin { - BetweenBarsData({ - required this.fromIndex, - required this.toIndex, - Color? color, - this.gradient, - }) : color = color ?? - ((color == null && gradient == null) - ? Colors.blueGrey.withOpacity(0.5) - : null); - - /// The index of the lineBarsData from where the area has to be rendered - final int fromIndex; - - /// The index of the lineBarsData until where the area has to be rendered - final int toIndex; - - /// If provided, this [BetweenBarsData] draws with this [color] - /// Otherwise we use [gradient] to draw the background. - /// It throws an exception if you provide both [color] and [gradient] - final Color? color; - - /// If provided, this [BetweenBarsData] draws with this [gradient]. - /// Otherwise we use [color] to draw the background. - /// It throws an exception if you provide both [color] and [gradient] - final Gradient? gradient; - - /// Lerps a [BetweenBarsData] based on [t] value, check [Tween.lerp]. - static BetweenBarsData lerp(BetweenBarsData a, BetweenBarsData b, double t) { - return BetweenBarsData( - fromIndex: b.fromIndex, - toIndex: b.toIndex, - color: Color.lerp(a.color, b.color, t), - gradient: Gradient.lerp(a.gradient, b.gradient, t), - ); - } - - /// Used for equality check, see [EquatableMixin]. - @override - List get props => [ - fromIndex, - toIndex, - color, - gradient, - ]; -} - -/// Holds data for drawing line on the spots under the [BarAreaData]. -class BarAreaSpotsLine with EquatableMixin { - /// If [show] is true, [LineChart] draws some lines on above or below the spots, - /// you can customize the appearance of the lines using [flLineStyle] - /// and you can decide to show or hide the lines on each spot using [checkToShowSpotLine]. - const BarAreaSpotsLine({ - this.show = false, - this.flLineStyle = const FlLine(), - this.checkToShowSpotLine = showAllSpotsBelowLine, - this.applyCutOffY = true, - }); - - /// Determines to show or hide all the lines. - final bool show; - - /// Holds appearance of drawing line on the spots. - final FlLine flLineStyle; - - /// Checks to show or hide lines on the spots. - final CheckToShowSpotLine checkToShowSpotLine; - - /// Determines to inherit the cutOff properties from its parent [BarAreaData] - final bool applyCutOffY; - - /// Lerps a [BarAreaSpotsLine] based on [t] value, check [Tween.lerp]. - static BarAreaSpotsLine lerp( - BarAreaSpotsLine a, - BarAreaSpotsLine b, - double t, - ) { - return BarAreaSpotsLine( - show: b.show, - checkToShowSpotLine: b.checkToShowSpotLine, - flLineStyle: FlLine.lerp(a.flLineStyle, b.flLineStyle, t), - applyCutOffY: b.applyCutOffY, - ); - } - - /// Used for equality check, see [EquatableMixin]. - @override - List get props => [ - show, - flLineStyle, - checkToShowSpotLine, - applyCutOffY, - ]; -} - -/// It used for determine showing or hiding [BarAreaSpotsLine]s -/// -/// Gives you the checking spot, and you have to decide to -/// show or not show the line on the provided spot. -typedef CheckToShowSpotLine = bool Function(FlSpot spot); - -/// Shows all spot lines. -bool showAllSpotsBelowLine(FlSpot spot) { - return true; -} - -/// The callback passed to get the color of a [FlSpot] -/// -/// The callback receives [FlSpot], which is the target spot, -/// [double] is the percentage of spot along the bar line, -/// [LineChartBarData] is the chart's bar. -/// It should return a [Color] that needs to be used for drawing target. -typedef GetDotColorCallback = Color Function(FlSpot, double, LineChartBarData); - -/// If there is one color in [LineChartBarData.mainColors], it returns that color, -/// otherwise it returns the color along the gradient colors based on the [xPercentage]. -Color _defaultGetDotColor(FlSpot _, double xPercentage, LineChartBarData bar) { - if (bar.gradient != null && bar.gradient is LinearGradient) { - return lerpGradient( - bar.gradient!.colors, - bar.gradient!.getSafeColorStops(), - xPercentage / 100, - ); - } - return bar.gradient?.colors.first ?? bar.color ?? Colors.blueGrey; -} - -/// If there is one color in [LineChartBarData.mainColors], it returns that color in a darker mode, -/// otherwise it returns the color along the gradient colors based on the [xPercentage] in a darker mode. -Color _defaultGetDotStrokeColor( - FlSpot spot, - double xPercentage, - LineChartBarData bar, -) { - Color color; - if (bar.gradient != null && bar.gradient is LinearGradient) { - color = lerpGradient( - bar.gradient!.colors, - bar.gradient!.getSafeColorStops(), - xPercentage / 100, - ); - } else { - color = bar.gradient?.colors.first ?? bar.color ?? Colors.blueGrey; - } - return color.darken(); -} - -/// The callback passed to get the painter of a [FlSpot] -/// -/// The callback receives [FlSpot], which is the target spot, -/// [LineChartBarData] is the chart's bar. -/// [int] is the index position of the spot. -/// It should return a [FlDotPainter] that needs to be used for drawing target. -typedef GetDotPainterCallback = FlDotPainter Function( - FlSpot, - double, - LineChartBarData, - int, -); - -FlDotPainter _defaultGetDotPainter( - FlSpot spot, - double xPercentage, - LineChartBarData bar, - int index, { - double? size, -}) { - return FlDotCirclePainter( - radius: size, - color: _defaultGetDotColor(spot, xPercentage, bar), - strokeColor: _defaultGetDotStrokeColor(spot, xPercentage, bar), - ); -} - -/// This class holds data about drawing spot dots on the drawing bar line. -class FlDotData with EquatableMixin { - /// set [show] false to prevent dots from drawing, - /// if you want to show or hide dots in some spots, - /// override [checkToShowDot] to handle it in your way. - const FlDotData({ - this.show = true, - this.checkToShowDot = showAllDots, - this.getDotPainter = _defaultGetDotPainter, - }); - - /// Determines show or hide all dots. - final bool show; - - /// Checks to show or hide an individual dot. - final CheckToShowDot checkToShowDot; - - /// Callback which is called to set the painter of the given [FlSpot]. - /// The [FlSpot] is provided as parameter to this callback - final GetDotPainterCallback getDotPainter; - - /// Lerps a [FlDotData] based on [t] value, check [Tween.lerp]. - static FlDotData lerp(FlDotData a, FlDotData b, double t) { - return FlDotData( - show: b.show, - checkToShowDot: b.checkToShowDot, - getDotPainter: b.getDotPainter, - ); - } - - /// Used for equality check, see [EquatableMixin]. - @override - List get props => [ - show, - checkToShowDot, - getDotPainter, - ]; -} - -/// This class contains the interface that all DotPainters should conform to. -abstract class FlDotPainter with EquatableMixin { - const FlDotPainter(); - - /// This method should be overridden to draw the dot shape. - void draw(Canvas canvas, FlSpot spot, Offset offsetInCanvas); - - /// This method should be overridden to return the size of the shape. - Size getSize(FlSpot spot); -} - -/// This class is an implementation of a [FlDotPainter] that draws -/// a circled shape -class FlDotCirclePainter extends FlDotPainter { - /// The color of the circle is determined determined by [color], - /// [radius] determines the radius of the circle. - /// You can have a stroke line around the circle, - /// by setting the thickness with [strokeWidth], - /// and you can change the color of of the stroke with [strokeColor]. - FlDotCirclePainter({ - this.color = Colors.green, - double? radius, - this.strokeColor = const Color.fromRGBO(76, 175, 80, 1), - this.strokeWidth = 1.0, - }) : radius = radius ?? 4.0; - - /// The fill color to use for the circle - Color color; - - /// Customizes the radius of the circle - double radius; - - /// The stroke color to use for the circle - Color strokeColor; - - /// The stroke width to use for the circle - double strokeWidth; - - /// Implementation of the parent class to draw the circle - @override - void draw(Canvas canvas, FlSpot spot, Offset offsetInCanvas) { - if (strokeWidth != 0.0 && strokeColor.opacity != 0.0) { - canvas.drawCircle( - offsetInCanvas, - radius + (strokeWidth / 2), - Paint() - ..color = strokeColor - ..strokeWidth = strokeWidth - ..style = PaintingStyle.stroke, - ); - } - canvas.drawCircle( - offsetInCanvas, - radius, - Paint() - ..color = color - ..style = PaintingStyle.fill, - ); - } - - /// Implementation of the parent class to get the size of the circle - @override - Size getSize(FlSpot spot) { - return Size(radius * 2, radius * 2); - } - - /// Used for equality check, see [EquatableMixin]. - @override - List get props => [ - color, - radius, - strokeColor, - strokeWidth, - ]; -} - -/// This class is an implementation of a [FlDotPainter] that draws -/// a squared shape -class FlDotSquarePainter extends FlDotPainter { - /// The color of the square is determined determined by [color], - /// [size] determines the size of the square. - /// You can have a stroke line around the square, - /// by setting the thickness with [strokeWidth], - /// and you can change the color of of the stroke with [strokeColor]. - FlDotSquarePainter({ - this.color = Colors.green, - this.size = 4.0, - this.strokeColor = const Color.fromRGBO(76, 175, 80, 1), - this.strokeWidth = 1.0, - }); - - /// The fill color to use for the square - Color color; - - /// Customizes the size of the square - double size; - - /// The stroke color to use for the square - Color strokeColor; - - /// The stroke width to use for the square - double strokeWidth; - - /// Implementation of the parent class to draw the square - @override - void draw(Canvas canvas, FlSpot spot, Offset offsetInCanvas) { - if (strokeWidth != 0.0 && strokeColor.opacity != 0.0) { - canvas.drawRect( - Rect.fromCircle( - center: offsetInCanvas, - radius: (size / 2) + (strokeWidth / 2), - ), - Paint() - ..color = strokeColor - ..strokeWidth = strokeWidth - ..style = PaintingStyle.stroke, - ); - } - canvas.drawRect( - Rect.fromCircle( - center: offsetInCanvas, - radius: size / 2, - ), - Paint() - ..color = color - ..style = PaintingStyle.fill, - ); - } - - /// Implementation of the parent class to get the size of the square - @override - Size getSize(FlSpot spot) { - return Size(size, size); - } - - /// Used for equality check, see [EquatableMixin]. - @override - List get props => [ - color, - size, - strokeColor, - strokeWidth, - ]; -} - -/// This class is an implementation of a [FlDotPainter] that draws -/// a cross (X mark) shape -class FlDotCrossPainter extends FlDotPainter { - /// The [color] and [width] properties determines the color and thickness of the cross shape, - /// [size] determines the width and height of the shape. - FlDotCrossPainter({ - this.color = Colors.green, - this.size = 8.0, - this.width = 2.0, - }); - - /// The fill color to use for the X mark - Color color; - - /// Determines size (width and height) of shape. - double size; - - /// Determines thickness of X mark. - double width; - - /// Implementation of the parent class to draw the cross - @override - void draw(Canvas canvas, FlSpot spot, Offset offsetInCanvas) { - final path = Path() - ..moveTo(offsetInCanvas.dx, offsetInCanvas.dy) - ..relativeMoveTo(-size / 2, -size / 2) - ..relativeLineTo(size, size) - ..moveTo(offsetInCanvas.dx, offsetInCanvas.dy) - ..relativeMoveTo(size / 2, -size / 2) - ..relativeLineTo(-size, size); - - final paint = Paint() - ..style = PaintingStyle.stroke - ..strokeWidth = width - ..color = color; - - canvas.drawPath(path, paint); - } - - /// Implementation of the parent class to get the size of the circle - @override - Size getSize(FlSpot spot) { - return Size(size, size); - } - - /// Used for equality check, see [EquatableMixin]. - @override - List get props => [ - color, - size, - width, - ]; -} - -/// It determines showing or hiding [FlDotData] on the spots. -/// -/// It gives you the checking [FlSpot] and you should decide to -/// show or hide the dot on this spot by returning true or false. -typedef CheckToShowDot = bool Function(FlSpot spot, LineChartBarData barData); - -/// Shows all dots on spots. -bool showAllDots(FlSpot spot, LineChartBarData barData) { - return true; -} - -/// Shows a text label -abstract class FlLineLabel with EquatableMixin { - /// Draws a title on the line, align it with [alignment] over the line, - /// applies [padding] for spaces, and applies [style] for changing color, - /// size, ... of the text. - /// [show] determines showing label or not. - const FlLineLabel({ - required this.show, - required this.padding, - required this.style, - required this.alignment, - }); - - /// Determines showing label or not. - final bool show; - - /// Inner spaces around the drawing text. - final EdgeInsetsGeometry padding; - - /// Sets style of the drawing text. - final TextStyle? style; - - /// Aligns the text on the line. - final Alignment alignment; - - /// Used for equality check, see [EquatableMixin]. - @override - List get props => [ - show, - padding, - style, - alignment, - ]; -} - -/// Holds data to handle touch events, and touch responses in the [LineChart]. -/// -/// There is a touch flow, explained [here](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/handle_touches.md) -/// in a simple way, each chart's renderer captures the touch events, and passes the pointerEvent -/// to the painter, and gets touched spot, and wraps it into a concrete [LineTouchResponse]. -class LineTouchData extends FlTouchData with EquatableMixin { - /// You can disable or enable the touch system using [enabled] flag, - /// - /// [touchCallback] notifies you about the happened touch/pointer events. - /// It gives you a [FlTouchEvent] which is the happened event such as [FlPointerHoverEvent], [FlTapUpEvent], ... - /// It also gives you a [LineTouchResponse] which contains information - /// about the elements that has touched. - /// - /// Using [mouseCursorResolver] you can change the mouse cursor - /// based on the provided [FlTouchEvent] and [LineTouchResponse] - /// - /// if [handleBuiltInTouches] is true, [LineChart] shows a tooltip popup on top of the spots if - /// touch occurs (or you can show it manually using, [LineChartData.showingTooltipIndicators]) - /// and also it shows an indicator (contains a thicker line and larger dot on the targeted spot), - /// You can define how this indicator looks like through [getTouchedSpotIndicator] callback, - /// You can customize this tooltip using [touchTooltipData], indicator lines starts from position - /// controlled by [getTouchLineStart] and ends at position controlled by [getTouchLineEnd]. - /// If you need to have a distance threshold for handling touches, use [touchSpotThreshold]. - const LineTouchData({ - bool enabled = true, - BaseTouchCallback? touchCallback, - MouseCursorResolver? mouseCursorResolver, - Duration? longPressDuration, - this.touchTooltipData = const LineTouchTooltipData(), - this.getTouchedSpotIndicator = defaultTouchedIndicators, - this.touchSpotThreshold = 10, - this.distanceCalculator = _xDistance, - this.handleBuiltInTouches = true, - this.getTouchLineStart = defaultGetTouchLineStart, - this.getTouchLineEnd = defaultGetTouchLineEnd, - }) : super( - enabled, - touchCallback, - mouseCursorResolver, - longPressDuration, - ); - - /// Configs of how touch tooltip popup. - final LineTouchTooltipData touchTooltipData; - - /// Configs of how touch indicator looks like. - final GetTouchedSpotIndicator getTouchedSpotIndicator; - - /// Distance threshold to handle the touch event. - final double touchSpotThreshold; - - /// Distance function used when finding closest points to touch point - final CalculateTouchDistance distanceCalculator; - - /// Determines to handle default built-in touch responses, - /// [LineTouchResponse] shows a tooltip popup above the touched spot. - final bool handleBuiltInTouches; - - /// The starting point on y axis of the touch line. By default, line starts on the bottom of - /// the chart. - final GetTouchLineY getTouchLineStart; - - /// The end point on y axis of the touch line. By default, line ends at the touched point. - /// If line end is overlap with the dot, it will be automatically adjusted to the edge of the dot. - final GetTouchLineY getTouchLineEnd; - - /// Copies current [LineTouchData] to a new [LineTouchData], - /// and replaces provided values. - LineTouchData copyWith({ - bool? enabled, - BaseTouchCallback? touchCallback, - MouseCursorResolver? mouseCursorResolver, - Duration? longPressDuration, - LineTouchTooltipData? touchTooltipData, - GetTouchedSpotIndicator? getTouchedSpotIndicator, - double? touchSpotThreshold, - CalculateTouchDistance? distanceCalculator, - GetTouchLineY? getTouchLineStart, - GetTouchLineY? getTouchLineEnd, - bool? handleBuiltInTouches, - }) { - return LineTouchData( - enabled: enabled ?? this.enabled, - touchCallback: touchCallback ?? this.touchCallback, - mouseCursorResolver: mouseCursorResolver ?? this.mouseCursorResolver, - longPressDuration: longPressDuration ?? this.longPressDuration, - touchTooltipData: touchTooltipData ?? this.touchTooltipData, - getTouchedSpotIndicator: - getTouchedSpotIndicator ?? this.getTouchedSpotIndicator, - touchSpotThreshold: touchSpotThreshold ?? this.touchSpotThreshold, - distanceCalculator: distanceCalculator ?? this.distanceCalculator, - getTouchLineStart: getTouchLineStart ?? this.getTouchLineStart, - getTouchLineEnd: getTouchLineEnd ?? this.getTouchLineEnd, - handleBuiltInTouches: handleBuiltInTouches ?? this.handleBuiltInTouches, - ); - } - - /// Used for equality check, see [EquatableMixin]. - @override - List get props => [ - enabled, - touchCallback, - mouseCursorResolver, - longPressDuration, - touchTooltipData, - getTouchedSpotIndicator, - touchSpotThreshold, - distanceCalculator, - handleBuiltInTouches, - getTouchLineStart, - getTouchLineEnd, - ]; -} - -/// Used for showing touch indicators (a thicker line and larger dot on the targeted spot). -/// -/// It gives you the [spotIndexes] that touch happened, or manually targeted, -/// in the given [barData], you should return a list of [TouchedSpotIndicatorData], -/// length of this list should be equal to the [spotIndexes.length], -/// each [TouchedSpotIndicatorData] determines the look of showing indicator. -typedef GetTouchedSpotIndicator = List Function( - LineChartBarData barData, - List spotIndexes, -); - -/// Used for determine the touch indicator line's starting/end point. -typedef GetTouchLineY = double Function( - LineChartBarData barData, - int spotIndex, -); - -/// Used to calculate the distance between coordinates of a touch event and a spot -typedef CalculateTouchDistance = double Function( - Offset touchPoint, - Offset spotPixelCoordinates, -); - -/// Default distanceCalculator only considers distance on x axis -double _xDistance(Offset touchPoint, Offset spotPixelCoordinates) { - return (touchPoint.dx - spotPixelCoordinates.dx).abs(); -} - -/// Default presentation of touched indicators. -List defaultTouchedIndicators( - LineChartBarData barData, - List indicators, -) { - return indicators.map((int index) { - /// Indicator Line - var lineColor = barData.gradient?.colors.first ?? barData.color; - if (barData.dotData.show) { - lineColor = _defaultGetDotColor(barData.spots[index], 0, barData); - } - const lineStrokeWidth = 4.0; - final flLine = FlLine(color: lineColor, strokeWidth: lineStrokeWidth); - - var dotSize = 10.0; - if (barData.dotData.show) { - dotSize = 4.0 * 1.8; - } - - final dotData = FlDotData( - getDotPainter: (spot, percent, bar, index) => - _defaultGetDotPainter(spot, percent, bar, index, size: dotSize), - ); - - return TouchedSpotIndicatorData(flLine, dotData); - }).toList(); -} - -/// By default line starts from the bottom of the chart. -double defaultGetTouchLineStart(LineChartBarData barData, int spotIndex) { - return -double.infinity; -} - -/// By default line ends at the touched point. -double defaultGetTouchLineEnd(LineChartBarData barData, int spotIndex) { - return barData.spots[spotIndex].y; -} - -/// Holds representation data for showing tooltip popup on top of spots. -class LineTouchTooltipData with EquatableMixin { - /// if [LineTouchData.handleBuiltInTouches] is true, - /// [LineChart] shows a tooltip popup on top of spots automatically when touch happens, - /// otherwise you can show it manually using [LineChartData.showingTooltipIndicators]. - /// Tooltip shows on top of spots, with [tooltipBgColor] as a background color, - /// and you can set corner radius using [tooltipRoundedRadius]. - /// If you want to have a padding inside the tooltip, fill [tooltipPadding], - /// or If you want to have a bottom margin, set [tooltipMargin]. - /// Content of the tooltip will provide using [getTooltipItems] callback, you can override it - /// and pass your custom data to show in the tooltip. - /// You can restrict the tooltip's width using [maxContentWidth]. - /// Sometimes, [LineChart] shows the tooltip outside of the chart, - /// you can set [fitInsideHorizontally] true to force it to shift inside the chart horizontally, - /// also you can set [fitInsideVertically] true to force it to shift inside the chart vertically. - const LineTouchTooltipData({ - this.tooltipBgColor = const Color.fromRGBO(96, 125, 139, 1), - this.tooltipRoundedRadius = 4, - this.tooltipPadding = - const EdgeInsets.symmetric(horizontal: 16, vertical: 8), - this.tooltipMargin = 16, - this.tooltipHorizontalAlignment = FLHorizontalAlignment.center, - this.tooltipHorizontalOffset = 0, - this.maxContentWidth = 120, - this.getTooltipItems = defaultLineTooltipItem, - this.fitInsideHorizontally = false, - this.fitInsideVertically = false, - this.showOnTopOfTheChartBoxArea = false, - this.rotateAngle = 0.0, - this.tooltipBorder = BorderSide.none, - }); - - /// The tooltip background color. - final Color tooltipBgColor; - - /// Sets a rounded radius for the tooltip. - final double tooltipRoundedRadius; - - /// Applies a padding for showing contents inside the tooltip. - final EdgeInsets tooltipPadding; - - /// Applies a bottom margin for showing tooltip on top of rods. - final double tooltipMargin; - - /// Controls showing tooltip on left side, right side or center aligned with spot, default is center - final FLHorizontalAlignment tooltipHorizontalAlignment; - - /// Applies horizontal offset for showing tooltip, default is zero. - final double tooltipHorizontalOffset; - - /// Restricts the tooltip's width. - final double maxContentWidth; - - /// Retrieves data for showing content inside the tooltip. - final GetLineTooltipItems getTooltipItems; - - /// Forces the tooltip to shift horizontally inside the chart, if overflow happens. - final bool fitInsideHorizontally; - - /// Forces the tooltip to shift vertically inside the chart, if overflow happens. - final bool fitInsideVertically; - - /// Forces the tooltip container to top of the line, default 'false' - final bool showOnTopOfTheChartBoxArea; - - /// Controls the rotation of the tooltip. - final double rotateAngle; - - /// The tooltip border color. - final BorderSide tooltipBorder; - - /// Used for equality check, see [EquatableMixin]. - @override - List get props => [ - tooltipBgColor, - tooltipRoundedRadius, - tooltipPadding, - tooltipMargin, - tooltipHorizontalAlignment, - tooltipHorizontalOffset, - maxContentWidth, - getTooltipItems, - fitInsideHorizontally, - fitInsideVertically, - showOnTopOfTheChartBoxArea, - rotateAngle, - tooltipBorder, - ]; -} - -/// Provides a [LineTooltipItem] for showing content inside the [LineTouchTooltipData]. -/// -/// You can override [LineTouchTooltipData.getTooltipItems], it gives you -/// [touchedSpots] list that touch happened on, -/// then you should and pass your custom [LineTooltipItem] list -/// (length should be equal to the [touchedSpots.length]), -/// to show inside the tooltip popup. -typedef GetLineTooltipItems = List Function( - List touchedSpots, -); - -/// Default implementation for [LineTouchTooltipData.getTooltipItems]. -List defaultLineTooltipItem(List touchedSpots) { - return touchedSpots.map((LineBarSpot touchedSpot) { - final textStyle = TextStyle( - color: touchedSpot.bar.gradient?.colors.first ?? - touchedSpot.bar.color ?? - Colors.blueGrey, - fontWeight: FontWeight.bold, - fontSize: 14, - ); - return LineTooltipItem(touchedSpot.y.toString(), textStyle); - }).toList(); -} - -/// Represent a targeted spot inside a line bar. -class LineBarSpot extends FlSpot with EquatableMixin { - /// [bar] is the [LineChartBarData] that this spot is inside of, - /// [barIndex] is the index of our [bar], in the [LineChartData.lineBarsData] list, - /// [spot] is the targeted spot. - /// [spotIndex] is the index this [FlSpot], in the [LineChartBarData.spots] list. - LineBarSpot( - this.bar, - this.barIndex, - FlSpot spot, - ) : spotIndex = bar.spots.indexOf(spot), - super(spot.x, spot.y); - - /// Is the [LineChartBarData] that this spot is inside of. - final LineChartBarData bar; - - /// Is the index of our [bar], in the [LineChartData.lineBarsData] list, - final int barIndex; - - /// Is the index of our [super.spot], in the [LineChartBarData.spots] list. - final int spotIndex; - - /// Used for equality check, see [EquatableMixin]. - @override - List get props => [ - bar, - barIndex, - spotIndex, - x, - y, - ]; -} - -/// A [LineBarSpot] that holds information about the event that selected it -class TouchLineBarSpot extends LineBarSpot { - TouchLineBarSpot( - super.bar, - super.barIndex, - super.spot, - this.distance, - ); - - /// Distance in pixels from where the user taped - final double distance; -} - -/// Holds data of showing each row item in the tooltip popup. -class LineTooltipItem with EquatableMixin { - /// Shows a [text] with [textStyle], [textDirection], - /// and optional [children] as a row in the tooltip popup. - const LineTooltipItem( - this.text, - this.textStyle, { - this.textAlign = TextAlign.center, - this.textDirection = TextDirection.ltr, - this.children, - }); - - /// Showing text. - final String text; - - /// Style of showing text. - final TextStyle textStyle; - - /// Align of showing text. - final TextAlign textAlign; - - /// Direction of showing text. - final TextDirection textDirection; - - /// List add further style and format to the text of the tooltip - final List? children; - - /// Used for equality check, see [EquatableMixin]. - @override - List get props => [ - text, - textStyle, - textAlign, - textDirection, - children, - ]; -} - -/// details of showing indicator when touch happened on [LineChart] -/// [indicatorBelowLine] we draw a vertical line below of the touched spot -/// [touchedSpotDotData] we draw a larger dot on the touched spot to bold it -class TouchedSpotIndicatorData with EquatableMixin { - /// if [LineTouchData.handleBuiltInTouches] is true, - /// [LineChart] shows a thicker line and larger spot as indicator automatically when touch happens, - /// otherwise you can show it manually using [LineChartBarData.showingIndicators]. - /// [indicatorBelowLine] determines line's style, and - /// [touchedSpotDotData] determines dot's style. - const TouchedSpotIndicatorData( - this.indicatorBelowLine, - this.touchedSpotDotData, - ); - - /// Determines line's style. - final FlLine indicatorBelowLine; - - /// Determines dot's style. - final FlDotData touchedSpotDotData; - - /// Used for equality check, see [EquatableMixin]. - @override - List get props => [ - indicatorBelowLine, - touchedSpotDotData, - ]; -} - -/// Holds data for showing tooltips over a line -class ShowingTooltipIndicators with EquatableMixin { - /// [LineChart] shows some tooltips over each [LineChartBarData], - /// and [showingSpots] determines in which spots this tooltip should be shown. - const ShowingTooltipIndicators(this.showingSpots); - - /// Determines the spots that each tooltip should be shown. - final List showingSpots; - - /// Used for equality check, see [EquatableMixin]. - @override - List get props => [showingSpots]; -} - -/// Holds information about touch response in the [LineChart]. -/// -/// You can override [LineTouchData.touchCallback] to handle touch events, -/// it gives you a [LineTouchResponse] and you can do whatever you want. -class LineTouchResponse extends BaseTouchResponse { - /// If touch happens, [LineChart] processes it internally and - /// passes out a list of [lineBarSpots] it gives you information about the touched spot. - /// They are sorted based on their distance to the touch event - const LineTouchResponse(this.lineBarSpots); - - /// touch happened on these spots - /// (if a single line provided on the chart, [lineBarSpots]'s length will be 1 always) - final List? lineBarSpots; - - /// Copies current [LineTouchResponse] to a new [LineTouchResponse], - /// and replaces provided values. - LineTouchResponse copyWith({ - List? lineBarSpots, - }) { - return LineTouchResponse( - lineBarSpots ?? this.lineBarSpots, - ); - } -} - -/// It lerps a [LineChartData] to another [LineChartData] (handles animation for updating values) -class LineChartDataTween extends Tween { - LineChartDataTween({required super.begin, required super.end}); - - /// Lerps a [LineChartData] based on [t] value, check [Tween.lerp]. - @override - LineChartData lerp(double t) => begin!.lerp(begin!, end!, t); -} diff --git a/lib/src/chart/line_chart/line_chart_helper.dart b/lib/src/chart/line_chart/line_chart_helper.dart deleted file mode 100644 index 336fb40fd3..0000000000 --- a/lib/src/chart/line_chart/line_chart_helper.dart +++ /dev/null @@ -1,110 +0,0 @@ -import 'package:equatable/equatable.dart'; -import 'package:fl_chart/fl_chart.dart'; -import 'package:fl_chart/src/utils/list_wrapper.dart'; - -/// Contains anything that helps LineChart works -class LineChartHelper { - /// Contains List of cached results, base on [List] - /// - /// We use it to prevent redundant calculations - static final Map, LineChartMinMaxAxisValues> - _cachedResults = {}; - - static LineChartMinMaxAxisValues calculateMaxAxisValues( - List lineBarsData, - ) { - if (lineBarsData.isEmpty) { - return const LineChartMinMaxAxisValues(0, 0, 0, 0); - } - - final listWrapper = lineBarsData.toWrapperClass(); - - if (_cachedResults.containsKey(listWrapper)) { - return _cachedResults[listWrapper]!.copyWith(readFromCache: true); - } - - final LineChartBarData lineBarData; - try { - lineBarData = - lineBarsData.firstWhere((element) => element.spots.isNotEmpty); - } catch (e) { - // There is no lineBarData with at least one spot - return const LineChartMinMaxAxisValues(0, 0, 0, 0); - } - - final FlSpot firstValidSpot; - try { - firstValidSpot = - lineBarData.spots.firstWhere((element) => element != FlSpot.nullSpot); - } catch (e) { - // There is no valid spot - return const LineChartMinMaxAxisValues(0, 0, 0, 0); - } - - var minX = firstValidSpot.x; - var maxX = firstValidSpot.x; - var minY = firstValidSpot.y; - var maxY = firstValidSpot.y; - - for (final barData in lineBarsData) { - if (barData.spots.isEmpty) { - continue; - } - - if (barData.mostRightSpot.x > maxX) { - maxX = barData.mostRightSpot.x; - } - - if (barData.mostLeftSpot.x < minX) { - minX = barData.mostLeftSpot.x; - } - - if (barData.mostTopSpot.y > maxY) { - maxY = barData.mostTopSpot.y; - } - - if (barData.mostBottomSpot.y < minY) { - minY = barData.mostBottomSpot.y; - } - } - - final result = LineChartMinMaxAxisValues(minX, maxX, minY, maxY); - _cachedResults[listWrapper] = result; - return result; - } -} - -/// Holds minX, maxX, minY, and maxY for use in [LineChartData] -class LineChartMinMaxAxisValues with EquatableMixin { - const LineChartMinMaxAxisValues( - this.minX, - this.maxX, - this.minY, - this.maxY, { - this.readFromCache = false, - }); - final double minX; - final double maxX; - final double minY; - final double maxY; - final bool readFromCache; - - @override - List get props => [minX, maxX, minY, maxY, readFromCache]; - - LineChartMinMaxAxisValues copyWith({ - double? minX, - double? maxX, - double? minY, - double? maxY, - bool? readFromCache, - }) { - return LineChartMinMaxAxisValues( - minX ?? this.minX, - maxX ?? this.maxX, - minY ?? this.minY, - maxY ?? this.maxY, - readFromCache: readFromCache ?? this.readFromCache, - ); - } -} diff --git a/lib/src/chart/line_chart/line_chart_painter.dart b/lib/src/chart/line_chart/line_chart_painter.dart deleted file mode 100644 index 75b4a60ec0..0000000000 --- a/lib/src/chart/line_chart/line_chart_painter.dart +++ /dev/null @@ -1,1311 +0,0 @@ -import 'dart:math'; - -import 'package:fl_chart/fl_chart.dart'; -import 'package:fl_chart/src/chart/base/axis_chart/axis_chart_extensions.dart'; -import 'package:fl_chart/src/chart/base/axis_chart/axis_chart_painter.dart'; -import 'package:fl_chart/src/chart/base/base_chart/base_chart_painter.dart'; -import 'package:fl_chart/src/extensions/paint_extension.dart'; -import 'package:fl_chart/src/extensions/path_extension.dart'; -import 'package:fl_chart/src/extensions/text_align_extension.dart'; -import 'package:fl_chart/src/utils/canvas_wrapper.dart'; -import 'package:fl_chart/src/utils/utils.dart'; -import 'package:flutter/material.dart'; - -/// Paints [LineChartData] in the canvas, it can be used in a [CustomPainter] -class LineChartPainter extends AxisChartPainter { - /// Paints [dataList] into canvas, it is the animating [LineChartData], - /// [targetData] is the animation's target and remains the same - /// during animation, then we should use it when we need to show - /// tooltips or something like that, because [dataList] is changing constantly. - /// - /// [textScale] used for scaling texts inside the chart, - /// parent can use [MediaQuery.textScaleFactor] to respect - /// the system's font size. - LineChartPainter() : super() { - _barPaint = Paint()..style = PaintingStyle.stroke; - - _barAreaPaint = Paint()..style = PaintingStyle.fill; - - _barAreaLinesPaint = Paint()..style = PaintingStyle.stroke; - - _clearBarAreaPaint = Paint() - ..style = PaintingStyle.fill - ..color = const Color(0x00000000) - ..blendMode = BlendMode.dstIn; - - _touchLinePaint = Paint() - ..style = PaintingStyle.stroke - ..color = Colors.black; - - _bgTouchTooltipPaint = Paint() - ..style = PaintingStyle.fill - ..color = Colors.white; - - _borderTouchTooltipPaint = Paint() - ..style = PaintingStyle.stroke - ..color = Colors.transparent - ..strokeWidth = 1.0; - } - late Paint _barPaint; - late Paint _barAreaPaint; - late Paint _barAreaLinesPaint; - late Paint _clearBarAreaPaint; - late Paint _touchLinePaint; - late Paint _bgTouchTooltipPaint; - late Paint _borderTouchTooltipPaint; - - /// Paints [LineChartData] into the provided canvas. - @override - void paint( - BuildContext context, - CanvasWrapper canvasWrapper, - PaintHolder holder, - ) { - final data = holder.data; - if (data.lineBarsData.isEmpty) { - return; - } - - if (data.clipData.any) { - canvasWrapper.saveLayer( - Rect.fromLTWH( - 0, - -40, - canvasWrapper.size.width + 40, - canvasWrapper.size.height + 40, - ), - Paint(), - ); - - clipToBorder(canvasWrapper, holder); - } - - super.paint(context, canvasWrapper, holder); - - for (final betweenBarsData in data.betweenBarsData) { - drawBetweenBarsArea(canvasWrapper, data, betweenBarsData, holder); - } - - if (!data.extraLinesData.extraLinesOnTop) { - super.drawExtraLines(context, canvasWrapper, holder); - } - - final lineIndexDrawingInfo = []; - - /// draw each line independently on the chart - for (var i = 0; i < data.lineBarsData.length; i++) { - final barData = data.lineBarsData[i]; - - if (!barData.show) { - continue; - } - - drawBarLine(canvasWrapper, barData, holder); - drawDots(canvasWrapper, barData, holder); - - if (data.extraLinesData.extraLinesOnTop) { - super.drawExtraLines(context, canvasWrapper, holder); - } - - final indicatorsData = data.lineTouchData - .getTouchedSpotIndicator(barData, barData.showingIndicators); - - if (indicatorsData.length != barData.showingIndicators.length) { - throw Exception( - 'indicatorsData and touchedSpotOffsets size should be same', - ); - } - - for (var j = 0; j < barData.showingIndicators.length; j++) { - final indicatorData = indicatorsData[j]; - final index = barData.showingIndicators[j]; - if (index < 0 || index >= barData.spots.length) { - continue; - } - final spot = barData.spots[index]; - - if (indicatorData == null) { - continue; - } - lineIndexDrawingInfo.add( - LineIndexDrawingInfo(barData, i, spot, index, indicatorData), - ); - } - } - - drawTouchedSpotsIndicator(canvasWrapper, lineIndexDrawingInfo, holder); - - if (data.clipData.any) { - canvasWrapper.restore(); - } - - // Draw touch tooltip on most top spot - for (var i = 0; i < data.showingTooltipIndicators.length; i++) { - var tooltipSpots = data.showingTooltipIndicators[i]; - - final showingBarSpots = tooltipSpots.showingSpots; - if (showingBarSpots.isEmpty) { - continue; - } - final barSpots = List.of(showingBarSpots); - FlSpot topSpot = barSpots[0]; - for (final barSpot in barSpots) { - if (barSpot.y > topSpot.y) { - topSpot = barSpot; - } - } - tooltipSpots = ShowingTooltipIndicators(barSpots); - - drawTouchTooltip( - context, - canvasWrapper, - data.lineTouchData.touchTooltipData, - topSpot, - tooltipSpots, - holder, - ); - } - } - - @visibleForTesting - void clipToBorder( - CanvasWrapper canvasWrapper, - PaintHolder holder, - ) { - final data = holder.data; - final viewSize = canvasWrapper.size; - final clip = data.clipData; - final border = data.borderData.show ? data.borderData.border : null; - - var left = 0.0; - var top = 0.0; - var right = viewSize.width; - var bottom = viewSize.height; - - if (clip.left) { - final borderWidth = border?.left.width ?? 0; - left = borderWidth / 2; - } - if (clip.top) { - final borderWidth = border?.top.width ?? 0; - top = borderWidth / 2; - } - if (clip.right) { - final borderWidth = border?.right.width ?? 0; - right = viewSize.width - (borderWidth / 2); - } - if (clip.bottom) { - final borderWidth = border?.bottom.width ?? 0; - bottom = viewSize.height - (borderWidth / 2); - } - - canvasWrapper.clipRect(Rect.fromLTRB(left, top, right, bottom)); - } - - @visibleForTesting - void drawBarLine( - CanvasWrapper canvasWrapper, - LineChartBarData barData, - PaintHolder holder, - ) { - final viewSize = canvasWrapper.size; - final barList = barData.spots.splitByNullSpots(); - - // paint each sublist that was built above - // bar is passed in separately from barData - // because barData is the whole line - // and bar is a piece of that line - for (final bar in barList) { - final barPath = generateBarPath(viewSize, barData, bar, holder); - - final belowBarPath = - generateBelowBarPath(viewSize, barData, barPath, bar, holder); - final completelyFillBelowBarPath = generateBelowBarPath( - viewSize, - barData, - barPath, - bar, - holder, - fillCompletely: true, - ); - final aboveBarPath = - generateAboveBarPath(viewSize, barData, barPath, bar, holder); - final completelyFillAboveBarPath = generateAboveBarPath( - viewSize, - barData, - barPath, - bar, - holder, - fillCompletely: true, - ); - - drawBelowBar( - canvasWrapper, - belowBarPath, - completelyFillAboveBarPath, - holder, - barData, - ); - drawAboveBar( - canvasWrapper, - aboveBarPath, - completelyFillBelowBarPath, - holder, - barData, - ); - drawBarShadow(canvasWrapper, barPath, barData); - drawBar(canvasWrapper, barPath, barData, holder); - } - } - - @visibleForTesting - void drawBetweenBarsArea( - CanvasWrapper canvasWrapper, - LineChartData data, - BetweenBarsData betweenBarsData, - PaintHolder holder, - ) { - final viewSize = canvasWrapper.size; - final fromBarData = data.lineBarsData[betweenBarsData.fromIndex]; - final toBarData = data.lineBarsData[betweenBarsData.toIndex]; - - final fromBarSplitLines = fromBarData.spots.splitByNullSpots(); - final toBarSplitLines = toBarData.spots.splitByNullSpots(); - - if (fromBarSplitLines.length != toBarSplitLines.length) { - throw ArgumentError( - 'Cannot draw betWeenBarsArea when null spots are inconsistent.', - ); - } - - for (var i = 0; i < fromBarSplitLines.length; i++) { - final fromSpots = fromBarSplitLines[i]; - final toSpots = toBarSplitLines[i].reversed.toList(); - - final fromBarPath = generateBarPath( - viewSize, - fromBarData, - fromSpots, - holder, - ); - final barPath = generateBarPath( - viewSize, - toBarData.copyWith(spots: toSpots), - toSpots, - holder, - appendToPath: fromBarPath, - ); - final left = min(fromBarData.mostLeftSpot.x, toBarData.mostLeftSpot.x); - final top = max(fromBarData.mostTopSpot.y, toBarData.mostTopSpot.y); - final right = max(fromBarData.mostRightSpot.x, toBarData.mostRightSpot.x); - final bottom = min( - fromBarData.mostBottomSpot.y, - toBarData.mostBottomSpot.y, - ); - final aroundRect = Rect.fromLTRB( - getPixelX(left, viewSize, holder), - getPixelY(top, viewSize, holder), - getPixelX(right, viewSize, holder), - getPixelY(bottom, viewSize, holder), - ); - - drawBetweenBar( - canvasWrapper, - barPath, - betweenBarsData, - aroundRect, - holder, - ); - } - } - - @visibleForTesting - void drawDots( - CanvasWrapper canvasWrapper, - LineChartBarData barData, - PaintHolder holder, - ) { - if (!barData.dotData.show || barData.spots.isEmpty) { - return; - } - final viewSize = canvasWrapper.size; - - final barXDelta = getBarLineXLength(barData, viewSize, holder); - - for (var i = 0; i < barData.spots.length; i++) { - final spot = barData.spots[i]; - if (spot.isNotNull() && barData.dotData.checkToShowDot(spot, barData)) { - final x = getPixelX(spot.x, viewSize, holder); - final y = getPixelY(spot.y, viewSize, holder); - final xPercentInLine = (x / barXDelta) * 100; - final painter = - barData.dotData.getDotPainter(spot, xPercentInLine, barData, i); - - canvasWrapper.drawDot(painter, spot, Offset(x, y)); - } - } - } - - @visibleForTesting - void drawTouchedSpotsIndicator( - CanvasWrapper canvasWrapper, - List lineIndexDrawingInfo, - PaintHolder holder, - ) { - if (lineIndexDrawingInfo.isEmpty) { - return; - } - final viewSize = canvasWrapper.size; - - lineIndexDrawingInfo.sort((a, b) => b.spot.y.compareTo(a.spot.y)); - - for (final info in lineIndexDrawingInfo) { - final barData = info.line; - final barXDelta = getBarLineXLength(barData, viewSize, holder); - - final data = holder.data; - - final index = info.spotIndex; - final spot = info.spot; - final indicatorData = info.indicatorData; - - final touchedSpot = Offset( - getPixelX(spot.x, viewSize, holder), - getPixelY(spot.y, viewSize, holder), - ); - - /// For drawing the dot - final showingDots = indicatorData.touchedSpotDotData.show; - var dotHeight = 0.0; - late FlDotPainter dotPainter; - - if (showingDots) { - final xPercentInLine = (touchedSpot.dx / barXDelta) * 100; - dotPainter = indicatorData.touchedSpotDotData - .getDotPainter(spot, xPercentInLine, barData, index); - dotHeight = dotPainter.getSize(spot).height; - } - - /// For drawing the indicator line - final lineStartY = min( - data.maxY, - max(data.minY, data.lineTouchData.getTouchLineStart(barData, index)), - ); - final lineEndY = min( - data.maxY, - max(data.minY, data.lineTouchData.getTouchLineEnd(barData, index)), - ); - final lineStart = - Offset(touchedSpot.dx, getPixelY(lineStartY, viewSize, holder)); - var lineEnd = - Offset(touchedSpot.dx, getPixelY(lineEndY, viewSize, holder)); - - /// If line end is inside the dot, adjust it so that it doesn't overlap with the dot. - final dotMinY = touchedSpot.dy - dotHeight / 2; - final dotMaxY = touchedSpot.dy + dotHeight / 2; - if (lineEnd.dy > dotMinY && lineEnd.dy < dotMaxY) { - if (lineStart.dy < lineEnd.dy) { - lineEnd -= Offset(0, lineEnd.dy - dotMinY); - } else { - lineEnd += Offset(0, dotMaxY - lineEnd.dy); - } - } - - final indicatorLine = indicatorData.indicatorBelowLine; - _touchLinePaint - ..setColorOrGradientForLine( - indicatorLine.color, - indicatorLine.gradient, - from: lineStart, - to: lineEnd, - ) - ..strokeWidth = indicatorLine.strokeWidth - ..transparentIfWidthIsZero(); - - canvasWrapper.drawDashedLine( - lineStart, - lineEnd, - _touchLinePaint, - indicatorLine.dashArray, - ); - - /// Draw the indicator dot - if (showingDots) { - canvasWrapper.drawDot(dotPainter, spot, touchedSpot); - } - } - } - - /// Generates a path, based on [LineChartBarData.isStepChart] for step style, and normal style. - @visibleForTesting - Path generateBarPath( - Size viewSize, - LineChartBarData barData, - List barSpots, - PaintHolder holder, { - Path? appendToPath, - }) { - if (barData.isStepLineChart) { - return generateStepBarPath( - viewSize, - barData, - barSpots, - holder, - appendToPath: appendToPath, - ); - } else { - return generateNormalBarPath( - viewSize, - barData, - barSpots, - holder, - appendToPath: appendToPath, - ); - } - } - - /// firstly we generate the bar line that we should draw, - /// then we reuse it to fill below bar space. - /// there is two type of barPath that generate here, - /// first one is the sharp corners line on spot connections - /// second one is curved corners line on spot connections, - /// and we use isCurved to find out how we should generate it, - /// If you want to concatenate paths together for creating an area between - /// multiple bars for example, you can pass the appendToPath - @visibleForTesting - Path generateNormalBarPath( - Size viewSize, - LineChartBarData barData, - List barSpots, - PaintHolder holder, { - Path? appendToPath, - }) { - final path = appendToPath ?? Path(); - final size = barSpots.length; - - var temp = Offset.zero; - - final x = getPixelX(barSpots[0].x, viewSize, holder); - final y = getPixelY(barSpots[0].y, viewSize, holder); - if (appendToPath == null) { - path.moveTo(x, y); - if (size == 1) { - path.lineTo(x, y); - } - } else { - path.lineTo(x, y); - } - for (var i = 1; i < size; i++) { - /// CurrentSpot - final current = Offset( - getPixelX(barSpots[i].x, viewSize, holder), - getPixelY(barSpots[i].y, viewSize, holder), - ); - - /// previous spot - final previous = Offset( - getPixelX(barSpots[i - 1].x, viewSize, holder), - getPixelY(barSpots[i - 1].y, viewSize, holder), - ); - - /// next point - final next = Offset( - getPixelX(barSpots[i + 1 < size ? i + 1 : i].x, viewSize, holder), - getPixelY(barSpots[i + 1 < size ? i + 1 : i].y, viewSize, holder), - ); - - final controlPoint1 = previous + temp; - - /// if the isCurved is false, we set 0 for smoothness, - /// it means we should not have any smoothness then we face with - /// the sharped corners line - final smoothness = barData.isCurved ? barData.curveSmoothness : 0.0; - temp = ((next - previous) / 2) * smoothness; - - if (barData.preventCurveOverShooting) { - if ((next - current).dy <= barData.preventCurveOvershootingThreshold || - (current - previous).dy <= - barData.preventCurveOvershootingThreshold) { - temp = Offset(temp.dx, 0); - } - - if ((next - current).dx <= barData.preventCurveOvershootingThreshold || - (current - previous).dx <= - barData.preventCurveOvershootingThreshold) { - temp = Offset(0, temp.dy); - } - } - - final controlPoint2 = current - temp; - - path.cubicTo( - controlPoint1.dx, - controlPoint1.dy, - controlPoint2.dx, - controlPoint2.dy, - current.dx, - current.dy, - ); - } - - return path; - } - - /// generates a `Step Line Chart` bar style path. - @visibleForTesting - Path generateStepBarPath( - Size viewSize, - LineChartBarData barData, - List barSpots, - PaintHolder holder, { - Path? appendToPath, - }) { - final path = appendToPath ?? Path(); - final size = barSpots.length; - - final x = getPixelX(barSpots[0].x, viewSize, holder); - final y = getPixelY(barSpots[0].y, viewSize, holder); - if (appendToPath == null) { - path.moveTo(x, y); - } else { - path.lineTo(x, y); - } - for (var i = 0; i < size; i++) { - /// CurrentSpot - final current = Offset( - getPixelX(barSpots[i].x, viewSize, holder), - getPixelY(barSpots[i].y, viewSize, holder), - ); - - /// next point - final next = Offset( - getPixelX(barSpots[i + 1 < size ? i + 1 : i].x, viewSize, holder), - getPixelY(barSpots[i + 1 < size ? i + 1 : i].y, viewSize, holder), - ); - - final stepDirection = barData.lineChartStepData.stepDirection; - - // middle - if (current.dy == next.dy) { - path.lineTo(next.dx, next.dy); - } else { - final deltaX = next.dx - current.dx; - - path - ..lineTo(current.dx + deltaX - (deltaX * stepDirection), current.dy) - ..lineTo(current.dx + deltaX - (deltaX * stepDirection), next.dy) - ..lineTo(next.dx, next.dy); - } - } - - return path; - } - - /// it generates below area path using a copy of [barPath], - /// if cutOffY is provided by the [BarAreaData], it cut the area to the provided cutOffY value, - /// if [fillCompletely] is true, the cutOffY will be ignored, - /// and a completely filled path will return, - @visibleForTesting - Path generateBelowBarPath( - Size viewSize, - LineChartBarData barData, - Path barPath, - List barSpots, - PaintHolder holder, { - bool fillCompletely = false, - }) { - final belowBarPath = Path.from(barPath); - - /// Line To Bottom Right - var x = getPixelX(barSpots[barSpots.length - 1].x, viewSize, holder); - double y; - if (!fillCompletely && barData.belowBarData.applyCutOffY) { - y = getPixelY(barData.belowBarData.cutOffY, viewSize, holder); - } else { - y = viewSize.height; - } - belowBarPath.lineTo(x, y); - - /// Line To Bottom Left - x = getPixelX(barSpots[0].x, viewSize, holder); - if (!fillCompletely && barData.belowBarData.applyCutOffY) { - y = getPixelY(barData.belowBarData.cutOffY, viewSize, holder); - } else { - y = viewSize.height; - } - belowBarPath.lineTo(x, y); - - /// Line To Top Left - x = getPixelX(barSpots[0].x, viewSize, holder); - y = getPixelY(barSpots[0].y, viewSize, holder); - belowBarPath - ..lineTo(x, y) - ..close(); - - return belowBarPath; - } - - /// it generates above area path using a copy of [barPath], - /// if cutOffY is provided by the [BarAreaData], it cut the area to the provided cutOffY value, - /// if [fillCompletely] is true, the cutOffY will be ignored, - /// and a completely filled path will return, - @visibleForTesting - Path generateAboveBarPath( - Size viewSize, - LineChartBarData barData, - Path barPath, - List barSpots, - PaintHolder holder, { - bool fillCompletely = false, - }) { - final aboveBarPath = Path.from(barPath); - - /// Line To Top Right - var x = getPixelX(barSpots[barSpots.length - 1].x, viewSize, holder); - double y; - if (!fillCompletely && barData.aboveBarData.applyCutOffY) { - y = getPixelY(barData.aboveBarData.cutOffY, viewSize, holder); - } else { - y = 0.0; - } - aboveBarPath.lineTo(x, y); - - /// Line To Top Left - x = getPixelX(barSpots[0].x, viewSize, holder); - if (!fillCompletely && barData.aboveBarData.applyCutOffY) { - y = getPixelY(barData.aboveBarData.cutOffY, viewSize, holder); - } else { - y = 0.0; - } - aboveBarPath.lineTo(x, y); - - /// Line To Bottom Left - x = getPixelX(barSpots[0].x, viewSize, holder); - y = getPixelY(barSpots[0].y, viewSize, holder); - aboveBarPath - ..lineTo(x, y) - ..close(); - - return aboveBarPath; - } - - /// firstly we draw [belowBarPath], then if cutOffY value is provided in [BarAreaData], - /// [belowBarPath] maybe draw over the main bar line, - /// then to fix the problem we use [filledAboveBarPath] to clear the above section from this draw. - @visibleForTesting - void drawBelowBar( - CanvasWrapper canvasWrapper, - Path belowBarPath, - Path filledAboveBarPath, - PaintHolder holder, - LineChartBarData barData, - ) { - if (!barData.belowBarData.show) { - return; - } - - final viewSize = canvasWrapper.size; - - final belowBarLargestRect = Rect.fromLTRB( - getPixelX(barData.mostLeftSpot.x, viewSize, holder), - getPixelY(barData.mostTopSpot.y, viewSize, holder), - getPixelX(barData.mostRightSpot.x, viewSize, holder), - viewSize.height, - ); - - final belowBar = barData.belowBarData; - _barAreaPaint.setColorOrGradient( - belowBar.color, - belowBar.gradient, - belowBarLargestRect, - ); - - if (barData.belowBarData.applyCutOffY) { - canvasWrapper.saveLayer( - Rect.fromLTWH(0, 0, viewSize.width, viewSize.height), - Paint(), - ); - } - - canvasWrapper.drawPath(belowBarPath, _barAreaPaint); - - // clear the above area that get out of the bar line - if (barData.belowBarData.applyCutOffY) { - canvasWrapper - ..drawPath(filledAboveBarPath, _clearBarAreaPaint) - ..restore(); - } - - /// draw below spots line - if (barData.belowBarData.spotsLine.show) { - for (final spot in barData.spots) { - if (barData.belowBarData.spotsLine.checkToShowSpotLine(spot)) { - final from = Offset( - getPixelX(spot.x, viewSize, holder), - getPixelY(spot.y, viewSize, holder), - ); - - Offset to; - - // Check applyCutOffY - if (barData.belowBarData.spotsLine.applyCutOffY && - barData.belowBarData.applyCutOffY) { - to = Offset( - getPixelX(spot.x, viewSize, holder), - getPixelY(barData.belowBarData.cutOffY, viewSize, holder), - ); - } else { - to = Offset( - getPixelX(spot.x, viewSize, holder), - viewSize.height, - ); - } - - final lineStyle = barData.belowBarData.spotsLine.flLineStyle; - _barAreaLinesPaint - ..setColorOrGradientForLine( - lineStyle.color, - lineStyle.gradient, - from: from, - to: to, - ) - ..strokeWidth = lineStyle.strokeWidth - ..transparentIfWidthIsZero(); - - canvasWrapper.drawDashedLine( - from, - to, - _barAreaLinesPaint, - lineStyle.dashArray, - ); - } - } - } - } - - /// firstly we draw [aboveBarPath], then if cutOffY value is provided in [BarAreaData], - /// [aboveBarPath] maybe draw over the main bar line, - /// then to fix the problem we use [filledBelowBarPath] to clear the above section from this draw. - @visibleForTesting - void drawAboveBar( - CanvasWrapper canvasWrapper, - Path aboveBarPath, - Path filledBelowBarPath, - PaintHolder holder, - LineChartBarData barData, - ) { - if (!barData.aboveBarData.show) { - return; - } - - final viewSize = canvasWrapper.size; - - final aboveBarLargestRect = Rect.fromLTRB( - getPixelX(barData.mostLeftSpot.x, viewSize, holder), - 0, - getPixelX(barData.mostRightSpot.x, viewSize, holder), - getPixelY(barData.mostBottomSpot.y, viewSize, holder), - ); - - final aboveBar = barData.aboveBarData; - _barAreaPaint.setColorOrGradient( - aboveBar.color, - aboveBar.gradient, - aboveBarLargestRect, - ); - - if (barData.aboveBarData.applyCutOffY) { - canvasWrapper.saveLayer( - Rect.fromLTWH(0, 0, viewSize.width, viewSize.height), - Paint(), - ); - } - - canvasWrapper.drawPath(aboveBarPath, _barAreaPaint); - - // clear the above area that get out of the bar line - if (barData.aboveBarData.applyCutOffY) { - canvasWrapper - ..drawPath(filledBelowBarPath, _clearBarAreaPaint) - ..restore(); - } - - /// draw above spots line - if (barData.aboveBarData.spotsLine.show) { - for (final spot in barData.spots) { - if (barData.aboveBarData.spotsLine.checkToShowSpotLine(spot)) { - final from = Offset( - getPixelX(spot.x, viewSize, holder), - getPixelY(spot.y, viewSize, holder), - ); - - Offset to; - - // Check applyCutOffY - if (barData.aboveBarData.spotsLine.applyCutOffY && - barData.aboveBarData.applyCutOffY) { - to = Offset( - getPixelX(spot.x, viewSize, holder), - getPixelY(barData.aboveBarData.cutOffY, viewSize, holder), - ); - } else { - to = Offset( - getPixelX(spot.x, viewSize, holder), - 0, - ); - } - - final lineStyle = barData.aboveBarData.spotsLine.flLineStyle; - _barAreaLinesPaint - ..setColorOrGradientForLine( - lineStyle.color, - lineStyle.gradient, - from: from, - to: to, - ) - ..strokeWidth = lineStyle.strokeWidth - ..transparentIfWidthIsZero(); - - canvasWrapper.drawDashedLine( - from, - to, - _barAreaLinesPaint, - lineStyle.dashArray, - ); - } - } - } - } - - @visibleForTesting - void drawBetweenBar( - CanvasWrapper canvasWrapper, - Path barPath, - BetweenBarsData betweenBarsData, - Rect aroundRect, - PaintHolder holder, - ) { - final viewSize = canvasWrapper.size; - - _barAreaPaint.setColorOrGradient( - betweenBarsData.color, - betweenBarsData.gradient, - aroundRect, - ); - - canvasWrapper - ..saveLayer( - Rect.fromLTWH(0, 0, viewSize.width, viewSize.height), - Paint(), - ) - ..drawPath(barPath, _barAreaPaint) - ..restore(); // clear the above area that get out of the bar line - } - - /// draw the main bar line's shadow by the [barPath] - @visibleForTesting - void drawBarShadow( - CanvasWrapper canvasWrapper, - Path barPath, - LineChartBarData barData, - ) { - if (!barData.show || barData.shadow.color.opacity == 0.0) { - return; - } - if (barPath.computeMetrics().isEmpty) { - return; - } - - _barPaint - ..strokeCap = barData.isStrokeCapRound ? StrokeCap.round : StrokeCap.butt - ..strokeJoin = - barData.isStrokeJoinRound ? StrokeJoin.round : StrokeJoin.miter - ..color = barData.shadow.color - ..shader = null - ..strokeWidth = barData.barWidth - ..color = barData.shadow.color - ..maskFilter = MaskFilter.blur( - BlurStyle.normal, - Utils().convertRadiusToSigma(barData.shadow.blurRadius), - ); - - barPath = barPath.toDashedPath(barData.dashArray); - - barPath = barPath.shift(barData.shadow.offset); - - canvasWrapper.drawPath( - barPath, - _barPaint, - ); - } - - /// draw the main bar line by the [barPath] - @visibleForTesting - void drawBar( - CanvasWrapper canvasWrapper, - Path barPath, - LineChartBarData barData, - PaintHolder holder, - ) { - if (!barData.show) { - return; - } - final viewSize = canvasWrapper.size; - - _barPaint - ..strokeCap = barData.isStrokeCapRound ? StrokeCap.round : StrokeCap.butt - ..strokeJoin = - barData.isStrokeJoinRound ? StrokeJoin.round : StrokeJoin.miter; - - final rectAroundTheLine = Rect.fromLTRB( - getPixelX(barData.mostLeftSpot.x, viewSize, holder), - getPixelY(barData.mostTopSpot.y, viewSize, holder), - getPixelX(barData.mostRightSpot.x, viewSize, holder), - getPixelY(barData.mostBottomSpot.y, viewSize, holder), - ); - _barPaint - ..setColorOrGradient( - barData.color, - barData.gradient, - rectAroundTheLine, - ) - ..maskFilter = null - ..strokeWidth = barData.barWidth - ..transparentIfWidthIsZero(); - - barPath = barPath.toDashedPath(barData.dashArray); - canvasWrapper.drawPath(barPath, _barPaint); - } - - @visibleForTesting - void drawTouchTooltip( - BuildContext context, - CanvasWrapper canvasWrapper, - LineTouchTooltipData tooltipData, - FlSpot showOnSpot, - ShowingTooltipIndicators showingTooltipSpots, - PaintHolder holder, - ) { - final viewSize = canvasWrapper.size; - - const textsBelowMargin = 4; - - /// creating TextPainters to calculate the width and height of the tooltip - final drawingTextPainters = []; - - final tooltipItems = - tooltipData.getTooltipItems(showingTooltipSpots.showingSpots); - if (tooltipItems.length != showingTooltipSpots.showingSpots.length) { - throw Exception('tooltipItems and touchedSpots size should be same'); - } - - for (var i = 0; i < showingTooltipSpots.showingSpots.length; i++) { - final tooltipItem = tooltipItems[i]; - if (tooltipItem == null) { - continue; - } - - final span = TextSpan( - style: Utils().getThemeAwareTextStyle(context, tooltipItem.textStyle), - text: tooltipItem.text, - children: tooltipItem.children, - ); - - final tp = TextPainter( - text: span, - textAlign: tooltipItem.textAlign, - textDirection: tooltipItem.textDirection, - textScaler: holder.textScaler, - )..layout(maxWidth: tooltipData.maxContentWidth); - drawingTextPainters.add(tp); - } - if (drawingTextPainters.isEmpty) { - return; - } - - /// biggerWidth - /// some texts maybe larger, then we should - /// draw the tooltip' width as wide as biggerWidth - /// - /// sumTextsHeight - /// sum up all Texts height, then we should - /// draw the tooltip's height as tall as sumTextsHeight - var biggerWidth = 0.0; - var sumTextsHeight = 0.0; - for (final tp in drawingTextPainters) { - if (tp.width > biggerWidth) { - biggerWidth = tp.width; - } - sumTextsHeight += tp.height; - } - sumTextsHeight += (drawingTextPainters.length - 1) * textsBelowMargin; - - /// if we have multiple bar lines, - /// there are more than one FlCandidate on touch area, - /// we should get the most top FlSpot Offset to draw the tooltip on top of it - final mostTopOffset = Offset( - getPixelX(showOnSpot.x, viewSize, holder), - getPixelY(showOnSpot.y, viewSize, holder), - ); - - final tooltipWidth = biggerWidth + tooltipData.tooltipPadding.horizontal; - final tooltipHeight = sumTextsHeight + tooltipData.tooltipPadding.vertical; - - double tooltipTopPosition; - if (tooltipData.showOnTopOfTheChartBoxArea) { - tooltipTopPosition = 0 - tooltipHeight - tooltipData.tooltipMargin; - } else { - tooltipTopPosition = - mostTopOffset.dy - tooltipHeight - tooltipData.tooltipMargin; - } - - final tooltipLeftPosition = getTooltipLeft( - mostTopOffset.dx, - tooltipWidth, - tooltipData.tooltipHorizontalAlignment, - tooltipData.tooltipHorizontalOffset, - ); - - /// draw the background rect with rounded radius - var rect = Rect.fromLTWH( - tooltipLeftPosition, - tooltipTopPosition, - tooltipWidth, - tooltipHeight, - ); - - if (tooltipData.fitInsideHorizontally) { - if (rect.left < 0) { - final shiftAmount = 0 - rect.left; - rect = Rect.fromLTRB( - rect.left + shiftAmount, - rect.top, - rect.right + shiftAmount, - rect.bottom, - ); - } - - if (rect.right > viewSize.width) { - final shiftAmount = rect.right - viewSize.width; - rect = Rect.fromLTRB( - rect.left - shiftAmount, - rect.top, - rect.right - shiftAmount, - rect.bottom, - ); - } - } - - if (tooltipData.fitInsideVertically) { - if (rect.top < 0) { - final shiftAmount = 0 - rect.top; - rect = Rect.fromLTRB( - rect.left, - rect.top + shiftAmount, - rect.right, - rect.bottom + shiftAmount, - ); - } - - if (rect.bottom > viewSize.height) { - final shiftAmount = rect.bottom - viewSize.height; - rect = Rect.fromLTRB( - rect.left, - rect.top - shiftAmount, - rect.right, - rect.bottom - shiftAmount, - ); - } - } - - final radius = Radius.circular(tooltipData.tooltipRoundedRadius); - final roundedRect = RRect.fromRectAndCorners( - rect, - topLeft: radius, - topRight: radius, - bottomLeft: radius, - bottomRight: radius, - ); - _bgTouchTooltipPaint.color = tooltipData.tooltipBgColor; - - final rotateAngle = tooltipData.rotateAngle; - final rectRotationOffset = - Offset(0, Utils().calculateRotationOffset(rect.size, rotateAngle).dy); - final rectDrawOffset = Offset(roundedRect.left, roundedRect.top); - - final textRotationOffset = - Utils().calculateRotationOffset(rect.size, rotateAngle); - - if (tooltipData.tooltipBorder != BorderSide.none) { - _borderTouchTooltipPaint - ..color = tooltipData.tooltipBorder.color - ..strokeWidth = tooltipData.tooltipBorder.width; - } - - canvasWrapper.drawRotated( - size: rect.size, - rotationOffset: rectRotationOffset, - drawOffset: rectDrawOffset, - angle: rotateAngle, - drawCallback: () { - canvasWrapper - ..drawRRect(roundedRect, _bgTouchTooltipPaint) - ..drawRRect(roundedRect, _borderTouchTooltipPaint); - }, - ); - - /// draw the texts one by one in below of each other - var topPosSeek = tooltipData.tooltipPadding.top; - for (final tp in drawingTextPainters) { - final yOffset = rect.topCenter.dy + - topPosSeek - - textRotationOffset.dy + - rectRotationOffset.dy; - - final align = tp.textAlign.getFinalHorizontalAlignment(tp.textDirection); - final xOffset = switch (align) { - HorizontalAlignment.left => rect.left + tooltipData.tooltipPadding.left, - HorizontalAlignment.right => - rect.right - tooltipData.tooltipPadding.right - tp.width, - _ => rect.center.dx - (tp.width / 2), - }; - - final drawOffset = Offset( - xOffset, - yOffset, - ); - - canvasWrapper.drawRotated( - size: rect.size, - rotationOffset: rectRotationOffset, - drawOffset: rectDrawOffset, - angle: rotateAngle, - drawCallback: () { - canvasWrapper.drawText(tp, drawOffset); - }, - ); - topPosSeek += tp.height; - topPosSeek += textsBelowMargin; - } - } - - @visibleForTesting - double getBarLineXLength( - LineChartBarData barData, - Size chartUsableSize, - PaintHolder holder, - ) { - if (barData.spots.isEmpty) { - return 0; - } - - final firstSpot = barData.spots[0]; - final firstSpotX = getPixelX(firstSpot.x, chartUsableSize, holder); - - final lastSpot = barData.spots[barData.spots.length - 1]; - final lastSpotX = getPixelX(lastSpot.x, chartUsableSize, holder); - - return lastSpotX - firstSpotX; - } - - /// Makes a [LineTouchResponse] based on the provided [localPosition] - /// - /// Processes [localPosition] and checks - /// the elements of the chart that are near the offset, - /// then makes a [LineTouchResponse] from the elements that has been touched. - List? handleTouch( - Offset localPosition, - Size size, - PaintHolder holder, - ) { - final data = holder.data; - - /// it holds list of nearest touched spots of each line - /// and we use it to draw touch stuff on them - final touchedSpots = []; - - /// draw each line independently on the chart - for (var i = 0; i < data.lineBarsData.length; i++) { - final barData = data.lineBarsData[i]; - - // find the nearest spot on touch area in this bar line - final foundTouchedSpot = - getNearestTouchedSpot(size, localPosition, barData, i, holder); - if (foundTouchedSpot != null) { - touchedSpots.add(foundTouchedSpot); - } - } - - touchedSpots.sort((a, b) => a.distance.compareTo(b.distance)); - - return touchedSpots.isEmpty ? null : touchedSpots; - } - - /// find the nearest spot base on the touched offset - @visibleForTesting - TouchLineBarSpot? getNearestTouchedSpot( - Size viewSize, - Offset touchedPoint, - LineChartBarData barData, - int barDataPosition, - PaintHolder holder, - ) { - final data = holder.data; - if (!barData.show) { - return null; - } - - /// Find the nearest spot (based on distanceCalculator) - final sortedSpots = []; - double? smallestDistance; - for (final spot in barData.spots) { - if (spot.isNull()) continue; - final distance = data.lineTouchData.distanceCalculator( - touchedPoint, - Offset( - getPixelX(spot.x, viewSize, holder), - getPixelY(spot.y, viewSize, holder), - ), - ); - - if (distance <= data.lineTouchData.touchSpotThreshold) { - smallestDistance ??= distance; - - if (distance < smallestDistance) { - sortedSpots.insert(0, spot); - smallestDistance = distance; - } else { - sortedSpots.add(spot); - } - } - } - - if (sortedSpots.isNotEmpty) { - return TouchLineBarSpot( - barData, - barDataPosition, - sortedSpots.first, - smallestDistance!, - ); - } else { - return null; - } - } -} - -@visibleForTesting -class LineIndexDrawingInfo { - LineIndexDrawingInfo( - this.line, - this.lineIndex, - this.spot, - this.spotIndex, - this.indicatorData, - ); - - final LineChartBarData line; - final int lineIndex; - final FlSpot spot; - final int spotIndex; - final TouchedSpotIndicatorData indicatorData; -} diff --git a/lib/src/chart/line_chart/line_chart_renderer.dart b/lib/src/chart/line_chart/line_chart_renderer.dart deleted file mode 100644 index 9d57d60487..0000000000 --- a/lib/src/chart/line_chart/line_chart_renderer.dart +++ /dev/null @@ -1,113 +0,0 @@ -import 'package:fl_chart/fl_chart.dart'; -import 'package:fl_chart/src/chart/base/base_chart/base_chart_painter.dart'; -import 'package:fl_chart/src/chart/base/base_chart/render_base_chart.dart'; -import 'package:fl_chart/src/chart/line_chart/line_chart_painter.dart'; -import 'package:fl_chart/src/utils/canvas_wrapper.dart'; -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - -// coverage:ignore-start - -/// Low level LineChart Widget. -class LineChartLeaf extends LeafRenderObjectWidget { - const LineChartLeaf({ - super.key, - required this.data, - required this.targetData, - }); - - final LineChartData data; - final LineChartData targetData; - - @override - RenderLineChart createRenderObject(BuildContext context) => RenderLineChart( - context, - data, - targetData, - MediaQuery.of(context).textScaler, - ); - - @override - void updateRenderObject(BuildContext context, RenderLineChart renderObject) { - renderObject - ..data = data - ..targetData = targetData - ..textScaler = MediaQuery.of(context).textScaler - ..buildContext = context; - } -} -// coverage:ignore-end - -/// Renders our LineChart, also handles hitTest. -class RenderLineChart extends RenderBaseChart { - RenderLineChart( - BuildContext context, - LineChartData data, - LineChartData targetData, - TextScaler textScaler, - ) : _data = data, - _targetData = targetData, - _textScaler = textScaler, - super( - targetData.lineTouchData, - context, - ); - - LineChartData get data => _data; - LineChartData _data; - set data(LineChartData value) { - if (_data == value) return; - _data = value; - markNeedsPaint(); - } - - LineChartData get targetData => _targetData; - LineChartData _targetData; - set targetData(LineChartData value) { - if (_targetData == value) return; - _targetData = value; - super.updateBaseTouchData(_targetData.lineTouchData); - markNeedsPaint(); - } - - TextScaler get textScaler => _textScaler; - TextScaler _textScaler; - set textScaler(TextScaler value) { - if (_textScaler == value) return; - _textScaler = value; - markNeedsPaint(); - } - - // We couldn't mock [size] property of this class, that's why we have this - @visibleForTesting - Size? mockTestSize; - - @visibleForTesting - LineChartPainter painter = LineChartPainter(); - - PaintHolder get paintHolder => - PaintHolder(data, targetData, textScaler); - - @override - void paint(PaintingContext context, Offset offset) { - final canvas = context.canvas - ..save() - ..translate(offset.dx, offset.dy); - painter.paint( - buildContext, - CanvasWrapper(canvas, mockTestSize ?? size), - paintHolder, - ); - canvas.restore(); - } - - @override - LineTouchResponse getResponseAtLocation(Offset localPosition) { - final touchedSpots = painter.handleTouch( - localPosition, - mockTestSize ?? size, - paintHolder, - ); - return LineTouchResponse(touchedSpots); - } -} diff --git a/lib/src/chart/pie_chart/pie_chart.dart b/lib/src/chart/pie_chart/pie_chart.dart deleted file mode 100644 index fa06d54521..0000000000 --- a/lib/src/chart/pie_chart/pie_chart.dart +++ /dev/null @@ -1,119 +0,0 @@ -import 'package:fl_chart/src/chart/pie_chart/pie_chart_data.dart'; -import 'package:fl_chart/src/chart/pie_chart/pie_chart_renderer.dart'; -import 'package:flutter/material.dart'; - -/// Renders a pie chart as a widget, using provided [PieChartData]. -class PieChart extends ImplicitlyAnimatedWidget { - /// [data] determines how the [PieChart] should be look like, - /// when you make any change in the [PieChartData], it updates - /// new values with animation, and duration is [swapAnimationDuration]. - /// also you can change the [swapAnimationCurve] - /// which default is [Curves.linear]. - const PieChart( - this.data, { - super.key, - Duration swapAnimationDuration = defaultDuration, - Curve swapAnimationCurve = Curves.linear, - }) : super( - duration: swapAnimationDuration, - curve: swapAnimationCurve, - ); - - /// Default duration to reuse externally. - static const defaultDuration = Duration(milliseconds: 150); - - /// Determines how the [PieChart] should be look like. - final PieChartData data; - - /// Creates a [_PieChartState] - @override - _PieChartState createState() => _PieChartState(); -} - -class _PieChartState extends AnimatedWidgetBaseState { - /// We handle under the hood animations (implicit animations) via this tween, - /// it lerps between the old [PieChartData] to the new one. - PieChartDataTween? _pieChartDataTween; - - @override - void initState() { - /// Make sure that [_widgetsPositionHandler] is updated. - _ambiguate(WidgetsBinding.instance)!.addPostFrameCallback((timeStamp) { - if (mounted) { - setState(() {}); - } - }); - - super.initState(); - } - - /// This allows a value of type T or T? to be treated as a value of type T?. - /// - /// We use this so that APIs that have become non-nullable can still be used - /// with `!` and `?` to support older versions of the API as well. - T? _ambiguate(T? value) => value; - - @override - Widget build(BuildContext context) { - final showingData = _getData(); - - return PieChartLeaf( - data: _pieChartDataTween!.evaluate(animation), - targetData: showingData, - ); - } - - /// if builtIn touches are enabled, we should recreate our [pieChartData] - /// to handle built in touches - PieChartData _getData() { - return widget.data; - } - - @override - void forEachTween(TweenVisitor visitor) { - _pieChartDataTween = visitor( - _pieChartDataTween, - widget.data, - (dynamic value) => - PieChartDataTween(begin: value as PieChartData, end: widget.data), - ) as PieChartDataTween?; - } -} - -/// Positions the badge widgets on their respective sections. -class BadgeWidgetsDelegate extends MultiChildLayoutDelegate { - BadgeWidgetsDelegate({ - required this.badgeWidgetsCount, - required this.badgeWidgetsOffsets, - }); - final int badgeWidgetsCount; - final Map badgeWidgetsOffsets; - - @override - void performLayout(Size size) { - for (var index = 0; index < badgeWidgetsCount; index++) { - final key = badgeWidgetsOffsets.keys.elementAt(index); - - final finalSize = layoutChild( - key, - BoxConstraints( - maxWidth: size.width, - maxHeight: size.height, - ), - ); - - positionChild( - key, - Offset( - badgeWidgetsOffsets[key]!.dx - (finalSize.width / 2), - badgeWidgetsOffsets[key]!.dy - (finalSize.height / 2), - ), - ); - } - } - - @override - bool shouldRelayout(BadgeWidgetsDelegate oldDelegate) { - return oldDelegate.badgeWidgetsOffsets != badgeWidgetsOffsets; - } -} diff --git a/lib/src/chart/pie_chart/pie_chart_data.dart b/lib/src/chart/pie_chart/pie_chart_data.dart deleted file mode 100644 index 7de534b0cd..0000000000 --- a/lib/src/chart/pie_chart/pie_chart_data.dart +++ /dev/null @@ -1,376 +0,0 @@ -// coverage:ignore-file -import 'dart:ui'; - -import 'package:equatable/equatable.dart'; -import 'package:fl_chart/fl_chart.dart'; -import 'package:fl_chart/src/utils/lerp.dart'; -import 'package:flutter/material.dart'; - -/// [PieChart] needs this class to render itself. -/// -/// It holds data needed to draw a pie chart, -/// including pie sections, colors, ... -class PieChartData extends BaseChartData with EquatableMixin { - /// [PieChart] draws some [sections] in a circle, - /// and applies free space with radius [centerSpaceRadius], - /// and color [centerSpaceColor] in the center of the circle, - /// if you don't want it, set [centerSpaceRadius] to zero. - /// - /// It draws [sections] from zero degree (right side of the circle) clockwise, - /// you can change the starting point, by changing [startDegreeOffset] (in degrees). - /// - /// You can define a gap between [sections] by setting [sectionsSpace]. - /// - /// You can modify [pieTouchData] to customize touch behaviors and responses. - PieChartData({ - List? sections, - double? centerSpaceRadius, - Color? centerSpaceColor, - double? sectionsSpace, - double? startDegreeOffset, - PieTouchData? pieTouchData, - FlBorderData? borderData, - }) : sections = sections?.where((element) => element.value != 0).toList() ?? - const [], - centerSpaceRadius = centerSpaceRadius ?? double.infinity, - centerSpaceColor = centerSpaceColor ?? Colors.transparent, - sectionsSpace = sectionsSpace ?? 2, - startDegreeOffset = startDegreeOffset ?? 0, - pieTouchData = pieTouchData ?? PieTouchData(), - super( - borderData: borderData ?? FlBorderData(show: false), - touchData: pieTouchData ?? PieTouchData(), - ); - - /// Defines showing sections of the [PieChart]. - final List sections; - - /// Radius of free space in center of the circle. - final double centerSpaceRadius; - - /// Color of free space in center of the circle. - final Color centerSpaceColor; - - /// Defines gap between sections. - /// - /// Does not work on html-renderer, - /// https://github.com/imaNNeo/fl_chart/issues/955 - final double sectionsSpace; - - /// [PieChart] draws [sections] from zero degree (right side of the circle) clockwise. - final double startDegreeOffset; - - /// Handles touch behaviors and responses. - final PieTouchData pieTouchData; - - /// We hold this value to determine weight of each [PieChartSectionData.value]. - double get sumValue => sections - .map((data) => data.value) - .reduce((first, second) => first + second); - - /// Copies current [PieChartData] to a new [PieChartData], - /// and replaces provided values. - PieChartData copyWith({ - List? sections, - double? centerSpaceRadius, - Color? centerSpaceColor, - double? sectionsSpace, - double? startDegreeOffset, - PieTouchData? pieTouchData, - FlBorderData? borderData, - }) { - return PieChartData( - sections: sections ?? this.sections, - centerSpaceRadius: centerSpaceRadius ?? this.centerSpaceRadius, - centerSpaceColor: centerSpaceColor ?? this.centerSpaceColor, - sectionsSpace: sectionsSpace ?? this.sectionsSpace, - startDegreeOffset: startDegreeOffset ?? this.startDegreeOffset, - pieTouchData: pieTouchData ?? this.pieTouchData, - borderData: borderData ?? this.borderData, - ); - } - - /// Lerps a [BaseChartData] based on [t] value, check [Tween.lerp]. - @override - PieChartData lerp(BaseChartData a, BaseChartData b, double t) { - if (a is PieChartData && b is PieChartData) { - return PieChartData( - borderData: FlBorderData.lerp(a.borderData, b.borderData, t), - centerSpaceColor: Color.lerp(a.centerSpaceColor, b.centerSpaceColor, t), - centerSpaceRadius: lerpDoubleAllowInfinity( - a.centerSpaceRadius, - b.centerSpaceRadius, - t, - ), - pieTouchData: b.pieTouchData, - sectionsSpace: lerpDouble(a.sectionsSpace, b.sectionsSpace, t), - startDegreeOffset: - lerpDouble(a.startDegreeOffset, b.startDegreeOffset, t), - sections: lerpPieChartSectionDataList(a.sections, b.sections, t), - ); - } else { - throw Exception('Illegal State'); - } - } - - /// Used for equality check, see [EquatableMixin]. - @override - List get props => [ - sections, - centerSpaceRadius, - centerSpaceColor, - pieTouchData, - sectionsSpace, - startDegreeOffset, - borderData, - ]; -} - -/// Holds data related to drawing each [PieChart] section. -class PieChartSectionData { - /// [PieChart] draws section from right side of the circle (0 degrees), - /// each section have a [value] that determines how much it should occupy, - /// this is depends on sum of all sections, each section should - /// occupy ([value] / sumValues) * 360 degrees. - /// - /// It draws this section with filled [color], and [radius]. - /// - /// If [showTitle] is true, it draws a title at the middle of section, - /// you can set the text using [title], and set the style using [titleStyle], - /// by default it draws texts at the middle of section, but you can change the - /// [titlePositionPercentageOffset] to have your desire design, - /// it should be between 0.0 to 1.0, - /// 0.0 means near the center, - /// 1.0 means near the outside of the [PieChart]. - /// - /// If [badgeWidget] is not null, it draws a widget at the middle of section, - /// by default it draws the widget at the middle of section, but you can change the - /// [badgePositionPercentageOffset] to have your desire design, - /// the value works the same way as [titlePositionPercentageOffset]. - PieChartSectionData({ - double? value, - Color? color, - double? radius, - bool? showTitle, - this.titleStyle, - String? title, - BorderSide? borderSide, - this.badgeWidget, - double? titlePositionPercentageOffset, - double? badgePositionPercentageOffset, - }) : value = value ?? 10, - color = color ?? Colors.cyan, - radius = radius ?? 40, - showTitle = showTitle ?? true, - title = title ?? (value == null ? '' : value.toString()), - borderSide = borderSide ?? const BorderSide(width: 0), - titlePositionPercentageOffset = titlePositionPercentageOffset ?? 0.5, - badgePositionPercentageOffset = badgePositionPercentageOffset ?? 0.5; - - /// It determines how much space it should occupy around the circle. - /// - /// This is depends on sum of all sections, each section should - /// occupy ([value] / sumValues) * 360 degrees. - /// - /// value can not be null. - final double value; - - /// Defines the color of section. - final Color color; - - /// Defines the radius of section. - final double radius; - - /// Defines show or hide the title of section. - final bool showTitle; - - /// Defines style of showing title of section. - final TextStyle? titleStyle; - - /// Defines text of showing title at the middle of section. - final String title; - - /// Defines border stroke around the section - final BorderSide borderSide; - - /// Defines a widget that represents the section. - /// - /// This can be anything from a text, an image, an animation, and even a combination of widgets. - /// Use AnimatedWidgets to animate this widget. - final Widget? badgeWidget; - - /// Defines position of showing title in the section. - /// - /// It should be between 0.0 to 1.0, - /// 0.0 means near the center, - /// 1.0 means near the outside of the [PieChart]. - final double titlePositionPercentageOffset; - - /// Defines position of badge widget in the section. - /// - /// It should be between 0.0 to 1.0, - /// 0.0 means near the center, - /// 1.0 means near the outside of the [PieChart]. - final double badgePositionPercentageOffset; - - /// Copies current [PieChartSectionData] to a new [PieChartSectionData], - /// and replaces provided values. - PieChartSectionData copyWith({ - double? value, - Color? color, - double? radius, - bool? showTitle, - TextStyle? titleStyle, - String? title, - BorderSide? borderSide, - Widget? badgeWidget, - double? titlePositionPercentageOffset, - double? badgePositionPercentageOffset, - }) { - return PieChartSectionData( - value: value ?? this.value, - color: color ?? this.color, - radius: radius ?? this.radius, - showTitle: showTitle ?? this.showTitle, - titleStyle: titleStyle ?? this.titleStyle, - title: title ?? this.title, - borderSide: borderSide ?? this.borderSide, - badgeWidget: badgeWidget ?? this.badgeWidget, - titlePositionPercentageOffset: - titlePositionPercentageOffset ?? this.titlePositionPercentageOffset, - badgePositionPercentageOffset: - badgePositionPercentageOffset ?? this.badgePositionPercentageOffset, - ); - } - - /// Lerps a [PieChartSectionData] based on [t] value, check [Tween.lerp]. - static PieChartSectionData lerp( - PieChartSectionData a, - PieChartSectionData b, - double t, - ) { - return PieChartSectionData( - value: lerpDouble(a.value, b.value, t), - color: Color.lerp(a.color, b.color, t), - radius: lerpDouble(a.radius, b.radius, t), - showTitle: b.showTitle, - titleStyle: TextStyle.lerp(a.titleStyle, b.titleStyle, t), - title: b.title, - borderSide: BorderSide.lerp(a.borderSide, b.borderSide, t), - badgeWidget: b.badgeWidget, - titlePositionPercentageOffset: lerpDouble( - a.titlePositionPercentageOffset, - b.titlePositionPercentageOffset, - t, - ), - badgePositionPercentageOffset: lerpDouble( - a.badgePositionPercentageOffset, - b.badgePositionPercentageOffset, - t, - ), - ); - } -} - -/// Holds data to handle touch events, and touch responses in the [PieChart]. -/// -/// There is a touch flow, explained [here](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/handle_touches.md) -/// in a simple way, each chart's renderer captures the touch events, and passes the pointerEvent -/// to the painter, and gets touched spot, and wraps it into a concrete [PieTouchResponse]. -class PieTouchData extends FlTouchData with EquatableMixin { - /// You can disable or enable the touch system using [enabled] flag, - /// - /// [touchCallback] notifies you about the happened touch/pointer events. - /// It gives you a [FlTouchEvent] which is the happened event such as [FlPointerHoverEvent], [FlTapUpEvent], ... - /// It also gives you a [PieTouchResponse] which contains information - /// about the elements that has touched. - /// - /// Using [mouseCursorResolver] you can change the mouse cursor - /// based on the provided [FlTouchEvent] and [PieTouchResponse] - PieTouchData({ - bool? enabled, - BaseTouchCallback? touchCallback, - MouseCursorResolver? mouseCursorResolver, - Duration? longPressDuration, - }) : super( - enabled ?? true, - touchCallback, - mouseCursorResolver, - longPressDuration, - ); - - /// Used for equality check, see [EquatableMixin]. - @override - List get props => [ - enabled, - touchCallback, - mouseCursorResolver, - longPressDuration, - ]; -} - -class PieTouchedSection with EquatableMixin { - /// This class Contains [touchedSection], [touchedSectionIndex] that tells - /// you touch happened on which section, - /// [touchAngle] gives you angle of touch, - /// and [touchRadius] gives you radius of the touch. - PieTouchedSection( - this.touchedSection, - this.touchedSectionIndex, - this.touchAngle, - this.touchRadius, - ); - - /// touch happened on this section - final PieChartSectionData? touchedSection; - - /// touch happened on this position - final int touchedSectionIndex; - - /// touch happened with this angle on the [PieChart] - final double touchAngle; - - /// touch happened with this radius on the [PieChart] - final double touchRadius; - - /// Used for equality check, see [EquatableMixin]. - @override - List get props => [ - touchedSection, - touchedSectionIndex, - touchAngle, - touchRadius, - ]; -} - -/// Holds information about touch response in the [PieChart]. -/// -/// You can override [PieTouchData.touchCallback] to handle touch events, -/// it gives you a [PieTouchResponse] and you can do whatever you want. -class PieTouchResponse extends BaseTouchResponse { - /// If touch happens, [PieChart] processes it internally and passes out a [PieTouchResponse] - PieTouchResponse(this.touchedSection) : super(); - - /// Contains information about touched section, like index, angle, radius, ... - final PieTouchedSection? touchedSection; - - /// Copies current [PieTouchResponse] to a new [PieTouchResponse], - /// and replaces provided values. - PieTouchResponse copyWith({ - PieTouchedSection? touchedSection, - }) { - return PieTouchResponse( - touchedSection ?? this.touchedSection, - ); - } -} - -/// It lerps a [PieChartData] to another [PieChartData] (handles animation for updating values) -class PieChartDataTween extends Tween { - PieChartDataTween({required PieChartData begin, required PieChartData end}) - : super(begin: begin, end: end); - - /// Lerps a [PieChartData] based on [t] value, check [Tween.lerp]. - @override - PieChartData lerp(double t) => begin!.lerp(begin!, end!, t); -} diff --git a/lib/src/chart/pie_chart/pie_chart_helper.dart b/lib/src/chart/pie_chart/pie_chart_helper.dart deleted file mode 100644 index d7469636c1..0000000000 --- a/lib/src/chart/pie_chart/pie_chart_helper.dart +++ /dev/null @@ -1,21 +0,0 @@ -import 'package:fl_chart/src/chart/pie_chart/pie_chart_data.dart'; -import 'package:flutter/widgets.dart'; - -extension PieChartSectionDataListExtension on List { - List toWidgets() { - final widgets = List.filled(length, Container()); - var allWidgetsAreNull = true; - asMap().entries.forEach((e) { - final index = e.key; - final section = e.value; - if (section.badgeWidget != null) { - widgets[index] = section.badgeWidget!; - allWidgetsAreNull = false; - } - }); - if (allWidgetsAreNull) { - return List.empty(); - } - return widgets; - } -} diff --git a/lib/src/chart/pie_chart/pie_chart_painter.dart b/lib/src/chart/pie_chart/pie_chart_painter.dart deleted file mode 100644 index 8f73cdcedf..0000000000 --- a/lib/src/chart/pie_chart/pie_chart_painter.dart +++ /dev/null @@ -1,497 +0,0 @@ -import 'dart:math' as math; - -import 'package:fl_chart/fl_chart.dart'; -import 'package:fl_chart/src/chart/base/base_chart/base_chart_painter.dart'; -import 'package:fl_chart/src/chart/base/line.dart'; -import 'package:fl_chart/src/chart/pie_chart/pie_chart_data.dart'; -import 'package:fl_chart/src/utils/canvas_wrapper.dart'; -import 'package:fl_chart/src/utils/utils.dart'; -import 'package:flutter/material.dart'; - -/// Paints [PieChartData] in the canvas, it can be used in a [CustomPainter] -class PieChartPainter extends BaseChartPainter { - /// Paints [dataList] into canvas, it is the animating [PieChartData], - /// [targetData] is the animation's target and remains the same - /// during animation, then we should use it when we need to show - /// tooltips or something like that, because [dataList] is changing constantly. - /// - /// [textScale] used for scaling texts inside the chart, - /// parent can use [MediaQuery.textScaleFactor] to respect - /// the system's font size. - PieChartPainter() : super() { - _sectionPaint = Paint()..style = PaintingStyle.stroke; - - _sectionStrokePaint = Paint()..style = PaintingStyle.stroke; - - _centerSpacePaint = Paint()..style = PaintingStyle.fill; - } - late Paint _sectionPaint; - late Paint _sectionStrokePaint; - late Paint _centerSpacePaint; - - /// Paints [PieChartData] into the provided canvas. - @override - void paint( - BuildContext context, - CanvasWrapper canvasWrapper, - PaintHolder holder, - ) { - super.paint(context, canvasWrapper, holder); - final data = holder.data; - if (data.sections.isEmpty) { - return; - } - - final sectionsAngle = calculateSectionsAngle(data.sections, data.sumValue); - final centerRadius = calculateCenterRadius(canvasWrapper.size, holder); - - drawCenterSpace(canvasWrapper, centerRadius, holder); - drawSections(canvasWrapper, sectionsAngle, centerRadius, holder); - drawTexts(context, canvasWrapper, holder, centerRadius); - } - - @visibleForTesting - List calculateSectionsAngle( - List sections, - double sumValue, - ) { - return sections.map((section) { - return 360 * (section.value / sumValue); - }).toList(); - } - - @visibleForTesting - void drawCenterSpace( - CanvasWrapper canvasWrapper, - double centerRadius, - PaintHolder holder, - ) { - final data = holder.data; - final viewSize = canvasWrapper.size; - final centerX = viewSize.width / 2; - final centerY = viewSize.height / 2; - - _centerSpacePaint.color = data.centerSpaceColor; - canvasWrapper.drawCircle( - Offset(centerX, centerY), - centerRadius, - _centerSpacePaint, - ); - } - - @visibleForTesting - void drawSections( - CanvasWrapper canvasWrapper, - List sectionsAngle, - double centerRadius, - PaintHolder holder, - ) { - final data = holder.data; - final viewSize = canvasWrapper.size; - - final center = Offset(viewSize.width / 2, viewSize.height / 2); - - var tempAngle = data.startDegreeOffset; - - for (var i = 0; i < data.sections.length; i++) { - final section = data.sections[i]; - final sectionDegree = sectionsAngle[i]; - - if (sectionDegree == 360) { - _sectionPaint - ..color = section.color - ..strokeWidth = section.radius - ..style = PaintingStyle.stroke; - canvasWrapper.drawCircle( - center, - centerRadius + section.radius / 2, - _sectionPaint, - ); - if (section.borderSide.width != 0.0 && - section.borderSide.color.opacity != 0.0) { - _sectionStrokePaint - ..strokeWidth = section.borderSide.width - ..color = section.borderSide.color; - // Outer - canvasWrapper - ..drawCircle( - center, - centerRadius + section.radius - (section.borderSide.width / 2), - _sectionStrokePaint, - ) - - // Inner - ..drawCircle( - center, - centerRadius + (section.borderSide.width / 2), - _sectionStrokePaint, - ); - } - return; - } - - final sectionPath = generateSectionPath( - section, - data.sectionsSpace, - tempAngle, - sectionDegree, - center, - centerRadius, - ); - - drawSection(section, sectionPath, canvasWrapper); - drawSectionStroke(section, sectionPath, canvasWrapper, viewSize); - tempAngle += sectionDegree; - } - } - - /// Generates a path around a section - @visibleForTesting - Path generateSectionPath( - PieChartSectionData section, - double sectionSpace, - double tempAngle, - double sectionDegree, - Offset center, - double centerRadius, - ) { - final sectionRadiusRect = Rect.fromCircle( - center: center, - radius: centerRadius + section.radius, - ); - - final centerRadiusRect = Rect.fromCircle( - center: center, - radius: centerRadius, - ); - - final startRadians = Utils().radians(tempAngle); - final sweepRadians = Utils().radians(sectionDegree); - final endRadians = startRadians + sweepRadians; - - final startLineDirection = - Offset(math.cos(startRadians), math.sin(startRadians)); - - final startLineFrom = center + startLineDirection * centerRadius; - final startLineTo = startLineFrom + startLineDirection * section.radius; - final startLine = Line(startLineFrom, startLineTo); - - final endLineDirection = Offset(math.cos(endRadians), math.sin(endRadians)); - - final endLineFrom = center + endLineDirection * centerRadius; - final endLineTo = endLineFrom + endLineDirection * section.radius; - final endLine = Line(endLineFrom, endLineTo); - - var sectionPath = Path() - ..moveTo(startLine.from.dx, startLine.from.dy) - ..lineTo(startLine.to.dx, startLine.to.dy) - ..arcTo(sectionRadiusRect, startRadians, sweepRadians, false) - ..lineTo(endLine.from.dx, endLine.from.dy) - ..arcTo(centerRadiusRect, endRadians, -sweepRadians, false) - ..moveTo(startLine.from.dx, startLine.from.dy) - ..close(); - - /// Subtract section space from the sectionPath - if (sectionSpace != 0) { - final startLineSeparatorPath = createRectPathAroundLine( - Line(startLineFrom, startLineTo), - sectionSpace, - ); - try { - sectionPath = Path.combine( - PathOperation.difference, - sectionPath, - startLineSeparatorPath, - ); - } catch (e) { - /// It's a flutter engine issue with [Path.combine] in web-html renderer - /// https://github.com/imaNNeo/fl_chart/issues/955 - } - - final endLineSeparatorPath = - createRectPathAroundLine(Line(endLineFrom, endLineTo), sectionSpace); - try { - sectionPath = Path.combine( - PathOperation.difference, - sectionPath, - endLineSeparatorPath, - ); - } catch (e) { - /// It's a flutter engine issue with [Path.combine] in web-html renderer - /// https://github.com/imaNNeo/fl_chart/issues/955 - } - } - - return sectionPath; - } - - /// Creates a rect around a narrow line - @visibleForTesting - Path createRectPathAroundLine(Line line, double width) { - width = width / 2; - final normalized = line.normalize(); - - final verticalAngle = line.direction() + (math.pi / 2); - final verticalDirection = - Offset(math.cos(verticalAngle), math.sin(verticalAngle)); - - final startPoint1 = Offset( - line.from.dx - - (normalized * (width / 2)).dx - - (verticalDirection * width).dx, - line.from.dy - - (normalized * (width / 2)).dy - - (verticalDirection * width).dy, - ); - - final startPoint2 = Offset( - line.to.dx + - (normalized * (width / 2)).dx - - (verticalDirection * width).dx, - line.to.dy + - (normalized * (width / 2)).dy - - (verticalDirection * width).dy, - ); - - final startPoint3 = Offset( - startPoint2.dx + (verticalDirection * (width * 2)).dx, - startPoint2.dy + (verticalDirection * (width * 2)).dy, - ); - - final startPoint4 = Offset( - startPoint1.dx + (verticalDirection * (width * 2)).dx, - startPoint1.dy + (verticalDirection * (width * 2)).dy, - ); - - return Path() - ..moveTo(startPoint1.dx, startPoint1.dy) - ..lineTo(startPoint2.dx, startPoint2.dy) - ..lineTo(startPoint3.dx, startPoint3.dy) - ..lineTo(startPoint4.dx, startPoint4.dy) - ..lineTo(startPoint1.dx, startPoint1.dy); - } - - @visibleForTesting - void drawSection( - PieChartSectionData section, - Path sectionPath, - CanvasWrapper canvasWrapper, - ) { - _sectionPaint - ..color = section.color - ..style = PaintingStyle.fill; - canvasWrapper.drawPath(sectionPath, _sectionPaint); - } - - @visibleForTesting - void drawSectionStroke( - PieChartSectionData section, - Path sectionPath, - CanvasWrapper canvasWrapper, - Size viewSize, - ) { - if (section.borderSide.width != 0.0 && - section.borderSide.color.opacity != 0.0) { - canvasWrapper - ..saveLayer( - Rect.fromLTWH(0, 0, viewSize.width, viewSize.height), - Paint(), - ) - ..clipPath(sectionPath); - - _sectionStrokePaint - ..strokeWidth = section.borderSide.width * 2 - ..color = section.borderSide.color; - canvasWrapper - ..drawPath( - sectionPath, - _sectionStrokePaint, - ) - ..restore(); - } - } - - /// Calculates layout of overlaying elements, includes: - /// - title text - /// - badge widget positions - @visibleForTesting - void drawTexts( - BuildContext context, - CanvasWrapper canvasWrapper, - PaintHolder holder, - double centerRadius, - ) { - final data = holder.data; - final viewSize = canvasWrapper.size; - final center = Offset(viewSize.width / 2, viewSize.height / 2); - - var tempAngle = data.startDegreeOffset; - - for (var i = 0; i < data.sections.length; i++) { - final section = data.sections[i]; - final startAngle = tempAngle; - final sweepAngle = 360 * (section.value / data.sumValue); - final sectionCenterAngle = startAngle + (sweepAngle / 2); - - Offset sectionCenter(double percentageOffset) => - center + - Offset( - math.cos(Utils().radians(sectionCenterAngle)) * - (centerRadius + (section.radius * percentageOffset)), - math.sin(Utils().radians(sectionCenterAngle)) * - (centerRadius + (section.radius * percentageOffset)), - ); - - final sectionCenterOffsetTitle = - sectionCenter(section.titlePositionPercentageOffset); - - if (section.showTitle) { - final span = TextSpan( - style: Utils().getThemeAwareTextStyle(context, section.titleStyle), - text: section.title, - ); - final tp = TextPainter( - text: span, - textAlign: TextAlign.center, - textDirection: TextDirection.ltr, - textScaler: holder.textScaler, - )..layout(); - - canvasWrapper.drawText( - tp, - sectionCenterOffsetTitle - Offset(tp.width / 2, tp.height / 2), - ); - } - - tempAngle += sweepAngle; - } - } - - /// Calculates center radius based on the provided sections radius - @visibleForTesting - double calculateCenterRadius( - Size viewSize, - PaintHolder holder, - ) { - final data = holder.data; - if (data.centerSpaceRadius.isFinite) { - return data.centerSpaceRadius; - } - final maxRadius = - data.sections.reduce((a, b) => a.radius > b.radius ? a : b).radius; - return (viewSize.shortestSide - (maxRadius * 2)) / 2; - } - - /// Makes a [PieTouchedSection] based on the provided [localPosition] - /// - /// Processes [localPosition] and checks - /// the elements of the chart that are near the offset, - /// then makes a [PieTouchedSection] from the elements that has been touched. - PieTouchedSection handleTouch( - Offset localPosition, - Size viewSize, - PaintHolder holder, - ) { - final data = holder.data; - final sectionsAngle = calculateSectionsAngle(data.sections, data.sumValue); - - final center = Offset(viewSize.width / 2, viewSize.height / 2); - - final touchedPoint2 = localPosition - center; - - final touchX = touchedPoint2.dx; - final touchY = touchedPoint2.dy; - - final touchR = math.sqrt(math.pow(touchX, 2) + math.pow(touchY, 2)); - var touchAngle = Utils().degrees(math.atan2(touchY, touchX)); - touchAngle = touchAngle < 0 ? (180 - touchAngle.abs()) + 180 : touchAngle; - - PieChartSectionData? foundSectionData; - var foundSectionDataPosition = -1; - - /// Find the nearest section base on the touch spot - final relativeTouchAngle = (touchAngle - data.startDegreeOffset) % 360; - var tempAngle = 0.0; - for (var i = 0; i < data.sections.length; i++) { - final section = data.sections[i]; - var sectionAngle = sectionsAngle[i]; - - tempAngle %= 360; - if (data.sections.length == 1) { - sectionAngle = 360; - } else { - sectionAngle %= 360; - } - - /// degree criteria - final space = data.sectionsSpace / 2; - final fromDegree = tempAngle + space; - final toDegree = sectionAngle + tempAngle - space; - final isInDegree = - relativeTouchAngle >= fromDegree && relativeTouchAngle <= toDegree; - - /// radius criteria - final centerRadius = calculateCenterRadius(viewSize, holder); - final sectionRadius = centerRadius + section.radius; - final isInRadius = touchR > centerRadius && touchR <= sectionRadius; - - if (isInDegree && isInRadius) { - foundSectionData = section; - foundSectionDataPosition = i; - break; - } - - tempAngle += sectionAngle; - } - - return PieTouchedSection( - foundSectionData, - foundSectionDataPosition, - touchAngle, - touchR, - ); - } - - /// Exposes offset for laying out the badge widgets upon the chart. - Map getBadgeOffsets( - Size viewSize, - PaintHolder holder, - ) { - final data = holder.data; - final center = viewSize.center(Offset.zero); - final badgeWidgetsOffsets = {}; - - if (data.sections.isEmpty) { - return badgeWidgetsOffsets; - } - - var tempAngle = data.startDegreeOffset; - - final sectionsAngle = calculateSectionsAngle(data.sections, data.sumValue); - for (var i = 0; i < data.sections.length; i++) { - final section = data.sections[i]; - final startAngle = tempAngle; - final sweepAngle = sectionsAngle[i]; - final sectionCenterAngle = startAngle + (sweepAngle / 2); - final centerRadius = calculateCenterRadius(viewSize, holder); - - Offset sectionCenter(double percentageOffset) => - center + - Offset( - math.cos(Utils().radians(sectionCenterAngle)) * - (centerRadius + (section.radius * percentageOffset)), - math.sin(Utils().radians(sectionCenterAngle)) * - (centerRadius + (section.radius * percentageOffset)), - ); - - final sectionCenterOffsetBadgeWidget = - sectionCenter(section.badgePositionPercentageOffset); - - badgeWidgetsOffsets[i] = sectionCenterOffsetBadgeWidget; - - tempAngle += sweepAngle; - } - - return badgeWidgetsOffsets; - } -} diff --git a/lib/src/chart/pie_chart/pie_chart_renderer.dart b/lib/src/chart/pie_chart/pie_chart_renderer.dart deleted file mode 100644 index ef001a4776..0000000000 --- a/lib/src/chart/pie_chart/pie_chart_renderer.dart +++ /dev/null @@ -1,170 +0,0 @@ -import 'package:fl_chart/fl_chart.dart'; -import 'package:fl_chart/src/chart/base/base_chart/base_chart_painter.dart'; -import 'package:fl_chart/src/chart/base/base_chart/render_base_chart.dart'; -import 'package:fl_chart/src/chart/pie_chart/pie_chart_helper.dart'; -import 'package:fl_chart/src/chart/pie_chart/pie_chart_painter.dart'; -import 'package:fl_chart/src/utils/canvas_wrapper.dart'; -import 'package:flutter/cupertino.dart'; -import 'package:flutter/rendering.dart'; -import 'package:flutter/services.dart'; - -// coverage:ignore-start - -/// Low level PieChart Widget. -class PieChartLeaf extends MultiChildRenderObjectWidget { - PieChartLeaf({ - super.key, - required this.data, - required this.targetData, - }) : super(children: targetData.sections.toWidgets()); - - final PieChartData data; - final PieChartData targetData; - - @override - RenderPieChart createRenderObject(BuildContext context) => RenderPieChart( - context, - data, - targetData, - MediaQuery.of(context).textScaler, - ); - - @override - void updateRenderObject(BuildContext context, RenderPieChart renderObject) { - renderObject - ..data = data - ..targetData = targetData - ..textScaler = MediaQuery.of(context).textScaler - ..buildContext = context; - } -} -// coverage:ignore-end - -/// Renders our PieChart, also handles hitTest. -class RenderPieChart extends RenderBaseChart - with - ContainerRenderObjectMixin, - RenderBoxContainerDefaultsMixin - implements MouseTrackerAnnotation { - RenderPieChart( - BuildContext context, - PieChartData data, - PieChartData targetData, - TextScaler textScaler, - ) : _data = data, - _targetData = targetData, - _textScaler = textScaler, - super(targetData.pieTouchData, context); - - PieChartData get data => _data; - PieChartData _data; - - set data(PieChartData value) { - if (_data == value) return; - _data = value; - // We must update layout to draw badges correctly! - markNeedsLayout(); - } - - PieChartData get targetData => _targetData; - PieChartData _targetData; - - set targetData(PieChartData value) { - if (_targetData == value) return; - _targetData = value; - super.updateBaseTouchData(_targetData.pieTouchData); - // We must update layout to draw badges correctly! - markNeedsLayout(); - } - - TextScaler get textScaler => _textScaler; - TextScaler _textScaler; - - set textScaler(TextScaler value) { - if (_textScaler == value) return; - _textScaler = value; - markNeedsPaint(); - } - - // We couldn't mock [size] property of this class, that's why we have this - @visibleForTesting - Size? mockTestSize; - - @visibleForTesting - PieChartPainter painter = PieChartPainter(); - - PaintHolder get paintHolder => - PaintHolder(data, targetData, textScaler); - - @override - void setupParentData(RenderBox child) { - if (child.parentData is! MultiChildLayoutParentData) { - child.parentData = MultiChildLayoutParentData(); - } - } - - @override - void performLayout() { - var child = firstChild; - size = computeDryLayout(constraints); - - final childConstraints = constraints.loosen(); - - var counter = 0; - final badgeOffsets = painter.getBadgeOffsets( - mockTestSize ?? size, - paintHolder, - ); - while (child != null) { - if (counter >= badgeOffsets.length) { - break; - } - child.layout(childConstraints, parentUsesSize: true); - final childParentData = child.parentData! as MultiChildLayoutParentData; - final sizeOffset = Offset(child.size.width / 2, child.size.height / 2); - childParentData.offset = badgeOffsets[counter]! - sizeOffset; - child = childParentData.nextSibling; - counter++; - } - } - - @override - bool hitTestChildren(BoxHitTestResult result, {required Offset position}) { - return defaultHitTestChildren(result, position: position); - } - - @override - void paint(PaintingContext context, Offset offset) { - final canvas = context.canvas - ..save() - ..translate(offset.dx, offset.dy); - painter.paint( - buildContext, - CanvasWrapper(canvas, mockTestSize ?? size), - paintHolder, - ); - canvas.restore(); - defaultPaint(context, offset); - } - - @override - PieTouchResponse getResponseAtLocation(Offset localPosition) { - final pieSection = painter.handleTouch( - localPosition, - mockTestSize ?? size, - paintHolder, - ); - return PieTouchResponse(pieSection); - } - - @override - void visitChildrenForSemantics(RenderObjectVisitor visitor) { - /// It produces an error when we change the sections list, Check this issue: - /// https://github.com/imaNNeo/fl_chart/issues/861 - /// - /// Below is the error message: - /// Updated layout information required for RenderSemanticsAnnotations#f3b96 NEEDS-LAYOUT NEEDS-PAINT to calculate semantics. - /// - /// I don't know how to solve this error. That's why we disabled semantics for now. - } -} diff --git a/lib/src/chart/radar_chart/radar_chart.dart b/lib/src/chart/radar_chart/radar_chart.dart deleted file mode 100644 index cab84a9f8f..0000000000 --- a/lib/src/chart/radar_chart/radar_chart.dart +++ /dev/null @@ -1,57 +0,0 @@ -import 'package:fl_chart/src/chart/radar_chart/radar_chart_data.dart'; -import 'package:fl_chart/src/chart/radar_chart/radar_chart_renderer.dart'; -import 'package:flutter/material.dart'; - -/// Renders a radar chart as a widget, using provided [RadarChartData]. -class RadarChart extends ImplicitlyAnimatedWidget { - /// [data] determines how the [RadarChart] should be look like, - /// when you make any change in the [RadarChart], it updates - /// new values with animation, and duration is [swapAnimationDuration]. - /// also you can change the [swapAnimationCurve] - /// which default is [Curves.linear]. - const RadarChart( - this.data, { - super.key, - Duration swapAnimationDuration = const Duration(milliseconds: 150), - Curve swapAnimationCurve = Curves.linear, - }) : super( - duration: swapAnimationDuration, - curve: swapAnimationCurve, - ); - - /// Determines how the [RadarChart] should be look like. - final RadarChartData data; - - @override - _RadarChartState createState() => _RadarChartState(); -} - -class _RadarChartState extends AnimatedWidgetBaseState { - /// we handle under the hood animations (implicit animations) via this tween, - /// it lerps between the old [RadarChartData] to the new one. - RadarChartDataTween? _radarChartDataTween; - - @override - Widget build(BuildContext context) { - final showingData = _getDate(); - - return RadarChartLeaf( - data: _radarChartDataTween!.evaluate(animation), - targetData: showingData, - ); - } - - RadarChartData _getDate() { - return widget.data; - } - - @override - void forEachTween(TweenVisitor visitor) { - _radarChartDataTween = visitor( - _radarChartDataTween, - widget.data, - (dynamic value) => - RadarChartDataTween(begin: value as RadarChartData, end: widget.data), - ) as RadarChartDataTween?; - } -} diff --git a/lib/src/chart/radar_chart/radar_chart_data.dart b/lib/src/chart/radar_chart/radar_chart_data.dart deleted file mode 100644 index d737b93498..0000000000 --- a/lib/src/chart/radar_chart/radar_chart_data.dart +++ /dev/null @@ -1,487 +0,0 @@ -// coverage:ignore-file -import 'dart:ui'; - -import 'package:equatable/equatable.dart'; -import 'package:fl_chart/fl_chart.dart'; -import 'package:fl_chart/src/chart/radar_chart/radar_extension.dart'; -import 'package:fl_chart/src/utils/lerp.dart'; -import 'package:flutter/material.dart'; - -typedef GetTitleByIndexFunction = RadarChartTitle Function( - int index, - double angle, -); - -enum RadarShape { - circle, - polygon, -} - -class RadarChartTitle { - const RadarChartTitle({ - required this.text, - this.angle = 0, - this.positionPercentageOffset, - }); - - /// [text] is used to draw titles outside the [RadarChart] - final String text; - - /// [angle] is used to rotate the title - final double angle; - - /// [positionPercentageOffset] is the place of showing title on the [RadarChart] - /// The higher the value of this field, the more titles move away from the chart. - /// The value of [positionPercentageOffset] takes precedence over the value of - /// [RadarChartData.titlePositionPercentageOffset], even if it is set. - final double? positionPercentageOffset; -} - -/// [RadarChart] needs this class to render itself. -/// -/// It holds data needed to draw a radar chart, -/// including radar dataSets, colors, ... -class RadarChartData extends BaseChartData with EquatableMixin { - /// [RadarChart] draws some [dataSets] in a radar-shaped chart. - /// it fills the radar area with [radarBackgroundColor] - /// and draws radar border with [radarBorderData] - /// then draws a grid over it, you can customize it using [gridBorderData]. - /// - /// it draws some titles based on the number of [dataSets] values. - /// the titles are shown near each radar grid or line. - /// for changing the titles you can modify the [getTitle] field. - /// and for styling the titles you can use [titleTextStyle]. - /// - /// it draws some ticks. and you can customize the number of ticks by modifying the [titleCount] - /// and style the ticks titles with [ticksTextStyle]. - /// for changing the ticks color and border width you can use [tickBorderData]. - /// - /// You can modify [radarTouchData] to customize touch behaviors and responses. - RadarChartData({ - @required List? dataSets, - Color? radarBackgroundColor, - BorderSide? radarBorderData, - RadarShape? radarShape, - this.getTitle, - this.titleTextStyle, - double? titlePositionPercentageOffset, - int? tickCount, - this.ticksTextStyle, - BorderSide? tickBorderData, - BorderSide? gridBorderData, - RadarTouchData? radarTouchData, - super.borderData, - }) : assert(dataSets != null && dataSets.hasEqualDataEntriesLength), - assert( - tickCount == null || tickCount >= 1, - "RadarChart need's at least 1 tick", - ), - assert( - titlePositionPercentageOffset == null || - titlePositionPercentageOffset >= 0 && - titlePositionPercentageOffset <= 1, - 'titlePositionPercentageOffset must be something between 0 and 1 ', - ), - dataSets = dataSets ?? const [], - radarBackgroundColor = radarBackgroundColor ?? Colors.transparent, - radarBorderData = radarBorderData ?? const BorderSide(width: 2), - radarShape = radarShape ?? RadarShape.circle, - radarTouchData = radarTouchData ?? RadarTouchData(), - titlePositionPercentageOffset = titlePositionPercentageOffset ?? 0.2, - tickCount = tickCount ?? 1, - tickBorderData = tickBorderData ?? const BorderSide(width: 2), - gridBorderData = gridBorderData ?? const BorderSide(width: 2), - super( - touchData: radarTouchData ?? RadarTouchData(), - ); - - /// [RadarChart] draw [dataSets] that each of them showing a list of [RadarEntry] - final List dataSets; - - /// [radarBackgroundColor] draw the background color of the [RadarChart] - final Color radarBackgroundColor; - - /// [radarBorderData] is used to draw [RadarChart] border - final BorderSide radarBorderData; - - /// [radarShape] is used to draw [RadarChart] border and background - final RadarShape radarShape; - - /// [getTitle] is used to draw titles outside the [RadarChart] - /// [getTitle] is type of [GetTitleByIndexFunction] so you should return a valid [RadarChartTitle] - /// for each [index] (we provide a default [angle] = index * 360 / titleCount) - /// - /// ```dart - /// getTitle: (index, angle) { - /// switch (index) { - /// case 0: - /// return RadarChartTitle(text: 'Mobile or Tablet', angle: angle); - /// case 2: - /// return RadarChartTitle(text: 'Desktop', angle: angle); - /// case 1: - /// return RadarChartTitle(text: 'TV', angle: angle); - /// default: - /// return const RadarChartTitle(text: ''); - /// } - /// } - /// ``` - final GetTitleByIndexFunction? getTitle; - - /// Defines style of showing [RadarChart] titles. - final TextStyle? titleTextStyle; - - /// the [titlePositionPercentageOffset] is the place of showing title on the [RadarChart] - /// The higher the value of this field, the more titles move away from the chart. - /// this field should be between 0 and 1, - /// if it is 0 the title will be drawn near the inside section, - /// if it is 1 the title will be drawn near the outside of section, - /// the default value is 0.2. - final double titlePositionPercentageOffset; - - /// Defines the number of ticks that should be paint in [RadarChart] - /// the default & minimum value of this field is 1. - final int tickCount; - - /// Defines style of showing [RadarChart] tick titles. - final TextStyle? ticksTextStyle; - - /// Defines style of showing [RadarChart] tick borders. - final BorderSide tickBorderData; - - /// Defines style of showing [RadarChart] grid borders. - final BorderSide gridBorderData; - - /// Handles touch behaviors and responses. - final RadarTouchData radarTouchData; - - /// [titleCount] we use this value to determine number of [RadarChart] grid or lines. - int get titleCount => dataSets[0].dataEntries.length; - - /// defines the maximum [RadarEntry] value in all [dataSets] - /// we use this value to calculate the maximum value of ticks. - RadarEntry get maxEntry { - var maximum = dataSets.first.dataEntries.first; - - for (final dataSet in dataSets) { - for (final entry in dataSet.dataEntries) { - if (entry.value > maximum.value) maximum = entry; - } - } - return maximum; - } - - /// defines the minimum [RadarEntry] value in all [dataSets] - /// we use this value to calculate the minimum value of ticks. - RadarEntry get minEntry { - var minimum = dataSets.first.dataEntries.first; - - for (final dataSet in dataSets) { - for (final entry in dataSet.dataEntries) { - if (entry.value < minimum.value) minimum = entry; - } - } - - return minimum; - } - - /// Copies current [RadarChartData] to a new [RadarChartData], - /// and replaces provided values. - RadarChartData copyWith({ - List? dataSets, - Color? radarBackgroundColor, - BorderSide? radarBorderData, - RadarShape? radarShape, - GetTitleByIndexFunction? getTitle, - TextStyle? titleTextStyle, - double? titlePositionPercentageOffset, - int? tickCount, - TextStyle? ticksTextStyle, - BorderSide? tickBorderData, - BorderSide? gridBorderData, - RadarTouchData? radarTouchData, - FlBorderData? borderData, - }) => - RadarChartData( - dataSets: dataSets ?? this.dataSets, - radarBackgroundColor: radarBackgroundColor ?? this.radarBackgroundColor, - radarBorderData: radarBorderData ?? this.radarBorderData, - radarShape: radarShape ?? this.radarShape, - getTitle: getTitle ?? this.getTitle, - titleTextStyle: titleTextStyle ?? this.titleTextStyle, - titlePositionPercentageOffset: - titlePositionPercentageOffset ?? this.titlePositionPercentageOffset, - tickCount: tickCount ?? this.tickCount, - ticksTextStyle: ticksTextStyle ?? this.ticksTextStyle, - tickBorderData: tickBorderData ?? this.tickBorderData, - gridBorderData: gridBorderData ?? this.gridBorderData, - radarTouchData: radarTouchData ?? this.radarTouchData, - borderData: borderData ?? this.borderData, - ); - - /// Lerps a [BaseChartData] based on [t] value, check [Tween.lerp]. - @override - RadarChartData lerp(BaseChartData a, BaseChartData b, double t) { - if (a is RadarChartData && b is RadarChartData) { - return RadarChartData( - dataSets: lerpRadarDataSetList(a.dataSets, b.dataSets, t), - radarBackgroundColor: - Color.lerp(a.radarBackgroundColor, b.radarBackgroundColor, t), - getTitle: b.getTitle, - titleTextStyle: TextStyle.lerp(a.titleTextStyle, b.titleTextStyle, t), - titlePositionPercentageOffset: lerpDouble( - a.titlePositionPercentageOffset, - b.titlePositionPercentageOffset, - t, - ), - tickCount: lerpInt(a.tickCount, b.tickCount, t), - ticksTextStyle: TextStyle.lerp(a.ticksTextStyle, b.ticksTextStyle, t), - gridBorderData: BorderSide.lerp(a.gridBorderData, b.gridBorderData, t), - radarBorderData: - BorderSide.lerp(a.radarBorderData, b.radarBorderData, t), - radarShape: b.radarShape, - tickBorderData: BorderSide.lerp(a.tickBorderData, b.tickBorderData, t), - borderData: FlBorderData.lerp(a.borderData, b.borderData, t), - radarTouchData: b.radarTouchData, - ); - } else { - throw Exception('Illegal State'); - } - } - - /// Used for equality check, see [EquatableMixin]. - @override - List get props => [ - borderData, - touchData, - dataSets, - radarBackgroundColor, - radarBorderData, - radarShape, - getTitle, - titleTextStyle, - titlePositionPercentageOffset, - tickCount, - ticksTextStyle, - tickBorderData, - gridBorderData, - radarTouchData, - ]; -} - -/// the data values for drawing [RadarChart] sections -class RadarDataSet with EquatableMixin { - /// [RadarChart] can contain multiple [RadarDataSet] And it shows them on top of each other. - /// each [RadarDataSet] has a set of [dataEntries] - /// and the [RadarChart] uses this [dataEntries] to draw the chart. - /// - /// it fill dataSets with [fillColor]. - /// - /// the [RadarDataSet] can have custom border. for changing border of [RadarDataSet] - /// you can modify the [borderColor] and [borderWidth]. - RadarDataSet({ - List? dataEntries, - Color? fillColor, - Color? borderColor, - double? borderWidth, - double? entryRadius, - }) : assert( - dataEntries == null || dataEntries.isEmpty || dataEntries.length >= 3, - 'Radar needs at least 3 RadarEntry', - ), - dataEntries = dataEntries ?? const [], - fillColor = fillColor ?? Colors.cyan.withOpacity(0.2), - borderColor = borderColor ?? Colors.cyan, - borderWidth = borderWidth ?? 2.0, - entryRadius = entryRadius ?? 5.0; - - /// each section or dataSets consists of a set of [dataEntries]. - final List dataEntries; - - /// defines the color that fills the [RadarDataSet]. - final Color fillColor; - - /// defines the border color of the [RadarDataSet]. - /// if [borderColor] is not defined it will replaced with [fillColor]. - final Color borderColor; - - /// defines the width of [RadarDataSet] border. - /// the default value of this field is 2.0 - final double borderWidth; - - /// defines the radius of each entry - /// the default value of this field is 5.0 - final double entryRadius; - - /// Copies current [RadarDataSet] to a new [RadarDataSet], - /// and replaces provided values. - RadarDataSet copyWith({ - List? dataEntries, - Color? fillColor, - Color? borderColor, - double? borderWidth, - double? entryRadius, - }) => - RadarDataSet( - dataEntries: dataEntries ?? this.dataEntries, - fillColor: fillColor ?? this.fillColor, - borderColor: borderColor ?? this.borderColor, - borderWidth: borderWidth ?? this.borderWidth, - entryRadius: entryRadius ?? this.entryRadius, - ); - - /// Lerps a [RadarDataSet] based on [t] value, check [Tween.lerp]. - static RadarDataSet lerp(RadarDataSet a, RadarDataSet b, double t) { - return RadarDataSet( - dataEntries: lerpRadarEntryList(a.dataEntries, b.dataEntries, t), - fillColor: Color.lerp(a.fillColor, b.fillColor, t), - borderColor: Color.lerp(a.borderColor, b.borderColor, t), - borderWidth: lerpDouble(a.borderWidth, b.borderWidth, t), - entryRadius: lerpDouble(a.entryRadius, b.entryRadius, t), - ); - } - - /// Used for equality check, see [EquatableMixin]. - @override - List get props => [ - dataEntries, - fillColor, - borderColor, - borderWidth, - entryRadius, - ]; -} - -/// holds the data about each entry or point in [RadarChart] -class RadarEntry with EquatableMixin { - /// [RadarChart] draws every point or entry with [RadarEntry] - const RadarEntry({required this.value}); - - /// [RadarChart] uses this field to render every point in chart. - final double value; - - /// Lerps a [RadarEntry] based on [t] value, check [Tween.lerp]. - RadarEntry copyWith({double? value}) => - RadarEntry(value: value ?? this.value); - - /// Lerps a [RadarDataSet] based on [t] value, check [Tween.lerp]. - static RadarEntry lerp(RadarEntry a, RadarEntry b, double t) { - return RadarEntry(value: lerpDouble(a.value, b.value, t)!); - } - - /// Used for equality check, see [EquatableMixin]. - @override - List get props => [value]; -} - -/// Holds data to handle touch events, and touch responses in the [RadarChart]. -/// -/// There is a touch flow, explained [here](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/handle_touches.md) -/// in a simple way, each chart's renderer captures the touch events, and passes the pointerEvent -/// to the painter, and gets touched spot, and wraps it into a concrete [RadarTouchResponse]. -class RadarTouchData extends FlTouchData - with EquatableMixin { - /// You can disable or enable the touch system using [enabled] flag, - /// - /// [touchCallback] notifies you about the happened touch/pointer events. - /// It gives you a [FlTouchEvent] which is the happened event such as [FlPointerHoverEvent], [FlTapUpEvent], ... - /// It also gives you a [RadarTouchResponse] which contains information - /// about the elements that has touched. - /// - /// Using [mouseCursorResolver] you can change the mouse cursor - /// based on the provided [FlTouchEvent] and [RadarTouchResponse] - RadarTouchData({ - bool? enabled, - BaseTouchCallback? touchCallback, - MouseCursorResolver? mouseCursorResolver, - Duration? longPressDuration, - double? touchSpotThreshold, - }) : touchSpotThreshold = touchSpotThreshold ?? 10, - super( - enabled ?? true, - touchCallback, - mouseCursorResolver, - longPressDuration, - ); - - /// we find the nearest spots on touched position based on this threshold - final double touchSpotThreshold; - - /// Used for equality check, see [EquatableMixin]. - @override - List get props => [ - enabled, - touchCallback, - mouseCursorResolver, - longPressDuration, - touchSpotThreshold, - ]; -} - -/// Holds information about touch response in the [RadarTouchResponse]. -/// -/// You can override [RadarTouchData.touchCallback] to handle touch events, -/// it gives you a [RadarTouchResponse] and you can do whatever you want. -class RadarTouchResponse extends BaseTouchResponse { - /// If touch happens, [RadarChart] processes it internally and passes out a [RadarTouchResponse] - /// that contains a [touchedSpot], it gives you information about the touched spot. - RadarTouchResponse(this.touchedSpot) : super(); - - /// touch happened on this spot. this spot has useful information about spot or entry - final RadarTouchedSpot? touchedSpot; - - /// Copies current [RadarTouchResponse] to a new [RadarTouchResponse], - /// and replaces provided values. - RadarTouchResponse copyWith({ - RadarTouchedSpot? touchedSpot, - }) { - return RadarTouchResponse( - touchedSpot ?? this.touchedSpot, - ); - } -} - -/// It gives you information about the touched spot. -class RadarTouchedSpot extends TouchedSpot with EquatableMixin { - /// When touch happens, a [RadarTouchedSpot] returns as a output, - /// it tells you where the touch happened. - /// [touchedDataSet], and [touchedDataSetIndex] tell you in which dataSet touch happened, - /// [touchedRadarEntry], and [touchedRadarEntryIndex] tell you in which entry touch happened, - /// You can also have the touched x and y in the chart as a [FlSpot] using [spot] value, - /// and you can have the local touch coordinates on the screen as a [Offset] using [offset] value. - RadarTouchedSpot( - this.touchedDataSet, - this.touchedDataSetIndex, - this.touchedRadarEntry, - this.touchedRadarEntryIndex, - FlSpot spot, - Offset offset, - ) : super(spot, offset); - final RadarDataSet touchedDataSet; - final int touchedDataSetIndex; - - final RadarEntry touchedRadarEntry; - final int touchedRadarEntryIndex; - - /// Used for equality check, see [EquatableMixin]. - @override - List get props => [ - spot, - offset, - touchedDataSet, - touchedDataSetIndex, - touchedRadarEntry, - touchedRadarEntryIndex, - ]; -} - -/// It lerps a [RadarChartData] to another [RadarChartData] (handles animation for updating values) -class RadarChartDataTween extends Tween { - RadarChartDataTween({ - required RadarChartData begin, - required RadarChartData end, - }) : super(begin: begin, end: end); - - /// Lerps a [RadarChartData] based on [t] value, check [Tween.lerp]. - @override - RadarChartData lerp(double t) => begin!.lerp(begin!, end!, t); -} diff --git a/lib/src/chart/radar_chart/radar_chart_painter.dart b/lib/src/chart/radar_chart/radar_chart_painter.dart deleted file mode 100644 index 3c2e5ac9e0..0000000000 --- a/lib/src/chart/radar_chart/radar_chart_painter.dart +++ /dev/null @@ -1,467 +0,0 @@ -import 'dart:math' show cos, min, pi, sin; - -import 'package:fl_chart/fl_chart.dart'; -import 'package:fl_chart/src/chart/base/base_chart/base_chart_painter.dart'; -import 'package:fl_chart/src/utils/canvas_wrapper.dart'; -import 'package:fl_chart/src/utils/utils.dart'; -import 'package:flutter/material.dart'; - -/// Paints [RadarChartData] in the canvas, it can be used in a [CustomPainter] -class RadarChartPainter extends BaseChartPainter { - /// Paints [dataList] into canvas, it is the animating [RadarChartData], - /// [targetData] is the animation's target and remains the same - /// during animation, then we should use it when we need to show - /// tooltips or something like that, because [dataList] is changing constantly. - /// - /// [textScale] used for scaling texts inside the chart, - /// parent can use [MediaQuery.textScaleFactor] to respect - /// the system's font size. - RadarChartPainter() : super() { - _backgroundPaint = Paint() - ..style = PaintingStyle.fill - ..isAntiAlias = true; - - _borderPaint = Paint()..style = PaintingStyle.stroke; - - _gridPaint = Paint()..style = PaintingStyle.stroke; - - _tickPaint = Paint()..style = PaintingStyle.stroke; - - _graphPaint = Paint(); - _graphBorderPaint = Paint(); - _graphPointPaint = Paint(); - _ticksTextPaint = TextPainter(); - _titleTextPaint = TextPainter(); - } - late Paint _borderPaint; - late Paint _backgroundPaint; - late Paint _gridPaint; - late Paint _tickPaint; - late Paint _graphPaint; - late Paint _graphBorderPaint; - late Paint _graphPointPaint; - - late TextPainter _ticksTextPaint; - late TextPainter _titleTextPaint; - - List? dataSetsPosition; - - /// Paints [RadarChartData] into the provided canvas. - @override - void paint( - BuildContext context, - CanvasWrapper canvasWrapper, - PaintHolder holder, - ) { - super.paint(context, canvasWrapper, holder); - final data = holder.data; - - if (data.dataSets.isEmpty) { - return; - } - - dataSetsPosition = calculateDataSetsPosition(canvasWrapper.size, holder); - - drawGrids(canvasWrapper, holder); - drawTicks(context, canvasWrapper, holder); - drawTitles(context, canvasWrapper, holder); - drawDataSets(canvasWrapper, holder); - } - - @visibleForTesting - double getDefaultChartCenterValue() { - return 0; - } - - double getChartCenterValue(RadarChartData data) { - final dataSetMaxValue = data.maxEntry.value; - final dataSetMinValue = data.minEntry.value; - final tickSpace = getSpaceBetweenTicks(data); - final centerValue = dataSetMinValue - tickSpace; - - return dataSetMaxValue == dataSetMinValue - ? getDefaultChartCenterValue() - : centerValue; - } - - @visibleForTesting - double getScaledPoint(RadarEntry point, double radius, RadarChartData data) { - final centerValue = getChartCenterValue(data); - final distanceFromPointToCenter = point.value - centerValue; - final distanceFromMaxToCenter = data.maxEntry.value - centerValue; - - if (distanceFromMaxToCenter == 0) { - return radius * distanceFromPointToCenter / 0.001; - } - - return radius * distanceFromPointToCenter / distanceFromMaxToCenter; - } - - @visibleForTesting - double getFirstTickValue(RadarChartData data) { - final defaultCenterValue = getDefaultChartCenterValue(); - final dataSetMaxValue = data.maxEntry.value; - final dataSetMinValue = data.minEntry.value; - - return dataSetMaxValue == dataSetMinValue - ? (dataSetMaxValue - defaultCenterValue) / (data.tickCount + 1) + - defaultCenterValue - : dataSetMinValue; - } - - @visibleForTesting - double getSpaceBetweenTicks(RadarChartData data) { - final defaultCenterValue = getDefaultChartCenterValue(); - final dataSetMaxValue = data.maxEntry.value; - final dataSetMinValue = data.minEntry.value; - final tickSpace = (dataSetMaxValue - dataSetMinValue) / data.tickCount; - final defaultTickSpace = - (dataSetMaxValue - defaultCenterValue) / (data.tickCount + 1); - - return dataSetMaxValue == dataSetMinValue ? defaultTickSpace : tickSpace; - } - - @visibleForTesting - void drawTicks( - BuildContext context, - CanvasWrapper canvasWrapper, - PaintHolder holder, - ) { - final data = holder.data; - final size = canvasWrapper.size; - - final centerX = radarCenterX(size); - final centerY = radarCenterY(size); - final centerOffset = Offset(centerX, centerY); - - /// controls Radar chart size - final radius = radarRadius(size); - - _backgroundPaint.color = data.radarBackgroundColor; - - _borderPaint - ..color = data.radarBorderData.color - ..strokeWidth = data.radarBorderData.width; - - if (data.radarShape == RadarShape.circle) { - /// draw radar background - canvasWrapper - ..drawCircle(centerOffset, radius, _backgroundPaint) - - /// draw radar border - ..drawCircle(centerOffset, radius, _borderPaint); - } else { - final path = - _generatePolygonPath(centerX, centerY, radius, data.titleCount); - - /// draw radar background - canvasWrapper - ..drawPath(path, _backgroundPaint) - - /// draw radar border - ..drawPath(path, _borderPaint); - } - - final tickSpace = getSpaceBetweenTicks(data); - final ticks = []; - var tickValue = getFirstTickValue(data); - - for (var i = 0; i <= data.tickCount; i++) { - ticks.add(tickValue); - tickValue += tickSpace; - } - - final tickDistance = radius / (ticks.length); - - _tickPaint - ..color = data.tickBorderData.color - ..strokeWidth = data.tickBorderData.width; - - /// draw radar ticks - ticks.sublist(0, ticks.length - 1).asMap().forEach( - (index, tick) { - final tickRadius = tickDistance * (index + 1); - if (data.radarShape == RadarShape.circle) { - canvasWrapper.drawCircle(centerOffset, tickRadius, _tickPaint); - } else { - canvasWrapper.drawPath( - _generatePolygonPath(centerX, centerY, tickRadius, data.titleCount), - _tickPaint, - ); - } - - _ticksTextPaint - ..text = TextSpan( - text: tick.toStringAsFixed(1), - style: Utils().getThemeAwareTextStyle(context, data.ticksTextStyle), - ) - ..textDirection = TextDirection.ltr - ..layout(maxWidth: size.width); - canvasWrapper.drawText( - _ticksTextPaint, - Offset(centerX + 5, centerY - tickRadius - _ticksTextPaint.height), - ); - }, - ); - } - - Path _generatePolygonPath( - double centerX, - double centerY, - double radius, - int count, - ) { - final path = Path()..moveTo(centerX, centerY - radius); - final angle = (2 * pi) / count; - for (var index = 0; index < count; index++) { - final xAngle = cos(angle * index - pi / 2); - final yAngle = sin(angle * index - pi / 2); - path.lineTo(centerX + radius * xAngle, centerY + radius * yAngle); - } - path.lineTo(centerX, centerY - radius); - return path; - } - - void drawGrids( - CanvasWrapper canvasWrapper, - PaintHolder holder, - ) { - final data = holder.data; - final size = canvasWrapper.size; - - final centerX = radarCenterX(size); - final centerY = radarCenterY(size); - final centerOffset = Offset(centerX, centerY); - - /// controls Radar chart size - final radius = radarRadius(size); - - final angle = (2 * pi) / data.titleCount; - - /// drawing grids - for (var index = 0; index < data.titleCount; index++) { - final endX = centerX + radius * cos(angle * index - pi / 2); - final endY = centerY + radius * sin(angle * index - pi / 2); - - final gridOffset = Offset(endX, endY); - - _gridPaint - ..color = data.gridBorderData.color - ..strokeWidth = data.gridBorderData.width; - canvasWrapper.drawLine(centerOffset, gridOffset, _gridPaint); - } - } - - @visibleForTesting - void drawTitles( - BuildContext context, - CanvasWrapper canvasWrapper, - PaintHolder holder, - ) { - final data = holder.data; - if (data.getTitle == null) return; - - final size = canvasWrapper.size; - - final centerX = radarCenterX(size); - final centerY = radarCenterY(size); - - /// controls Radar chart size - final radius = radarRadius(size); - - final diffAngle = (2 * pi) / data.titleCount; - - final style = Utils().getThemeAwareTextStyle(context, data.titleTextStyle); - - _titleTextPaint - ..textAlign = TextAlign.center - ..textDirection = TextDirection.ltr - ..textScaler = holder.textScaler; - - for (var index = 0; index < data.titleCount; index++) { - final baseTitleAngle = Utils().degrees(diffAngle * index); - final title = data.getTitle!(index, baseTitleAngle); - final span = TextSpan(text: title.text, style: style); - _titleTextPaint - ..text = span - ..layout(); - final angle = diffAngle * index - pi / 2; - final threshold = 1.0 + - (title.positionPercentageOffset ?? - data.titlePositionPercentageOffset); - final titleX = centerX + - cos(angle) * (radius * threshold + (_titleTextPaint.height / 2)); - final titleY = centerY + - sin(angle) * (radius * threshold + (_titleTextPaint.height / 2)); - - final rect = Rect.fromLTWH( - titleX, - titleY, - _titleTextPaint.width, - _titleTextPaint.height, - ); - final rectDrawOffset = Offset(rect.left, rect.top); - - final drawTitleDegrees = (angle * 180 / pi) + 90; - canvasWrapper.drawRotated( - size: rect.size, - rotationOffset: Offset( - -rect.width / 2, - -rect.height / 2, - ), - drawOffset: rectDrawOffset, - angle: drawTitleDegrees, - drawCallback: () { - canvasWrapper.drawText( - _titleTextPaint, - rect.topLeft, - title.angle - baseTitleAngle, - ); - }, - ); - } - } - - @visibleForTesting - void drawDataSets( - CanvasWrapper canvasWrapper, - PaintHolder holder, - ) { - final data = holder.data; - // we will use dataSetsPosition to draw the graphs - dataSetsPosition ??= calculateDataSetsPosition(canvasWrapper.size, holder); - dataSetsPosition!.asMap().forEach((index, dataSetOffset) { - final graph = data.dataSets[index]; - _graphPaint - ..color = graph.fillColor - ..style = PaintingStyle.fill; - - _graphBorderPaint - ..color = graph.borderColor - ..style = PaintingStyle.stroke - ..strokeWidth = graph.borderWidth; - - _graphPointPaint - ..color = _graphBorderPaint.color - ..style = PaintingStyle.fill; - - final path = Path(); - - final firstOffset = Offset( - dataSetOffset.entriesOffset.first.dx, - dataSetOffset.entriesOffset.first.dy, - ); - - path.moveTo(firstOffset.dx, firstOffset.dy); - - canvasWrapper.drawCircle( - firstOffset, - graph.entryRadius, - _graphPointPaint, - ); - dataSetOffset.entriesOffset.asMap().forEach((index, pointOffset) { - if (index == 0) return; - - path.lineTo(pointOffset.dx, pointOffset.dy); - - canvasWrapper.drawCircle( - pointOffset, - graph.entryRadius, - _graphPointPaint, - ); - }); - - path.close(); - canvasWrapper - ..drawPath(path, _graphPaint) - ..drawPath(path, _graphBorderPaint); - }); - } - - RadarTouchedSpot? handleTouch( - Offset touchedPoint, - Size viewSize, - PaintHolder holder, - ) { - final targetData = holder.targetData; - dataSetsPosition ??= calculateDataSetsPosition(viewSize, holder); - - for (var i = 0; i < dataSetsPosition!.length; i++) { - final dataSetPosition = dataSetsPosition![i]; - for (var j = 0; j < dataSetPosition.entriesOffset.length; j++) { - final entryOffset = dataSetPosition.entriesOffset[j]; - if ((touchedPoint.dx - entryOffset.dx).abs() <= - targetData.radarTouchData.touchSpotThreshold && - (touchedPoint.dy - entryOffset.dy).abs() <= - targetData.radarTouchData.touchSpotThreshold) { - return RadarTouchedSpot( - targetData.dataSets[i], - i, - targetData.dataSets[i].dataEntries[j], - j, - FlSpot(entryOffset.dx, entryOffset.dy), - entryOffset, - ); - } - } - } - return null; - } - - @visibleForTesting - double radarCenterY(Size size) => size.height / 2.0; - - @visibleForTesting - double radarCenterX(Size size) => size.width / 2.0; - - @visibleForTesting - double radarRadius(Size size) => - min(radarCenterX(size), radarCenterY(size)) * 0.8; - - @visibleForTesting - List calculateDataSetsPosition( - Size viewSize, - PaintHolder holder, - ) { - final data = holder.data; - final centerX = radarCenterX(viewSize); - final centerY = radarCenterY(viewSize); - final radius = radarRadius(viewSize); - - final angle = (2 * pi) / data.titleCount; - - final dataSetsPosition = List.filled( - data.dataSets.length, - const RadarDataSetsPosition([]), - ); - for (var i = 0; i < data.dataSets.length; i++) { - final dataSet = data.dataSets[i]; - final entriesOffset = - List.filled(dataSet.dataEntries.length, Offset.zero); - - for (var j = 0; j < dataSet.dataEntries.length; j++) { - final point = dataSet.dataEntries[j]; - - final xAngle = cos(angle * j - pi / 2); - final yAngle = sin(angle * j - pi / 2); - final scaledPoint = getScaledPoint(point, radius, data); - - final entryOffset = Offset( - centerX + scaledPoint * xAngle, - centerY + scaledPoint * yAngle, - ); - - entriesOffset[j] = entryOffset; - } - dataSetsPosition[i] = RadarDataSetsPosition(entriesOffset); - } - - return dataSetsPosition; - } -} - -class RadarDataSetsPosition { - const RadarDataSetsPosition(this.entriesOffset); - - final List entriesOffset; -} diff --git a/lib/src/chart/radar_chart/radar_chart_renderer.dart b/lib/src/chart/radar_chart/radar_chart_renderer.dart deleted file mode 100644 index d05d8094e4..0000000000 --- a/lib/src/chart/radar_chart/radar_chart_renderer.dart +++ /dev/null @@ -1,112 +0,0 @@ -import 'package:fl_chart/fl_chart.dart'; -import 'package:fl_chart/src/chart/base/base_chart/base_chart_painter.dart'; -import 'package:fl_chart/src/chart/base/base_chart/render_base_chart.dart'; -import 'package:fl_chart/src/chart/radar_chart/radar_chart_painter.dart'; -import 'package:fl_chart/src/utils/canvas_wrapper.dart'; -import 'package:flutter/cupertino.dart'; - -// coverage:ignore-start - -/// Low level RadarChart Widget. -class RadarChartLeaf extends LeafRenderObjectWidget { - const RadarChartLeaf({ - super.key, - required this.data, - required this.targetData, - }); - - final RadarChartData data; - final RadarChartData targetData; - - @override - RenderRadarChart createRenderObject(BuildContext context) => RenderRadarChart( - context, - data, - targetData, - MediaQuery.of(context).textScaler, - ); - - @override - void updateRenderObject(BuildContext context, RenderRadarChart renderObject) { - renderObject - ..data = data - ..targetData = targetData - ..textScaler = MediaQuery.of(context).textScaler - ..buildContext = context; - } -} -// coverage:ignore-end - -/// Renders our RadarChart, also handles hitTest. -class RenderRadarChart extends RenderBaseChart { - RenderRadarChart( - BuildContext context, - RadarChartData data, - RadarChartData targetData, - TextScaler textScaler, - ) : _data = data, - _targetData = targetData, - _textScaler = textScaler, - super(targetData.radarTouchData, context); - - RadarChartData get data => _data; - RadarChartData _data; - - set data(RadarChartData value) { - if (_data == value) return; - _data = value; - markNeedsPaint(); - } - - RadarChartData get targetData => _targetData; - RadarChartData _targetData; - - set targetData(RadarChartData value) { - if (_targetData == value) return; - _targetData = value; - super.updateBaseTouchData(_targetData.radarTouchData); - markNeedsPaint(); - } - - TextScaler get textScaler => _textScaler; - TextScaler _textScaler; - - set textScaler(TextScaler value) { - if (_textScaler == value) return; - _textScaler = value; - markNeedsPaint(); - } - - // We couldn't mock [size] property of this class, that's why we have this - @visibleForTesting - Size? mockTestSize; - - @visibleForTesting - RadarChartPainter painter = RadarChartPainter(); - - PaintHolder get paintHolder => - PaintHolder(data, targetData, textScaler); - - @override - void paint(PaintingContext context, Offset offset) { - final canvas = context.canvas - ..save() - ..translate(offset.dx, offset.dy); - painter.paint( - buildContext, - CanvasWrapper(canvas, mockTestSize ?? size), - paintHolder, - ); - canvas.restore(); - } - - @override - RadarTouchResponse getResponseAtLocation(Offset localPosition) { - final touchedSpot = painter.handleTouch( - localPosition, - mockTestSize ?? size, - paintHolder, - ); - return RadarTouchResponse(touchedSpot); - } -} diff --git a/lib/src/chart/radar_chart/radar_extension.dart b/lib/src/chart/radar_chart/radar_extension.dart deleted file mode 100644 index f0eb734108..0000000000 --- a/lib/src/chart/radar_chart/radar_extension.dart +++ /dev/null @@ -1,15 +0,0 @@ -import 'package:fl_chart/src/chart/radar_chart/radar_chart_data.dart'; - -/// Defines extensions on the [List] -extension DashedPath on List { - /// check all the [RadarDataSet] has a same [dataEntries] length - bool get hasEqualDataEntriesLength { - if (length == 0) return false; - - final firstDataEntriesLength = this[0].dataEntries.length; - - return every( - (element) => element.dataEntries.length == firstDataEntriesLength, - ); - } -} diff --git a/lib/src/chart/scatter_chart/scatter_chart.dart b/lib/src/chart/scatter_chart/scatter_chart.dart deleted file mode 100644 index 71caa6018e..0000000000 --- a/lib/src/chart/scatter_chart/scatter_chart.dart +++ /dev/null @@ -1,120 +0,0 @@ -import 'package:fl_chart/fl_chart.dart'; -import 'package:fl_chart/src/chart/base/axis_chart/axis_chart_scaffold_widget.dart'; -import 'package:fl_chart/src/chart/scatter_chart/scatter_chart_renderer.dart'; -import 'package:flutter/cupertino.dart'; - -/// Renders a pie chart as a widget, using provided [ScatterChartData]. -class ScatterChart extends ImplicitlyAnimatedWidget { - /// [data] determines how the [ScatterChart] should be look like, - /// when you make any change in the [ScatterChartData], it updates - /// new values with animation, and duration is [swapAnimationDuration]. - /// also you can change the [swapAnimationCurve] - /// which default is [Curves.linear]. - const ScatterChart( - this.data, { - this.chartRendererKey, - super.key, - Duration swapAnimationDuration = const Duration(milliseconds: 150), - Curve swapAnimationCurve = Curves.linear, - }) : super( - duration: swapAnimationDuration, - curve: swapAnimationCurve, - ); - - /// Determines how the [ScatterChart] should be look like. - final ScatterChartData data; - - /// We pass this key to our renderers which are responsible to - /// render the chart itself (without anything around the chart). - final Key? chartRendererKey; - - /// Creates a [_ScatterChartState] - @override - _ScatterChartState createState() => _ScatterChartState(); -} - -class _ScatterChartState extends AnimatedWidgetBaseState { - /// we handle under the hood animations (implicit animations) via this tween, - /// it lerps between the old [ScatterChartData] to the new one. - ScatterChartDataTween? _scatterChartDataTween; - - /// If [ScatterTouchData.handleBuiltInTouches] is true, we override the callback to handle touches internally, - /// but we need to keep the provided callback to notify it too. - BaseTouchCallback? _providedTouchCallback; - - List touchedSpots = []; - - @override - Widget build(BuildContext context) { - final showingData = _getData(); - - return AxisChartScaffoldWidget( - data: showingData, - chart: ScatterChartLeaf( - data: - _withTouchedIndicators(_scatterChartDataTween!.evaluate(animation)), - targetData: _withTouchedIndicators(showingData), - key: widget.chartRendererKey, - ), - ); - } - - ScatterChartData _withTouchedIndicators(ScatterChartData scatterChartData) { - if (!scatterChartData.scatterTouchData.enabled || - !scatterChartData.scatterTouchData.handleBuiltInTouches) { - return scatterChartData; - } - - return scatterChartData.copyWith( - showingTooltipIndicators: touchedSpots, - ); - } - - ScatterChartData _getData() { - final scatterTouchData = widget.data.scatterTouchData; - if (scatterTouchData.enabled && scatterTouchData.handleBuiltInTouches) { - _providedTouchCallback = scatterTouchData.touchCallback; - return widget.data.copyWith( - scatterTouchData: widget.data.scatterTouchData - .copyWith(touchCallback: _handleBuiltInTouch), - ); - } - return widget.data; - } - - void _handleBuiltInTouch( - FlTouchEvent event, - ScatterTouchResponse? touchResponse, - ) { - if (!mounted) { - return; - } - _providedTouchCallback?.call(event, touchResponse); - - final desiredTouch = event.isInterestedForInteractions; - - if (!desiredTouch || - touchResponse == null || - touchResponse.touchedSpot == null) { - setState(() { - touchedSpots = []; - }); - return; - } - setState(() { - touchedSpots = [touchResponse.touchedSpot!.spotIndex]; - }); - } - - @override - void forEachTween(TweenVisitor visitor) { - _scatterChartDataTween = visitor( - _scatterChartDataTween, - _getData(), - (dynamic value) => ScatterChartDataTween( - begin: value as ScatterChartData, - end: widget.data, - ), - ) as ScatterChartDataTween?; - } -} diff --git a/lib/src/chart/scatter_chart/scatter_chart_data.dart b/lib/src/chart/scatter_chart/scatter_chart_data.dart deleted file mode 100644 index 10ef2ded71..0000000000 --- a/lib/src/chart/scatter_chart/scatter_chart_data.dart +++ /dev/null @@ -1,701 +0,0 @@ -// coverage:ignore-file -import 'dart:ui'; - -import 'package:equatable/equatable.dart'; -import 'package:fl_chart/fl_chart.dart'; -import 'package:fl_chart/src/chart/scatter_chart/scatter_chart_helper.dart'; -import 'package:fl_chart/src/extensions/color_extension.dart'; -import 'package:fl_chart/src/utils/lerp.dart'; -import 'package:flutter/material.dart'; - -/// [ScatterChart] needs this class to render itself. -/// -/// It holds data needed to draw a scatter chart, -/// including background color, scatter spots, ... -class ScatterChartData extends AxisChartData with EquatableMixin { - /// [ScatterChart] draws some points in a square space, - /// points are defined by [scatterSpots], - /// - /// It draws some titles on left, top, right, bottom sides per each axis number, - /// you can modify [titlesData] to have your custom titles, - /// also you can define the axis title (one text per axis) for each side - /// using [axisTitleData], you can restrict the y axis using [minY] and [maxY] value, - /// and restrict x axis using [minX] and [maxX]. - /// - /// It draws a color as a background behind everything you can set it using [backgroundColor], - /// then a grid over it, you can customize it using [gridData], - /// and it draws 4 borders around your chart, you can customize it using [borderData]. - /// - /// You can modify [scatterTouchData] to customize touch behaviors and responses. - /// - /// You can show some tooltipIndicators (a popup with an information) - /// on top of each [ScatterChartData.scatterSpots] using [showingTooltipIndicators], - /// just put spot indices you want to show it on top of them. - /// - /// [clipData] forces the [LineChart] to draw lines inside the chart bounding box. - ScatterChartData({ - List? scatterSpots, - FlTitlesData? titlesData, - ScatterTouchData? scatterTouchData, - List? showingTooltipIndicators, - FlGridData? gridData, - super.borderData, - double? minX, - double? maxX, - super.baselineX, - double? minY, - double? maxY, - super.baselineY, - FlClipData? clipData, - super.backgroundColor, - ScatterLabelSettings? scatterLabelSettings, - }) : scatterSpots = scatterSpots ?? const [], - scatterTouchData = scatterTouchData ?? ScatterTouchData(), - showingTooltipIndicators = showingTooltipIndicators ?? const [], - scatterLabelSettings = scatterLabelSettings ?? ScatterLabelSettings(), - super( - gridData: gridData ?? const FlGridData(), - touchData: scatterTouchData ?? ScatterTouchData(), - titlesData: titlesData ?? const FlTitlesData(), - clipData: clipData ?? const FlClipData.none(), - minX: minX ?? - ScatterChartHelper.calculateMaxAxisValues( - scatterSpots ?? const [], - ).minX, - maxX: maxX ?? - ScatterChartHelper.calculateMaxAxisValues( - scatterSpots ?? const [], - ).maxX, - minY: minY ?? - ScatterChartHelper.calculateMaxAxisValues( - scatterSpots ?? const [], - ).minY, - maxY: maxY ?? - ScatterChartHelper.calculateMaxAxisValues( - scatterSpots ?? const [], - ).maxY, - ); - final List scatterSpots; - final ScatterTouchData scatterTouchData; - final List showingTooltipIndicators; - final ScatterLabelSettings scatterLabelSettings; - - /// Lerps a [ScatterChartData] based on [t] value, check [Tween.lerp]. - @override - ScatterChartData lerp(BaseChartData a, BaseChartData b, double t) { - if (a is ScatterChartData && b is ScatterChartData) { - return ScatterChartData( - scatterSpots: lerpScatterSpotList(a.scatterSpots, b.scatterSpots, t), - titlesData: FlTitlesData.lerp(a.titlesData, b.titlesData, t), - scatterTouchData: b.scatterTouchData, - showingTooltipIndicators: lerpIntList( - a.showingTooltipIndicators, - b.showingTooltipIndicators, - t, - ), - gridData: FlGridData.lerp(a.gridData, b.gridData, t), - borderData: FlBorderData.lerp(a.borderData, b.borderData, t), - minX: lerpDouble(a.minX, b.minX, t), - maxX: lerpDouble(a.maxX, b.maxX, t), - baselineX: lerpDouble(a.baselineX, b.baselineX, t), - minY: lerpDouble(a.minY, b.minY, t), - maxY: lerpDouble(a.maxY, b.maxY, t), - baselineY: lerpDouble(a.baselineY, b.baselineY, t), - clipData: b.clipData, - backgroundColor: Color.lerp(a.backgroundColor, b.backgroundColor, t), - scatterLabelSettings: ScatterLabelSettings.lerp( - a.scatterLabelSettings, - b.scatterLabelSettings, - t, - ), - ); - } else { - throw Exception('Illegal State'); - } - } - - /// Copies current [ScatterChartData] to a new [ScatterChartData], - /// and replaces provided values. - ScatterChartData copyWith({ - List? scatterSpots, - FlTitlesData? titlesData, - ScatterTouchData? scatterTouchData, - List? showingTooltipIndicators, - FlGridData? gridData, - FlBorderData? borderData, - double? minX, - double? maxX, - double? baselineX, - double? minY, - double? maxY, - double? baselineY, - FlClipData? clipData, - Color? backgroundColor, - ScatterLabelSettings? scatterLabelSettings, - }) { - return ScatterChartData( - scatterSpots: scatterSpots ?? this.scatterSpots, - titlesData: titlesData ?? this.titlesData, - scatterTouchData: scatterTouchData ?? this.scatterTouchData, - showingTooltipIndicators: - showingTooltipIndicators ?? this.showingTooltipIndicators, - gridData: gridData ?? this.gridData, - borderData: borderData ?? this.borderData, - minX: minX ?? this.minX, - maxX: maxX ?? this.maxX, - baselineX: baselineX ?? this.baselineX, - minY: minY ?? this.minY, - maxY: maxY ?? this.maxY, - baselineY: baselineY ?? this.baselineY, - clipData: clipData ?? this.clipData, - backgroundColor: backgroundColor ?? this.backgroundColor, - scatterLabelSettings: scatterLabelSettings ?? this.scatterLabelSettings, - ); - } - - /// Used for equality check, see [EquatableMixin]. - @override - List get props => [ - scatterSpots, - scatterTouchData, - showingTooltipIndicators, - gridData, - titlesData, - rangeAnnotations, - minX, - maxX, - baselineX, - minY, - maxY, - baselineY, - rangeAnnotations, - scatterLabelSettings, - clipData, - backgroundColor, - borderData, - touchData, - ]; -} - -/// Defines information about a spot in the [ScatterChart] -class ScatterSpot extends FlSpot with EquatableMixin { - /// You can change [show] value to show or hide the spot, - /// [x], and [y] defines the location of spot in the [ScatterChart], - /// [radius] defines the size of spot, and [color] defines the color of it. - ScatterSpot( - super.x, - super.y, { - bool? show, - double? radius, - Color? color, - }) : show = show ?? true, - radius = radius ?? 6, - color = color ?? - Colors.primaries[((x * y) % Colors.primaries.length).toInt()]; - - /// Determines show or hide the spot. - final bool show; - - /// Determines size of the spot. - final double radius; - - /// Determines color of the spot. - Color color; - - @override - ScatterSpot copyWith({ - double? x, - double? y, - bool? show, - double? radius, - Color? color, - }) { - return ScatterSpot( - x ?? this.x, - y ?? this.y, - show: show ?? this.show, - radius: radius ?? this.radius, - color: color ?? this.color, - ); - } - - /// Lerps a [ScatterSpot] based on [t] value, check [Tween.lerp]. - static ScatterSpot lerp(ScatterSpot a, ScatterSpot b, double t) { - return ScatterSpot( - lerpDouble(a.x, b.x, t)!, - lerpDouble(a.y, b.y, t)!, - show: b.show, - radius: lerpDouble(a.radius, b.radius, t), - color: Color.lerp(a.color, b.color, t), - ); - } - - /// Used for equality check, see [EquatableMixin]. - @override - List get props => [ - x, - y, - show, - radius, - color, - ]; -} - -/// Holds data to handle touch events, and touch responses in the [ScatterChart]. -/// -/// There is a touch flow, explained [here](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/handle_touches.md) -/// in a simple way, each chart's renderer captures the touch events, and passes the pointerEvent -/// to the painter, and gets touched spot, and wraps it into a concrete [ScatterTouchResponse]. -class ScatterTouchData extends FlTouchData - with EquatableMixin { - /// You can disable or enable the touch system using [enabled] flag, - /// - /// [touchCallback] notifies you about the happened touch/pointer events. - /// It gives you a [FlTouchEvent] which is the happened event such as [FlPointerHoverEvent], [FlTapUpEvent], ... - /// It also gives you a [ScatterTouchResponse] which contains information - /// about the elements that has touched. - /// - /// Using [mouseCursorResolver] you can change the mouse cursor - /// based on the provided [FlTouchEvent] and [ScatterTouchResponse] - /// - /// if [handleBuiltInTouches] is true, [ScatterChart] shows a tooltip popup on top of the spots if - /// touch occurs (or you can show it manually using, [ScatterChartData.showingTooltipIndicators]) - /// You can customize this tooltip using [touchTooltipData], - /// - /// If you need to have a distance threshold for handling touches, use [touchSpotThreshold]. - ScatterTouchData({ - bool? enabled, - BaseTouchCallback? touchCallback, - MouseCursorResolver? mouseCursorResolver, - Duration? longPressDuration, - ScatterTouchTooltipData? touchTooltipData, - double? touchSpotThreshold, - bool? handleBuiltInTouches, - }) : touchTooltipData = touchTooltipData ?? ScatterTouchTooltipData(), - touchSpotThreshold = touchSpotThreshold ?? 0, - handleBuiltInTouches = handleBuiltInTouches ?? true, - super( - enabled ?? true, - touchCallback, - mouseCursorResolver, - longPressDuration, - ); - - /// show a tooltip on touched spots - final ScatterTouchTooltipData touchTooltipData; - - /// we find the nearest spots on touched position based on this threshold - final double touchSpotThreshold; - - /// set this true if you want the built in touch handling - /// (show a tooltip bubble and an indicator on touched spots) - final bool handleBuiltInTouches; - - /// Copies current [ScatterTouchData] to a new [ScatterTouchData], - /// and replaces provided values. - ScatterTouchData copyWith({ - bool? enabled, - BaseTouchCallback? touchCallback, - MouseCursorResolver? mouseCursorResolver, - Duration? longPressDuration, - ScatterTouchTooltipData? touchTooltipData, - double? touchSpotThreshold, - bool? handleBuiltInTouches, - }) { - return ScatterTouchData( - enabled: enabled ?? this.enabled, - touchCallback: touchCallback ?? this.touchCallback, - mouseCursorResolver: mouseCursorResolver ?? this.mouseCursorResolver, - longPressDuration: longPressDuration ?? this.longPressDuration, - touchTooltipData: touchTooltipData ?? this.touchTooltipData, - handleBuiltInTouches: handleBuiltInTouches ?? this.handleBuiltInTouches, - touchSpotThreshold: touchSpotThreshold ?? this.touchSpotThreshold, - ); - } - - /// Used for equality check, see [EquatableMixin]. - @override - List get props => [ - enabled, - touchCallback, - mouseCursorResolver, - longPressDuration, - touchTooltipData, - touchSpotThreshold, - handleBuiltInTouches, - ]; -} - -/// [ScatterChart]'s touch callback. -typedef ScatterTouchCallback = void Function(ScatterTouchResponse); - -/// Holds information about touch response in the [ScatterChart]. -/// -/// You can override [ScatterTouchData.touchCallback] to handle touch events, -/// it gives you a [ScatterTouchResponse] and you can do whatever you want. -class ScatterTouchResponse extends BaseTouchResponse { - /// If touch happens, [ScatterChart] processes it internally and - /// passes out a [ScatterTouchResponse], it gives you information about the touched spot. - /// - /// [touchedSpot] tells you - /// in which spot (of [ScatterChartData.scatterSpots]) touch happened. - ScatterTouchResponse(this.touchedSpot) : super(); - final ScatterTouchedSpot? touchedSpot; - - /// Copies current [ScatterTouchResponse] to a new [ScatterTouchResponse], - /// and replaces provided values. - ScatterTouchResponse copyWith({ - ScatterTouchedSpot? touchedSpot, - }) { - return ScatterTouchResponse(touchedSpot ?? this.touchedSpot); - } -} - -/// Holds the touched spot data -class ScatterTouchedSpot with EquatableMixin { - /// [spot], and [spotIndex] tells you - /// in which spot (of [ScatterChartData.scatterSpots]) touch happened. - const ScatterTouchedSpot(this.spot, this.spotIndex); - - /// Touch happened on this spot - final ScatterSpot spot; - - /// Touch happened on this spot index - final int spotIndex; - - /// Used for equality check, see [EquatableMixin]. - @override - List get props => [ - spot, - spotIndex, - ]; - - /// Copies current [ScatterTouchedSpot] to a new [ScatterTouchedSpot], - /// and replaces provided values. - ScatterTouchedSpot copyWith({ - ScatterSpot? spot, - int? spotIndex, - }) { - return ScatterTouchedSpot(spot ?? this.spot, spotIndex ?? this.spotIndex); - } -} - -/// Holds representation data for showing tooltip popup on top of spots. -class ScatterTouchTooltipData with EquatableMixin { - /// if [ScatterTouchData.handleBuiltInTouches] is true, - /// [ScatterChart] shows a tooltip popup on top of spots automatically when touch happens, - /// otherwise you can show it manually using [ScatterChartData.showingTooltipIndicators]. - /// Tooltip shows on top of spots, with [tooltipBgColor] as a background color, - /// and you can set corner radius using [tooltipRoundedRadius]. - /// If you want to have a padding inside the tooltip, fill [tooltipPadding]. - /// Content of the tooltip will provide using [getTooltipItems] callback, you can override it - /// and pass your custom data to show in the tooltip. - /// You can restrict the tooltip's width using [maxContentWidth]. - /// Sometimes, [ScatterChart] shows the tooltip outside of the chart, - /// you can set [fitInsideHorizontally] true to force it to shift inside the chart horizontally, - /// also you can set [fitInsideVertically] true to force it to shift inside the chart vertically. - ScatterTouchTooltipData({ - Color? tooltipBgColor, - double? tooltipRoundedRadius, - EdgeInsets? tooltipPadding, - FLHorizontalAlignment? tooltipHorizontalAlignment, - double? tooltipHorizontalOffset, - double? maxContentWidth, - GetScatterTooltipItems? getTooltipItems, - bool? fitInsideHorizontally, - bool? fitInsideVertically, - double? rotateAngle, - BorderSide? tooltipBorder, - }) : tooltipBgColor = tooltipBgColor ?? Colors.blueGrey.darken(15), - tooltipRoundedRadius = tooltipRoundedRadius ?? 4, - tooltipPadding = tooltipPadding ?? - const EdgeInsets.symmetric(horizontal: 16, vertical: 8), - tooltipHorizontalAlignment = - tooltipHorizontalAlignment ?? FLHorizontalAlignment.center, - tooltipHorizontalOffset = tooltipHorizontalOffset ?? 0, - maxContentWidth = maxContentWidth ?? 120, - getTooltipItems = getTooltipItems ?? defaultScatterTooltipItem, - fitInsideHorizontally = fitInsideHorizontally ?? false, - fitInsideVertically = fitInsideVertically ?? false, - rotateAngle = rotateAngle ?? 0.0, - tooltipBorder = tooltipBorder ?? BorderSide.none, - super(); - - /// The tooltip background color. - final Color tooltipBgColor; - - /// Sets a rounded radius for the tooltip. - final double tooltipRoundedRadius; - - /// Applies a padding for showing contents inside the tooltip. - final EdgeInsets tooltipPadding; - - /// Controls showing tooltip on left side, right side or center aligned with spot, default is center - final FLHorizontalAlignment tooltipHorizontalAlignment; - - /// Applies horizontal offset for showing tooltip, default is zero. - final double tooltipHorizontalOffset; - - /// Restricts the tooltip's width. - final double maxContentWidth; - - /// Retrieves data for showing content inside the tooltip. - final GetScatterTooltipItems getTooltipItems; - - /// Forces the tooltip to shift horizontally inside the chart, if overflow happens. - final bool fitInsideHorizontally; - - /// Forces the tooltip to shift vertically inside the chart, if overflow happens. - final bool fitInsideVertically; - - /// Controls the rotation of the tooltip. - final double rotateAngle; - - /// The tooltip border color. - final BorderSide tooltipBorder; - - /// Used for equality check, see [EquatableMixin]. - @override - List get props => [ - tooltipBgColor, - tooltipRoundedRadius, - tooltipPadding, - tooltipHorizontalAlignment, - tooltipHorizontalOffset, - maxContentWidth, - getTooltipItems, - fitInsideHorizontally, - fitInsideVertically, - rotateAngle, - tooltipBorder, - ]; - - /// Copies current [ScatterTouchTooltipData] to a new [ScatterTouchTooltipData], - /// and replaces provided values. - ScatterTouchTooltipData copyWith({ - Color? tooltipBgColor, - double? tooltipRoundedRadius, - EdgeInsets? tooltipPadding, - FLHorizontalAlignment? tooltipHorizontalAlignment, - double? tooltipHorizontalOffset, - double? maxContentWidth, - GetScatterTooltipItems? getTooltipItems, - bool? fitInsideHorizontally, - bool? fitInsideVertically, - double? rotateAngle, - BorderSide? tooltipBorder, - }) { - return ScatterTouchTooltipData( - tooltipBgColor: tooltipBgColor ?? this.tooltipBgColor, - tooltipRoundedRadius: tooltipRoundedRadius ?? this.tooltipRoundedRadius, - tooltipPadding: tooltipPadding ?? this.tooltipPadding, - tooltipHorizontalAlignment: - tooltipHorizontalAlignment ?? this.tooltipHorizontalAlignment, - tooltipHorizontalOffset: - tooltipHorizontalOffset ?? this.tooltipHorizontalOffset, - maxContentWidth: maxContentWidth ?? this.maxContentWidth, - getTooltipItems: getTooltipItems ?? this.getTooltipItems, - fitInsideHorizontally: - fitInsideHorizontally ?? this.fitInsideHorizontally, - fitInsideVertically: fitInsideVertically ?? this.fitInsideVertically, - rotateAngle: rotateAngle ?? this.rotateAngle, - tooltipBorder: tooltipBorder ?? this.tooltipBorder, - ); - } -} - -/// Provides a [ScatterTooltipItem] for showing content inside the [ScatterTouchTooltipData]. -/// -/// You can override [ScatterTouchTooltipData.getTooltipItems], it gives you -/// [touchedSpot] that touch happened on, -/// then you should and pass your custom [ScatterTooltipItem] -/// to show it inside the tooltip popup. -typedef GetScatterTooltipItems = ScatterTooltipItem? Function( - ScatterSpot touchedSpot, -); - -/// Default implementation for [ScatterTouchTooltipData.getTooltipItems]. -ScatterTooltipItem? defaultScatterTooltipItem(ScatterSpot touchedSpot) { - final textStyle = TextStyle( - color: touchedSpot.color, - fontWeight: FontWeight.bold, - fontSize: 14, - ); - return ScatterTooltipItem( - '${touchedSpot.radius.toInt()}', - textStyle: textStyle, - ); -} - -/// Holds data of showing each item in the tooltip popup. -class ScatterTooltipItem with EquatableMixin { - /// Shows a [text] with [textStyle], [textDirection], and optional [children] in the tooltip popup, - /// [bottomMargin] is the bottom space from spot. - ScatterTooltipItem( - this.text, { - this.textStyle, - double? bottomMargin, - TextAlign? textAlign, - TextDirection? textDirection, - this.children, - }) : bottomMargin = bottomMargin ?? 8, - textAlign = textAlign ?? TextAlign.center, - textDirection = textDirection ?? TextDirection.ltr; - - /// Showing text. - final String text; - - /// Style of showing text. - final TextStyle? textStyle; - - /// Defines bottom space from spot. - final double bottomMargin; - - /// TextAlign of the showing content. - final TextAlign textAlign; - - /// Direction of showing text. - final TextDirection textDirection; - - /// List add further style and format to the text of the tooltip - final List? children; - - /// Used for equality check, see [EquatableMixin]. - @override - List get props => [ - text, - textStyle, - bottomMargin, - textAlign, - textDirection, - children, - ]; - - /// Copies current [ScatterTooltipItem] to a new [ScatterTooltipItem], - /// and replaces provided values. - ScatterTooltipItem copyWith({ - String? text, - TextStyle? textStyle, - double? bottomMargin, - TextAlign? textAlign, - TextDirection? textDirection, - List? children, - }) { - return ScatterTooltipItem( - text ?? this.text, - textStyle: textStyle ?? this.textStyle, - bottomMargin: bottomMargin ?? this.bottomMargin, - textAlign: textAlign ?? this.textAlign, - textDirection: textDirection ?? this.textDirection, - children: children ?? this.children, - ); - } -} - -/// It lerps a [ScatterChartData] to another [ScatterChartData] (handles animation for updating values) -class ScatterChartDataTween extends Tween { - ScatterChartDataTween({ - required ScatterChartData begin, - required ScatterChartData end, - }) : super(begin: begin, end: end); - - /// Lerps a [ScatterChartData] based on [t] value, check [Tween.lerp]. - @override - ScatterChartData lerp(double t) { - return begin!.lerp(begin!, end!, t); - } -} - -/// It gives you the index value as well as the spot and gets the text style of the label. -typedef GetLabelTextStyleFunction = TextStyle? Function( - int spotIndex, - ScatterSpot spot, -); - -/// It gives you the index value as well as the spot and returns the label of the spot. -typedef GetLabelFunction = String Function( - int spotIndex, - ScatterSpot spot, -); - -/// It gives you the default text style of the label for a spot. -TextStyle? getDefaultLabelTextStyleFunction( - int spotIndex, - ScatterSpot spot, -) { - return null; -} - -/// It gives you the default label of the spot. -String getDefaultLabelFunction( - int spotIndex, - ScatterSpot spot, -) { - return '${spot.radius}'; -} - -/// Defines information about the labels in the [ScatterChart] -class ScatterLabelSettings with EquatableMixin { - /// You can change [showLabel] value to show or hide the label, - /// [textStyle] defines the style of label in the [ScatterChart]. - ScatterLabelSettings({ - bool? showLabel, - GetLabelTextStyleFunction? getLabelTextStyleFunction, - GetLabelFunction? getLabelFunction, - TextDirection? textDirection, - }) : showLabel = showLabel ?? false, - getLabelTextStyleFunction = - getLabelTextStyleFunction ?? getDefaultLabelTextStyleFunction, - getLabelFunction = getLabelFunction ?? getDefaultLabelFunction, - textDirection = textDirection ?? TextDirection.ltr; - - /// Determines whether to show or hide the labels. - final bool showLabel; - - /// This function gives you the index value of the spot in the list and returns the text style. - final GetLabelTextStyleFunction getLabelTextStyleFunction; - - /// This function gives you the index value of the spot in the list and returns the label. - final GetLabelFunction getLabelFunction; - - /// Determines the direction of the text for the labels. - final TextDirection textDirection; - - ScatterLabelSettings copyWith({ - bool? showLabel, - GetLabelTextStyleFunction? getLabelTextStyleFunction, - GetLabelFunction? getLabelFunction, - TextDirection? textDirection, - }) { - return ScatterLabelSettings( - showLabel: showLabel ?? this.showLabel, - getLabelTextStyleFunction: - getLabelTextStyleFunction ?? this.getLabelTextStyleFunction, - getLabelFunction: getLabelFunction ?? this.getLabelFunction, - textDirection: textDirection ?? this.textDirection, - ); - } - - /// Lerps a [ScatterLabelSettings] based on [t] value, check [Tween.lerp]. - static ScatterLabelSettings lerp( - ScatterLabelSettings a, - ScatterLabelSettings b, - double t, - ) { - return ScatterLabelSettings( - showLabel: b.showLabel, - getLabelTextStyleFunction: b.getLabelTextStyleFunction, - getLabelFunction: b.getLabelFunction, - textDirection: b.textDirection, - ); - } - - /// Used for equality check, see [EquatableMixin]. - @override - List get props => [ - showLabel, - getLabelTextStyleFunction, - getLabelFunction, - textDirection, - ]; -} diff --git a/lib/src/chart/scatter_chart/scatter_chart_helper.dart b/lib/src/chart/scatter_chart/scatter_chart_helper.dart deleted file mode 100644 index abec8a3f6e..0000000000 --- a/lib/src/chart/scatter_chart/scatter_chart_helper.dart +++ /dev/null @@ -1,90 +0,0 @@ -import 'package:equatable/equatable.dart'; -import 'package:fl_chart/src/chart/scatter_chart/scatter_chart_data.dart'; -import 'package:fl_chart/src/utils/list_wrapper.dart'; - -/// Contains anything that helps ScatterChart works -class ScatterChartHelper { - /// Contains List of cached results, base on [List] - /// - /// We use it to prevent redundant calculations - static final Map, ScatterChartMinMaxAxisValues> - _cachedResults = {}; - - /// Calculates minX, maxX, minY, and maxY based on [scatterSpots], - /// returns cached values, to prevent redundant calculations. - static ScatterChartMinMaxAxisValues calculateMaxAxisValues( - List scatterSpots, - ) { - if (scatterSpots.isEmpty) { - return ScatterChartMinMaxAxisValues(0, 0, 0, 0); - } - - final listWrapper = scatterSpots.toWrapperClass(); - - if (_cachedResults.containsKey(listWrapper)) { - return _cachedResults[listWrapper]!.copyWith(readFromCache: true); - } - - var minX = scatterSpots[0].x; - var maxX = scatterSpots[0].x; - var minY = scatterSpots[0].y; - var maxY = scatterSpots[0].y; - for (var j = 0; j < scatterSpots.length; j++) { - final spot = scatterSpots[j]; - if (spot.x > maxX) { - maxX = spot.x; - } - - if (spot.x < minX) { - minX = spot.x; - } - - if (spot.y > maxY) { - maxY = spot.y; - } - - if (spot.y < minY) { - minY = spot.y; - } - } - - final result = ScatterChartMinMaxAxisValues(minX, maxX, minY, maxY); - _cachedResults[listWrapper] = result; - return result; - } -} - -/// Holds minX, maxX, minY, and maxY for use in [ScatterChartData] -class ScatterChartMinMaxAxisValues with EquatableMixin { - ScatterChartMinMaxAxisValues( - this.minX, - this.maxX, - this.minY, - this.maxY, { - this.readFromCache = false, - }); - final double minX; - final double maxX; - final double minY; - final double maxY; - final bool readFromCache; - - @override - List get props => [minX, maxX, minY, maxY, readFromCache]; - - ScatterChartMinMaxAxisValues copyWith({ - double? minX, - double? maxX, - double? minY, - double? maxY, - bool? readFromCache, - }) { - return ScatterChartMinMaxAxisValues( - minX ?? this.minX, - maxX ?? this.maxX, - minY ?? this.minY, - maxY ?? this.maxY, - readFromCache: readFromCache ?? this.readFromCache, - ); - } -} diff --git a/lib/src/chart/scatter_chart/scatter_chart_painter.dart b/lib/src/chart/scatter_chart/scatter_chart_painter.dart deleted file mode 100644 index 773ceea7a2..0000000000 --- a/lib/src/chart/scatter_chart/scatter_chart_painter.dart +++ /dev/null @@ -1,390 +0,0 @@ -import 'package:fl_chart/fl_chart.dart'; -import 'package:fl_chart/src/chart/base/axis_chart/axis_chart_painter.dart'; -import 'package:fl_chart/src/chart/base/base_chart/base_chart_painter.dart'; -import 'package:fl_chart/src/utils/canvas_wrapper.dart'; -import 'package:fl_chart/src/utils/utils.dart'; -import 'package:flutter/material.dart'; - -/// Paints [ScatterChartData] in the canvas, it can be used in a [CustomPainter] -class ScatterChartPainter extends AxisChartPainter { - /// Paints [dataList] into canvas, it is the animating [ScatterChartData], - /// [targetData] is the animation's target and remains the same - /// during animation, then we should use it when we need to show - /// tooltips or something like that, because [dataList] is changing constantly. - /// - /// [textScale] used for scaling texts inside the chart, - /// parent can use [MediaQuery.textScaleFactor] to respect - /// the system's font size. - ScatterChartPainter() : super() { - _spotsPaint = Paint()..style = PaintingStyle.fill; - - _bgTouchTooltipPaint = Paint() - ..style = PaintingStyle.fill - ..color = Colors.white; - - _borderTouchTooltipPaint = Paint() - ..style = PaintingStyle.stroke - ..color = Colors.transparent - ..strokeWidth = 1.0; - } - - /// [_spotsPaint] is responsible to draw scatter spots - late Paint _spotsPaint; - late Paint _bgTouchTooltipPaint; - late Paint _borderTouchTooltipPaint; - - /// Paints [ScatterChartData] into the provided canvas. - @override - void paint( - BuildContext context, - CanvasWrapper canvasWrapper, - PaintHolder holder, - ) { - super.paint(context, canvasWrapper, holder); - drawSpots(context, canvasWrapper, holder); - drawTouchTooltips(context, canvasWrapper, holder); - } - - @visibleForTesting - void drawSpots( - BuildContext context, - CanvasWrapper canvasWrapper, - PaintHolder holder, - ) { - final data = holder.data; - final viewSize = canvasWrapper.size; - final clip = data.clipData; - final border = data.borderData.show ? data.borderData.border : null; - - if (data.clipData.any) { - canvasWrapper.saveLayer( - Rect.fromLTRB( - 0, - 0, - canvasWrapper.size.width, - canvasWrapper.size.height, - ), - Paint(), - ); - - var left = 0.0; - var top = 0.0; - var right = viewSize.width; - var bottom = viewSize.height; - - if (clip.left) { - final borderWidth = border?.left.width ?? 0; - left = borderWidth / 2; - } - if (clip.top) { - final borderWidth = border?.top.width ?? 0; - top = borderWidth / 2; - } - if (clip.right) { - final borderWidth = border?.right.width ?? 0; - right = viewSize.width - (borderWidth / 2); - } - if (clip.bottom) { - final borderWidth = border?.bottom.width ?? 0; - bottom = viewSize.height - (borderWidth / 2); - } - - canvasWrapper.clipRect(Rect.fromLTRB(left, top, right, bottom)); - } - - final sortedSpots = data.scatterSpots.toList() - ..sort((ScatterSpot a, ScatterSpot b) => b.radius.compareTo(a.radius)); - - for (final scatterSpot in sortedSpots) { - if (!scatterSpot.show) { - continue; - } - final pixelX = getPixelX(scatterSpot.x, viewSize, holder); - final pixelY = getPixelY(scatterSpot.y, viewSize, holder); - - _spotsPaint.color = scatterSpot.color; - - canvasWrapper.drawCircle( - Offset(pixelX, pixelY), - scatterSpot.radius, - _spotsPaint, - ); - } - - if (data.scatterLabelSettings.showLabel) { - for (var i = 0; i < data.scatterSpots.length; i++) { - final scatterSpot = data.scatterSpots[i]; - final spotIndex = i; - - final label = - data.scatterLabelSettings.getLabelFunction(spotIndex, scatterSpot); - - if (label.isEmpty || !scatterSpot.show) { - continue; - } - - final span = TextSpan( - text: label, - style: Utils().getThemeAwareTextStyle( - context, - data.scatterLabelSettings.getLabelTextStyleFunction( - spotIndex, - scatterSpot, - ), - ), - ); - - final tp = TextPainter( - text: span, - textAlign: TextAlign.center, - textDirection: holder.data.scatterLabelSettings.textDirection, - textScaler: holder.textScaler, - )..layout(maxWidth: viewSize.width); - - final pixelX = getPixelX(scatterSpot.x, viewSize, holder); - final pixelY = getPixelY(scatterSpot.y, viewSize, holder); - - double newPixelY; - - /// To ensure the label is centered horizontally with respect to the spot. - final newPixelX = pixelX - tp.width / 2; - - final centerChartY = viewSize.height / 2; - - /// if the spot is in the lower half of the chart, then draw the label either in the center or above the spot, - /// if the spot is in upper half of the chart, then draw the label either in the center or below the spot. - if (pixelY > centerChartY) { - /// if either the height or the width of the spot is greater than the radius of the spot, then draw the label above the bubble, - /// else draw the label inside the bubble. - final off = (scatterSpot.radius * 1.5 < tp.height || - scatterSpot.radius * 1.5 < tp.width) - ? scatterSpot.radius + tp.height - : tp.height / 2; - - newPixelY = pixelY - off; - } else { - /// if either the height or the width of the spot is greater than the radius of the spot, then draw the label below the bubble, - /// else draw the label inside the bubble. - final off = (scatterSpot.radius * 1.5 < tp.height || - scatterSpot.radius * 1.5 < tp.width) - ? scatterSpot.radius - : -tp.height / 2; - newPixelY = pixelY + off; - } - - canvasWrapper.drawText( - tp, - Offset(newPixelX, newPixelY), - ); - } - } - - if (data.clipData.any) { - canvasWrapper.restore(); - } - } - - @visibleForTesting - void drawTouchTooltips( - BuildContext context, - CanvasWrapper canvasWrapper, - PaintHolder holder, - ) { - final targetData = holder.targetData; - for (var i = 0; i < targetData.scatterSpots.length; i++) { - if (!targetData.showingTooltipIndicators.contains(i)) { - continue; - } - - final scatterSpot = targetData.scatterSpots[i]; - drawTouchTooltip( - context, - canvasWrapper, - targetData.scatterTouchData.touchTooltipData, - scatterSpot, - holder, - ); - } - } - - @visibleForTesting - void drawTouchTooltip( - BuildContext context, - CanvasWrapper canvasWrapper, - ScatterTouchTooltipData tooltipData, - ScatterSpot showOnSpot, - PaintHolder holder, - ) { - final viewSize = canvasWrapper.size; - - final tooltipItem = tooltipData.getTooltipItems(showOnSpot); - - if (tooltipItem == null) { - return; - } - - final span = TextSpan( - style: Utils().getThemeAwareTextStyle(context, tooltipItem.textStyle), - text: tooltipItem.text, - children: tooltipItem.children, - ); - - final drawingTextPainter = TextPainter( - text: span, - textAlign: tooltipItem.textAlign, - textDirection: tooltipItem.textDirection, - textScaler: holder.textScaler, - )..layout(maxWidth: tooltipData.maxContentWidth); - - final width = drawingTextPainter.width; - final height = drawingTextPainter.height; - - /// if we have multiple bar lines, - /// there are more than one FlCandidate on touch area, - /// we should get the most top FlSpot Offset to draw the tooltip on top of it - final mostTopOffset = Offset( - getPixelX(showOnSpot.x, viewSize, holder), - getPixelY(showOnSpot.y, viewSize, holder), - ); - - final tooltipWidth = width + tooltipData.tooltipPadding.horizontal; - final tooltipHeight = height + tooltipData.tooltipPadding.vertical; - - final tooltipLeftPosition = getTooltipLeft( - mostTopOffset.dx, - tooltipWidth, - tooltipData.tooltipHorizontalAlignment, - tooltipData.tooltipHorizontalOffset, - ); - - /// draw the background rect with rounded radius - var rect = Rect.fromLTWH( - tooltipLeftPosition, - mostTopOffset.dy - - tooltipHeight - - showOnSpot.radius - - tooltipItem.bottomMargin, - tooltipWidth, - tooltipHeight, - ); - - if (tooltipData.fitInsideHorizontally) { - if (rect.left < 0) { - final shiftAmount = 0 - rect.left; - rect = Rect.fromLTRB( - rect.left + shiftAmount, - rect.top, - rect.right + shiftAmount, - rect.bottom, - ); - } - - if (rect.right > viewSize.width) { - final shiftAmount = rect.right - viewSize.width; - rect = Rect.fromLTRB( - rect.left - shiftAmount, - rect.top, - rect.right - shiftAmount, - rect.bottom, - ); - } - } - - if (tooltipData.fitInsideVertically) { - if (rect.top < 0) { - final shiftAmount = 0 - rect.top; - rect = Rect.fromLTRB( - rect.left, - rect.top + shiftAmount, - rect.right, - rect.bottom + shiftAmount, - ); - } - - if (rect.bottom > viewSize.height) { - final shiftAmount = rect.bottom - viewSize.height; - rect = Rect.fromLTRB( - rect.left, - rect.top - shiftAmount, - rect.right, - rect.bottom - shiftAmount, - ); - } - } - - final radius = Radius.circular(tooltipData.tooltipRoundedRadius); - final roundedRect = RRect.fromRectAndCorners( - rect, - topLeft: radius, - topRight: radius, - bottomLeft: radius, - bottomRight: radius, - ); - _bgTouchTooltipPaint.color = tooltipData.tooltipBgColor; - - final rotateAngle = tooltipData.rotateAngle; - final rectRotationOffset = - Offset(0, Utils().calculateRotationOffset(rect.size, rotateAngle).dy); - final rectDrawOffset = Offset(roundedRect.left, roundedRect.top); - - final textRotationOffset = - Utils().calculateRotationOffset(drawingTextPainter.size, rotateAngle); - - final drawOffset = Offset( - rect.center.dx - (drawingTextPainter.width / 2), - rect.topCenter.dy + - tooltipData.tooltipPadding.top - - textRotationOffset.dy + - rectRotationOffset.dy, - ); - - if (tooltipData.tooltipBorder != BorderSide.none) { - _borderTouchTooltipPaint - ..color = tooltipData.tooltipBorder.color - ..strokeWidth = tooltipData.tooltipBorder.width; - } - - canvasWrapper.drawRotated( - size: rect.size, - rotationOffset: rectRotationOffset, - drawOffset: rectDrawOffset, - angle: rotateAngle, - drawCallback: () { - canvasWrapper - ..drawRRect(roundedRect, _bgTouchTooltipPaint) - ..drawRRect(roundedRect, _borderTouchTooltipPaint) - ..drawText(drawingTextPainter, drawOffset); - }, - ); - } - - /// Makes a [ScatterTouchedSpot] based on the provided [localPosition] - /// - /// Processes [localPosition] and checks - /// the elements of the chart that are near the offset, - /// then makes a [ScatterTouchedSpot] from the elements that has been touched. - /// - /// Returns null if finds nothing! - ScatterTouchedSpot? handleTouch( - Offset localPosition, - Size viewSize, - PaintHolder holder, - ) { - final data = holder.data; - - for (var i = 0; i < data.scatterSpots.length; i++) { - final spot = data.scatterSpots[i]; - - final spotPixelX = getPixelX(spot.x, viewSize, holder); - final spotPixelY = getPixelY(spot.y, viewSize, holder); - - final distance = - (localPosition - Offset(spotPixelX, spotPixelY)).distance; - - if (distance < spot.radius + data.scatterTouchData.touchSpotThreshold) { - return ScatterTouchedSpot(spot, i); - } - } - return null; - } -} diff --git a/lib/src/chart/scatter_chart/scatter_chart_renderer.dart b/lib/src/chart/scatter_chart/scatter_chart_renderer.dart deleted file mode 100644 index e4a9257434..0000000000 --- a/lib/src/chart/scatter_chart/scatter_chart_renderer.dart +++ /dev/null @@ -1,116 +0,0 @@ -import 'package:fl_chart/fl_chart.dart'; -import 'package:fl_chart/src/chart/base/base_chart/base_chart_painter.dart'; -import 'package:fl_chart/src/chart/base/base_chart/render_base_chart.dart'; -import 'package:fl_chart/src/chart/scatter_chart/scatter_chart_painter.dart'; -import 'package:fl_chart/src/utils/canvas_wrapper.dart'; -import 'package:flutter/cupertino.dart'; - -// coverage:ignore-start - -/// Low level ScatterChart Widget. -class ScatterChartLeaf extends LeafRenderObjectWidget { - const ScatterChartLeaf({ - super.key, - required this.data, - required this.targetData, - }); - - final ScatterChartData data; - final ScatterChartData targetData; - - @override - RenderScatterChart createRenderObject(BuildContext context) => - RenderScatterChart( - context, - data, - targetData, - MediaQuery.of(context).textScaler, - ); - - @override - void updateRenderObject( - BuildContext context, - RenderScatterChart renderObject, - ) { - renderObject - ..data = data - ..targetData = targetData - ..textScaler = MediaQuery.of(context).textScaler - ..buildContext = context; - } -} -// coverage:ignore-end - -/// Renders our ScatterChart, also handles hitTest. -class RenderScatterChart extends RenderBaseChart { - RenderScatterChart( - BuildContext context, - ScatterChartData data, - ScatterChartData targetData, - TextScaler textScaler, - ) : _data = data, - _targetData = targetData, - _textScaler = textScaler, - super(targetData.scatterTouchData, context); - - ScatterChartData get data => _data; - ScatterChartData _data; - - set data(ScatterChartData value) { - if (_data == value) return; - _data = value; - markNeedsPaint(); - } - - ScatterChartData get targetData => _targetData; - ScatterChartData _targetData; - - set targetData(ScatterChartData value) { - if (_targetData == value) return; - _targetData = value; - super.updateBaseTouchData(_targetData.scatterTouchData); - markNeedsPaint(); - } - - TextScaler get textScaler => _textScaler; - TextScaler _textScaler; - - set textScaler(TextScaler value) { - if (_textScaler == value) return; - _textScaler = value; - markNeedsPaint(); - } - - // We couldn't mock [size] property of this class, that's why we have this - @visibleForTesting - Size? mockTestSize; - - @visibleForTesting - ScatterChartPainter painter = ScatterChartPainter(); - - PaintHolder get paintHolder => - PaintHolder(data, targetData, textScaler); - - @override - void paint(PaintingContext context, Offset offset) { - final canvas = context.canvas - ..save() - ..translate(offset.dx, offset.dy); - painter.paint( - buildContext, - CanvasWrapper(canvas, mockTestSize ?? size), - paintHolder, - ); - canvas.restore(); - } - - @override - ScatterTouchResponse getResponseAtLocation(Offset localPosition) { - final touchedSpot = painter.handleTouch( - localPosition, - mockTestSize ?? size, - paintHolder, - ); - return ScatterTouchResponse(touchedSpot); - } -} diff --git a/lib/src/extensions/bar_chart_data_extension.dart b/lib/src/extensions/bar_chart_data_extension.dart deleted file mode 100644 index e381c6d896..0000000000 --- a/lib/src/extensions/bar_chart_data_extension.dart +++ /dev/null @@ -1,100 +0,0 @@ -import 'package:fl_chart/src/chart/bar_chart/bar_chart_data.dart'; - -extension BarChartDataExtension on BarChartData { - List calculateGroupsX(double viewWidth) { - assert(barGroups.isNotEmpty); - final groupsX = List.filled(barGroups.length, 0); - - var sumWidth = - barGroups.map((group) => group.width).reduce((a, b) => a + b); - final spaceAvailable = viewWidth - sumWidth; - - void spaceEvenly() { - final eachSpace = spaceAvailable / (barGroups.length + 1); - var tempX = 0.0; - barGroups.asMap().forEach((i, group) { - tempX += eachSpace; - tempX += group.width / 2; - groupsX[i] = tempX; - tempX += group.width / 2; - }); - } - - switch (alignment) { - case BarChartAlignment.start: - var tempX = 0.0; - for (var i = 0; i < barGroups.length; i++) { - final group = barGroups[i]; - groupsX[i] = tempX + group.width / 2; - - final groupSpace = i == barGroups.length - 1 ? 0 : groupsSpace; - tempX += group.width + groupSpace; - } - if (tempX > viewWidth) { - spaceEvenly(); - } - - case BarChartAlignment.end: - sumWidth += groupsSpace * (barGroups.length - 1); - final horizontalMargin = viewWidth - sumWidth; - - var tempX = 0.0; - for (var i = 0; i < barGroups.length; i++) { - final group = barGroups[i]; - groupsX[i] = horizontalMargin + tempX + group.width / 2; - - final groupSpace = i == barGroups.length - 1 ? 0 : groupsSpace; - tempX += group.width + groupSpace; - } - if (tempX > viewWidth) { - spaceEvenly(); - } - - case BarChartAlignment.center: - sumWidth += groupsSpace * (barGroups.length - 1); - final horizontalMargin = (viewWidth - sumWidth) / 2; - - var tempX = 0.0; - for (var i = 0; i < barGroups.length; i++) { - final group = barGroups[i]; - groupsX[i] = horizontalMargin + tempX + group.width / 2; - - final groupSpace = i == barGroups.length - 1 ? 0 : groupsSpace; - tempX += group.width + groupSpace; - } - if (tempX > viewWidth) { - spaceEvenly(); - } - - case BarChartAlignment.spaceBetween: - final eachSpace = spaceAvailable / (barGroups.length - 1); - - var tempX = 0.0; - barGroups.asMap().forEach((index, group) { - tempX += group.width / 2; - if (index != 0) { - tempX += eachSpace; - } - groupsX[index] = tempX; - tempX += group.width / 2; - }); - - case BarChartAlignment.spaceAround: - final eachSpace = spaceAvailable / (barGroups.length * 2); - - var tempX = 0.0; - barGroups.asMap().forEach((i, group) { - tempX += eachSpace; - tempX += group.width / 2; - groupsX[i] = tempX; - tempX += group.width / 2; - tempX += eachSpace; - }); - - case BarChartAlignment.spaceEvenly: - spaceEvenly(); - } - - return groupsX; - } -} diff --git a/lib/src/extensions/border_extension.dart b/lib/src/extensions/border_extension.dart deleted file mode 100644 index 7df7cfe90e..0000000000 --- a/lib/src/extensions/border_extension.dart +++ /dev/null @@ -1,20 +0,0 @@ -import 'package:flutter/widgets.dart'; - -extension BorderExtension on Border { - bool isVisible() { - if (left.width == 0 && - top.width == 0 && - right.width == 0 && - bottom.width == 0) { - return false; - } - - if (left.color.opacity == 0.0 && - top.color.opacity == 0.0 && - right.color.opacity == 0.0 && - bottom.color.opacity == 0.0) { - return false; - } - return true; - } -} diff --git a/lib/src/extensions/color_extension.dart b/lib/src/extensions/color_extension.dart deleted file mode 100644 index 138a317b92..0000000000 --- a/lib/src/extensions/color_extension.dart +++ /dev/null @@ -1,15 +0,0 @@ -import 'package:flutter/material.dart'; - -extension ColorExtension on Color { - /// Convert the color to a darken color based on the [percent] - Color darken([int percent = 40]) { - assert(1 <= percent && percent <= 100); - final value = 1 - percent / 100; - return Color.fromARGB( - alpha, - (red * value).round(), - (green * value).round(), - (blue * value).round(), - ); - } -} diff --git a/lib/src/extensions/edge_insets_extension.dart b/lib/src/extensions/edge_insets_extension.dart deleted file mode 100644 index fd565bec95..0000000000 --- a/lib/src/extensions/edge_insets_extension.dart +++ /dev/null @@ -1,13 +0,0 @@ -import 'package:flutter/widgets.dart'; - -extension EdgeInsetsExtension on EdgeInsets { - EdgeInsets get onlyTopBottom => EdgeInsets.only( - top: top, - bottom: bottom, - ); - - EdgeInsets get onlyLeftRight => EdgeInsets.only( - left: left, - right: right, - ); -} diff --git a/lib/src/extensions/fl_border_data_extension.dart b/lib/src/extensions/fl_border_data_extension.dart deleted file mode 100644 index e6002dba68..0000000000 --- a/lib/src/extensions/fl_border_data_extension.dart +++ /dev/null @@ -1,13 +0,0 @@ -import 'package:fl_chart/fl_chart.dart'; -import 'package:flutter/widgets.dart'; - -extension FlBorderDataExtension on FlBorderData { - EdgeInsets get allSidesPadding { - return EdgeInsets.only( - left: show ? border.left.width : 0.0, - top: show ? border.top.width : 0.0, - right: show ? border.right.width : 0.0, - bottom: show ? border.bottom.width : 0.0, - ); - } -} diff --git a/lib/src/extensions/fl_titles_data_extension.dart b/lib/src/extensions/fl_titles_data_extension.dart deleted file mode 100644 index 8bf5d3b69f..0000000000 --- a/lib/src/extensions/fl_titles_data_extension.dart +++ /dev/null @@ -1,14 +0,0 @@ -import 'package:fl_chart/fl_chart.dart'; -import 'package:fl_chart/src/extensions/side_titles_extension.dart'; -import 'package:flutter/widgets.dart'; - -extension FlTitlesDataExtension on FlTitlesData { - EdgeInsets get allSidesPadding { - return EdgeInsets.only( - left: show ? leftTitles.totalReservedSize : 0.0, - top: show ? topTitles.totalReservedSize : 0.0, - right: show ? rightTitles.totalReservedSize : 0.0, - bottom: show ? bottomTitles.totalReservedSize : 0.0, - ); - } -} diff --git a/lib/src/extensions/gradient_extension.dart b/lib/src/extensions/gradient_extension.dart deleted file mode 100644 index 1e736706d5..0000000000 --- a/lib/src/extensions/gradient_extension.dart +++ /dev/null @@ -1,26 +0,0 @@ -import 'package:flutter/painting.dart'; - -/// Extensions on [Gradient] -extension GradientExtension on Gradient { - /// Returns colorStops - /// - /// if [stops] provided, returns it directly, - /// Otherwise we calculate it using colors list - List getSafeColorStops() { - var resultStops = []; - if (stops == null || stops!.length != colors.length) { - if (colors.length > 1) { - /// provided colorStops is invalid and we calculate it here - colors.asMap().forEach((index, color) { - final percent = 1.0 / (colors.length - 1); - resultStops.add(percent * index); - }); - } else { - throw ArgumentError('"colors" must have length > 1.'); - } - } else { - resultStops = stops!; - } - return resultStops; - } -} diff --git a/lib/src/extensions/paint_extension.dart b/lib/src/extensions/paint_extension.dart deleted file mode 100644 index 7c7cb71bbd..0000000000 --- a/lib/src/extensions/paint_extension.dart +++ /dev/null @@ -1,31 +0,0 @@ -import 'package:flutter/material.dart'; - -extension PaintExtension on Paint { - /// Hides the paint's color, if strokeWidth is zero - void transparentIfWidthIsZero() { - if (strokeWidth == 0) { - shader = null; - color = color.withOpacity(0); - } - } - - void setColorOrGradient(Color? color, Gradient? gradient, Rect rect) { - if (gradient != null) { - this.color = Colors.black; - shader = gradient.createShader(rect); - } else { - this.color = color ?? Colors.transparent; - shader = null; - } - } - - void setColorOrGradientForLine( - Color? color, - Gradient? gradient, { - required Offset from, - required Offset to, - }) { - final rect = Rect.fromPoints(from, to); - setColorOrGradient(color, gradient, rect); - } -} diff --git a/lib/src/extensions/path_extension.dart b/lib/src/extensions/path_extension.dart deleted file mode 100644 index 9a47e1cce2..0000000000 --- a/lib/src/extensions/path_extension.dart +++ /dev/null @@ -1,23 +0,0 @@ -import 'dart:ui'; - -import 'package:fl_chart/src/utils/path_drawing/dash_path.dart'; - -/// Defines extensions on the [Path] -extension DashedPath on Path { - /// Returns a dashed path based on [dashArray]. - /// - /// it is a circular array of dash offsets and lengths. - /// For example, the array `[5, 10]` would result in dashes 5 pixels long - /// followed by blank spaces 10 pixels long. - Path toDashedPath(List? dashArray) { - if (dashArray != null) { - final castedArray = dashArray.map((value) => value.toDouble()).toList(); - final dashedPath = - dashPath(this, dashArray: CircularIntervalList(castedArray)); - - return dashedPath; - } else { - return this; - } - } -} diff --git a/lib/src/extensions/rrect_extension.dart b/lib/src/extensions/rrect_extension.dart deleted file mode 100644 index 066cafdc35..0000000000 --- a/lib/src/extensions/rrect_extension.dart +++ /dev/null @@ -1,12 +0,0 @@ -import 'package:flutter/cupertino.dart'; - -/// Defines extensions on the [RRect] -extension RRectExtension on RRect { - /// Return [Rect] from [RRect] - Rect getRect() => Rect.fromLTRB( - left, - top, - right, - bottom, - ); -} diff --git a/lib/src/extensions/side_titles_extension.dart b/lib/src/extensions/side_titles_extension.dart deleted file mode 100644 index d500f3e0b0..0000000000 --- a/lib/src/extensions/side_titles_extension.dart +++ /dev/null @@ -1,14 +0,0 @@ -import 'package:fl_chart/src/chart/base/axis_chart/axis_chart_data.dart'; - -extension SideTitlesExtension on AxisTitles { - double get totalReservedSize { - var size = 0.0; - if (showAxisTitles) { - size += axisNameSize; - } - if (showSideTitles) { - size += sideTitles.reservedSize; - } - return size; - } -} diff --git a/lib/src/extensions/text_align_extension.dart b/lib/src/extensions/text_align_extension.dart deleted file mode 100644 index f231aeae5c..0000000000 --- a/lib/src/extensions/text_align_extension.dart +++ /dev/null @@ -1,19 +0,0 @@ -import 'package:flutter/material.dart'; - -enum HorizontalAlignment { left, center, right } - -extension TextAlignExtension on TextAlign { - HorizontalAlignment getFinalHorizontalAlignment(TextDirection? direction) { - if ((this == TextAlign.left) || - (this == TextAlign.start && direction == TextDirection.ltr) || - (this == TextAlign.end && direction == TextDirection.rtl)) { - return HorizontalAlignment.left; - } else if ((this == TextAlign.right) || - (this == TextAlign.end && direction == TextDirection.ltr) || - (this == TextAlign.start && direction == TextDirection.rtl)) { - return HorizontalAlignment.right; - } else { - return HorizontalAlignment.center; - } - } -} diff --git a/lib/src/utils/canvas_wrapper.dart b/lib/src/utils/canvas_wrapper.dart deleted file mode 100644 index c2ced6f502..0000000000 --- a/lib/src/utils/canvas_wrapper.dart +++ /dev/null @@ -1,144 +0,0 @@ -import 'dart:ui'; - -import 'package:fl_chart/fl_chart.dart'; -import 'package:fl_chart/src/extensions/path_extension.dart'; -import 'package:fl_chart/src/utils/utils.dart'; -import 'package:flutter/cupertino.dart' hide Image; - -typedef DrawCallback = void Function(); - -/// Proxies Canvas functions -/// -/// We wrapped the canvas here, because we needed to write tests for our drawing system. -/// Now in tests we can verify that these functions called with a specific value. -class CanvasWrapper { - CanvasWrapper( - this.canvas, - this.size, - ); - final Canvas canvas; - final Size size; - - /// Directly calls [Canvas.drawRRect] - void drawRRect(RRect rrect, Paint paint) => canvas.drawRRect(rrect, paint); - - /// Directly calls [Canvas.save] - void save() => canvas.save(); - - /// Directly calls [Canvas.restore] - void restore() => canvas.restore(); - - /// Directly calls [Canvas.clipRect] - void clipRect( - Rect rect, { - ClipOp clipOp = ClipOp.intersect, - bool doAntiAlias = true, - }) => - canvas.clipRect(rect, clipOp: clipOp, doAntiAlias: doAntiAlias); - - /// Directly calls [Canvas.translate] - void translate(double dx, double dy) => canvas.translate(dx, dy); - - /// Directly calls [Canvas.rotate] - void rotate(double radius) => canvas.rotate(radius); - - /// Directly calls [Canvas.drawPath] - void drawPath(Path path, Paint paint) => canvas.drawPath(path, paint); - - /// Directly calls [Canvas.saveLayer] - void saveLayer(Rect bounds, Paint paint) => canvas.saveLayer(bounds, paint); - - /// Directly calls [Canvas.drawPicture] - void drawPicture(Picture picture) => canvas.drawPicture(picture); - - /// Directly calls [Canvas.drawImage] - void drawImage(Image image, Offset offset, Paint paint) => - canvas.drawImage(image, offset, paint); - - /// Directly calls [Canvas.clipPath] - void clipPath(Path path, {bool doAntiAlias = true}) => - canvas.clipPath(path, doAntiAlias: doAntiAlias); - - /// Directly calls [Canvas.drawRect] - void drawRect(Rect rect, Paint paint) => canvas.drawRect(rect, paint); - - /// Directly calls [Canvas.drawLine] - void drawLine(Offset p1, Offset p2, Paint paint) => - canvas.drawLine(p1, p2, paint); - - /// Directly calls [Canvas.drawCircle] - void drawCircle(Offset center, double radius, Paint paint) => - canvas.drawCircle(center, radius, paint); - - /// Directly calls [Canvas.drawCircle] - void drawArc( - Rect rect, - double startAngle, - double sweepAngle, - bool useCenter, - Paint paint, - ) => - canvas.drawArc(rect, startAngle, sweepAngle, useCenter, paint); - - /// Paints a text on the [Canvas] - /// - /// Gets a [TextPainter] and call its [TextPainter.paint] using our canvas - void drawText(TextPainter tp, Offset offset, [double? rotateAngle]) { - if (rotateAngle == null) { - tp.paint(canvas, offset); - } else { - drawRotated( - size: tp.size, - drawOffset: offset, - angle: rotateAngle, - drawCallback: () { - tp.paint(canvas, offset); - }, - ); - } - } - - /// Paints a dot using customized [FlDotPainter] - /// - /// Paints a customized dot using [FlDotPainter] at the [spot]'s position, - /// with the [offset] - void drawDot(FlDotPainter painter, FlSpot spot, Offset offset) { - painter.draw(canvas, spot, offset); - } - - /// Handles performing multiple draw actions rotated. - void drawRotated({ - required Size size, - Offset rotationOffset = Offset.zero, - Offset drawOffset = Offset.zero, - required double angle, - required DrawCallback drawCallback, - }) { - save(); - translate( - rotationOffset.dx + drawOffset.dx + size.width / 2, - rotationOffset.dy + drawOffset.dy + size.height / 2, - ); - rotate(Utils().radians(angle)); - translate( - -drawOffset.dx - size.width / 2, - -drawOffset.dy - size.height / 2, - ); - drawCallback(); - restore(); - } - - /// Draws a dashed line from passed in offsets - void drawDashedLine( - Offset from, - Offset to, - Paint painter, - List? dashArray, - ) { - var path = Path() - ..moveTo(from.dx, from.dy) - ..lineTo(to.dx, to.dy); - path = path.toDashedPath(dashArray); - drawPath(path, painter); - } -} diff --git a/lib/src/utils/lerp.dart b/lib/src/utils/lerp.dart deleted file mode 100644 index 35417647d1..0000000000 --- a/lib/src/utils/lerp.dart +++ /dev/null @@ -1,193 +0,0 @@ -import 'dart:ui'; - -import 'package:fl_chart/fl_chart.dart'; -import 'package:flutter/material.dart'; - -@visibleForTesting -List? lerpList( - List? a, - List? b, - double t, { - required T Function(T, T, double) lerp, -}) { - if (a != null && b != null && a.length == b.length) { - return List.generate(a.length, (i) { - return lerp(a[i], b[i], t); - }); - } else if (a != null && b != null) { - return List.generate(b.length, (i) { - return lerp(i >= a.length ? b[i] : a[i], b[i], t); - }); - } else { - return b; - } -} - -/// Lerps [Color] list based on [t] value, check [Tween.lerp]. -List? lerpColorList(List? a, List? b, double t) => - lerpList(a, b, t, lerp: lerpColor); - -/// Lerps [Color] based on [t] value, check [Color.lerp]. -Color lerpColor(Color a, Color b, double t) => Color.lerp(a, b, t)!; - -/// Lerps [double] list based on [t] value, allows [double.infinity]. -double? lerpDoubleAllowInfinity(double? a, double? b, double t) { - if (a == b || (a?.isNaN == true) && (b?.isNaN == true)) { - return a; - } - - if (a!.isInfinite || b!.isInfinite) { - return b; - } - assert(a.isFinite, 'Cannot interpolate between finite and non-finite values'); - assert(b.isFinite, 'Cannot interpolate between finite and non-finite values'); - assert(t.isFinite, 't must be finite when interpolating between values'); - return a * (1.0 - t) + b * t; -} - -/// Lerps [double] list based on [t] value, check [Tween.lerp]. -List? lerpDoubleList(List? a, List? b, double t) => - lerpList(a, b, t, lerp: lerpNonNullDouble); - -/// Lerps [int] list based on [t] value, check [Tween.lerp]. -List? lerpIntList(List? a, List? b, double t) => - lerpList(a, b, t, lerp: lerpInt); - -/// Lerps [int] list based on [t] value, check [Tween.lerp]. -int lerpInt(int a, int b, double t) => (a + (b - a) * t).round(); - -@visibleForTesting -double lerpNonNullDouble(double a, double b, double t) => lerpDouble(a, b, t)!; - -/// Lerps [FlSpot] list based on [t] value, check [Tween.lerp]. -List? lerpFlSpotList(List? a, List? b, double t) => - lerpList(a, b, t, lerp: FlSpot.lerp); - -/// Lerps [HorizontalLine] list based on [t] value, check [Tween.lerp]. -List? lerpHorizontalLineList( - List? a, - List? b, - double t, -) => - lerpList(a, b, t, lerp: HorizontalLine.lerp); - -/// Lerps [VerticalLine] list based on [t] value, check [Tween.lerp]. -List? lerpVerticalLineList( - List? a, - List? b, - double t, -) => - lerpList(a, b, t, lerp: VerticalLine.lerp); - -/// Lerps [HorizontalRangeAnnotation] list based on [t] value, check [Tween.lerp]. -List? lerpHorizontalRangeAnnotationList( - List? a, - List? b, - double t, -) => - lerpList(a, b, t, lerp: HorizontalRangeAnnotation.lerp); - -/// Lerps [VerticalRangeAnnotation] list based on [t] value, check [Tween.lerp]. -List? lerpVerticalRangeAnnotationList( - List? a, - List? b, - double t, -) => - lerpList(a, b, t, lerp: VerticalRangeAnnotation.lerp); - -/// Lerps [LineChartBarData] list based on [t] value, check [Tween.lerp]. -List? lerpLineChartBarDataList( - List? a, - List? b, - double t, -) => - lerpList(a, b, t, lerp: LineChartBarData.lerp); - -/// Lerps [BetweenBarsData] list based on [t] value, check [Tween.lerp]. -List? lerpBetweenBarsDataList( - List? a, - List? b, - double t, -) => - lerpList(a, b, t, lerp: BetweenBarsData.lerp); - -/// Lerps [BarChartGroupData] list based on [t] value, check [Tween.lerp]. -List? lerpBarChartGroupDataList( - List? a, - List? b, - double t, -) => - lerpList(a, b, t, lerp: BarChartGroupData.lerp); - -/// Lerps [BarChartRodData] list based on [t] value, check [Tween.lerp]. -List? lerpBarChartRodDataList( - List? a, - List? b, - double t, -) => - lerpList(a, b, t, lerp: BarChartRodData.lerp); - -/// Lerps [PieChartSectionData] list based on [t] value, check [Tween.lerp]. -List? lerpPieChartSectionDataList( - List? a, - List? b, - double t, -) => - lerpList(a, b, t, lerp: PieChartSectionData.lerp); - -/// Lerps [ScatterSpot] list based on [t] value, check [Tween.lerp]. -List? lerpScatterSpotList( - List? a, - List? b, - double t, -) => - lerpList(a, b, t, lerp: ScatterSpot.lerp); - -/// Lerps [BarChartRodStackItem] list based on [t] value, check [Tween.lerp]. -List? lerpBarChartRodStackList( - List? a, - List? b, - double t, -) => - lerpList(a, b, t, lerp: BarChartRodStackItem.lerp); - -/// Lerps [RadarDataSet] list based on [t] value, check [Tween.lerp]. -List? lerpRadarDataSetList( - List? a, - List? b, - double t, -) => - lerpList(a, b, t, lerp: RadarDataSet.lerp); - -/// Lerps [RadarEntry] list based on [t] value, check [Tween.lerp]. -List? lerpRadarEntryList( - List? a, - List? b, - double t, -) => - lerpList(a, b, t, lerp: RadarEntry.lerp); - -/// Lerps between a [LinearGradient] colors, based on [t] -Color lerpGradient(List colors, List stops, double t) { - final length = colors.length; - if (stops.length != length) { - /// provided gradientColorStops is invalid and we calculate it here - stops = List.generate(length, (i) => (i + 1) / length); - } - - for (var s = 0; s < stops.length - 1; s++) { - final leftStop = stops[s]; - final rightStop = stops[s + 1]; - - final leftColor = colors[s]; - final rightColor = colors[s + 1]; - - if (t <= leftStop) { - return leftColor; - } else if (t < rightStop) { - final sectionT = (t - leftStop) / (rightStop - leftStop); - return Color.lerp(leftColor, rightColor, sectionT)!; - } - } - return colors.last; -} diff --git a/lib/src/utils/list_wrapper.dart b/lib/src/utils/list_wrapper.dart deleted file mode 100644 index e7e2de0a8f..0000000000 --- a/lib/src/utils/list_wrapper.dart +++ /dev/null @@ -1,21 +0,0 @@ -import 'package:equatable/equatable.dart'; - -/// Wraps a list as a property -/// -/// We needed to use list as key for Maps. -/// But in dart, List doesn't implement hashCode and equals functions. -/// That is a workaround to solve the problem. -/// Issue link: https://github.com/dart-lang/sdk/issues/17963 -class ListWrapper with EquatableMixin { - ListWrapper(this.list); - final List list; - - @override - List get props => [list]; -} - -/// An Extension to convert a List into ListWrapper class -extension ListExtension on List { - /// Converts List into ListWrapper class - ListWrapper toWrapperClass() => ListWrapper(this); -} diff --git a/lib/src/utils/path_drawing/dash_path.dart b/lib/src/utils/path_drawing/dash_path.dart deleted file mode 100644 index de5b299ffe..0000000000 --- a/lib/src/utils/path_drawing/dash_path.dart +++ /dev/null @@ -1,91 +0,0 @@ -import 'dart:ui'; - -/// Came from [flutter_path_drawing](https://github.com/dnfield/flutter_path_drawing) library. -/// Creates a new path that is drawn from the segments of `source`. -/// -/// Dash intervals are controled by the `dashArray` - see [CircularIntervalList] -/// for examples. -/// -/// `dashOffset` specifies an initial starting point for the dashing. -/// -/// Passing a `source` that is an empty path will return an empty path. -Path dashPath( - Path source, { - required CircularIntervalList dashArray, - DashOffset? dashOffset, -}) { - assert(dashArray != null); // ignore: unnecessary_null_comparison - - dashOffset = dashOffset ?? const DashOffset.absolute(0); - // TODO(imaNNeo): Is there some way to determine how much of a path would be visible today? - - final dest = Path(); - for (final metric in source.computeMetrics()) { - var distance = dashOffset._calculate(metric.length); - var draw = true; - while (distance < metric.length) { - final len = dashArray.next; - if (draw) { - dest.addPath(metric.extractPath(distance, distance + len), Offset.zero); - } - distance += len; - draw = !draw; - } - } - - return dest; -} - -enum _DashOffsetType { absolute, percentage } - -/// Specifies the starting position of a dash array on a path, either as a -/// percentage or absolute value. -/// -/// The internal value will be guaranteed to not be null. -class DashOffset { - /// Create a DashOffset that will be measured as a percentage of the length - /// of the segment being dashed. - /// - /// `percentage` will be clamped between 0.0 and 1.0. - DashOffset.percentage(double percentage) - : _rawVal = percentage.clamp(0.0, 1.0), - _dashOffsetType = _DashOffsetType.percentage; - - /// Create a DashOffset that will be measured in terms of absolute pixels - /// along the length of a [Path] segment. - const DashOffset.absolute(double start) - : _rawVal = start, - _dashOffsetType = _DashOffsetType.absolute; - - final double _rawVal; - final _DashOffsetType _dashOffsetType; - - double _calculate(double length) { - return _dashOffsetType == _DashOffsetType.absolute - ? _rawVal - : length * _rawVal; - } -} - -/// A circular array of dash offsets and lengths. -/// -/// For example, the array `[5, 10]` would result in dashes 5 pixels long -/// followed by blank spaces 10 pixels long. The array `[5, 10, 5]` would -/// result in a 5 pixel dash, a 10 pixel gap, a 5 pixel dash, a 5 pixel gap, -/// a 10 pixel dash, etc. -/// -/// Note that this does not quite conform to an [Iterable], because it does -/// not have a moveNext. -class CircularIntervalList { - CircularIntervalList(this._values); - - final List _values; - int _idx = 0; - - T get next { - if (_idx >= _values.length) { - _idx = 0; - } - return _values[_idx++]; - } -} diff --git a/lib/src/utils/utils.dart b/lib/src/utils/utils.dart deleted file mode 100644 index 21b8ffa128..0000000000 --- a/lib/src/utils/utils.dart +++ /dev/null @@ -1,331 +0,0 @@ -import 'dart:math' as math; -import 'dart:math'; - -import 'package:flutter/material.dart'; - -class Utils { - factory Utils() { - return _singleton; - } - - Utils._internal(); - static Utils _singleton = Utils._internal(); - - @visibleForTesting - static void changeInstance(Utils val) => _singleton = val; - - static const double _degrees2Radians = math.pi / 180.0; - - /// Converts degrees to radians - double radians(double degrees) => degrees * _degrees2Radians; - - static const double _radians2Degrees = 180.0 / math.pi; - - /// Converts radians to degrees - double degrees(double radians) => radians * _radians2Degrees; - - /// Returns a default size based on the screen size - /// that is a 70% scaled square based on the screen. - Size getDefaultSize(Size screenSize) { - Size resultSize; - if (screenSize.width < screenSize.height) { - resultSize = Size(screenSize.width, screenSize.width); - } else if (screenSize.height < screenSize.width) { - resultSize = Size(screenSize.height, screenSize.height); - } else { - resultSize = Size(screenSize.width, screenSize.height); - } - return resultSize * 0.7; - } - - /// Forward the view base on its degree - double translateRotatedPosition(double size, double degree) { - return (size / 4) * math.sin(radians(degree.abs())); - } - - Offset calculateRotationOffset(Size size, double degree) { - final rotatedHeight = (size.width * math.sin(radians(degree))).abs() + - (size.height * cos(radians(degree))).abs(); - final rotatedWidth = (size.width * cos(radians(degree))).abs() + - (size.height * sin(radians(degree))).abs(); - return Offset( - (size.width - rotatedWidth) / 2, - (size.height - rotatedHeight) / 2, - ); - } - - /// Decreases [borderRadius] to <= width / 2 - BorderRadius? normalizeBorderRadius( - BorderRadius? borderRadius, - double width, - ) { - if (borderRadius == null) { - return null; - } - - Radius topLeft; - if (borderRadius.topLeft.x > width / 2 || - borderRadius.topLeft.y > width / 2) { - topLeft = Radius.circular(width / 2); - } else { - topLeft = borderRadius.topLeft; - } - - Radius topRight; - if (borderRadius.topRight.x > width / 2 || - borderRadius.topRight.y > width / 2) { - topRight = Radius.circular(width / 2); - } else { - topRight = borderRadius.topRight; - } - - Radius bottomLeft; - if (borderRadius.bottomLeft.x > width / 2 || - borderRadius.bottomLeft.y > width / 2) { - bottomLeft = Radius.circular(width / 2); - } else { - bottomLeft = borderRadius.bottomLeft; - } - - Radius bottomRight; - if (borderRadius.bottomRight.x > width / 2 || - borderRadius.bottomRight.y > width / 2) { - bottomRight = Radius.circular(width / 2); - } else { - bottomRight = borderRadius.bottomRight; - } - - return BorderRadius.only( - topLeft: topLeft, - topRight: topRight, - bottomLeft: bottomLeft, - bottomRight: bottomRight, - ); - } - - /// Default value for BorderSide where borderSide value is not exists - static const BorderSide defaultBorderSide = BorderSide(width: 0); - - /// Decreases [borderSide] to <= width / 2 - BorderSide normalizeBorderSide(BorderSide? borderSide, double width) { - if (borderSide == null) { - return defaultBorderSide; - } - - double borderWidth; - if (borderSide.width > width / 2) { - borderWidth = width / 2.toDouble(); - } else { - borderWidth = borderSide.width; - } - - return borderSide.copyWith(width: borderWidth); - } - - /// Returns an efficient interval for showing axis titles, or grid lines or ... - /// - /// If there isn't any provided interval, we use this function to calculate an interval to apply, - /// using [axisViewSize] / [pixelPerInterval], we calculate the allowedCount lines in the axis, - /// then using [diffInAxis] / allowedCount, we can find out how much interval we need, - /// then we round that number by finding nearest number in this pattern: - /// 1, 2, 5, 10, 20, 50, 100, 200, 500, 1000, 5000, 10000,... - double getEfficientInterval( - double axisViewSize, - double diffInAxis, { - double pixelPerInterval = 40, - }) { - final allowedCount = math.max(axisViewSize ~/ pixelPerInterval, 1); - if (diffInAxis == 0) { - return 1; - } - final accurateInterval = - diffInAxis == 0 ? axisViewSize : diffInAxis / allowedCount; - if (allowedCount <= 2) { - return accurateInterval; - } - return roundInterval(accurateInterval); - } - - @visibleForTesting - double roundInterval(double input) { - if (input < 1) { - return _roundIntervalBelowOne(input); - } - return _roundIntervalAboveOne(input); - } - - double _roundIntervalBelowOne(double input) { - assert(input < 1.0); - - if (input < 0.000001) { - return input; - } - - final inputString = input.toString(); - var precisionCount = inputString.length - 2; - - var zeroCount = 0; - for (var i = 2; i <= inputString.length; i++) { - if (inputString[i] != '0') { - break; - } - zeroCount++; - } - - final afterZerosNumberLength = precisionCount - zeroCount; - if (afterZerosNumberLength > 2) { - final numbersToRemove = afterZerosNumberLength - 2; - precisionCount -= numbersToRemove; - } - - final pow10onPrecision = pow(10, precisionCount); - input *= pow10onPrecision; - return _roundIntervalAboveOne(input) / pow10onPrecision; - } - - double _roundIntervalAboveOne(double input) { - assert(input >= 1.0); - final decimalCount = input.toInt().toString().length - 1; - input /= pow(10, decimalCount); - - final scaled = input >= 10 ? input.round() / 10 : input; - - if (scaled >= 7.6) { - return 10 * pow(10, decimalCount).toInt().toDouble(); - } else if (scaled >= 2.6) { - return 5 * pow(10, decimalCount).toInt().toDouble(); - } else if (scaled >= 1.6) { - return 2 * pow(10, decimalCount).toInt().toDouble(); - } else { - return 1 * pow(10, decimalCount).toInt().toDouble(); - } - } - - /// billion number - /// in short scale (https://en.wikipedia.org/wiki/Billion) - static const double billion = 1000000000; - - /// million number - static const double million = 1000000; - - /// kilo (thousands) number - static const double kilo = 1000; - - /// Returns count of fraction digits of a value - int getFractionDigits(double value) { - if (value >= 1) { - return 1; - } else if (value >= 0.1) { - return 2; - } else if (value >= 0.01) { - return 3; - } else if (value >= 0.001) { - return 4; - } else if (value >= 0.0001) { - return 5; - } else if (value >= 0.00001) { - return 6; - } else if (value >= 0.000001) { - return 7; - } else if (value >= 0.0000001) { - return 8; - } else if (value >= 0.00000001) { - return 9; - } else if (value >= 0.000000001) { - return 10; - } - return 1; - } - - /// Formats and add symbols (K, M, B) at the end of number. - /// - /// if number is larger than [billion], it returns a short number like 13.3B, - /// if number is larger than [million], it returns a short number line 43M, - /// if number is larger than [kilo], it returns a short number like 4K, - /// otherwise it returns number itself. - /// also it removes .0, at the end of number for simplicity. - String formatNumber(double axisMin, double axisMax, double axisValue) { - final isNegative = axisValue < 0; - - if (isNegative) { - axisValue = axisValue.abs(); - } - - String resultNumber; - String symbol; - if (axisValue >= billion) { - resultNumber = (axisValue / billion).toStringAsFixed(1); - symbol = 'B'; - } else if (axisValue >= million) { - resultNumber = (axisValue / million).toStringAsFixed(1); - symbol = 'M'; - } else if (axisValue >= kilo) { - resultNumber = (axisValue / kilo).toStringAsFixed(1); - symbol = 'K'; - } else { - final diff = (axisMin - axisMax).abs(); - resultNumber = axisValue.toStringAsFixed( - getFractionDigits(diff), - ); - symbol = ''; - } - - if (resultNumber.endsWith('.0')) { - resultNumber = resultNumber.substring(0, resultNumber.length - 2); - } - - if (isNegative) { - resultNumber = '-$resultNumber'; - } - - if (resultNumber == '-0') { - resultNumber = '0'; - } - - return resultNumber + symbol; - } - - /// Returns a TextStyle based on provided [context], if [providedStyle] provided we try to merge it. - TextStyle getThemeAwareTextStyle( - BuildContext context, - TextStyle? providedStyle, - ) { - final defaultTextStyle = DefaultTextStyle.of(context); - var effectiveTextStyle = providedStyle; - if (providedStyle == null || providedStyle.inherit) { - effectiveTextStyle = defaultTextStyle.style.merge(providedStyle); - } - if (MediaQuery.boldTextOf(context)) { - effectiveTextStyle = effectiveTextStyle! - .merge(const TextStyle(fontWeight: FontWeight.bold)); - } - return effectiveTextStyle!; - } - - /// Finds the best initial interval value - /// - /// If there is a zero point in the axis, we a value that passes through it. - /// For example if we have -3 to +3, with interval 2. if we start from -3, we get something like this: -3, -1, +1, +3 - /// But the most important point is zero in most cases. with this logic we get this: -2, 0, 2 - double getBestInitialIntervalValue( - double min, - double max, - double interval, { - double baseline = 0.0, - }) { - final diff = baseline - min; - final mod = diff % interval; - if ((max - min).abs() <= mod) { - return min; - } - if (mod == 0) { - return min; - } - return min + mod; - } - - /// Converts radius number to sigma for drawing shadows - double convertRadiusToSigma(double radius) { - return radius * 0.57735 + 0.5; - } -} diff --git a/main.dart.js b/main.dart.js new file mode 100644 index 0000000000..e58046c51b --- /dev/null +++ b/main.dart.js @@ -0,0 +1,106379 @@ +(function dartProgram(){function copyProperties(a,b){var s=Object.keys(a) +for(var r=0;r=0)return true +if(typeof version=="function"&&version.length==0){var q=version() +if(/^\d+\.\d+\.\d+\.\d+$/.test(q))return true}}catch(p){}return false}() +function inherit(a,b){a.prototype.constructor=a +a.prototype["$i"+a.name]=a +if(b!=null){if(z){Object.setPrototypeOf(a.prototype,b.prototype) +return}var s=Object.create(b.prototype) +copyProperties(a.prototype,s) +a.prototype=s}}function inheritMany(a,b){for(var s=0;s4294967295)throw A.c(A.c9(a,0,4294967295,"length",null)) +return J.rQ(new Array(a),b)}, +wA(a,b){if(a<0)throw A.c(A.bC("Length must be a non-negative integer: "+a,null)) +return A.a(new Array(a),b.h("q<0>"))}, +rP(a,b){if(a<0)throw A.c(A.bC("Length must be a non-negative integer: "+a,null)) +return A.a(new Array(a),b.h("q<0>"))}, +rQ(a,b){return J.ag1(A.a(a,b.h("q<0>")))}, +ag1(a){a.fixed$length=Array +return a}, +aLv(a){a.fixed$length=Array +a.immutable$list=Array +return a}, +aXX(a,b){return J.A1(a,b)}, +aLw(a){if(a<256)switch(a){case 9:case 10:case 11:case 12:case 13:case 32:case 133:case 160:return!0 +default:return!1}switch(a){case 5760:case 8192:case 8193:case 8194:case 8195:case 8196:case 8197:case 8198:case 8199:case 8200:case 8201:case 8202:case 8232:case 8233:case 8239:case 8287:case 12288:case 65279:return!0 +default:return!1}}, +aLx(a,b){var s,r +for(s=a.length;b0;b=s){s=b-1 +r=a.charCodeAt(s) +if(r!==32&&r!==13&&!J.aLw(r))break}return b}, +ja(a){if(typeof a=="number"){if(Math.floor(a)==a)return J.wB.prototype +return J.CM.prototype}if(typeof a=="string")return J.lr.prototype +if(a==null)return J.CL.prototype +if(typeof a=="boolean")return J.CJ.prototype +if(Array.isArray(a))return J.q.prototype +if(typeof a!="object"){if(typeof a=="function")return J.ls.prototype +if(typeof a=="symbol")return J.rS.prototype +if(typeof a=="bigint")return J.rR.prototype +return a}if(a instanceof A.I)return a +return J.a5I(a)}, +b6p(a){if(typeof a=="number")return J.oV.prototype +if(typeof a=="string")return J.lr.prototype +if(a==null)return a +if(Array.isArray(a))return J.q.prototype +if(typeof a!="object"){if(typeof a=="function")return J.ls.prototype +if(typeof a=="symbol")return J.rS.prototype +if(typeof a=="bigint")return J.rR.prototype +return a}if(a instanceof A.I)return a +return J.a5I(a)}, +aF(a){if(typeof a=="string")return J.lr.prototype +if(a==null)return a +if(Array.isArray(a))return J.q.prototype +if(typeof a!="object"){if(typeof a=="function")return J.ls.prototype +if(typeof a=="symbol")return J.rS.prototype +if(typeof a=="bigint")return J.rR.prototype +return a}if(a instanceof A.I)return a +return J.a5I(a)}, +cb(a){if(a==null)return a +if(Array.isArray(a))return J.q.prototype +if(typeof a!="object"){if(typeof a=="function")return J.ls.prototype +if(typeof a=="symbol")return J.rS.prototype +if(typeof a=="bigint")return J.rR.prototype +return a}if(a instanceof A.I)return a +return J.a5I(a)}, +aQK(a){if(typeof a=="number"){if(Math.floor(a)==a)return J.wB.prototype +return J.CM.prototype}if(a==null)return a +if(!(a instanceof A.I))return J.m4.prototype +return a}, +Lf(a){if(typeof a=="number")return J.oV.prototype +if(a==null)return a +if(!(a instanceof A.I))return J.m4.prototype +return a}, +aQL(a){if(typeof a=="number")return J.oV.prototype +if(typeof a=="string")return J.lr.prototype +if(a==null)return a +if(!(a instanceof A.I))return J.m4.prototype +return a}, +zR(a){if(typeof a=="string")return J.lr.prototype +if(a==null)return a +if(!(a instanceof A.I))return J.m4.prototype +return a}, +dW(a){if(a==null)return a +if(typeof a!="object"){if(typeof a=="function")return J.ls.prototype +if(typeof a=="symbol")return J.rS.prototype +if(typeof a=="bigint")return J.rR.prototype +return a}if(a instanceof A.I)return a +return J.a5I(a)}, +fo(a){if(a==null)return a +if(!(a instanceof A.I))return J.m4.prototype +return a}, +aUz(a,b){if(typeof a=="number"&&typeof b=="number")return a+b +return J.b6p(a).R(a,b)}, +d(a,b){if(a==null)return b==null +if(typeof a!="object")return b!=null&&a===b +return J.ja(a).j(a,b)}, +aJh(a,b){if(typeof a=="number"&&typeof b=="number")return a<=b +return J.Lf(a).Lk(a,b)}, +aUA(a,b){if(typeof a=="number"&&typeof b=="number")return a*b +return J.aQL(a).S(a,b)}, +aEV(a,b){if(typeof a=="number"&&typeof b=="number")return a-b +return J.Lf(a).Y(a,b)}, +bq(a,b){if(typeof b==="number")if(Array.isArray(a)||typeof a=="string"||A.aQS(a,a[v.dispatchPropertyName]))if(b>>>0===b&&b>>0===b&&b0?1:a<0?-1:a +return J.aQK(a).gDo(a)}, +aJl(a){return J.dW(a).gv(a)}, +aJm(a){return J.fo(a).gth(a)}, +aUN(a){return J.dW(a).gLQ(a)}, +jX(a){return J.fo(a).gl(a)}, +aF_(a){return J.dW(a).gaT(a)}, +aUO(a,b,c){return J.cb(a).x9(a,b,c)}, +aF0(a,b){return J.fo(a).br(a,b)}, +aF1(a,b){return J.aF(a).cS(a,b)}, +aJn(a,b,c){return J.cb(a).eu(a,b,c)}, +aUP(a){return J.fo(a).vX(a)}, +aJo(a){return J.cb(a).nc(a)}, +aUQ(a,b){return J.cb(a).c_(a,b)}, +aUR(a,b){return J.fo(a).ash(a,b)}, +hI(a,b,c){return J.cb(a).eQ(a,b,c)}, +aJp(a,b,c,d){return J.cb(a).oS(a,b,c,d)}, +aJq(a,b,c){return J.zR(a).nf(a,b,c)}, +aUS(a,b){return J.ja(a).G(a,b)}, +aUT(a,b,c,d){return J.dW(a).au1(a,b,c,d)}, +aUU(a,b,c,d,e){return J.fo(a).kU(a,b,c,d,e)}, +A2(a,b,c){return J.dW(a).bm(a,b,c)}, +aUV(a){return J.cb(a).eg(a)}, +of(a,b){return J.cb(a).C(a,b)}, +aJr(a){return J.cb(a).eF(a)}, +aUW(a,b){return J.dW(a).K(a,b)}, +aF2(a){return J.Lf(a).an(a)}, +aJs(a,b){return J.fo(a).aV(a,b)}, +aUX(a,b){return J.dW(a).hP(a,b)}, +aUY(a,b){return J.aF(a).su(a,b)}, +aUZ(a,b,c,d,e){return J.cb(a).bC(a,b,c,d,e)}, +aF3(a,b){return J.cb(a).iA(a,b)}, +a66(a,b){return J.cb(a).dK(a,b)}, +aJt(a,b){return J.zR(a).l9(a,b)}, +aV_(a){return J.fo(a).LS(a)}, +aV0(a,b){return J.cb(a).wD(a,b)}, +aV1(a){return J.Lf(a).V(a)}, +Ly(a){return J.cb(a).dI(a)}, +aV2(a,b){return J.Lf(a).iv(a,b)}, +aV3(a){return J.cb(a).iw(a)}, +f0(a){return J.ja(a).k(a)}, +aJu(a){return J.zR(a).fb(a)}, +aV4(a){return J.zR(a).Cv(a)}, +aJv(a,b){return J.fo(a).a_a(a,b)}, +aF4(a,b){return J.cb(a).hJ(a,b)}, +aV5(a,b){return J.cb(a).KU(a,b)}, +wz:function wz(){}, +CJ:function CJ(){}, +CL:function CL(){}, +e:function e(){}, +p_:function p_(){}, +RD:function RD(){}, +m4:function m4(){}, +ls:function ls(){}, +rR:function rR(){}, +rS:function rS(){}, +q:function q(a){this.$ti=a}, +ag6:function ag6(a){this.$ti=a}, +cp:function cp(a,b,c){var _=this +_.a=a +_.b=b +_.c=0 +_.d=null +_.$ti=c}, +oV:function oV(){}, +wB:function wB(){}, +CM:function CM(){}, +lr:function lr(){}},A={ +b59(){var s=$.cz() +return s}, +b5X(a,b){if(a==="Google Inc.")return B.co +else if(a==="Apple Computer, Inc.")return B.W +else if(B.d.p(b,"Edg/"))return B.co +else if(a===""&&B.d.p(b,"firefox"))return B.bO +A.v7("WARNING: failed to detect current browser engine. Assuming this is a Chromium-compatible browser.") +return B.co}, +b5Z(){var s,r,q,p=null,o=self.window +o=o.navigator.platform +if(o==null)o=p +o.toString +s=o +o=self.window +r=o.navigator.userAgent +if(B.d.bz(s,"Mac")){o=self.window +o=o.navigator.maxTouchPoints +if(o==null)o=p +o=o==null?p:B.c.V(o) +q=o +if((q==null?0:q)>2)return B.aS +return B.bZ}else if(B.d.p(s.toLowerCase(),"iphone")||B.d.p(s.toLowerCase(),"ipad")||B.d.p(s.toLowerCase(),"ipod"))return B.aS +else if(B.d.p(r,"Android"))return B.hV +else if(B.d.bz(s,"Linux"))return B.l6 +else if(B.d.bz(s,"Win"))return B.vK +else return B.V9}, +b6J(){var s=$.e6() +return B.lE.p(0,s)}, +b6K(){var s=$.e6() +return s===B.aS&&B.d.p(self.window.navigator.userAgent,"OS 15_")}, +j8(){var s,r=A.zO(1,1) +if(A.k7(r,"webgl2",null)!=null){s=$.e6() +if(s===B.aS)return 1 +return 2}if(A.k7(r,"webgl",null)!=null)return 1 +return-1}, +aQb(){return self.Intl.v8BreakIterator!=null&&self.Intl.Segmenter!=null}, +al(){return $.bx.bn()}, +aRI(a){return a===B.eu?$.bx.bn().FilterMode.Nearest:$.bx.bn().FilterMode.Linear}, +aRK(a){return a===B.oz?$.bx.bn().MipmapMode.Linear:$.bx.bn().MipmapMode.None}, +b_G(a){var s=a.encodeToBytes() +return s==null?null:s}, +b_I(a,b){return a.setColorInt(b)}, +aRJ(a){var s,r,q,p=new Float32Array(16) +for(s=0;s<4;++s)for(r=s*4,q=0;q<4;++q)p[q*4+s]=a[r+q] +return p}, +a5O(a){var s,r,q,p=new Float32Array(9) +for(s=a.length,r=0;r<9;++r){q=B.pg[r] +if(q>>16&255)/255 +s[1]=(r>>>8&255)/255 +s[2]=(r&255)/255 +s[3]=(r>>>24&255)/255 +return s}, +fM(a){var s=new Float32Array(4) +s[0]=a.a +s[1]=a.b +s[2]=a.c +s[3]=a.d +return s}, +aIm(a){return new A.w(a[0],a[1],a[2],a[3])}, +Lp(a){var s=new Float32Array(12) +s[0]=a.a +s[1]=a.b +s[2]=a.c +s[3]=a.d +s[4]=a.e +s[5]=a.f +s[6]=a.r +s[7]=a.w +s[8]=a.x +s[9]=a.y +s[10]=a.z +s[11]=a.Q +return s}, +aID(a){var s,r=a.length,q=new Uint32Array(r) +for(s=0;s"))}, +b5c(a,b){return b+a}, +a5G(){var s=0,r=A.a1(t.e),q,p,o +var $async$a5G=A.a2(function(a,b){if(a===1)return A.Z(b,r) +while(true)switch(s){case 0:s=3 +return A.a7(A.aCG(A.b2N()),$async$a5G) +case 3:p=t.e +s=4 +return A.a7(A.jd(self.window.CanvasKitInit(p.a({locateFile:A.bM(A.b3j())})),p),$async$a5G) +case 4:o=b +if(A.aN7(o.ParagraphBuilder)&&!A.aQb())throw A.c(A.cj("The CanvasKit variant you are using only works on Chromium browsers. Please use a different CanvasKit variant, or use a Chromium browser.")) +q=o +s=1 +break +case 1:return A.a_(q,r)}}) +return A.a0($async$a5G,r)}, +aCG(a){var s=0,r=A.a1(t.H),q,p,o,n +var $async$aCG=A.a2(function(b,c){if(b===1)return A.Z(c,r) +while(true)switch(s){case 0:p=a.$ti,o=new A.bu(a,a.gu(a),p.h("bu")),p=p.h("af.E") +case 3:if(!o.q()){s=4 +break}n=o.d +s=5 +return A.a7(A.b3b(n==null?p.a(n):n),$async$aCG) +case 5:if(c){s=1 +break}s=3 +break +case 4:throw A.c(A.cj("Failed to download any of the following CanvasKit URLs: "+a.k(0))) +case 1:return A.a_(q,r)}}) +return A.a0($async$aCG,r)}, +b3b(a){var s,r,q,p,o,n=$.cR +n=(n==null?$.cR=A.hk(self.window.flutterConfiguration):n).b +n=n==null?null:A.aGc(n) +s=A.be(self.document,"script") +if(n!=null)s.nonce=n +s.src=A.b5F(a) +n=new A.aD($.aw,t.tq) +r=new A.bI(n,t.VY) +q=A.bc("loadCallback") +p=A.bc("errorCallback") +o=t.e +q.scJ(o.a(A.bM(new A.aCF(s,r)))) +p.scJ(o.a(A.bM(new A.aCE(s,r)))) +A.cE(s,"load",q.aI(),null) +A.cE(s,"error",p.aI(),null) +self.document.head.appendChild(s) +return n}, +ahm(a){var s="ColorFilter",r=new A.Qa(a),q=new A.eF(s,t.R) +q.h0(r,a.tY(),s,t.e) +r.b!==$&&A.bS() +r.b=q +return r}, +b2V(){var s,r=new Float32Array(20) +for(s=0;s<4;++s)r[B.OQ[s]]=1 +return $.b3G=r}, +b5E(a,b){var s +if((a.a>>>24&255)/255===0)return $.bx.bn().ColorFilter.MakeMatrix($.aTl()) +s=$.bx.bn().ColorFilter.MakeBlend(A.aD4($.a60(),a),$.aES()[b.a]) +if(s==null)throw A.c(A.bC("Invalid parameters for blend mode ColorFilter",null)) +return s}, +aVO(a){return new A.vz(a)}, +b5x(a){var s,r +switch(a.d.a){case 0:s=a.a +if(s==null||a.b==null)return null +s.toString +r=a.b +r.toString +return new A.AX(s,r) +case 1:s=a.c +if(s==null)return null +return new A.vz(s) +case 2:return B.Dp +case 3:return B.Dr +default:throw A.c(A.Q("Unknown mode "+a.k(0)+".type for ColorFilter."))}}, +aGq(a){var s=null +return new A.kp(B.U4,s,s,s,a,s)}, +aX7(){var s=t.qN +return new A.O9(A.a([],s),A.a([],s))}, +b60(a,b){var s,r,q,p,o +if(a.length===0||b.length===0)return null +s=new A.aDH(a,b) +r=new A.aDG(a,b) +q=B.b.cS(a,B.b.gL(b)) +p=B.b.rq(a,B.b.gO(b)) +o=q!==-1 +if(o&&p!==-1)if(q<=a.length-p)return s.$1(q) +else return r.$1(p) +else if(o)return s.$1(q) +else if(p!==-1)return r.$1(p) +else return null}, +aGO(a,b,c){var s=new self.window.flutterCanvasKit.Font(c),r=A.a([0],t.t) +s.getGlyphBounds(r,null,null) +return new A.tS(b,a,c)}, +b7U(a,b,c){var s,r,q,p,o,n,m,l,k,j,i="encoded image bytes" +if($.aUj()&&b==null&&c==null)return A.a95(a,i) +else{s=new A.MH(i,a,b,c) +r=$.bx.bn().MakeAnimatedImageFromEncoded(a) +if(r==null)A.T(A.wu("Failed to decode image data.\nImage source: encoded image bytes")) +q=b==null +if(!q||c!=null)if(r.getFrameCount()>1)$.e7().$1("targetWidth and targetHeight for multi-frame images not supported") +else{p=r.makeImageAtCurrentFrame() +if(!q&&b<=0)b=null +if(c!=null&&c<=0)c=null +q=b==null +if(q&&c!=null)b=B.c.an(c*(p.width()/p.height())) +else if(c==null&&!q)c=B.f.hS(b,p.width()/p.height()) +o=new A.ot() +n=o.uK(B.fa) +m=A.AZ() +q=A.a98(p,null) +l=p.width() +k=p.height() +b.toString +c.toString +n.jI(q,new A.w(0,0,0+l,0+k),new A.w(0,0,b,c),m) +k=m.b +k===$&&A.b() +k.m() +k=o.mR().wG(b,c).b +k===$&&A.b() +k=k.a +k===$&&A.b() +k=k.a +k.toString +j=A.b_G(k) +if(j==null)A.T(A.wu("Failed to re-size image")) +r=$.bx.bn().MakeAnimatedImageFromEncoded(j) +if(r==null)A.T(A.wu("Failed to decode re-sized image data.\nImage source: encoded image bytes"))}s.d=B.c.V(r.getFrameCount()) +s.e=B.c.V(r.getRepetitionCount()) +q=new A.eF("Codec",t.R) +q.h0(s,r,"Codec",t.e) +s.a!==$&&A.bS() +s.a=q +return s}}, +wu(a){return new A.Po(a)}, +a98(a,b){var s=new A.r0($,b),r=A.aW4(a,s,"SkImage",t.XY,t.e) +s.b!==$&&A.bS() +s.b=r +s.PX() +return s}, +aVN(a,b,c){return new A.AY(a,b,c,new A.A3(new A.a7Z()))}, +a95(a,b){var s=0,r=A.a1(t.Lh),q,p,o +var $async$a95=A.a2(function(c,d){if(c===1)return A.Z(d,r) +while(true)switch(s){case 0:o=A.b5Y(a) +if(o==null)throw A.c(A.wu("Failed to detect image file format using the file header.\nFile header was "+(!B.O.ga7(a)?"["+A.b5b(B.O.cf(a,0,Math.min(10,a.length)))+"]":"empty")+".\nImage source: "+b)) +p=A.aVN(o,a,b) +s=3 +return A.a7(p.pL(),$async$a95) +case 3:q=p +s=1 +break +case 1:return A.a_(q,r)}}) +return A.a0($async$a95,r)}, +aW4(a,b,c,d,e){var s=new A.Ng(A.aS(d),d.h("@<0>").N(e).h("Ng<1,2>")),r=new A.eF(c,e.h("eF<0>")) +r.h0(s,a,c,e) +s.a!==$&&A.bS() +s.a=r +return s}, +AZ(){var s,r=new self.window.flutterCanvasKit.Paint(),q=new A.vA(r,B.bN,B.a4,B.aG,B.dd,B.eu) +r.setAntiAlias(!0) +r.setColorInt(4278190080) +s=new A.eF("Paint",t.R) +s.h0(q,r,"Paint",t.e) +q.b!==$&&A.bS() +q.b=s +return q}, +MU(a,b){var s=new A.B_(b),r=new A.eF("Path",t.R) +r.h0(s,a,"Path",t.e) +s.a!==$&&A.bS() +s.a=r +return s}, +lV(){var s,r,q,p=$.aNk +if(p==null){p=$.cR +p=(p==null?$.cR=A.hk(self.window.flutterConfiguration):p).b +if(p==null)p=null +else{p=p.canvasKitMaximumSurfaces +if(p==null)p=null +p=p==null?null:B.c.V(p)}if(p==null)p=8 +s=A.be(self.document,"flt-canvas-container") +r=t.y1 +q=A.a([],r) +r=A.a([],r) +r=$.aNk=new A.Ue(new A.lU(s),Math.max(p,1),q,r) +p=r}return p}, +aVP(a,b){var s,r,q,p=null +t.S3.a(a) +s=t.e.a({}) +r=A.aHU(a.a,a.b) +s.fontFamilies=r +r=a.c +if(r!=null)s.fontSize=r +r=a.d +if(r!=null)s.heightMultiplier=r +q=a.x +q=b==null?p:b.c +switch(q){case null:case void 0:break +case B.C:A.aN8(s,!0) +break +case B.m0:A.aN8(s,!1) +break}r=a.f +if(r!=null||a.r!=null)s.fontStyle=A.aIF(r,a.r) +r=a.w +if(r!=null)s.forceStrutHeight=r +s.strutEnabled=!0 +return s}, +aFl(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1){return new A.B1(b,c,d,e,f,m,k,a0,g,h,j,q,a1,o,p,r,a,n,s,i,l)}, +aIF(a,b){var s=t.e.a({}) +if(a!=null)s.weight=$.aTV()[a.a] +if(b!=null)s.slant=$.aTU()[b.a] +return s}, +aHU(a,b){var s=A.a([],t.s) +if(a!=null)s.push(a) +if(b!=null&&!B.b.qX(b,new A.aCM(a)))B.b.E(s,b) +B.b.E(s,$.W().grb().gIN().as) +return s}, +b_n(a,b){var s=b.length +if(s<=B.zr.b)return a.c +if(s<=B.zs.b)return a.b +if(s<=B.zt.b)return a.a +return null}, +aQF(a,b){var s,r=new A.NY(t.e.a($.aTm().i(0,b).segment(a)[self.Symbol.iterator]()),t.yN),q=A.a([],t.t) +for(;r.q();){s=r.b +s===$&&A.b() +q.push(B.c.V(s.index))}q.push(a.length) +return new Uint32Array(A.em(q))}, +b6h(a){var s,r,q,p,o=A.aQa(a,a,$.aUf()),n=o.length,m=new Uint32Array((n+1)*2) +m[0]=0 +m[1]=0 +for(s=0;s>>16&255)/255 +s[1]=(a.gl(a)>>>8&255)/255 +s[2]=(a.gl(a)&255)/255 +s[3]=(a.gl(a)>>>24&255)/255 +return s}, +aVQ(a,b,c,d,e){var s,r,q,p,o="Vertices",n=d==null +if(!n&&B.U7.fJ(d,new A.a9e(b)))throw A.c(A.bC('"indices" values must be valid indices in the positions list.',null)) +s=$.aU6()[a.a] +r=new A.MZ(s,b,e,null,d) +q=$.bx.bn() +p=new A.eF(o,t.R) +p.h0(r,A.ai(q,"MakeVertices",[s,b,null,null,n?null:d]),o,t.e) +r.f!==$&&A.bS() +r.f=p +return r}, +aFu(){return self.window.navigator.clipboard!=null?new A.a9p():new A.acw()}, +aGz(){var s=$.cz() +return s===B.bO||self.window.navigator.clipboard==null?new A.acx():new A.a9q()}, +aQh(){var s=$.cR +return s==null?$.cR=A.hk(self.window.flutterConfiguration):s}, +hk(a){var s=new A.acS() +if(a!=null){s.a=!0 +s.b=a}return s}, +aGc(a){var s=a.nonce +return s==null?null:s}, +b_c(a){switch(a){case"DeviceOrientation.portraitUp":return"portrait-primary" +case"DeviceOrientation.portraitDown":return"portrait-secondary" +case"DeviceOrientation.landscapeLeft":return"landscape-primary" +case"DeviceOrientation.landscapeRight":return"landscape-secondary" +default:return null}}, +aKI(a){var s=a.innerHeight +return s==null?null:s}, +aKJ(a,b){return a.matchMedia(b)}, +aFK(a,b){return a.getComputedStyle(b)}, +aWM(a){return new A.aaO(a)}, +aWR(a){return a.userAgent}, +aWQ(a){var s=a.languages +if(s==null)s=null +else{s=J.hI(s,new A.aaR(),t.N) +s=A.V(s,!0,A.o(s).h("af.E"))}return s}, +be(a,b){return a.createElement(b)}, +cE(a,b,c,d){if(c!=null)if(d==null)a.addEventListener(b,c) +else a.addEventListener(b,c,d)}, +f7(a,b,c,d){if(c!=null)if(d==null)a.removeEventListener(b,c) +else a.removeEventListener(b,c,d)}, +b5A(a){return t.e.a(A.bM(a))}, +hi(a){var s=a.timeStamp +return s==null?null:s}, +aKA(a,b){a.textContent=b +return b}, +aaS(a,b){return a.cloneNode(b)}, +b5z(a){return A.be(self.document,a)}, +aWO(a){return a.tagName}, +aKo(a,b,c){var s=A.aA(c) +if(s==null)s=t.K.a(s) +return a.setAttribute(b,s)}, +aWN(a){var s +for(;a.firstChild!=null;){s=a.firstChild +s.toString +a.removeChild(s)}}, +aWJ(a,b){return A.x(a,"width",b)}, +aWE(a,b){return A.x(a,"height",b)}, +aKk(a,b){return A.x(a,"position",b)}, +aWH(a,b){return A.x(a,"top",b)}, +aWF(a,b){return A.x(a,"left",b)}, +aWI(a,b){return A.x(a,"visibility",b)}, +aWG(a,b){return A.x(a,"overflow",b)}, +x(a,b,c){a.setProperty(b,c,"")}, +aaP(a){var s=a.src +return s==null?null:s}, +aKp(a,b){a.src=b +return b}, +aQn(a){var s=A.be(self.document,"style") +if(a!=null)s.nonce=a +return s}, +zO(a,b){var s +$.aQu=$.aQu+1 +s=A.be(self.window.document,"canvas") +if(b!=null)A.vY(s,b) +if(a!=null)A.vX(s,a) +return s}, +vY(a,b){a.width=b +return b}, +vX(a,b){a.height=b +return b}, +k7(a,b,c){var s +if(c==null)return a.getContext(b) +else{s=A.aA(c) +if(s==null)s=t.K.a(s) +return a.getContext(b,s)}}, +aWL(a){var s=A.k7(a,"2d",null) +s.toString +return t.e.a(s)}, +aWK(a,b){var s +if(b===1){s=A.k7(a,"webgl",null) +s.toString +return t.e.a(s)}s=A.k7(a,"webgl2",null) +s.toString +return t.e.a(s)}, +aaM(a,b){var s=b==null?null:b +a.fillStyle=s +return s}, +aFD(a,b){a.lineWidth=b +return b}, +aaN(a,b){var s=b +a.strokeStyle=s +return s}, +aaL(a,b){if(b==null)a.fill() +else a.fill(b)}, +aKl(a,b,c,d){a.fillText(b,c,d)}, +aKm(a,b,c,d,e,f,g){return A.ai(a,"setTransform",[b,c,d,e,f,g])}, +aKn(a,b,c,d,e,f,g){return A.ai(a,"transform",[b,c,d,e,f,g])}, +aaK(a,b){if(b==null)a.clip() +else a.clip(b)}, +aFC(a,b){a.filter=b +return b}, +aFF(a,b){a.shadowOffsetX=b +return b}, +aFG(a,b){a.shadowOffsetY=b +return b}, +aFE(a,b){a.shadowColor=b +return b}, +zS(a){return A.b6v(a)}, +b6v(a){var s=0,r=A.a1(t.Lk),q,p=2,o,n,m,l,k +var $async$zS=A.a2(function(b,c){if(b===1){o=c +s=p}while(true)switch(s){case 0:p=4 +s=7 +return A.a7(A.jd(self.window.fetch(a),t.e),$async$zS) +case 7:n=c +q=new A.Pl(a,n) +s=1 +break +p=2 +s=6 +break +case 4:p=3 +k=o +m=A.ax(k) +throw A.c(new A.Pj(a,m)) +s=6 +break +case 3:s=2 +break +case 6:case 1:return A.a_(q,r) +case 2:return A.Z(o,r)}}) +return A.a0($async$zS,r)}, +aDY(a){var s=0,r=A.a1(t.pI),q +var $async$aDY=A.a2(function(b,c){if(b===1)return A.Z(c,r) +while(true)switch(s){case 0:s=3 +return A.a7(A.zS(a),$async$aDY) +case 3:q=c.gBX().qj() +s=1 +break +case 1:return A.a_(q,r)}}) +return A.a0($async$aDY,r)}, +aQm(a,b,c){var s,r +if(c==null)return new self.FontFace(a,b) +else{s=self.FontFace +r=A.aA(c) +if(r==null)r=t.K.a(r) +return new s(a,b,r)}}, +aKF(a){var s=a.height +return s==null?null:s}, +aKx(a,b){var s=b==null?null:b +a.value=s +return s}, +aKv(a){var s=a.selectionStart +return s==null?null:s}, +aKu(a){var s=a.selectionEnd +return s==null?null:s}, +aKw(a){var s=a.value +return s==null?null:s}, +ri(a){var s=a.code +return s==null?null:s}, +lh(a){var s=a.key +return s==null?null:s}, +aKy(a){var s=a.state +if(s==null)s=null +else{s=A.aIj(s) +s.toString}return s}, +b5y(a){var s=self +return new s.Blob(a)}, +aWP(a){return a.matches}, +aKz(a){var s=a.matches +return s==null?null:s}, +k8(a){var s=a.buttons +return s==null?null:s}, +aKC(a){var s=a.pointerId +return s==null?null:s}, +aFJ(a){var s=a.pointerType +return s==null?null:s}, +aKD(a){var s=a.tiltX +return s==null?null:s}, +aKE(a){var s=a.tiltY +return s==null?null:s}, +aKG(a){var s=a.wheelDeltaX +return s==null?null:s}, +aKH(a){var s=a.wheelDeltaY +return s==null?null:s}, +aWS(a){var s=a.identifier +return s==null?null:s}, +aaQ(a,b){a.type=b +return b}, +aKt(a,b){var s=b==null?null:b +a.value=s +return s}, +aFI(a){var s=a.value +return s==null?null:s}, +aFH(a){var s=a.disabled +return s==null?null:s}, +aKs(a,b){a.disabled=b +return b}, +aKr(a){var s=a.selectionStart +return s==null?null:s}, +aKq(a){var s=a.selectionEnd +return s==null?null:s}, +aKB(a,b,c){var s +if(c==null)return a.getContext(b) +else{s=A.aA(c) +if(s==null)s=t.K.a(s) +return a.getContext(b,s)}}, +lg(a,b,c){return a.insertRule(b,c)}, +dd(a,b,c){var s=t.e.a(A.bM(c)) +a.addEventListener(b,s) +return new A.O_(b,a,s)}, +b5B(a){return new self.ResizeObserver(A.bM(new A.aDx(a)))}, +b5F(a){if(self.window.trustedTypes!=null)return $.aUe().createScriptURL(a) +return a}, +aQp(a){var s,r +if(self.Intl.Segmenter==null)throw A.c(A.co("Intl.Segmenter() is not supported.")) +s=self.Intl.Segmenter +r=t.N +r=A.aA(A.aY(["granularity",a],r,r)) +if(r==null)r=t.K.a(r) +return new s([],r)}, +aQs(){var s,r +if(self.Intl.v8BreakIterator==null)throw A.c(A.co("v8BreakIterator is not supported.")) +s=self.Intl.v8BreakIterator +r=A.aA(B.Tc) +if(r==null)r=t.K.a(r) +return new s([],r)}, +b6f(){var s=$.en +s.toString +return s}, +a5Q(a,b){var s +if(b.j(0,B.e))return a +s=new A.bU(new Float32Array(16)) +s.aW(a) +s.au(0,b.a,b.b) +return s}, +aQx(a,b,c){var s=a.avq() +if(c!=null)A.aIB(s,A.a5Q(c,b).a) +return s}, +aEu(){var s=0,r=A.a1(t.z) +var $async$aEu=A.a2(function(a,b){if(a===1)return A.Z(b,r) +while(true)switch(s){case 0:if(!$.aHS){$.aHS=!0 +self.window.requestAnimationFrame(A.bM(new A.aEw()))}return A.a_(null,r)}}) +return A.a0($async$aEu,r)}, +aXw(a,b){var s=t.S,r=A.d5(null,t.H),q=A.a(["Roboto"],t.s) +s=new A.ade(a,A.aS(s),A.aS(s),b,B.b.pp(b,new A.adf()),B.b.pp(b,new A.adg()),B.b.pp(b,new A.adh()),B.b.pp(b,new A.adi()),B.b.pp(b,new A.adj()),B.b.pp(b,new A.adk()),r,q,A.aS(s)) +q=t.Te +s.b=new A.Ou(s,A.aS(q),A.A(t.N,q)) +return s}, +b2a(a,b,c){var s,r,q,p,o,n,m,l=A.a([],t.t),k=A.a([],c.h("q<0>")) +for(s=a.length,r=0,q=0,p=1,o=0;o"))}, +a5H(a){return A.b68(a)}, +b68(a){var s=0,r=A.a1(t.jU),q,p,o,n,m,l +var $async$a5H=A.a2(function(b,c){if(b===1)return A.Z(c,r) +while(true)switch(s){case 0:n={} +l=t.Lk +s=3 +return A.a7(A.zS(a.wY("FontManifest.json")),$async$a5H) +case 3:m=l.a(c) +if(!m.gJ1()){$.e7().$1("Font manifest does not exist at `"+m.a+"` - ignoring.") +q=new A.Cf(A.a([],t.z8)) +s=1 +break}p=B.cK.a2e(B.p6,t.X) +n.a=null +o=p.hr(new A.a2f(new A.aDM(n),[],t.kT)) +s=4 +return A.a7(m.gBX().C8(0,new A.aDN(o),t.H3),$async$a5H) +case 4:o.aA(0) +n=n.a +if(n==null)throw A.c(A.ms(u.u)) +n=J.hI(t.j.a(n),new A.aDO(),t.VW) +q=new A.Cf(A.V(n,!0,A.o(n).h("af.E"))) +s=1 +break +case 1:return A.a_(q,r)}}) +return A.a0($async$a5H,r)}, +aXv(a,b){return new A.Cd()}, +aQ5(a,b,c){var s,r,q,p,o,n,m,l=a.sheet +l.toString +s=l +l=" "+b +q=t.e +p=t.qr +o=p.h("n.E") +A.lg(s,l+" flt-scene-host {\n font: "+c+";\n }\n ",J.bF(A.cC(new A.eZ(s.cssRules,p),o,q).a)) +n=$.cz() +if(n===B.W)A.lg(s," "+b+" * {\n -webkit-tap-highlight-color: transparent;\n }\n ",J.bF(A.cC(new A.eZ(s.cssRules,p),o,q).a)) +if(n===B.bO)A.lg(s," "+b+" flt-paragraph,\n "+b+" flt-span {\n line-height: 100%;\n }\n ",J.bF(A.cC(new A.eZ(s.cssRules,p),o,q).a)) +A.lg(s,l+" flt-semantics input[type=range] {\n appearance: none;\n -webkit-appearance: none;\n width: 100%;\n position: absolute;\n border: none;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n }\n ",J.bF(A.cC(new A.eZ(s.cssRules,p),o,q).a)) +if(n===B.W)A.lg(s," "+b+" flt-semantics input[type=range]::-webkit-slider-thumb {\n -webkit-appearance: none;\n }\n ",J.bF(A.cC(new A.eZ(s.cssRules,p),o,q).a)) +A.lg(s,l+" input::selection {\n background-color: transparent;\n }\n ",J.bF(A.cC(new A.eZ(s.cssRules,p),o,q).a)) +A.lg(s,l+" textarea::selection {\n background-color: transparent;\n }\n ",J.bF(A.cC(new A.eZ(s.cssRules,p),o,q).a)) +A.lg(s,l+" flt-semantics input,\n "+b+" flt-semantics textarea,\n "+b+' flt-semantics [contentEditable="true"] {\n caret-color: transparent;\n }\n ',J.bF(A.cC(new A.eZ(s.cssRules,p),o,q).a)) +A.lg(s,l+" .flt-text-editing::placeholder {\n opacity: 0;\n }\n ",J.bF(A.cC(new A.eZ(s.cssRules,p),o,q).a)) +if(n!==B.co)l=n===B.W +else l=!0 +if(l)A.lg(s," "+b+" .transparentTextEditing:-webkit-autofill,\n "+b+" .transparentTextEditing:-webkit-autofill:hover,\n "+b+" .transparentTextEditing:-webkit-autofill:focus,\n "+b+" .transparentTextEditing:-webkit-autofill:active {\n opacity: 0 !important;\n }\n ",J.bF(A.cC(new A.eZ(s.cssRules,p),o,q).a)) +if(B.d.p(self.window.navigator.userAgent,"Edg/"))try{A.lg(s," "+b+" input::-ms-reveal {\n display: none;\n }\n ",J.bF(A.cC(new A.eZ(s.cssRules,p),o,q).a))}catch(m){l=A.ax(m) +if(q.b(l)){r=l +self.window.console.warn(J.f0(r))}else throw m}}, +aVm(a,b,c){var s,r,q,p,o,n,m,l=A.be(self.document,"flt-canvas"),k=A.a([],t.J) +$.c4() +s=self.window.devicePixelRatio +if(s===0)s=1 +r=a.a +q=a.c-r +p=A.a7K(q) +o=a.b +n=a.d-o +m=A.a7J(n) +n=new A.a8t(A.a7K(q),A.a7J(n),c,A.a([],t.vj),A.dQ()) +s=new A.mu(a,l,n,k,p,m,s,c,b) +A.x(l.style,"position","absolute") +s.z=B.c.dP(r)-1 +s.Q=B.c.dP(o)-1 +s.Ty() +n.z=l +s.Sd() +return s}, +a7K(a){var s +$.c4() +s=self.window.devicePixelRatio +if(s===0)s=1 +return B.c.dk((a+1)*s)+2}, +a7J(a){var s +$.c4() +s=self.window.devicePixelRatio +if(s===0)s=1 +return B.c.dk((a+1)*s)+2}, +aVn(a){a.remove()}, +aDo(a){if(a==null)return null +switch(a.a){case 3:return"source-over" +case 5:return"source-in" +case 7:return"source-out" +case 9:return"source-atop" +case 4:return"destination-over" +case 6:return"destination-in" +case 8:return"destination-out" +case 10:return"destination-atop" +case 12:return"lighten" +case 1:return"copy" +case 11:return"xor" +case 24:case 13:return"multiply" +case 14:return"screen" +case 15:return"overlay" +case 16:return"darken" +case 17:return"lighten" +case 18:return"color-dodge" +case 19:return"color-burn" +case 20:return"hard-light" +case 21:return"soft-light" +case 22:return"difference" +case 23:return"exclusion" +case 25:return"hue" +case 26:return"saturation" +case 27:return"color" +case 28:return"luminosity" +default:throw A.c(A.co("Flutter Web does not support the blend mode: "+a.k(0)))}}, +aQ9(a){switch(a.a){case 0:return B.Yx +case 3:return B.Yy +case 5:return B.Yz +case 7:return B.YB +case 9:return B.YC +case 4:return B.YD +case 6:return B.YE +case 8:return B.YF +case 10:return B.YG +case 12:return B.YH +case 1:return B.YI +case 11:return B.YA +case 24:case 13:return B.YR +case 14:return B.YS +case 15:return B.YV +case 16:return B.YT +case 17:return B.YU +case 18:return B.YW +case 19:return B.YX +case 20:return B.YY +case 21:return B.YK +case 22:return B.YL +case 23:return B.YM +case 25:return B.YN +case 26:return B.YO +case 27:return B.YP +case 28:return B.YQ +default:return B.YJ}}, +aRE(a){if(a==null)return null +switch(a.a){case 0:return"butt" +case 1:return"round" +case 2:default:return"square"}}, +b7X(a){switch(a.a){case 1:return"round" +case 2:return"bevel" +case 0:default:return"miter"}}, +aHN(a4,a5,a6,a7){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1=t.J,a2=A.a([],a1),a3=a4.length +for(s=null,r=null,q=0;q>>16&255)/255,0,0,0,0,(r>>>8&255)/255,0,0,0,0,(r&255)/255,0,0,0,1,0],t.n),"recolor") +s.xm("recolor",m,1,0,0,0,6,n) +q=s.bk() +break +case 15:r=A.aQ9(B.mP) +r.toString +q=A.aP7(a,r,!0) +break +case 26:case 18:case 19:case 25:case 27:case 28:case 24:case 14:case 16:case 17:case 20:case 21:case 22:case 23:r=A.aQ9(b) +r.toString +q=A.aP7(a,r,!1) +break +case 1:case 2:case 6:case 8:case 4:case 0:case 3:throw A.c(A.co("Blend mode not supported in HTML renderer: "+b.k(0))) +default:q=null}return q}, +un(){var s,r=A.aaS($.aJg(),!1),q=self.document.createElementNS("http://www.w3.org/2000/svg","filter"),p=$.aNo+1 +$.aNo=p +p="_fcf"+p +q.id=p +s=q.filterUnits +s.toString +A.amR(s,2) +s=q.x.baseVal +s.toString +A.amT(s,"0%") +s=q.y.baseVal +s.toString +A.amT(s,"0%") +s=q.width.baseVal +s.toString +A.amT(s,"100%") +s=q.height.baseVal +s.toString +A.amT(s,"100%") +return new A.apD(p,r,q)}, +aRH(a){var s=A.un() +s.Db(a,"comp") +return s.bk()}, +aP7(a,b,c){var s="flood",r="SourceGraphic",q=A.un(),p=A.dm(a.a) +q.pm(p,"1",s) +p=b.b +if(c)q.Lz(r,s,p) +else q.Lz(s,r,p) +return q.bk()}, +L9(a,b){var s,r,q,p,o=a.a,n=a.c,m=Math.min(o,n),l=a.b,k=a.d,j=Math.min(l,k) +n-=o +s=Math.abs(n) +k-=l +r=Math.abs(k) +q=b.b +p=b.c +if(p==null)p=0 +if(q===B.D&&p>0){q=p/2 +m-=q +j-=q +s=Math.max(0,s-p) +r=Math.max(0,r-p)}if(m!==o||j!==l||s!==n||r!==k)return new A.w(m,j,m+s,j+r) +return a}, +La(a,b,c,d){var s,r,q,p,o,n,m,l,k,j=A.be(self.document,c),i=b.b===B.D,h=b.c +if(h==null)h=0 +if(d.vX(0)){s=a.a +r=a.b +q="translate("+A.h(s)+"px, "+A.h(r)+"px)"}else{s=new Float32Array(16) +p=new A.bU(s) +p.aW(d) +r=a.a +o=a.b +p.au(0,r,o) +q=A.jV(s) +s=r +r=o}n=j.style +A.x(n,"position","absolute") +A.x(n,"transform-origin","0 0 0") +A.x(n,"transform",q) +m=A.dm(b.r) +o=b.x +if(o!=null){l=o.b +o=$.cz() +if(o===B.W&&!i){A.x(n,"box-shadow","0px 0px "+A.h(l*2)+"px "+m) +o=b.r +m=A.dm(((B.c.an((1-Math.min(Math.sqrt(l)/6.283185307179586,1))*(o>>>24&255))&255)<<24|o&16777215)>>>0)}else A.x(n,"filter","blur("+A.h(l)+"px)")}A.x(n,"width",A.h(a.c-s)+"px") +A.x(n,"height",A.h(a.d-r)+"px") +if(i)A.x(n,"border",A.o2(h)+" solid "+m) +else{A.x(n,"background-color",m) +k=A.b3y(b.w,a) +A.x(n,"background-image",k!==""?"url('"+k+"'":"")}return j}, +b3y(a,b){var s +if(a!=null){if(a instanceof A.rl){s=A.aaP(a.e.gB4()) +return s==null?"":s}if(a instanceof A.w5)return A.bQ(a.v1(b,1,!0))}return""}, +aQ6(a,b){var s,r,q=b.e,p=b.r +if(q===p){s=b.z +if(q===s){r=b.x +s=q===r&&q===b.f&&p===b.w&&s===b.Q&&r===b.y}else s=!1}else s=!1 +if(s){A.x(a,"border-radius",A.o2(b.z)) +return}A.x(a,"border-top-left-radius",A.o2(q)+" "+A.o2(b.f)) +A.x(a,"border-top-right-radius",A.o2(p)+" "+A.o2(b.w)) +A.x(a,"border-bottom-left-radius",A.o2(b.z)+" "+A.o2(b.Q)) +A.x(a,"border-bottom-right-radius",A.o2(b.x)+" "+A.o2(b.y))}, +o2(a){return B.c.af(a===0?1:a,3)+"px"}, +aFr(a,b,c){var s,r,q,p,o,n,m +if(0===b){c.push(new A.k(a.c,a.d)) +c.push(new A.k(a.e,a.f)) +return}s=new A.WP() +a.NB(s) +r=s.a +r.toString +q=s.b +q.toString +p=a.b +o=a.f +if(A.eB(p,a.d,o)){n=r.f +if(!A.eB(p,n,o))m=r.f=q.b=Math.abs(n-p)0){s=b[7] +b[9]=s +b[5]=s +if(o===2){s=b[13] +b[15]=s +b[11]=s}}return o}, +b2R(b0,b1,b2){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9=b0.length +if(0===a9)for(s=0;s<8;++s)b2[s]=b1[s] +else{r=b0[0] +for(q=a9-1,p=0,s=0;s0))return 0 +s=1 +r=0}q=h-i +p=g-h +o=f-g +do{n=(r+s)/2 +m=i+q*n +l=h+p*n +k=m+(l-m)*n +j=k+(l+(g+o*n-l)*n-k)*n +if(j===0)return n +if(j<0)s=n +else r=n}while(Math.abs(r-s)>0.0000152587890625) +return(s+r)/2}, +aQA(a,b,c,d,e){return(((d+3*(b-c)-a)*e+3*(c-b-b+a))*e+3*(b-a))*e+a}, +b5d(b1,b2,b3,b4){var s,r,q,p,o,n,m,l=b1[7],k=b1[0],j=b1[1],i=b1[2],h=b1[3],g=b1[4],f=b1[5],e=b1[6],d=b2===0,c=!d?b2:b3,b=1-c,a=k*b+i*c,a0=j*b+h*c,a1=i*b+g*c,a2=h*b+f*c,a3=g*b+e*c,a4=f*b+l*c,a5=a*b+a1*c,a6=a0*b+a2*c,a7=a1*b+a3*c,a8=a2*b+a4*c,a9=a5*b+a7*c,b0=a6*b+a8*c +if(d){b4[0]=k +b4[1]=j +b4[2]=a +b4[3]=a0 +b4[4]=a5 +b4[5]=a6 +b4[6]=a9 +b4[7]=b0 +return}if(b3===1){b4[0]=a9 +b4[1]=b0 +b4[2]=a7 +b4[3]=a8 +b4[4]=a3 +b4[5]=a4 +b4[6]=e +b4[7]=l +return}s=(b3-b2)/(1-b2) +d=1-s +r=a9*d+a7*s +q=b0*d+a8*s +p=a7*d+a3*s +o=a8*d+a4*s +n=r*d+p*s +m=q*d+o*s +b4[0]=a9 +b4[1]=b0 +b4[2]=r +b4[3]=q +b4[4]=n +b4[5]=m +b4[6]=n*d+(p*d+(a3*d+e*s)*s)*s +b4[7]=m*d+(o*d+(a4*d+l*s)*s)*s}, +aH3(){var s=new A.pL(A.aGB(),B.bH) +s.Rt() +return s}, +aNl(a){var s,r,q=A.aGB(),p=a.a,o=p.w,n=p.d,m=p.z +q.Q=!0 +q.cx=0 +q.Dp() +q.Gf(n) +q.Gg(o) +q.Ge(m) +B.O.md(q.r,0,p.r) +B.f0.md(q.f,0,p.f) +s=p.y +if(s==null)q.y=null +else{r=q.y +r.toString +B.f0.md(r,0,s)}s=p.Q +q.Q=s +if(!s){q.a=p.a +q.b=p.b +q.as=p.as}q.cx=p.cx +q.at=p.at +q.ax=p.ax +q.ay=p.ay +q.ch=p.ch +q.CW=p.CW +q=new A.pL(q,B.bH) +q.Ez(a) +return q}, +b2A(a,b,c){var s +if(0===c)s=0===b||360===b +else s=!1 +if(s)return new A.k(a.c,a.gaK().b) +return null}, +aCw(a,b,c,d){var s=a+b +if(s<=c)return d +return Math.min(c/s,d)}, +aGA(a,b){var s=new A.aja(a,b,a.w) +if(a.Q)a.Es() +if(!a.as)s.z=a.w +return s}, +b1H(a,b,c,d,e,f,g,h){if(Math.abs(a*2/3+g/3-c)>0.5)return!0 +if(Math.abs(b*2/3+h/3-d)>0.5)return!0 +if(Math.abs(a/3+g*2/3-e)>0.5)return!0 +if(Math.abs(b/3+h*2/3-f)>0.5)return!0 +return!1}, +aHx(a,b,c,a0,a1,a2,a3,a4,a5,a6,a7,a8){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d +if(B.f.el(a7-a6,10)!==0&&A.b1H(a,b,c,a0,a1,a2,a3,a4)){s=(a+c)/2 +r=(b+a0)/2 +q=(c+a1)/2 +p=(a0+a2)/2 +o=(a1+a3)/2 +n=(a2+a4)/2 +m=(s+q)/2 +l=(r+p)/2 +k=(q+o)/2 +j=(p+n)/2 +i=(m+k)/2 +h=(l+j)/2 +g=a6+a7>>>1 +a5=A.aHx(i,h,k,j,o,n,a3,a4,A.aHx(a,b,s,r,m,l,i,h,a5,a6,g,a8),g,a7,a8)}else{f=a-a3 +e=b-a4 +d=a5+Math.sqrt(f*f+e*e) +if(d>a5)a8.push(new A.zk(4,d,A.a([a,b,c,a0,a1,a2,a3,a4],t.n))) +a5=d}return a5}, +b1I(a,b,c,d,e,f){if(Math.abs(c/2-(a+e)/4)>0.5)return!0 +if(Math.abs(d/2-(b+f)/4)>0.5)return!0 +return!1}, +a5y(a,b){var s=Math.sqrt(a*a+b*b) +return s<1e-9?B.e:new A.k(a/s,b/s)}, +b2S(a,a0,a1,a2){var s,r,q,p=a[5],o=a[0],n=a[1],m=a[2],l=a[3],k=a[4],j=a0===0,i=!j?a0:a1,h=1-i,g=o*h+m*i,f=n*h+l*i,e=m*h+k*i,d=l*h+p*i,c=g*h+e*i,b=f*h+d*i +if(j){a2[0]=o +a2[1]=n +a2[2]=g +a2[3]=f +a2[4]=c +a2[5]=b +return}if(a1===1){a2[0]=c +a2[1]=b +a2[2]=e +a2[3]=d +a2[4]=k +a2[5]=p +return}s=(a1-a0)/(1-a0) +j=1-s +r=c*j+e*s +q=b*j+d*s +a2[0]=c +a2[1]=b +a2[2]=r +a2[3]=q +a2[4]=r*j+(e*j+k*s)*s +a2[5]=q*j+(d*j+p*s)*s}, +aGB(){var s=new Float32Array(16) +s=new A.x8(s,new Uint8Array(8)) +s.e=s.c=8 +s.CW=172 +return s}, +aMm(a){var s,r=new A.x8(a.f,a.r) +r.e=a.e +r.w=a.w +r.c=a.c +r.d=a.d +r.x=a.x +r.z=a.z +r.y=a.y +s=a.Q +r.Q=s +if(!s){r.a=a.a +r.b=a.b +r.as=a.as}r.cx=a.cx +r.at=a.at +r.ax=a.ax +r.ay=a.ay +r.ch=a.ch +r.CW=a.CW +return r}, +aYU(a,b,c){var s,r,q=a.d,p=a.c,o=new Float32Array(p*2),n=a.f,m=q*2 +for(s=0;s0?1:0 +return s}, +a5R(a,b){var s +if(a<0){a=-a +b=-b}if(b===0||a===0||a>=b)return null +s=a/b +if(isNaN(s))return null +if(s===0)return null +return s}, +b6M(a){var s,r,q=a.e,p=a.r +if(q+p!==a.c-a.a)return!1 +s=a.f +r=a.w +if(s+r!==a.d-a.b)return!1 +if(q!==a.z||p!==a.x||s!==a.Q||r!==a.y)return!1 +return!0}, +aGZ(a,b,c,d,e,f){return new A.aoF(e-2*c+a,f-2*d+b,2*(c-a),2*(d-b),a,b)}, +ajd(a,b,c,d,e,f){if(d===f)return A.eB(c,a,e)&&a!==e +else return a===c&&b===d}, +aYW(a){var s,r,q,p,o=a[0],n=a[1],m=a[2],l=a[3],k=a[4],j=a[5],i=n-l,h=A.a5R(i,i-l+j) +if(h!=null){s=o+h*(m-o) +r=n+h*(l-n) +q=m+h*(k-m) +p=l+h*(j-l) +a[2]=s +a[3]=r +a[4]=s+h*(q-s) +a[5]=r+h*(p-r) +a[6]=q +a[7]=p +a[8]=k +a[9]=j +return 1}a[3]=Math.abs(i)=q}, +b83(a,b,c,d){var s,r,q,p,o=a[1],n=a[3] +if(!A.eB(o,c,n))return +s=a[0] +r=a[2] +if(!A.eB(s,b,r))return +q=r-s +p=n-o +if(!(Math.abs((b-s)*p-q*(c-o))<0.000244140625))return +d.push(new A.k(q,p))}, +b84(a,b,c,d){var s,r,q,p,o,n,m,l,k,j,i=a[1],h=a[3],g=a[5] +if(!A.eB(i,c,h)&&!A.eB(h,c,g))return +s=a[0] +r=a[2] +q=a[4] +if(!A.eB(s,b,r)&&!A.eB(r,b,q))return +p=new A.nm() +o=p.n4(i-2*h+g,2*(h-i),i-c) +for(n=q-2*r+s,m=2*(r-s),l=0;l30)B.b.fz($.o5,0).d.m()}else a.d.m()}}, +ajh(a,b){if(a<=0)return b*0.1 +else return Math.min(Math.max(b*0.5,a*10),b)}, +b2Z(a7,a8,a9){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,a2,a3,a4,a5,a6 +if(a7!=null){s=a7.a +s=s[15]===1&&s[0]===1&&s[1]===0&&s[2]===0&&s[3]===0&&s[4]===0&&s[5]===1&&s[6]===0&&s[7]===0&&s[8]===0&&s[9]===0&&s[10]===1&&s[11]===0}else s=!0 +if(s)return 1 +r=a7.a +s=r[12] +q=r[15] +p=s*q +o=r[13] +n=o*q +m=r[3] +l=m*a8 +k=r[7] +j=k*a9 +i=1/(l+j+q) +h=r[0] +g=h*a8 +f=r[4] +e=f*a9 +d=(g+e+s)*i +c=r[1] +b=c*a8 +a=r[5] +a0=a*a9 +a1=(b+a0+o)*i +a2=Math.min(p,d) +a3=Math.max(p,d) +a4=Math.min(n,a1) +a5=Math.max(n,a1) +i=1/(m*0+j+q) +d=(h*0+e+s)*i +a1=(c*0+a0+o)*i +p=Math.min(a2,d) +a3=Math.max(a3,d) +n=Math.min(a4,a1) +a5=Math.max(a5,a1) +i=1/(l+k*0+q) +d=(g+f*0+s)*i +a1=(b+a*0+o)*i +p=Math.min(p,d) +a3=Math.max(a3,d) +n=Math.min(n,a1) +a6=Math.min((a3-p)/a8,(Math.max(a5,a1)-n)/a9) +if(a6<1e-9||a6===1)return 1 +if(a6>1){a6=Math.min(4,B.c.dk(a6/2)*2) +s=a8*a9 +if(s*a6*a6>4194304&&a6>2)a6=3355443.2/s}else a6=Math.max(2/B.c.dP(2/a6),0.0001) +return a6}, +v1(a){var s,r=a.a,q=r.x,p=q!=null?0+q.b*2:0 +r=r.c +s=r==null +if((s?0:r)!==0)p+=(s?0:r)*0.70710678118 +return p}, +b3_(a9,b0){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,a2,a3,a4,a5,a6=a9[0],a7=a9[1],a8=a9.length +for(s=a7,r=a6,q=2;q>>16&255)/255 +m[1]=(i.gl(i)>>>8&255)/255 +m[2]=(i.gl(i)&255)/255 +m[3]=(i.gl(i)>>>24&255)/255 +j[0]=0 +h=4 +g=1}else{h=0 +g=0}for(k=a2.length,f=0;f>>16&255)/255 +h=e+1 +m[e]=(d.gl(i)>>>8&255)/255 +e=h+1 +m[h]=(d.gl(i)&255)/255 +h=e+1 +m[e]=(d.gl(i)>>>24&255)/255}for(k=a3.length,f=0;f>>16&255)/255 +h=e+1 +m[e]=(i.gl(i)>>>8&255)/255 +m[h]=(i.gl(i)&255)/255 +m[h+1]=(i.gl(i)>>>24&255)/255 +j[g]=1}b=4*n +for(a=0;a>>2 +l[a]=(m[a+4]-m[a])/(j[g+1]-j[g])}l[b]=0 +l[b+1]=0 +l[b+2]=0 +l[b+3]=0 +for(a=0;a 1.0) {") +m.push(" "+a.goz().a+" = vec4(0, 0, 0, 0);") +m.push(" return;") +m.push("}")}return o}, +aQo(a){var s,r +if(a==null)return null +switch(a.d.a){case 0:s=a.a +if(s==null||a.b==null)return null +s.toString +r=a.b +r.toString +return new A.wX(s,r) +case 1:s=a.c +if(s==null)return null +return new A.wV(s) +case 2:throw A.c(A.co("ColorFilter.linearToSrgbGamma not implemented for HTML renderer")) +case 3:throw A.c(A.co("ColorFilter.srgbToLinearGamma not implemented for HTML renderer.")) +default:throw A.c(A.Q("Unknown mode "+a.k(0)+".type for ColorFilter."))}}, +aN1(a){return new A.Ty(A.a([],t.zz),A.a([],t.fe),a===2,!1,new A.ck(""))}, +Tz(a){return new A.Ty(A.a([],t.zz),A.a([],t.fe),a===2,!0,new A.ck(""))}, +b_y(a){switch(a){case 0:return"bool" +case 1:return"int" +case 2:return"float" +case 3:return"bvec2" +case 4:return"bvec3" +case 5:return"bvec4" +case 6:return"ivec2" +case 7:return"ivec3" +case 8:return"ivec4" +case 9:return"vec2" +case 10:return"vec3" +case 11:return"vec4" +case 12:return"mat2" +case 13:return"mat3" +case 14:return"mat4" +case 15:return"sampler1D" +case 16:return"sampler2D" +case 17:return"sampler3D" +case 18:return"void"}throw A.c(A.bC(null,null))}, +aHh(){var s,r=$.aNV +if(r==null){r=$.dl +s=A.aN1(r==null?$.dl=A.j8():r) +s.mB(11,"position") +s.mB(11,"color") +s.em(14,"u_ctransform") +s.em(11,"u_scale") +s.em(11,"u_shift") +s.U7(11,"v_color") +r=A.a([],t.s) +s.c.push(new A.lR("main",r)) +r.push(u.y) +r.push("v_color = color.zyxw;") +r=$.aNV=s.bk()}return r}, +aNX(){var s,r=$.aNW +if(r==null){r=$.dl +s=A.aN1(r==null?$.dl=A.j8():r) +s.mB(11,"position") +s.em(14,"u_ctransform") +s.em(11,"u_scale") +s.em(11,"u_textransform") +s.em(11,"u_shift") +s.U7(9,"v_texcoord") +r=A.a([],t.s) +s.c.push(new A.lR("main",r)) +r.push(u.y) +r.push("v_texcoord = vec2((u_textransform.z + position.x) * u_textransform.x, ((u_textransform.w + position.y) * u_textransform.y));") +r=$.aNW=s.bk()}return r}, +aL7(a,b,c){var s,r,q,p="texture2D",o=$.dl,n=A.Tz(o==null?$.dl=A.j8():o) +n.e=1 +n.mB(9,"v_texcoord") +n.em(16,"u_texture") +o=A.a([],t.s) +s=new A.lR("main",o) +n.c.push(s) +if(!a)r=b===B.V&&c===B.V +else r=!0 +if(r){r=n.goz() +q=n.y?"texture":p +o.push(r.a+" = "+q+"(u_texture, v_texcoord);")}else{s.Uf("v_texcoord.x","u",b) +s.Uf("v_texcoord.y","v",c) +o.push("vec2 uv = vec2(u, v);") +r=n.goz() +q=n.y?"texture":p +o.push(r.a+" = "+q+"(u_texture, uv);")}return n.bk()}, +b5j(a){var s,r,q,p=$.aEn,o=p.length +if(o!==0)try{if(o>1)B.b.dK(p,new A.aDv()) +for(p=$.aEn,o=p.length,r=0;r=s)return!1 +if(a[n]!==o.charCodeAt(p))continue $label0$0}return!0}return!1}, +aRv(a){$.qo.push(a)}, +aE1(a){return A.b6B(a)}, +b6B(a){var s=0,r=A.a1(t.H),q,p,o,n +var $async$aE1=A.a2(function(b,c){if(b===1)return A.Z(c,r) +while(true)switch(s){case 0:n={} +if($.L4!==B.o9){s=1 +break}$.L4=B.KL +p=$.cR +if(p==null)p=$.cR=A.hk(self.window.flutterConfiguration) +if(a!=null)p.b=a +A.b7E("ext.flutter.disassemble",new A.aE3()) +n.a=!1 +$.aRx=new A.aE4(n) +n=$.cR +n=(n==null?$.cR=A.hk(self.window.flutterConfiguration):n).b +if(n==null)n=null +else{n=n.assetBase +if(n==null)n=null}o=new A.a6C(n) +A.b4o(o) +s=3 +return A.a7(A.oJ(A.a([new A.aE5().$0(),A.a5v()],t.mo),t.H),$async$aE1) +case 3:$.L4=B.oa +case 1:return A.a_(q,r)}}) +return A.a0($async$aE1,r)}, +aIr(){var s=0,r=A.a1(t.H),q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a +var $async$aIr=A.a2(function(a0,a1){if(a0===1)return A.Z(a1,r) +while(true)switch(s){case 0:if($.L4!==B.oa){s=1 +break}$.L4=B.KM +p=$.e6() +if($.aGL==null)$.aGL=A.aZH(p===B.bZ) +if($.en==null){o=$.cR +o=(o==null?$.cR=A.hk(self.window.flutterConfiguration):o).b +o=o==null?null:o.hostElement +n=A.aX8(o) +m=new A.OS(n) +l=$.cZ() +l.r=A.aWu(o) +o=$.W() +k=t.N +n.Xp(0,A.aY(["flt-renderer",o.gZf()+" (auto-selected)","flt-build-mode","release","spellcheck","false"],k,k)) +j=m.f=A.be(self.document,"flutter-view") +i=m.r=A.be(self.document,"flt-glass-pane") +n.Ux(j) +j.appendChild(i) +if(i.attachShadow==null)A.T(A.a3("ShadowDOM is not supported in this browser.")) +n=A.aA(A.aY(["mode","open","delegatesFocus",!1],k,t.z)) +if(n==null)n=t.K.a(n) +n=m.w=i.attachShadow(n) +i=$.cR +k=(i==null?$.cR=A.hk(self.window.flutterConfiguration):i).b +h=A.aQn(k==null?null:A.aGc(k)) +h.id="flt-internals-stylesheet" +n.appendChild(h) +A.aQ5(h,"","normal normal 14px sans-serif") +k=$.cR +k=(k==null?$.cR=A.hk(self.window.flutterConfiguration):k).b +k=k==null?null:A.aGc(k) +g=A.be(self.document,"flt-text-editing-host") +f=A.aQn(k) +f.id="flt-text-editing-stylesheet" +j.appendChild(f) +A.aQ5(f,"flutter-view","normal normal 14px sans-serif") +j.appendChild(g) +m.x=g +j=A.be(self.document,"flt-scene-host") +A.x(j.style,"pointer-events","none") +m.b=j +o.Zn(0,m) +e=A.be(self.document,"flt-semantics-host") +o=e.style +A.x(o,"position","absolute") +A.x(o,"transform-origin","0 0 0") +m.d=e +m.a_7() +o=$.eP +d=(o==null?$.eP=A.mJ():o).w.a.Yy() +c=A.be(self.document,"flt-announcement-host") +b=A.aJw(B.j6) +a=A.aJw(B.j7) +c.append(b) +c.append(a) +m.y=new A.a67(b,a) +n.append(d) +o=m.b +o.toString +n.append(o) +n.append(c) +m.f.appendChild(e) +o=$.cR +if((o==null?$.cR=A.hk(self.window.flutterConfiguration):o).ganN())A.x(m.b.style,"opacity","0.3") +o=$.agh +if(o==null)o=$.agh=A.aY2() +n=m.f +o=o.gtM() +if($.aMp==null){o=new A.RI(n,new A.ajS(A.A(t.S,t.mm)),o) +n=$.cz() +if(n===B.W)p=p===B.aS +else p=!1 +if(p)$.aSl().aw8() +o.e=o.a8K() +$.aMp=o}p=l.r +p.gYk(p).Jr(m.gaeV()) +$.en=m}$.L4=B.KN +case 1:return A.a_(q,r)}}) +return A.a0($async$aIr,r)}, +b4o(a){if(a===$.zJ)return +$.zJ=a}, +a5v(){var s=0,r=A.a1(t.H),q,p,o +var $async$a5v=A.a2(function(a,b){if(a===1)return A.Z(b,r) +while(true)switch(s){case 0:p=$.W() +p.grb().a0(0) +s=$.zJ!=null?2:3 +break +case 2:p=p.grb() +q=$.zJ +q.toString +o=p +s=5 +return A.a7(A.a5H(q),$async$a5v) +case 5:s=4 +return A.a7(o.lK(b),$async$a5v) +case 4:case 3:return A.a_(null,r)}}) +return A.a0($async$a5v,r)}, +aXp(a,b){return t.e.a({initializeEngine:A.bM(new A.acT(b)),autoStart:A.bM(new A.acU(a))})}, +aXo(a){return t.e.a({runApp:A.bM(new A.acR(a))})}, +aIn(a,b){var s=A.bM(new A.aDT(a,b)) +return new self.Promise(s)}, +aHR(a){var s=B.c.V(a) +return A.dp(B.c.V((a-s)*1000),s)}, +b2H(a,b){var s={} +s.a=null +return new A.aCm(s,a,b)}, +aY2(){var s=new A.PJ(A.A(t.N,t.e)) +s.a6f() +return s}, +aY4(a){switch(a.a){case 0:case 4:return new A.D2(A.aIH("M,2\u201ew\u2211wa2\u03a9q\u2021qb2\u02dbx\u2248xc3 c\xd4j\u2206jd2\xfee\xb4ef2\xfeu\xa8ug2\xfe\xff\u02c6ih3 h\xce\xff\u2202di3 i\xc7c\xe7cj2\xd3h\u02d9hk2\u02c7\xff\u2020tl5 l@l\xfe\xff|l\u02dcnm1~mn3 n\u0131\xff\u222bbo2\xaer\u2030rp2\xacl\xd2lq2\xc6a\xe6ar3 r\u03c0p\u220fps3 s\xd8o\xf8ot2\xa5y\xc1yu3 u\xa9g\u02ddgv2\u02dak\uf8ffkw2\xc2z\xc5zx2\u0152q\u0153qy5 y\xcff\u0192f\u02c7z\u03a9zz5 z\xa5y\u2021y\u2039\xff\u203aw.2\u221av\u25cav;4\xb5m\xcds\xd3m\xdfs/2\xb8z\u03a9z")) +case 3:return new A.D2(A.aIH(';b1{bc1&cf1[fg1]gm2y')) +case 1:case 2:case 5:return new A.D2(A.aIH("8a2@q\u03a9qk1&kq3@q\xc6a\xe6aw2xy2\xa5\xff\u2190\xffz51)s.push(new A.n6(B.b.gL(o),B.b.gO(o))) +else s.push(new A.n6(p,null))}return s}, +b3E(a,b){var s=a.iY(b),r=A.zQ(A.bQ(s.b)) +switch(s.a){case"setDevicePixelRatio":$.c4().d=r +$.b8().r.$0() +return!0}return!1}, +o9(a,b){if(a==null)return +if(b===$.aw)a.$0() +else b.wC(a)}, +Lg(a,b,c,d){if(a==null)return +if(b===$.aw)a.$1(c) +else b.Cl(a,c,d)}, +b6F(a,b,c,d){if(b===$.aw)a.$2(c,d) +else b.wC(new A.aE7(a,c,d))}, +b6a(){var s,r,q,p=self.document.documentElement +p.toString +if("computedStyleMap" in p){s=p.computedStyleMap() +if(s!=null){r=s.get("font-size") +q=r!=null?r.value:null}else q=null}else q=null +if(q==null)q=A.aRb(A.aFK(self.window,p).getPropertyValue("font-size")) +return(q==null?16:q)/16}, +aZ0(a,b,c,d,e,f,g,h){return new A.RE(a,!1,f,e,h,d,c,g)}, +aPi(a,b){b.toString +t.pE.a(b) +return A.be(self.document,A.bQ(J.bq(b,"tagName")))}, +b5p(a){switch(a){case 0:return 1 +case 1:return 4 +case 2:return 2 +default:return B.f.a1b(1,a)}}, +uG(a){var s=B.c.V(a) +return A.dp(B.c.V((a-s)*1000),s)}, +aIf(a,b){var s,r,q,p,o=$.eP +if((o==null?$.eP=A.mJ():o).x&&a.offsetX===0&&a.offsetY===0)return A.b2Y(a,b) +o=$.en.x +o===$&&A.b() +s=a.target +s.toString +if(o.contains(s)){o=$.a62() +r=o.giB().w +if(r!=null){a.target.toString +o.giB().c.toString +q=new A.bU(r.c).wn(a.offsetX,a.offsetY,0) +return new A.k(q.a,q.b)}}if(!J.d(a.target,b)){p=b.getBoundingClientRect() +return new A.k(a.clientX-p.x,a.clientY-p.y)}return new A.k(a.offsetX,a.offsetY)}, +b2Y(a,b){var s,r,q=a.clientX,p=a.clientY +for(s=b;s.offsetParent!=null;s=r){q-=s.offsetLeft-s.scrollLeft +p-=s.offsetTop-s.scrollTop +r=s.offsetParent +r.toString}return new A.k(q,p)}, +aEC(a,b){var s=b.$0() +return s}, +b6j(){if($.b8().ch==null)return +$.aI6=A.L7()}, +b6i(){if($.b8().ch==null)return +$.aHM=A.L7()}, +aQG(){if($.b8().ch==null)return +$.aHL=A.L7()}, +aQI(){if($.b8().ch==null)return +$.aI0=A.L7()}, +aQH(){var s,r,q=$.b8() +if(q.ch==null)return +s=$.aPM=A.L7() +$.aHT.push(new A.mR(A.a([$.aI6,$.aHM,$.aHL,$.aI0,s,s,0,0,0,0,1],t.t))) +$.aPM=$.aI0=$.aHL=$.aHM=$.aI6=-1 +if(s-$.aTk()>1e5){$.b3q=s +r=$.aHT +A.Lg(q.ch,q.CW,r,t.Px) +$.aHT=A.a([],t.no)}}, +L7(){return B.c.V(self.window.performance.now()*1000)}, +aZH(a){var s=new A.ako(A.A(t.N,t.qe),a) +s.a6m(a) +return s}, +b48(a){}, +aIo(a,b){return a[b]}, +aRb(a){var s=self.window.parseFloat(a) +if(s==null||isNaN(s))return null +return s}, +b7c(a){var s,r,q +if("computedStyleMap" in a){s=a.computedStyleMap() +if(s!=null){r=s.get("font-size") +q=r!=null?r.value:null}else q=null}else q=null +return q==null?A.aRb(A.aFK(self.window,a).getPropertyValue("font-size")):q}, +b8g(a,b){var s,r=self.document.createElement("CANVAS") +if(r==null)return null +try{A.vY(r,a) +A.vX(r,b)}catch(s){return null}return r}, +aG1(a){var s,r,q,p="premultipliedAlpha" +if(A.aGu()){s=a.a +s.toString +r=t.N +q=A.aKB(s,"webgl2",A.aY([p,!1],r,t.z)) +q.toString +q=new A.P3(q) +$.ae5.b=A.A(r,t.eS) +q.dy=s +s=q}else{s=a.b +s.toString +r=$.dl +r=(r==null?$.dl=A.j8():r)===1?"webgl":"webgl2" +q=t.N +r=A.k7(s,r,A.aY([p,!1],q,t.z)) +r.toString +r=new A.P3(r) +$.ae5.b=A.A(q,t.eS) +r.dy=s +s=r}return s}, +aRC(a,b,c,d,e,f,g){var s,r="uniform4f",q=b.a,p=a.hp(0,q,"u_ctransform"),o=new Float32Array(16),n=new A.bU(o) +n.aW(g) +n.au(0,-c,-d) +s=a.a +A.ai(s,"uniformMatrix4fv",[p,!1,o]) +A.ai(s,r,[a.hp(0,q,"u_scale"),2/e,-2/f,1,1]) +A.ai(s,r,[a.hp(0,q,"u_shift"),-1,1,0,0])}, +aQc(a,b,c){var s,r,q,p,o="bufferData" +if(c===1){s=a.goK() +A.ai(a.a,o,[a.gim(),b,s])}else{r=b.length +q=new Float32Array(r) +for(p=0;p=h.length)h.push(r) +else h[o]=r +if(o>s)s=o}m=A.bf(s,0,!1,t.S) +l=h[s] +for(r=s-1;r>=0;--r){m[r]=l +l=i[l]}return m}, +b_s(a){var s,r=$.Fm +if(r!=null)s=r.a===a +else s=!1 +if(s){r.toString +return r}return $.Fm=new A.aof(a,A.a([],t.Up),$,$,$,null)}, +aHm(){var s=new Uint8Array(0),r=new DataView(new ArrayBuffer(8)) +return new A.as8(new A.UY(s,0),r,A.dD(r.buffer,0,null))}, +aQg(a){if(a===0)return B.e +return new A.k(200*a/600,400*a/600)}, +b5m(a,b){var s,r,q,p,o,n +if(b===0)return a +s=a.c +r=a.a +q=a.d +p=a.b +o=b*((800+(s-r)*0.5)/600) +n=b*((800+(q-p)*0.5)/600) +return new A.w(r-o,p-n,s+o,q+n).cm(A.aQg(b)).dz(20)}, +b5n(a,b){if(b===0)return null +return new A.apy(Math.min(b*((800+(a.c-a.a)*0.5)/600),b*((800+(a.d-a.b)*0.5)/600)),A.aQg(b))}, +aQq(){var s=self.document.createElementNS("http://www.w3.org/2000/svg","svg"),r=A.aA("1.1") +if(r==null)r=t.K.a(r) +s.setAttribute("version",r) +return s}, +amT(a,b){a.valueAsString=b +return b}, +amR(a,b){a.baseVal=b +return b}, +xH(a,b){a.baseVal=b +return b}, +amS(a,b){a.baseVal=b +return b}, +aGf(a,b,c,d,e,f,g,h){return new A.km($,$,$,$,$,$,$,$,0,c,d,e,f,g,h,a,b)}, +aLC(a,b,c,d,e,f){var s=new A.agE(d,f,a,b,e,c) +s.uc() +return s}, +b_R(){$.ap0.aa(0,new A.ap1()) +$.ap0.a0(0)}, +aQy(){var s=$.aCZ +if(s==null){s=t.jQ +s=$.aCZ=new A.nG(A.aI5(u.K,937,B.pe,s),B.bq,A.A(t.S,s),t.MX)}return s}, +aY6(a){if(self.Intl.v8BreakIterator!=null)return new A.arS(A.aQs(),a) +return new A.acz(a)}, +aQa(a,b,c){var s,r,q,p,o,n,m,l,k=A.a([],t._f) +c.adoptText(b) +c.first() +for(s=a.length,r=0;c.next()!==-1;r=q){q=B.c.V(c.current()) +for(p=r,o=0,n=0;p0){k.push(new A.p1(B.d_,o,n,r,p)) +r=p +o=0 +n=0}}if(o>0)l=B.cy +else l=q===s?B.cz:B.d_ +k.push(new A.p1(l,o,n,r,q))}if(k.length===0||B.b.gO(k).c===B.cy)k.push(new A.p1(B.cz,0,0,s,s)) +return k}, +b2W(a1){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a={},a0=A.a([],t._f) +a.a=a.b=null +s=A.Le(a1,0) +r=A.aQy().r9(s) +a.c=a.d=a.e=a.f=0 +q=new A.aCv(a,a1,a0) +q.$2(B.A,2) +p=++a.f +for(o=a1.length,n=t.jQ,m=t.S,l=t.MX,k=B.bq,j=0;p<=o;p=++a.f){a.b=a.a +a.a=r +if(s!=null&&s>65535){q.$2(B.A,-1) +p=++a.f}s=A.Le(a1,p) +p=$.aCZ +r=(p==null?$.aCZ=new A.nG(A.aI5(u.K,937,B.pe,n),B.bq,A.A(m,n),l):p).r9(s) +i=a.a +j=i===B.ht?j+1:0 +if(i===B.eC||i===B.hr){q.$2(B.cy,5) +continue}if(i===B.hv){if(r===B.eC)q.$2(B.A,5) +else q.$2(B.cy,5) +continue}if(r===B.eC||r===B.hr||r===B.hv){q.$2(B.A,6) +continue}p=a.f +if(p>=o)break +if(r===B.dH||r===B.ku){q.$2(B.A,7) +continue}if(i===B.dH){q.$2(B.d_,18) +continue}if(i===B.ku){q.$2(B.d_,8) +continue}if(i===B.kv){q.$2(B.A,8) +continue}h=i!==B.kp +if(h&&!0)k=i==null?B.bq:i +if(r===B.kp||r===B.kv){if(k!==B.dH){if(k===B.ht)--j +q.$2(B.A,9) +r=k +continue}r=B.bq}if(!h||!1){a.a=k +h=k}else h=i +if(r===B.kx||h===B.kx){q.$2(B.A,11) +continue}if(h===B.ks){q.$2(B.A,12) +continue}g=h!==B.dH +if(!(!g||h===B.ho||h===B.eB)&&r===B.ks){q.$2(B.A,12) +continue}if(g)g=r===B.kr||r===B.eA||r===B.p9||r===B.hp||r===B.kq +else g=!1 +if(g){q.$2(B.A,13) +continue}if(h===B.ez){q.$2(B.A,14) +continue}g=h===B.kA +if(g&&r===B.ez){q.$2(B.A,15) +continue}f=h!==B.kr +if((!f||h===B.eA)&&r===B.kt){q.$2(B.A,16) +continue}if(h===B.kw&&r===B.kw){q.$2(B.A,17) +continue}if(g||r===B.kA){q.$2(B.A,19) +continue}if(h===B.kz||r===B.kz){q.$2(B.d_,20) +continue}if(r===B.ho||r===B.eB||r===B.kt||h===B.p7){q.$2(B.A,21) +continue}if(a.b===B.bp)g=h===B.eB||h===B.ho +else g=!1 +if(g){q.$2(B.A,21) +continue}g=h===B.kq +if(g&&r===B.bp){q.$2(B.A,21) +continue}if(r===B.p8){q.$2(B.A,22) +continue}e=h!==B.bq +if(!((!e||h===B.bp)&&r===B.cA))if(h===B.cA)d=r===B.bq||r===B.bp +else d=!1 +else d=!0 +if(d){q.$2(B.A,23) +continue}d=h===B.hw +if(d)c=r===B.ky||r===B.hs||r===B.hu +else c=!1 +if(c){q.$2(B.A,23) +continue}if((h===B.ky||h===B.hs||h===B.hu)&&r===B.d0){q.$2(B.A,23) +continue}c=!d +if(!c||h===B.d0)b=r===B.bq||r===B.bp +else b=!1 +if(b){q.$2(B.A,24) +continue}if(!e||h===B.bp)b=r===B.hw||r===B.d0 +else b=!1 +if(b){q.$2(B.A,24) +continue}if(!f||h===B.eA||h===B.cA)f=r===B.d0||r===B.hw +else f=!1 +if(f){q.$2(B.A,25) +continue}f=h!==B.d0 +if((!f||d)&&r===B.ez){q.$2(B.A,25) +continue}if((!f||!c||h===B.eB||h===B.hp||h===B.cA||g)&&r===B.cA){q.$2(B.A,25) +continue}g=h===B.hq +if(g)f=r===B.hq||r===B.eD||r===B.eF||r===B.eG +else f=!1 +if(f){q.$2(B.A,26) +continue}f=h!==B.eD +if(!f||h===B.eF)c=r===B.eD||r===B.eE +else c=!1 +if(c){q.$2(B.A,26) +continue}c=h!==B.eE +if((!c||h===B.eG)&&r===B.eE){q.$2(B.A,26) +continue}if((g||!f||!c||h===B.eF||h===B.eG)&&r===B.d0){q.$2(B.A,27) +continue}if(d)g=r===B.hq||r===B.eD||r===B.eE||r===B.eF||r===B.eG +else g=!1 +if(g){q.$2(B.A,27) +continue}if(!e||h===B.bp)g=r===B.bq||r===B.bp +else g=!1 +if(g){q.$2(B.A,28) +continue}if(h===B.hp)g=r===B.bq||r===B.bp +else g=!1 +if(g){q.$2(B.A,29) +continue}if(!e||h===B.bp||h===B.cA)if(r===B.ez){g=a1.charCodeAt(p) +if(g!==9001)if(!(g>=12296&&g<=12317))g=g>=65047&&g<=65378 +else g=!0 +else g=!0 +g=!g}else g=!1 +else g=!1 +if(g){q.$2(B.A,30) +continue}if(h===B.eA){p=a1.charCodeAt(p-1) +if(p!==9001)if(!(p>=12296&&p<=12317))p=p>=65047&&p<=65378 +else p=!0 +else p=!0 +if(!p)p=r===B.bq||r===B.bp||r===B.cA +else p=!1}else p=!1 +if(p){q.$2(B.A,30) +continue}if(r===B.ht){if((j&1)===1)q.$2(B.A,30) +else q.$2(B.d_,30) +continue}if(h===B.hs&&r===B.hu){q.$2(B.A,30) +continue}q.$2(B.d_,31)}q.$2(B.cz,3) +return a0}, +qt(a,b,c,d,e){var s,r,q,p +if(c===d)return 0 +s=a.font +if(c===$.aPB&&d===$.aPA&&b===$.aPC&&s===$.aPz)r=$.aPD +else{q=c===0&&d===b.length?b:B.d.P(b,c,d) +p=a.measureText(q).width +if(p==null)p=null +p.toString +r=p}$.aPB=c +$.aPA=d +$.aPC=b +$.aPz=s +$.aPD=r +if(e==null)e=0 +return B.c.an((e!==0?r+e*(d-c):r)*100)/100}, +aKS(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,a0,a1,a2){var s=g==null,r=s?"":g +return new A.BR(b,c,d,e,f,m,k,a1,!s,r,h,i,l,j,p,a2,o,q,a,n,a0)}, +aQE(a){if(a==null)return null +return A.aQD(a.a)}, +aQD(a){switch(a){case 0:return"100" +case 1:return"200" +case 2:return"300" +case 3:return"normal" +case 4:return"500" +case 5:return"600" +case 6:return"bold" +case 7:return"800" +case 8:return"900"}return""}, +b4p(a){var s,r,q,p,o=a.length +if(o===0)return"" +for(s=0,r="";s=48&&q<=57))s=q>=1632&&q<=1641 +else s=!0 +if(s)return B.q +r=$.aJ9().r9(q) +if(r!=null)return r +return null}, +aHV(a,b){var s=A.Le(a,b) +s.toString +if(s>=48&&s<=57)return B.hj +if(s>=1632&&s<=1641)return B.oU +switch($.aJ9().r9(s)){case B.q:return B.oT +case B.Z:return B.oU +case null:case void 0:return B.km}}, +Le(a,b){var s,r +if(b<0||b>=a.length)return null +s=a.charCodeAt(b) +if((s&63488)===55296&&b>>6&31)+1<<16|(r&63)<<10|a.charCodeAt(b+1)&1023}return s}, +b0F(a,b,c){return new A.nG(a,b,A.A(t.S,c),c.h("nG<0>"))}, +b0G(a,b,c,d,e){return new A.nG(A.aI5(a,b,c,e),d,A.A(t.S,e),e.h("nG<0>"))}, +aI5(a,b,c,d){var s,r,q,p,o,n=A.a([],d.h("q>")),m=a.length +for(s=d.h("da<0>"),r=0;r=0&&q<=r))break +q+=s +if(A.b0T(b,q))break}return A.qp(q,0,r)}, +b0T(a,b){var s,r,q,p,o,n,m,l,k,j=null +if(b<=0||b>=a.length)return!0 +s=b-1 +if((a.charCodeAt(s)&63488)===55296)return!1 +r=$.Lv().AO(0,a,b) +q=$.Lv().AO(0,a,s) +if(q===B.iF&&r===B.iG)return!1 +if(A.eX(q,B.mk,B.iF,B.iG,j,j))return!0 +if(A.eX(r,B.mk,B.iF,B.iG,j,j))return!0 +if(q===B.mj&&r===B.mj)return!1 +if(A.eX(r,B.fA,B.fB,B.fz,j,j))return!1 +for(p=0;A.eX(q,B.fA,B.fB,B.fz,j,j);){++p +s=b-p-1 +if(s<0)return!0 +o=$.Lv() +n=A.Le(a,s) +q=n==null?o.b:o.r9(n)}if(A.eX(q,B.bL,B.b0,j,j,j)&&A.eX(r,B.bL,B.b0,j,j,j))return!1 +m=0 +do{++m +l=$.Lv().AO(0,a,b+m)}while(A.eX(l,B.fA,B.fB,B.fz,j,j)) +do{++p +k=$.Lv().AO(0,a,b-p-1)}while(A.eX(k,B.fA,B.fB,B.fz,j,j)) +if(A.eX(q,B.bL,B.b0,j,j,j)&&A.eX(r,B.mh,B.fy,B.e0,j,j)&&A.eX(l,B.bL,B.b0,j,j,j))return!1 +if(A.eX(k,B.bL,B.b0,j,j,j)&&A.eX(q,B.mh,B.fy,B.e0,j,j)&&A.eX(r,B.bL,B.b0,j,j,j))return!1 +s=q===B.b0 +if(s&&r===B.e0)return!1 +if(s&&r===B.mg&&l===B.b0)return!1 +if(k===B.b0&&q===B.mg&&r===B.b0)return!1 +s=q===B.cl +if(s&&r===B.cl)return!1 +if(A.eX(q,B.bL,B.b0,j,j,j)&&r===B.cl)return!1 +if(s&&A.eX(r,B.bL,B.b0,j,j,j))return!1 +if(k===B.cl&&A.eX(q,B.mi,B.fy,B.e0,j,j)&&r===B.cl)return!1 +if(s&&A.eX(r,B.mi,B.fy,B.e0,j,j)&&l===B.cl)return!1 +if(q===B.fC&&r===B.fC)return!1 +if(A.eX(q,B.bL,B.b0,B.cl,B.fC,B.iE)&&r===B.iE)return!1 +if(q===B.iE&&A.eX(r,B.bL,B.b0,B.cl,B.fC,j))return!1 +return!0}, +eX(a,b,c,d,e,f){if(a===b)return!0 +if(a===c)return!0 +if(d!=null&&a===d)return!0 +if(e!=null&&a===e)return!0 +if(f!=null&&a===f)return!0 +return!1}, +aXd(a){switch(a){case"TextInputAction.continueAction":case"TextInputAction.next":return B.DR +case"TextInputAction.previous":return B.DY +case"TextInputAction.done":return B.Dx +case"TextInputAction.go":return B.DG +case"TextInputAction.newline":return B.DD +case"TextInputAction.search":return B.E5 +case"TextInputAction.send":return B.E6 +case"TextInputAction.emergencyCall":case"TextInputAction.join":case"TextInputAction.none":case"TextInputAction.route":case"TextInputAction.unspecified":default:return B.DS}}, +aKQ(a,b){switch(a){case"TextInputType.number":return b?B.Ds:B.DT +case"TextInputType.phone":return B.DX +case"TextInputType.emailAddress":return B.Dz +case"TextInputType.url":return B.Ei +case"TextInputType.multiline":return B.DQ +case"TextInputType.none":return B.n6 +case"TextInputType.text":default:return B.Ef}}, +b0c(a){var s +if(a==="TextCapitalization.words")s=B.AQ +else if(a==="TextCapitalization.characters")s=B.AS +else s=a==="TextCapitalization.sentences"?B.AR:B.lY +return new A.G8(s)}, +b3d(a){}, +a5C(a,b,c,d){var s,r="transparent",q="none",p=a.style +A.x(p,"white-space","pre-wrap") +A.x(p,"align-content","center") +A.x(p,"padding","0") +A.x(p,"opacity","1") +A.x(p,"color",r) +A.x(p,"background-color",r) +A.x(p,"background",r) +A.x(p,"outline",q) +A.x(p,"border",q) +A.x(p,"resize",q) +A.x(p,"text-shadow",r) +A.x(p,"transform-origin","0 0 0") +if(b){A.x(p,"top","-9999px") +A.x(p,"left","-9999px")}if(d){A.x(p,"width","0") +A.x(p,"height","0")}if(c)A.x(p,"pointer-events",q) +s=$.cz() +if(s!==B.co)s=s===B.W +else s=!0 +if(s)a.classList.add("transparentTextEditing") +A.x(p,"caret-color",r)}, +aXb(a6,a7){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,a2,a3,a4,a5=null +if(a6==null)return a5 +s=t.N +r=A.A(s,t.e) +q=A.A(s,t.M1) +p=A.be(self.document,"form") +o=$.a62().giB() instanceof A.T_ +p.noValidate=!0 +p.method="post" +p.action="#" +A.cE(p,"submit",$.aEU(),a5) +A.a5C(p,!1,o,!0) +n=J.wA(0,s) +m=A.aFd(a6,B.AP) +if(a7!=null)for(s=t.a,l=J.l1(a7,s),k=A.o(l),l=new A.bu(l,l.gu(l),k.h("bu")),j=m.b,k=k.h("B.E"),i=!o,h=a5,g=!1;l.q();){f=l.d +if(f==null)f=k.a(f) +e=J.aF(f) +d=s.a(e.i(f,"autofill")) +c=A.bQ(e.i(f,"textCapitalization")) +if(c==="TextCapitalization.words")c=B.AQ +else if(c==="TextCapitalization.characters")c=B.AS +else c=c==="TextCapitalization.sentences"?B.AR:B.lY +b=A.aFd(d,new A.G8(c)) +c=b.b +n.push(c) +if(c!==j){a=A.aKQ(A.bQ(J.bq(s.a(e.i(f,"inputType")),"name")),!1).HR() +b.a.fK(a) +b.fK(a) +A.a5C(a,!1,o,i) +q.n(0,c,b) +r.n(0,c,a) +p.append(a) +if(g){h=a +g=!1}}else g=!0}else{n.push(m.b) +h=a5}B.b.jr(n) +for(s=n.length,a0=0,l="";a00?l+"*":l)+a1}a2=l.charCodeAt(0)==0?l:l +a3=$.Ld.i(0,a2) +if(a3!=null)a3.remove() +a4=A.be(self.document,"input") +A.a5C(a4,!0,!1,!0) +a4.className="submitBtn" +A.aaQ(a4,"submit") +p.append(a4) +return new A.ac6(p,r,q,h==null?a4:h,a2)}, +aFd(a,b){var s,r=J.aF(a),q=A.bQ(r.i(a,"uniqueIdentifier")),p=t.kc.a(r.i(a,"hints")),o=p==null||J.it(p)?null:A.bQ(J.oe(p)),n=A.aKO(t.a.a(r.i(a,"editingValue"))) +if(o!=null){s=$.aRO().a.i(0,o) +if(s==null)s=o}else s=null +return new A.LW(n,q,s,A.dk(r.i(a,"hintText")))}, +aI1(a,b,c){var s=c.a,r=c.b,q=Math.min(s,r) +r=Math.max(s,r) +return B.d.P(a,0,q)+b+B.d.bL(a,r)}, +b0e(a1,a2,a3){var s,r,q,p,o,n,m,l,k,j,i,h=a3.a,g=a3.b,f=a3.c,e=a3.d,d=a3.e,c=a3.f,b=a3.r,a=a3.w,a0=new A.yi(h,g,f,e,d,c,b,a) +d=a2==null +c=d?null:a2.b +s=c==(d?null:a2.c) +c=g.length +r=c===0 +q=r&&e!==-1 +r=!r +p=r&&!s +if(q){o=h.length-a1.a.length +f=a1.b +if(f!==(d?null:a2.b)){f=e-o +a0.c=f}else{a0.c=f +e=f+o +a0.d=e}}else if(p){f=a2.b +d=a2.c +if(f>d)f=d +a0.c=f}n=b!=null&&b!==a +if(r&&s&&n){b.toString +f=a0.c=b}if(!(f===-1&&f===e)){m=A.aI1(h,g,new A.ce(f,e)) +f=a1.a +f.toString +if(m!==f){l=B.d.p(g,".") +for(e=A.c3(A.a5L(g),!0,!1).lm(0,f),e=new A.pZ(e.a,e.b,e.c),d=t.Qz,b=h.length;e.q();){k=e.d +a=(k==null?d.a(k):k).b +r=a.index +if(!(r>=0&&r+a[0].length<=b)){j=r+c-1 +i=A.aI1(h,g,new A.ce(r,j))}else{j=l?r+a[0].length-1:r+a[0].length +i=A.aI1(h,g,new A.ce(r,j))}if(i===f){a0.c=r +a0.d=j +break}}}}a0.e=a1.b +a0.f=a1.c +return a0}, +BK(a,b,c,d,e){var s,r=a==null?0:a +r=Math.max(0,r) +s=d==null?0:d +return new A.w2(e,r,Math.max(0,s),b,c)}, +aKO(a){var s=J.aF(a),r=A.dk(s.i(a,"text")),q=B.c.V(A.kZ(s.i(a,"selectionBase"))),p=B.c.V(A.kZ(s.i(a,"selectionExtent"))),o=A.aGe(a,"composingBase"),n=A.aGe(a,"composingExtent") +s=o==null?-1:o +return A.BK(q,s,n==null?-1:n,p,r)}, +aKN(a){var s,r,q,p=null,o=globalThis.HTMLInputElement +if(o!=null&&a instanceof o){s=a.selectionDirection +if((s==null?p:s)==="backward"){s=A.aFI(a) +r=A.aKq(a) +r=r==null?p:B.c.V(r) +q=A.aKr(a) +return A.BK(r,-1,-1,q==null?p:B.c.V(q),s)}else{s=A.aFI(a) +r=A.aKr(a) +r=r==null?p:B.c.V(r) +q=A.aKq(a) +return A.BK(r,-1,-1,q==null?p:B.c.V(q),s)}}else{o=globalThis.HTMLTextAreaElement +if(o!=null&&a instanceof o){s=a.selectionDirection +if((s==null?p:s)==="backward"){s=A.aKw(a) +r=A.aKu(a) +r=r==null?p:B.c.V(r) +q=A.aKv(a) +return A.BK(r,-1,-1,q==null?p:B.c.V(q),s)}else{s=A.aKw(a) +r=A.aKv(a) +r=r==null?p:B.c.V(r) +q=A.aKu(a) +return A.BK(r,-1,-1,q==null?p:B.c.V(q),s)}}else throw A.c(A.a3("Initialized with unsupported input type"))}}, +aLq(a){var s,r,q,p,o,n="inputType",m="autofill",l=J.aF(a),k=t.a,j=A.bQ(J.bq(k.a(l.i(a,n)),"name")),i=A.v0(J.bq(k.a(l.i(a,n)),"decimal")) +j=A.aKQ(j,i===!0) +i=A.dk(l.i(a,"inputAction")) +if(i==null)i="TextInputAction.done" +s=A.v0(l.i(a,"obscureText")) +r=A.v0(l.i(a,"readOnly")) +q=A.v0(l.i(a,"autocorrect")) +p=A.b0c(A.bQ(l.i(a,"textCapitalization"))) +k=l.ai(a,m)?A.aFd(k.a(l.i(a,m)),B.AP):null +o=A.aXb(t.nA.a(l.i(a,m)),t.kc.a(l.i(a,"fields"))) +l=A.v0(l.i(a,"enableDeltaModel")) +return new A.afW(j,i,r===!0,s===!0,q!==!1,l===!0,k,o,p)}, +aXD(a){return new A.P5(a,A.a([],t.Up),$,$,$,null)}, +b7H(){$.Ld.aa(0,new A.aEt())}, +b5e(){var s,r,q +for(s=$.Ld.gaT($.Ld),r=A.o(s),r=r.h("@<1>").N(r.z[1]),s=new A.bN(J.ap(s.a),s.b,r.h("bN<1,2>")),r=r.z[1];s.q();){q=s.a +if(q==null)q=r.a(q) +q.remove()}$.Ld.a0(0)}, +aX_(a){var s=J.aF(a),r=A.n5(J.hI(t.j.a(s.i(a,"transform")),new A.abb(),t.z),!0,t.i) +return new A.aba(A.kZ(s.i(a,"width")),A.kZ(s.i(a,"height")),new Float32Array(A.em(r)))}, +aIB(a,b){var s=a.style +A.x(s,"transform-origin","0 0 0") +A.x(s,"transform",A.jV(b))}, +jV(a){var s=A.aED(a) +if(s===B.Bi)return"matrix("+A.h(a[0])+","+A.h(a[1])+","+A.h(a[4])+","+A.h(a[5])+","+A.h(a[12])+","+A.h(a[13])+")" +else if(s===B.iC)return A.b6e(a) +else return"none"}, +aED(a){if(!(a[15]===1&&a[14]===0&&a[11]===0&&a[10]===1&&a[9]===0&&a[8]===0&&a[7]===0&&a[6]===0&&a[3]===0&&a[2]===0))return B.iC +if(a[0]===1&&a[1]===0&&a[4]===0&&a[5]===1&&a[12]===0&&a[13]===0)return B.Bh +else return B.Bi}, +b6e(a){var s=a[0] +if(s===1&&a[1]===0&&a[2]===0&&a[3]===0&&a[4]===0&&a[5]===1&&a[6]===0&&a[7]===0&&a[8]===0&&a[9]===0&&a[10]===1&&a[11]===0&&a[14]===0&&a[15]===1)return"translate3d("+A.h(a[12])+"px, "+A.h(a[13])+"px, 0px)" +else return"matrix3d("+A.h(s)+","+A.h(a[1])+","+A.h(a[2])+","+A.h(a[3])+","+A.h(a[4])+","+A.h(a[5])+","+A.h(a[6])+","+A.h(a[7])+","+A.h(a[8])+","+A.h(a[9])+","+A.h(a[10])+","+A.h(a[11])+","+A.h(a[12])+","+A.h(a[13])+","+A.h(a[14])+","+A.h(a[15])+")"}, +aEF(a,b){var s=$.aU9() +s[0]=b.a +s[1]=b.b +s[2]=b.c +s[3]=b.d +A.aEE(a,s) +return new A.w(s[0],s[1],s[2],s[3])}, +aEE(a1,a2){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0=$.aJ8() +a0[0]=a2[0] +a0[4]=a2[1] +a0[8]=0 +a0[12]=1 +a0[1]=a2[2] +a0[5]=a2[1] +a0[9]=0 +a0[13]=1 +a0[2]=a2[0] +a0[6]=a2[3] +a0[10]=0 +a0[14]=1 +a0[3]=a2[2] +a0[7]=a2[3] +a0[11]=0 +a0[15]=1 +s=$.aU8().a +r=s[0] +q=s[4] +p=s[8] +o=s[12] +n=s[1] +m=s[5] +l=s[9] +k=s[13] +j=s[2] +i=s[6] +h=s[10] +g=s[14] +f=s[3] +e=s[7] +d=s[11] +c=s[15] +b=a1.a +s[0]=r*b[0]+q*b[4]+p*b[8]+o*b[12] +s[4]=r*b[1]+q*b[5]+p*b[9]+o*b[13] +s[8]=r*b[2]+q*b[6]+p*b[10]+o*b[14] +s[12]=r*b[3]+q*b[7]+p*b[11]+o*b[15] +s[1]=n*b[0]+m*b[4]+l*b[8]+k*b[12] +s[5]=n*b[1]+m*b[5]+l*b[9]+k*b[13] +s[9]=n*b[2]+m*b[6]+l*b[10]+k*b[14] +s[13]=n*b[3]+m*b[7]+l*b[11]+k*b[15] +s[2]=j*b[0]+i*b[4]+h*b[8]+g*b[12] +s[6]=j*b[1]+i*b[5]+h*b[9]+g*b[13] +s[10]=j*b[2]+i*b[6]+h*b[10]+g*b[14] +s[14]=j*b[3]+i*b[7]+h*b[11]+g*b[15] +s[3]=f*b[0]+e*b[4]+d*b[8]+c*b[12] +s[7]=f*b[1]+e*b[5]+d*b[9]+c*b[13] +s[11]=f*b[2]+e*b[6]+d*b[10]+c*b[14] +s[15]=f*b[3]+e*b[7]+d*b[11]+c*b[15] +a=b[15] +if(a===0)a=1 +a2[0]=Math.min(Math.min(Math.min(a0[0],a0[1]),a0[2]),a0[3])/a +a2[1]=Math.min(Math.min(Math.min(a0[4],a0[5]),a0[6]),a0[7])/a +a2[2]=Math.max(Math.max(Math.max(a0[0],a0[1]),a0[2]),a0[3])/a +a2[3]=Math.max(Math.max(Math.max(a0[4],a0[5]),a0[6]),a0[7])/a}, +aRt(a,b){return a.a<=b.a&&a.b<=b.b&&a.c>=b.c&&a.d>=b.d}, +dm(a){var s,r +if(a===4278190080)return"#000000" +if((a&4278190080)>>>0===4278190080){s=B.f.iv(a&16777215,16) +switch(s.length){case 1:return"#00000"+s +case 2:return"#0000"+s +case 3:return"#000"+s +case 4:return"#00"+s +case 5:return"#0"+s +default:return"#"+s}}else{r=""+"rgba("+B.f.k(a>>>16&255)+","+B.f.k(a>>>8&255)+","+B.f.k(a&255)+","+B.c.k((a>>>24&255)/255)+")" +return r.charCodeAt(0)==0?r:r}}, +b5h(a,b,c,d){var s=""+a,r=""+b,q=""+c +if(d===255)return"rgb("+s+","+r+","+q+")" +else return"rgba("+s+","+r+","+q+","+B.c.af(d/255,2)+")"}, +aPq(){if(A.b6K())return"BlinkMacSystemFont" +var s=$.e6() +if(s!==B.aS)s=s===B.bZ +else s=!0 +if(s)return"-apple-system, BlinkMacSystemFont" +return"Arial"}, +aDu(a){var s +if(B.Xn.p(0,a))return a +s=$.e6() +if(s!==B.aS)s=s===B.bZ +else s=!0 +if(s)if(a===".SF Pro Text"||a===".SF Pro Display"||a===".SF UI Text"||a===".SF UI Display")return A.aPq() +return'"'+A.h(a)+'", '+A.aPq()+", sans-serif"}, +qp(a,b,c){if(ac)return c +else return a}, +qs(a,b){var s +if(a==null)return b==null +if(b==null||a.length!==b.length)return!1 +for(s=0;s")).c_(0," ")}, +dY(a,b,c){A.x(a.style,b,c)}, +aRB(a){var s=self.document.querySelector("#flutterweb-theme") +if(a!=null){if(s==null){s=A.be(self.document,"meta") +s.id="flutterweb-theme" +s.name="theme-color" +self.document.head.append(s)}s.content=A.dm(a.a)}else if(s!=null)s.remove()}, +Lb(a,b,c,d,e,f,g,h,i){var s=$.aPl +if(s==null?$.aPl=a.ellipse!=null:s)A.ai(a,"ellipse",[b,c,d,e,f,g,h,i]) +else{a.save() +a.translate(b,c) +a.rotate(f) +a.scale(d,e) +A.ai(a,"arc",[0,0,1,g,h,i]) +a.restore()}}, +aIz(a){var s +for(;a.lastChild!=null;){s=a.lastChild +if(s.parentNode!=null)s.parentNode.removeChild(s)}}, +aGj(a,b,c){var s=b.h("@<0>").N(c),r=new A.HE(s.h("HE<+key,value(1,2)>")) +r.a=r +r.b=r +return new A.Q7(a,new A.BB(r,s.h("BB<+key,value(1,2)>")),A.A(b,s.h("aKK<+key,value(1,2)>")),s.h("Q7<1,2>"))}, +dQ(){var s=new Float32Array(16) +s[15]=1 +s[0]=1 +s[5]=1 +s[10]=1 +return new A.bU(s)}, +aYn(a){return new A.bU(a)}, +aYq(a){var s=new A.bU(new Float32Array(16)) +if(s.fL(a)===0)return null +return s}, +zY(a){var s=new Float32Array(16) +s[15]=a[15] +s[14]=a[14] +s[13]=a[13] +s[12]=a[12] +s[11]=a[11] +s[10]=a[10] +s[9]=a[9] +s[8]=a[8] +s[7]=a[7] +s[6]=a[6] +s[5]=a[5] +s[4]=a[4] +s[3]=a[3] +s[2]=a[2] +s[1]=a[1] +s[0]=a[0] +return s}, +aWd(a){var s=new A.Nu(a,A.aH2(!1,t.FW)) +s.a69(a) +return s}, +aWu(a){var s,r +if(a!=null)return A.aWd(a) +else{s=new A.P0(A.aH2(!1,t.tW)) +r=self.window.visualViewport +if(r==null)r=self.window +s.a=A.dd(r,"resize",s.gafL()) +return s}}, +aX8(a){if(a!=null){A.aWN(a) +return new A.aa6(a)}else return new A.adz()}, +aXc(a,b){var s=new A.Og(a,b,A.d5(null,t.H),B.fx) +s.a6a(a,b) +return s}, +A3:function A3(a){var _=this +_.a=a +_.d=_.c=_.b=null}, +a6r:function a6r(a,b){this.a=a +this.b=b}, +a6t:function a6t(a){this.a=a}, +a6u:function a6u(a){this.a=a}, +a6s:function a6s(a){this.a=a}, +AO:function AO(a,b){this.a=a +this.b=b}, +nb:function nb(a,b){this.a=a +this.b=b}, +a8t:function a8t(a,b,c,d,e){var _=this +_.e=_.d=null +_.f=a +_.r=b +_.z=_.y=_.x=_.w=null +_.Q=0 +_.as=c +_.a=d +_.b=null +_.c=e}, +a9Q:function a9Q(a,b,c,d,e,f){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.w=_.r=null +_.x=1 +_.Q=_.z=_.y=null +_.as=!1}, +a1z:function a1z(){}, +iw:function iw(a){this.a=a}, +a96:function a96(a,b,c){this.a=a +this.b=b +this.c=c}, +aCo:function aCo(){}, +aCF:function aCF(a,b){this.a=a +this.b=b}, +aCE:function aCE(a,b){this.a=a +this.b=b}, +a8p:function a8p(a){this.a=a}, +Qa:function Qa(a){this.a=a +this.b=$}, +MI:function MI(){}, +AX:function AX(a,b){this.a=a +this.b=b}, +vz:function vz(a){this.a=a}, +MQ:function MQ(){}, +MX:function MX(){}, +vy:function vy(a,b){this.a=a +this.b=b}, +Pi:function Pi(a,b,c,d,e,f,g,h,i){var _=this +_.b=a +_.c=b +_.d=c +_.e=d +_.f=e +_.r=f +_.w=g +_.x=h +_.Q=i}, +afh:function afh(){}, +afi:function afi(a){this.a=a}, +afe:function afe(){}, +aff:function aff(a){this.a=a}, +afg:function afg(a){this.a=a}, +pf:function pf(a,b){this.a=a +this.b=b}, +ts:function ts(a,b){this.a=a +this.b=b}, +kp:function kp(a,b,c,d,e,f){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f}, +Dk:function Dk(a){this.a=a}, +O9:function O9(a,b){this.a=a +this.b=b}, +m5:function m5(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +aDH:function aDH(a,b){this.a=a +this.b=b}, +aDG:function aDG(a,b){this.a=a +this.b=b}, +TH:function TH(a,b,c,d,e){var _=this +_.a=a +_.b=$ +_.c=b +_.d=c +_.e=d +_.f=e +_.w=_.r=null}, +aoH:function aoH(){}, +aoI:function aoI(){}, +aoJ:function aoJ(a){this.a=a}, +aoK:function aoK(a){this.a=a}, +aoL:function aoL(){}, +tS:function tS(a,b,c){this.a=a +this.b=b +this.c=c}, +pV:function pV(a,b,c){this.a=a +this.b=b +this.c=c}, +rA:function rA(a,b,c){this.a=a +this.b=b +this.c=c}, +aoG:function aoG(a){this.a=a}, +Po:function Po(a){this.a=a}, +r0:function r0(a,b){var _=this +_.a=$ +_.b=a +_.c=b +_.d=!1}, +MN:function MN(){}, +Hc:function Hc(a,b,c){var _=this +_.a=a +_.b=b +_.c=c +_.d=$}, +Hd:function Hd(a,b){this.a=a +this.b=b +this.d=$}, +MH:function MH(a,b,c,d){var _=this +_.a=$ +_.b=a +_.c=b +_.d=0 +_.e=-1 +_.f=c +_.r=d +_.w=!1}, +AY:function AY(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.e=_.d=$ +_.f=!1 +_.r=0 +_.w=null +_.x=d}, +fz:function fz(){}, +ak4:function ak4(a){this.c=a}, +aj2:function aj2(a,b){this.a=a +this.b=b}, +vN:function vN(){}, +SQ:function SQ(a,b){this.c=a +this.a=null +this.b=b}, +M3:function M3(a,b,c,d){var _=this +_.f=a +_.r=b +_.c=c +_.a=null +_.b=d}, +N2:function N2(a,b,c,d){var _=this +_.f=a +_.r=b +_.c=c +_.a=null +_.b=d}, +N4:function N4(a,b,c,d){var _=this +_.f=a +_.r=b +_.c=c +_.a=null +_.b=d}, +N3:function N3(a,b,c,d){var _=this +_.f=a +_.r=b +_.c=c +_.a=null +_.b=d}, +QS:function QS(a,b,c,d){var _=this +_.f=a +_.r=b +_.c=c +_.a=null +_.b=d}, +Gy:function Gy(a,b,c){var _=this +_.f=a +_.c=b +_.a=null +_.b=c}, +QQ:function QQ(a,b,c){var _=this +_.f=a +_.c=b +_.a=null +_.b=c}, +Pr:function Pr(a,b,c,d){var _=this +_.f=a +_.r=b +_.c=c +_.a=null +_.b=d}, +afz:function afz(a,b){this.a=a +this.b=b}, +Rt:function Rt(a,b,c){var _=this +_.c=a +_.d=b +_.a=null +_.b=c}, +N9:function N9(a,b,c){var _=this +_.f=a +_.c=b +_.a=null +_.b=c}, +PP:function PP(a){this.a=a}, +agx:function agx(a){this.a=a +this.b=$}, +agy:function agy(a,b){this.a=a +this.b=b}, +adv:function adv(a,b,c){this.a=a +this.b=b +this.c=c}, +adw:function adw(a,b,c){this.a=a +this.b=b +this.c=c}, +adx:function adx(a,b,c){this.a=a +this.b=b +this.c=c}, +a9I:function a9I(){}, +a99:function a99(a,b){this.a=a +this.b=b +this.c=$}, +MR:function MR(a){this.a=a}, +aCI:function aCI(){}, +air:function air(){}, +eF:function eF(a,b){this.a=null +this.b=a +this.$ti=b}, +Ng:function Ng(a,b){var _=this +_.a=$ +_.b=1 +_.c=a +_.$ti=b}, +vA:function vA(a,b,c,d,e,f){var _=this +_.a=a +_.b=$ +_.c=null +_.d=b +_.e=c +_.f=0 +_.r=d +_.w=e +_.x=!0 +_.y=4278190080 +_.z=!1 +_.ax=_.at=_.as=_.Q=null +_.ay=f +_.CW=_.ch=null +_.cx=0}, +a9a:function a9a(a){this.a=a}, +B_:function B_(a){this.a=$ +this.b=a}, +MV:function MV(a,b){this.a=a +this.b=b +this.c=$}, +a97:function a97(a){var _=this +_.a=a +_.b=$ +_.c=0 +_.d=null}, +MJ:function MJ(a){this.a=a +this.b=$}, +a9c:function a9c(){}, +MW:function MW(){this.a=$ +this.b=!1 +this.c=null}, +ot:function ot(){this.b=this.a=null}, +akl:function akl(a,b){this.a=a +this.b=b}, +vu:function vu(a,b){this.a=a +this.b=b}, +Mz:function Mz(){var _=this +_.a=null +_.b=$ +_.c=null +_.d=$}, +a8q:function a8q(a){this.a=a}, +TC:function TC(){}, +ML:function ML(a,b,c,d,e,f){var _=this +_.b=a +_.c=b +_.d=c +_.e=d +_.f=e +_.r=f +_.a=$}, +MM:function MM(a,b,c,d,e,f){var _=this +_.b=a +_.c=b +_.d=c +_.e=d +_.f=e +_.r=f +_.a=$}, +MK:function MK(a,b,c,d,e,f,g,h){var _=this +_.b=a +_.c=b +_.d=c +_.e=d +_.f=e +_.r=f +_.w=g +_.x=h +_.a=$}, +MO:function MO(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=null +_.r=$ +_.w=!1}, +FS:function FS(a,b){this.a=a +this.b=b}, +lU:function lU(a){var _=this +_.a=null +_.b=!0 +_.c=!1 +_.w=_.r=_.f=_.e=_.d=null +_.x=a +_.y=null +_.at=_.as=_.Q=_.z=-1 +_.ax=!1 +_.ch=_.ay=null +_.CW=-1}, +apz:function apz(a){this.a=a}, +MY:function MY(a,b){this.a=a +this.b=b +this.c=!1}, +Ue:function Ue(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=$ +_.d=c +_.e=d}, +MT:function MT(a,b,c,d,e,f,g){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g}, +B1:function B1(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.x=i +_.y=j +_.z=k +_.Q=l +_.as=m +_.at=n +_.ax=o +_.ay=p +_.ch=q +_.CW=r +_.cx=s +_.cy=a0 +_.db=a1 +_.dy=_.dx=$}, +a9d:function a9d(a){this.a=a}, +B0:function B0(a,b,c,d,e,f,g,h,i){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.x=i}, +MS:function MS(a){var _=this +_.a=$ +_.b=-1/0 +_.c=a +_.d=0 +_.e=!1 +_.z=_.y=_.x=_.w=_.r=_.f=0 +_.Q=$ +_.as=!1}, +MP:function MP(a){this.a=a}, +a9b:function a9b(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=0 +_.d=c +_.e=d}, +aCM:function aCM(a){this.a=a}, +CG:function CG(a,b){this.a=a +this.b=b}, +My:function My(a){this.a=a}, +MZ:function MZ(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=$}, +a9e:function a9e(a){this.a=a}, +B6:function B6(a,b){this.a=a +this.b=b}, +a9y:function a9y(a,b){this.a=a +this.b=b}, +a9z:function a9z(a,b){this.a=a +this.b=b}, +a9t:function a9t(a){this.a=a}, +a9u:function a9u(a,b){this.a=a +this.b=b}, +a9s:function a9s(a){this.a=a}, +a9w:function a9w(a){this.a=a}, +a9x:function a9x(a){this.a=a}, +a9v:function a9v(a){this.a=a}, +a9p:function a9p(){}, +a9q:function a9q(){}, +acw:function acw(){}, +acx:function acx(){}, +Na:function Na(a,b){this.a=a +this.b=b}, +Oe:function Oe(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +acS:function acS(){this.a=!1 +this.b=null}, +Of:function Of(a){this.b=a +this.d=null}, +ani:function ani(){}, +aaO:function aaO(a){this.a=a}, +aaR:function aaR(){}, +Pl:function Pl(a,b){this.a=a +this.b=b}, +afj:function afj(a){this.a=a}, +Pk:function Pk(a,b){this.a=a +this.b=b}, +Pj:function Pj(a,b){this.a=a +this.b=b}, +O_:function O_(a,b,c){this.a=a +this.b=b +this.c=c}, +By:function By(a,b){this.a=a +this.b=b}, +aDx:function aDx(a){this.a=a}, +aDe:function aDe(){}, +XK:function XK(a,b){this.a=a +this.b=-1 +this.$ti=b}, +eZ:function eZ(a,b){this.a=a +this.$ti=b}, +XP:function XP(a,b){this.a=a +this.b=-1 +this.$ti=b}, +nN:function nN(a,b){this.a=a +this.$ti=b}, +NY:function NY(a,b){this.a=a +this.b=$ +this.$ti=b}, +OS:function OS(a){var _=this +_.a=a +_.e=_.d=_.c=_.b=null +_.y=_.x=_.w=_.r=_.f=$}, +ac9:function ac9(){}, +T2:function T2(a,b){this.a=a +this.b=b}, +u_:function u_(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +a1y:function a1y(a,b){this.a=a +this.b=b}, +amY:function amY(){}, +aEw:function aEw(){}, +aEv:function aEv(){}, +ade:function ade(a,b,c,d,e,f,g,h,i,j,k,l,m){var _=this +_.a=a +_.b=$ +_.c=b +_.d=c +_.e=d +_.f=e +_.r=f +_.w=g +_.x=h +_.y=i +_.z=j +_.Q=k +_.as=l +_.at=m +_.ax=!1 +_.ch=_.ay=$}, +adf:function adf(){}, +adg:function adg(){}, +adh:function adh(){}, +adi:function adi(){}, +adj:function adj(){}, +adk:function adk(){}, +adm:function adm(a){this.a=a}, +adn:function adn(){}, +adl:function adl(a){this.a=a}, +a3P:function a3P(a,b,c){this.a=a +this.b=b +this.$ti=c}, +Ou:function Ou(a,b,c){var _=this +_.a=a +_.c=b +_.d=c +_.f=null}, +acD:function acD(a,b,c){this.a=a +this.b=b +this.c=c}, +wh:function wh(a,b){this.a=a +this.b=b}, +rB:function rB(a,b){this.a=a +this.b=b}, +Cf:function Cf(a){this.a=a}, +aDM:function aDM(a){this.a=a}, +aDN:function aDN(a){this.a=a}, +aDO:function aDO(){}, +aDL:function aDL(){}, +fa:function fa(){}, +OW:function OW(){}, +Cd:function Cd(){}, +Ce:function Ce(){}, +Ao:function Ao(){}, +hl:function hl(a,b){this.a=a +this.$ti=b}, +Nh:function Nh(a){this.b=this.a=null +this.$ti=a}, +yO:function yO(a,b,c){this.a=a +this.b=b +this.$ti=c}, +DV:function DV(a,b,c,d){var _=this +_.CW=a +_.dx=_.db=_.cy=_.cx=null +_.dy=$ +_.fr=null +_.x=b +_.a=c +_.b=-1 +_.c=d +_.w=_.r=_.f=_.e=_.d=null}, +mu:function mu(a,b,c,d,e,f,g,h,i){var _=this +_.a=a +_.b=null +_.c=b +_.d=c +_.e=null +_.f=d +_.r=e +_.w=f +_.x=0 +_.y=g +_.Q=_.z=null +_.ax=_.at=_.as=!1 +_.ay=h +_.ch=i}, +cW:function cW(a){this.b=a}, +aps:function aps(a){this.a=a}, +Hz:function Hz(){}, +DX:function DX(a,b,c,d,e,f){var _=this +_.CW=a +_.cx=b +_.hC$=c +_.x=d +_.a=e +_.b=-1 +_.c=f +_.w=_.r=_.f=_.e=_.d=null}, +Rn:function Rn(a,b,c,d,e,f){var _=this +_.CW=a +_.cx=b +_.hC$=c +_.x=d +_.a=e +_.b=-1 +_.c=f +_.w=_.r=_.f=_.e=_.d=null}, +DW:function DW(a,b,c,d,e){var _=this +_.CW=a +_.cx=b +_.cy=null +_.x=c +_.a=d +_.b=-1 +_.c=e +_.w=_.r=_.f=_.e=_.d=null}, +DY:function DY(a,b,c,d){var _=this +_.CW=null +_.cx=a +_.cy=null +_.x=b +_.a=c +_.b=-1 +_.c=d +_.w=_.r=_.f=_.e=_.d=null}, +apD:function apD(a,b,c){this.a=a +this.b=b +this.c=c}, +apC:function apC(a,b){this.a=a +this.b=b}, +aaJ:function aaJ(a,b,c,d){var _=this +_.a=a +_.WF$=b +_.vB$=c +_.lB$=d}, +DZ:function DZ(a,b,c,d,e){var _=this +_.CW=a +_.cx=b +_.dx=_.db=_.cy=null +_.x=c +_.a=d +_.b=-1 +_.c=e +_.w=_.r=_.f=_.e=_.d=null}, +E_:function E_(a,b,c,d,e){var _=this +_.CW=a +_.cx=b +_.cy=null +_.x=c +_.a=d +_.b=-1 +_.c=e +_.w=_.r=_.f=_.e=_.d=null}, +E0:function E0(a,b,c,d,e){var _=this +_.CW=a +_.cx=b +_.cy=null +_.x=c +_.a=d +_.b=-1 +_.c=e +_.w=_.r=_.f=_.e=_.d=null}, +y8:function y8(a){this.a=a +this.b=!1}, +Uf:function Uf(){var _=this +_.e=_.d=_.c=_.b=_.a=null +_.f=!0 +_.r=4278190080 +_.z=_.y=_.x=_.w=null}, +hc:function hc(a,b,c,d,e,f,g){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g}, +akd:function akd(){var _=this +_.d=_.c=_.b=_.a=0}, +a9J:function a9J(){var _=this +_.d=_.c=_.b=_.a=0}, +WP:function WP(){this.b=this.a=null}, +a9U:function a9U(){var _=this +_.d=_.c=_.b=_.a=0}, +pL:function pL(a,b){var _=this +_.a=a +_.b=b +_.c=0 +_.e=_.d=-1}, +aja:function aja(a,b,c){var _=this +_.a=a +_.b=b +_.c=c +_.d=!1 +_.e=0 +_.f=-1 +_.Q=_.z=_.y=_.x=_.w=_.r=0}, +Uh:function Uh(a){this.a=a}, +a2I:function a2I(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=-1 +_.f=0}, +a_x:function a_x(a){var _=this +_.b=0 +_.c=a +_.e=0 +_.f=!1}, +ayz:function ayz(a,b){this.a=a +this.b=b}, +apt:function apt(a){this.a=null +this.b=a}, +Ug:function Ug(a,b,c){this.a=a +this.c=b +this.d=c}, +JT:function JT(a,b){this.c=a +this.a=b}, +zk:function zk(a,b,c){this.a=a +this.b=b +this.c=c}, +x8:function x8(a,b){var _=this +_.b=_.a=null +_.e=_.d=_.c=0 +_.f=a +_.r=b +_.x=_.w=0 +_.y=null +_.z=0 +_.as=_.Q=!0 +_.ch=_.ay=_.ax=_.at=!1 +_.CW=-1 +_.cx=0}, +pm:function pm(a){var _=this +_.a=a +_.b=-1 +_.e=_.d=_.c=0}, +nm:function nm(){this.b=this.a=null}, +aoF:function aoF(a,b,c,d,e,f){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f}, +ajc:function ajc(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.e=_.d=0 +_.f=d}, +pg:function pg(a,b){this.a=a +this.b=b}, +Rq:function Rq(a,b,c,d,e,f,g){var _=this +_.ch=null +_.CW=a +_.cx=b +_.cy=c +_.db=d +_.dy=1 +_.fr=!1 +_.fx=e +_.id=_.go=_.fy=null +_.a=f +_.b=-1 +_.c=g +_.w=_.r=_.f=_.e=_.d=null}, +ajg:function ajg(a){this.a=a}, +akP:function akP(a,b,c){var _=this +_.a=a +_.b=null +_.c=b +_.d=c +_.f=_.e=!1 +_.r=1}, +du:function du(){}, +BF:function BF(){}, +DO:function DO(){}, +Ra:function Ra(){}, +Re:function Re(a,b){this.a=a +this.b=b}, +Rc:function Rc(a,b){this.a=a +this.b=b}, +Rb:function Rb(a){this.a=a}, +Rd:function Rd(a){this.a=a}, +QY:function QY(a,b){var _=this +_.f=a +_.r=b +_.a=!1 +_.c=_.b=-1/0 +_.e=_.d=1/0}, +QX:function QX(a){var _=this +_.f=a +_.a=!1 +_.c=_.b=-1/0 +_.e=_.d=1/0}, +QW:function QW(a){var _=this +_.f=a +_.a=!1 +_.c=_.b=-1/0 +_.e=_.d=1/0}, +R1:function R1(a,b,c){var _=this +_.f=a +_.r=b +_.w=c +_.a=!1 +_.c=_.b=-1/0 +_.e=_.d=1/0}, +R3:function R3(a){var _=this +_.f=a +_.a=!1 +_.c=_.b=-1/0 +_.e=_.d=1/0}, +R9:function R9(a,b,c){var _=this +_.f=a +_.r=b +_.w=c +_.a=!1 +_.c=_.b=-1/0 +_.e=_.d=1/0}, +R7:function R7(a,b){var _=this +_.f=a +_.r=b +_.a=!1 +_.c=_.b=-1/0 +_.e=_.d=1/0}, +R6:function R6(a,b){var _=this +_.f=a +_.r=b +_.a=!1 +_.c=_.b=-1/0 +_.e=_.d=1/0}, +R_:function R_(a,b,c){var _=this +_.f=a +_.r=b +_.w=c +_.x=null +_.a=!1 +_.c=_.b=-1/0 +_.e=_.d=1/0}, +R2:function R2(a,b){var _=this +_.f=a +_.r=b +_.a=!1 +_.c=_.b=-1/0 +_.e=_.d=1/0}, +QZ:function QZ(a,b,c){var _=this +_.f=a +_.r=b +_.w=c +_.a=!1 +_.c=_.b=-1/0 +_.e=_.d=1/0}, +R5:function R5(a,b){var _=this +_.f=a +_.r=b +_.a=!1 +_.c=_.b=-1/0 +_.e=_.d=1/0}, +R8:function R8(a,b,c,d){var _=this +_.f=a +_.r=b +_.w=c +_.x=d +_.a=!1 +_.c=_.b=-1/0 +_.e=_.d=1/0}, +R0:function R0(a,b,c,d){var _=this +_.f=a +_.r=b +_.w=c +_.x=d +_.a=!1 +_.c=_.b=-1/0 +_.e=_.d=1/0}, +R4:function R4(a,b){var _=this +_.f=a +_.r=b +_.a=!1 +_.c=_.b=-1/0 +_.e=_.d=1/0}, +ayy:function ayy(a,b,c,d){var _=this +_.a=a +_.b=!1 +_.d=_.c=17976931348623157e292 +_.f=_.e=-17976931348623157e292 +_.r=b +_.w=c +_.x=!0 +_.y=d +_.z=!1 +_.ax=_.at=_.as=_.Q=0}, +alW:function alW(){var _=this +_.d=_.c=_.b=_.a=!1}, +Ui:function Ui(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=!1}, +uZ:function uZ(){}, +afc:function afc(){this.b=this.a=$}, +afd:function afd(){}, +y9:function y9(a){this.a=a}, +E1:function E1(a,b,c){var _=this +_.CW=null +_.x=a +_.a=b +_.b=-1 +_.c=c +_.w=_.r=_.f=_.e=_.d=null}, +apu:function apu(a){this.a=a}, +apw:function apw(a){this.a=a}, +apx:function apx(a){this.a=a}, +rl:function rl(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.e=d +_.r=_.f=!1}, +aiJ:function aiJ(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e}, +aiK:function aiK(){}, +aon:function aon(){this.a=null +this.b=!1}, +w5:function w5(){}, +P8:function P8(a,b,c,d,e,f){var _=this +_.b=a +_.c=b +_.d=c +_.e=d +_.f=e +_.r=f}, +aem:function aem(a,b,c,d,e,f,g){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g}, +wp:function wp(a,b,c,d,e,f){var _=this +_.b=a +_.c=b +_.d=c +_.e=d +_.f=e +_.r=f}, +aen:function aen(a,b,c,d,e,f,g){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g}, +P7:function P7(a,b,c,d,e,f,g,h){var _=this +_.x=a +_.y=b +_.b=c +_.c=d +_.d=e +_.e=f +_.f=g +_.r=h}, +lk:function lk(){}, +H1:function H1(a,b,c){this.a=a +this.b=b +this.c=c}, +Ir:function Ir(a,b){this.a=a +this.b=b}, +Oh:function Oh(){}, +wX:function wX(a,b){this.b=a +this.c=b +this.a=null}, +wV:function wV(a){this.b=a +this.a=null}, +Ty:function Ty(a,b,c,d,e){var _=this +_.b=a +_.c=b +_.e=null +_.w=_.r=_.f=0 +_.y=c +_.z=d +_.Q=null +_.as=e}, +lR:function lR(a,b){this.b=a +this.c=b +this.d=1}, +uf:function uf(a,b,c){this.a=a +this.b=b +this.c=c}, +aDv:function aDv(){}, +tA:function tA(a,b){this.a=a +this.b=b}, +dJ:function dJ(){}, +Rp:function Rp(){}, +ee:function ee(){}, +ajf:function ajf(){}, +qe:function qe(a,b,c){this.a=a +this.b=b +this.c=c}, +ak5:function ak5(){this.a=0}, +E2:function E2(a,b,c,d){var _=this +_.CW=a +_.cy=_.cx=null +_.x=b +_.a=c +_.b=-1 +_.c=d +_.w=_.r=_.f=_.e=_.d=null}, +Ph:function Ph(){}, +af6:function af6(a,b,c){this.a=a +this.b=b +this.c=c}, +af7:function af7(a,b){this.a=a +this.b=b}, +af4:function af4(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +af5:function af5(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e}, +Pg:function Pg(a){this.a=a}, +Fz:function Fz(a){this.a=a}, +Cs:function Cs(a,b,c){var _=this +_.a=a +_.c=_.b=!1 +_.d=b +_.e=c}, +Mv:function Mv(){}, +a7Z:function a7Z(){}, +a8_:function a8_(a){this.a=a}, +A7:function A7(a,b){this.a=a +this.b=b}, +mV:function mV(a,b){this.a=a +this.b=b}, +rb:function rb(a,b){this.a=a +this.b=b}, +aE3:function aE3(){}, +aE4:function aE4(a){this.a=a}, +aE2:function aE2(a){this.a=a}, +aE5:function aE5(){}, +acT:function acT(a){this.a=a}, +acU:function acU(a){this.a=a}, +acR:function acR(a){this.a=a}, +aDT:function aDT(a,b){this.a=a +this.b=b}, +aDR:function aDR(a,b){this.a=a +this.b=b}, +aDS:function aDS(a){this.a=a}, +aCQ:function aCQ(){}, +aCR:function aCR(){}, +aCS:function aCS(){}, +aCT:function aCT(){}, +aCU:function aCU(){}, +aCV:function aCV(){}, +aCW:function aCW(){}, +aCX:function aCX(){}, +aCm:function aCm(a,b,c){this.a=a +this.b=b +this.c=c}, +PJ:function PJ(a){this.a=$ +this.b=a}, +age:function age(a){this.a=a}, +agf:function agf(a){this.a=a}, +agg:function agg(a){this.a=a}, +agi:function agi(a){this.a=a}, +lm:function lm(a){this.a=a}, +agj:function agj(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=null +_.e=!1 +_.f=d +_.r=e}, +agp:function agp(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +agq:function agq(a){this.a=a}, +agr:function agr(a,b,c){this.a=a +this.b=b +this.c=c}, +ags:function ags(a,b){this.a=a +this.b=b}, +agl:function agl(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e}, +agm:function agm(a,b,c){this.a=a +this.b=b +this.c=c}, +agn:function agn(a,b){this.a=a +this.b=b}, +ago:function ago(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +agk:function agk(a,b,c){this.a=a +this.b=b +this.c=c}, +agt:function agt(a,b){this.a=a +this.b=b}, +a9O:function a9O(a){this.a=a +this.b=!0}, +ahY:function ahY(a){this.a=a}, +aEp:function aEp(){}, +a7Y:function a7Y(){}, +Dj:function Dj(a){var _=this +_.d=a +_.a=_.e=$ +_.c=_.b=!1}, +ai7:function ai7(){}, +Fy:function Fy(a,b){var _=this +_.d=a +_.e=b +_.f=null +_.a=$ +_.c=_.b=!1}, +aoC:function aoC(){}, +aoD:function aoD(){}, +na:function na(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=0 +_.f=e}, +BV:function BV(a){this.a=a +this.b=$ +this.c=0}, +acC:function acC(){}, +Oj:function Oj(){this.a=null +this.b=$ +this.c=!1}, +Oi:function Oi(a){this.a=!1 +this.b=a}, +Pc:function Pc(a,b){this.a=a +this.b=b +this.c=$}, +Ok:function Ok(a,b,c,d,e,f){var _=this +_.a=a +_.d=b +_.e=c +_.f=d +_.k1=_.id=_.go=_.fy=_.fx=_.fr=_.db=_.CW=_.ch=_.ay=_.ax=_.at=_.as=_.Q=_.z=_.y=_.x=_.w=_.r=null +_.k2=e +_.R8=_.p4=_.p3=_.ok=_.k4=_.k3=null +_.RG=f +_.to=null}, +acm:function acm(a,b,c){this.a=a +this.b=b +this.c=c}, +acl:function acl(a,b){this.a=a +this.b=b}, +ach:function ach(a,b){this.a=a +this.b=b}, +aci:function aci(a,b){this.a=a +this.b=b}, +acj:function acj(){}, +ack:function ack(a,b){this.a=a +this.b=b}, +acg:function acg(a){this.a=a}, +acf:function acf(a){this.a=a}, +ace:function ace(a){this.a=a}, +acn:function acn(a,b){this.a=a +this.b=b}, +aE7:function aE7(a,b,c){this.a=a +this.b=b +this.c=c}, +Vg:function Vg(){}, +RE:function RE(a,b,c,d,e,f,g,h){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h}, +ajL:function ajL(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +ajM:function ajM(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e}, +ajN:function ajN(a,b){this.b=a +this.c=b}, +amV:function amV(){}, +amW:function amW(){}, +RI:function RI(a,b,c){var _=this +_.a=a +_.c=b +_.d=c +_.e=$}, +ak0:function ak0(){}, +Ij:function Ij(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e}, +atr:function atr(){}, +ats:function ats(a){this.a=a}, +a47:function a47(){}, +me:function me(a,b){this.a=a +this.b=b}, +uH:function uH(){this.a=0}, +ayH:function ayH(a,b,c,d,e,f){var _=this +_.w=a +_.a=b +_.b=c +_.c=d +_.d=e +_.e=f +_.f=null +_.r=!1}, +ayJ:function ayJ(){}, +ayI:function ayI(a,b,c){this.a=a +this.b=b +this.c=c}, +ayK:function ayK(a){this.a=a}, +ayL:function ayL(a){this.a=a}, +ayM:function ayM(a){this.a=a}, +ayN:function ayN(a){this.a=a}, +ayO:function ayO(a){this.a=a}, +ayP:function ayP(a){this.a=a}, +aBA:function aBA(a,b,c,d,e,f){var _=this +_.w=a +_.a=b +_.b=c +_.c=d +_.d=e +_.e=f +_.f=null +_.r=!1}, +aBB:function aBB(a,b,c){this.a=a +this.b=b +this.c=c}, +aBC:function aBC(a){this.a=a}, +aBD:function aBD(a){this.a=a}, +aBE:function aBE(a){this.a=a}, +aBF:function aBF(a){this.a=a}, +ay7:function ay7(a,b,c,d,e,f){var _=this +_.w=a +_.a=b +_.b=c +_.c=d +_.d=e +_.e=f +_.f=null +_.r=!1}, +ay8:function ay8(a,b,c){this.a=a +this.b=b +this.c=c}, +ay9:function ay9(a){this.a=a}, +aya:function aya(a){this.a=a}, +ayb:function ayb(a){this.a=a}, +ayc:function ayc(a){this.a=a}, +ayd:function ayd(a){this.a=a}, +zo:function zo(a,b){this.a=null +this.b=a +this.c=b}, +ajS:function ajS(a){this.a=a +this.b=0}, +ajT:function ajT(a,b){this.a=a +this.b=b}, +aGJ:function aGJ(){}, +ako:function ako(a,b){var _=this +_.a=a +_.c=_.b=null +_.d=0 +_.e=b}, +akp:function akp(a){this.a=a}, +akq:function akq(a){this.a=a}, +akr:function akr(a){this.a=a}, +akt:function akt(a,b,c){this.a=a +this.b=b +this.c=c}, +aku:function aku(a){this.a=a}, +P4:function P4(a){this.a=a}, +P3:function P3(a){var _=this +_.a=a +_.fx=_.fr=_.dy=_.dx=_.db=_.cy=_.cx=_.CW=_.ch=_.ay=_.ax=_.at=_.as=_.Q=_.z=_.y=_.x=_.w=_.r=_.f=_.e=_.d=_.c=null}, +aiM:function aiM(a,b){var _=this +_.b=_.a=null +_.c=a +_.d=b}, +An:function An(a,b){this.a=a +this.b=b}, +a67:function a67(a,b){this.a=a +this.b=b}, +a68:function a68(a){this.a=a}, +Hb:function Hb(a,b){this.a=a +this.b=b}, +a93:function a93(a,b,c){var _=this +_.e=a +_.a=b +_.b=c +_.c=null}, +NS:function NS(a,b){this.a=a +this.b=b +this.c=null}, +xC:function xC(a,b){this.d=null +this.a=a +this.b=b}, +amM:function amM(a){this.a=a}, +wg:function wg(a,b,c){this.d=a +this.a=b +this.b=c}, +ve:function ve(a){this.a=a +this.b=null}, +a6a:function a6a(a){this.a=a}, +a6b:function a6b(a){this.a=a}, +a69:function a69(a,b,c){this.a=a +this.b=b +this.c=c}, +afG:function afG(a,b){var _=this +_.e=null +_.a=a +_.b=b +_.c=null}, +afP:function afP(a,b,c,d){var _=this +_.e=a +_.f=b +_.r=1 +_.w=null +_.x=!1 +_.a=c +_.b=d +_.c=null}, +afQ:function afQ(a,b){this.a=a +this.b=b}, +afR:function afR(a){this.a=a}, +CS:function CS(a,b){this.a=a +this.b=b}, +td:function td(a,b){this.d=null +this.a=a +this.b=b}, +ajP:function ajP(a,b){this.a=a +this.b=b +this.c=null}, +anz:function anz(a,b,c){var _=this +_.e=null +_.f=a +_.r=null +_.w=0 +_.a=b +_.b=c +_.c=null}, +anG:function anG(a){this.a=a}, +anH:function anH(a){this.a=a}, +anI:function anI(a){this.a=a}, +w4:function w4(a){this.a=a}, +ac5:function ac5(a){this.a=a}, +Tx:function Tx(a){this.a=a}, +Tv:function Tv(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9){var _=this +_.a=a +_.b=b +_.c=c +_.f=d +_.r=e +_.w=f +_.x=g +_.y=h +_.z=i +_.Q=j +_.as=k +_.at=l +_.ax=m +_.ay=n +_.ch=o +_.CW=p +_.cx=q +_.cy=r +_.db=s +_.dx=a0 +_.dy=a1 +_.fr=a2 +_.fx=a3 +_.fy=a4 +_.go=a5 +_.id=a6 +_.k1=a7 +_.k2=a8 +_.k4=a9}, +kt:function kt(a,b){this.a=a +this.b=b}, +tY:function tY(a,b){this.a=a +this.b=b}, +RN:function RN(){}, +adI:function adI(a,b){this.a=a +this.b=b +this.c=null}, +no:function no(){}, +uc:function uc(a,b,c){var _=this +_.a=0 +_.fy=_.fx=_.fr=_.dy=_.dx=_.db=_.cy=_.cx=_.CW=_.ch=_.ay=_.ax=_.at=_.as=_.Q=_.z=_.y=_.x=_.w=_.r=_.f=_.e=_.d=_.c=_.b=null +_.go=-1 +_.id=a +_.k1=b +_.k2=c +_.k3=-1 +_.p2=_.p1=_.ok=_.k4=null +_.p4=_.p3=0}, +ao8:function ao8(a){this.a=a}, +a6c:function a6c(a,b){this.a=a +this.b=b}, +rD:function rD(a,b){this.a=a +this.b=b}, +Fn:function Fn(a,b){this.a=a +this.b=b}, +aco:function aco(a,b,c,d,e,f,g,h,i){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=null +_.r=f +_.w=g +_.x=!1 +_.z=h +_.Q=null +_.as=i}, +acp:function acp(a){this.a=a}, +acq:function acq(a,b){this.a=a +this.b=b}, +acs:function acs(){}, +acr:function acr(a){this.a=a}, +BO:function BO(a,b){this.a=a +this.b=b}, +ao3:function ao3(a){this.a=a}, +ao_:function ao_(){}, +aam:function aam(){this.a=null}, +aan:function aan(a){this.a=a}, +ahR:function ahR(){var _=this +_.b=_.a=null +_.c=0 +_.d=!1}, +ahT:function ahT(a){this.a=a}, +ahS:function ahS(a){this.a=a}, +a84:function a84(a,b){this.a=a +this.b=b +this.c=null}, +G3:function G3(a,b){this.d=null +this.a=a +this.b=b}, +aq1:function aq1(a){this.a=a}, +aof:function aof(a,b,c,d,e,f){var _=this +_.cx=_.CW=_.ch=null +_.a=a +_.b=!1 +_.c=null +_.d=$ +_.y=_.x=_.w=_.r=_.f=_.e=null +_.z=b +_.Q=!1 +_.a$=c +_.b$=d +_.c$=e +_.d$=f}, +aq7:function aq7(a,b){var _=this +_.f=_.e=null +_.a=a +_.b=b +_.c=null}, +aq9:function aq9(a){this.a=a}, +aqa:function aqa(a){this.a=a}, +aqb:function aqb(a){this.a=a}, +aqc:function aqc(a,b){this.a=a +this.b=b}, +aqd:function aqd(a){this.a=a}, +aqe:function aqe(a){this.a=a}, +aqf:function aqf(a){this.a=a}, +mi:function mi(){}, +Z7:function Z7(){}, +UY:function UY(a,b){this.a=a +this.b=b}, +jq:function jq(a,b){this.a=a +this.b=b}, +ag2:function ag2(){}, +ag4:function ag4(){}, +apa:function apa(){}, +apc:function apc(a,b){this.a=a +this.b=b}, +ape:function ape(){}, +as8:function as8(a,b,c){var _=this +_.a=!1 +_.b=a +_.c=b +_.d=c}, +S2:function S2(a){this.a=a +this.b=0}, +apy:function apy(a,b){this.a=a +this.b=b}, +MA:function MA(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=!1 +_.f=null +_.w=_.r=$ +_.x=null +_.y=!1}, +a8s:function a8s(){}, +tx:function tx(a,b,c){this.a=a +this.b=b +this.c=c}, +xe:function xe(a,b,c,d,e,f,g){var _=this +_.f=a +_.r=b +_.w=c +_.a=d +_.b=e +_.c=f +_.d=g}, +y6:function y6(){}, +ME:function ME(a,b){this.b=a +this.c=b +this.a=null}, +SR:function SR(a){this.b=a +this.a=null}, +a8r:function a8r(a,b,c,d,e,f){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=0 +_.r=f +_.w=!0}, +af8:function af8(){}, +af9:function af9(a,b,c){this.a=a +this.b=b +this.c=c}, +afa:function afa(a){this.a=a}, +afb:function afb(a){this.a=a}, +aqh:function aqh(){}, +aqg:function aqg(){}, +agB:function agB(a,b){this.b=a +this.a=b}, +aul:function aul(){}, +km:function km(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q){var _=this +_.AC$=a +_.r1$=b +_.hc$=c +_.kz$=d +_.mV$=e +_.mW$=f +_.mX$=g +_.f4$=h +_.f5$=i +_.c=j +_.d=k +_.e=l +_.f=m +_.r=n +_.w=o +_.a=p +_.b=q}, +avA:function avA(){}, +avB:function avB(){}, +avz:function avz(){}, +O8:function O8(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q){var _=this +_.AC$=a +_.r1$=b +_.hc$=c +_.kz$=d +_.mV$=e +_.mW$=f +_.mX$=g +_.f4$=h +_.f5$=i +_.c=j +_.d=k +_.e=l +_.f=m +_.r=n +_.w=o +_.a=p +_.b=q}, +pQ:function pQ(a,b,c){var _=this +_.a=a +_.b=-1 +_.c=0 +_.d=null +_.f=_.e=0 +_.w=_.r=-1 +_.x=!1 +_.y=b +_.z=c +_.as=_.Q=$}, +agE:function agE(a,b,c,d,e,f){var _=this +_.a=a +_.b=null +_.c=b +_.d=c +_.e=d +_.f=e +_.r=f +_.z=_.y=_.x=_.w=0 +_.Q=-1 +_.ax=_.at=_.as=0}, +U2:function U2(a){this.a=a +this.c=this.b=null}, +ap1:function ap1(){}, +p2:function p2(a,b){this.a=a +this.b=b}, +acz:function acz(a){this.a=a}, +arS:function arS(a,b){this.b=a +this.a=b}, +p1:function p1(a,b,c,d,e){var _=this +_.c=a +_.d=b +_.e=c +_.a=d +_.b=e}, +aCv:function aCv(a,b,c){this.a=a +this.b=b +this.c=c}, +SX:function SX(a){this.a=a}, +aqH:function aqH(a){this.a=a}, +ll:function ll(a,b,c,d,e,f,g,h,i){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.x=i}, +lC:function lC(a,b,c,d,e,f,g,h,i){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.x=i}, +BP:function BP(a,b,c,d,e,f,g,h,i,j,k){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.x=i +_.z=j +_.Q=k}, +BR:function BR(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.x=i +_.y=j +_.z=k +_.Q=l +_.as=m +_.at=n +_.ax=o +_.ay=p +_.ch=q +_.CW=r +_.cx=s +_.cy=a0 +_.db=a1 +_.dx=null +_.dy=$}, +BQ:function BQ(a,b,c,d,e,f,g,h,i){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.x=i}, +aj6:function aj6(){}, +ur:function ur(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=$}, +aq3:function aq3(a){this.a=a +this.b=null}, +yk:function yk(a,b,c){var _=this +_.a=a +_.b=b +_.d=_.c=$ +_.e=c +_.r=_.f=$}, +wi:function wi(a,b){this.a=a +this.b=b}, +qO:function qO(a,b,c,d){var _=this +_.c=a +_.d=b +_.a=c +_.b=d}, +He:function He(a,b){this.a=a +this.b=b}, +da:function da(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.$ti=d}, +nG:function nG(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.$ti=d}, +Yc:function Yc(a,b,c){this.c=a +this.a=b +this.b=c}, +a7U:function a7U(a){this.a=a}, +Nc:function Nc(){}, +acc:function acc(){}, +aiG:function aiG(){}, +act:function act(){}, +aaT:function aaT(){}, +ae6:function ae6(){}, +aiE:function aiE(){}, +ak6:function ak6(){}, +anK:function anK(){}, +aoh:function aoh(){}, +acd:function acd(){}, +aiI:function aiI(){}, +aqx:function aqx(){}, +aiL:function aiL(){}, +aac:function aac(){}, +aji:function aji(){}, +ac0:function ac0(){}, +arL:function arL(){}, +Qz:function Qz(){}, +yg:function yg(a,b){this.a=a +this.b=b}, +G8:function G8(a){this.a=a}, +ac6:function ac6(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e}, +ac7:function ac7(a,b){this.a=a +this.b=b}, +ac8:function ac8(a,b,c){this.a=a +this.b=b +this.c=c}, +LW:function LW(a,b,c,d){var _=this +_.a=a +_.b=b +_.d=c +_.e=d}, +yi:function yi(a,b,c,d,e,f,g,h){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h}, +w2:function w2(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e}, +afW:function afW(a,b,c,d,e,f,g,h,i){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.x=i}, +P5:function P5(a,b,c,d,e,f){var _=this +_.a=a +_.b=!1 +_.c=null +_.d=$ +_.y=_.x=_.w=_.r=_.f=_.e=null +_.z=b +_.Q=!1 +_.a$=c +_.b$=d +_.c$=e +_.d$=f}, +T_:function T_(a,b,c,d,e,f){var _=this +_.a=a +_.b=!1 +_.c=null +_.d=$ +_.y=_.x=_.w=_.r=_.f=_.e=null +_.z=b +_.Q=!1 +_.a$=c +_.b$=d +_.c$=e +_.d$=f}, +amU:function amU(a){this.a=a}, +Br:function Br(){}, +aah:function aah(a){this.a=a}, +aai:function aai(){}, +aaj:function aaj(){}, +aak:function aak(){}, +afn:function afn(a,b,c,d,e,f){var _=this +_.ok=null +_.p1=!0 +_.a=a +_.b=!1 +_.c=null +_.d=$ +_.y=_.x=_.w=_.r=_.f=_.e=null +_.z=b +_.Q=!1 +_.a$=c +_.b$=d +_.c$=e +_.d$=f}, +afq:function afq(a){this.a=a}, +afr:function afr(a,b){this.a=a +this.b=b}, +afo:function afo(a){this.a=a}, +afp:function afp(a){this.a=a}, +a6n:function a6n(a,b,c,d,e,f){var _=this +_.a=a +_.b=!1 +_.c=null +_.d=$ +_.y=_.x=_.w=_.r=_.f=_.e=null +_.z=b +_.Q=!1 +_.a$=c +_.b$=d +_.c$=e +_.d$=f}, +a6o:function a6o(a){this.a=a}, +acH:function acH(a,b,c,d,e,f){var _=this +_.a=a +_.b=!1 +_.c=null +_.d=$ +_.y=_.x=_.w=_.r=_.f=_.e=null +_.z=b +_.Q=!1 +_.a$=c +_.b$=d +_.c$=e +_.d$=f}, +acJ:function acJ(a){this.a=a}, +acK:function acK(a){this.a=a}, +acI:function acI(a){this.a=a}, +aqk:function aqk(){}, +aqr:function aqr(a,b){this.a=a +this.b=b}, +aqy:function aqy(){}, +aqt:function aqt(a){this.a=a}, +aqw:function aqw(){}, +aqs:function aqs(a){this.a=a}, +aqv:function aqv(a){this.a=a}, +aqi:function aqi(){}, +aqo:function aqo(){}, +aqu:function aqu(){}, +aqq:function aqq(){}, +aqp:function aqp(){}, +aqn:function aqn(a){this.a=a}, +aEt:function aEt(){}, +aq4:function aq4(a){this.a=a}, +aq5:function aq5(a){this.a=a}, +afk:function afk(){var _=this +_.a=$ +_.b=null +_.c=!1 +_.d=null +_.f=$}, +afm:function afm(a){this.a=a}, +afl:function afl(a){this.a=a}, +abR:function abR(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e}, +aba:function aba(a,b,c){this.a=a +this.b=b +this.c=c}, +abb:function abb(){}, +Gz:function Gz(a,b){this.a=a +this.b=b}, +aDs:function aDs(){}, +Q7:function Q7(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.$ti=d}, +bU:function bU(a){this.a=a}, +acE:function acE(a){this.a=a +this.c=this.b=0}, +Nu:function Nu(a,b){this.a=a +this.b=$ +this.c=b}, +aa5:function aa5(a){this.a=a}, +aa4:function aa4(){}, +aaq:function aaq(){}, +P0:function P0(a){this.a=$ +this.b=a}, +aa6:function aa6(a){this.b=a +this.a=null}, +aa7:function aa7(a){this.a=a}, +ac1:function ac1(){}, +adz:function adz(){this.a=null}, +adA:function adA(a){this.a=a}, +Og:function Og(a,b,c,d){var _=this +_.a=a +_.b=b +_.d=_.c=$ +_.e=null +_.f=c +_.r=$ +_.w=d +_.x=null}, +aca:function aca(a){this.a=a}, +acb:function acb(a,b){this.a=a +this.b=b}, +Vh:function Vh(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +Xw:function Xw(){}, +XJ:function XJ(){}, +Zi:function Zi(){}, +Zj:function Zj(){}, +Zk:function Zk(){}, +a_A:function a_A(){}, +a_B:function a_B(){}, +a4E:function a4E(){}, +a4L:function a4L(){}, +aGb:function aGb(){}, +b5D(){return $}, +cC(a,b,c){if(b.h("a8<0>").b(a))return new A.HO(a,b.h("@<0>").N(c).h("HO<1,2>")) +return new A.qY(a,b.h("@<0>").N(c).h("qY<1,2>"))}, +mZ(a){return new A.iK("Field '"+a+"' has not been initialized.")}, +fy(a){return new A.iK("Local '"+a+"' has not been initialized.")}, +n_(a){return new A.iK("Local '"+a+"' has already been initialized.")}, +aVZ(a){return new A.fu(a)}, +aDX(a){var s,r=a^48 +if(r<=9)return r +s=a|32 +if(97<=s&&s<=102)return s-87 +return-1}, +b7d(a,b){var s=A.aDX(a.charCodeAt(b)),r=A.aDX(a.charCodeAt(b+1)) +return s*16+r-(r&256)}, +L(a,b){a=a+b&536870911 +a=a+((a&524287)<<10)&536870911 +return a^a>>>6}, +eU(a){a=a+((a&67108863)<<3)&536870911 +a^=a>>>11 +return a+((a&16383)<<15)&536870911}, +aNs(a,b,c){return A.eU(A.L(A.L(c,a),b))}, +b05(a,b,c,d,e){return A.eU(A.L(A.L(A.L(A.L(e,a),b),c),d))}, +fK(a,b,c){return a}, +aIt(a){var s,r +for(s=$.v8.length,r=0;rc)A.T(A.c9(b,0,c,"start",null))}return new A.ac(a,b,c,d.h("ac<0>"))}, +n8(a,b,c,d){if(t.Ee.b(a))return new A.rj(a,b,c.h("@<0>").N(d).h("rj<1,2>")) +return new A.hr(a,b,c.h("@<0>").N(d).h("hr<1,2>"))}, +b07(a,b,c){var s="takeCount" +A.LL(b,s) +A.eA(b,s) +if(t.Ee.b(a))return new A.BM(a,b,c.h("BM<0>")) +return new A.uo(a,b,c.h("uo<0>"))}, +aNd(a,b,c){var s="count" +if(t.Ee.b(a)){A.LL(b,s) +A.eA(b,s) +return new A.w3(a,b,c.h("w3<0>"))}A.LL(b,s) +A.eA(b,s) +return new A.nv(a,b,c.h("nv<0>"))}, +aL3(a,b,c){if(c.h("a8<0>").b(b))return new A.BL(a,b,c.h("BL<0>")) +return new A.mQ(a,b,c.h("mQ<0>"))}, +cm(){return new A.jE("No element")}, +ag0(){return new A.jE("Too many elements")}, +aLr(){return new A.jE("Too few elements")}, +TW(a,b,c,d){if(c-b<=32)A.b_P(a,b,c,d) +else A.b_O(a,b,c,d)}, +b_P(a,b,c,d){var s,r,q,p,o +for(s=b+1,r=J.aF(a);s<=c;++s){q=r.i(a,s) +p=s +while(!0){if(!(p>b&&d.$2(r.i(a,p-1),q)>0))break +o=p-1 +r.n(a,p,r.i(a,o)) +p=o}r.n(a,p,q)}}, +b_O(a3,a4,a5,a6){var s,r,q,p,o,n,m,l,k,j,i=B.f.d4(a5-a4+1,6),h=a4+i,g=a5-i,f=B.f.d4(a4+a5,2),e=f-i,d=f+i,c=J.aF(a3),b=c.i(a3,h),a=c.i(a3,e),a0=c.i(a3,f),a1=c.i(a3,d),a2=c.i(a3,g) +if(a6.$2(b,a)>0){s=a +a=b +b=s}if(a6.$2(a1,a2)>0){s=a2 +a2=a1 +a1=s}if(a6.$2(b,a0)>0){s=a0 +a0=b +b=s}if(a6.$2(a,a0)>0){s=a0 +a0=a +a=s}if(a6.$2(b,a1)>0){s=a1 +a1=b +b=s}if(a6.$2(a0,a1)>0){s=a1 +a1=a0 +a0=s}if(a6.$2(a,a2)>0){s=a2 +a2=a +a=s}if(a6.$2(a,a0)>0){s=a0 +a0=a +a=s}if(a6.$2(a1,a2)>0){s=a2 +a2=a1 +a1=s}c.n(a3,h,b) +c.n(a3,f,a0) +c.n(a3,g,a2) +c.n(a3,e,c.i(a3,a4)) +c.n(a3,d,c.i(a3,a5)) +r=a4+1 +q=a5-1 +if(J.d(a6.$2(a,a1),0)){for(p=r;p<=q;++p){o=c.i(a3,p) +n=a6.$2(o,a) +if(n===0)continue +if(n<0){if(p!==r){c.n(a3,p,c.i(a3,r)) +c.n(a3,r,o)}++r}else for(;!0;){n=a6.$2(c.i(a3,q),a) +if(n>0){--q +continue}else{m=q-1 +if(n<0){c.n(a3,p,c.i(a3,r)) +l=r+1 +c.n(a3,r,c.i(a3,q)) +c.n(a3,q,o) +q=m +r=l +break}else{c.n(a3,p,c.i(a3,q)) +c.n(a3,q,o) +q=m +break}}}}k=!0}else{for(p=r;p<=q;++p){o=c.i(a3,p) +if(a6.$2(o,a)<0){if(p!==r){c.n(a3,p,c.i(a3,r)) +c.n(a3,r,o)}++r}else if(a6.$2(o,a1)>0)for(;!0;)if(a6.$2(c.i(a3,q),a1)>0){--q +if(qg){for(;J.d(a6.$2(c.i(a3,r),a),0);)++r +for(;J.d(a6.$2(c.i(a3,q),a1),0);)--q +for(p=r;p<=q;++p){o=c.i(a3,p) +if(a6.$2(o,a)===0){if(p!==r){c.n(a3,p,c.i(a3,r)) +c.n(a3,r,o)}++r}else if(a6.$2(o,a1)===0)for(;!0;)if(a6.$2(c.i(a3,q),a1)===0){--q +if(q")),!0,b),l=m.length,k=0 +while(!0){if(!(k").N(c).h("bs<1,2>")) +n.$keys=m +return n}return new A.r5(A.aLE(a,b,c),b.h("@<0>").N(c).h("r5<1,2>"))}, +a9K(){throw A.c(A.a3("Cannot modify unmodifiable Map"))}, +aFt(){throw A.c(A.a3("Cannot modify constant Set"))}, +aRL(a){var s=v.mangledGlobalNames[a] +if(s!=null)return s +return"minified:"+a}, +aQS(a,b){var s +if(b!=null){s=b.x +if(s!=null)return s}return t.dC.b(a)}, +h(a){var s +if(typeof a=="string")return a +if(typeof a=="number"){if(a!==0)return""+a}else if(!0===a)return"true" +else if(!1===a)return"false" +else if(a==null)return"null" +s=J.f0(a) +return s}, +J(a,b,c,d,e,f){return new A.CK(a,c,d,e,f)}, +bcR(a,b,c,d,e,f){return new A.CK(a,c,d,e,f)}, +fE(a){var s,r=$.aMu +if(r==null)r=$.aMu=Symbol("identityHashCode") +s=a[r] +if(s==null){s=Math.random()*0x3fffffff|0 +a[r]=s}return s}, +aGI(a,b){var s,r,q,p,o,n=null,m=/^\s*[+-]?((0x[a-f0-9]+)|(\d+)|([a-z0-9]+))\s*$/i.exec(a) +if(m==null)return n +s=m[3] +if(b==null){if(s!=null)return parseInt(a,10) +if(m[2]!=null)return parseInt(a,16) +return n}if(b<2||b>36)throw A.c(A.c9(b,2,36,"radix",n)) +if(b===10&&s!=null)return parseInt(a,10) +if(b<10||s==null){r=b<=10?47+b:86+b +q=m[1] +for(p=q.length,o=0;or)return n}return parseInt(a,b)}, +RP(a){var s,r +if(!/^\s*[+-]?(?:Infinity|NaN|(?:\.\d+|\d+(?:\.\d*)?)(?:[eE][+-]?\d+)?)\s*$/.test(a))return null +s=parseFloat(a) +if(isNaN(s)){r=B.d.fb(a) +if(r==="NaN"||r==="+NaN"||r==="-NaN")return s +return null}return s}, +aka(a){return A.aZn(a)}, +aZn(a){var s,r,q,p +if(a instanceof A.I)return A.iq(A.as(a),null) +s=J.ja(a) +if(s===B.Oj||s===B.Os||t.kk.b(a)){r=B.n3(a) +if(r!=="Object"&&r!=="")return r +q=a.constructor +if(typeof q=="function"){p=q.name +if(typeof p=="string"&&p!=="Object"&&p!=="")return p}}return A.iq(A.as(a),null)}, +aMw(a){if(a==null||typeof a=="number"||A.ml(a))return J.f0(a) +if(typeof a=="string")return JSON.stringify(a) +if(a instanceof A.ou)return a.k(0) +if(a instanceof A.io)return a.SW(!0) +return"Instance of '"+A.aka(a)+"'"}, +aZp(){return Date.now()}, +aZx(){var s,r +if($.akb!==0)return +$.akb=1000 +if(typeof window=="undefined")return +s=window +if(s==null)return +if(!!s.dartUseDateNowForTicks)return +r=s.performance +if(r==null)return +if(typeof r.now!="function")return +$.akb=1e6 +$.RQ=new A.ak9(r)}, +aZo(){if(!!self.location)return self.location.href +return null}, +aMt(a){var s,r,q,p,o=a.length +if(o<=500)return String.fromCharCode.apply(null,a) +for(s="",r=0;r65535)return A.aZy(a)}return A.aMt(a)}, +aZz(a,b,c){var s,r,q,p +if(c<=500&&b===0&&c===a.length)return String.fromCharCode.apply(null,a) +for(s=b,r="";s>>0,s&1023|56320)}}throw A.c(A.c9(a,0,1114111,null,null))}, +iW(a){if(a.date===void 0)a.date=new Date(a.a) +return a.date}, +aZw(a){return a.b?A.iW(a).getUTCFullYear()+0:A.iW(a).getFullYear()+0}, +aZu(a){return a.b?A.iW(a).getUTCMonth()+1:A.iW(a).getMonth()+1}, +aZq(a){return a.b?A.iW(a).getUTCDate()+0:A.iW(a).getDate()+0}, +aZr(a){return a.b?A.iW(a).getUTCHours()+0:A.iW(a).getHours()+0}, +aZt(a){return a.b?A.iW(a).getUTCMinutes()+0:A.iW(a).getMinutes()+0}, +aZv(a){return a.b?A.iW(a).getUTCSeconds()+0:A.iW(a).getSeconds()+0}, +aZs(a){return a.b?A.iW(a).getUTCMilliseconds()+0:A.iW(a).getMilliseconds()+0}, +pr(a,b,c){var s,r,q={} +q.a=0 +s=[] +r=[] +q.a=b.length +B.b.E(s,b) +q.b="" +if(c!=null&&c.a!==0)c.aa(0,new A.ak8(q,r,s)) +return J.aUS(a,new A.CK(B.Z6,0,s,r,0))}, +aMv(a,b,c){var s,r,q +if(Array.isArray(b))s=c==null||c.a===0 +else s=!1 +if(s){r=b.length +if(r===0){if(!!a.$0)return a.$0()}else if(r===1){if(!!a.$1)return a.$1(b[0])}else if(r===2){if(!!a.$2)return a.$2(b[0],b[1])}else if(r===3){if(!!a.$3)return a.$3(b[0],b[1],b[2])}else if(r===4){if(!!a.$4)return a.$4(b[0],b[1],b[2],b[3])}else if(r===5)if(!!a.$5)return a.$5(b[0],b[1],b[2],b[3],b[4]) +q=a[""+"$"+r] +if(q!=null)return q.apply(a,b)}return A.aZm(a,b,c)}, +aZm(a,b,c){var s,r,q,p,o,n,m,l,k,j,i,h,g=Array.isArray(b)?b:A.V(b,!0,t.z),f=g.length,e=a.$R +if(fn)return A.pr(a,g,null) +if(fe)return A.pr(a,g,c) +if(g===b)g=A.V(g,!0,t.z) +l=Object.keys(q) +if(c==null)for(r=l.length,k=0;k=s)return A.dB(b,s,a,null,r) +return A.RY(b,r)}, +b6_(a,b,c){if(a<0||a>c)return A.c9(a,0,c,"start",null) +if(b!=null)if(bc)return A.c9(b,a,c,"end",null) +return new A.jZ(!0,b,"end",null)}, +zN(a){return new A.jZ(!0,a,null,null)}, +fL(a){return a}, +c(a){return A.aQO(new Error(),a)}, +aQO(a,b){var s +if(b==null)b=new A.nD() +a.dartException=b +s=A.b8c +if("defineProperty" in Object){Object.defineProperty(a,"message",{get:s}) +a.name=""}else a.toString=s +return a}, +b8c(){return J.f0(this.dartException)}, +T(a){throw A.c(a)}, +aEA(a,b){throw A.aQO(b,a)}, +K(a){throw A.c(A.ci(a))}, +nE(a){var s,r,q,p,o,n +a=A.a5L(a.replace(String({}),"$receiver$")) +s=a.match(/\\\$[a-zA-Z]+\\\$/g) +if(s==null)s=A.a([],t.s) +r=s.indexOf("\\$arguments\\$") +q=s.indexOf("\\$argumentsExpr\\$") +p=s.indexOf("\\$expr\\$") +o=s.indexOf("\\$method\\$") +n=s.indexOf("\\$receiver\\$") +return new A.ary(a.replace(new RegExp("\\\\\\$arguments\\\\\\$","g"),"((?:x|[^x])*)").replace(new RegExp("\\\\\\$argumentsExpr\\\\\\$","g"),"((?:x|[^x])*)").replace(new RegExp("\\\\\\$expr\\\\\\$","g"),"((?:x|[^x])*)").replace(new RegExp("\\\\\\$method\\\\\\$","g"),"((?:x|[^x])*)").replace(new RegExp("\\\\\\$receiver\\\\\\$","g"),"((?:x|[^x])*)"),r,q,p,o,n)}, +arz(a){return function($expr$){var $argumentsExpr$="$arguments$" +try{$expr$.$method$($argumentsExpr$)}catch(s){return s.message}}(a)}, +aNN(a){return function($expr$){try{$expr$.$method$}catch(s){return s.message}}(a)}, +aGd(a,b){var s=b==null,r=s?null:b.method +return new A.PC(a,r,s?null:b.receiver)}, +ax(a){if(a==null)return new A.QM(a) +if(a instanceof A.BT)return A.qu(a,a.a) +if(typeof a!=="object")return a +if("dartException" in a)return A.qu(a,a.dartException) +return A.b4I(a)}, +qu(a,b){if(t.Lt.b(b))if(b.$thrownJsError==null)b.$thrownJsError=a +return b}, +b4I(a){var s,r,q,p,o,n,m,l,k,j,i,h,g +if(!("message" in a))return a +s=a.message +if("number" in a&&typeof a.number=="number"){r=a.number +q=r&65535 +if((B.f.el(r,16)&8191)===10)switch(q){case 438:return A.qu(a,A.aGd(A.h(s)+" (Error "+q+")",null)) +case 445:case 5007:A.h(s) +return A.qu(a,new A.DC())}}if(a instanceof TypeError){p=$.aSy() +o=$.aSz() +n=$.aSA() +m=$.aSB() +l=$.aSE() +k=$.aSF() +j=$.aSD() +$.aSC() +i=$.aSH() +h=$.aSG() +g=p.kL(s) +if(g!=null)return A.qu(a,A.aGd(s,g)) +else{g=o.kL(s) +if(g!=null){g.method="call" +return A.qu(a,A.aGd(s,g))}else if(n.kL(s)!=null||m.kL(s)!=null||l.kL(s)!=null||k.kL(s)!=null||j.kL(s)!=null||m.kL(s)!=null||i.kL(s)!=null||h.kL(s)!=null)return A.qu(a,new A.DC())}return A.qu(a,new A.V2(typeof s=="string"?s:""))}if(a instanceof RangeError){if(typeof s=="string"&&s.indexOf("call stack")!==-1)return new A.FK() +s=function(b){try{return String(b)}catch(f){}return null}(a) +return A.qu(a,new A.jZ(!1,null,null,typeof s=="string"?s.replace(/^RangeError:\s*/,""):s))}if(typeof InternalError=="function"&&a instanceof InternalError)if(typeof s=="string"&&s==="too much recursion")return new A.FK() +return a}, +aZ(a){var s +if(a instanceof A.BT)return a.b +if(a==null)return new A.JM(a) +s=a.$cachedTrace +if(s!=null)return s +s=new A.JM(a) +if(typeof a==="object")a.$cachedTrace=s +return s}, +mo(a){if(a==null)return J.D(a) +if(typeof a=="object")return A.fE(a) +return J.D(a)}, +b5o(a){if(typeof a=="number")return B.c.gt(a) +if(a instanceof A.Kc)return A.fE(a) +if(a instanceof A.io)return a.gt(a) +if(a instanceof A.lW)return a.gt(a) +return A.mo(a)}, +aQC(a,b){var s,r,q,p=a.length +for(s=0;s")) +s.c=a.e +return s}, +bcU(a,b,c){Object.defineProperty(a,b,{value:c,enumerable:false,writable:true,configurable:true})}, +b6X(a){var s,r,q,p,o,n=$.aQM.$1(a),m=$.aDI[n] +if(m!=null){Object.defineProperty(a,v.dispatchPropertyName,{value:m,enumerable:false,writable:true,configurable:true}) +return m.i}s=$.aE6[n] +if(s!=null)return s +r=v.interceptorsByTag[n] +if(r==null){q=$.aQ3.$2(a,n) +if(q!=null){m=$.aDI[q] +if(m!=null){Object.defineProperty(a,v.dispatchPropertyName,{value:m,enumerable:false,writable:true,configurable:true}) +return m.i}s=$.aE6[q] +if(s!=null)return s +r=v.interceptorsByTag[q] +n=q}}if(r==null)return null +s=r.prototype +p=n[0] +if(p==="!"){m=A.aEh(s) +$.aDI[n]=m +Object.defineProperty(a,v.dispatchPropertyName,{value:m,enumerable:false,writable:true,configurable:true}) +return m.i}if(p==="~"){$.aE6[n]=s +return s}if(p==="-"){o=A.aEh(s) +Object.defineProperty(Object.getPrototypeOf(a),v.dispatchPropertyName,{value:o,enumerable:false,writable:true,configurable:true}) +return o.i}if(p==="+")return A.aRj(a,s) +if(p==="*")throw A.c(A.co(n)) +if(v.leafTags[n]===true){o=A.aEh(s) +Object.defineProperty(Object.getPrototypeOf(a),v.dispatchPropertyName,{value:o,enumerable:false,writable:true,configurable:true}) +return o.i}else return A.aRj(a,s)}, +aRj(a,b){var s=Object.getPrototypeOf(a) +Object.defineProperty(s,v.dispatchPropertyName,{value:J.aIw(b,s,null,null),enumerable:false,writable:true,configurable:true}) +return b}, +aEh(a){return J.aIw(a,!1,null,!!a.$ibD)}, +b6Z(a,b,c){var s=b.prototype +if(v.leafTags[a]===true)return A.aEh(s) +else return J.aIw(s,c,null,null)}, +b6z(){if(!0===$.aIq)return +$.aIq=!0 +A.b6A()}, +b6A(){var s,r,q,p,o,n,m,l +$.aDI=Object.create(null) +$.aE6=Object.create(null) +A.b6y() +s=v.interceptorsByTag +r=Object.getOwnPropertyNames(s) +if(typeof window!="undefined"){window +q=function(){} +for(p=0;p=0 +else if(b instanceof A.oW){s=B.d.bL(a,c) +return b.b.test(s)}else{s=J.aEY(b,B.d.bL(a,c)) +return!s.ga7(s)}}, +aQz(a){if(a.indexOf("$",0)>=0)return a.replace(/\$/g,"$$$$") +return a}, +a5L(a){if(/[[\]{}()*+?.\\^$|]/.test(a))return a.replace(/[[\]{}()*+?.\\^$|]/g,"\\$&") +return a}, +is(a,b,c){var s +if(typeof b=="string")return A.b7Z(a,b,c) +if(b instanceof A.oW){s=b.gQz() +s.lastIndex=0 +return a.replace(s,A.aQz(c))}return A.b7Y(a,b,c)}, +b7Y(a,b,c){var s,r,q,p +for(s=J.aEY(b,a),s=s.gab(s),r=0,q="";s.q();){p=s.gJ(s) +q=q+a.substring(r,p.gbW(p))+c +r=p.gbi(p)}s=q+a.substring(r) +return s.charCodeAt(0)==0?s:s}, +b7Z(a,b,c){var s,r,q +if(b===""){if(a==="")return c +s=a.length +r=""+c +for(q=0;q=0)return a.split(b).join(c) +return a.replace(new RegExp(A.a5L(b),"g"),A.aQz(c))}, +aPY(a){return a}, +a5N(a,b,c,d){var s,r,q,p,o,n,m +for(s=b.lm(0,a),s=new A.pZ(s.a,s.b,s.c),r=t.Qz,q=0,p="";s.q();){o=s.d +if(o==null)o=r.a(o) +n=o.b +m=n.index +p=p+A.h(A.aPY(B.d.P(a,q,m)))+A.h(c.$1(o)) +q=m+n[0].length}s=p+A.h(A.aPY(B.d.bL(a,q))) +return s.charCodeAt(0)==0?s:s}, +b80(a,b,c,d){var s=a.indexOf(b,d) +if(s<0)return a +return A.aRF(a,s,s+b.length,c)}, +b8_(a,b,c,d){var s,r,q=b.zK(0,a,d),p=new A.pZ(q.a,q.b,q.c) +if(!p.q())return a +s=p.d +if(s==null)s=t.Qz.a(s) +r=A.h(c.$1(s)) +return B.d.kX(a,s.b.index,s.gbi(s),r)}, +aRF(a,b,c,d){return a.substring(0,b)+d+a.substring(c)}, +dj:function dj(a,b){this.a=a +this.b=b}, +zq:function zq(a,b){this.a=a +this.b=b}, +a0F:function a0F(a,b){this.a=a +this.b=b}, +a0G:function a0G(a,b){this.a=a +this.b=b}, +IQ:function IQ(a,b,c){this.a=a +this.b=b +this.c=c}, +a0H:function a0H(a,b,c){this.a=a +this.b=b +this.c=c}, +a0I:function a0I(a,b,c){this.a=a +this.b=b +this.c=c}, +IR:function IR(a,b,c){this.a=a +this.b=b +this.c=c}, +a0J:function a0J(a){this.a=a}, +IS:function IS(a){this.a=a}, +a0K:function a0K(a){this.a=a}, +a0L:function a0L(a){this.a=a}, +r5:function r5(a,b){this.a=a +this.$ti=b}, +vL:function vL(){}, +a9L:function a9L(a,b,c){this.a=a +this.b=b +this.c=c}, +bs:function bs(a,b,c){this.a=a +this.b=b +this.$ti=c}, +uP:function uP(a,b){this.a=a +this.$ti=b}, +q6:function q6(a,b,c){var _=this +_.a=a +_.b=b +_.c=0 +_.d=null +_.$ti=c}, +bz:function bz(a,b){this.a=a +this.$ti=b}, +Bc:function Bc(){}, +fO:function fO(a,b,c){this.a=a +this.b=b +this.$ti=c}, +fb:function fb(a,b){this.a=a +this.$ti=b}, +PA:function PA(){}, +mY:function mY(a,b){this.a=a +this.$ti=b}, +CK:function CK(a,b,c,d,e){var _=this +_.a=a +_.c=b +_.d=c +_.e=d +_.f=e}, +ak9:function ak9(a){this.a=a}, +ak8:function ak8(a,b,c){this.a=a +this.b=b +this.c=c}, +ary:function ary(a,b,c,d,e,f){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f}, +DC:function DC(){}, +PC:function PC(a,b,c){this.a=a +this.b=b +this.c=c}, +V2:function V2(a){this.a=a}, +QM:function QM(a){this.a=a}, +BT:function BT(a,b){this.a=a +this.b=b}, +JM:function JM(a){this.a=a +this.b=null}, +ou:function ou(){}, +N6:function N6(){}, +N7:function N7(){}, +Us:function Us(){}, +U8:function U8(){}, +vq:function vq(a,b){this.a=a +this.b=b}, +Xn:function Xn(a){this.a=a}, +SZ:function SZ(a){this.a=a}, +azF:function azF(){}, +fx:function fx(a){var _=this +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=0 +_.$ti=a}, +aga:function aga(a){this.a=a}, +ag9:function ag9(a,b){this.a=a +this.b=b}, +ag8:function ag8(a){this.a=a}, +ah8:function ah8(a,b){var _=this +_.a=a +_.b=b +_.d=_.c=null}, +aX:function aX(a,b){this.a=a +this.$ti=b}, +wJ:function wJ(a,b,c){var _=this +_.a=a +_.b=b +_.d=_.c=null +_.$ti=c}, +CN:function CN(a){var _=this +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=0 +_.$ti=a}, +rT:function rT(a){var _=this +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=0 +_.$ti=a}, +aDZ:function aDZ(a){this.a=a}, +aE_:function aE_(a){this.a=a}, +aE0:function aE0(a){this.a=a}, +io:function io(){}, +a0C:function a0C(){}, +a0D:function a0D(){}, +a0E:function a0E(){}, +oW:function oW(a,b){var _=this +_.a=a +_.b=b +_.d=_.c=null}, +zb:function zb(a){this.b=a}, +VG:function VG(a,b,c){this.a=a +this.b=b +this.c=c}, +pZ:function pZ(a,b,c){var _=this +_.a=a +_.b=b +_.c=c +_.d=null}, +y3:function y3(a,b){this.a=a +this.c=b}, +a2B:function a2B(a,b,c){this.a=a +this.b=b +this.c=c}, +a2C:function a2C(a,b,c){var _=this +_.a=a +_.b=b +_.c=c +_.d=null}, +b89(a){A.aEA(new A.iK("Field '"+a+u.N),new Error())}, +b(){A.aEA(new A.iK("Field '' has not been initialized."),new Error())}, +bS(){A.aEA(new A.iK("Field '' has already been initialized."),new Error())}, +ay(){A.aEA(new A.iK("Field '' has been assigned during initialization."),new Error())}, +bc(a){var s=new A.au6(a) +return s.b=s}, +bn(a,b){var s=new A.awf(a,b) +return s.b=s}, +au6:function au6(a){this.a=a +this.b=null}, +awf:function awf(a,b){this.a=a +this.b=null +this.c=b}, +L2(a,b,c){}, +em(a){return a}, +aYC(a){return new DataView(new ArrayBuffer(a))}, +fC(a,b,c){A.L2(a,b,c) +return c==null?new DataView(a,b):new DataView(a,b,c)}, +Do(a){return new Float32Array(a)}, +aYD(a){return new Float32Array(A.em(a))}, +aM1(a,b,c){A.L2(a,b,c) +return new Float32Array(a,b,c)}, +aYE(a){return new Float64Array(a)}, +aGr(a,b,c){A.L2(a,b,c) +return new Float64Array(a,b,c)}, +aM2(a){return new Int32Array(a)}, +aGs(a,b,c){A.L2(a,b,c) +return new Int32Array(a,b,c)}, +aYF(a){return new Int8Array(a)}, +aM3(a){return new Uint16Array(A.em(a))}, +aGt(a){return new Uint8Array(a)}, +dD(a,b,c){A.L2(a,b,c) +return c==null?new Uint8Array(a,b):new Uint8Array(a,b,c)}, +o3(a,b,c){if(a>>>0!==a||a>=c)throw A.c(A.zP(b,a))}, +qn(a,b,c){var s +if(!(a>>>0!==a))if(b==null)s=a>c +else s=b>>>0!==b||a>b||b>c +else s=!0 +if(s)throw A.c(A.b6_(a,b,c)) +if(b==null)return c +return b}, +Dl:function Dl(){}, +Dq:function Dq(){}, +Dm:function Dm(){}, +wZ:function wZ(){}, +pc:function pc(){}, +iR:function iR(){}, +Dn:function Dn(){}, +QB:function QB(){}, +QC:function QC(){}, +Dp:function Dp(){}, +QD:function QD(){}, +Dr:function Dr(){}, +Ds:function Ds(){}, +Dt:function Dt(){}, +tt:function tt(){}, +Iz:function Iz(){}, +IA:function IA(){}, +IB:function IB(){}, +IC:function IC(){}, +aMO(a,b){var s=b.c +return s==null?b.c=A.aHF(a,b.y,!0):s}, +aGR(a,b){var s=b.c +return s==null?b.c=A.Kg(a,"ae",[b.y]):s}, +b_5(a){var s=a.d +if(s!=null)return s +return a.d=new Map()}, +aMP(a){var s=a.x +if(s===6||s===7||s===8)return A.aMP(a.y) +return s===12||s===13}, +b_4(a){return a.at}, +aEo(a,b){var s,r=b.length +for(s=0;s") +for(r=1;r=0)p+=" "+r[q];++q}return p+"})"}, +aPr(a3,a4,a5){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,a2=", " +if(a5!=null){s=a5.length +if(a4==null){a4=A.a([],t.s) +r=null}else r=a4.length +q=a4.length +for(p=s;p>0;--p)a4.push("T"+(q+p)) +for(o=t.X,n=t.ub,m="<",l="",p=0;p0){a0+=a1+"[" +for(a1="",p=0;p0){a0+=a1+"{" +for(a1="",p=0;p "+a}, +iq(a,b){var s,r,q,p,o,n,m=a.x +if(m===5)return"erased" +if(m===2)return"dynamic" +if(m===3)return"void" +if(m===1)return"Never" +if(m===4)return"any" +if(m===6){s=A.iq(a.y,b) +return s}if(m===7){r=a.y +s=A.iq(r,b) +q=r.x +return(q===12||q===13?"("+s+")":s)+"?"}if(m===8)return"FutureOr<"+A.iq(a.y,b)+">" +if(m===9){p=A.b4H(a.y) +o=a.z +return o.length>0?p+("<"+A.aPR(o,b)+">"):p}if(m===11)return A.b4k(a,b) +if(m===12)return A.aPr(a,b,null) +if(m===13)return A.aPr(a.y,b,a.z) +if(m===14){n=a.y +return b[b.length-1-n]}return"?"}, +b4H(a){var s=v.mangledGlobalNames[a] +if(s!=null)return s +return"minified:"+a}, +b2l(a,b){var s=a.tR[b] +for(;typeof s=="string";)s=a.tR[s] +return s}, +b2k(a,b){var s,r,q,p,o,n=a.eT,m=n[b] +if(m==null)return A.a3S(a,b,!1) +else if(typeof m=="number"){s=m +r=A.Kh(a,5,"#") +q=A.aBS(s) +for(p=0;p0)p+="<"+A.Kf(c)+">" +s=a.eC.get(p) +if(s!=null)return s +r=new A.jx(null,null) +r.x=9 +r.y=b +r.z=c +if(c.length>0)r.c=c[0] +r.at=p +q=A.o_(a,r) +a.eC.set(p,q) +return q}, +aHD(a,b,c){var s,r,q,p,o,n +if(b.x===10){s=b.y +r=b.z.concat(c)}else{r=c +s=b}q=s.at+(";<"+A.Kf(r)+">") +p=a.eC.get(q) +if(p!=null)return p +o=new A.jx(null,null) +o.x=10 +o.y=s +o.z=r +o.at=q +n=A.o_(a,o) +a.eC.set(q,n) +return n}, +b2h(a,b,c){var s,r,q="+"+(b+"("+A.Kf(c)+")"),p=a.eC.get(q) +if(p!=null)return p +s=new A.jx(null,null) +s.x=11 +s.y=b +s.z=c +s.at=q +r=A.o_(a,s) +a.eC.set(q,r) +return r}, +aOK(a,b,c){var s,r,q,p,o,n=b.at,m=c.a,l=m.length,k=c.b,j=k.length,i=c.c,h=i.length,g="("+A.Kf(m) +if(j>0){s=l>0?",":"" +g+=s+"["+A.Kf(k)+"]"}if(h>0){s=l>0?",":"" +g+=s+"{"+A.b2b(i)+"}"}r=n+(g+")") +q=a.eC.get(r) +if(q!=null)return q +p=new A.jx(null,null) +p.x=12 +p.y=b +p.z=c +p.at=r +o=A.o_(a,p) +a.eC.set(r,o) +return o}, +aHE(a,b,c,d){var s,r=b.at+("<"+A.Kf(c)+">"),q=a.eC.get(r) +if(q!=null)return q +s=A.b2d(a,b,c,r,d) +a.eC.set(r,s) +return s}, +b2d(a,b,c,d,e){var s,r,q,p,o,n,m,l +if(e){s=c.length +r=A.aBS(s) +for(q=0,p=0;p0){n=A.o6(a,b,r,0) +m=A.L8(a,c,r,0) +return A.aHE(a,n,m,c!==m)}}l=new A.jx(null,null) +l.x=13 +l.y=b +l.z=c +l.at=d +return A.o_(a,l)}, +aOp(a,b,c,d){return{u:a,e:b,r:c,s:[],p:0,n:d}}, +aOr(a){var s,r,q,p,o,n,m,l=a.r,k=a.s +for(s=l.length,r=0;r=48&&q<=57)r=A.b1C(r+1,q,l,k) +else if((((q|32)>>>0)-97&65535)<26||q===95||q===36||q===124)r=A.aOq(a,r,l,k,!1) +else if(q===46)r=A.aOq(a,r,l,k,!0) +else{++r +switch(q){case 44:break +case 58:k.push(!1) +break +case 33:k.push(!0) +break +case 59:k.push(A.qd(a.u,a.e,k.pop())) +break +case 94:k.push(A.b2g(a.u,k.pop())) +break +case 35:k.push(A.Kh(a.u,5,"#")) +break +case 64:k.push(A.Kh(a.u,2,"@")) +break +case 126:k.push(A.Kh(a.u,3,"~")) +break +case 60:k.push(a.p) +a.p=k.length +break +case 62:A.b1E(a,k) +break +case 38:A.b1D(a,k) +break +case 42:p=a.u +k.push(A.aOM(p,A.qd(p,a.e,k.pop()),a.n)) +break +case 63:p=a.u +k.push(A.aHF(p,A.qd(p,a.e,k.pop()),a.n)) +break +case 47:p=a.u +k.push(A.aOL(p,A.qd(p,a.e,k.pop()),a.n)) +break +case 40:k.push(-3) +k.push(a.p) +a.p=k.length +break +case 41:A.b1B(a,k) +break +case 91:k.push(a.p) +a.p=k.length +break +case 93:o=k.splice(a.p) +A.aOs(a.u,a.e,o) +a.p=k.pop() +k.push(o) +k.push(-1) +break +case 123:k.push(a.p) +a.p=k.length +break +case 125:o=k.splice(a.p) +A.b1G(a.u,a.e,o) +a.p=k.pop() +k.push(o) +k.push(-2) +break +case 43:n=l.indexOf("(",r) +k.push(l.substring(r,n)) +k.push(-4) +k.push(a.p) +a.p=k.length +r=n+1 +break +default:throw"Bad character "+q}}}m=k.pop() +return A.qd(a.u,a.e,m)}, +b1C(a,b,c,d){var s,r,q=b-48 +for(s=c.length;a=48&&r<=57))break +q=q*10+(r-48)}d.push(q) +return a}, +aOq(a,b,c,d,e){var s,r,q,p,o,n,m=b+1 +for(s=c.length;m>>0)-97&65535)<26||r===95||r===36||r===124))q=r>=48&&r<=57 +else q=!0 +if(!q)break}}p=c.substring(b,m) +if(e){s=a.u +o=a.e +if(o.x===10)o=o.y +n=A.b2l(s,o.y)[p] +if(n==null)A.T('No "'+p+'" in "'+A.b_4(o)+'"') +d.push(A.Ki(s,o,n))}else d.push(p) +return m}, +b1E(a,b){var s,r=a.u,q=A.aOo(a,b),p=b.pop() +if(typeof p=="string")b.push(A.Kg(r,p,q)) +else{s=A.qd(r,a.e,p) +switch(s.x){case 12:b.push(A.aHE(r,s,q,a.n)) +break +default:b.push(A.aHD(r,s,q)) +break}}}, +b1B(a,b){var s,r,q,p,o,n=null,m=a.u,l=b.pop() +if(typeof l=="number")switch(l){case-1:s=b.pop() +r=n +break +case-2:r=b.pop() +s=n +break +default:b.push(l) +r=n +s=r +break}else{b.push(l) +r=n +s=r}q=A.aOo(a,b) +l=b.pop() +switch(l){case-3:l=b.pop() +if(s==null)s=m.sEA +if(r==null)r=m.sEA +p=A.qd(m,a.e,l) +o=new A.YC() +o.a=q +o.b=s +o.c=r +b.push(A.aOK(m,p,o)) +return +case-4:b.push(A.b2h(m,b.pop(),q)) +return +default:throw A.c(A.ms("Unexpected state under `()`: "+A.h(l)))}}, +b1D(a,b){var s=b.pop() +if(0===s){b.push(A.Kh(a.u,1,"0&")) +return}if(1===s){b.push(A.Kh(a.u,4,"1&")) +return}throw A.c(A.ms("Unexpected extended operation "+A.h(s)))}, +aOo(a,b){var s=b.splice(a.p) +A.aOs(a.u,a.e,s) +a.p=b.pop() +return s}, +qd(a,b,c){if(typeof c=="string")return A.Kg(a,c,a.sEA) +else if(typeof c=="number"){b.toString +return A.b1F(a,b,c)}else return c}, +aOs(a,b,c){var s,r=c.length +for(s=0;sn)return!1 +m=n-o +l=s.b +k=r.b +j=l.length +i=k.length +if(o+j=d)return!1 +a1=f[b] +b+=3 +if(a00?new Array(q):v.typeUniverse.sEA +for(o=0;o0?new Array(a):v.typeUniverse.sEA}, +jx:function jx(a,b){var _=this +_.a=a +_.b=b +_.w=_.r=_.e=_.d=_.c=null +_.x=0 +_.at=_.as=_.Q=_.z=_.y=null}, +YC:function YC(){this.c=this.b=this.a=null}, +Kc:function Kc(a){this.a=a}, +Y0:function Y0(){}, +Kd:function Kd(a){this.a=a}, +b6u(a,b){var s,r +if(B.d.bz(a,"Digit"))return a.charCodeAt(5) +s=b.charCodeAt(0) +if(b.length<=1)r=!(s>=32&&s<=127) +else r=!0 +if(r){r=B.l1.i(0,a) +return r==null?null:r.charCodeAt(0)}if(!(s>=$.aTw()&&s<=$.aTx()))r=s>=$.aTH()&&s<=$.aTI() +else r=!0 +if(r)return b.toLowerCase().charCodeAt(0) +return null}, +b24(a){var s=B.l1.gd5(B.l1) +return new A.aAX(a,A.aGk(s.eQ(s,new A.aAY(),t.q9),t.S,t.N))}, +b4G(a){var s,r,q,p,o=a.YZ(),n=A.A(t.N,t.S) +for(s=a.a,r=0;r=2)return null +return a.toLowerCase().charCodeAt(0)}, +aAX:function aAX(a,b){this.a=a +this.b=b +this.c=0}, +aAY:function aAY(){}, +D2:function D2(a){this.a=a}, +bT:function bT(a,b){this.a=a +this.b=b}, +dU:function dU(a,b){this.a=a +this.b=b}, +b0V(){var s,r,q={} +if(self.scheduleImmediate!=null)return A.b4N() +if(self.MutationObserver!=null&&self.document!=null){s=self.document.createElement("div") +r=self.document.createElement("span") +q.a=null +new self.MutationObserver(A.o8(new A.at4(q),1)).observe(s,{childList:true}) +return new A.at3(q,s,r)}else if(self.setImmediate!=null)return A.b4O() +return A.b4P()}, +b0W(a){self.scheduleImmediate(A.o8(new A.at5(a),0))}, +b0X(a){self.setImmediate(A.o8(new A.at6(a),0))}, +b0Y(a){A.aNF(B.z,a)}, +aNF(a,b){var s=B.f.d4(a.a,1000) +return A.b26(s<0?0:s,b)}, +b0w(a,b){var s=B.f.d4(a.a,1000) +return A.b27(s<0?0:s,b)}, +b26(a,b){var s=new A.K8(!0) +s.a6w(a,b) +return s}, +b27(a,b){var s=new A.K8(!1) +s.a6x(a,b) +return s}, +a1(a){return new A.GR(new A.aD($.aw,a.h("aD<0>")),a.h("GR<0>"))}, +a0(a,b){a.$2(0,null) +b.b=!0 +return b.a}, +a7(a,b){A.b2E(a,b)}, +a_(a,b){b.e7(0,a)}, +Z(a,b){b.mF(A.ax(a),A.aZ(a))}, +b2E(a,b){var s,r,q=new A.aCi(b),p=new A.aCj(b) +if(a instanceof A.aD)a.SR(q,p,t.z) +else{s=t.z +if(t.L0.b(a))a.fV(q,p,s) +else{r=new A.aD($.aw,t.LR) +r.a=8 +r.c=a +r.SR(q,p,s)}}}, +a2(a){var s=function(b,c){return function(d,e){while(true)try{b(d,e) +break}catch(r){e=r +d=c}}}(a,1) +return $.aw.Ca(new A.aDh(s),t.H,t.S,t.z)}, +aOF(a,b,c){return 0}, +a6G(a,b){var s=A.fK(a,"error",t.K) +return new A.LR(s,b==null?A.LS(a):b)}, +LS(a){var s +if(t.Lt.b(a)){s=a.gxx() +if(s!=null)return s}return B.Ex}, +aXA(a,b){var s=new A.aD($.aw,b.h("aD<0>")) +A.cy(B.z,new A.adF(s,a)) +return s}, +aXB(a,b){var s=new A.aD($.aw,b.h("aD<0>")) +A.fq(new A.adE(s,a)) +return s}, +d5(a,b){var s=a==null?b.a(a):a,r=new A.aD($.aw,b.h("aD<0>")) +r.mk(s) +return r}, +aFY(a,b,c){var s,r +A.fK(a,"error",t.K) +s=$.aw +if(s!==B.ai){r=s.Iv(a,b) +if(r!=null){a=r.a +b=r.b}}if(b==null)b=A.LS(a) +s=new A.aD($.aw,c.h("aD<0>")) +s.xV(a,b) +return s}, +Ch(a,b,c){var s,r +if(b==null)s=!c.b(null) +else s=!1 +if(s)throw A.c(A.hL(null,"computation","The type parameter is not nullable")) +r=new A.aD($.aw,c.h("aD<0>")) +A.cy(a,new A.adD(b,r,c)) +return r}, +oJ(a,b){var s,r,q,p,o,n,m,l,k,j,i={},h=null,g=!1,f=new A.aD($.aw,b.h("aD>")) +i.a=null +i.b=0 +s=A.bc("error") +r=A.bc("stackTrace") +q=new A.adH(i,h,g,f,s,r) +try{for(l=J.ap(a),k=t.P;l.q();){p=l.gJ(l) +o=i.b +p.fV(new A.adG(i,o,f,h,g,s,r,b),q,k);++i.b}l=i.b +if(l===0){l=f +l.tK(A.a([],b.h("q<0>"))) +return l}i.a=A.bf(l,null,!1,b.h("0?"))}catch(j){n=A.ax(j) +m=A.aZ(j) +if(i.b===0||g)return A.aFY(n,m,b.h("v<0>")) +else{s.b=n +r.b=m}}return f}, +aXz(a,b,c,d){var s,r,q=new A.adC(d,null,b,c) +if(a instanceof A.aD){s=$.aw +r=new A.aD(s,c.h("aD<0>")) +if(s!==B.ai)q=s.Ca(q,c.h("0/"),t.K,t.Km) +a.pD(new A.jQ(r,2,null,q,a.$ti.h("@<1>").N(c).h("jQ<1,2>"))) +return r}return a.fV(new A.adB(c),q,c)}, +aW1(a){return new A.bI(new A.aD($.aw,a.h("aD<0>")),a.h("bI<0>"))}, +aCu(a,b,c){var s=$.aw.Iv(b,c) +if(s!=null){b=s.a +c=s.b}else if(c==null)c=A.LS(b) +a.iG(b,c)}, +hD(a,b){var s=new A.aD($.aw,b.h("aD<0>")) +s.a=8 +s.c=a +return s}, +aHp(a,b){var s,r +for(;s=a.a,(s&4)!==0;)a=a.c +if((s&24)!==0){r=b.yV() +b.xX(a) +A.yY(b,r)}else{r=b.c +b.S2(a) +a.G3(r)}}, +b1k(a,b){var s,r,q={},p=q.a=a +for(;s=p.a,(s&4)!==0;){p=p.c +q.a=p}if((s&24)===0){r=b.c +b.S2(p) +q.a.G3(r) +return}if((s&16)===0&&b.c==null){b.xX(p) +return}b.a^=2 +b.b.pk(new A.avJ(q,b))}, +yY(a,b){var s,r,q,p,o,n,m,l,k,j,i,h,g,f={},e=f.a=a +for(s=t.L0;!0;){r={} +q=e.a +p=(q&16)===0 +o=!p +if(b==null){if(o&&(q&1)===0){s=e.c +e.b.B0(s.a,s.b)}return}r.a=b +n=b.a +for(e=b;n!=null;e=n,n=m){e.a=null +A.yY(f.a,e) +r.a=n +m=n.a}q=f.a +l=q.c +r.b=o +r.c=l +if(p){k=e.c +k=(k&1)!==0||(k&15)===8}else k=!0 +if(k){j=e.b.b +if(o){e=q.b +e=!(e===j||e.gqW()===j.gqW())}else e=!1 +if(e){e=f.a +s=e.c +e.b.B0(s.a,s.b) +return}i=$.aw +if(i!==j)$.aw=j +else i=null +e=r.a.c +if((e&15)===8)new A.avQ(r,f,o).$0() +else if(p){if((e&1)!==0)new A.avP(r,l).$0()}else if((e&2)!==0)new A.avO(f,r).$0() +if(i!=null)$.aw=i +e=r.c +if(s.b(e)){q=r.a.$ti +q=q.h("ae<2>").b(e)||!q.z[1].b(e)}else q=!1 +if(q){h=r.a.b +if(e instanceof A.aD)if((e.a&24)!==0){g=h.c +h.c=null +b=h.z_(g) +h.a=e.a&30|h.a&1 +h.c=e.c +f.a=e +continue}else A.aHp(e,h) +else h.Ed(e) +return}}h=r.a.b +g=h.c +h.c=null +b=h.z_(g) +e=r.b +q=r.c +if(!e){h.a=8 +h.c=q}else{h.a=h.a&1|16 +h.c=q}f.a=h +e=h}}, +aPN(a,b){if(t.Hg.b(a))return b.Ca(a,t.z,t.K,t.Km) +if(t.C_.b(a))return b.Cb(a,t.z,t.K) +throw A.c(A.hL(a,"onError",u.w))}, +b44(){var s,r +for(s=$.zL;s!=null;s=$.zL){$.L6=null +r=s.b +$.zL=r +if(r==null)$.L5=null +s.a.$0()}}, +b4r(){$.aHY=!0 +try{A.b44()}finally{$.L6=null +$.aHY=!1 +if($.zL!=null)$.aIU().$1(A.aQ8())}}, +aPV(a){var s=new A.VY(a),r=$.L5 +if(r==null){$.zL=$.L5=s +if(!$.aHY)$.aIU().$1(A.aQ8())}else $.L5=r.b=s}, +b4n(a){var s,r,q,p=$.zL +if(p==null){A.aPV(a) +$.L6=$.L5 +return}s=new A.VY(a) +r=$.L6 +if(r==null){s.b=p +$.zL=$.L6=s}else{q=r.b +s.b=q +$.L6=r.b=s +if(q==null)$.L5=s}}, +fq(a){var s,r=null,q=$.aw +if(B.ai===q){A.aD7(r,r,B.ai,a) +return}if(B.ai===q.gahI().a)s=B.ai.gqW()===q.gqW() +else s=!1 +if(s){A.aD7(r,r,q,q.wv(a,t.H)) +return}s=$.aw +s.pk(s.Hp(a))}, +aNj(a,b){var s=null,r=b.h("q_<0>"),q=new A.q_(s,s,s,s,r) +q.tF(0,a) +q.NJ() +return new A.m8(q,r.h("m8<1>"))}, +ba5(a,b){A.fK(a,"stream",t.K) +return new A.a2z(b.h("a2z<0>"))}, +aH2(a,b){var s=null +return a?new A.JW(s,s,b.h("JW<0>")):new A.GS(s,s,b.h("GS<0>"))}, +a5B(a){var s,r,q +if(a==null)return +try{a.$0()}catch(q){s=A.ax(q) +r=A.aZ(q) +$.aw.B0(s,r)}}, +b13(a,b,c,d,e,f){var s,r=$.aw,q=e?1:0,p=A.aHo(r,b,f) +A.aO8(r,c) +s=d==null?A.aQ7():d +return new A.uJ(a,p,r.wv(s,t.H),r,q,f.h("uJ<0>"))}, +aHo(a,b,c){var s=b==null?A.b4Q():b +return a.Cb(s,t.H,c)}, +aO8(a,b){if(b==null)b=A.b4R() +if(t.hK.b(b))return a.Ca(b,t.z,t.K,t.Km) +if(t.lO.b(b))return a.Cb(b,t.z,t.K) +throw A.c(A.bC("handleError callback must take either an Object (the error), or both an Object (the error) and a StackTrace.",null))}, +b49(a){}, +b4b(a,b){$.aw.B0(a,b)}, +b4a(){}, +aOb(a,b){var s=$.aw,r=new A.HB(s,b.h("HB<0>")) +A.fq(r.gafv()) +if(a!=null)r.c=s.wv(a,t.H) +return r}, +b2M(a,b,c){var s=a.b3(0),r=$.Ls() +if(s!==r)s.ix(new A.aCn(b,c)) +else b.nJ(c)}, +cy(a,b){var s=$.aw +if(s===B.ai)return s.VI(a,b) +return s.VI(a,s.Hp(b))}, +aHc(a,b){var s,r=$.aw +if(r===B.ai)return r.VC(a,b) +s=r.UC(b,t.qe) +return $.aw.VC(a,s)}, +aI3(a,b){A.b4n(new A.aD6(a,b))}, +aPP(a,b,c,d){var s,r=$.aw +if(r===c)return d.$0() +$.aw=c +s=r +try{r=d.$0() +return r}finally{$.aw=s}}, +aPQ(a,b,c,d,e){var s,r=$.aw +if(r===c)return d.$1(e) +$.aw=c +s=r +try{r=d.$1(e) +return r}finally{$.aw=s}}, +b4l(a,b,c,d,e,f){var s,r=$.aw +if(r===c)return d.$2(e,f) +$.aw=c +s=r +try{r=d.$2(e,f) +return r}finally{$.aw=s}}, +aD7(a,b,c,d){var s,r +if(B.ai!==c){s=B.ai.gqW() +r=c.gqW() +d=s!==r?c.Hp(d):c.alL(d,t.H)}A.aPV(d)}, +at4:function at4(a){this.a=a}, +at3:function at3(a,b,c){this.a=a +this.b=b +this.c=c}, +at5:function at5(a){this.a=a}, +at6:function at6(a){this.a=a}, +K8:function K8(a){this.a=a +this.b=null +this.c=0}, +aBw:function aBw(a,b){this.a=a +this.b=b}, +aBv:function aBv(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +GR:function GR(a,b){this.a=a +this.b=!1 +this.$ti=b}, +aCi:function aCi(a){this.a=a}, +aCj:function aCj(a){this.a=a}, +aDh:function aDh(a){this.a=a}, +e4:function e4(a,b){var _=this +_.a=a +_.e=_.d=_.c=_.b=null +_.$ti=b}, +fn:function fn(a,b){this.a=a +this.$ti=b}, +LR:function LR(a,b){this.a=a +this.b=b}, +j5:function j5(a,b){this.a=a +this.$ti=b}, +yJ:function yJ(a,b,c,d,e,f){var _=this +_.ay=0 +_.CW=_.ch=null +_.w=a +_.a=b +_.c=c +_.d=d +_.e=e +_.r=_.f=null +_.$ti=f}, +q0:function q0(){}, +JW:function JW(a,b,c){var _=this +_.a=a +_.b=b +_.c=0 +_.r=_.e=_.d=null +_.$ti=c}, +aB7:function aB7(a,b){this.a=a +this.b=b}, +aB8:function aB8(a){this.a=a}, +GS:function GS(a,b,c){var _=this +_.a=a +_.b=b +_.c=0 +_.r=_.e=_.d=null +_.$ti=c}, +adF:function adF(a,b){this.a=a +this.b=b}, +adE:function adE(a,b){this.a=a +this.b=b}, +adD:function adD(a,b,c){this.a=a +this.b=b +this.c=c}, +adH:function adH(a,b,c,d,e,f){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f}, +adG:function adG(a,b,c,d,e,f,g,h){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h}, +adC:function adC(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +adB:function adB(a){this.a=a}, +yK:function yK(){}, +bI:function bI(a,b){this.a=a +this.$ti=b}, +jQ:function jQ(a,b,c,d,e){var _=this +_.a=null +_.b=a +_.c=b +_.d=c +_.e=d +_.$ti=e}, +aD:function aD(a,b){var _=this +_.a=0 +_.b=a +_.c=null +_.$ti=b}, +avG:function avG(a,b){this.a=a +this.b=b}, +avN:function avN(a,b){this.a=a +this.b=b}, +avK:function avK(a){this.a=a}, +avL:function avL(a){this.a=a}, +avM:function avM(a,b,c){this.a=a +this.b=b +this.c=c}, +avJ:function avJ(a,b){this.a=a +this.b=b}, +avI:function avI(a,b){this.a=a +this.b=b}, +avH:function avH(a,b,c){this.a=a +this.b=b +this.c=c}, +avQ:function avQ(a,b,c){this.a=a +this.b=b +this.c=c}, +avR:function avR(a){this.a=a}, +avP:function avP(a,b){this.a=a +this.b=b}, +avO:function avO(a,b){this.a=a +this.b=b}, +VY:function VY(a){this.a=a +this.b=null}, +eg:function eg(){}, +apl:function apl(a,b){this.a=a +this.b=b}, +apm:function apm(a,b){this.a=a +this.b=b}, +apj:function apj(a){this.a=a}, +apk:function apk(a,b,c){this.a=a +this.b=b +this.c=c}, +FL:function FL(){}, +JP:function JP(){}, +aAU:function aAU(a){this.a=a}, +aAT:function aAT(a){this.a=a}, +VZ:function VZ(){}, +q_:function q_(a,b,c,d,e){var _=this +_.a=null +_.b=0 +_.c=null +_.d=a +_.e=b +_.f=c +_.r=d +_.$ti=e}, +m8:function m8(a,b){this.a=a +this.$ti=b}, +uJ:function uJ(a,b,c,d,e,f){var _=this +_.w=a +_.a=b +_.c=c +_.d=d +_.e=e +_.r=_.f=null +_.$ti=f}, +q1:function q1(){}, +atz:function atz(a){this.a=a}, +zx:function zx(){}, +Xz:function Xz(){}, +ma:function ma(a,b){this.b=a +this.a=null +this.$ti=b}, +av2:function av2(){}, +zm:function zm(a){var _=this +_.a=0 +_.c=_.b=null +_.$ti=a}, +ayC:function ayC(a,b){this.a=a +this.b=b}, +HB:function HB(a,b){var _=this +_.a=1 +_.b=a +_.c=null +_.$ti=b}, +a2z:function a2z(a){this.$ti=a}, +HP:function HP(a){this.$ti=a}, +aCn:function aCn(a,b){this.a=a +this.b=b}, +a4l:function a4l(a,b,c){this.a=a +this.b=b +this.$ti=c}, +a4k:function a4k(){}, +aD6:function aD6(a,b){this.a=a +this.b=b}, +a1q:function a1q(){}, +azQ:function azQ(a,b,c){this.a=a +this.b=b +this.c=c}, +azO:function azO(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e}, +azP:function azP(a,b){this.a=a +this.b=b}, +azR:function azR(a,b,c){this.a=a +this.b=b +this.c=c}, +jk(a,b,c,d,e){if(c==null)if(b==null){if(a==null)return new A.nP(d.h("@<0>").N(e).h("nP<1,2>")) +b=A.aId()}else{if(A.aQl()===b&&A.aQk()===a)return new A.q5(d.h("@<0>").N(e).h("q5<1,2>")) +if(a==null)a=A.aIc()}else{if(b==null)b=A.aId() +if(a==null)a=A.aIc()}return A.b14(a,b,c,d,e)}, +aHq(a,b){var s=a[b] +return s===a?null:s}, +aHs(a,b,c){if(c==null)a[b]=a +else a[b]=c}, +aHr(){var s=Object.create(null) +A.aHs(s,"",s) +delete s[""] +return s}, +b14(a,b,c,d,e){var s=c!=null?c:new A.auM(d) +return new A.Hw(a,b,s,d.h("@<0>").N(e).h("Hw<1,2>"))}, +n1(a,b,c,d){if(b==null){if(a==null)return new A.fx(c.h("@<0>").N(d).h("fx<1,2>")) +b=A.aId()}else{if(A.aQl()===b&&A.aQk()===a)return new A.CN(c.h("@<0>").N(d).h("CN<1,2>")) +if(a==null)a=A.aIc()}return A.b1r(a,b,null,c,d)}, +aY(a,b,c){return A.aQC(a,new A.fx(b.h("@<0>").N(c).h("fx<1,2>")))}, +A(a,b){return new A.fx(a.h("@<0>").N(b).h("fx<1,2>"))}, +b1r(a,b,c,d,e){return new A.Ii(a,b,new A.axy(d),d.h("@<0>").N(e).h("Ii<1,2>"))}, +ds(a){return new A.mb(a.h("mb<0>"))}, +aHt(){var s=Object.create(null) +s[""]=s +delete s[""] +return s}, +p7(a){return new A.im(a.h("im<0>"))}, +aS(a){return new A.im(a.h("im<0>"))}, +dg(a,b){return A.b69(a,new A.im(b.h("im<0>")))}, +aHu(){var s=Object.create(null) +s[""]=s +delete s[""] +return s}, +cX(a,b,c){var s=new A.q7(a,b,c.h("q7<0>")) +s.c=a.e +return s}, +b36(a,b){return J.d(a,b)}, +b38(a){return J.D(a)}, +aLE(a,b,c){var s=A.n1(null,null,b,c) +J.h7(a,new A.ah9(s,b,c)) +return s}, +p6(a,b,c){var s=A.n1(null,null,b,c) +s.E(0,a) +return s}, +wK(a,b){var s,r,q=A.p7(b) +for(s=a.length,r=0;r"))}, +aYb(a,b){var s=t.b8 +return J.A1(s.a(a),s.a(b))}, +ahp(a){var s,r={} +if(A.aIt(a))return"{...}" +s=new A.ck("") +try{$.v8.push(a) +s.a+="{" +r.a=!0 +J.h7(a,new A.ahq(r,s)) +s.a+="}"}finally{$.v8.pop()}r=s.a +return r.charCodeAt(0)==0?r:r}, +n3(a,b){return new A.CY(A.bf(A.aYd(a),null,!1,b.h("0?")),b.h("CY<0>"))}, +aYd(a){if(a==null||a<8)return 8 +else if((a&a-1)>>>0!==0)return A.aLG(a) +return a}, +aLG(a){var s +a=(a<<1>>>0)-1 +for(;!0;a=s){s=(a&a-1)>>>0 +if(s===0)return a}}, +b3c(a,b){return J.A1(a,b)}, +aPh(a){if(a.h("l(0,0)").b(A.aQi()))return A.aQi() +return A.b5g()}, +aH0(a,b){var s=A.aPh(a) +return new A.FH(s,new A.ap3(a),a.h("@<0>").N(b).h("FH<1,2>"))}, +U6(a,b,c){var s=a==null?A.aPh(c):a,r=b==null?new A.ap6(c):b +return new A.y_(s,r,c.h("y_<0>"))}, +nP:function nP(a){var _=this +_.a=0 +_.e=_.d=_.c=_.b=null +_.$ti=a}, +avV:function avV(a){this.a=a}, +avU:function avU(a){this.a=a}, +q5:function q5(a){var _=this +_.a=0 +_.e=_.d=_.c=_.b=null +_.$ti=a}, +Hw:function Hw(a,b,c,d){var _=this +_.f=a +_.r=b +_.w=c +_.a=0 +_.e=_.d=_.c=_.b=null +_.$ti=d}, +auM:function auM(a){this.a=a}, +uO:function uO(a,b){this.a=a +this.$ti=b}, +z0:function z0(a,b,c){var _=this +_.a=a +_.b=b +_.c=0 +_.d=null +_.$ti=c}, +Ii:function Ii(a,b,c,d){var _=this +_.w=a +_.x=b +_.y=c +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=0 +_.$ti=d}, +axy:function axy(a){this.a=a}, +mb:function mb(a){var _=this +_.a=0 +_.e=_.d=_.c=_.b=null +_.$ti=a}, +jR:function jR(a,b,c){var _=this +_.a=a +_.b=b +_.c=0 +_.d=null +_.$ti=c}, +im:function im(a){var _=this +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=0 +_.$ti=a}, +axz:function axz(a){this.a=a +this.c=this.b=null}, +q7:function q7(a,b,c){var _=this +_.a=a +_.b=b +_.d=_.c=null +_.$ti=c}, +ah9:function ah9(a,b,c){this.a=a +this.b=b +this.c=c}, +ta:function ta(a){var _=this +_.b=_.a=0 +_.c=null +_.$ti=a}, +z8:function z8(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=null +_.d=c +_.e=!1 +_.$ti=d}, +iM:function iM(){}, +B:function B(){}, +aM:function aM(){}, +ahn:function ahn(a){this.a=a}, +aho:function aho(a){this.a=a}, +ahq:function ahq(a,b){this.a=a +this.b=b}, +yz:function yz(){}, +Il:function Il(a,b){this.a=a +this.$ti=b}, +ZK:function ZK(a,b,c){var _=this +_.a=a +_.b=b +_.c=null +_.$ti=c}, +qi:function qi(){}, +wQ:function wQ(){}, +kH:function kH(a,b){this.a=a +this.$ti=b}, +HD:function HD(){}, +HC:function HC(a,b,c){var _=this +_.c=a +_.d=b +_.b=_.a=null +_.$ti=c}, +HE:function HE(a){this.b=this.a=null +this.$ti=a}, +BB:function BB(a,b){this.a=a +this.b=0 +this.$ti=b}, +XR:function XR(a,b,c){var _=this +_.a=a +_.b=b +_.c=null +_.$ti=c}, +CY:function CY(a,b){var _=this +_.a=a +_.d=_.c=_.b=0 +_.$ti=b}, +ZD:function ZD(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=null +_.$ti=e}, +jB:function jB(){}, +zv:function zv(){}, +a2w:function a2w(){}, +hF:function hF(a,b){var _=this +_.a=a +_.c=_.b=null +_.$ti=b}, +h3:function h3(a,b,c){var _=this +_.d=a +_.a=b +_.c=_.b=null +_.$ti=c}, +a2v:function a2v(){}, +FH:function FH(a,b,c){var _=this +_.d=null +_.e=a +_.f=b +_.c=_.b=_.a=0 +_.$ti=c}, +ap3:function ap3(a){this.a=a}, +ap2:function ap2(a){this.a=a}, +mf:function mf(){}, +nX:function nX(a,b){this.a=a +this.$ti=b}, +uW:function uW(a,b){this.a=a +this.$ti=b}, +JG:function JG(a,b){this.a=a +this.$ti=b}, +nY:function nY(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=null +_.d=c +_.$ti=d}, +JK:function JK(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=null +_.d=c +_.$ti=d}, +uV:function uV(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=null +_.d=c +_.$ti=d}, +y_:function y_(a,b,c){var _=this +_.d=null +_.e=a +_.f=b +_.c=_.b=_.a=0 +_.$ti=c}, +ap6:function ap6(a){this.a=a}, +ap5:function ap5(a,b){this.a=a +this.b=b}, +ap4:function ap4(a,b){this.a=a +this.b=b}, +JH:function JH(){}, +JI:function JI(){}, +JJ:function JJ(){}, +Kj:function Kj(){}, +aI_(a,b){var s,r,q,p=null +try{p=JSON.parse(a)}catch(r){s=A.ax(r) +q=A.cc(String(s),null,null) +throw A.c(q)}q=A.aCy(p) +return q}, +aCy(a){var s +if(a==null)return null +if(typeof a!="object")return a +if(Object.getPrototypeOf(a)!==Array.prototype)return new A.Zc(a,Object.create(null)) +for(s=0;s=0)return null +return r}return null}, +b0L(a,b,c,d){var s=a?$.aSK():$.aSJ() +if(s==null)return null +if(0===c&&d===b.length)return A.aNU(s,b) +return A.aNU(s,b.subarray(c,A.cU(c,d,b.length,null,null)))}, +aNU(a,b){var s,r +try{s=a.decode(b) +return s}catch(r){}return null}, +aJJ(a,b,c,d,e,f){if(B.f.bF(f,4)!==0)throw A.c(A.cc("Invalid base64 padding, padded length must be multiple of four, is "+f,a,c)) +if(d+e!==f)throw A.c(A.cc("Invalid base64 padding, '=' not at the end",a,b)) +if(e>2)throw A.c(A.cc("Invalid base64 padding, more than two '=' characters",a,b))}, +b12(a,b,c,d,e,f,g,h){var s,r,q,p,o,n=h>>>2,m=3-(h&3) +for(s=c,r=0;s>>0 +n=(n<<8|q)&16777215;--m +if(m===0){p=g+1 +f[g]=a.charCodeAt(n>>>18&63) +g=p+1 +f[p]=a.charCodeAt(n>>>12&63) +p=g+1 +f[g]=a.charCodeAt(n>>>6&63) +g=p+1 +f[p]=a.charCodeAt(n&63) +n=0 +m=3}}if(r>=0&&r<=255){if(e&&m<3){p=g+1 +o=p+1 +if(3-m===1){f[g]=a.charCodeAt(n>>>2&63) +f[p]=a.charCodeAt(n<<4&63) +f[o]=61 +f[o+1]=61}else{f[g]=a.charCodeAt(n>>>10&63) +f[p]=a.charCodeAt(n>>>4&63) +f[o]=a.charCodeAt(n<<2&63) +f[o+1]=61}return 0}return(n<<2|3-m)>>>0}for(s=c;s255)break;++s}throw A.c(A.hL(b,"Not a byte value at index "+s+": 0x"+J.aV2(b[s],16),null))}, +b11(a,b,c,d,e,f){var s,r,q,p,o,n,m="Invalid encoding before padding",l="Invalid character",k=B.f.el(f,2),j=f&3,i=$.aIV() +for(s=b,r=0;s=0){k=(k<<6|p)&16777215 +j=j+1&3 +if(j===0){o=e+1 +d[e]=k>>>16&255 +e=o+1 +d[o]=k>>>8&255 +o=e+1 +d[e]=k&255 +e=o +k=0}continue}else if(p===-1&&j>1){if(r>127)break +if(j===3){if((k&3)!==0)throw A.c(A.cc(m,a,s)) +d[e]=k>>>10 +d[e+1]=k>>>2}else{if((k&15)!==0)throw A.c(A.cc(m,a,s)) +d[e]=k>>>4}n=(3-j)*3 +if(q===37)n+=2 +return A.aO7(a,s+1,c,-n-1)}throw A.c(A.cc(l,a,s))}if(r>=0&&r<=127)return(k<<2|j)>>>0 +for(s=b;s127)break +throw A.c(A.cc(l,a,s))}, +b1_(a,b,c,d){var s=A.b10(a,b,c),r=(d&3)+(s-b),q=B.f.el(r,2)*3,p=r&3 +if(p!==0&&s0)return new Uint8Array(q) +return $.aSO()}, +b10(a,b,c){var s,r=c,q=r,p=0 +while(!0){if(!(q>b&&p<2))break +c$0:{--q +s=a.charCodeAt(q) +if(s===61){++p +r=q +break c$0}if((s|32)===100){if(q===b)break;--q +s=a.charCodeAt(q)}if(s===51){if(q===b)break;--q +s=a.charCodeAt(q)}if(s===37){++p +r=q +break c$0}break}}return r}, +aO7(a,b,c,d){var s,r +if(b===c)return d +s=-d-1 +for(;s>0;){r=a.charCodeAt(b) +if(s===3){if(r===61){s-=3;++b +break}if(r===37){--s;++b +if(b===c)break +r=a.charCodeAt(b)}else break}if((s>3?s-3:s)===2){if(r!==51)break;++b;--s +if(b===c)break +r=a.charCodeAt(b)}if((r|32)!==100)break;++b;--s +if(b===c)break}if(b!==c)throw A.c(A.cc("Invalid padding character",a,b)) +return-s-1}, +aX9(a){return $.aS2().i(0,a.toLowerCase())}, +aLz(a,b,c){return new A.wC(a,b)}, +b39(a){return a.m0()}, +b1q(a,b){return new A.awv(a,[],A.b5t())}, +aOm(a,b,c){var s,r=new A.ck("") +A.aOl(a,r,b,c) +s=r.a +return s.charCodeAt(0)==0?s:s}, +aOl(a,b,c,d){var s=A.b1q(b,c) +s.CF(a)}, +aP_(a){switch(a){case 65:return"Missing extension byte" +case 67:return"Unexpected extension byte" +case 69:return"Invalid UTF-8 byte" +case 71:return"Overlong encoding" +case 73:return"Out of unicode range" +case 75:return"Encoded surrogate" +case 77:return"Unfinished UTF-8 octet sequence" +default:return""}}, +b2y(a,b,c){var s,r,q,p=c-b,o=new Uint8Array(p) +for(s=J.aF(a),r=0;r>>0!==0?255:q}return o}, +Zc:function Zc(a,b){this.a=a +this.b=b +this.c=null}, +awu:function awu(a){this.a=a}, +awt:function awt(a){this.a=a}, +Zd:function Zd(a){this.a=a}, +Ia:function Ia(a,b,c){this.b=a +this.c=b +this.a=c}, +arQ:function arQ(){}, +arP:function arP(){}, +LM:function LM(){}, +a3R:function a3R(){}, +LO:function LO(a){this.a=a}, +aBK:function aBK(a,b){this.a=a +this.b=b}, +a3Q:function a3Q(){}, +LN:function LN(a,b){this.a=a +this.b=b}, +av8:function av8(a){this.a=a}, +aAG:function aAG(a){this.a=a}, +a7t:function a7t(){}, +Mf:function Mf(){}, +atp:function atp(a){this.a=0 +this.b=a}, +atq:function atq(){}, +aBQ:function aBQ(a,b){this.a=a +this.b=b}, +Me:function Me(){}, +Wm:function Wm(){this.a=0}, +ato:function ato(a,b){this.a=a +this.b=b}, +a87:function a87(){}, +H5:function H5(a){this.a=a}, +WA:function WA(a,b){this.a=a +this.b=b +this.c=0}, +MF:function MF(){}, +a2f:function a2f(a,b,c){this.a=a +this.b=b +this.$ti=c}, +N8:function N8(){}, +bl:function bl(){}, +HV:function HV(a,b,c){this.a=a +this.b=b +this.$ti=c}, +rk:function rk(){}, +wC:function wC(a,b){this.a=a +this.b=b}, +PD:function PD(a,b){this.a=a +this.b=b}, +agb:function agb(){}, +PF:function PF(a){this.b=a}, +aws:function aws(a,b,c){var _=this +_.a=a +_.b=b +_.c=c +_.d=!1}, +PE:function PE(a){this.a=a}, +aww:function aww(){}, +awx:function awx(a,b){this.a=a +this.b=b}, +awv:function awv(a,b,c){this.c=a +this.a=b +this.b=c}, +PK:function PK(){}, +PM:function PM(a){this.a=a}, +PL:function PL(a,b){this.a=a +this.b=b}, +Zg:function Zg(a){this.a=a}, +awy:function awy(a){this.a=a}, +Ub:function Ub(){}, +auj:function auj(a,b){this.a=a +this.b=b}, +aAW:function aAW(a,b){this.a=a +this.b=b}, +JS:function JS(){}, +a3W:function a3W(a,b,c){this.a=a +this.b=b +this.c=c}, +V7:function V7(){}, +V8:function V8(){}, +a3V:function a3V(a){this.b=this.a=0 +this.c=a}, +aBR:function aBR(a,b){var _=this +_.d=a +_.b=_.a=0 +_.c=b}, +GD:function GD(a){this.a=a}, +Kp:function Kp(a){this.a=a +this.b=16 +this.c=0}, +a5p:function a5p(){}, +b6x(a){return A.mo(a)}, +aXy(a,b){return A.aMv(a,b,null)}, +aKV(a){return new A.w8(new WeakMap(),a.h("w8<0>"))}, +w9(a){if(A.ml(a)||typeof a=="number"||typeof a=="string"||a instanceof A.io)A.rq(a)}, +rq(a){throw A.c(A.hL(a,"object","Expandos are not allowed on strings, numbers, bools, records or null"))}, +ir(a,b){var s=A.aGI(a,b) +if(s!=null)return s +throw A.c(A.cc(a,null,null))}, +zQ(a){var s=A.RP(a) +if(s!=null)return s +throw A.c(A.cc("Invalid double",a,null))}, +aXf(a,b){a=A.c(a) +a.stack=b.k(0) +throw a +throw A.c("unreachable")}, +aKd(a,b){var s +if(Math.abs(a)<=864e13)s=!1 +else s=!0 +if(s)A.T(A.bC("DateTime is outside valid range: "+a,null)) +A.fK(!0,"isUtc",t.y) +return new A.iz(a,!0)}, +bf(a,b,c,d){var s,r=c?J.wA(a,d):J.CI(a,d) +if(a!==0&&b!=null)for(s=0;s")) +for(s=J.ap(a);s.q();)r.push(s.gJ(s)) +if(b)return r +return J.ag1(r)}, +V(a,b,c){var s +if(b)return A.aLI(a,c) +s=J.ag1(A.aLI(a,c)) +return s}, +aLI(a,b){var s,r +if(Array.isArray(a))return A.a(a.slice(0),b.h("q<0>")) +s=A.a([],b.h("q<0>")) +for(r=J.ap(a);r.q();)s.push(r.gJ(r)) +return s}, +D_(a,b,c){var s,r=J.wA(a,c) +for(s=0;s0||c>>4]&1<<(o&15))!==0)p+=A.dK(o) +else p=d&&o===32?p+"+":p+"%"+n[o>>>4&15]+n[o&15]}return p.charCodeAt(0)==0?p:p}, +aNi(){return A.aZ(new Error())}, +aW0(a,b){return J.A1(a,b)}, +aWh(a,b){var s +if(Math.abs(a)<=864e13)s=!1 +else s=!0 +if(s)A.T(A.bC("DateTime is outside valid range: "+a,null)) +A.fK(b,"isUtc",t.y) +return new A.iz(a,b)}, +aWi(a){var s=Math.abs(a),r=a<0?"-":"" +if(s>=1000)return""+a +if(s>=100)return r+"0"+s +if(s>=10)return r+"00"+s +return r+"000"+s}, +aWj(a){if(a>=100)return""+a +if(a>=10)return"0"+a +return"00"+a}, +Nx(a){if(a>=10)return""+a +return"0"+a}, +dp(a,b){return new A.b1(a+1000*b)}, +aXe(a,b){var s,r +for(s=0;s<3;++s){r=a[s] +if(r.b===b)return r}throw A.c(A.hL(b,"name","No enum value with that name"))}, +rn(a){if(typeof a=="number"||A.ml(a)||a==null)return J.f0(a) +if(typeof a=="string")return JSON.stringify(a) +return A.aMw(a)}, +aXg(a,b){A.fK(a,"error",t.K) +A.fK(b,"stackTrace",t.Km) +A.aXf(a,b)}, +ms(a){return new A.qA(a)}, +bC(a,b){return new A.jZ(!1,null,b,a)}, +hL(a,b,c){return new A.jZ(!0,a,b,c)}, +LL(a,b){return a}, +ef(a){var s=null +return new A.xp(s,s,!1,s,s,a)}, +RY(a,b){return new A.xp(null,null,!0,a,b,"Value not in range")}, +c9(a,b,c,d,e){return new A.xp(b,c,!0,a,d,"Invalid value")}, +akk(a,b,c,d){if(ac)throw A.c(A.c9(a,b,c,d,null)) +return a}, +cU(a,b,c,d,e){if(0>a||a>c)throw A.c(A.c9(a,0,c,d==null?"start":d,null)) +if(b!=null){if(a>b||b>c)throw A.c(A.c9(b,a,c,e==null?"end":e,null)) +return b}return c}, +eA(a,b){if(a<0)throw A.c(A.c9(a,0,null,b,null)) +return a}, +Pv(a,b,c,d,e){var s=e==null?b.gu(b):e +return new A.CA(s,!0,a,c,"Index out of range")}, +dB(a,b,c,d,e){return new A.CA(b,!0,a,e,"Index out of range")}, +aG9(a,b,c,d,e){if(0>a||a>=b)throw A.c(A.dB(a,b,c,d,e==null?"index":e)) +return a}, +a3(a){return new A.uA(a)}, +co(a){return new A.uz(a)}, +Q(a){return new A.jE(a)}, +ci(a){return new A.Nd(a)}, +cj(a){return new A.Y2(a)}, +cc(a,b,c){return new A.fR(a,b,c)}, +aXW(a,b,c){if(a<=0)return new A.hj(c.h("hj<0>")) +return new A.HX(a,b,c.h("HX<0>"))}, +aLu(a,b,c){var s,r +if(A.aIt(a)){if(b==="("&&c===")")return"(...)" +return b+"..."+c}s=A.a([],t.s) +$.v8.push(a) +try{A.b3Y(a,s)}finally{$.v8.pop()}r=A.Ua(b,s,", ")+c +return r.charCodeAt(0)==0?r:r}, +rO(a,b,c){var s,r +if(A.aIt(a))return b+"..."+c +s=new A.ck(b) +$.v8.push(a) +try{r=s +r.a=A.Ua(r.a,a,", ")}finally{$.v8.pop()}s.a+=c +r=s.a +return r.charCodeAt(0)==0?r:r}, +b3Y(a,b){var s,r,q,p,o,n,m,l=J.ap(a),k=0,j=0 +while(!0){if(!(k<80||j<3))break +if(!l.q())return +s=A.h(l.gJ(l)) +b.push(s) +k+=s.length+2;++j}if(!l.q()){if(j<=5)return +r=b.pop() +q=b.pop()}else{p=l.gJ(l);++j +if(!l.q()){if(j<=4){b.push(A.h(p)) +return}r=A.h(p) +q=b.pop() +k+=r.length+2}else{o=l.gJ(l);++j +for(;l.q();p=o,o=n){n=l.gJ(l);++j +if(j>100){while(!0){if(!(k>75&&j>3))break +k-=b.pop().length+2;--j}b.push("...") +return}}q=A.h(p) +r=A.h(o) +k+=r.length+q.length+4}}if(j>b.length+2){k+=5 +m="..."}else m=null +while(!0){if(!(k>80&&b.length>3))break +k-=b.pop().length+2 +if(m==null){k+=5 +m="..."}}if(m!=null)b.push(m) +b.push(q) +b.push(r)}, +aLO(a,b,c,d,e){return new A.mz(a,b.h("@<0>").N(c).N(d).N(e).h("mz<1,2,3,4>"))}, +aGk(a,b,c){var s=A.A(b,c) +s.U3(s,a) +return s}, +N(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,a0,a1){var s +if(B.a===c)return A.aNs(J.D(a),J.D(b),$.eL()) +if(B.a===d){s=J.D(a) +b=J.D(b) +c=J.D(c) +return A.eU(A.L(A.L(A.L($.eL(),s),b),c))}if(B.a===e)return A.b05(J.D(a),J.D(b),J.D(c),J.D(d),$.eL()) +if(B.a===f){s=J.D(a) +b=J.D(b) +c=J.D(c) +d=J.D(d) +e=J.D(e) +return A.eU(A.L(A.L(A.L(A.L(A.L($.eL(),s),b),c),d),e))}if(B.a===g){s=J.D(a) +b=J.D(b) +c=J.D(c) +d=J.D(d) +e=J.D(e) +f=J.D(f) +return A.eU(A.L(A.L(A.L(A.L(A.L(A.L($.eL(),s),b),c),d),e),f))}if(B.a===h){s=J.D(a) +b=J.D(b) +c=J.D(c) +d=J.D(d) +e=J.D(e) +f=J.D(f) +g=J.D(g) +return A.eU(A.L(A.L(A.L(A.L(A.L(A.L(A.L($.eL(),s),b),c),d),e),f),g))}if(B.a===i){s=J.D(a) +b=J.D(b) +c=J.D(c) +d=J.D(d) +e=J.D(e) +f=J.D(f) +g=J.D(g) +h=J.D(h) +return A.eU(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L($.eL(),s),b),c),d),e),f),g),h))}if(B.a===j){s=J.D(a) +b=J.D(b) +c=J.D(c) +d=J.D(d) +e=J.D(e) +f=J.D(f) +g=J.D(g) +h=J.D(h) +i=J.D(i) +return A.eU(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L($.eL(),s),b),c),d),e),f),g),h),i))}if(B.a===k){s=J.D(a) +b=J.D(b) +c=J.D(c) +d=J.D(d) +e=J.D(e) +f=J.D(f) +g=J.D(g) +h=J.D(h) +i=J.D(i) +j=J.D(j) +return A.eU(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L($.eL(),s),b),c),d),e),f),g),h),i),j))}if(B.a===l){s=J.D(a) +b=J.D(b) +c=J.D(c) +d=J.D(d) +e=J.D(e) +f=J.D(f) +g=J.D(g) +h=J.D(h) +i=J.D(i) +j=J.D(j) +k=J.D(k) +return A.eU(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L($.eL(),s),b),c),d),e),f),g),h),i),j),k))}if(B.a===m){s=J.D(a) +b=J.D(b) +c=J.D(c) +d=J.D(d) +e=J.D(e) +f=J.D(f) +g=J.D(g) +h=J.D(h) +i=J.D(i) +j=J.D(j) +k=J.D(k) +l=J.D(l) +return A.eU(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L($.eL(),s),b),c),d),e),f),g),h),i),j),k),l))}if(B.a===n){s=J.D(a) +b=J.D(b) +c=J.D(c) +d=J.D(d) +e=J.D(e) +f=J.D(f) +g=J.D(g) +h=J.D(h) +i=J.D(i) +j=J.D(j) +k=J.D(k) +l=J.D(l) +m=J.D(m) +return A.eU(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L($.eL(),s),b),c),d),e),f),g),h),i),j),k),l),m))}if(B.a===o){s=J.D(a) +b=J.D(b) +c=J.D(c) +d=J.D(d) +e=J.D(e) +f=J.D(f) +g=J.D(g) +h=J.D(h) +i=J.D(i) +j=J.D(j) +k=J.D(k) +l=J.D(l) +m=J.D(m) +n=J.D(n) +return A.eU(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L($.eL(),s),b),c),d),e),f),g),h),i),j),k),l),m),n))}if(B.a===p){s=J.D(a) +b=J.D(b) +c=J.D(c) +d=J.D(d) +e=J.D(e) +f=J.D(f) +g=J.D(g) +h=J.D(h) +i=J.D(i) +j=J.D(j) +k=J.D(k) +l=J.D(l) +m=J.D(m) +n=J.D(n) +o=J.D(o) +return A.eU(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L($.eL(),s),b),c),d),e),f),g),h),i),j),k),l),m),n),o))}if(B.a===q){s=J.D(a) +b=J.D(b) +c=J.D(c) +d=J.D(d) +e=J.D(e) +f=J.D(f) +g=J.D(g) +h=J.D(h) +i=J.D(i) +j=J.D(j) +k=J.D(k) +l=J.D(l) +m=J.D(m) +n=J.D(n) +o=J.D(o) +p=J.D(p) +return A.eU(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L($.eL(),s),b),c),d),e),f),g),h),i),j),k),l),m),n),o),p))}if(B.a===r){s=J.D(a) +b=J.D(b) +c=J.D(c) +d=J.D(d) +e=J.D(e) +f=J.D(f) +g=J.D(g) +h=J.D(h) +i=J.D(i) +j=J.D(j) +k=J.D(k) +l=J.D(l) +m=J.D(m) +n=J.D(n) +o=J.D(o) +p=J.D(p) +q=J.D(q) +return A.eU(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L($.eL(),s),b),c),d),e),f),g),h),i),j),k),l),m),n),o),p),q))}if(B.a===a0){s=J.D(a) +b=J.D(b) +c=J.D(c) +d=J.D(d) +e=J.D(e) +f=J.D(f) +g=J.D(g) +h=J.D(h) +i=J.D(i) +j=J.D(j) +k=J.D(k) +l=J.D(l) +m=J.D(m) +n=J.D(n) +o=J.D(o) +p=J.D(p) +q=J.D(q) +r=J.D(r) +return A.eU(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L($.eL(),s),b),c),d),e),f),g),h),i),j),k),l),m),n),o),p),q),r))}if(B.a===a1){s=J.D(a) +b=J.D(b) +c=J.D(c) +d=J.D(d) +e=J.D(e) +f=J.D(f) +g=J.D(g) +h=J.D(h) +i=J.D(i) +j=J.D(j) +k=J.D(k) +l=J.D(l) +m=J.D(m) +n=J.D(n) +o=J.D(o) +p=J.D(p) +q=J.D(q) +r=J.D(r) +a0=J.D(a0) +return A.eU(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L($.eL(),s),b),c),d),e),f),g),h),i),j),k),l),m),n),o),p),q),r),a0))}s=J.D(a) +b=J.D(b) +c=J.D(c) +d=J.D(d) +e=J.D(e) +f=J.D(f) +g=J.D(g) +h=J.D(h) +i=J.D(i) +j=J.D(j) +k=J.D(k) +l=J.D(l) +m=J.D(m) +n=J.D(n) +o=J.D(o) +p=J.D(p) +q=J.D(q) +r=J.D(r) +a0=J.D(a0) +a1=J.D(a1) +return A.eU(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L(A.L($.eL(),s),b),c),d),e),f),g),h),i),j),k),l),m),n),o),p),q),r),a0),a1))}, +bv(a){var s,r=$.eL() +for(s=J.ap(a);s.q();)r=A.L(r,J.D(s.gJ(s))) +return A.eU(r)}, +aYL(a){var s,r,q,p,o +for(s=a.gab(a),r=0,q=0;s.q();){p=J.D(s.gJ(s)) +o=((p^B.f.el(p,16))>>>0)*2146121005>>>0 +o=((o^o>>>15)>>>0)*2221713035>>>0 +r=r+((o^o>>>16)>>>0)&1073741823;++q}return A.aNs(r,q,0)}, +v7(a){var s=A.h(a),r=$.aRr +if(r==null)A.aRq(s) +else r.$1(s)}, +aol(a,b,c,d){return new A.mB(a,b,c.h("@<0>").N(d).h("mB<1,2>"))}, +b_Y(){$.mp() +return new A.lT()}, +aPb(a,b){return 65536+((a&1023)<<10)+(b&1023)}, +eW(a3,a4,a5){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,a2=null +a5=a3.length +s=a4+5 +if(a5>=s){r=((a3.charCodeAt(a4+4)^58)*3|a3.charCodeAt(a4)^100|a3.charCodeAt(a4+1)^97|a3.charCodeAt(a4+2)^116|a3.charCodeAt(a4+3)^97)>>>0 +if(r===0)return A.aNP(a4>0||a5=14)q[7]=a5 +o=q[1] +if(o>=a4)if(A.aPU(a3,a4,o,20,q)===20)q[7]=o +n=q[2]+1 +m=q[3] +l=q[4] +k=q[5] +j=q[6] +if(jo+3){h=a2 +i=!1}else{p=m>a4 +if(p&&m+1===l){h=a2 +i=!1}else{if(!B.d.df(a3,"\\",l))if(n>a4)g=B.d.df(a3,"\\",n-1)||B.d.df(a3,"\\",n-2) +else g=!1 +else g=!0 +if(g){h=a2 +i=!1}else{if(!(kl+2&&B.d.df(a3,"/..",k-3) +else g=!0 +if(g){h=a2 +i=!1}else{if(o===a4+4)if(B.d.df(a3,"file",a4)){if(n<=a4){if(!B.d.df(a3,"/",l)){f="file:///" +r=3}else{f="file://" +r=2}a3=f+B.d.P(a3,l,a5) +o-=a4 +s=r-a4 +k+=s +j+=s +a5=a3.length +a4=0 +n=7 +m=7 +l=7}else if(l===k)if(a4===0&&!0){a3=B.d.kX(a3,l,k,"/");++k;++j;++a5}else{a3=B.d.P(a3,a4,l)+"/"+B.d.P(a3,k,a5) +o-=a4 +n-=a4 +m-=a4 +l-=a4 +s=1-a4 +k+=s +j+=s +a5=a3.length +a4=0}h="file"}else if(B.d.df(a3,"http",a4)){if(p&&m+3===l&&B.d.df(a3,"80",m+1))if(a4===0&&!0){a3=B.d.kX(a3,m,l,"") +l-=3 +k-=3 +j-=3 +a5-=3}else{a3=B.d.P(a3,a4,m)+B.d.P(a3,l,a5) +o-=a4 +n-=a4 +m-=a4 +s=3+a4 +l-=s +k-=s +j-=s +a5=a3.length +a4=0}h="http"}else h=a2 +else if(o===s&&B.d.df(a3,"https",a4)){if(p&&m+4===l&&B.d.df(a3,"443",m+1))if(a4===0&&!0){a3=B.d.kX(a3,m,l,"") +l-=4 +k-=4 +j-=4 +a5-=3}else{a3=B.d.P(a3,a4,m)+B.d.P(a3,l,a5) +o-=a4 +n-=a4 +m-=a4 +s=4+a4 +l-=s +k-=s +j-=s +a5=a3.length +a4=0}h="https"}else h=a2 +i=!0}}}}else h=a2 +if(i){if(a4>0||a5a4)h=A.b2u(a3,a4,o) +else{if(o===a4)A.zF(a3,a4,"Invalid empty scheme") +h=""}if(n>a4){e=o+3 +d=e9)k.$2("invalid character",s)}else{if(q===3)k.$2(m,s) +o=A.ir(B.d.P(a,r,s),null) +if(o>255)k.$2(l,r) +n=q+1 +j[q]=o +r=s+1 +q=n}}if(q!==3)k.$2(m,c) +o=A.ir(B.d.P(a,r,c),null) +if(o>255)k.$2(l,r) +j[q]=o +return j}, +aNS(a,b,a0){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e=null,d=new A.arI(a),c=new A.arJ(d,a) +if(a.length<2)d.$2("address is too short",e) +s=A.a([],t.t) +for(r=b,q=r,p=!1,o=!1;r>>0) +s.push((k[2]<<8|k[3])>>>0)}if(p){if(s.length>7)d.$2("an address with a wildcard must have less than 7 parts",e)}else if(s.length!==8)d.$2("an address without a wildcard must contain exactly 8 parts",e) +j=new Uint8Array(16) +for(l=s.length,i=9-l,r=0,h=0;ro)A.T(A.c9(0,0,p.gu(q),null,null)) +if(A.aEy(q,"/",0)){s=A.a3("Illegal path character "+A.h(q)) +throw A.c(s)}}}, +aOO(a,b,c){var s,r,q,p,o +for(s=A.eD(a,c,null,A.S(a).c),r=s.$ti,s=new A.bu(s,s.gu(s),r.h("bu")),r=r.h("af.E");s.q();){q=s.d +if(q==null)q=r.a(q) +p=A.c3('["*/:<>?\\\\|]',!0,!1) +o=q.length +if(A.aEy(q,p,0)){s=A.a3("Illegal character in path: "+q) +throw A.c(s)}}}, +b2p(a,b){var s +if(!(65<=a&&a<=90))s=97<=a&&a<=122 +else s=!0 +if(s)return +s=A.a3("Illegal drive letter "+A.apq(a)) +throw A.c(s)}, +b2r(a){var s +if(a.length===0)return B.vr +s=A.aOY(a) +s.a_1(s,A.aQj()) +return A.aFs(s,t.N,t.yp)}, +aHH(a,b){if(a!=null&&a===A.aOP(b))return null +return a}, +aOT(a,b,c,d){var s,r,q,p,o,n +if(a==null)return null +if(b===c)return"" +if(a.charCodeAt(b)===91){s=c-1 +if(a.charCodeAt(s)!==93)A.zF(a,b,"Missing end `]` to match `[` in host") +r=b+1 +q=A.b2q(a,r,s) +if(q=b&&q=b&&s>>4]&1<<(p&15))!==0){if(q&&65<=p&&90>=p){if(i==null)i=new A.ck("") +if(r>>4]&1<<(o&15))!==0){if(p&&65<=o&&90>=o){if(q==null)q=new A.ck("") +if(r>>4]&1<<(o&15))!==0)A.zF(a,s,"Invalid character") +else{if((o&64512)===55296&&s+1>>4]&1<<(q&15))!==0))A.zF(a,s,"Illegal scheme character") +if(65<=q&&q<=90)r=!0}a=B.d.P(a,b,c) +return A.b2n(r?a.toLowerCase():a)}, +b2n(a){if(a==="http")return"http" +if(a==="file")return"file" +if(a==="https")return"https" +if(a==="package")return"package" +return a}, +aOU(a,b,c){if(a==null)return"" +return A.Ko(a,b,c,B.PY,!1,!1)}, +aBL(a,b,c,d,e,f){var s,r=e==="file",q=r||f +if(a==null)return r?"/":"" +else s=A.Ko(a,b,c,B.pl,!0,!0) +if(s.length===0){if(r)return"/"}else if(q&&!B.d.bz(s,"/"))s="/"+s +return A.b2v(s,e,f)}, +b2v(a,b,c){var s=b.length===0 +if(s&&!c&&!B.d.bz(a,"/")&&!B.d.bz(a,"\\"))return A.aHJ(a,!s||c) +return A.o0(a)}, +aBM(a,b,c,d){var s,r={} +if(a!=null){if(d!=null)throw A.c(A.bC("Both query and queryParameters specified",null)) +return A.Ko(a,b,c,B.hD,!0,!1)}if(d==null)return null +s=new A.ck("") +r.a="" +d.aa(0,new A.aBN(new A.aBO(r,s))) +r=s.a +return r.charCodeAt(0)==0?r:r}, +aOS(a,b,c){if(a==null)return null +return A.Ko(a,b,c,B.hD,!0,!1)}, +aHI(a,b,c){var s,r,q,p,o,n=b+2 +if(n>=a.length)return"%" +s=a.charCodeAt(b+1) +r=a.charCodeAt(n) +q=A.aDX(s) +p=A.aDX(r) +if(q<0||p<0)return"%" +o=q*16+p +if(o<127&&(B.hz[B.f.el(o,4)]&1<<(o&15))!==0)return A.dK(c&&65<=o&&90>=o?(o|32)>>>0:o) +if(s>=97||r>=97)return B.d.P(a,b,b+3).toUpperCase() +return null}, +aHG(a){var s,r,q,p,o,n="0123456789ABCDEF" +if(a<128){s=new Uint8Array(3) +s[0]=37 +s[1]=n.charCodeAt(a>>>4) +s[2]=n.charCodeAt(a&15)}else{if(a>2047)if(a>65535){r=240 +q=4}else{r=224 +q=3}else{r=192 +q=2}s=new Uint8Array(3*q) +for(p=0;--q,q>=0;r=128){o=B.f.aiw(a,6*q)&63|r +s[p]=37 +s[p+1]=n.charCodeAt(o>>>4) +s[p+2]=n.charCodeAt(o&15) +p+=3}}return A.jF(s,0,null)}, +Ko(a,b,c,d,e,f){var s=A.aOW(a,b,c,d,e,f) +return s==null?B.d.P(a,b,c):s}, +aOW(a,b,c,d,e,f){var s,r,q,p,o,n,m,l,k,j,i=null +for(s=!e,r=b,q=r,p=i;r>>4]&1<<(o&15))!==0)++r +else{if(o===37){n=A.aHI(a,r,!1) +if(n==null){r+=3 +continue}if("%"===n){n="%25" +m=1}else m=3}else if(o===92&&f){n="/" +m=1}else if(s&&o<=93&&(B.pm[o>>>4]&1<<(o&15))!==0){A.zF(a,r,"Invalid character") +m=i +n=m}else{if((o&64512)===55296){l=r+1 +if(l=2&&A.aOR(a.charCodeAt(0)))for(s=1;s127||(B.pi[r>>>4]&1<<(r&15))===0)break}return a}, +b2x(a,b){if(a.Jh("package")&&a.c==null)return A.aPW(b,0,b.length) +return-1}, +aOZ(a){var s,r,q,p=a.grB(),o=p.length +if(o>0&&J.bF(p[0])===2&&J.aEZ(p[0],1)===58){A.b2p(J.aEZ(p[0],0),!1) +A.aOO(p,!1,1) +s=!0}else{A.aOO(p,!1,0) +s=!1}r=a.gB1()&&!s?""+"\\":"" +if(a.gvI()){q=a.gjP(a) +if(q.length!==0)r=r+"\\"+q+"\\"}r=A.Ua(r,p,"\\") +o=s&&o===1?r+"\\":r +return o.charCodeAt(0)==0?o:o}, +b2s(){return A.a([],t.s)}, +aOY(a){var s,r,q,p,o,n=A.A(t.N,t.yp),m=new A.aBP(a,B.a2,n) +for(s=a.length,r=0,q=0,p=-1;r127)throw A.c(A.bC("Illegal percent encoding in URI",null)) +if(r===37){if(o+3>q)throw A.c(A.bC("Truncated URI",null)) +p.push(A.b2t(a,o+1)) +o+=2}else if(e&&r===43)p.push(32) +else p.push(r)}}return d.eA(0,p)}, +aOR(a){var s=a|32 +return 97<=s&&s<=122}, +aNP(a,b,c){var s,r,q,p,o,n,m,l,k="Invalid MIME type",j=A.a([b-1],t.t) +for(s=a.length,r=b,q=-1,p=null;rb)throw A.c(A.cc(k,a,r)) +for(;p!==44;){j.push(r);++r +for(o=-1;r=0)j.push(o) +else{n=B.b.gO(j) +if(p!==44||r!==n+7||!B.d.df(a,"base64",n+1))throw A.c(A.cc("Expecting '='",a,r)) +break}}j.push(r) +m=r+1 +if((j.length&1)===1)a=B.Do.at7(0,a,m,s) +else{l=A.aOW(a,m,s,B.hD,!0,!1) +if(l!=null)a=B.d.kX(a,m,s,l)}return new A.arG(a,j,c)}, +b34(){var s,r,q,p,o,n="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-._~!$&'()*+,;=",m=".",l=":",k="/",j="\\",i="?",h="#",g="/\\",f=J.rP(22,t.H3) +for(s=0;s<22;++s)f[s]=new Uint8Array(96) +r=new A.aCz(f) +q=new A.aCA() +p=new A.aCB() +o=r.$2(0,225) +q.$3(o,n,1) +q.$3(o,m,14) +q.$3(o,l,34) +q.$3(o,k,3) +q.$3(o,j,227) +q.$3(o,i,172) +q.$3(o,h,205) +o=r.$2(14,225) +q.$3(o,n,1) +q.$3(o,m,15) +q.$3(o,l,34) +q.$3(o,g,234) +q.$3(o,i,172) +q.$3(o,h,205) +o=r.$2(15,225) +q.$3(o,n,1) +q.$3(o,"%",225) +q.$3(o,l,34) +q.$3(o,k,9) +q.$3(o,j,233) +q.$3(o,i,172) +q.$3(o,h,205) +o=r.$2(1,225) +q.$3(o,n,1) +q.$3(o,l,34) +q.$3(o,k,10) +q.$3(o,j,234) +q.$3(o,i,172) +q.$3(o,h,205) +o=r.$2(2,235) +q.$3(o,n,139) +q.$3(o,k,131) +q.$3(o,j,131) +q.$3(o,m,146) +q.$3(o,i,172) +q.$3(o,h,205) +o=r.$2(3,235) +q.$3(o,n,11) +q.$3(o,k,68) +q.$3(o,j,68) +q.$3(o,m,18) +q.$3(o,i,172) +q.$3(o,h,205) +o=r.$2(4,229) +q.$3(o,n,5) +p.$3(o,"AZ",229) +q.$3(o,l,102) +q.$3(o,"@",68) +q.$3(o,"[",232) +q.$3(o,k,138) +q.$3(o,j,138) +q.$3(o,i,172) +q.$3(o,h,205) +o=r.$2(5,229) +q.$3(o,n,5) +p.$3(o,"AZ",229) +q.$3(o,l,102) +q.$3(o,"@",68) +q.$3(o,k,138) +q.$3(o,j,138) +q.$3(o,i,172) +q.$3(o,h,205) +o=r.$2(6,231) +p.$3(o,"19",7) +q.$3(o,"@",68) +q.$3(o,k,138) +q.$3(o,j,138) +q.$3(o,i,172) +q.$3(o,h,205) +o=r.$2(7,231) +p.$3(o,"09",7) +q.$3(o,"@",68) +q.$3(o,k,138) +q.$3(o,j,138) +q.$3(o,i,172) +q.$3(o,h,205) +q.$3(r.$2(8,8),"]",5) +o=r.$2(9,235) +q.$3(o,n,11) +q.$3(o,m,16) +q.$3(o,g,234) +q.$3(o,i,172) +q.$3(o,h,205) +o=r.$2(16,235) +q.$3(o,n,11) +q.$3(o,m,17) +q.$3(o,g,234) +q.$3(o,i,172) +q.$3(o,h,205) +o=r.$2(17,235) +q.$3(o,n,11) +q.$3(o,k,9) +q.$3(o,j,233) +q.$3(o,i,172) +q.$3(o,h,205) +o=r.$2(10,235) +q.$3(o,n,11) +q.$3(o,m,18) +q.$3(o,k,10) +q.$3(o,j,234) +q.$3(o,i,172) +q.$3(o,h,205) +o=r.$2(18,235) +q.$3(o,n,11) +q.$3(o,m,19) +q.$3(o,g,234) +q.$3(o,i,172) +q.$3(o,h,205) +o=r.$2(19,235) +q.$3(o,n,11) +q.$3(o,g,234) +q.$3(o,i,172) +q.$3(o,h,205) +o=r.$2(11,235) +q.$3(o,n,11) +q.$3(o,k,10) +q.$3(o,j,234) +q.$3(o,i,172) +q.$3(o,h,205) +o=r.$2(12,236) +q.$3(o,n,12) +q.$3(o,i,12) +q.$3(o,h,205) +o=r.$2(13,237) +q.$3(o,n,13) +q.$3(o,i,13) +p.$3(r.$2(20,245),"az",21) +o=r.$2(21,245) +p.$3(o,"az",21) +p.$3(o,"09",21) +q.$3(o,"+-.",21) +return f}, +aPU(a,b,c,d,e){var s,r,q,p,o=$.aTP() +for(s=b;s95?31:q] +d=p&31 +e[p>>>5]=s}return d}, +aOE(a){if(a.b===7&&B.d.bz(a.a,"package")&&a.c<=0)return A.aPW(a.a,a.e,a.f) +return-1}, +b4E(a,b){return A.Q0(b,t.N)}, +aPW(a,b,c){var s,r,q +for(s=b,r=0;s")) +s.T1() +return s}, +b32(a){if(t.VF.b(a))return a +return new A.asy([],[]).amV(a,!0)}, +aQ2(a,b){var s=$.aw +if(s===B.ai)return a +return s.UC(a,b)}, +aR:function aR(){}, +LA:function LA(){}, +LE:function LE(){}, +LK:function LK(){}, +AD:function AD(){}, +la:function la(){}, +Ni:function Ni(){}, +cD:function cD(){}, +vP:function vP(){}, +a9T:function a9T(){}, +hd:function hd(){}, +k4:function k4(){}, +Nj:function Nj(){}, +Nk:function Nk(){}, +Nw:function Nw(){}, +mH:function mH(){}, +NX:function NX(){}, +Bz:function Bz(){}, +BA:function BA(){}, +NZ:function NZ(){}, +O0:function O0(){}, +aN:function aN(){}, +aB:function aB(){}, +ab:function ab(){}, +hR:function hR(){}, +Ov:function Ov(){}, +Ox:function Ox(){}, +OY:function OY(){}, +hS:function hS(){}, +Pd:function Pd(){}, +rI:function rI(){}, +oM:function oM(){}, +rJ:function rJ(){}, +Q4:function Q4(){}, +Qn:function Qn(){}, +Qr:function Qr(){}, +ahN:function ahN(a){this.a=a}, +ahO:function ahO(a){this.a=a}, +Qs:function Qs(){}, +ahP:function ahP(a){this.a=a}, +ahQ:function ahQ(a){this.a=a}, +i2:function i2(){}, +Qt:function Qt(){}, +bE:function bE(){}, +DB:function DB(){}, +i4:function i4(){}, +RF:function RF(){}, +lG:function lG(){}, +SW:function SW(){}, +amP:function amP(a){this.a=a}, +amQ:function amQ(a){this.a=a}, +Tm:function Tm(){}, +i9:function i9(){}, +TX:function TX(){}, +ia:function ia(){}, +U3:function U3(){}, +ib:function ib(){}, +U9:function U9(){}, +apg:function apg(a){this.a=a}, +aph:function aph(a){this.a=a}, +api:function api(a){this.a=a}, +fY:function fY(){}, +id:function id(){}, +fZ:function fZ(){}, +UH:function UH(){}, +UI:function UI(){}, +UK:function UK(){}, +ie:function ie(){}, +UQ:function UQ(){}, +US:function US(){}, +V5:function V5(){}, +Ve:function Ve(){}, +X7:function X7(){}, +HA:function HA(){}, +YD:function YD(){}, +Iy:function Iy(){}, +a2u:function a2u(){}, +a2H:function a2H(){}, +aFM:function aFM(a,b){this.a=a +this.$ti=b}, +yT:function yT(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.$ti=d}, +Y1:function Y1(a,b,c,d,e){var _=this +_.b=a +_.c=b +_.d=c +_.e=d +_.$ti=e}, +ava:function ava(a){this.a=a}, +avb:function avb(a){this.a=a}, +b0:function b0(){}, +OC:function OC(a,b,c){var _=this +_.a=a +_.b=b +_.c=-1 +_.d=null +_.$ti=c}, +X8:function X8(){}, +XL:function XL(){}, +XM:function XM(){}, +XN:function XN(){}, +XO:function XO(){}, +Y7:function Y7(){}, +Y8:function Y8(){}, +YR:function YR(){}, +YS:function YS(){}, +ZX:function ZX(){}, +ZY:function ZY(){}, +ZZ:function ZZ(){}, +a__:function a__(){}, +a_d:function a_d(){}, +a_e:function a_e(){}, +a_J:function a_J(){}, +a_K:function a_K(){}, +a1w:function a1w(){}, +JE:function JE(){}, +JF:function JF(){}, +a2s:function a2s(){}, +a2t:function a2t(){}, +a2y:function a2y(){}, +a3c:function a3c(){}, +a3d:function a3d(){}, +K5:function K5(){}, +K6:function K6(){}, +a3l:function a3l(){}, +a3m:function a3m(){}, +a4r:function a4r(){}, +a4s:function a4s(){}, +a4x:function a4x(){}, +a4y:function a4y(){}, +a4G:function a4G(){}, +a4H:function a4H(){}, +a51:function a51(){}, +a52:function a52(){}, +a53:function a53(){}, +a54:function a54(){}, +aPd(a){var s,r,q +if(a==null)return a +if(typeof a=="string"||typeof a=="number"||A.ml(a))return a +if(A.aQR(a))return A.jT(a) +s=Array.isArray(a) +s.toString +if(s){r=[] +q=0 +while(!0){s=a.length +s.toString +if(!(q")),r=new A.bI(s,b.h("bI<0>")) +a.then(A.o8(new A.aEr(r),1),A.o8(new A.aEs(r),1)) +return s}, +aPI(a){return a==null||typeof a==="boolean"||typeof a==="number"||typeof a==="string"||a instanceof Int8Array||a instanceof Uint8Array||a instanceof Uint8ClampedArray||a instanceof Int16Array||a instanceof Uint16Array||a instanceof Int32Array||a instanceof Uint32Array||a instanceof Float32Array||a instanceof Float64Array||a instanceof ArrayBuffer||a instanceof DataView}, +aIj(a){if(A.aPI(a))return a +return new A.aDz(new A.q5(t.Fy)).$1(a)}, +aE8:function aE8(a){this.a=a}, +aEr:function aEr(a){this.a=a}, +aEs:function aEs(a){this.a=a}, +aDz:function aDz(a){this.a=a}, +QL:function QL(a){this.a=a}, +aR5(a,b){return Math.min(a,b)}, +aR4(a,b){return Math.max(a,b)}, +aQW(a){return Math.log(a)}, +awq:function awq(){}, +iL:function iL(){}, +PU:function PU(){}, +iS:function iS(){}, +QN:function QN(){}, +RG:function RG(){}, +Uc:function Uc(){}, +j4:function j4(){}, +UU:function UU(){}, +Zm:function Zm(){}, +Zn:function Zn(){}, +a_n:function a_n(){}, +a_o:function a_o(){}, +a2D:function a2D(){}, +a2E:function a2E(){}, +a3t:function a3t(){}, +a3u:function a3u(){}, +aVA(a){return A.fC(a,0,null)}, +a88(a){var s=a.BYTES_PER_ELEMENT,r=A.cU(0,null,B.f.hS(a.byteLength,s),null,null) +return A.fC(a.buffer,a.byteOffset+0*s,(r-0)*s)}, +arC(a,b,c){var s=J.aUJ(a) +c=A.cU(b,c,B.f.hS(a.byteLength,s),null,null) +return A.dD(a.buffer,a.byteOffset+b*s,(c-b)*s)}, +Od:function Od(){}, +lz(a,b,c){if(b==null)if(a==null)return null +else return a.S(0,1-c) +else if(a==null)return b.S(0,c) +else return new A.k(A.mm(a.a,b.a,c),A.mm(a.b,b.b,c))}, +b_F(a,b){return new A.G(a,b)}, +aoE(a,b,c){if(b==null)if(a==null)return null +else return a.S(0,1-c) +else if(a==null)return b.S(0,c) +else return new A.G(A.mm(a.a,b.a,c),A.mm(a.b,b.b,c))}, +hv(a,b){var s=a.a,r=b*2/2,q=a.b +return new A.w(s-r,q-r,s+r,q+r)}, +aGN(a,b,c){var s=a.a,r=c/2,q=a.b,p=b/2 +return new A.w(s-r,q-p,s+r,q+p)}, +fX(a,b){var s=a.a,r=b.a,q=a.b,p=b.b +return new A.w(Math.min(s,r),Math.min(q,p),Math.max(s,r),Math.max(q,p))}, +aZL(a,b,c){var s,r,q,p,o +if(b==null)if(a==null)return null +else{s=1-c +return new A.w(a.a*s,a.b*s,a.c*s,a.d*s)}else{r=b.a +q=b.b +p=b.c +o=b.d +if(a==null)return new A.w(r*c,q*c,p*c,o*c) +else return new A.w(A.mm(a.a,r,c),A.mm(a.b,q,c),A.mm(a.c,p,c),A.mm(a.d,o,c))}}, +Eg(a,b,c){var s,r,q +if(b==null)if(a==null)return null +else{s=1-c +return new A.aC(a.a*s,a.b*s)}else{r=b.a +q=b.b +if(a==null)return new A.aC(r*c,q*c) +else return new A.aC(A.mm(a.a,r,c),A.mm(a.b,q,c))}}, +aMB(a,b,c,d,e){var s=e.a,r=e.b +return new A.ju(a,b,c,d,s,r,s,r,s,r,s,r,s===r)}, +lH(a,b){var s=b.a,r=b.b +return new A.ju(a.a,a.b,a.c,a.d,s,r,s,r,s,r,s,r,s===r)}, +ku(a,b,c,d,e,f,g,h){var s=g.a,r=g.b,q=h.a,p=h.b,o=e.a,n=e.b,m=f.a,l=f.b +return new A.ju(a,b,c,d,s,r,q,p,m,l,o,n,s===r&&s===q&&s===p&&s===o&&s===n&&s===m&&s===l)}, +xn(a,b,c,d,e){var s=d.a,r=d.b,q=e.a,p=e.b,o=b.a,n=b.b,m=c.a,l=c.b,k=s===r&&s===q&&s===p&&s===o&&s===n&&s===m&&s===l +return new A.ju(a.a,a.b,a.c,a.d,s,r,q,p,m,l,o,n,k)}, +aY0(a){switch(a.a){case 1:return"up" +case 0:return"down" +case 2:return"repeat"}}, +P(a,b,c){var s +if(a!=b){s=a==null?null:isNaN(a) +if(s===!0){s=b==null?null:isNaN(b) +s=s===!0}else s=!1}else s=!0 +if(s)return a==null?null:a +if(a==null)a=0 +if(b==null)b=0 +return a*(1-c)+b*c}, +mm(a,b,c){return a*(1-c)+b*c}, +aCY(a,b,c){return a*(1-c)+b*c}, +O(a,b,c){if(ac)return c +if(isNaN(a))return c +return a}, +aPT(a,b){return A.C(A.qp(B.c.an((a.gl(a)>>>24&255)*b),0,255),a.gl(a)>>>16&255,a.gl(a)>>>8&255,a.gl(a)&255)}, +aK0(a){return new A.m(a>>>0)}, +C(a,b,c,d){return new A.m(((a&255)<<24|(b&255)<<16|(c&255)<<8|d&255)>>>0)}, +aFn(a,b,c,d){return new A.m(((B.c.d4(d*255,1)&255)<<24|(a&255)<<16|(b&255)<<8|c&255)>>>0)}, +aFp(a){if(a<=0.03928)return a/12.92 +return Math.pow((a+0.055)/1.055,2.4)}, +y(a,b,c){if(b==null)if(a==null)return null +else return A.aPT(a,1-c) +else if(a==null)return A.aPT(b,c) +else return A.C(A.qp(B.c.V(A.aCY(a.gl(a)>>>24&255,b.gl(b)>>>24&255,c)),0,255),A.qp(B.c.V(A.aCY(a.gl(a)>>>16&255,b.gl(b)>>>16&255,c)),0,255),A.qp(B.c.V(A.aCY(a.gl(a)>>>8&255,b.gl(b)>>>8&255,c)),0,255),A.qp(B.c.V(A.aCY(a.gl(a)&255,b.gl(b)&255,c)),0,255))}, +a9D(a,b){var s,r,q,p,o,n=a.a,m=n>>>24&255 +if(m===0)return b +s=255-m +r=b.gl(b)>>>24&255 +q=n&255 +p=n>>>16&255 +n=n>>>8&255 +if(r===255)return A.C(255,B.f.d4(m*p+s*(b.gl(b)>>>16&255),255),B.f.d4(m*n+s*(b.gl(b)>>>8&255),255),B.f.d4(m*q+s*(b.gl(b)&255),255)) +else{r=B.f.d4(r*s,255) +o=m+r +return A.C(o,B.f.hS(p*m+(b.gl(b)>>>16&255)*r,o),B.f.hS(n*m+(b.gl(b)>>>8&255)*r,o),B.f.hS(q*m+(b.gl(b)&255)*r,o))}}, +aMi(){return $.W().aj()}, +aeo(a,b,c,d,e,f){return $.W().Vz(0,a,b,c,d,e,null)}, +aXF(a,b,c,d,e,f,g){var s,r +if(c.length!==d.length)A.T(A.bC('"colors" and "colorStops" arguments must have equal length.',null)) +s=f!=null?A.zY(f):null +if(g!=null)r=g.j(0,a)&&!0 +else r=!0 +if(r)return $.W().VD(0,a,b,c,d,e,s) +else return $.W().Vw(g,0,a,b,c,d,e,s)}, +aLk(a,b){return $.W().VA(a,b)}, +a5J(a,b){return A.b6D(a,b)}, +b6D(a,b){var s=0,r=A.a1(t.hP),q,p=2,o,n=[],m,l,k,j,i,h,g,f +var $async$a5J=A.a2(function(c,d){if(c===1){o=d +s=p}while(true)switch(s){case 0:s=b==null?3:5 +break +case 3:h=$.W() +g=a.a +g.toString +q=h.Jc(g) +s=1 +break +s=4 +break +case 5:h=$.W() +g=a.a +g.toString +s=6 +return A.a7(h.Jc(g),$async$a5J) +case 6:m=d +p=7 +s=10 +return A.a7(m.jp(),$async$a5J) +case 10:l=d +try{g=J.a65(l) +k=g.gbB(g) +g=J.a65(l) +j=g.gbh(g) +i=b.$2(k,j) +g=a.a +g.toString +f=i.a +f=h.kG(g,!1,i.b,f) +q=f +n=[1] +s=8 +break}finally{J.a65(l).m()}n.push(9) +s=8 +break +case 7:n=[2] +case 8:p=2 +m.m() +s=n.pop() +break +case 9:case 4:case 1:return A.a_(q,r) +case 2:return A.Z(o,r)}}) +return A.a0($async$a5J,r)}, +b_z(a){return a>0?a*0.57735+0.5:0}, +aN2(a,b,c){var s,r,q=A.y(a.a,b.a,c) +q.toString +s=A.lz(a.b,b.b,c) +s.toString +r=A.mm(a.c,b.c,c) +return new A.jC(q,s,r)}, +b_A(a,b,c){var s,r,q,p=a==null +if(p&&b==null)return null +if(p)a=A.a([],t.kO) +if(b==null)b=A.a([],t.kO) +s=A.a([],t.kO) +r=Math.min(a.length,b.length) +for(q=0;q=0}else q=!1 +if(!q)break +if(r>s)return-1 +if(A.aIs(a,c,d,r)&&A.aIs(a,c,d,r+p))return r +c=r+1}return-1}return A.b3r(a,b,c,d)}, +b3r(a,b,c,d){var s,r,q,p=new A.my(a,d,c,0) +for(s=b.length;r=p.k7(),r>=0;){q=r+s +if(q>d)break +if(B.d.df(a,b,r)&&A.aIs(a,c,d,q))return r}return-1}, +hz:function hz(a){this.a=a}, +FN:function FN(a,b,c){var _=this +_.a=a +_.b=b +_.c=c +_.d=null}, +aEd(a,b,c,d){if(d===208)return A.aR_(a,b,c) +if(d===224){if(A.aQZ(a,b,c)>=0)return 145 +return 64}throw A.c(A.Q("Unexpected state: "+B.f.iv(d,16)))}, +aR_(a,b,c){var s,r,q,p,o +for(s=c,r=0;q=s-2,q>=b;s=q){p=a.charCodeAt(s-1) +if((p&64512)!==56320)break +o=a.charCodeAt(q) +if((o&64512)!==55296)break +if(A.mn(o,p)!==6)break +r^=1}if(r===0)return 193 +else return 144}, +aQZ(a,b,c){var s,r,q,p,o +for(s=c;s>b;){--s +r=a.charCodeAt(s) +if((r&64512)!==56320)q=A.v6(r) +else{if(s>b){--s +p=a.charCodeAt(s) +o=(p&64512)===55296}else{p=0 +o=!1}if(o)q=A.mn(p,r) +else break}if(q===7)return s +if(q!==4)break}return-1}, +aIs(a,b,c,d){var s,r,q,p,o,n,m,l,k,j=u.q +if(b=c)return!0 +n=a.charCodeAt(o) +if((n&64512)!==56320)return!0 +p=A.mn(s,n)}else return(q&64512)!==55296 +if((q&64512)!==56320){m=A.v6(q) +d=r}else{d-=2 +if(b<=d){l=a.charCodeAt(d) +if((l&64512)!==55296)return!0 +m=A.mn(l,q)}else return!0}k=j.charCodeAt(j.charCodeAt(p|176)&240|m) +return((k>=208?A.aEd(a,b,d,k):k)&1)===0}return b!==c}, +b7A(a,b,c,d){var s,r,q,p,o,n +if(d===b||d===c)return d +s=a.charCodeAt(d) +if((s&63488)!==55296){r=A.v6(s) +q=d}else if((s&64512)===55296){p=d+1 +if(pb){o=s-1 +n=a.charCodeAt(o) +if((n&64512)===55296){q=A.mn(n,r) +s=o}else q=2}else q=2 +if(q===6)m=A.aR_(a,b,s)!==144?160:48 +else{l=q===1 +if(l||q===4)if(A.aQZ(a,b,s)>=0)m=l?144:128 +else m=48 +else m=u.S.charCodeAt(q|176)}return new A.my(a,a.length,d,m).k7()}, +my:function my(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +As:function As(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +bO:function bO(){}, +a8i:function a8i(a){this.a=a}, +a8j:function a8j(a){this.a=a}, +a8k:function a8k(a,b){this.a=a +this.b=b}, +a8l:function a8l(a){this.a=a}, +a8m:function a8m(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +a8n:function a8n(a,b,c){this.a=a +this.b=b +this.c=c}, +a8o:function a8o(a){this.a=a}, +NF:function NF(a){this.$ti=a}, +CH:function CH(a,b){this.a=a +this.$ti=b}, +n2:function n2(a,b){this.a=a +this.$ti=b}, +qj:function qj(){}, +yA:function yA(a,b){this.a=a +this.$ti=b}, +xR:function xR(a,b){this.a=a +this.$ti=b}, +za:function za(a,b,c){this.a=a +this.b=b +this.c=c}, +tf:function tf(a,b,c){this.a=a +this.b=b +this.$ti=c}, +ND:function ND(a){this.b=a}, +Pb:function Pb(a,b,c){var _=this +_.a=a +_.b=b +_.d=_.c=0 +_.$ti=c}, +aPt(a){var s,r,q,p,o="0123456789abcdef",n=a.length,m=new Uint8Array(n*2) +for(s=0,r=0;s>>4&15) +r=p+1 +m[p]=o.charCodeAt(q&15)}return A.jF(m,0,null)}, +rh:function rh(a){this.a=a}, +aap:function aap(){this.a=null}, +Pa:function Pa(){}, +aes:function aes(){}, +b21(a){var s=new Uint32Array(A.em(A.a([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225],t.t))),r=new Uint32Array(64),q=new Uint8Array(0) +return new A.a23(s,r,a,new Uint32Array(16),new A.GB(q,0))}, +a22:function a22(){}, +aAB:function aAB(){}, +a23:function a23(a,b,c,d,e){var _=this +_.w=a +_.x=b +_.a=c +_.c=d +_.d=0 +_.e=e +_.f=!1}, +acu:function acu(){}, +a5:function a5(){}, +aR0(a){var s=B.b.ra(a,0,A.b62()),r=s+((s&67108863)<<3)&536870911 +r^=r>>>11 +return r+((r&16383)<<15)&536870911}, +Lc(a,b){var s,r,q,p,o,n,m,l +if(a===b)return!0 +s=a.length +if(s!==b.length)return!1 +for(r=t.JY,q=t.T4,p=t.f,o=0;o>>0}return(p.a^J.bF(p.b))>>>0}a=p.a=a+J.D(s)&536870911 +a=p.a=a+((a&524287)<<10)&536870911 +return a^a>>>6}, +aR1(a,b){return a.k(0)+"("+new A.R(b,new A.aEj(),A.S(b).h("R<1,f>")).c_(0,", ")+")"}, +aCr:function aCr(){}, +aCs:function aCs(a){this.a=a}, +aCt:function aCt(){}, +aEj:function aEj(){}, +qD(a,b){return new A.qC(a,B.ae,b,null,null)}, +qC:function qC(a,b,c,d,e){var _=this +_.r=a +_.c=b +_.d=c +_.e=d +_.a=e}, +GY:function GY(a,b,c,d){var _=this +_.cx=_.CW=null +_.cy=a +_.e=_.d=$ +_.e9$=b +_.c0$=c +_.a=null +_.b=d +_.c=null}, +atl:function atl(a,b){this.a=a +this.b=b}, +atm:function atm(a){this.a=a}, +l7(a,b,c,d,e,f,g,h,i,a0,a1,a2,a3){var s,r,q,p,o=c==null,n=o?B.Qs:c,m=i==null?16:i,l=a==null?B.C2:a,k=a2==null?B.b7:a2,j=g==null?B.bd:g +if(a0==null)s=A.aJI(o?A.a([],t.hn):c).b +else s=a0 +if(a1==null){r=A.aJI(o?A.a([],t.hn):c).a +o=r}else o=a1 +r=h +q=e==null?0:e +p=b==null?B.n:b +return new A.k0(n,m,l,d,r,a3,k,0,1,0,o,s,q,B.b4,p,j,f,d)}, +f1(a,b,c,d,e){var s=a==null?B.Qt:a,r=b==null?2:b,q=d==null?B.aa:d +return new A.cJ(e,c===!0,s,r,q)}, +aVi(a,b,c){var s=a.a +s=B.c.an(s+(b.a-s)*c) +return A.f1(A.eK(a.c,b.c,c,A.b50(),t.vs),A.P(a.d,b.d,c),b.b,A.eK(a.e,b.e,c,A.zT(),t.S),s)}, +c6(a,b,c,d,e,f,g,h,i,j){var s,r,q,p,o,n=null,m=f==null?0:f +if(e==null)s=g==null?B.eR:n +else s=e +r=j==null +q=r?8:j +p=$.cY() +p=p.at8(c,r?8:j) +o=$.cY() +o=o.at9(d,r?8:j) +r=a==null?A.aFe(n,n,n,n,n):a +return new A.db(m,i,s,g,q,p,b,o,r,h==null?B.Qu:h)}, +aVj(a,b,c){var s,r,q,p,o,n,m,l,k,j,i,h=a.d +h=h==null?null:h.dA(b.d,c) +s=A.y(a.c,b.c,c) +r=A.P(a.e,b.e,c) +q=A.qS(a.f,b.f,c) +p=A.eK(a.r,b.r,c,A.zT(),t.S) +o=A.aQ(a.w,b.w,c) +n=A.P(a.a,b.a,c) +m=A.P(a.b,b.b,c) +m.toString +l=a.x +k=b.x +j=A.P(l.b,k.b,c) +i=A.P(l.c,k.c,c) +l=A.y(l.d,k.d,c) +return A.c6(A.aFe(l,j,null,k.a,i),p,q,o,s,n,h,A.eK(a.y,b.y,c,A.b51(),t.Gu),m,r)}, +aVk(a,b,c){var s,r,q=A.P(a.a,b.a,c) +q.toString +s=A.P(a.b,b.b,c) +s.toString +r=A.y(a.c,b.c,c) +r.toString +return new A.aL(q,s,r,A.aQ(a.d,b.d,c))}, +aFe(a,b,c,d,e){var s,r=b==null?0:b,q=e==null?0:e +if(a==null)s=B.bY +else s=a +return new A.M4(d===!0,r,q,s,c)}, +mt(a,b,c,d,e,f,g,h){var s=null,r=h==null?A.Mc(s,s,s,s,s):h,q=g==null?B.jY:g +return new A.Ma(r,q,a===!0,c!==!1,b!==!1,f,e,d)}, +Mc(a,b,c,d,e){var s=b==null?A.a9B(B.bY,15):b,r=e==null?B.cv:e,q=d==null?16:d,p=c==null?B.hb:c,o=a==null?A.b52():a +return new A.Mb(s,4,r,q,p,0,120,o,!1,!1,B.Bg,0,B.r)}, +b5K(a,b,c,d){var s=null,r=c.d,q=r==null?s:B.b.gL(r.a),p=A.bL(s,s,q==null?c.c:q,s,s,s,s,s,s,s,s,14,s,s,B.x,s,s,!0,s,s,s,s,s,s,s,s) +return new A.k1(B.c.k(c.b),p,s)}, +k0:function k0(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r){var _=this +_.ch=a +_.CW=b +_.cx=c +_.cy=d +_.c=e +_.d=f +_.e=g +_.f=h +_.r=i +_.w=j +_.x=k +_.y=l +_.z=m +_.Q=n +_.as=o +_.at=p +_.a=q +_.b=r}, +vo:function vo(a,b){this.a=a +this.b=b}, +cJ:function cJ(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e}, +a7_:function a7_(){}, +a70:function a70(){}, +a71:function a71(){}, +db:function db(a,b,c,d,e,f,g,h,i,j){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.x=i +_.y=j}, +aL:function aL(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +M4:function M4(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e}, +Ma:function Ma(a,b,c,d,e,f,g,h){var _=this +_.e=a +_.f=b +_.r=c +_.w=d +_.a=e +_.b=f +_.c=g +_.d=h}, +UP:function UP(a,b){this.a=a +this.b=b}, +Mb:function Mb(a,b,c,d,e,f,g,h,i,j,k,l,m){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.x=i +_.y=j +_.z=k +_.Q=l +_.as=m}, +k1:function k1(a,b,c){this.a=a +this.b=b +this.e=c}, +AA:function AA(a){this.a=a}, +Md:function Md(a,b,c,d,e,f,g,h){var _=this +_.c=a +_.d=b +_.e=c +_.f=d +_.r=e +_.w=f +_.a=g +_.b=h}, +qE:function qE(a,b){this.a=a +this.b=b}, +W8:function W8(){}, +Wc:function Wc(){}, +Wd:function Wd(){}, +Wf:function Wf(){}, +Wg:function Wg(){}, +Wi:function Wi(){}, +Wj:function Wj(){}, +Wk:function Wk(){}, +Wl:function Wl(){}, +aJI(a){var s,r,q,p,o,n,m,l,k,j,i,h,g,f +if(a.length===0)return new A.ok(0,0,!1) +r=new A.n4(a,t.ol) +if($.aFg.ai(0,r)){q=$.aFg.i(0,r) +p=q.a +q=q.b +return new A.ok(p,q,!0)}s=null +try{s=B.b.vE(a,new A.a72())}catch(o){return new A.ok(0,0,!1)}n=Math.max(s.c[0].a,s.c[0].b) +m=Math.min(s.c[0].a,s.c[0].b) +for(q=a.length,l=0;l") +s=s.h("R<1,i>") +return new A.TB(b,a,A.V(new A.R(c,new A.aov(),r),!0,r.h("af.E")),A.V(new A.R(c,new A.aow(),s),!0,s.h("af.E")),null)}, +TB:function TB(a,b,c,d,e){var _=this +_.e=a +_.f=b +_.r=c +_.c=d +_.a=e}, +aov:function aov(){}, +aow:function aow(){}, +LZ:function LZ(a,b,c,d,e,f,g,h,i,j){var _=this +_.B=a +_.F=b +_.a9=c +_.X=d +_.IE$=e +_.apB$=f +_.e_$=g +_.a4$=h +_.d8$=i +_.fy=_.fx=null +_.go=!1 +_.k1=_.id=null +_.k2=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=j +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +awC:function awC(a,b){this.a=a +this.b=b}, +a6N:function a6N(){}, +h9:function h9(a,b){this.a=a +this.b=b}, +k_:function k_(a,b){this.a=a +this.b=b}, +W3:function W3(){}, +W4:function W4(){}, +W5:function W5(){}, +GU:function GU(){}, +ui:function ui(a,b,c,d){var _=this +_.c=a +_.d=b +_.e=c +_.a=d}, +aox:function aox(a){this.a=a}, +aoy:function aoy(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +aoz:function aoz(a,b,c,d,e,f){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f}, +GV:function GV(a,b,c,d){var _=this +_.c=a +_.d=b +_.e=c +_.a=d}, +cK(a,b){var s=a==null?A.oo(B.k,1):a +return new A.OD(b!==!1,s)}, +Mg:function Mg(){}, +OD:function OD(a,b){this.a=a +this.b=b}, +C4:function C4(){}, +BY:function BY(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +a7F:function a7F(){}, +Os:function Os(a,b){this.a=a +this.b=b}, +Wn:function Wn(){}, +Yf:function Yf(){}, +Yg:function Yg(){}, +Yo:function Yo(){}, +AB:function AB(){}, +ff:function ff(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.$ti=d}, +cL:function cL(){}, +OI:function OI(a){this.a=a}, +OJ:function OJ(a){this.a=a}, +OK:function OK(a){this.a=a}, +C0:function C0(){}, +C1:function C1(){}, +ON:function ON(a){this.a=a}, +C3:function C3(){}, +rw:function rw(a){this.a=a}, +OH:function OH(a){this.a=a}, +OG:function OG(a){this.a=a}, +C_:function C_(a){this.a=a}, +OL:function OL(a){this.a=a}, +OM:function OM(a){this.a=a}, +C2:function C2(a){this.a=a}, +xv:function xv(){}, +akT:function akT(a){this.a=a}, +akU:function akU(a){this.a=a}, +akV:function akV(a){this.a=a}, +akW:function akW(a){this.a=a}, +akX:function akX(a){this.a=a}, +akY:function akY(a){this.a=a}, +akZ:function akZ(a){this.a=a}, +al_:function al_(a){this.a=a}, +al0:function al0(a){this.a=a}, +al1:function al1(a){this.a=a}, +al2:function al2(a){this.a=a}, +al3:function al3(a){this.a=a}, +al4:function al4(a){this.a=a}, +PW:function PW(a,b){this.a=a +this.b=b}, +lt(a,b){return new A.rX(a,B.ae,b,null,null)}, +rX:function rX(a,b,c,d,e){var _=this +_.r=a +_.c=b +_.d=c +_.e=d +_.a=e}, +Ig:function Ig(a,b,c,d,e){var _=this +_.cx=_.CW=null +_.cy=a +_.db=b +_.e=_.d=$ +_.e9$=c +_.c0$=d +_.a=null +_.b=e +_.c=null}, +axw:function axw(a,b){this.a=a +this.b=b}, +axu:function axu(a){this.a=a}, +axv:function axv(a,b){this.a=a +this.b=b}, +axt:function axt(){}, +axx:function axx(a){this.a=a}, +hZ(a,b,c,d,e,f,g,h,i,j,k,l,a0,a1,a2,a3,a4){var s=a0==null?A.agG(i).a:a0,r=k==null?A.agG(i).b:k,q=a1==null?A.agG(i).c:a1,p=l==null?A.agG(i).d:l,o=b==null?0:b,n=c==null?0:c,m=a==null?B.n:a +return new A.lu(i,d,j,a3,h,a4,a2,s,r,o,q,p,n,f,m,g,e==null?A.cK(null,null):e,j)}, +ec(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,a0,a1,a2){var s,r,q=null +if(d==null)s=h==null?B.eR:q +else s=d +r=c==null?A.fs(!1,q,0,q,!1,B.aN):c +s=new A.cq(a2,!0,s,h,b,i,e,!1,o,k,!1,r,a==null?A.fs(!1,q,0,q,!1,B.aN):a,g,a1,f,p,j,m) +s.a6g(a,b,c,d,e,f,g,h,i,j,k,!1,m,!1,o,p,!0,a1,a2) +return s}, +aY7(a,b,c){var s,r,q,p,o,n,m,l,k,j,i=A.P(a.x,b.x,c) +i.toString +s=A.aJH(a.ay,b.ay,c) +r=A.aJH(a.ch,b.ch,c) +q=A.P(a.as,b.as,c) +q.toString +p=b.CW +o=A.eK(a.cy,b.cy,c,A.zT(),t.S) +n=A.y(a.r,b.r,c) +m=A.rG(a.w,b.w,c) +l=A.eK(a.a,b.a,c,A.b4T(),t.fw) +l.toString +k=A.aN2(a.db,b.db,c) +k.toString +j=A.P(a.dy.a,b.dy.a,c) +j.toString +return A.ec(r,i,s,n,b.z,o,new A.iF(p.a,p.b,p.c),m,b.y,b.dx,b.at,!1,new A.CX(j),!1,q,k,!0,b.cx,l)}, +fs(a,b,c,d,e,f){var s +if(b==null)s=d==null?A.C(B.c.an(127.5),96,125,139):null +else s=b +return new A.M6(e,s,d,f,c,a)}, +aJH(a,b,c){var s=b.d,r=a.d.b,q=s.b,p=A.y(r.a,q.a,c),o=A.rG(r.b,q.b,c),n=A.P(r.c,q.c,c) +n.toString +n=A.mO(p,A.eK(r.d,q.d,c,A.zT(),t.S),o,n) +o=A.y(a.b,b.b,c) +q=A.rG(a.c,b.c,c) +r=A.P(a.e,b.e,c) +r.toString +return A.fs(b.f,o,r,q,b.a,new A.vn(s.a,n,s.c,!0))}, +aJK(a,b,c,d){var s +if(a==null)s=c==null?A.C(B.c.an(127.5),96,125,139):null +else s=a +return new A.jg(b,d,s,c)}, +aVl(a,b,c){return A.aJK(A.y(a.c,b.c,c),b.a,A.rG(a.d,b.d,c),b.b)}, +b7T(a){return!0}, +aHQ(a,b,c){var s=c.w,r=s==null +if(!r&&!0)return A.aIu(s.a,A.aG2(s),b/100) +s=r?null:B.b.gL(s.a) +if(s==null)s=c.r +return s==null?B.bY:s}, +b37(a,b,c){var s,r=c.w,q=r==null +if(!q&&!0)s=A.aIu(r.a,A.aG2(r),b/100) +else{r=q?null:B.b.gL(r.a) +s=r==null?c.r:r +if(s==null)s=B.bY}return A.a9B(s,40)}, +aPj(a,b,c,d,e){var s,r=A.aHQ(a,b,c),q=c.w,p=q==null +if(!p&&!0)s=A.aIu(q.a,A.aG2(q),b/100) +else{q=p?null:B.b.gL(q.a) +s=q==null?c.r:q +if(s==null)s=B.bY}q=A.a9B(s,40) +return new A.iE(r,e==null?4:e,q,1)}, +b7R(a,b){return!0}, +b4K(a,b){return Math.abs(a.a-b.a)}, +b5T(a,b){var s=J.hI(b,new A.aDF(a),t.Cx) +return A.V(s,!0,A.o(s).h("af.E"))}, +b5N(a,b){return-1/0}, +b5M(a,b){return a.a[b].b}, +ah6(a,b,c,d){return new A.wI(c,d,b,a)}, +b5P(a){var s=J.hI(a,new A.aDD(),t.iK) +return A.V(s,!0,A.o(s).h("af.E"))}, +aY5(a,b,c){return new A.fT(a,b,B.b.cS(a.a,c),c.a,c.b)}, +lu:function lu(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r){var _=this +_.ch=a +_.CW=b +_.cx=c +_.cy=d +_.c=e +_.d=f +_.e=g +_.f=h +_.r=i +_.w=j +_.x=k +_.y=l +_.z=m +_.Q=n +_.as=o +_.at=p +_.a=q +_.b=r}, +cq:function cq(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s){var _=this +_.a=a +_.e=_.d=_.c=_.b=$ +_.f=b +_.r=c +_.w=d +_.x=e +_.y=f +_.z=g +_.Q=h +_.as=i +_.at=j +_.ax=k +_.ay=l +_.ch=m +_.CW=n +_.cx=o +_.cy=p +_.db=q +_.dx=r +_.dy=s}, +agF:function agF(){}, +CX:function CX(a){this.a=a}, +M6:function M6(a,b,c,d,e,f){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f}, +jg:function jg(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +vn:function vn(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +iF:function iF(a,b,c){this.a=a +this.b=b +this.c=c}, +oF:function oF(){}, +iE:function iE(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +BZ:function BZ(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +OF:function OF(){}, +kn:function kn(a,b,c,d,e,f,g,h,i,j,k){var _=this +_.e=a +_.f=b +_.r=c +_.w=d +_.x=e +_.y=f +_.z=g +_.a=h +_.b=i +_.c=j +_.d=k}, +aDF:function aDF(a){this.a=a}, +aDE:function aDE(a){this.a=a}, +wI:function wI(a,b,c,d){var _=this +_.a=a +_.b=b +_.r=c +_.w=d}, +aDD:function aDD(){}, +fT:function fT(a,b,c,d,e){var _=this +_.c=a +_.d=b +_.e=c +_.a=d +_.b=e}, +m2:function m2(a,b,c,d,e,f){var _=this +_.w=a +_.c=b +_.d=c +_.e=d +_.a=e +_.b=f}, +fA:function fA(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.e=d}, +fG:function fG(a,b){this.a=a +this.b=b}, +lS:function lS(a){this.a=a}, +t9:function t9(a){this.a=a}, +rY:function rY(a,b){this.a=a +this.b=b}, +Wa:function Wa(){}, +Wb:function Wb(){}, +Wo:function Wo(){}, +Yh:function Yh(){}, +Yi:function Yi(){}, +Yk:function Yk(){}, +Zr:function Zr(){}, +Zs:function Zs(){}, +Zt:function Zt(){}, +Zy:function Zy(){}, +Zz:function Zz(){}, +ZA:function ZA(){}, +ZB:function ZB(){}, +a2c:function a2c(){}, +a3n:function a3n(){}, +agG(a0){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a +if(a0.length===0)return B.kB +q=new A.n4(a0,t.nk) +if($.aGh.ai(0,q)){p=$.aGh.i(0,q) +o=p.a +n=p.b +m=p.c +p=p.d +return new A.rZ(o,n,m,p,!0)}s=null +try{s=B.b.vE(a0,new A.agH())}catch(l){return B.kB}r=null +try{r=B.b.vE(s.a,new A.agI())}catch(l){return B.kB}k=r.a +j=r.a +i=r.b +h=r.b +for(p=a0.length,g=0;gj)j=e +o=f.b +o===$&&A.b() +d=o.a +if(dh)h=c +o=f.e +o===$&&A.b() +b=o.b +if(b") +s=A.V(new A.ba(e,new A.ajn(),s),!0,s.h("n.E"))}if(s==null)s=B.Qr +r=b==null?B.n:b +q=f==null?2:f +p=g==null?0:g +return new A.lD(s,c,r,q,p,d,a,d)}, +jt(a,b,c,d,e,f,g,h,i,j){var s=j==null?10:j,r=d==null?B.eR:d,q=e==null?40:e,p=c==null?B.u:c,o=h==null?0.5:h,n=a==null?0.5:a +return new A.dE(s,r,q,f!==!1,i,g,p,b,o,n)}, +aYZ(a,b,c){var s=A.P(a.a,b.a,c),r=A.y(a.b,b.b,c),q=A.P(a.c,b.c,c),p=A.bb(a.e,b.e,c),o=A.aQ(a.r,b.r,c),n=A.P(a.x,b.x,c) +return A.jt(A.P(a.y,b.y,c),b.w,o,r,q,!0,b.f,n,p,s)}, +aGE(a){return new A.RA(!0,a,null,null)}, +lD:function lD(a,b,c,d,e,f,g,h){var _=this +_.c=a +_.d=b +_.e=c +_.f=d +_.r=e +_.w=f +_.a=g +_.b=h}, +ajn:function ajn(){}, +ajo:function ajo(){}, +ajp:function ajp(){}, +dE:function dE(a,b,c,d,e,f,g,h,i,j){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.x=i +_.y=j}, +RA:function RA(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +RB:function RB(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +E4:function E4(a){this.a=a}, +tB:function tB(a,b){this.a=a +this.b=b}, +a_D:function a_D(){}, +a_F:function a_F(){}, +a_G:function a_G(){}, +aYY(a){var s,r=null,q={},p=t.l7,o=A.bf(a.length,A.bP(r,r,B.o,r,r,r,r,r,r,r,r,r,r,r),!1,p) +q.a=!0 +s=new A.cw(a,A.S(a).h("cw<1>")) +s.gd5(s).aa(0,new A.ajB(q,o)) +if(q.a){q=J.CI(0,p) +return q}return o}, +ajB:function ajB(a,b){this.a=a +this.b=b}, +ajq:function ajq(){this.c=this.b=this.a=$}, +ajs:function ajs(a){this.a=a}, +ajt:function ajt(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +ajr:function ajr(){}, +aju:function aju(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +Rw:function Rw(a,b,c,d){var _=this +_.e=a +_.f=b +_.c=c +_.a=d}, +Sq:function Sq(a,b,c,d,e,f,g,h,i,j){var _=this +_.c1=a +_.cw=b +_.ce=c +_.dE=d +_.e_$=e +_.a4$=f +_.d8$=g +_.B=h +_.X=_.a9=_.F=null +_.aq=i +_.bj=_.aE=_.aD=_.aH=$ +_.fy=_.fx=null +_.go=!1 +_.k1=_.id=null +_.k2=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=j +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +a10:function a10(){}, +a11:function a11(){}, +Ed:function Ed(a,b,c,d,e){var _=this +_.r=a +_.c=b +_.d=c +_.e=d +_.a=e}, +a0n:function a0n(a,b,c){var _=this +_.CW=null +_.e=_.d=$ +_.e9$=a +_.c0$=b +_.a=null +_.b=c +_.c=null}, +az4:function az4(a){this.a=a}, +aMC(a,b,c,d,e,f,g,h,i,j,k,l,m){var s=b==null?B.Qq:b,r=e==null?B.n:e,q=g==null?B.lk:g,p=l==null?0.2:l +return new A.lI(s,r,f,q,c,m,p,j,k,i,d,h,a,h)}, +aMD(a,b,c,d,e){var s=c==null?B.Qp:c,r=e==null?A.C(51,0,188,212):e,q=a==null?B.eR:a,p=b==null?2:b +return new A.i5(s,r,q,p,d==null?5:d)}, +aZC(a,b,c){var s=A.eK(a.a,b.a,c,A.b7D(),t.Ut),r=A.y(a.b,b.b,c) +return A.aMD(A.y(a.c,b.c,c),A.P(a.d,b.d,c),s,A.P(a.e,b.e,c),r)}, +aZD(a,b,c){var s=A.P(a.a,b.a,c) +s.toString +return new A.fW(s)}, +aZE(a){return new A.RW(10,!0,a,null,null)}, +akj:function akj(a,b){this.a=a +this.b=b}, +pt:function pt(a,b){this.a=a +this.b=b}, +lI:function lI(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var _=this +_.c=a +_.d=b +_.e=c +_.f=d +_.r=e +_.w=f +_.x=g +_.y=h +_.z=i +_.Q=j +_.as=k +_.at=l +_.a=m +_.b=n}, +i5:function i5(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e}, +fW:function fW(a){this.a=a}, +RW:function RW(a,b,c,d,e){var _=this +_.e=a +_.a=b +_.b=c +_.c=d +_.d=e}, +Ee:function Ee(a){this.a=a}, +RX:function RX(a,b,c,d,e,f){var _=this +_.c=a +_.d=b +_.e=c +_.f=d +_.a=e +_.b=f}, +tO:function tO(a,b){this.a=a +this.b=b}, +a0l:function a0l(){}, +a0o:function a0o(){}, +a0p:function a0p(){}, +a0q:function a0q(){}, +a0r:function a0r(){}, +ake:function ake(){var _=this +_.x=_.w=_.r=_.f=_.e=_.d=_.c=_.b=_.a=$ +_.y=null}, +akh:function akh(a,b,c,d,e,f,g,h,i){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.x=i}, +aki:function aki(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e}, +akg:function akg(a,b,c){this.a=a +this.b=b +this.c=c}, +akf:function akf(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +tQ:function tQ(a){this.a=a}, +RU:function RU(a,b,c){this.d=a +this.e=b +this.a=c}, +Su:function Su(a,b,c,d,e,f,g){var _=this +_.c1=a +_.cw=b +_.ce=c +_.dE=d +_.B=e +_.X=_.a9=_.F=null +_.aq=f +_.bj=_.aE=_.aD=_.aH=$ +_.fy=_.fx=null +_.go=!1 +_.k1=_.id=null +_.k2=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=g +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +aMR(a,b,c){return new A.F1(a,b,c,null,null)}, +F1:function F1(a,b,c,d,e){var _=this +_.r=a +_.c=b +_.d=c +_.e=d +_.a=e}, +Ji:function Ji(a,b,c,d){var _=this +_.cx=_.CW=null +_.cy=a +_.e=_.d=$ +_.e9$=b +_.c0$=c +_.a=null +_.b=d +_.c=null}, +aAg:function aAg(a){this.a=a}, +aAh:function aAh(a,b){this.a=a +this.b=b}, +aAi:function aAi(a){this.a=a}, +an4(a,b,c,d,e,f,a0,a1,a2,a3,a4,a5,a6,a7,a8){var s,r,q,p,o,n,m,l=null,k=a5==null,j=k?B.eH:a5,i=a7==null?B.aa:a7,h=a4==null?A.aMT(l,l,l,l):a4,g=e==null?B.b4:e +if(a2==null)s=A.an5(k?B.eH:a5).a +else s=a2 +if(a0==null)r=A.an5(k?B.eH:a5).b +else r=a0 +if(a3==null)q=A.an5(k?B.eH:a5).c +else q=a3 +if(a1==null){p=A.an5(k?B.eH:a5).d +k=p}else k=a1 +p=f +o=b==null?0:b +n=c==null?0:c +m=a==null?B.n:a +return new A.lP(j,a6,i,h,p,a8,B.b7,s,r,o,q,k,n,g,m,B.bd,d,a6)}, +aE(a,b,c,d,e){var s=d==null?6:d,r=c==null?B.Q7[B.c.V(B.c.bF(a*b,18))]:c +return new A.dh(e!==!1,s,r,a,b)}, +b_a(a,b,c){var s,r,q=A.P(a.a,b.a,c) +q.toString +s=A.P(a.b,b.b,c) +s.toString +r=A.P(a.d,b.d,c) +return A.aE(q,s,A.y(a.e,b.e,c),r,!0)}, +aGU(a,b,c,d,e,f,g){var s=g==null?A.aMV(null,null):g,r=f==null?0:f +return new A.Ta(s,r,b!==!1,a!==!1,e,d,c)}, +aMV(a,b){var s=b==null?A.a9B(B.bY,15):b,r=a==null?A.b7J():a +return new A.Tb(s,4,B.cv,B.hb,0,120,r,!1,!1,0,B.r)}, +b5Q(a){var s=null,r=A.bL(s,s,a.e,s,s,s,s,s,s,s,s,14,s,s,B.x,s,s,!0,s,s,s,s,s,s,s,s) +return A.aMU(""+B.c.V(a.d),s,s,r)}, +aMU(a,b,c,d){var s=b==null?8:b +return new A.pB(a,d,s,B.aH,B.q,c)}, +b6o(a,b){return null}, +b6n(a,b){return A.h(b.d)}, +aMT(a,b,c,d){var s=b==null?A.b7L():b,r=a==null?A.b7K():a,q=d==null?B.q:d +return new A.T9(c===!0,s,r,q)}, +lP:function lP(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r){var _=this +_.ch=a +_.CW=b +_.cx=c +_.cy=d +_.c=e +_.d=f +_.e=g +_.f=h +_.r=i +_.w=j +_.x=k +_.y=l +_.z=m +_.Q=n +_.as=o +_.at=p +_.a=q +_.b=r}, +dh:function dh(a,b,c,d,e){var _=this +_.c=a +_.d=b +_.e=c +_.a=d +_.b=e}, +Ta:function Ta(a,b,c,d,e,f,g){var _=this +_.e=a +_.f=b +_.r=c +_.a=d +_.b=e +_.c=f +_.d=g}, +u4:function u4(a){this.a=a}, +Tc:function Tc(a,b){this.a=a +this.b=b}, +Tb:function Tb(a,b,c,d,e,f,g,h,i,j,k){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.x=i +_.y=j +_.z=k}, +pB:function pB(a,b,c,d,e,f){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f}, +u1:function u1(a,b){this.a=a +this.b=b}, +T9:function T9(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +a1C:function a1C(){}, +a1F:function a1F(){}, +a1G:function a1G(){}, +a1H:function a1H(){}, +a1I:function a1I(){}, +a1J:function a1J(){}, +a1K:function a1K(){}, +an5(a){var s,r,q,p,o,n,m,l,k,j,i,h,g,f +if(a.length===0)return new A.u2(0,0,0,0,!1) +s=new A.n4(a,t.Xa) +if($.aGT.ai(0,s)){r=$.aGT.i(0,s) +q=r.a +p=r.b +o=r.c +r=r.d +return new A.u2(q,p,o,r,!0)}r=a[0] +n=r.a +m=r.b +for(r=a.length,l=m,k=n,j=0;jk)k=h +if(hl)l=g +if(g")).is(0,new A.a6V()),g=b-h,f=new A.a6Y(g,a,j) +switch(a.cx.a){case 0:for(s=a.CW,r=0,q=0;qb)f.$0() +break +case 1:s=a.CW +n=b-(h+s*(k.length-1)) +for(r=0,q=0;qb)f.$0() +break +case 2:s=a.CW +n=(b-(h+s*(k.length-1)))/2 +for(r=0,q=0;qb)f.$0() +break +case 5:m=k.length +l.a=0 +new A.cw(k,i.h("cw<1>")).aa(0,new A.a6W(l,g/(m-1),j)) +break +case 4:m=k.length +l.b=0 +new A.cw(k,i.h("cw<1>")).aa(0,new A.a6X(l,g/(m*2),j)) +break +case 3:f.$0() +break}return j}, +a6U:function a6U(){}, +a6V:function a6V(){}, +a6Y:function a6Y(a,b,c){this.a=a +this.b=b +this.c=c}, +a6Z:function a6Z(a,b,c){this.a=a +this.b=b +this.c=c}, +a6W:function a6W(a,b,c){this.a=a +this.b=b +this.c=c}, +a6X:function a6X(a,b,c){this.a=a +this.b=b +this.c=c}, +aG2(a){var s,r={} +r.a=A.a([],t.n) +s=a.b +if(s==null||s.length!==a.a.length){s=a.a +if(s.length>1)new A.cw(s,A.S(s).h("cw<1>")).aa(0,new A.ael(r,a)) +else throw A.c(A.bC('"colors" must have length > 1.',null))}else{s.toString +r.a=s}return r.a}, +ael:function ael(a,b){this.a=a +this.b=b}, +aa9(a,b){var s +if(b!=null){s=A.S(b).h("R<1,z>") +return A.b5I(a,new A.MG(A.V(new A.R(b,new A.aaa(),s),!0,s.h("af.E")),t.me))}else return a}, +aaa:function aaa(){}, +b09(a,b){var s +if(a!==B.ci)if(!(a===B.az&&b===B.q))s=a===B.fr&&b===B.Z +else s=!0 +else s=!0 +if(s)return B.oZ +else{if(a!==B.dZ)if(!(a===B.fr&&b===B.q))s=a===B.az&&b===B.Z +else s=!0 +else s=!0 +if(s)return B.p_ +else return B.ND}}, +Cq:function Cq(a,b){this.a=a +this.b=b}, +qX:function qX(a,b){this.a=a +this.b=b}, +a8u:function a8u(a,b,c){this.a=a +this.b=b +this.c=c}, +n4:function n4(a,b){this.a=a +this.$ti=b}, +ZF:function ZF(){}, +b5I(a,b){var s,r,q,p,o,n,m,l=$.W().bD() +for(s=a.HG(),s=s.gab(s),r=b.a;s.q();){q=s.gJ(s) +q.gu(q) +for(p=0,o=!0;p=r.length)n=b.b=0 +b.b=n+1 +m=r[n] +if(o)l.zE(0,q.WA(p,p+m),B.e) +p+=m +o=!o}}return l}, +MG:function MG(a,b){this.a=a +this.b=0 +this.$ti=b}, +arR:function arR(){}, +l4:function l4(a,b){var _=this +_.a=a +_.b=$ +_.c=b +_.d=!1}, +iv:function iv(a,b,c){this.a=a +this.b=b +this.c=c}, +b6Y(){var s,r,q,p,o,n +if($.aa==null)A.aO1() +s=$.aa +s.toString +r=$.b8().e +q=r.i(0,0) +q.toString +p=s.gC_() +o=s.CW$ +if(o===$){r=r.i(0,0) +r.toString +n=new A.a1k(B.Q,r,null,A.ag(t.T)) +n.aw() +n.saP(null) +s.CW$!==$&&A.ay() +s.CW$=n +o=n}s.a0w(new A.Vf(q,B.U6,p,o,null)) +s.Lp()}, +QA:function QA(a){this.a=a}, +aiq:function aiq(){}, +Am:function Am(a,b,c,d,e){var _=this +_.c=a +_.d=b +_.e=c +_.f=d +_.a=e}, +LJ:function LJ(a){this.a=null +this.b=a +this.c=null}, +a6x:function a6x(a){this.a=a}, +a6v:function a6v(a,b,c){this.a=a +this.b=b +this.c=c}, +a6w:function a6w(a){this.a=a}, +VW:function VW(a){this.a=a}, +at1:function at1(){}, +at_:function at_(){}, +at0:function at0(){}, +or:function or(a,b,c){this.a=a +this.b=b +this.c=c}, +OE:function OE(a){this.a=a}, +acL:function acL(){}, +to:function to(a,b,c,d,e,f){var _=this +_.c=a +_.d=b +_.e=c +_.f=d +_.r=e +_.a=f}, +ZU:function ZU(a){this.a=null +this.b=a +this.c=null}, +ay0:function ay0(a){this.a=a}, +ay_:function ay_(a,b){this.a=a +this.b=b}, +XI:function XI(a,b){this.c=a +this.a=b}, +MD:function MD(a,b,c){this.c=a +this.d=b +this.a=c}, +a8E:function a8E(a){this.a=a}, +Pe:function Pe(a,b){var _=this +_.c=a +_.e=_.d=$ +_.a=b}, +af_:function af_(a){this.a=a}, +af2:function af2(a,b){this.a=a +this.b=b}, +af0:function af0(a,b){this.a=a +this.b=b}, +af1:function af1(){}, +aDj:function aDj(){}, +aDk:function aDk(){}, +aDl:function aDl(){}, +aDi:function aDi(a){this.a=a}, +aDm:function aDm(){}, +aDn:function aDn(){}, +qG:function qG(a,b){this.c=a +this.a=b}, +Aw:function Aw(a){var _=this +_.e=-1 +_.f=!1 +_.a=null +_.b=a +_.c=null}, +a77:function a77(a){this.a=a}, +a76:function a76(a){this.a=a}, +a7d:function a7d(a){this.a=a}, +a7a:function a7a(a){this.a=a}, +a79:function a79(a){this.a=a}, +a78:function a78(a,b,c){this.a=a +this.b=b +this.c=c}, +a7b:function a7b(a){this.a=a}, +a7c:function a7c(){}, +qH:function qH(a,b){this.e=a +this.a=b}, +Ax:function Ax(a){var _=this +_.f=_.e=$ +_.r=-1 +_.a=null +_.b=a +_.c=null}, +a7i:function a7i(){}, +a7h:function a7h(a){this.a=a}, +a7f:function a7f(a){this.a=a}, +a7g:function a7g(a,b){this.a=a +this.b=b}, +a7e:function a7e(a,b){this.a=a +this.b=b}, +GX:function GX(a){this.a=a}, +atn:function atn(){}, +qI:function qI(a){this.a=a}, +M9:function M9(a){this.a=null +this.b=a +this.c=null}, +qJ:function qJ(a,b,c){this.c=a +this.d=b +this.a=c}, +Ay:function Ay(a){this.a=null +this.b=a +this.c=null}, +a7l:function a7l(a){this.a=a}, +a7k:function a7k(){}, +a7j:function a7j(){}, +qK:function qK(a){this.a=a}, +Az:function Az(a){var _=this +_.d=-1 +_.a=null +_.b=a +_.c=null}, +a7p:function a7p(a){this.a=a}, +a7m:function a7m(a){this.a=a}, +a7n:function a7n(a){this.a=a}, +a7o:function a7o(a,b){this.a=a +this.b=b}, +a7s:function a7s(){}, +a7r:function a7r(){}, +a7q:function a7q(a){this.a=a}, +qL:function qL(a){this.a=a}, +qM:function qM(a,b){this.d=a +this.a=b}, +Wh:function Wh(a){var _=this +_.d=-1 +_.a=null +_.b=a +_.c=null}, +atj:function atj(){}, +atk:function atk(a){this.a=a}, +ati:function ati(){}, +atf:function atf(a){this.a=a}, +ath:function ath(){}, +atg:function atg(a){this.a=a}, +atd:function atd(a,b){this.a=a +this.b=b}, +ate:function ate(a){this.a=a}, +kR:function kR(a,b,c){this.a=a +this.b=b +this.c=c}, +I1:function I1(a,b,c,d,e,f){var _=this +_.r=a +_.w=b +_.c=c +_.d=d +_.e=e +_.a=f}, +Z_:function Z_(a,b,c){var _=this +_.CW=null +_.e=_.d=$ +_.e9$=a +_.c0$=b +_.a=null +_.b=c +_.c=null}, +aw7:function aw7(a){this.a=a}, +qN:function qN(a,b){this.c=a +this.a=b}, +Av:function Av(a){this.a=null +this.b=a +this.c=null}, +lv(a,b){return new A.PY(a,b)}, +qF(a,b){return new A.M8(a,b)}, +aGD(a,b){return new A.Rx(a,b)}, +aMS(a,b){return new A.T7(a,b)}, +lb:function lb(){}, +PY:function PY(a,b){this.a=a +this.b=b}, +M8:function M8(a,b){this.a=a +this.b=b}, +Rx:function Rx(a,b){this.a=a +this.b=b}, +T7:function T7(a,b){this.a=a +this.b=b}, +RV:function RV(a,b){this.a=a +this.b=b}, +a8F:function a8F(){}, +a8G:function a8G(){}, +a8H:function a8H(){}, +a8S:function a8S(){}, +a8X:function a8X(){}, +a8Y:function a8Y(){}, +a8Z:function a8Z(){}, +a9_:function a9_(){}, +a90:function a90(){}, +a91:function a91(){}, +a92:function a92(){}, +a8I:function a8I(){}, +a8J:function a8J(){}, +a8K:function a8K(){}, +a8L:function a8L(){}, +a8M:function a8M(){}, +a8N:function a8N(){}, +a8O:function a8O(){}, +a8P:function a8P(){}, +a8Q:function a8Q(){}, +a8R:function a8R(){}, +a8T:function a8T(){}, +a8U:function a8U(){}, +a8V:function a8V(){}, +a8W:function a8W(){}, +Ic:function Ic(a,b){this.c=a +this.a=b}, +t_:function t_(a){this.a=a}, +PZ:function PZ(a){var _=this +_.d=$ +_.a=null +_.b=a +_.c=null}, +agP:function agP(a){this.a=a}, +agO:function agO(a){this.a=a}, +t0:function t0(a){this.a=a}, +Zv:function Zv(a,b,c){var _=this +_.e=a +_.f=b +_.r=0 +_.x=$ +_.a=null +_.b=c +_.c=null}, +awF:function awF(a){this.a=a}, +awE:function awE(a){this.a=a}, +t1:function t1(a){this.a=a}, +Zw:function Zw(a){var _=this +_.e=_.d=0 +_.a=null +_.b=a +_.c=null}, +awI:function awI(a){this.a=a}, +awH:function awH(a,b){this.a=a +this.b=b}, +awJ:function awJ(a){this.a=a}, +awG:function awG(a,b){this.a=a +this.b=b}, +Ha:function Ha(a,b,c){this.c=a +this.d=b +this.a=c}, +t2:function t2(a){this.a=a}, +Id:function Id(a,b){var _=this +_.d=a +_.e=!1 +_.a=null +_.b=b +_.c=null}, +awN:function awN(a){this.a=a}, +awM:function awM(a){this.a=a}, +awO:function awO(){}, +awP:function awP(){}, +awQ:function awQ(){}, +awL:function awL(){}, +awK:function awK(){}, +t3:function t3(a,b,c,d,e,f,g,h,i,j,k){var _=this +_.c=a +_.d=b +_.e=c +_.f=d +_.r=e +_.w=f +_.x=g +_.y=h +_.z=i +_.Q=j +_.a=k}, +Ie:function Ie(a){var _=this +_.d=$ +_.e=!0 +_.f=!1 +_.a=null +_.b=a +_.c=null}, +ax9:function ax9(a){this.a=a}, +awX:function awX(a,b){this.a=a +this.b=b}, +awR:function awR(a){this.a=a}, +awZ:function awZ(a){this.a=a}, +awY:function awY(a){this.a=a}, +axa:function axa(a){this.a=a}, +awU:function awU(a){this.a=a}, +awV:function awV(a){this.a=a}, +awW:function awW(a,b){this.a=a +this.b=b}, +ax_:function ax_(){}, +ax0:function ax0(){}, +ax4:function ax4(a){this.a=a}, +ax3:function ax3(){}, +ax6:function ax6(){}, +ax8:function ax8(){}, +ax5:function ax5(){}, +ax7:function ax7(){}, +ax1:function ax1(a){this.a=a}, +awT:function awT(a,b){this.a=a +this.b=b}, +ax2:function ax2(a){this.a=a}, +awS:function awS(a,b){this.a=a +this.b=b}, +t4:function t4(a,b,c,d){var _=this +_.c=a +_.d=b +_.e=c +_.a=d}, +agQ:function agQ(){}, +b6Q(a,b,c){var s,r,q,p,o,n,m,l,k={} +k.a=b +s=a.length +if(s===0)throw A.c(A.bC('"colors" is empty.',null)) +else if(s===1)return a[0] +if(b.length!==s){k.a=A.a([],t.n) +new A.cw(a,A.S(a).h("cw<1>")).aa(0,new A.aEa(k,a))}for(s=k.a,r=s.length-1,q=0;q") +return new A.wH(A.V(new A.R(q,new A.ah5(),r),!0,r.h("af.E")),null)}, +wH:function wH(a,b){this.c=a +this.a=b}, +ah5:function ah5(){}, +ah4:function ah4(a){this.a=a}, +agX:function agX(){}, +agW:function agW(){}, +ah1:function ah1(){}, +ah2:function ah2(a,b){this.a=a +this.b=b}, +ah3:function ah3(a,b){this.a=a +this.b=b}, +agZ:function agZ(){}, +agY:function agY(){}, +ah_:function ah_(){}, +ah0:function ah0(){}, +xa:function xa(a){this.a=a}, +Ry:function Ry(a){var _=this +_.d=-1 +_.a=null +_.b=a +_.c=null}, +ajw:function ajw(a){this.a=a}, +ajv:function ajv(a,b,c){this.a=a +this.b=b +this.c=c}, +ajx:function ajx(a){this.a=a}, +xb:function xb(a){this.a=a}, +Rv:function Rv(a){var _=this +_.d=-1 +_.a=null +_.b=a +_.c=null}, +ajk:function ajk(a){this.a=a}, +ajj:function ajj(a,b,c){this.a=a +this.b=b +this.c=c}, +ajl:function ajl(a){this.a=a}, +xc:function xc(a){this.a=a}, +Rz:function Rz(a){var _=this +_.d=0 +_.a=null +_.b=a +_.c=null}, +ajz:function ajz(a){this.a=a}, +ajy:function ajy(a,b,c){this.a=a +this.b=b +this.c=c}, +ajA:function ajA(a){this.a=a}, +uF:function uF(a,b,c,d){var _=this +_.c=a +_.d=b +_.e=c +_.a=d}, +tP:function tP(a,b,c){this.c=a +this.d=b +this.a=c}, +a0m:function a0m(a){var _=this +_.d=-1 +_.e=0 +_.f=!0 +_.a=null +_.b=a +_.c=null}, +ayX:function ayX(a){this.a=a}, +ayW:function ayW(a,b){this.a=a +this.b=b}, +ayY:function ayY(a){this.a=a}, +ayV:function ayV(a,b){this.a=a +this.b=b}, +ayZ:function ayZ(a){this.a=a}, +ayU:function ayU(a){this.a=a}, +az_:function az_(a){this.a=a}, +ayT:function ayT(a,b){this.a=a +this.b=b}, +ayQ:function ayQ(a,b){this.a=a +this.b=b}, +az0:function az0(a){this.a=a}, +ayR:function ayR(a){this.a=a}, +ayS:function ayS(a,b){this.a=a +this.b=b}, +az1:function az1(a){this.a=a}, +az3:function az3(a){this.a=a}, +az2:function az2(){}, +jv:function jv(a,b,c){this.a=a +this.b=b +this.c=c}, +u3:function u3(a,b){this.c=a +this.a=b}, +T8:function T8(a){var _=this +_.r=!0 +_.a=null +_.b=a +_.c=null}, +ana:function ana(a){this.a=a}, +an9:function an9(a){this.a=a}, +anb:function anb(a){this.a=a}, +xJ:function xJ(a){this.a=a}, +a1E:function a1E(a,b){var _=this +_.f=a +_.a=null +_.b=b +_.c=null}, +aAa:function aAa(){}, +aA9:function aA9(){}, +aAc:function aAc(){}, +aAb:function aAb(){}, +aAd:function aAd(){}, +aAf:function aAf(){}, +aAe:function aAe(a){this.a=a}, +aA8:function aA8(a,b){this.a=a +this.b=b}, +vw:function vw(a,b){this.c=a +this.a=b}, +a8D:function a8D(a){this.a=a}, +kj:function kj(a,b,c,d,e,f){var _=this +_.c=a +_.d=b +_.e=c +_.f=d +_.r=e +_.a=f}, +rW:function rW(a,b,c){this.c=a +this.d=b +this.a=c}, +PT:function PT(a,b){this.c=a +this.a=b}, +agD:function agD(){}, +p0:function p0(a,b){this.a=a +this.b=b}, +aFk(a){var s +switch(a.a){case 0:s="Line" +break +case 1:s="Bar" +break +case 2:s="Pie" +break +case 3:s="Scatter" +break +case 4:s="Radar" +break +default:s=null}return s}, +hM:function hM(a,b){this.a=a +this.b=b}, +a6y:function a6y(){}, +l3:function l3(a,b){this.a=a +this.b=b}, +cv:function cv(){}, +c5(a,b,c,d,e){var s=new A.vi(0,1,a,B.BP,b,c,B.aA,B.K,new A.b5(A.a([],t.x8),t.jc),new A.b5(A.a([],t.b),t.fy)) +s.r=e.v4(s.gE1()) +s.Fy(d==null?0:d) +return s}, +aJA(a,b,c){var s=new A.vi(-1/0,1/0,a,B.BQ,null,null,B.aA,B.K,new A.b5(A.a([],t.x8),t.jc),new A.b5(A.a([],t.b),t.fy)) +s.r=c.v4(s.gE1()) +s.Fy(b) +return s}, +yH:function yH(a,b){this.a=a +this.b=b}, +LH:function LH(a,b){this.a=a +this.b=b}, +vi:function vi(a,b,c,d,e,f,g,h,i,j){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.w=_.r=null +_.x=$ +_.y=null +_.z=g +_.Q=$ +_.as=h +_.cM$=i +_.cC$=j}, +awp:function awp(a,b,c,d,e){var _=this +_.b=a +_.c=b +_.d=c +_.e=d +_.a=e}, +azE:function azE(a,b,c,d,e,f,g){var _=this +_.b=a +_.c=b +_.d=c +_.e=d +_.f=e +_.r=f +_.a=g}, +VQ:function VQ(){}, +VR:function VR(){}, +VS:function VS(){}, +xm(a){var s=new A.Eb(new A.b5(A.a([],t.x8),t.jc),new A.b5(A.a([],t.b),t.fy),0) +s.c=a +if(a==null){s.a=B.K +s.b=0}return s}, +dc(a,b,c){var s,r=new A.Bl(b,a,c) +r.Th(b.gb6(b)) +b.by() +s=b.cM$ +s.b=!0 +s.a.push(r.gTg()) +return r}, +aHd(a,b,c){var s,r,q=new A.uy(a,b,c,new A.b5(A.a([],t.x8),t.jc),new A.b5(A.a([],t.b),t.fy)) +if(J.d(a.gl(a),b.gl(b))){q.a=b +q.b=null +s=b}else{if(a.gl(a)>b.gl(b))q.c=B.a77 +else q.c=B.a76 +s=a}s.h3(q.gq2()) +s=q.gGV() +q.a.Z(0,s) +r=q.b +if(r!=null){r.by() +r=r.cC$ +r.b=!0 +r.a.push(s)}return q}, +aJB(a,b,c){return new A.Af(a,b,new A.b5(A.a([],t.x8),t.jc),new A.b5(A.a([],t.b),t.fy),0,c.h("Af<0>"))}, +VH:function VH(){}, +VI:function VI(){}, +Ag:function Ag(){}, +Eb:function Eb(a,b,c){var _=this +_.c=_.b=_.a=null +_.cM$=a +_.cC$=b +_.mT$=c}, +kw:function kw(a,b,c){this.a=a +this.cM$=b +this.mT$=c}, +Bl:function Bl(a,b,c){var _=this +_.a=a +_.b=b +_.c=c +_.d=null}, +a3s:function a3s(a,b){this.a=a +this.b=b}, +uy:function uy(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=null +_.d=c +_.f=_.e=null +_.cM$=d +_.cC$=e}, +vK:function vK(){}, +Af:function Af(a,b,c,d,e,f){var _=this +_.a=a +_.b=b +_.d=_.c=null +_.cM$=c +_.cC$=d +_.mT$=e +_.$ti=f}, +Hf:function Hf(){}, +Hg:function Hg(){}, +Hh:function Hh(){}, +Xm:function Xm(){}, +a0i:function a0i(){}, +a0j:function a0j(){}, +a0k:function a0k(){}, +a1l:function a1l(){}, +a1m:function a1m(){}, +a3p:function a3p(){}, +a3q:function a3q(){}, +a3r:function a3r(){}, +DR:function DR(){}, +hf:function hf(){}, +Ih:function Ih(){}, +EZ:function EZ(a){this.a=a}, +hW:function hW(a,b,c){this.a=a +this.b=b +this.c=c}, +UJ:function UJ(){}, +et:function et(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +Go:function Go(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e}, +mP:function mP(a){this.a=a}, +Xr:function Xr(){}, +Ae:function Ae(){}, +Ad:function Ad(){}, +qz:function qz(){}, +oi:function oi(){}, +hC(a,b,c){return new A.ar(a,b,c.h("ar<0>"))}, +hO(a){return new A.fv(a)}, +an:function an(){}, +aP:function aP(a,b,c){this.a=a +this.b=b +this.$ti=c}, +e3:function e3(a,b,c){this.a=a +this.b=b +this.$ti=c}, +ar:function ar(a,b,c){this.a=a +this.b=b +this.$ti=c}, +ES:function ES(a,b,c,d){var _=this +_.c=a +_.a=b +_.b=c +_.$ti=d}, +f4:function f4(a,b){this.a=a +this.b=b}, +TF:function TF(a,b){this.a=a +this.b=b}, +pv:function pv(a,b){this.a=a +this.b=b}, +oT:function oT(a,b){this.a=a +this.b=b}, +vM:function vM(a,b,c){this.a=a +this.b=b +this.$ti=c}, +fv:function fv(a){this.a=a}, +KA:function KA(){}, +aNL(a,b){var s=new A.GA(A.a([],b.h("q>")),A.a([],t.mz),b.h("GA<0>")) +s.a6t(a,b) +return s}, +aNM(a,b,c){return new A.ig(a,b,c.h("ig<0>"))}, +GA:function GA(a,b,c){this.a=a +this.b=b +this.$ti=c}, +ig:function ig(a,b,c){this.a=a +this.b=b +this.$ti=c}, +Za:function Za(a,b){this.a=a +this.b=b}, +a9W(a,b,c,d,e,f,g,h,i){return new A.Bf(c,h,d,e,g,f,i,b,a,null)}, +Bf:function Bf(a,b,c,d,e,f,g,h,i,j){var _=this +_.c=a +_.d=b +_.e=c +_.f=d +_.r=e +_.w=f +_.x=g +_.y=h +_.z=i +_.a=j}, +Hn:function Hn(a,b,c,d){var _=this +_.d=a +_.f=_.e=$ +_.r=!1 +_.e9$=b +_.c0$=c +_.a=null +_.b=d +_.c=null}, +aut:function aut(a,b){this.a=a +this.b=b}, +KG:function KG(){}, +r9(a,b){if(a==null)return null +return a instanceof A.dH?a.dS(b):a}, +dH:function dH(a,b,c,d,e,f,g,h,i,j,k,l){var _=this +_.b=a +_.c=b +_.d=c +_.e=d +_.f=e +_.r=f +_.w=g +_.x=h +_.y=i +_.z=j +_.Q=k +_.a=l}, +a9Y:function a9Y(a){this.a=a}, +Xb:function Xb(){}, +Xa:function Xa(){}, +a9X:function a9X(){}, +a4t:function a4t(){}, +Nl:function Nl(a,b,c){this.c=a +this.d=b +this.a=c}, +aW6(a,b){return new A.r8(a,b,null)}, +r8:function r8(a,b,c){this.c=a +this.f=b +this.a=c}, +Ho:function Ho(a){var _=this +_.d=!1 +_.a=null +_.b=a +_.c=null}, +auu:function auu(a){this.a=a}, +auv:function auv(a){this.a=a}, +aK5(a,b,c,d,e,f,g,h){return new A.Nm(g,b,h,c,e,a,d,f)}, +Nm:function Nm(a,b,c,d,e,f,g,h){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h}, +Xc:function Xc(){}, +Xd:function Xd(){}, +NE:function NE(){}, +Bk:function Bk(a,b,c){this.d=a +this.w=b +this.a=c}, +Hr:function Hr(a,b,c,d){var _=this +_.d=a +_.e=0 +_.r=_.f=$ +_.e9$=b +_.c0$=c +_.a=null +_.b=d +_.c=null}, +auF:function auF(a){this.a=a}, +auE:function auE(){}, +auD:function auD(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +Nn:function Nn(a,b,c){this.r=a +this.w=b +this.a=c}, +KH:function KH(){}, +aOf(a,b,c,d){return new A.Ye(b,d,c,a,c,null)}, +aQ1(a,b,c,d,e){var s,r,q,p,o,n=null +if(e){s=a.V7() +r=s<0.179?B.ao:B.ad +switch(r.a){case 0:q=B.AM +break +case 1:q=B.AN +break +default:q=n}p=A.aJC(d,new A.lX(n,n,n,n,q.e,q.f,q.r,q.w),t.lu)}else p=d +o=A.rc(p,new A.d3(a,n,b,n,n,n,B.aO),B.cu) +if((a.gl(a)>>>24&255)===255)return o +return A.aFm(A.aJF(o,$.W().HP(10,10,B.V)),B.a9)}, +b1y(a,b,c,d,e){var s,r +if(d instanceof A.js){if(!d.grf()){s=d.fN$ +s=s!=null&&s.length!==0}else s=!0 +if(s)d.gjO()}r=null +return null +return new A.kl(new A.bH(new A.f8(16,0,0,0),A.Cx(r,B.NU),null),b)}, +b1v(a,b,c,d){var s +if(c!=null){if(!c.grf()){s=c.fN$ +s=s!=null&&s.length!==0}else s=!0 +if(s){c.gjO() +s=!1}else s=!0}else s=!0 +if(s)return null +return new A.kl(B.a5A,b)}, +b1w(a,b,c,d,e){var s +if(d!=null){if(!d.grf()){s=d.fN$ +s=s!=null&&s.length!==0}else s=!0 +if(s){d.gjO() +s=!1}else s=!0}else s=!0 +if(s)return null +return new A.kl(new A.GW(c,d,null),b)}, +b1z(a,b,c,d,e,f){var s=f +return new A.kl(s,c)}, +b1A(a,b,c){return null}, +b1x(a,b,c,d,e){return null}, +aOn(a,b,c){var s,r=b.grH() +r=r.gv(r) +s=c.grH() +return new A.a_9(a,c,b,new A.ar(r.b,s.gv(s).b,t.Y),new A.f4(b.d,c.d),new A.Mo(b.w,c.w),null)}, +b40(a,b){var s=a.c,r=a.a,q=a.d,p=a.b,o=b.c,n=b.a,m=b.d,l=b.b +o=Math.max(s-r,o-n) +m=Math.max(q-p,m-l) +return new A.pv(new A.w(r,p,r+o,p+m),new A.w(n,l,n+o,l+m))}, +b47(a,b,c){return new A.Vk(c,!1,!0,!0,!0,null)}, +b46(a,b,c,d,e){var s,r,q=t.rA,p=q.a(d.gao()),o=q.a(e.gao()) +q=t.yW +s=q.a(p.e) +r=q.a(o.e) +switch(c.a){case 0:return A.aOn(b,s,r) +case 1:return A.aOn(b,r,s)}}, +I0:function I0(a){this.a=a}, +Ye:function Ye(a,b,c,d,e,f){var _=this +_.e=a +_.f=b +_.r=c +_.w=d +_.c=e +_.a=f}, +Bh:function Bh(a){this.a=a}, +Xe:function Xe(a){var _=this +_.d=$ +_.a=null +_.b=a +_.c=null}, +auA:function auA(a,b,c){this.a=a +this.b=b +this.c=c}, +a_C:function a_C(a,b,c){this.c=a +this.d=b +this.a=c}, +ayg:function ayg(a,b,c,d,e,f,g){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g}, +ayf:function ayf(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e}, +No:function No(a,b,c){this.f=a +this.r=b +this.a=c}, +aa_:function aa_(a,b){this.a=a +this.b=b}, +W7:function W7(a){this.a=a}, +GW:function GW(a,b,c){this.c=a +this.d=b +this.a=c}, +Kb:function Kb(a,b,c,d,e,f,g,h,i,j){var _=this +_.c=a +_.d=b +_.e=c +_.f=d +_.r=e +_.w=f +_.x=g +_.y=h +_.z=i +_.a=j}, +a_9:function a_9(a,b,c,d,e,f,g){var _=this +_.c=a +_.d=b +_.e=c +_.f=d +_.r=e +_.w=f +_.a=g}, +ayh:function ayh(a){this.a=a}, +aye:function aye(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.x=i +_.y=j +_.z=k +_.Q=l +_.as=m +_.at=n +_.ax=o +_.ay=p +_.ch=q}, +Bi:function Bi(a,b,c){this.c=a +this.d=b +this.a=c}, +Hp:function Hp(a){this.a=null +this.b=a +this.c=null}, +aW7(a){var s +if(a.gBb())return!1 +s=a.fN$ +if(s!=null&&s.length!==0)return!1 +s=a.goX() +if(s===B.fb)return!1 +a.gjO() +s=a.go +if(s.gb6(s)!==B.a7)return!1 +s=a.id +if(s.gb6(s)!==B.K)return!1 +if(a.a.cx.a)return!1 +return!0}, +aK6(a,b,c,d,e,f){var s,r,q,p,o,n,m=a.a.cx.a +a.gjO() +s=m?c:A.dc(B.Be,c,new A.mP(B.Be)) +r=$.aTG() +q=t.m +q.a(s) +p=m?d:A.dc(B.jJ,d,B.jI) +o=$.aTz() +q.a(p) +m=m?c:A.dc(B.jJ,c,null) +n=$.aSU() +return new A.Np(new A.aP(s,r,r.$ti.h("aP")),new A.aP(p,o,o.$ti.h("aP")),new A.aP(q.a(m),n,A.o(n).h("aP")),new A.yP(e,new A.aa0(a),new A.aa1(a,f),null,f.h("yP<0>")),null)}, +auw(a,b,c){var s,r,q,p,o +if(a==b)return a +if(a==null){s=b.a +if(s==null)s=b +else{r=A.S(s).h("R<1,m>") +r=new A.kT(A.V(new A.R(s,new A.aux(c),r),!0,r.h("af.E"))) +s=r}return s}if(b==null){s=a.a +if(s==null)s=a +else{r=A.S(s).h("R<1,m>") +r=new A.kT(A.V(new A.R(s,new A.auy(c),r),!0,r.h("af.E"))) +s=r}return s}s=A.a([],t.W) +for(r=b.a,q=a.a,p=0;p"))) +return new A.rx(r)}, +wb(a){return new A.rx(a)}, +aXr(a){return a}, +aKZ(a,b){if(a.r&&!0)return +if($.aFS===0||!1)A.b5J(J.f0(a.a),100,a.b) +else A.aEq().$1("Another exception was thrown: "+a.ga1S().k(0)) +$.aFS=$.aFS+1}, +aXs(a){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e=A.aY(["dart:async-patch",0,"dart:async",0,"package:stack_trace",0,"class _AssertionError",0,"class _FakeAsync",0,"class _FrameCallbackEntry",0,"class _Timer",0,"class _RawReceivePortImpl",0],t.N,t.S),d=A.b_T(J.aUQ(a,"\n")) +for(s=0,r=0;q=d.length,r0)q.push(h.a)}B.b.jr(q) +if(s===1)j.push("(elided one frame from "+B.b.gct(q)+")") +else if(s>1){l=q.length +if(l>1)q[l-1]="and "+B.b.gO(q) +l="(elided "+s +if(q.length>2)j.push(l+" frames from "+B.b.c_(q,", ")+")") +else j.push(l+" frames from "+B.b.c_(q," ")+")")}return j}, +d4(a){var s=$.jW() +if(s!=null)s.$1(a)}, +b5J(a,b,c){var s,r +A.aEq().$1(a) +s=A.a(B.d.KF(J.f0(c==null?A.aNi():A.aXr(c))).split("\n"),t.s) +r=s.length +s=J.aV0(r!==0?new A.FB(s,new A.aDA(),t.Ws):s,b) +A.aEq().$1(B.b.c_(A.aXs(s),"\n"))}, +b1i(a,b,c){return new A.Yr(c,a,!0,!0,null,b)}, +q3:function q3(){}, +w6:function w6(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){var _=this +_.f=a +_.r=b +_.w=c +_.y=d +_.z=e +_.Q=f +_.as=g +_.at=h +_.ax=!0 +_.ay=null +_.ch=i +_.CW=j +_.a=k +_.b=l +_.c=m +_.d=n +_.e=o}, +Oo:function Oo(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){var _=this +_.f=a +_.r=b +_.w=c +_.y=d +_.z=e +_.Q=f +_.as=g +_.at=h +_.ax=!0 +_.ay=null +_.ch=i +_.CW=j +_.a=k +_.b=l +_.c=m +_.d=n +_.e=o}, +Ol:function Ol(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){var _=this +_.f=a +_.r=b +_.w=c +_.y=d +_.z=e +_.Q=f +_.as=g +_.at=h +_.ax=!0 +_.ay=null +_.ch=i +_.CW=j +_.a=k +_.b=l +_.c=m +_.d=n +_.e=o}, +bG:function bG(a,b,c,d,e,f){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.f=e +_.r=f}, +acV:function acV(a){this.a=a}, +rx:function rx(a){this.a=a}, +acW:function acW(){}, +acX:function acX(){}, +acY:function acY(){}, +aDA:function aDA(){}, +Yr:function Yr(a,b,c,d,e,f){var _=this +_.f=a +_.a=b +_.b=c +_.c=d +_.d=e +_.e=f}, +Yt:function Yt(){}, +Ys:function Ys(){}, +Mk:function Mk(){}, +a7I:function a7I(a){this.a=a}, +b0M(a,b){return new A.ca(a,$.aO(),b.h("ca<0>"))}, +aj:function aj(){}, +GE:function GE(){}, +f3:function f3(a){var _=this +_.fx$=0 +_.fy$=a +_.id$=_.go$=0 +_.k1$=!1}, +a8z:function a8z(a){this.a=a}, +Iu:function Iu(a){this.a=a}, +ca:function ca(a,b,c){var _=this +_.a=a +_.fx$=0 +_.fy$=b +_.id$=_.go$=0 +_.k1$=!1 +_.$ti=c}, +aWs(a,b,c){var s=null +return A.k6("",s,b,B.bl,a,!1,s,s,B.aR,s,!1,!1,!0,c,s,t.H)}, +k6(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p){var s +if(h==null)s=k?"MISSING":null +else s=h +return new A.hP(e,!1,c,s,g,o,k,b,d,i,a,m,l,j,n,p.h("hP<0>"))}, +aFy(a,b,c){return new A.NQ(c,a,!0,!0,null,b)}, +bh(a){return B.d.lO(B.f.iv(J.D(a)&1048575,16),5,"0")}, +aWr(a,b,c,d,e,f,g){return new A.NR(b,d,"",g,a,c,!0,!0,null,f)}, +Bs:function Bs(a,b){this.a=a +this.b=b}, +lf:function lf(a,b){this.a=a +this.b=b}, +ayl:function ayl(){}, +f6:function f6(){}, +hP:function hP(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p){var _=this +_.f=a +_.r=b +_.w=c +_.y=d +_.z=e +_.Q=f +_.as=g +_.at=h +_.ax=!0 +_.ay=null +_.ch=i +_.CW=j +_.a=k +_.b=l +_.c=m +_.d=n +_.e=o +_.$ti=p}, +rg:function rg(){}, +NQ:function NQ(a,b,c,d,e,f){var _=this +_.f=a +_.a=b +_.b=c +_.c=d +_.d=e +_.e=f}, +aq:function aq(){}, +NP:function NP(){}, +k5:function k5(){}, +NR:function NR(a,b,c,d,e,f,g,h,i,j){var _=this +_.f=a +_.r=b +_.x=c +_.y=d +_.z=e +_.a=f +_.b=g +_.c=h +_.d=i +_.e=j}, +XC:function XC(){}, +ho:function ho(){}, +hq:function hq(){}, +pU:function pU(){}, +dN:function dN(a,b){this.a=a +this.$ti=b}, +aHC:function aHC(a){this.$ti=a}, +jp:function jp(){}, +CV:function CV(){}, +DD(a){return new A.b5(A.a([],a.h("q<0>")),a.h("b5<0>"))}, +b5:function b5(a,b){var _=this +_.a=a +_.b=!1 +_.c=$ +_.$ti=b}, +Co:function Co(a,b){this.a=a +this.$ti=b}, +b42(a){return A.bf(a,null,!1,t.X)}, +x9:function x9(a,b){this.a=a +this.$ti=b}, +aBG:function aBG(){}, +YB:function YB(a){this.a=a}, +q2:function q2(a,b){this.a=a +this.b=b}, +I_:function I_(a,b){this.a=a +this.b=b}, +eh:function eh(a,b){this.a=a +this.b=b}, +asa(a){var s=new DataView(new ArrayBuffer(8)),r=A.dD(s.buffer,0,null) +return new A.as9(new Uint8Array(a),s,r)}, +as9:function as9(a,b,c){var _=this +_.a=a +_.b=0 +_.c=!1 +_.d=b +_.e=c}, +El:function El(a){this.a=a +this.b=0}, +b_T(a){var s=t.ZK +return A.V(new A.dG(new A.hr(new A.ba(A.a(B.d.fb(a).split("\n"),t.s),new A.ap8(),t.Hd),A.b7V(),t.C9),s),!0,s.h("n.E"))}, +b_S(a){var s,r,q="",p=$.aSr().IK(a) +if(p==null)return null +s=A.a(p.b[1].split("."),t.s) +r=s.length>1?B.b.gL(s):q +return new A.kB(a,-1,q,q,q,-1,-1,r,s.length>1?A.eD(s,1,null,t.N).c_(0,"."):B.b.gct(s))}, +b_U(a){var s,r,q,p,o,n,m,l,k,j,i=null,h="" +if(a==="")return B.Yo +else if(a==="...")return B.Yn +if(!B.d.bz(a,"#"))return A.b_S(a) +s=A.c3("^#(\\d+) +(.+) \\((.+?):?(\\d+){0,1}:?(\\d+){0,1}\\)$",!0,!1).IK(a).b +r=s[2] +r.toString +q=A.is(r,".","") +if(B.d.bz(q,"new")){p=q.split(" ").length>1?q.split(" ")[1]:h +if(B.d.p(p,".")){o=p.split(".") +p=o[0] +q=o[1]}else q=""}else if(B.d.p(q,".")){o=q.split(".") +p=o[0] +q=o[1]}else p="" +r=s[3] +r.toString +n=A.eW(r,0,i) +m=n.gcU(n) +if(n.ge5()==="dart"||n.ge5()==="package"){l=n.grB()[0] +m=B.d.nn(n.gcU(n),A.h(n.grB()[0])+"/","")}else l=h +r=s[1] +r.toString +r=A.ir(r,i) +k=n.ge5() +j=s[4] +if(j==null)j=-1 +else{j=j +j.toString +j=A.ir(j,i)}s=s[5] +if(s==null)s=-1 +else{s=s +s.toString +s=A.ir(s,i)}return new A.kB(a,r,k,l,m,j,s,p,q)}, +kB:function kB(a,b,c,d,e,f,g,h,i){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.x=i}, +ap8:function ap8(){}, +bK:function bK(a,b){this.a=a +this.$ti=b}, +apR:function apR(a){this.a=a}, +P1:function P1(a,b){this.a=a +this.b=b}, +dA:function dA(){}, +wk:function wk(a,b,c){this.a=a +this.b=b +this.c=c}, +yZ:function yZ(a){var _=this +_.a=a +_.b=!0 +_.d=_.c=!1 +_.e=null}, +avS:function avS(a){this.a=a}, +adJ:function adJ(a){this.a=a}, +adL:function adL(a,b){this.a=a +this.b=b}, +adK:function adK(a,b,c){this.a=a +this.b=b +this.c=c}, +aXq(a,b,c,d,e,f,g){return new A.C9(c,g,f,a,e,!1)}, +azG:function azG(a,b,c,d,e,f,g,h){var _=this +_.a=a +_.b=!1 +_.c=b +_.d=c +_.e=d +_.f=e +_.r=f +_.w=g +_.x=h +_.y=null}, +wl:function wl(){}, +adO:function adO(a){this.a=a}, +adP:function adP(a,b){this.a=a +this.b=b}, +C9:function C9(a,b,c,d,e,f){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.f=e +_.r=f}, +aPZ(a,b){switch(b.a){case 1:case 4:return a +case 0:case 2:case 3:return a===0?1:a +case 5:return a===0?1:a}}, +aZ6(a,b){var s=A.S(a) +return new A.dG(new A.hr(new A.ba(a,new A.ajU(),s.h("ba<1>")),new A.ajV(b),s.h("hr<1,bg?>")),t.FI)}, +ajU:function ajU(){}, +ajV:function ajV(a){this.a=a}, +mI:function mI(a,b){this.a=a +this.b=b}, +li:function li(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +lj:function lj(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e}, +iB:function iB(a,b){this.a=a +this.b=b}, +ajW(a,b){var s,r +if(a==null)return b +s=new A.eG(new Float64Array(3)) +s.l7(b.a,b.b,0) +r=a.BZ(s).a +return new A.k(r[0],r[1])}, +xg(a,b,c,d){if(a==null)return c +if(b==null)b=A.ajW(a,d) +return b.Y(0,A.ajW(a,d.Y(0,c)))}, +aGG(a){var s,r,q=new Float64Array(4),p=new A.kI(q) +p.xq(0,0,1,0) +s=new Float64Array(16) +r=new A.bd(s) +r.aW(a) +s[11]=q[3] +s[10]=q[2] +s[9]=q[1] +s[8]=q[0] +r.Dg(2,p) +return r}, +aZ3(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){return new A.tD(o,d,n,0,e,a,h,B.e,0,!1,!1,0,j,i,b,c,0,0,0,l,k,g,m,0,!1,null,null)}, +aZd(a,b,c,d,e,f,g,h,i,j,k,l){return new A.tI(l,c,k,0,d,a,f,B.e,0,!1,!1,0,h,g,0,b,0,0,0,j,i,0,0,0,!1,null,null)}, +aZ8(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1){return new A.nj(a1,f,a0,0,g,c,j,b,a,!1,!1,0,l,k,d,e,q,m,p,o,n,i,s,0,r,null,null)}, +aZ5(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3){return new A.po(a3,g,a2,k,h,c,l,b,a,f,!1,0,n,m,d,e,s,o,r,q,p,j,a1,0,a0,null,null)}, +aZ7(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3){return new A.pp(a3,g,a2,k,h,c,l,b,a,f,!1,0,n,m,d,e,s,o,r,q,p,j,a1,0,a0,null,null)}, +aZ4(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0){return new A.ni(a0,d,s,h,e,b,i,B.e,a,!0,!1,j,l,k,0,c,q,m,p,o,n,g,r,0,!1,null,null)}, +aZ9(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3){return new A.tF(a3,e,a2,j,f,c,k,b,a,!0,!1,l,n,m,0,d,s,o,r,q,p,h,a1,i,a0,null,null)}, +aZh(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1){return new A.tL(a1,e,a0,i,f,b,j,B.e,a,!1,!1,k,m,l,c,d,r,n,q,p,o,h,s,0,!1,null,null)}, +aZf(a,b,c,d,e,f,g){return new A.tJ(e,g,b,f,0,c,a,d,B.e,0,!1,!1,1,1,1,0,0,0,0,0,0,0,0,0,0,!1,null,null)}, +aZg(a,b,c,d,e,f){return new A.tK(f,b,e,0,c,a,d,B.e,0,!1,!1,1,1,1,0,0,0,0,0,0,0,0,0,0,!1,null,null)}, +aZe(a,b,c,d,e,f,g){return new A.RJ(e,g,b,f,0,c,a,d,B.e,0,!1,!1,1,1,1,0,0,0,0,0,0,0,0,0,0,!1,null,null)}, +aZb(a,b,c,d,e,f,g){return new A.nk(g,b,f,c,B.b6,a,d,B.e,0,!1,!1,1,1,1,0,0,0,0,0,0,0,0,0,0,e,null,null)}, +aZc(a,b,c,d,e,f,g,h,i,j,k){return new A.tH(c,d,h,g,k,b,j,e,B.b6,a,f,B.e,0,!1,!1,1,1,1,0,0,0,0,0,0,0,0,0,0,i,null,null)}, +aZa(a,b,c,d,e,f,g){return new A.tG(g,b,f,c,B.b6,a,d,B.e,0,!1,!1,1,1,1,0,0,0,0,0,0,0,0,0,0,e,null,null)}, +aMq(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0){return new A.tE(a0,e,s,i,f,b,j,B.e,a,!1,!1,0,l,k,c,d,q,m,p,o,n,h,r,0,!1,null,null)}, +qq(a,b){var s +switch(a.a){case 1:return 1 +case 2:case 3:case 5:case 0:case 4:s=b==null?null:b.a +return s==null?18:s}}, +aIg(a,b){var s +switch(a.a){case 1:return 2 +case 2:case 3:case 5:case 0:case 4:if(b==null)s=null +else{s=b.a +s=s!=null?s*2:null}return s==null?36:s}}, +bg:function bg(){}, +ej:function ej(){}, +VB:function VB(){}, +a3z:function a3z(){}, +WR:function WR(){}, +tD:function tD(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4,a5,a6,a7){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.x=i +_.y=j +_.z=k +_.Q=l +_.as=m +_.at=n +_.ax=o +_.ay=p +_.ch=q +_.CW=r +_.cx=s +_.cy=a0 +_.db=a1 +_.dx=a2 +_.dy=a3 +_.fr=a4 +_.fx=a5 +_.fy=a6 +_.go=a7}, +a3v:function a3v(a,b){var _=this +_.c=a +_.d=b +_.b=_.a=$}, +X0:function X0(){}, +tI:function tI(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4,a5,a6,a7){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.x=i +_.y=j +_.z=k +_.Q=l +_.as=m +_.at=n +_.ax=o +_.ay=p +_.ch=q +_.CW=r +_.cx=s +_.cy=a0 +_.db=a1 +_.dx=a2 +_.dy=a3 +_.fr=a4 +_.fx=a5 +_.fy=a6 +_.go=a7}, +a3G:function a3G(a,b){var _=this +_.c=a +_.d=b +_.b=_.a=$}, +WW:function WW(){}, +nj:function nj(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4,a5,a6,a7){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.x=i +_.y=j +_.z=k +_.Q=l +_.as=m +_.at=n +_.ax=o +_.ay=p +_.ch=q +_.CW=r +_.cx=s +_.cy=a0 +_.db=a1 +_.dx=a2 +_.dy=a3 +_.fr=a4 +_.fx=a5 +_.fy=a6 +_.go=a7}, +a3B:function a3B(a,b){var _=this +_.c=a +_.d=b +_.b=_.a=$}, +WU:function WU(){}, +po:function po(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4,a5,a6,a7){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.x=i +_.y=j +_.z=k +_.Q=l +_.as=m +_.at=n +_.ax=o +_.ay=p +_.ch=q +_.CW=r +_.cx=s +_.cy=a0 +_.db=a1 +_.dx=a2 +_.dy=a3 +_.fr=a4 +_.fx=a5 +_.fy=a6 +_.go=a7}, +a3y:function a3y(a,b){var _=this +_.c=a +_.d=b +_.b=_.a=$}, +WV:function WV(){}, +pp:function pp(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4,a5,a6,a7){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.x=i +_.y=j +_.z=k +_.Q=l +_.as=m +_.at=n +_.ax=o +_.ay=p +_.ch=q +_.CW=r +_.cx=s +_.cy=a0 +_.db=a1 +_.dx=a2 +_.dy=a3 +_.fr=a4 +_.fx=a5 +_.fy=a6 +_.go=a7}, +a3A:function a3A(a,b){var _=this +_.c=a +_.d=b +_.b=_.a=$}, +WT:function WT(){}, +ni:function ni(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4,a5,a6,a7){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.x=i +_.y=j +_.z=k +_.Q=l +_.as=m +_.at=n +_.ax=o +_.ay=p +_.ch=q +_.CW=r +_.cx=s +_.cy=a0 +_.db=a1 +_.dx=a2 +_.dy=a3 +_.fr=a4 +_.fx=a5 +_.fy=a6 +_.go=a7}, +a3x:function a3x(a,b){var _=this +_.c=a +_.d=b +_.b=_.a=$}, +WX:function WX(){}, +tF:function tF(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4,a5,a6,a7){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.x=i +_.y=j +_.z=k +_.Q=l +_.as=m +_.at=n +_.ax=o +_.ay=p +_.ch=q +_.CW=r +_.cx=s +_.cy=a0 +_.db=a1 +_.dx=a2 +_.dy=a3 +_.fr=a4 +_.fx=a5 +_.fy=a6 +_.go=a7}, +a3C:function a3C(a,b){var _=this +_.c=a +_.d=b +_.b=_.a=$}, +X4:function X4(){}, +tL:function tL(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4,a5,a6,a7){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.x=i +_.y=j +_.z=k +_.Q=l +_.as=m +_.at=n +_.ax=o +_.ay=p +_.ch=q +_.CW=r +_.cx=s +_.cy=a0 +_.db=a1 +_.dx=a2 +_.dy=a3 +_.fr=a4 +_.fx=a5 +_.fy=a6 +_.go=a7}, +a3K:function a3K(a,b){var _=this +_.c=a +_.d=b +_.b=_.a=$}, +fV:function fV(){}, +X2:function X2(){}, +tJ:function tJ(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4,a5,a6,a7,a8){var _=this +_.B=a +_.a=b +_.b=c +_.c=d +_.d=e +_.e=f +_.f=g +_.r=h +_.w=i +_.x=j +_.y=k +_.z=l +_.Q=m +_.as=n +_.at=o +_.ax=p +_.ay=q +_.ch=r +_.CW=s +_.cx=a0 +_.cy=a1 +_.db=a2 +_.dx=a3 +_.dy=a4 +_.fr=a5 +_.fx=a6 +_.fy=a7 +_.go=a8}, +a3I:function a3I(a,b){var _=this +_.c=a +_.d=b +_.b=_.a=$}, +X3:function X3(){}, +tK:function tK(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4,a5,a6,a7){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.x=i +_.y=j +_.z=k +_.Q=l +_.as=m +_.at=n +_.ax=o +_.ay=p +_.ch=q +_.CW=r +_.cx=s +_.cy=a0 +_.db=a1 +_.dx=a2 +_.dy=a3 +_.fr=a4 +_.fx=a5 +_.fy=a6 +_.go=a7}, +a3J:function a3J(a,b){var _=this +_.c=a +_.d=b +_.b=_.a=$}, +X1:function X1(){}, +RJ:function RJ(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4,a5,a6,a7,a8){var _=this +_.B=a +_.a=b +_.b=c +_.c=d +_.d=e +_.e=f +_.f=g +_.r=h +_.w=i +_.x=j +_.y=k +_.z=l +_.Q=m +_.as=n +_.at=o +_.ax=p +_.ay=q +_.ch=r +_.CW=s +_.cx=a0 +_.cy=a1 +_.db=a2 +_.dx=a3 +_.dy=a4 +_.fr=a5 +_.fx=a6 +_.fy=a7 +_.go=a8}, +a3H:function a3H(a,b){var _=this +_.c=a +_.d=b +_.b=_.a=$}, +WZ:function WZ(){}, +nk:function nk(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4,a5,a6,a7){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.x=i +_.y=j +_.z=k +_.Q=l +_.as=m +_.at=n +_.ax=o +_.ay=p +_.ch=q +_.CW=r +_.cx=s +_.cy=a0 +_.db=a1 +_.dx=a2 +_.dy=a3 +_.fr=a4 +_.fx=a5 +_.fy=a6 +_.go=a7}, +a3E:function a3E(a,b){var _=this +_.c=a +_.d=b +_.b=_.a=$}, +X_:function X_(){}, +tH:function tH(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,b0,b1){var _=this +_.id=a +_.k1=b +_.k2=c +_.k3=d +_.a=e +_.b=f +_.c=g +_.d=h +_.e=i +_.f=j +_.r=k +_.w=l +_.x=m +_.y=n +_.z=o +_.Q=p +_.as=q +_.at=r +_.ax=s +_.ay=a0 +_.ch=a1 +_.CW=a2 +_.cx=a3 +_.cy=a4 +_.db=a5 +_.dx=a6 +_.dy=a7 +_.fr=a8 +_.fx=a9 +_.fy=b0 +_.go=b1}, +a3F:function a3F(a,b){var _=this +_.d=_.c=$ +_.e=a +_.f=b +_.b=_.a=$}, +WY:function WY(){}, +tG:function tG(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4,a5,a6,a7){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.x=i +_.y=j +_.z=k +_.Q=l +_.as=m +_.at=n +_.ax=o +_.ay=p +_.ch=q +_.CW=r +_.cx=s +_.cy=a0 +_.db=a1 +_.dx=a2 +_.dy=a3 +_.fr=a4 +_.fx=a5 +_.fy=a6 +_.go=a7}, +a3D:function a3D(a,b){var _=this +_.c=a +_.d=b +_.b=_.a=$}, +WS:function WS(){}, +tE:function tE(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4,a5,a6,a7){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.x=i +_.y=j +_.z=k +_.Q=l +_.as=m +_.at=n +_.ax=o +_.ay=p +_.ch=q +_.CW=r +_.cx=s +_.cy=a0 +_.db=a1 +_.dx=a2 +_.dy=a3 +_.fr=a4 +_.fx=a5 +_.fy=a6 +_.go=a7}, +a3w:function a3w(a,b){var _=this +_.c=a +_.d=b +_.b=_.a=$}, +a_L:function a_L(){}, +a_M:function a_M(){}, +a_N:function a_N(){}, +a_O:function a_O(){}, +a_P:function a_P(){}, +a_Q:function a_Q(){}, +a_R:function a_R(){}, +a_S:function a_S(){}, +a_T:function a_T(){}, +a_U:function a_U(){}, +a_V:function a_V(){}, +a_W:function a_W(){}, +a_X:function a_X(){}, +a_Y:function a_Y(){}, +a_Z:function a_Z(){}, +a0_:function a0_(){}, +a00:function a00(){}, +a01:function a01(){}, +a02:function a02(){}, +a03:function a03(){}, +a04:function a04(){}, +a05:function a05(){}, +a06:function a06(){}, +a07:function a07(){}, +a08:function a08(){}, +a09:function a09(){}, +a0a:function a0a(){}, +a0b:function a0b(){}, +a0c:function a0c(){}, +a0d:function a0d(){}, +a0e:function a0e(){}, +a58:function a58(){}, +a59:function a59(){}, +a5a:function a5a(){}, +a5b:function a5b(){}, +a5c:function a5c(){}, +a5d:function a5d(){}, +a5e:function a5e(){}, +a5f:function a5f(){}, +a5g:function a5g(){}, +a5h:function a5h(){}, +a5i:function a5i(){}, +a5j:function a5j(){}, +a5k:function a5k(){}, +a5l:function a5l(){}, +a5m:function a5m(){}, +a5n:function a5n(){}, +a5o:function a5o(){}, +aL5(a,b){var s=t.S,r=A.ds(s) +return new A.ke(B.mq,A.A(s,t.SP),r,a,b,A.Lm(),A.A(s,t.C))}, +aL6(a,b,c){var s=(c-a)/(b-a) +return!isNaN(s)?A.O(s,0,1):s}, +uN:function uN(a,b){this.a=a +this.b=b}, +rC:function rC(a){this.a=a}, +ke:function ke(a,b,c,d,e,f,g){var _=this +_.ch=_.ay=_.ax=_.at=null +_.dx=_.db=$ +_.dy=a +_.f=b +_.r=c +_.w=null +_.a=d +_.b=null +_.c=e +_.d=f +_.e=g}, +adu:function adu(a,b){this.a=a +this.b=b}, +ads:function ads(a){this.a=a}, +adt:function adt(a){this.a=a}, +NO:function NO(a){this.a=a}, +aeY(){var s=A.a([],t.om),r=new A.bd(new Float64Array(16)) +r.de() +return new A.mT(s,A.a([r],t.rE),A.a([],t.cR))}, +iI:function iI(a,b){this.a=a +this.b=null +this.$ti=b}, +zD:function zD(){}, +Is:function Is(a){this.a=a}, +zg:function zg(a){this.a=a}, +mT:function mT(a,b,c){this.a=a +this.b=b +this.c=c}, +Q5(a,b,c){var s=b==null?B.cU:b,r=t.S,q=A.ds(r),p=A.aQX() +return new A.i0(s,null,B.cw,A.A(r,t.SP),q,a,c,p,A.A(r,t.C))}, +aYg(a){return a===1||a===2||a===4}, +wN:function wN(a,b){this.a=a +this.b=b}, +D4:function D4(a,b,c){this.a=a +this.b=b +this.c=c}, +wM:function wM(a,b){this.b=a +this.c=b}, +i0:function i0(a,b,c,d,e,f,g,h,i){var _=this +_.k2=!1 +_.bt=_.bZ=_.bq=_.aJ=_.aM=_.bG=_.aL=_.y2=_.y1=_.xr=_.x2=_.x1=_.to=_.ry=_.rx=_.RG=_.R8=_.p4=_.p3=_.p2=_.p1=_.ok=_.k4=_.k3=null +_.at=a +_.ay=b +_.ch=c +_.cx=_.CW=null +_.cy=!1 +_.db=null +_.f=d +_.r=e +_.w=null +_.a=f +_.b=null +_.c=g +_.d=h +_.e=i}, +ahf:function ahf(a,b){this.a=a +this.b=b}, +ahe:function ahe(a,b){this.a=a +this.b=b}, +ahd:function ahd(a,b){this.a=a +this.b=b}, +o1:function o1(a,b,c){this.a=a +this.b=b +this.c=c}, +aHv:function aHv(a,b){this.a=a +this.b=b}, +ak1:function ak1(a){this.a=a +this.b=$}, +ak2:function ak2(){}, +PS:function PS(a,b,c){this.a=a +this.b=b +this.c=c}, +aWU(a){var s=a.gcN(a) +$.mp() +return new A.kJ(s,new A.lT(),A.bf(20,null,!1,t.av))}, +aWV(a){return a===1}, +aNY(a,b){var s=t.S,r=A.ds(s),q=A.aIy() +return new A.kK(B.af,A.aIx(),B.dp,A.A(s,t.GY),A.aS(s),A.A(s,t.SP),r,a,b,q,A.A(s,t.C))}, +af3(a,b){var s=t.S,r=A.ds(s),q=A.aIy() +return new A.kh(B.af,A.aIx(),B.dp,A.A(s,t.GY),A.aS(s),A.A(s,t.SP),r,a,b,q,A.A(s,t.C))}, +aGy(a,b){var s=t.S,r=A.ds(s),q=A.aIy() +return new A.ks(B.af,A.aIx(),B.dp,A.A(s,t.GY),A.aS(s),A.A(s,t.SP),r,a,b,q,A.A(s,t.C))}, +HF:function HF(a,b){this.a=a +this.b=b}, +BE:function BE(){}, +aaU:function aaU(a,b){this.a=a +this.b=b}, +aaZ:function aaZ(a,b){this.a=a +this.b=b}, +ab_:function ab_(a,b){this.a=a +this.b=b}, +aaV:function aaV(){}, +aaW:function aaW(a,b){this.a=a +this.b=b}, +aaX:function aaX(a){this.a=a}, +aaY:function aaY(a,b){this.a=a +this.b=b}, +kK:function kK(a,b,c,d,e,f,g,h,i,j,k){var _=this +_.at=a +_.dx=_.db=_.cy=_.cx=_.CW=_.ch=_.ay=_.ax=null +_.dy=!1 +_.fr=b +_.fx=c +_.go=_.fy=$ +_.k2=_.k1=_.id=null +_.k3=$ +_.k4=!1 +_.ok=d +_.p1=e +_.f=f +_.r=g +_.w=null +_.a=h +_.b=null +_.c=i +_.d=j +_.e=k}, +kh:function kh(a,b,c,d,e,f,g,h,i,j,k){var _=this +_.at=a +_.dx=_.db=_.cy=_.cx=_.CW=_.ch=_.ay=_.ax=null +_.dy=!1 +_.fr=b +_.fx=c +_.go=_.fy=$ +_.k2=_.k1=_.id=null +_.k3=$ +_.k4=!1 +_.ok=d +_.p1=e +_.f=f +_.r=g +_.w=null +_.a=h +_.b=null +_.c=i +_.d=j +_.e=k}, +ks:function ks(a,b,c,d,e,f,g,h,i,j,k){var _=this +_.at=a +_.dx=_.db=_.cy=_.cx=_.CW=_.ch=_.ay=_.ax=null +_.dy=!1 +_.fr=b +_.fx=c +_.go=_.fy=$ +_.k2=_.k1=_.id=null +_.k3=$ +_.k4=!1 +_.ok=d +_.p1=e +_.f=f +_.r=g +_.w=null +_.a=h +_.b=null +_.c=i +_.d=j +_.e=k}, +aWT(a){return a===1}, +X6:function X6(){this.a=!1}, +zz:function zz(a,b,c,d,e){var _=this +_.b=a +_.c=b +_.d=c +_.e=d +_.f=e +_.r=!1}, +k9:function k9(a,b,c,d,e){var _=this +_.y=_.x=_.w=_.r=_.f=null +_.z=a +_.a=b +_.b=null +_.c=c +_.d=d +_.e=e}, +ajX:function ajX(a,b){this.a=a +this.b=b}, +ajZ:function ajZ(){}, +ajY:function ajY(a,b,c){this.a=a +this.b=b +this.c=c}, +ak_:function ak_(){this.b=this.a=null}, +aXC(a){return!0}, +O1:function O1(a,b){this.a=a +this.b=b}, +dq:function dq(){}, +DG:function DG(){}, +Ci:function Ci(a,b){this.a=a +this.b=b}, +xj:function xj(){}, +ak7:function ak7(a,b){this.a=a +this.b=b}, +fU:function fU(a,b){this.a=a +this.b=b}, +YE:function YE(){}, +yf(a,b){var s=t.S,r=A.ds(s) +return new A.ic(B.aD,18,B.cw,A.A(s,t.SP),r,a,b,A.Lm(),A.A(s,t.C))}, +ye:function ye(a,b){this.a=a +this.c=b}, +pM:function pM(a){this.b=a}, +Mj:function Mj(){}, +ic:function ic(a,b,c,d,e,f,g,h,i){var _=this +_.aH=_.aq=_.X=_.a9=_.F=_.B=_.bt=_.bZ=_.bq=_.aJ=_.aM=null +_.k3=_.k2=!1 +_.ok=_.k4=null +_.at=a +_.ay=b +_.ch=c +_.cx=_.CW=null +_.cy=!1 +_.db=null +_.f=d +_.r=e +_.w=null +_.a=f +_.b=null +_.c=g +_.d=h +_.e=i}, +apW:function apW(a,b){this.a=a +this.b=b}, +apX:function apX(a,b){this.a=a +this.b=b}, +apY:function apY(a,b){this.a=a +this.b=b}, +apZ:function apZ(a,b){this.a=a +this.b=b}, +aq_:function aq_(a){this.a=a}, +HG:function HG(a,b){this.a=a +this.b=b}, +FZ:function FZ(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +G1:function G1(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +G0:function G0(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e}, +G2:function G2(a,b,c,d,e,f,g,h){var _=this +_.a=a +_.b=b +_.d=c +_.e=d +_.f=e +_.r=f +_.w=g +_.x=h}, +G_:function G_(a,b){this.b=a +this.c=b}, +JX:function JX(){}, +AC:function AC(){}, +a7D:function a7D(a){this.a=a}, +a7E:function a7E(a,b){this.a=a +this.b=b}, +a7B:function a7B(a,b){this.a=a +this.b=b}, +a7C:function a7C(a,b){this.a=a +this.b=b}, +a7z:function a7z(a,b){this.a=a +this.b=b}, +a7A:function a7A(a,b){this.a=a +this.b=b}, +a7y:function a7y(a,b){this.a=a +this.b=b}, +lY:function lY(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r){var _=this +_.at=a +_.dx=_.db=_.cy=_.cx=_.CW=_.ch=null +_.fx=_.fr=_.dy=!1 +_.go=_.fy=null +_.k1=b +_.k2=null +_.ok=_.k4=_.k3=$ +_.p3=_.p2=_.p1=null +_.p4=c +_.lz$=d +_.r4$=e +_.kA$=f +_.AE$=g +_.vw$=h +_.or$=i +_.vx$=j +_.AF$=k +_.AG$=l +_.f=m +_.r=n +_.w=null +_.a=o +_.b=null +_.c=p +_.d=q +_.e=r}, +lZ:function lZ(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r){var _=this +_.at=a +_.dx=_.db=_.cy=_.cx=_.CW=_.ch=null +_.fx=_.fr=_.dy=!1 +_.go=_.fy=null +_.k1=b +_.k2=null +_.ok=_.k4=_.k3=$ +_.p3=_.p2=_.p1=null +_.p4=c +_.lz$=d +_.r4$=e +_.kA$=f +_.AE$=g +_.vw$=h +_.or$=i +_.vx$=j +_.AF$=k +_.AG$=l +_.f=m +_.r=n +_.w=null +_.a=o +_.b=null +_.c=p +_.d=q +_.e=r}, +GZ:function GZ(){}, +a2O:function a2O(){}, +a2P:function a2P(){}, +a2Q:function a2Q(){}, +a2R:function a2R(){}, +a2S:function a2S(){}, +WM:function WM(a,b){this.a=a +this.b=b}, +uI:function uI(a,b,c){var _=this +_.a=a +_.b=b +_.c=c +_.d=!1 +_.f=_.e=null}, +adM:function adM(a){this.a=a}, +adN:function adN(a,b){this.a=a +this.b=b}, +aXN(a){var s=t.av,r=A.bf(20,null,!1,s) +$.mp() +return new A.rK(r,a,new A.lT(),A.bf(20,null,!1,s))}, +jL:function jL(a){this.a=a}, +pW:function pW(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +IO:function IO(a,b){this.a=a +this.b=b}, +kJ:function kJ(a,b,c){var _=this +_.a=a +_.b=b +_.c=c +_.d=0}, +rK:function rK(a,b,c,d){var _=this +_.e=a +_.a=b +_.b=c +_.c=d +_.d=0}, +wO:function wO(a,b,c,d){var _=this +_.e=a +_.a=b +_.b=c +_.c=d +_.d=0}, +VC:function VC(){}, +asA:function asA(a,b){this.a=a +this.b=b}, +yG:function yG(a,b,c,d){var _=this +_.c=a +_.d=b +_.e=c +_.a=d}, +M1:function M1(a){this.a=a}, +a6Q:function a6Q(){}, +a6R:function a6R(){}, +a6S:function a6S(){}, +M_:function M_(a,b,c,d){var _=this +_.c=a +_.d=b +_.f=c +_.a=d}, +O6:function O6(a){this.a=a}, +ab3:function ab3(){}, +ab4:function ab4(){}, +ab5:function ab5(){}, +O5:function O5(a,b,c,d){var _=this +_.c=a +_.d=b +_.f=c +_.a=d}, +Oc:function Oc(a){this.a=a}, +ac2:function ac2(){}, +ac3:function ac3(){}, +ac4:function ac4(){}, +Ob:function Ob(a,b,c,d){var _=this +_.c=a +_.d=b +_.f=c +_.a=d}, +aV7(a,b,c){var s,r,q,p,o=null,n=a==null +if(n&&b==null)return o +s=c<0.5 +if(s)r=n?o:a.a +else r=b==null?o:b.a +if(s)q=n?o:a.b +else q=b==null?o:b.b +if(s)p=n?o:a.c +else p=b==null?o:b.c +if(s)n=n?o:a.d +else n=b==null?o:b.d +return new A.vf(r,q,p,n)}, +vf:function vf(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +VE:function VE(){}, +aF8(a,b){var s="Search Web" +switch(A.ak(a).r.a){case 2:case 4:return A.aK8(a,b) +case 0:case 1:case 3:case 5:A.n7(a,B.ck,t.c4).toString +switch(b.b.a){case 0:return"Cut" +case 1:return"Copy" +case 2:return"Paste" +case 3:return"Select all" +case 4:return"Delete".toUpperCase() +case 5:return"Look Up" +case 6:return s +case 7:return s +case 8:return"Scan text" +case 9:return""}break}}, +aV9(a,b){var s,r,q,p,o,n,m,l=null +switch(A.ak(a).r.a){case 2:return new A.R(b,new A.a6k(),A.S(b).h("R<1,i>")) +case 1:case 0:s=A.a([],t.p) +for(r=0;q=b.length,r")) +case 4:return new A.R(b,new A.a6m(a),A.S(b).h("R<1,i>"))}}, +LD:function LD(a,b,c){this.c=a +this.e=b +this.a=c}, +a6k:function a6k(){}, +a6l:function a6l(a){this.a=a}, +a6m:function a6m(a){this.a=a}, +aYj(){return new A.oL(new A.ahr(),A.A(t.K,t.Qu))}, +ar9:function ar9(a,b){this.a=a +this.b=b}, +wR:function wR(a,b,c,d){var _=this +_.ch=a +_.cx=b +_.db=c +_.a=d}, +ahr:function ahr(){}, +ahv:function ahv(){}, +Im:function Im(a){var _=this +_.d=$ +_.a=null +_.b=a +_.c=null}, +axE:function axE(){}, +aJD(a,b,c){return new A.Ak(c,b,a,new A.a0g(null,null,1/0,56),null)}, +aVe(a,b){var s=A.ak(a).RG.Q +if(s==null)s=56 +return s+0}, +aBx:function aBx(a){this.b=a}, +a0g:function a0g(a,b,c,d){var _=this +_.e=a +_.f=b +_.a=c +_.b=d}, +Ak:function Ak(a,b,c,d,e){var _=this +_.e=a +_.x=b +_.ax=c +_.fx=d +_.a=e}, +a6q:function a6q(a,b){this.a=a +this.b=b}, +GQ:function GQ(a){var _=this +_.d=null +_.e=!1 +_.a=null +_.b=a +_.c=null}, +asZ:function asZ(){}, +VV:function VV(a,b){this.c=a +this.a=b}, +a0N:function a0N(a,b,c,d){var _=this +_.A=null +_.a1=a +_.al=b +_.fr$=c +_.fy=_.fx=null +_.go=!1 +_.k1=_.id=null +_.k2=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=d +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +asY:function asY(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p){var _=this +_.ay=a +_.cx=_.CW=_.ch=$ +_.a=b +_.b=c +_.c=d +_.d=e +_.e=f +_.f=g +_.r=h +_.w=i +_.x=j +_.y=k +_.z=l +_.Q=m +_.as=n +_.at=o +_.ax=p}, +aVc(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){return new A.vj(b==null?null:b,e,d,g,h,j,i,f,a,c,l,n,o,m,k)}, +aVd(a,b,c){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e +if(a===b&&!0)return a +s=A.y(a.a,b.a,c) +r=A.y(a.b,b.b,c) +q=A.P(a.c,b.c,c) +p=A.P(a.d,b.d,c) +o=A.y(a.e,b.e,c) +n=A.y(a.f,b.f,c) +m=A.dS(a.r,b.r,c) +l=A.mU(a.w,b.w,c) +k=A.mU(a.x,b.x,c) +j=c<0.5 +if(j)i=a.y +else i=b.y +h=A.P(a.z,b.z,c) +g=A.P(a.Q,b.Q,c) +f=A.bb(a.as,b.as,c) +e=A.bb(a.at,b.at,c) +if(j)j=a.ax +else j=b.ax +return A.aVc(k,s,i,q,r,l,p,o,m,n,j,h,e,g,f)}, +vj:function vj(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.x=i +_.y=j +_.z=k +_.Q=l +_.as=m +_.at=n +_.ax=o}, +VU:function VU(){}, +b43(a,b){var s,r,q,p,o=A.bc("maxValue") +for(s=null,r=0;r<4;++r){q=a[r] +p=b.$1(q) +if(s==null||p>s){o.b=q +s=p}}return o.aI()}, +Db:function Db(a,b){var _=this +_.c=!0 +_.r=_.f=_.e=_.d=null +_.a=a +_.b=b}, +aht:function aht(a,b){this.a=a +this.b=b}, +yM:function yM(a,b){this.a=a +this.b=b}, +nM:function nM(a,b){this.a=a +this.b=b}, +wT:function wT(a,b){var _=this +_.e=!0 +_.r=_.f=$ +_.a=a +_.b=b}, +ahu:function ahu(a,b){this.a=a +this.b=b}, +aVh(a,b,c){var s,r,q,p,o,n,m +if(a===b&&!0)return a +s=A.y(a.a,b.a,c) +r=A.y(a.b,b.b,c) +q=A.P(a.c,b.c,c) +p=A.P(a.d,b.d,c) +o=A.bb(a.e,b.e,c) +n=A.ev(a.f,b.f,c) +m=A.qx(a.r,b.r,c) +return new A.Au(s,r,q,p,o,n,m,A.lz(a.w,b.w,c))}, +Au:function Au(a,b,c,d,e,f,g,h){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h}, +W9:function W9(){}, +Da:function Da(a,b,c,d,e,f,g,h){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h}, +ZL:function ZL(){}, +aVq(a,b,c){var s,r,q,p,o,n +if(a===b&&!0)return a +s=A.y(a.a,b.a,c) +r=A.P(a.b,b.b,c) +if(c<0.5)q=a.c +else q=b.c +p=A.P(a.d,b.d,c) +o=A.y(a.e,b.e,c) +n=A.y(a.f,b.f,c) +return new A.AI(s,r,q,p,o,n,A.ev(a.r,b.r,c))}, +AI:function AI(a,b,c,d,e,f,g){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g}, +Wt:function Wt(){}, +aVr(a,b,c){var s,r,q,p,o,n,m,l,k,j,i,h,g,f +if(a===b&&!0)return a +s=A.y(a.a,b.a,c) +r=A.P(a.b,b.b,c) +q=A.mU(a.c,b.c,c) +p=A.mU(a.d,b.d,c) +o=A.y(a.e,b.e,c) +n=A.y(a.f,b.f,c) +m=A.bb(a.r,b.r,c) +l=A.bb(a.w,b.w,c) +k=c<0.5 +if(k)j=a.x +else j=b.x +if(k)i=a.y +else i=b.y +if(k)h=a.z +else h=b.z +if(k)g=a.Q +else g=b.Q +if(k)f=a.as +else f=b.as +if(k)k=a.at +else k=b.at +return new A.AJ(s,r,q,p,o,n,m,l,j,i,h,g,f,k)}, +AJ:function AJ(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.x=i +_.y=j +_.z=k +_.Q=l +_.as=m +_.at=n}, +Wu:function Wu(){}, +aVs(a,b,c){var s,r,q,p,o,n,m,l,k,j,i,h +if(a===b)return a +s=A.y(a.a,b.a,c) +r=A.y(a.b,b.b,c) +q=A.P(a.c,b.c,c) +p=A.y(a.d,b.d,c) +o=A.y(a.e,b.e,c) +n=A.y(a.f,b.f,c) +m=A.P(a.r,b.r,c) +l=A.dS(a.w,b.w,c) +k=c<0.5 +if(k)j=a.x +else j=b.x +i=A.y(a.y,b.y,c) +h=A.aoE(a.z,b.z,c) +if(k)k=a.Q +else k=b.Q +return new A.AK(s,r,q,p,o,n,m,l,j,i,h,k,A.oq(a.as,b.as,c))}, +AK:function AK(a,b,c,d,e,f,g,h,i,j,k,l,m){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.x=i +_.y=j +_.z=k +_.Q=l +_.as=m}, +Wv:function Wv(){}, +Ek:function Ek(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1){var _=this +_.c=a +_.f=b +_.r=c +_.w=d +_.x=e +_.y=f +_.Q=g +_.as=h +_.at=i +_.ax=j +_.ay=k +_.ch=l +_.cy=m +_.db=n +_.dy=o +_.fr=p +_.fx=q +_.fy=r +_.go=s +_.id=a0 +_.a=a1}, +a0w:function a0w(a,b){var _=this +_.r2$=a +_.a=null +_.b=b +_.c=null}, +Z5:function Z5(a,b,c){this.e=a +this.c=b +this.a=c}, +IZ:function IZ(a,b,c){var _=this +_.A=a +_.fr$=b +_.fy=_.fx=null +_.go=!1 +_.k1=_.id=null +_.k2=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=c +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +azo:function azo(a,b){this.a=a +this.b=b}, +a4M:function a4M(){}, +aVx(a,b,c){var s,r,q,p,o,n,m,l,k +if(a===b)return a +s=c<0.5 +if(s)r=a.a +else r=b.a +if(s)q=a.b +else q=b.b +if(s)p=a.c +else p=b.c +o=A.P(a.d,b.d,c) +n=A.P(a.e,b.e,c) +m=A.ev(a.f,b.f,c) +if(s)l=a.r +else l=b.r +if(s)k=a.w +else k=b.w +if(s)s=a.x +else s=b.x +return new A.AP(r,q,p,o,n,m,l,k,s)}, +AP:function AP(a,b,c,d,e,f,g,h,i){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.x=i}, +Ww:function Ww(){}, +a85(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2){return new A.bJ(a1,c,g,m,o,s,d,n,k,f,j,h,i,q,p,l,a2,a0,b,e,a,r)}, +l9(a6,a7,a8){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,a2,a3,a4,a5=null +if(a6==a7)return a6 +s=a6==null +r=s?a5:a6.a +q=a7==null +p=q?a5:a7.a +p=A.b2(r,p,a8,A.Lo(),t.p8) +r=s?a5:a6.b +o=q?a5:a7.b +n=t._ +o=A.b2(r,o,a8,A.ch(),n) +r=s?a5:a6.c +r=A.b2(r,q?a5:a7.c,a8,A.ch(),n) +m=s?a5:a6.d +m=A.b2(m,q?a5:a7.d,a8,A.ch(),n) +l=s?a5:a6.e +l=A.b2(l,q?a5:a7.e,a8,A.ch(),n) +k=s?a5:a6.f +k=A.b2(k,q?a5:a7.f,a8,A.ch(),n) +j=s?a5:a6.r +i=q?a5:a7.r +h=t.PM +i=A.b2(j,i,a8,A.Lr(),h) +j=s?a5:a6.w +g=q?a5:a7.w +g=A.b2(j,g,a8,A.aIk(),t.pc) +j=s?a5:a6.x +f=q?a5:a7.x +e=t.tW +f=A.b2(j,f,a8,A.Lq(),e) +j=s?a5:a6.y +j=A.b2(j,q?a5:a7.y,a8,A.Lq(),e) +d=s?a5:a6.z +e=A.b2(d,q?a5:a7.z,a8,A.Lq(),e) +d=s?a5:a6.Q +n=A.b2(d,q?a5:a7.Q,a8,A.ch(),n) +d=s?a5:a6.as +h=A.b2(d,q?a5:a7.as,a8,A.Lr(),h) +d=s?a5:a6.at +d=A.aVz(d,q?a5:a7.at,a8) +c=s?a5:a6.ax +b=q?a5:a7.ax +b=A.b2(c,b,a8,A.aI9(),t.KX) +c=a8<0.5 +if(c)a=s?a5:a6.ay +else a=q?a5:a7.ay +if(c)a0=s?a5:a6.ch +else a0=q?a5:a7.ch +if(c)a1=s?a5:a6.CW +else a1=q?a5:a7.CW +if(c)a2=s?a5:a6.cx +else a2=q?a5:a7.cx +if(c)a3=s?a5:a6.cy +else a3=q?a5:a7.cy +a4=s?a5:a6.db +a4=A.qx(a4,q?a5:a7.db,a8) +if(c)s=s?a5:a6.dx +else s=q?a5:a7.dx +return A.a85(a4,a2,o,i,a3,j,r,n,h,e,f,a,m,g,l,b,d,s,k,a1,p,a0)}, +aVz(a,b,c){if(a==null&&b==null)return null +return new A.Zo(a,b,c)}, +bJ:function bJ(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.x=i +_.y=j +_.z=k +_.Q=l +_.as=m +_.at=n +_.ax=o +_.ay=p +_.ch=q +_.CW=r +_.cx=s +_.cy=a0 +_.db=a1 +_.dx=a2}, +Zo:function Zo(a,b,c){this.a=a +this.b=b +this.c=c}, +Wy:function Wy(){}, +aVy(a,b,c,d){var s +$label0$0:{if(d<=1){s=a +break $label0$0}if(d<2){s=A.ev(a,b,d-1) +s.toString +break $label0$0}if(d<3){s=A.ev(b,c,d-2) +s.toString +break $label0$0}s=c +break $label0$0}return s}, +AQ:function AQ(){}, +H4:function H4(a,b,c){var _=this +_.r=_.f=_.e=_.d=null +_.dD$=a +_.b9$=b +_.a=null +_.b=c +_.c=null}, +au2:function au2(){}, +au_:function au_(a,b,c){this.a=a +this.b=b +this.c=c}, +au0:function au0(a,b){this.a=a +this.b=b}, +au1:function au1(a,b,c){this.a=a +this.b=b +this.c=c}, +atD:function atD(){}, +atE:function atE(){}, +atF:function atF(){}, +atQ:function atQ(){}, +atT:function atT(){}, +atU:function atU(){}, +atV:function atV(){}, +atW:function atW(){}, +atX:function atX(){}, +atY:function atY(){}, +atZ:function atZ(){}, +atG:function atG(){}, +atH:function atH(){}, +atI:function atI(){}, +atR:function atR(a){this.a=a}, +atB:function atB(a){this.a=a}, +atS:function atS(a){this.a=a}, +atA:function atA(a){this.a=a}, +atJ:function atJ(){}, +atK:function atK(){}, +atL:function atL(){}, +atM:function atM(){}, +atN:function atN(){}, +atO:function atO(){}, +atP:function atP(a){this.a=a}, +atC:function atC(){}, +a_1:function a_1(a){this.a=a}, +Z6:function Z6(a,b,c){this.e=a +this.c=b +this.a=c}, +J_:function J_(a,b,c){var _=this +_.A=a +_.fr$=b +_.fy=_.fx=null +_.go=!1 +_.k1=_.id=null +_.k2=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=c +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +azp:function azp(a,b){this.a=a +this.b=b}, +KB:function KB(){}, +a86:function a86(a,b){this.a=a +this.b=b}, +Mw:function Mw(a,b,c,d,e,f,g,h){var _=this +_.w=a +_.x=b +_.y=c +_.z=d +_.Q=e +_.as=f +_.at=g +_.ax=h}, +Wz:function Wz(){}, +aVD(a,b,c){var s,r,q,p,o,n +if(a===b&&!0)return a +if(c<0.5)s=a.a +else s=b.a +r=A.y(a.b,b.b,c) +q=A.y(a.c,b.c,c) +p=A.y(a.d,b.d,c) +o=A.P(a.e,b.e,c) +n=A.ev(a.f,b.f,c) +return new A.AR(s,r,q,p,o,n,A.dS(a.r,b.r,c))}, +AR:function AR(a,b,c,d,e,f,g){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g}, +WC:function WC(){}, +auf:function auf(a,b){this.a=a +this.b=b}, +AT:function AT(a,b,c){this.c=a +this.d=b +this.a=c}, +WE:function WE(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p){var _=this +_.d=a +_.e=null +_.kB$=b +_.kC$=c +_.lA$=d +_.vy$=e +_.vz$=f +_.r6$=g +_.vA$=h +_.r7$=i +_.AI$=j +_.ov$=k +_.n0$=l +_.n1$=m +_.dD$=n +_.b9$=o +_.a=null +_.b=p +_.c=null}, +aud:function aud(a){this.a=a}, +aue:function aue(a,b){this.a=a +this.b=b}, +WD:function WD(a){var _=this +_.at=_.as=_.Q=_.z=_.y=_.x=_.w=_.r=_.f=_.e=_.d=_.c=_.b=_.a=_.fy=_.fx=_.fr=_.dy=_.dx=_.db=null +_.fx$=0 +_.fy$=a +_.id$=_.go$=0 +_.k1$=!1}, +au8:function au8(a,b,c,d,e,f,g,h,i,j,k){var _=this +_.y=a +_.z=b +_.a=c +_.b=d +_.c=e +_.d=f +_.e=g +_.f=h +_.r=i +_.w=j +_.x=k}, +auc:function auc(a){this.a=a}, +aua:function aua(a){this.a=a}, +au9:function au9(a){this.a=a}, +aub:function aub(a){this.a=a}, +KD:function KD(){}, +KE:function KE(){}, +aVH(a,b,c){var s,r,q,p,o,n,m,l +if(a===b&&!0)return a +s=c<0.5 +if(s)r=a.a +else r=b.a +q=t._ +p=A.b2(a.b,b.b,c,A.ch(),q) +o=A.b2(a.c,b.c,c,A.ch(),q) +q=A.b2(a.d,b.d,c,A.ch(),q) +n=A.P(a.e,b.e,c) +if(s)m=a.f +else m=b.f +if(s)s=a.r +else s=b.r +l=t.KX.a(A.dS(a.w,b.w,c)) +return new A.vx(r,p,o,q,n,m,s,l,A.aVG(a.x,b.x,c))}, +aVG(a,b,c){if(a==null||b==null)return null +if(a===b)return a +return A.aQ(a,b,c)}, +vx:function vx(a,b,c,d,e,f,g,h,i){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.x=i}, +WF:function WF(){}, +aVL(a3,a4,a5){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,a2 +if(a3===a4)return a3 +s=A.b2(a3.a,a4.a,a5,A.ch(),t._) +r=A.y(a3.b,a4.b,a5) +q=A.y(a3.c,a4.c,a5) +p=A.y(a3.d,a4.d,a5) +o=A.y(a3.e,a4.e,a5) +n=A.y(a3.f,a4.f,a5) +m=A.y(a3.r,a4.r,a5) +l=A.y(a3.w,a4.w,a5) +k=A.y(a3.x,a4.x,a5) +j=a5<0.5 +if(j)i=a3.y!==!1 +else i=a4.y!==!1 +h=A.y(a3.z,a4.z,a5) +g=A.ev(a3.Q,a4.Q,a5) +f=A.ev(a3.as,a4.as,a5) +e=A.aVK(a3.at,a4.at,a5) +d=A.aVJ(a3.ax,a4.ax,a5) +c=A.bb(a3.ay,a4.ay,a5) +b=A.bb(a3.ch,a4.ch,a5) +if(j){j=a3.CW +if(j==null)j=B.ad}else{j=a4.CW +if(j==null)j=B.ad}a=A.P(a3.cx,a4.cx,a5) +a0=A.P(a3.cy,a4.cy,a5) +a1=a3.db +if(a1==null)a2=a4.db!=null +else a2=!0 +if(a2)a1=A.mU(a1,a4.db,a5) +else a1=null +return new A.AV(s,r,q,p,o,n,m,l,k,i,h,g,f,e,d,c,b,j,a,a0,a1)}, +aVK(a,b,c){var s=a==null +if(s&&b==null)return null +if(s){s=b.a +return A.aQ(new A.b_(A.C(0,s.gl(s)>>>16&255,s.gl(s)>>>8&255,s.gl(s)&255),0,B.y,-1),b,c)}if(b==null){s=a.a +return A.aQ(new A.b_(A.C(0,s.gl(s)>>>16&255,s.gl(s)>>>8&255,s.gl(s)&255),0,B.y,-1),a,c)}return A.aQ(a,b,c)}, +aVJ(a,b,c){if(a==null&&b==null)return null +return t.KX.a(A.dS(a,b,c))}, +AV:function AV(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.x=i +_.y=j +_.z=k +_.Q=l +_.as=m +_.at=n +_.ax=o +_.ay=p +_.ch=q +_.CW=r +_.cx=s +_.cy=a0 +_.db=a1}, +WH:function WH(){}, +aFo(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,b0,b1){return new A.vI(b,a1,k,a2,l,a4,m,a5,n,b0,q,b1,r,c,h,d,i,a,g,a7,o,a9,p,s,a0,a6,a3,f,j,e,a8)}, +aW_(b7,b8,b9){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,b0,b1,b2,b3,b4,b5,b6 +if(b7===b8)return b7 +s=b9<0.5?b7.a:b8.a +r=b7.b +q=b8.b +p=A.y(r,q,b9) +p.toString +o=b7.c +n=b8.c +m=A.y(o,n,b9) +m.toString +l=b7.d +if(l==null)l=r +k=b8.d +l=A.y(l,k==null?q:k,b9) +k=b7.e +if(k==null)k=o +j=b8.e +k=A.y(k,j==null?n:j,b9) +j=b7.f +i=b8.f +h=A.y(j,i,b9) +h.toString +g=b7.r +f=b8.r +e=A.y(g,f,b9) +e.toString +d=b7.w +if(d==null)d=j +c=b8.w +d=A.y(d,c==null?i:c,b9) +c=b7.x +if(c==null)c=g +b=b8.x +c=A.y(c,b==null?f:b,b9) +b=b7.y +a=b==null +a0=a?j:b +a1=b8.y +a2=a1==null +a0=A.y(a0,a2?i:a1,b9) +a3=b7.z +a4=a3==null +a5=a4?g:a3 +a6=b8.z +a7=a6==null +a5=A.y(a5,a7?f:a6,b9) +a8=b7.Q +if(a8==null)j=a?j:b +else j=a8 +b=b8.Q +if(b==null)i=a2?i:a1 +else i=b +i=A.y(j,i,b9) +j=b7.as +if(j==null)j=a4?g:a3 +g=b8.as +if(g==null)g=a7?f:a6 +g=A.y(j,g,b9) +j=b7.at +f=b8.at +b=A.y(j,f,b9) +b.toString +a=b7.ax +a1=b8.ax +a2=A.y(a,a1,b9) +a2.toString +a3=b7.ay +j=a3==null?j:a3 +a3=b8.ay +j=A.y(j,a3==null?f:a3,b9) +f=b7.ch +if(f==null)f=a +a=b8.ch +f=A.y(f,a==null?a1:a,b9) +a=A.y(b7.CW,b8.CW,b9) +a.toString +a1=b7.cx +a3=b8.cx +a4=A.y(a1,a3,b9) +a4.toString +a6=b7.cy +a7=b8.cy +a8=A.y(a6,a7,b9) +a8.toString +a9=b7.db +b0=b8.db +b1=A.y(a9,b0,b9) +b1.toString +b2=b7.dx +if(b2==null)b2=a6 +b3=b8.dx +b2=A.y(b2,b3==null?a7:b3,b9) +b3=b7.dy +if(b3==null)b3=a9 +b4=b8.dy +b3=A.y(b3,b4==null?b0:b4,b9) +b4=b7.fr +if(b4==null)b4=a1 +b5=b8.fr +b4=A.y(b4,b5==null?a3:b5,b9) +b5=b7.fx +a1=b5==null?a1:b5 +b5=b8.fx +a1=A.y(a1,b5==null?a3:b5,b9) +a3=b7.fy +if(a3==null)a3=B.k +b5=b8.fy +a3=A.y(a3,b5==null?B.k:b5,b9) +b5=b7.go +if(b5==null)b5=B.k +b6=b8.go +b5=A.y(b5,b6==null?B.k:b6,b9) +b6=b7.id +a9=b6==null?a9:b6 +b6=b8.id +a9=A.y(a9,b6==null?b0:b6,b9) +b0=b7.k1 +a6=b0==null?a6:b0 +b0=b8.k1 +a6=A.y(a6,b0==null?a7:b0,b9) +a7=b7.k2 +o=a7==null?o:a7 +a7=b8.k2 +o=A.y(o,a7==null?n:a7,b9) +n=b7.k3 +r=n==null?r:n +n=b8.k3 +return A.aFo(a,s,b,j,o,a9,a4,a2,f,a6,m,k,e,c,b1,b3,a5,g,b4,a1,p,l,b5,h,d,a3,a8,A.y(r,n==null?q:n,b9),b2,a0,i)}, +vI:function vI(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,b0,b1){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.x=i +_.y=j +_.z=k +_.Q=l +_.as=m +_.at=n +_.ax=o +_.ay=p +_.ch=q +_.CW=r +_.cx=s +_.cy=a0 +_.db=a1 +_.dx=a2 +_.dy=a3 +_.fr=a4 +_.fx=a5 +_.fy=a6 +_.go=a7 +_.id=a8 +_.k1=a9 +_.k2=b0 +_.k3=b1}, +WL:function WL(){}, +dP:function dP(a,b){this.b=a +this.a=b}, +Qd:function Qd(a,b){this.b=a +this.a=b}, +aWe(a,b,c){var s,r,q,p,o,n,m,l,k,j,i,h,g,f +if(a===b)return a +s=A.aad(a.a,b.a,c) +r=t._ +q=A.b2(a.b,b.b,c,A.ch(),r) +p=A.P(a.c,b.c,c) +o=A.P(a.d,b.d,c) +n=A.bb(a.e,b.e,c) +r=A.b2(a.f,b.f,c,A.ch(),r) +m=A.P(a.r,b.r,c) +l=A.bb(a.w,b.w,c) +k=A.P(a.x,b.x,c) +j=A.P(a.y,b.y,c) +i=A.P(a.z,b.z,c) +h=A.P(a.Q,b.Q,c) +g=c<0.5 +f=g?a.as:b.as +g=g?a.at:b.at +return new A.Bp(s,q,p,o,n,r,m,l,k,j,i,h,f,g)}, +Bp:function Bp(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.x=i +_.y=j +_.z=k +_.Q=l +_.as=m +_.at=n}, +Xo:function Xo(){}, +aWg(b6,b7,b8){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,b0,b1,b2,b3,b4,b5 +if(b6===b7&&!0)return b6 +s=A.y(b6.a,b7.a,b8) +r=A.P(b6.b,b7.b,b8) +q=A.y(b6.c,b7.c,b8) +p=A.y(b6.d,b7.d,b8) +o=A.dS(b6.e,b7.e,b8) +n=A.y(b6.f,b7.f,b8) +m=A.y(b6.r,b7.r,b8) +l=A.bb(b6.w,b7.w,b8) +k=A.bb(b6.x,b7.x,b8) +j=A.bb(b6.y,b7.y,b8) +i=A.bb(b6.z,b7.z,b8) +h=t._ +g=A.b2(b6.Q,b7.Q,b8,A.ch(),h) +f=A.b2(b6.as,b7.as,b8,A.ch(),h) +e=A.b2(b6.at,b7.at,b8,A.ch(),h) +d=A.b2(b6.ax,b7.ax,b8,A.ch(),h) +c=A.b2(b6.ay,b7.ay,b8,A.ch(),h) +b=A.aWf(b6.ch,b7.ch,b8) +a=A.bb(b6.CW,b7.CW,b8) +a0=A.b2(b6.cx,b7.cx,b8,A.ch(),h) +a1=A.b2(b6.cy,b7.cy,b8,A.ch(),h) +a2=A.b2(b6.db,b7.db,b8,A.ch(),h) +a3=A.y(b6.dx,b7.dx,b8) +a4=A.P(b6.dy,b7.dy,b8) +a5=A.y(b6.fr,b7.fr,b8) +a6=A.y(b6.fx,b7.fx,b8) +a7=A.dS(b6.fy,b7.fy,b8) +a8=A.y(b6.go,b7.go,b8) +a9=A.y(b6.id,b7.id,b8) +b0=A.bb(b6.k1,b7.k1,b8) +b1=A.bb(b6.k2,b7.k2,b8) +b2=A.y(b6.k3,b7.k3,b8) +h=A.b2(b6.k4,b7.k4,b8,A.ch(),h) +b3=A.y(b6.ok,b7.ok,b8) +if(b8<0.5)b4=b6.p1 +else b4=b7.p1 +b5=A.l9(b6.p2,b7.p2,b8) +return new A.Bq(s,r,q,p,o,n,m,l,k,j,i,g,f,e,d,c,b,a,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,b0,b1,b2,h,b3,b4,b5,A.l9(b6.p3,b7.p3,b8))}, +aWf(a,b,c){var s +if(a==b)return a +if(a==null){s=b.a +return A.aQ(new A.b_(A.C(0,s.gl(s)>>>16&255,s.gl(s)>>>8&255,s.gl(s)&255),0,B.y,-1),b,c)}s=a.a +return A.aQ(a,new A.b_(A.C(0,s.gl(s)>>>16&255,s.gl(s)>>>8&255,s.gl(s)&255),0,B.y,-1),c)}, +Bq:function Bq(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,b0,b1,b2,b3,b4,b5,b6){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.x=i +_.y=j +_.z=k +_.Q=l +_.as=m +_.at=n +_.ax=o +_.ay=p +_.ch=q +_.CW=r +_.cx=s +_.cy=a0 +_.db=a1 +_.dx=a2 +_.dy=a3 +_.fr=a4 +_.fx=a5 +_.fy=a6 +_.go=a7 +_.id=a8 +_.k1=a9 +_.k2=b0 +_.k3=b1 +_.k4=b2 +_.ok=b3 +_.p1=b4 +_.p2=b5 +_.p3=b6}, +Xq:function Xq(){}, +XB:function XB(){}, +aao:function aao(){}, +a4u:function a4u(){}, +NM:function NM(a,b,c){this.c=a +this.d=b +this.a=c}, +aWq(a,b,c){return new A.vV(b,A.bj(c,null,B.cj,B.B5.ey(A.ak(a).ax.a===B.ao?B.i:B.S),null),null)}, +vV:function vV(a,b,c){this.c=a +this.d=b +this.a=c}, +aWt(a,b,c){var s,r,q,p,o,n,m,l,k +if(a===b&&!0)return a +s=A.y(a.a,b.a,c) +r=A.P(a.b,b.b,c) +q=A.y(a.c,b.c,c) +p=A.y(a.d,b.d,c) +o=A.dS(a.e,b.e,c) +n=A.qx(a.f,b.f,c) +m=A.y(a.y,b.y,c) +l=A.bb(a.r,b.r,c) +k=A.bb(a.w,b.w,c) +return new A.Bt(s,r,q,p,o,n,l,k,A.ev(a.x,b.x,c),m)}, +Bt:function Bt(a,b,c,d,e,f,g,h,i,j){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.x=i +_.y=j}, +XD:function XD(){}, +aWB(a,b,c){var s,r,q,p,o=A.aKi(a) +A.ak(a) +s=A.aOa(a) +r=o.a +q=r +if(q==null)q=s==null?null:s.gM(s) +p=c +if(q==null)return new A.b_(B.k,p,B.y,-1) +return new A.b_(q,p,B.y,-1)}, +aOa(a){return new A.av4(a,null,16,1,0,0)}, +NW:function NW(a){this.a=a}, +av4:function av4(a,b,c,d,e,f){var _=this +_.f=a +_.a=b +_.b=c +_.c=d +_.d=e +_.e=f}, +aWA(a,b,c){var s,r,q,p +if(a===b&&!0)return a +s=A.y(a.a,b.a,c) +r=A.P(a.b,b.b,c) +q=A.P(a.c,b.c,c) +p=A.P(a.d,b.d,c) +return new A.vW(s,r,q,p,A.P(a.e,b.e,c))}, +aKi(a){var s +a.ap(t.Jj) +s=A.ak(a) +return s.bZ}, +vW:function vW(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e}, +XH:function XH(){}, +O4:function O4(a,b){this.a=a +this.b=b}, +O3:function O3(a,b){this.x=a +this.a=b}, +HH:function HH(a,b,c){this.f=a +this.b=b +this.a=c}, +BG:function BG(a,b,c,d,e,f,g,h,i){var _=this +_.c=a +_.d=b +_.e=c +_.f=d +_.r=e +_.w=f +_.x=g +_.y=h +_.a=i}, +vZ:function vZ(a,b,c,d,e,f){var _=this +_.d=null +_.e=a +_.f=$ +_.r=b +_.w=!1 +_.x=$ +_.y=c +_.e9$=d +_.c0$=e +_.a=null +_.b=f +_.c=null}, +ab6:function ab6(){}, +av5:function av5(a,b,c,d,e,f,g,h,i){var _=this +_.x=a +_.y=$ +_.a=b +_.b=c +_.c=d +_.d=e +_.e=f +_.f=g +_.r=h +_.w=i}, +HI:function HI(){}, +aWX(a,b,c){var s,r,q,p,o,n,m +if(a===b)return a +s=A.y(a.a,b.a,c) +r=A.y(a.b,b.b,c) +q=A.P(a.c,b.c,c) +p=A.y(a.d,b.d,c) +o=A.y(a.e,b.e,c) +n=A.dS(a.f,b.f,c) +m=A.dS(a.r,b.r,c) +return new A.w_(s,r,q,p,o,n,m,A.P(a.w,b.w,c))}, +aKM(a){var s +a.ap(t.ty) +s=A.ak(a) +return s.bt}, +w_:function w_(a,b,c,d,e,f,g,h){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h}, +XS:function XS(){}, +aWY(a,b,c){var s,r +if(a===b&&!0)return a +s=A.bb(a.a,b.a,c) +if(c<0.5)r=a.b +else r=b.b +return new A.BH(s,r,A.aGn(a.c,b.c,c))}, +BH:function BH(a,b,c){this.a=a +this.b=b +this.c=c}, +XT:function XT(){}, +aX5(a,b,c){if(a===b)return a +return new A.BN(A.l9(a.a,b.a,c))}, +BN:function BN(a){this.a=a}, +XY:function XY(){}, +aKP(a,b,c){if(b!=null&&!b.j(0,B.n))return A.a9D(A.C(B.c.an(255*A.aX6(c)),b.gl(b)>>>16&255,b.gl(b)>>>8&255,b.gl(b)&255),a) +return a}, +aX6(a){var s,r,q,p,o,n +if(a<0)return 0 +for(s=0;r=B.pj[s],q=r.a,a>=q;){if(a===q||s+1===6)return r.b;++s}p=B.pj[s-1] +o=p.a +n=p.b +return n+(a-o)/(q-o)*(r.b-n)}, +nO:function nO(a,b){this.a=a +this.b=b}, +aXh(a,b,c){var s,r,q,p,o,n,m,l,k,j +if(a===b)return a +s=A.y(a.a,b.a,c) +r=A.y(a.b,b.b,c) +q=A.ev(a.c,b.c,c) +p=A.qx(a.d,b.d,c) +o=A.ev(a.e,b.e,c) +n=A.y(a.f,b.f,c) +m=A.y(a.r,b.r,c) +l=A.y(a.w,b.w,c) +k=A.y(a.x,b.x,c) +j=A.dS(a.y,b.y,c) +return new A.BU(s,r,q,p,o,n,m,l,k,j,A.dS(a.z,b.z,c))}, +BU:function BU(a,b,c,d,e,f,g,h,i,j,k){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.x=i +_.y=j +_.z=k}, +Y4:function Y4(){}, +aXi(a,b,c){if(a===b)return a +return new A.BW(A.l9(a.a,b.a,c))}, +BW:function BW(a){this.a=a}, +Y9:function Y9(){}, +C7:function C7(a,b,c,d,e,f,g,h){var _=this +_.f=a +_.r=b +_.w=c +_.x=d +_.y=e +_.z=f +_.b=g +_.a=h}, +auS:function auS(){}, +Yq:function Yq(a,b){this.a=a +this.b=b}, +OP:function OP(a,b,c,d){var _=this +_.c=a +_.z=b +_.k1=c +_.a=d}, +XX:function XX(a,b){this.a=a +this.b=b}, +WG:function WG(a,b){this.c=a +this.a=b}, +a0O:function a0O(a,b,c,d){var _=this +_.A=null +_.a1=a +_.al=b +_.fr$=c +_.fy=_.fx=null +_.go=!1 +_.k1=_.id=null +_.k2=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=d +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +avc:function avc(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4){var _=this +_.dx=a +_.dy=b +_.fr=c +_.fy=_.fx=$ +_.a=d +_.b=e +_.c=f +_.d=g +_.e=h +_.f=i +_.r=j +_.w=k +_.x=l +_.y=m +_.z=n +_.Q=o +_.as=p +_.at=q +_.ax=r +_.ay=s +_.ch=a0 +_.CW=a1 +_.cx=a2 +_.cy=a3 +_.db=a4}, +b_V(a,b){return a.r.a-16-a.e.c-a.a.a+b}, +aO6(a,b,c,d,e){return new A.GP(c,d,a,b,new A.b5(A.a([],t.x8),t.jc),new A.b5(A.a([],t.b),t.fy),0,e.h("GP<0>"))}, +acP:function acP(){}, +ap9:function ap9(){}, +acB:function acB(){}, +acA:function acA(){}, +av6:function av6(){}, +acO:function acO(){}, +aA7:function aA7(){}, +GP:function GP(a,b,c,d,e,f,g,h){var _=this +_.w=a +_.x=b +_.a=c +_.b=d +_.d=_.c=null +_.cM$=e +_.cC$=f +_.mT$=g +_.$ti=h}, +a4v:function a4v(){}, +a4w:function a4w(){}, +aXl(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1){return new A.wa(k,a,i,m,a1,c,j,n,b,l,r,d,o,s,a0,p,g,e,f,h,q)}, +aXm(a2,a3,a4){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1 +if(a2===a3)return a2 +s=A.y(a2.a,a3.a,a4) +r=A.y(a2.b,a3.b,a4) +q=A.y(a2.c,a3.c,a4) +p=A.y(a2.d,a3.d,a4) +o=A.y(a2.e,a3.e,a4) +n=A.P(a2.f,a3.f,a4) +m=A.P(a2.r,a3.r,a4) +l=A.P(a2.w,a3.w,a4) +k=A.P(a2.x,a3.x,a4) +j=A.P(a2.y,a3.y,a4) +i=A.dS(a2.z,a3.z,a4) +h=a4<0.5 +if(h)g=a2.Q +else g=a3.Q +f=A.P(a2.as,a3.as,a4) +e=A.oq(a2.at,a3.at,a4) +d=A.oq(a2.ax,a3.ax,a4) +c=A.oq(a2.ay,a3.ay,a4) +b=A.oq(a2.ch,a3.ch,a4) +a=A.P(a2.CW,a3.CW,a4) +a0=A.ev(a2.cx,a3.cx,a4) +a1=A.bb(a2.cy,a3.cy,a4) +if(h)h=a2.db +else h=a3.db +return A.aXl(r,k,n,g,a,a0,b,a1,q,m,s,j,p,l,f,c,h,i,e,d,o)}, +wa:function wa(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.x=i +_.y=j +_.z=k +_.Q=l +_.as=m +_.at=n +_.ax=o +_.ay=p +_.ch=q +_.CW=r +_.cx=s +_.cy=a0 +_.db=a1}, +Yp:function Yp(){}, +Cu(a,b,c,d,e){return new A.Pm(b,a,c,e,d,null)}, +Cw(a,b,c,d,e,f,g,h,i,j,k,l,m,a0){var s,r,q,p=null,o=g==null,n=o&&!0?p:new A.YT(g,b) +if(o)o=!0 +else o=!1 +s=o?p:new A.YV(g,f,i,h) +o=l==null?p:new A.cr(l,t.iL) +r=k==null?p:new A.cr(k,t.iL) +q=j==null?p:new A.cr(j,t.QL) +return A.a85(a,p,p,p,d,p,n,p,q,r,o,new A.YU(e,c),s,p,p,p,p,p,p,p,p,a0)}, +aw6:function aw6(a,b){this.a=a +this.b=b}, +Pm:function Pm(a,b,c,d,e,f){var _=this +_.w=a +_.z=b +_.ax=c +_.cx=d +_.dx=e +_.a=f}, +Js:function Js(a,b,c,d,e,f,g,h){var _=this +_.c=a +_.d=b +_.e=c +_.f=d +_.r=e +_.w=f +_.x=g +_.a=h}, +a1U:function a1U(a){var _=this +_.d=$ +_.a=null +_.b=a +_.c=null}, +YX:function YX(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var _=this +_.ax=a +_.ay=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.x=i +_.y=j +_.z=k +_.Q=l +_.as=m +_.a=n}, +aw5:function aw5(a){this.a=a}, +YT:function YT(a,b){this.a=a +this.b=b}, +YV:function YV(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +YU:function YU(a,b){this.a=a +this.b=b}, +YW:function YW(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3){var _=this +_.dy=a +_.fx=$ +_.a=b +_.b=c +_.c=d +_.d=e +_.e=f +_.f=g +_.r=h +_.w=i +_.x=j +_.y=k +_.z=l +_.Q=m +_.as=n +_.at=o +_.ax=p +_.ay=q +_.ch=r +_.CW=s +_.cx=a0 +_.cy=a1 +_.db=a2 +_.dx=a3}, +aw2:function aw2(a){this.a=a}, +aw4:function aw4(a){this.a=a}, +aw3:function aw3(){}, +Ya:function Ya(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4){var _=this +_.dy=a +_.fr=b +_.fx=$ +_.a=c +_.b=d +_.c=e +_.d=f +_.e=g +_.f=h +_.r=i +_.w=j +_.x=k +_.y=l +_.z=m +_.Q=n +_.as=o +_.at=p +_.ax=q +_.ay=r +_.ch=s +_.CW=a0 +_.cx=a1 +_.cy=a2 +_.db=a3 +_.dx=a4}, +avd:function avd(a){this.a=a}, +ave:function ave(a){this.a=a}, +avg:function avg(a){this.a=a}, +avf:function avf(){}, +Yb:function Yb(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4){var _=this +_.dy=a +_.fr=b +_.fx=$ +_.a=c +_.b=d +_.c=e +_.d=f +_.e=g +_.f=h +_.r=i +_.w=j +_.x=k +_.y=l +_.z=m +_.Q=n +_.as=o +_.at=p +_.ax=q +_.ay=r +_.ch=s +_.CW=a0 +_.cx=a1 +_.cy=a2 +_.db=a3 +_.dx=a4}, +avh:function avh(a){this.a=a}, +avi:function avi(a){this.a=a}, +avk:function avk(a){this.a=a}, +avj:function avj(){}, +a_r:function a_r(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3){var _=this +_.dy=a +_.fx=$ +_.a=b +_.b=c +_.c=d +_.d=e +_.e=f +_.f=g +_.r=h +_.w=i +_.x=j +_.y=k +_.z=l +_.Q=m +_.as=n +_.at=o +_.ax=p +_.ay=q +_.ch=r +_.CW=s +_.cx=a0 +_.cy=a1 +_.db=a2 +_.dx=a3}, +ayn:function ayn(a){this.a=a}, +ayo:function ayo(a){this.a=a}, +ayq:function ayq(a){this.a=a}, +ayr:function ayr(a){this.a=a}, +ayp:function ayp(){}, +a4A:function a4A(){}, +aXO(a,b,c){if(a===b)return a +return new A.rL(A.l9(a.a,b.a,c))}, +aG4(a,b){return new A.Cv(b,a,null)}, +aLi(a){var s=a.ap(t.g5),r=s==null?null:s.w +return r==null?A.ak(a).aH:r}, +rL:function rL(a){this.a=a}, +Cv:function Cv(a,b,c){this.w=a +this.b=b +this.a=c}, +YY:function YY(){}, +oS:function oS(a,b,c,d,e,f,g,h,i,j){var _=this +_.z=a +_.Q=b +_.as=c +_.at=d +_.ax=e +_.ch=_.ay=$ +_.CW=!0 +_.e=f +_.f=g +_.a=h +_.b=i +_.c=j +_.d=!1}, +b3A(a,b,c){if(c!=null)return c +if(b)return new A.aCL(a) +return null}, +aCL:function aCL(a){this.a=a}, +awn:function awn(){}, +CE:function CE(a,b,c,d,e,f,g,h,i,j){var _=this +_.z=a +_.Q=b +_.as=c +_.at=d +_.ax=e +_.db=_.cy=_.cx=_.CW=_.ch=_.ay=$ +_.e=f +_.f=g +_.a=h +_.b=i +_.c=j +_.d=!1}, +b3z(a,b,c){if(c!=null)return c +if(b)return new A.aCK(a) +return null}, +b3D(a,b,c,d){var s,r,q,p,o,n +if(b){if(c!=null){s=c.$0() +r=new A.G(s.c-s.a,s.d-s.b)}else r=a.gv(a) +q=d.Y(0,B.e).gdC() +p=d.Y(0,new A.k(0+r.a,0)).gdC() +o=d.Y(0,new A.k(0,0+r.b)).gdC() +n=d.Y(0,r.zS(0,B.e)).gdC() +return Math.ceil(Math.max(Math.max(q,p),Math.max(o,n)))}return 35}, +aCK:function aCK(a){this.a=a}, +awo:function awo(){}, +CF:function CF(a,b,c,d,e,f,g,h,i,j,k){var _=this +_.z=a +_.Q=b +_.as=c +_.at=d +_.ax=e +_.ay=f +_.cx=_.CW=_.ch=$ +_.cy=null +_.e=g +_.f=h +_.a=i +_.b=j +_.c=k +_.d=!1}, +afT(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,a0){var s=null +return new A.Py(c,o,s,s,s,s,n,s,s,s,s,l,m,j,!0,B.aO,s,s,d,f,i,h,p,q,r,e!==!1,!1,k,!1,g,b,a0,s,s)}, +oU:function oU(){}, +wy:function wy(){}, +IM:function IM(a,b,c){this.f=a +this.b=b +this.a=c}, +CD:function CD(){}, +I8:function I8(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,b0,b1,b2,b3,b4,b5,b6,b7){var _=this +_.c=a +_.d=b +_.e=c +_.f=d +_.r=e +_.w=f +_.x=g +_.y=h +_.z=i +_.Q=j +_.as=k +_.at=l +_.ax=m +_.ay=n +_.ch=o +_.CW=p +_.cx=q +_.cy=r +_.db=s +_.dx=a0 +_.dy=a1 +_.fr=a2 +_.fx=a3 +_.fy=a4 +_.go=a5 +_.id=a6 +_.k1=a7 +_.k2=a8 +_.k3=a9 +_.k4=b0 +_.ok=b1 +_.p1=b2 +_.p2=b3 +_.p3=b4 +_.p4=b5 +_.R8=b6 +_.a=b7}, +q4:function q4(a,b){this.a=a +this.b=b}, +I7:function I7(a,b,c,d){var _=this +_.e=_.d=null +_.f=!1 +_.r=a +_.w=$ +_.x=null +_.y=b +_.z=null +_.Q=!1 +_.ii$=c +_.a=null +_.b=d +_.c=null}, +awl:function awl(){}, +awh:function awh(a){this.a=a}, +awk:function awk(){}, +awm:function awm(a,b){this.a=a +this.b=b}, +awg:function awg(a,b){this.a=a +this.b=b}, +awj:function awj(a){this.a=a}, +awi:function awi(a,b){this.a=a +this.b=b}, +Py:function Py(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,b0,b1,b2,b3,b4){var _=this +_.c=a +_.d=b +_.e=c +_.f=d +_.r=e +_.w=f +_.x=g +_.y=h +_.z=i +_.Q=j +_.as=k +_.at=l +_.ax=m +_.ay=n +_.ch=o +_.CW=p +_.cx=q +_.cy=r +_.db=s +_.dx=a0 +_.dy=a1 +_.fr=a2 +_.fx=a3 +_.fy=a4 +_.go=a5 +_.id=a6 +_.k1=a7 +_.k2=a8 +_.k3=a9 +_.k4=b0 +_.ok=b1 +_.p1=b2 +_.p2=b3 +_.a=b4}, +KL:function KL(){}, +aXn(a){if(a===-1)return"FloatingLabelAlignment.start" +if(a===0)return"FloatingLabelAlignment.center" +return"FloatingLabelAlignment(x: "+B.f.af(a,1)+")"}, +acQ:function acQ(a,b){this.a=a +this.b=b}, +OQ:function OQ(){}, +Pz:function Pz(){}, +Z4:function Z4(){}, +aha:function aha(a,b){this.a=a +this.b=b}, +aGi(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s){return new A.CZ(b,l,m,j,e,o,r,n,f,a,p,k,d,h,g,c,i,s,q)}, +aYe(a0,a1,a2){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a +if(a0===a1)return a0 +s=a2<0.5 +if(s)r=a0.a +else r=a1.a +q=A.dS(a0.b,a1.b,a2) +if(s)p=a0.c +else p=a1.c +o=A.y(a0.d,a1.d,a2) +n=A.y(a0.e,a1.e,a2) +m=A.y(a0.f,a1.f,a2) +l=A.bb(a0.r,a1.r,a2) +k=A.bb(a0.w,a1.w,a2) +j=A.bb(a0.x,a1.x,a2) +i=A.ev(a0.y,a1.y,a2) +h=A.y(a0.z,a1.z,a2) +g=A.y(a0.Q,a1.Q,a2) +f=A.P(a0.as,a1.as,a2) +e=A.P(a0.at,a1.at,a2) +d=A.P(a0.ax,a1.ax,a2) +if(s)c=a0.ay +else c=a1.ay +if(s)b=a0.ch +else b=a1.ch +if(s)a=a0.CW +else a=a1.CW +if(s)s=a0.cx +else s=a1.cx +return A.aGi(i,r,c,f,n,j,d,e,b,o,g,q,p,k,m,h,s,l,a)}, +aLH(a,b,c){return new A.tc(b,a,c)}, +aYf(a,b){var s=null +return new A.f2(new A.ahb(s,s,s,b,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,a),s)}, +CZ:function CZ(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.x=i +_.y=j +_.z=k +_.Q=l +_.as=m +_.at=n +_.ax=o +_.ay=p +_.ch=q +_.CW=r +_.cx=s}, +tc:function tc(a,b,c){this.w=a +this.b=b +this.a=c}, +ahb:function ahb(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.x=i +_.y=j +_.z=k +_.Q=l +_.as=m +_.at=n +_.ax=o +_.ay=p +_.ch=q +_.CW=r +_.cx=s +_.cy=a0 +_.db=a1}, +ZE:function ZE(){}, +Gd:function Gd(a,b){this.c=a +this.a=b}, +aqG:function aqG(){}, +K0:function K0(a,b){var _=this +_.e=_.d=null +_.f=a +_.a=null +_.b=b +_.c=null}, +aBf:function aBf(a){this.a=a}, +aBe:function aBe(a){this.a=a}, +aBg:function aBg(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +Q8:function Q8(a,b){this.c=a +this.a=b}, +p9(a,b,c,d,e,f,g,h,i,j,k,l){return new A.D9(c,l,f,e,h,j,k,i,d,a,b,g)}, +aXT(a,b){var s,r,q,p,o,n,m,l,k,j,i=t.TT,h=A.a([a],i),g=A.a([b],i) +for(s=b,r=a;r!==s;){q=r.c +p=s.c +if(q>=p){o=r.gaU(r) +if(!(o instanceof A.r)||!o.nk(r))return null +h.push(o) +r=o}if(q<=p){n=s.gaU(s) +if(!(n instanceof A.r)||!n.nk(s))return null +g.push(n) +s=n}}m=new A.bd(new Float64Array(16)) +m.de() +l=new A.bd(new Float64Array(16)) +l.de() +for(k=g.length-1;k>0;k=j){j=k-1 +g[k].dj(g[j],m)}for(k=h.length-1;k>0;k=j){j=k-1 +h[k].dj(h[j],l)}if(l.fL(l)!==0){l.cP(0,m) +i=l}else i=null +return i}, +pa:function pa(a,b){this.a=a +this.b=b}, +D9:function D9(a,b,c,d,e,f,g,h,i,j,k,l){var _=this +_.c=a +_.d=b +_.e=c +_.f=d +_.r=e +_.w=f +_.x=g +_.y=h +_.Q=i +_.as=j +_.at=k +_.a=l}, +ZP:function ZP(a,b,c,d){var _=this +_.d=a +_.dD$=b +_.b9$=c +_.a=null +_.b=d +_.c=null}, +axU:function axU(a){this.a=a}, +IY:function IY(a,b,c,d){var _=this +_.A=a +_.al=b +_.bg=null +_.fr$=c +_.fy=_.fx=null +_.go=!1 +_.k1=_.id=null +_.k2=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=d +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +Z3:function Z3(a,b,c,d,e){var _=this +_.e=a +_.f=b +_.r=c +_.c=d +_.a=e}, +mW:function mW(){}, +ug:function ug(a,b){this.a=a +this.b=b}, +In:function In(a,b,c,d,e,f,g,h,i,j,k,l){var _=this +_.r=a +_.w=b +_.x=c +_.y=d +_.z=e +_.Q=f +_.as=g +_.at=h +_.c=i +_.d=j +_.e=k +_.a=l}, +ZM:function ZM(a,b,c){var _=this +_.db=_.cy=_.cx=_.CW=null +_.e=_.d=$ +_.e9$=a +_.c0$=b +_.a=null +_.b=c +_.c=null}, +axF:function axF(){}, +axG:function axG(){}, +axH:function axH(){}, +axI:function axI(){}, +Jz:function Jz(a,b,c,d){var _=this +_.c=a +_.d=b +_.e=c +_.a=d}, +a24:function a24(a,b,c){this.b=a +this.c=b +this.a=c}, +a4C:function a4C(){}, +ZN:function ZN(){}, +NG:function NG(){}, +b1u(a){return new A.Io(a,B.k,1,B.y,-1)}, +i1(a,b,c){if(c.h("bA<0>").b(a))return a.U(b) +return a}, +b2(a,b,c,d,e){if(a==null&&b==null)return null +return new A.Ib(a,b,c,d,e.h("Ib<0>"))}, +aGl(a){var s=A.aS(t.ui) +if(a!=null)s.E(0,a) +return new A.Qj(s,$.aO())}, +cF:function cF(a,b){this.a=a +this.b=b}, +Qg:function Qg(){}, +ZQ:function ZQ(a,b){this.c=a +this.a=b}, +Qi:function Qi(){}, +Y_:function Y_(){}, +Qf:function Qf(){}, +Io:function Io(a,b,c,d,e){var _=this +_.x=a +_.a=b +_.b=c +_.c=d +_.d=e}, +bA:function bA(){}, +Ib:function Ib(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.$ti=e}, +bB:function bB(a,b){this.a=a +this.$ti=b}, +cr:function cr(a,b){this.a=a +this.$ti=b}, +Qj:function Qj(a,b){var _=this +_.a=a +_.fx$=0 +_.fy$=b +_.id$=_.go$=0 +_.k1$=!1}, +Qh:function Qh(){}, +ahy:function ahy(a,b,c){this.a=a +this.b=b +this.c=c}, +ahw:function ahw(){}, +ahx:function ahx(){}, +aYt(a,b,c){if(a===b)return a +return new A.Qo(A.aGn(a.a,b.a,c))}, +Qo:function Qo(a){this.a=a}, +aYu(a,b,c){if(a===b)return a +return new A.Df(A.l9(a.a,b.a,c))}, +Df:function Df(a){this.a=a}, +ZT:function ZT(){}, +aGn(a,b,c){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d=null +if(a==b)return a +s=a==null +r=s?d:a.a +q=b==null +p=q?d:b.a +o=t._ +p=A.b2(r,p,c,A.ch(),o) +r=s?d:a.b +r=A.b2(r,q?d:b.b,c,A.ch(),o) +n=s?d:a.c +o=A.b2(n,q?d:b.c,c,A.ch(),o) +n=s?d:a.d +m=q?d:b.d +m=A.b2(n,m,c,A.Lr(),t.PM) +n=s?d:a.e +l=q?d:b.e +l=A.b2(n,l,c,A.aIk(),t.pc) +n=s?d:a.f +k=q?d:b.f +j=t.tW +k=A.b2(n,k,c,A.Lq(),j) +n=s?d:a.r +n=A.b2(n,q?d:b.r,c,A.Lq(),j) +i=s?d:a.w +j=A.b2(i,q?d:b.w,c,A.Lq(),j) +i=s?d:a.x +h=q?d:b.x +g=s?d:a.y +f=q?d:b.y +f=A.b2(g,f,c,A.aI9(),t.KX) +g=c<0.5 +if(g)e=s?d:a.z +else e=q?d:b.z +if(g)g=s?d:a.Q +else g=q?d:b.Q +s=s?d:a.as +return new A.Qp(p,r,o,m,l,k,n,j,new A.Zq(i,h,c),f,e,g,A.qx(s,q?d:b.as,c))}, +Qp:function Qp(a,b,c,d,e,f,g,h,i,j,k,l,m){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.x=i +_.y=j +_.z=k +_.Q=l +_.as=m}, +Zq:function Zq(a,b,c){this.a=a +this.b=b +this.c=c}, +ZV:function ZV(){}, +aYv(a,b,c){if(a===b)return a +return new A.wW(A.aGn(a.a,b.a,c))}, +wW:function wW(a){this.a=a}, +ZW:function ZW(){}, +aYG(a,b,c){var s,r,q,p,o,n,m,l,k,j +if(a===b)return a +s=A.P(a.a,b.a,c) +r=A.y(a.b,b.b,c) +q=A.P(a.c,b.c,c) +p=A.y(a.d,b.d,c) +o=A.y(a.e,b.e,c) +n=A.y(a.f,b.f,c) +m=A.dS(a.r,b.r,c) +l=A.b2(a.w,b.w,c,A.Lo(),t.p8) +k=A.b2(a.x,b.x,c,A.aQN(),t.lF) +if(c<0.5)j=a.y +else j=b.y +return new A.Du(s,r,q,p,o,n,m,l,k,j)}, +Du:function Du(a,b,c,d,e,f,g,h,i,j){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.x=i +_.y=j}, +a_8:function a_8(){}, +aYH(a,b,c){var s,r,q,p,o,n,m,l,k +if(a===b)return a +s=A.P(a.a,b.a,c) +r=A.y(a.b,b.b,c) +q=A.P(a.c,b.c,c) +p=A.y(a.d,b.d,c) +o=A.y(a.e,b.e,c) +n=A.y(a.f,b.f,c) +m=A.dS(a.r,b.r,c) +l=a.w +l=A.aoE(l,l,c) +k=A.b2(a.x,b.x,c,A.Lo(),t.p8) +return new A.Dv(s,r,q,p,o,n,m,l,k,A.b2(a.y,b.y,c,A.aQN(),t.lF))}, +Dv:function Dv(a,b,c,d,e,f,g,h,i,j){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.x=i +_.y=j}, +a_a:function a_a(){}, +aYI(a,b,c){var s,r,q,p,o,n,m,l,k,j,i,h +if(a===b)return a +s=A.y(a.a,b.a,c) +r=A.P(a.b,b.b,c) +q=A.bb(a.c,b.c,c) +p=A.bb(a.d,b.d,c) +o=a.e +if(o==null)n=b.e==null +else n=!1 +if(n)o=null +else o=A.mU(o,b.e,c) +n=a.f +if(n==null)m=b.f==null +else m=!1 +if(m)n=null +else n=A.mU(n,b.f,c) +m=A.P(a.r,b.r,c) +l=c<0.5 +if(l)k=a.w +else k=b.w +if(l)l=a.x +else l=b.x +j=A.y(a.y,b.y,c) +i=A.dS(a.z,b.z,c) +h=A.P(a.Q,b.Q,c) +return new A.Dw(s,r,q,p,o,n,m,k,l,j,i,h,A.P(a.as,b.as,c))}, +Dw:function Dw(a,b,c,d,e,f,g,h,i,j,k,l,m){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.x=i +_.y=j +_.z=k +_.Q=l +_.as=m}, +a_b:function a_b(){}, +aYP(a,b,c){if(a===b)return a +return new A.DI(A.l9(a.a,b.a,c))}, +DI:function DI(a){this.a=a}, +a_q:function a_q(){}, +aLP(a,b,c,d,e,f){return new A.iN(b,c,e,d,a,f.h("iN<0>"))}, +Dc:function Dc(){}, +iN:function iN(a,b,c,d,e,f){var _=this +_.r=a +_.c=b +_.d=c +_.a=d +_.b=e +_.$ti=f}, +IL:function IL(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q){var _=this +_.bZ=a +_.bt=b +_.B=c +_.fy=!1 +_.id=_.go=null +_.k1=d +_.k2=e +_.k3=f +_.k4=g +_.ok=h +_.p1=$ +_.p2=null +_.p3=$ +_.fN$=i +_.mS$=j +_.y=k +_.z=null +_.Q=!1 +_.at=_.as=null +_.ax=l +_.CW=_.ch=null +_.e=m +_.a=null +_.b=n +_.c=o +_.d=p +_.$ti=q}, +KR:function KR(){}, +aQ_(a,b,c){var s,r +a.de() +if(b===1)return +a.ei(0,b,b) +s=c.a +r=c.b +a.au(0,-((s*b-s)/2),-((r*b-r)/2))}, +aP2(a,b,c,d){var s=new A.Ky(c,a,d,b,new A.bd(new Float64Array(16)),A.ag(t.o0),A.ag(t.bq),$.aO()),r=s.gdm() +a.Z(0,r) +a.h3(s.gu8()) +d.a.Z(0,r) +b.Z(0,r) +return s}, +aP3(a,b,c,d){var s=new A.Kz(c,d,b,a,new A.bd(new Float64Array(16)),A.ag(t.o0),A.ag(t.bq),$.aO()),r=s.gdm() +d.a.Z(0,r) +b.Z(0,r) +a.h3(s.gu8()) +return s}, +a4o:function a4o(a,b,c,d,e,f){var _=this +_.c=a +_.d=b +_.e=c +_.f=d +_.r=e +_.a=f}, +aCa:function aCa(a){this.a=a}, +aCb:function aCb(a){this.a=a}, +aCc:function aCc(a){this.a=a}, +aCd:function aCd(a){this.a=a}, +ql:function ql(a,b,c,d,e){var _=this +_.c=a +_.d=b +_.e=c +_.f=d +_.a=e}, +a4m:function a4m(a,b,c,d){var _=this +_.d=$ +_.mY$=a +_.ly$=b +_.mZ$=c +_.a=null +_.b=d +_.c=null}, +qm:function qm(a,b,c,d,e){var _=this +_.c=a +_.d=b +_.e=c +_.f=d +_.a=e}, +a4n:function a4n(a,b,c,d){var _=this +_.d=$ +_.mY$=a +_.ly$=b +_.mZ$=c +_.a=null +_.b=d +_.c=null}, +nd:function nd(){}, +Vz:function Vz(){}, +Nq:function Nq(){}, +QV:function QV(){}, +aj1:function aj1(a){this.a=a}, +zH:function zH(){}, +Ky:function Ky(a,b,c,d,e,f,g,h){var _=this +_.r=a +_.w=b +_.x=c +_.y=d +_.z=e +_.Q=f +_.as=g +_.fx$=0 +_.fy$=h +_.id$=_.go$=0 +_.k1$=!1}, +aC8:function aC8(a,b){this.a=a +this.b=b}, +Kz:function Kz(a,b,c,d,e,f,g,h){var _=this +_.r=a +_.w=b +_.x=c +_.y=d +_.z=e +_.Q=f +_.as=g +_.fx$=0 +_.fy$=h +_.id$=_.go$=0 +_.k1$=!1}, +aC9:function aC9(a,b){this.a=a +this.b=b}, +a_w:function a_w(){}, +L0:function L0(){}, +L1:function L1(){}, +aZi(a,b,c){var s,r,q,p,o,n,m,l,k,j,i +if(a===b)return a +s=A.y(a.a,b.a,c) +r=A.dS(a.b,b.b,c) +q=A.P(a.c,b.c,c) +p=A.y(a.d,b.d,c) +o=A.y(a.e,b.e,c) +n=A.bb(a.f,b.f,c) +m=A.b2(a.r,b.r,c,A.Lo(),t.p8) +l=c<0.5 +if(l)k=a.w +else k=b.w +if(l)j=a.x +else j=b.x +if(l)l=a.y +else l=b.y +i=A.y(a.z,b.z,c) +return new A.E6(s,r,q,p,o,n,m,k,j,l,i,A.P(a.Q,b.Q,c))}, +E6:function E6(a,b,c,d,e,f,g,h,i,j,k,l){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.x=i +_.y=j +_.z=k +_.Q=l}, +a0f:function a0f(){}, +asC:function asC(a,b){this.a=a +this.b=b}, +RS:function RS(){}, +WI:function WI(a,b,c,d,e,f,g,h,i,j,k,l,m){var _=this +_.b=a +_.c=b +_.d=c +_.e=d +_.f=e +_.r=f +_.w=g +_.x=h +_.y=i +_.z=j +_.Q=k +_.as=l +_.a=m}, +AW:function AW(a){this.a=a}, +WJ:function WJ(a,b,c){var _=this +_.d=$ +_.e9$=a +_.c0$=b +_.a=null +_.b=c +_.c=null}, +aui:function aui(a){this.a=a}, +auh:function auh(a,b,c,d,e,f){var _=this +_.f=a +_.r=$ +_.a=b +_.b=c +_.c=d +_.d=e +_.e=f}, +KF:function KF(){}, +aZB(a,b,c){var s,r,q,p +if(a===b)return a +s=A.y(a.a,b.a,c) +r=A.y(a.b,b.b,c) +q=A.P(a.c,b.c,c) +p=A.y(a.d,b.d,c) +return new A.xl(s,r,q,p,A.y(a.e,b.e,c))}, +aMy(a){var s +a.ap(t.C0) +s=A.ak(a) +return s.eP}, +xl:function xl(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e}, +a0h:function a0h(){}, +aZF(a,b,c){var s,r,q,p,o,n +if(a===b&&!0)return a +s=c<0.5 +if(s)r=a.a +else r=b.a +q=t._ +p=A.b2(a.b,b.b,c,A.ch(),q) +if(s)o=a.e +else o=b.e +q=A.b2(a.c,b.c,c,A.ch(),q) +n=A.P(a.d,b.d,c) +if(s)s=a.f +else s=b.f +return new A.Ef(r,p,q,n,o,s)}, +Ef:function Ef(a,b,c,d,e,f){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f}, +a0s:function a0s(){}, +aGS(a,b,c,d){return new A.u0(a,c,d,b,null)}, +F0(a){var s=a.vC(t.Np) +if(s!=null)return s +throw A.c(A.wb(A.a([A.oB("Scaffold.of() called with a context that does not contain a Scaffold."),A.bo("No Scaffold ancestor could be found starting from the context that was passed to Scaffold.of(). This usually happens when the context provided is from the same StatefulWidget as that whose build function actually creates the Scaffold widget being sought."),A.Om('There are several ways to avoid this problem. The simplest is to use a Builder to get a context that is "under" the Scaffold. For an example of this, please see the documentation for Scaffold.of():\n https://api.flutter.dev/flutter/material/Scaffold/of.html'),A.Om("A more efficient solution is to split your build function into several widgets. This introduces a new context from which you can obtain the Scaffold. In this solution, you would have an outer widget that creates the Scaffold populated by instances of your new inner widgets, and then in these inner widgets you would use Scaffold.of().\nA less elegant but more expedient solution is assign a GlobalKey to the Scaffold, then use the key.currentState property to obtain the ScaffoldState rather than using the Scaffold.of() function."),a.anW("The context used was")],t.E)))}, +ip:function ip(a,b){this.a=a +this.b=b}, +F_:function F_(a,b){this.c=a +this.a=b}, +T4:function T4(a,b,c,d,e,f){var _=this +_.d=a +_.e=b +_.r=c +_.y=_.x=null +_.dD$=d +_.b9$=e +_.a=null +_.b=f +_.c=null}, +amZ:function amZ(a,b,c){this.a=a +this.b=b +this.c=c}, +Je:function Je(a,b,c){this.f=a +this.b=b +this.a=c}, +an_:function an_(a,b,c,d,e,f,g,h,i){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.y=i}, +T3:function T3(a,b){this.a=a +this.b=b}, +a1A:function a1A(a,b,c){var _=this +_.a=a +_.b=null +_.c=b +_.fx$=0 +_.fy$=c +_.id$=_.go$=0 +_.k1$=!1}, +H2:function H2(a,b,c,d,e,f,g){var _=this +_.e=a +_.f=b +_.r=c +_.a=d +_.b=e +_.c=f +_.d=g}, +Wr:function Wr(a,b,c,d){var _=this +_.c=a +_.d=b +_.e=c +_.a=d}, +aA5:function aA5(a,b,c,d,e,f,g,h,i,j,k,l,m){var _=this +_.d=a +_.e=b +_.f=c +_.r=d +_.w=e +_.x=f +_.y=g +_.z=h +_.Q=i +_.as=j +_.at=k +_.ax=l +_.ay=m +_.c=_.b=null}, +HQ:function HQ(a,b,c,d,e,f){var _=this +_.c=a +_.d=b +_.e=c +_.f=d +_.r=e +_.a=f}, +HR:function HR(a,b,c){var _=this +_.x=_.w=_.r=_.f=_.e=_.d=$ +_.y=null +_.dD$=a +_.b9$=b +_.a=null +_.b=c +_.c=null}, +avl:function avl(a,b){this.a=a +this.b=b}, +u0:function u0(a,b,c,d,e){var _=this +_.e=a +_.f=b +_.Q=c +_.ch=d +_.a=e}, +xI:function xI(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p){var _=this +_.d=a +_.e=b +_.f=c +_.r=null +_.w=d +_.x=e +_.Q=_.z=_.y=null +_.as=f +_.at=null +_.ax=g +_.ay=null +_.CW=_.ch=$ +_.cy=_.cx=null +_.dx=_.db=$ +_.dy=!1 +_.fr=h +_.c6$=i +_.ha$=j +_.Az$=k +_.hb$=l +_.j1$=m +_.dD$=n +_.b9$=o +_.a=null +_.b=p +_.c=null}, +an0:function an0(a,b){this.a=a +this.b=b}, +an2:function an2(a,b){this.a=a +this.b=b}, +an1:function an1(a,b){this.a=a +this.b=b}, +an3:function an3(a,b,c,d,e,f,g){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g}, +XF:function XF(a,b){this.e=a +this.a=b +this.b=null}, +a1B:function a1B(a,b,c){this.f=a +this.b=b +this.a=c}, +aA6:function aA6(){}, +Jf:function Jf(){}, +Jg:function Jg(){}, +Jh:function Jh(){}, +KJ:function KJ(){}, +Tl:function Tl(a,b,c){this.c=a +this.d=b +this.a=c}, +zc:function zc(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var _=this +_.fy=a +_.c=b +_.d=c +_.e=d +_.r=e +_.w=f +_.Q=g +_.ay=h +_.ch=i +_.CW=j +_.cx=k +_.cy=l +_.db=m +_.a=n}, +ZO:function ZO(a,b,c,d){var _=this +_.cy=$ +_.dx=_.db=!1 +_.fx=_.fr=_.dy=$ +_.w=_.r=_.f=_.e=_.d=null +_.y=_.x=$ +_.z=a +_.as=_.Q=!1 +_.at=$ +_.dD$=b +_.b9$=c +_.a=null +_.b=d +_.c=null}, +axN:function axN(a){this.a=a}, +axK:function axK(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +axM:function axM(a,b,c){this.a=a +this.b=b +this.c=c}, +axL:function axL(a,b,c){this.a=a +this.b=b +this.c=c}, +axJ:function axJ(a){this.a=a}, +axT:function axT(a){this.a=a}, +axS:function axS(a){this.a=a}, +axR:function axR(a){this.a=a}, +axP:function axP(a){this.a=a}, +axQ:function axQ(a){this.a=a}, +axO:function axO(a){this.a=a}, +b_i(a,b,c){var s,r,q,p,o,n,m,l,k,j,i +if(a===b&&!0)return a +s=t.X7 +r=A.b2(a.a,b.a,c,A.aRy(),s) +q=A.b2(a.b,b.b,c,A.Lr(),t.PM) +s=A.b2(a.c,b.c,c,A.aRy(),s) +p=a.d +o=b.d +n=c<0.5 +p=n?p:o +o=a.e +m=b.e +o=n?o:m +n=A.Eg(a.f,b.f,c) +m=t._ +l=A.b2(a.r,b.r,c,A.ch(),m) +k=A.b2(a.w,b.w,c,A.ch(),m) +m=A.b2(a.x,b.x,c,A.ch(),m) +j=A.P(a.y,b.y,c) +i=A.P(a.z,b.z,c) +return new A.Fd(r,q,s,p,o,n,l,k,m,j,i,A.P(a.Q,b.Q,c))}, +b4_(a,b,c){return c<0.5?a:b}, +Fd:function Fd(a,b,c,d,e,f,g,h,i,j,k,l){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.x=i +_.y=j +_.z=k +_.Q=l}, +a1P:function a1P(){}, +b_k(a,b,c){var s,r,q,p,o,n,m,l,k,j,i,h +if(a===b)return a +s=A.b2(a.a,b.a,c,A.Lr(),t.PM) +r=t._ +q=A.b2(a.b,b.b,c,A.ch(),r) +p=A.b2(a.c,b.c,c,A.ch(),r) +o=A.b2(a.d,b.d,c,A.ch(),r) +r=A.b2(a.e,b.e,c,A.ch(),r) +n=A.b_j(a.f,b.f,c) +m=A.b2(a.r,b.r,c,A.aI9(),t.KX) +l=A.b2(a.w,b.w,c,A.aIk(),t.pc) +k=t.p8 +j=A.b2(a.x,b.x,c,A.Lo(),k) +k=A.b2(a.y,b.y,c,A.Lo(),k) +i=A.oq(a.z,b.z,c) +if(c<0.5)h=a.Q +else h=b.Q +return new A.Fe(s,q,p,o,r,n,m,l,j,k,i,h)}, +b_j(a,b,c){if(a==b)return a +return new A.Zp(a,b,c)}, +Fe:function Fe(a,b,c,d,e,f,g,h,i,j,k,l){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.x=i +_.y=j +_.z=k +_.Q=l}, +Zp:function Zp(a,b,c){this.a=a +this.b=b +this.c=c}, +a1Q:function a1Q(){}, +b_m(a,b,c){var s,r,q,p,o,n,m,l +if(a===b)return a +s=A.y(a.a,b.a,c) +r=A.P(a.b,b.b,c) +q=A.y(a.c,b.c,c) +p=A.b_l(a.d,b.d,c) +o=A.aMd(a.e,b.e,c) +n=a.f +m=b.f +l=A.bb(n,m,c) +n=A.bb(n,m,c) +m=A.oq(a.w,b.w,c) +return new A.Ff(s,r,q,p,o,l,n,m,A.y(a.x,b.x,c))}, +b_l(a,b,c){if(a==null||b==null)return null +if(a===b)return a +return A.aQ(a,b,c)}, +Ff:function Ff(a,b,c,d,e,f,g,h,i){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.x=i}, +a1R:function a1R(){}, +b_o(a,b,c){var s,r +if(a===b&&!0)return a +s=A.l9(a.a,b.a,c) +if(c<0.5)r=a.b +else r=b.b +return new A.Fg(s,r)}, +Fg:function Fg(a,b){this.a=a +this.b=b}, +a1S:function a1S(){}, +aOI(a){var s=a.wH(!1) +return new A.a39(a,new A.dF(s,B.m1,B.c2),$.aO())}, +b_q(a,b){return new A.LD(b.gamN(),b.gamM(),null)}, +a39:function a39(a,b,c){var _=this +_.ax=a +_.a=b +_.fx$=0 +_.fy$=c +_.id$=_.go$=0 +_.k1$=!1}, +a1V:function a1V(a,b){var _=this +_.x=a +_.a=b +_.b=!0 +_.c=!1 +_.e=_.d=0 +_.r=_.f=null +_.w=!1}, +Fh:function Fh(a,b){this.c=a +this.a=b}, +Jt:function Jt(a,b){var _=this +_.d=$ +_.e=null +_.f=!1 +_.w=_.r=$ +_.x=a +_.a=null +_.b=b +_.c=null}, +aAq:function aAq(a,b){this.a=a +this.b=b}, +aAp:function aAp(a,b){this.a=a +this.b=b}, +aAr:function aAr(a){this.a=a}, +aH_(a,b,c,d){return new A.FC(d,c,b,a,null)}, +b1U(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,a0){var s=null,r=new A.zs(o,A.nB(s,s,s,s,s,B.az,s,s,B.ab,B.a_),a0,l,j,m,b,f,n,q,k,i,h,g,p,d,e,a,!1,A.ag(t.T)) +r.aw() +r.a6v(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,a0) +return r}, +aAR:function aAR(a,b){this.a=a +this.b=b}, +TL:function TL(a,b){this.a=a +this.b=b}, +FC:function FC(a,b,c,d,e){var _=this +_.c=a +_.e=b +_.w=c +_.x=d +_.a=e}, +JD:function JD(a,b,c,d,e){var _=this +_.r=_.f=_.e=_.d=$ +_.w=null +_.x=a +_.y=$ +_.z=null +_.Q=!1 +_.as=null +_.ax=_.at=!1 +_.ay=b +_.ch=null +_.dD$=c +_.b9$=d +_.a=null +_.b=e +_.c=null}, +aAO:function aAO(a,b){this.a=a +this.b=b}, +aAP:function aAP(a,b){this.a=a +this.b=b}, +aAM:function aAM(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +aAN:function aAN(a){this.a=a}, +aAL:function aAL(a){this.a=a}, +aAQ:function aAQ(a){this.a=a}, +a2l:function a2l(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p){var _=this +_.d=a +_.e=b +_.f=c +_.r=d +_.w=e +_.x=f +_.y=g +_.z=h +_.Q=i +_.as=j +_.at=k +_.ax=l +_.ay=m +_.ch=n +_.CW=o +_.a=p}, +zs:function zs(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0){var _=this +_.B=a +_.X=_.a9=_.F=$ +_.aq=b +_.aD=_.aH=$ +_.aE=!1 +_.bj=0 +_.bM=null +_.bc=c +_.cY=d +_.cZ=e +_.d9=f +_.eO=g +_.eP=h +_.cv=i +_.dv=j +_.av=k +_.cj=l +_.e0=m +_.bE=n +_.cI=o +_.hD=p +_.f6=q +_.dO=!1 +_.hd=r +_.r0$=s +_.fy=_.fx=null +_.go=!1 +_.k1=_.id=null +_.k2=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=a0 +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +azv:function azv(a){this.a=a}, +azt:function azt(){}, +azs:function azs(){}, +azu:function azu(a){this.a=a}, +kQ:function kQ(a){this.a=a}, +zw:function zw(a,b){this.a=a +this.b=b}, +a3X:function a3X(a,b){this.d=a +this.a=b}, +a1a:function a1a(a,b,c){var _=this +_.B=$ +_.F=a +_.r0$=b +_.fy=_.fx=null +_.go=!1 +_.k1=_.id=null +_.k2=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=c +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +aAJ:function aAJ(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,b0,b1,b2){var _=this +_.k4=a +_.ok=$ +_.a=b +_.b=c +_.c=d +_.d=e +_.e=f +_.f=g +_.r=h +_.w=i +_.x=j +_.y=k +_.z=l +_.Q=m +_.as=n +_.at=o +_.ax=p +_.ay=q +_.ch=r +_.CW=s +_.cx=a0 +_.cy=a1 +_.db=a2 +_.dx=a3 +_.dy=a4 +_.fr=a5 +_.fx=a6 +_.fy=a7 +_.go=a8 +_.id=a9 +_.k1=b0 +_.k2=b1 +_.k3=b2}, +aAK:function aAK(a){this.a=a}, +KT:function KT(){}, +KV:function KV(){}, +KZ:function KZ(){}, +aNf(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,b0,b1){return new A.xV(a7,b,k,a1,e,h,g,a,j,d,f,a3,n,i,o,a9,p,a6,a5,a8,b0,r,q,s,a0,a2,b1,l,a4,m,c)}, +b_K(b2,b3,b4){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,b0,b1 +if(b2===b3)return b2 +s=A.P(b2.a,b3.a,b4) +r=A.y(b2.b,b3.b,b4) +q=A.y(b2.c,b3.c,b4) +p=A.y(b2.d,b3.d,b4) +o=A.y(b2.e,b3.e,b4) +n=A.y(b2.r,b3.r,b4) +m=A.y(b2.f,b3.f,b4) +l=A.y(b2.w,b3.w,b4) +k=A.y(b2.x,b3.x,b4) +j=A.y(b2.y,b3.y,b4) +i=A.y(b2.z,b3.z,b4) +h=A.y(b2.Q,b3.Q,b4) +g=A.y(b2.as,b3.as,b4) +f=A.y(b2.at,b3.at,b4) +e=A.y(b2.ax,b3.ax,b4) +d=A.y(b2.ay,b3.ay,b4) +c=b4<0.5 +b=c?b2.ch:b3.ch +a=c?b2.CW:b3.CW +a0=c?b2.cx:b3.cx +a1=c?b2.cy:b3.cy +a2=c?b2.db:b3.db +a3=c?b2.dx:b3.dx +a4=c?b2.dy:b3.dy +a5=c?b2.fr:b3.fr +a6=c?b2.fx:b3.fx +a7=c?b2.fy:b3.fy +a8=A.bb(b2.go,b3.go,b4) +a9=A.P(b2.id,b3.id,b4) +b0=c?b2.k1:b3.k1 +b1=c?b2.k2:b3.k2 +return A.aNf(l,r,c?b2.k3:b3.k3,j,o,i,n,m,f,k,q,a9,b1,g,e,b,a4,a3,a5,a6,p,a7,h,b0,a0,a,s,a1,d,a2,a8)}, +aot:function aot(a,b){this.a=a +this.b=b}, +xV:function xV(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,b0,b1){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.x=i +_.y=j +_.z=k +_.Q=l +_.as=m +_.at=n +_.ax=o +_.ay=p +_.ch=q +_.CW=r +_.cx=s +_.cy=a0 +_.db=a1 +_.dx=a2 +_.dy=a3 +_.fr=a4 +_.fx=a5 +_.fy=a6 +_.go=a7 +_.id=a8 +_.k1=a9 +_.k2=b0 +_.k3=b1}, +aoM:function aoM(){}, +aoN:function aoN(){}, +aoO:function aoO(){}, +a7x:function a7x(){}, +amq:function amq(){}, +amp:function amp(){}, +amo:function amo(){}, +amn:function amn(){}, +akQ:function akQ(){}, +ab7:function ab7(){}, +a1r:function a1r(){}, +a2m:function a2m(){}, +FE:function FE(a,b){this.a=a +this.b=b}, +b_N(a,b,c){var s,r,q,p,o,n,m,l,k,j,i,h +if(a===b&&!0)return a +s=A.y(a.a,b.a,c) +r=A.y(a.b,b.b,c) +q=A.y(a.c,b.c,c) +p=A.bb(a.d,b.d,c) +o=A.P(a.e,b.e,c) +n=A.dS(a.f,b.f,c) +if(c<0.5)m=a.r +else m=b.r +l=A.P(a.w,b.w,c) +k=A.BJ(a.x,b.x,c) +j=A.y(a.z,b.z,c) +i=A.P(a.Q,b.Q,c) +h=A.y(a.as,b.as,c) +return new A.FF(s,r,q,p,o,n,m,l,k,j,i,h,A.y(a.at,b.at,c))}, +FF:function FF(a,b,c,d,e,f,g,h,i,j,k,l,m){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.x=i +_.z=j +_.Q=k +_.as=l +_.at=m}, +a2r:function a2r(){}, +aNp(a,b){return new A.Um(b,a,null)}, +aB6:function aB6(a,b){this.a=a +this.b=b}, +Um:function Um(a,b,c){this.c=a +this.d=b +this.a=c}, +Ip:function Ip(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4,a5,a6){var _=this +_.c=a +_.d=b +_.e=c +_.f=d +_.r=e +_.w=f +_.x=g +_.y=h +_.z=i +_.Q=j +_.as=k +_.at=l +_.ax=m +_.ay=n +_.ch=o +_.cx=p +_.cy=q +_.db=r +_.dx=s +_.dy=a0 +_.fr=a1 +_.fx=a2 +_.fy=a3 +_.go=a4 +_.id=a5 +_.a=a6}, +Iq:function Iq(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p){var _=this +_.d=a +_.e=!1 +_.kB$=b +_.kC$=c +_.lA$=d +_.vy$=e +_.vz$=f +_.r6$=g +_.vA$=h +_.r7$=i +_.AI$=j +_.ov$=k +_.n0$=l +_.n1$=m +_.dD$=n +_.b9$=o +_.a=null +_.b=p +_.c=null}, +axW:function axW(a){this.a=a}, +axX:function axX(a){this.a=a}, +axV:function axV(a){this.a=a}, +axY:function axY(a,b){this.a=a +this.b=b}, +JV:function JV(a){var _=this +_.aM=_.bG=_.aL=_.y2=_.y1=_.xr=_.x2=_.x1=_.to=_.ry=_.rx=_.RG=_.R8=_.p4=_.p3=_.p2=_.p1=_.ok=_.k4=_.k3=_.k2=_.k1=_.id=_.go=_.fy=_.fx=_.fr=_.dy=_.dx=_.db=null +_.B=_.bt=_.bZ=_.bq=_.aJ=null +_.a9=_.F=!1 +_.at=_.as=_.Q=_.z=_.y=_.x=_.w=_.r=_.f=_.e=_.d=_.c=_.b=_.a=_.aq=_.X=null +_.fx$=0 +_.fy$=a +_.id$=_.go$=0 +_.k1$=!1}, +aB5:function aB5(a,b,c){this.a=a +this.b=b +this.c=c}, +aAZ:function aAZ(){}, +aB0:function aB0(a,b,c,d,e,f,g,h,i,j){var _=this +_.y=a +_.z=$ +_.a=b +_.b=c +_.c=d +_.d=e +_.e=f +_.f=g +_.r=h +_.w=i +_.x=j}, +aB2:function aB2(a){this.a=a}, +aB3:function aB3(a){this.a=a}, +aB4:function aB4(a){this.a=a}, +aB1:function aB1(a){this.a=a}, +a2J:function a2J(a,b){this.a=a +this.b=b}, +aB_:function aB_(a){this.a=a}, +KM:function KM(){}, +KN:function KN(){}, +a55:function a55(){}, +b04(a,b,c){var s,r,q,p,o,n,m,l,k +if(a===b&&!0)return a +s=t._ +r=A.b2(a.a,b.a,c,A.ch(),s) +q=A.b2(a.b,b.b,c,A.ch(),s) +p=A.b2(a.c,b.c,c,A.ch(),s) +o=A.b2(a.d,b.d,c,A.Lr(),t.PM) +n=c<0.5 +if(n)m=a.e +else m=b.e +if(n)l=a.f +else l=b.f +s=A.b2(a.r,b.r,c,A.ch(),s) +k=A.P(a.w,b.w,c) +if(n)n=a.x +else n=b.x +return new A.yc(r,q,p,o,m,l,s,k,n)}, +aNq(a){var s +a.ap(t.NW) +s=A.ak(a) +return s.cI}, +yc:function yc(a,b,c,d,e,f,g,h,i){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.x=i}, +a2K:function a2K(){}, +b06(a,b,c){var s,r,q,p,o,n,m,l,k,j,i,h,g,f +if(a===b)return a +s=A.aad(a.a,b.a,c) +r=A.y(a.b,b.b,c) +q=c<0.5 +p=q?a.c:b.c +o=A.y(a.d,b.d,c) +n=q?a.e:b.e +m=A.y(a.f,b.f,c) +l=A.ev(a.r,b.r,c) +k=A.bb(a.w,b.w,c) +j=A.y(a.x,b.x,c) +i=A.bb(a.y,b.y,c) +h=A.b2(a.z,b.z,c,A.ch(),t._) +g=q?a.Q:b.Q +f=q?a.as:b.as +return new A.FY(s,r,p,o,n,m,l,k,j,i,h,g,f,q?a.at:b.at)}, +FY:function FY(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.x=i +_.y=j +_.z=k +_.Q=l +_.as=m +_.at=n}, +a2N:function a2N(){}, +G6(a,b,c){var s=null +return new A.Ut(b,s,s,s,c,B.o,s,!1,s,!0,a,s)}, +aNv(a,b,c,d,e,f,g,h,i,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9){var s,r,q,p,o,n,m,l,k,j=null +if(e==null)s=j +else s=e +r=new A.JZ(a0,s) +q=c==null +if(q&&d==null)p=j +else if(d==null){q=q?j:new A.cr(c,t.Il) +p=q}else{q=new A.JZ(c,d) +p=q}o=new A.a2U(a0) +q=a8==null?j:new A.cr(a8,t.XL) +n=a4==null?j:new A.cr(a4,t.h9) +m=g==null?j:new A.cr(g,t.QL) +l=t.iL +k=a1==null?j:new A.cr(a1,l) +return A.a85(a,b,p,m,h,j,r,j,j,k,new A.cr(a2,l),new A.a2T(i,f),o,new A.cr(a3,t.Ak),n,new A.cr(a5,t.kU),j,a6,j,a7,q,a9)}, +b4m(a){var s +A.ak(a) +s=A.d_(a,B.fG) +s=s==null?null:s.gbK() +return A.aVy(B.LE,B.ol,B.LM,(s==null?B.ab:s).a)}, +Ut:function Ut(a,b,c,d,e,f,g,h,i,j,k,l){var _=this +_.c=a +_.d=b +_.e=c +_.f=d +_.r=e +_.w=f +_.x=g +_.y=h +_.z=i +_.Q=j +_.as=k +_.a=l}, +JZ:function JZ(a,b){this.a=a +this.b=b}, +a2U:function a2U(a){this.a=a}, +a2T:function a2T(a,b){this.a=a +this.b=b}, +a2V:function a2V(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3){var _=this +_.dy=a +_.fr=$ +_.a=b +_.b=c +_.c=d +_.d=e +_.e=f +_.f=g +_.r=h +_.w=i +_.x=j +_.y=k +_.z=l +_.Q=m +_.as=n +_.at=o +_.ax=p +_.ay=q +_.ch=r +_.CW=s +_.cx=a0 +_.cy=a1 +_.db=a2 +_.dx=a3}, +aB9:function aB9(a){this.a=a}, +aBb:function aBb(a){this.a=a}, +aBa:function aBa(){}, +a56:function a56(){}, +b0b(a,b,c){if(a===b)return a +return new A.G7(A.l9(a.a,b.a,c))}, +G7:function G7(a){this.a=a}, +a2W:function a2W(){}, +Qk:function Qk(){}, +ahz:function ahz(){}, +a3_:function a3_(a,b){this.b=a +this.a=b}, +ZR:function ZR(){}, +b0h(a,b,c){var s,r +if(a===b)return a +s=A.y(a.a,b.a,c) +r=A.y(a.b,b.b,c) +return new A.Gk(s,r,A.y(a.c,b.c,c))}, +Gk:function Gk(a,b,c){this.a=a +this.b=b +this.c=c}, +a31:function a31(){}, +b0i(a,b,c){return new A.UE(a,b,c,null)}, +b0p(a,b){return new A.a32(b,null)}, +b25(a){var s,r=null,q=a.a.a +switch(q){case 1:s=A.Gn(r,r,r,r).ax.cy===a.cy +break +case 0:s=A.Gn(B.ao,r,r,r).ax.cy===a.cy +break +default:s=r}if(!s)return a.cy +switch(q){case 1:q=B.i +break +case 0:q=B.cb +break +default:q=r}return q}, +UE:function UE(a,b,c,d){var _=this +_.c=a +_.d=b +_.e=c +_.a=d}, +K3:function K3(a,b,c,d){var _=this +_.c=a +_.d=b +_.e=c +_.a=d}, +a36:function a36(a,b,c,d){var _=this +_.d=!1 +_.e=a +_.dD$=b +_.b9$=c +_.a=null +_.b=d +_.c=null}, +aBt:function aBt(a){this.a=a}, +aBs:function aBs(a){this.a=a}, +a37:function a37(a,b,c,d){var _=this +_.e=a +_.f=b +_.c=c +_.a=d}, +a38:function a38(a,b,c,d){var _=this +_.A=null +_.a1=a +_.al=b +_.fr$=c +_.fy=_.fx=null +_.go=!1 +_.k1=_.id=null +_.k2=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=d +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +aBu:function aBu(a,b,c){this.a=a +this.b=b +this.c=c}, +a33:function a33(a,b,c,d){var _=this +_.e=a +_.f=b +_.c=c +_.a=d}, +a34:function a34(a,b,c){var _=this +_.k4=$ +_.ok=a +_.ax=null +_.ay=!1 +_.c=_.b=_.a=_.ch=null +_.d=$ +_.e=b +_.f=null +_.r=c +_.y=_.x=null +_.z=!1 +_.Q=!0 +_.at=_.as=!1}, +a19:function a19(a,b,c,d,e,f){var _=this +_.B=-1 +_.F=a +_.a9=b +_.e_$=c +_.a4$=d +_.d8$=e +_.fy=_.fx=null +_.go=!1 +_.k1=_.id=null +_.k2=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=f +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +azw:function azw(a,b,c){this.a=a +this.b=b +this.c=c}, +azx:function azx(a,b,c){this.a=a +this.b=b +this.c=c}, +azz:function azz(a,b){this.a=a +this.b=b}, +azy:function azy(a,b,c){this.a=a +this.b=b +this.c=c}, +azA:function azA(a){this.a=a}, +a32:function a32(a,b){this.c=a +this.a=b}, +a35:function a35(a,b,c,d){var _=this +_.c=a +_.d=b +_.e=c +_.a=d}, +a4V:function a4V(){}, +a57:function a57(){}, +b0m(a){if(a===B.BM||a===B.mE)return 14.5 +return 9.5}, +b0o(a){if(a===B.BN||a===B.mE)return 14.5 +return 9.5}, +b0n(a,b){if(a===0)return b===1?B.mE:B.BM +if(a===b-1)return B.BN +return B.a74}, +b0l(a){var s,r=null,q=a.a.a +switch(q){case 1:s=A.Gn(r,r,r,r).ax.db===a.db +break +case 0:s=A.Gn(B.ao,r,r,r).ax.db===a.db +break +default:s=r}if(!s)return a.db +switch(q){case 1:q=B.k +break +case 0:q=B.i +break +default:q=r}return q}, +zB:function zB(a,b){this.a=a +this.b=b}, +UG:function UG(a,b,c,d){var _=this +_.c=a +_.d=b +_.e=c +_.a=d}, +ar0(a,b,c,d,e,f,a0,a1,a2,a3,a4,a5,a6,a7,a8){var s=null,r=d==null?s:d,q=e==null?s:e,p=f==null?s:f,o=a1==null?s:a1,n=a2==null?s:a2,m=a6==null?s:a6,l=a7==null?s:a7,k=a8==null?s:a8,j=a==null?s:a,i=b==null?s:b,h=c==null?s:c,g=a3==null?s:a3 +return new A.dM(r,q,p,a0,o,n,m,l,k,j,i,h,g,a4,a5==null?s:a5)}, +ym(a,b,c){var s,r,q,p,o,n,m,l,k,j,i,h,g,f +if(a===b&&!0)return a +s=A.bb(a.a,b.a,c) +r=A.bb(a.b,b.b,c) +q=A.bb(a.c,b.c,c) +p=A.bb(a.d,b.d,c) +o=A.bb(a.e,b.e,c) +n=A.bb(a.f,b.f,c) +m=A.bb(a.r,b.r,c) +l=A.bb(a.w,b.w,c) +k=A.bb(a.x,b.x,c) +j=A.bb(a.y,b.y,c) +i=A.bb(a.z,b.z,c) +h=A.bb(a.Q,b.Q,c) +g=A.bb(a.as,b.as,c) +f=A.bb(a.at,b.at,c) +return A.ar0(j,i,h,s,r,q,p,o,n,g,f,A.bb(a.ax,b.ax,c),m,l,k)}, +dM:function dM(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.x=i +_.y=j +_.z=k +_.Q=l +_.as=m +_.at=n +_.ax=o}, +a3b:function a3b(){}, +ak(a){var s,r=a.ap(t.Nr),q=A.n7(a,B.ck,t.c4)==null?null:B.zD +if(q==null)q=B.zD +s=r==null?null:r.w.c +if(s==null)s=$.aSw() +return A.b0u(s,s.p4.a_P(q))}, +Gm:function Gm(a,b,c){this.c=a +this.d=b +this.a=c}, +I6:function I6(a,b,c){this.w=a +this.b=b +this.a=c}, +uu:function uu(a,b){this.a=a +this.b=b}, +Ab:function Ab(a,b,c,d,e,f){var _=this +_.r=a +_.w=b +_.c=c +_.d=d +_.e=e +_.a=f}, +VP:function VP(a,b,c){var _=this +_.CW=null +_.e=_.d=$ +_.e9$=a +_.c0$=b +_.a=null +_.b=c +_.c=null}, +asX:function asX(){}, +Gn(d2,d3,d4,d5){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,b0,b1,b2,b3,b4,b5,b6,b7,b8,b9,c0,c1,c2,c3,c4,c5,c6,c7,c8,c9=null,d0=A.a([],t.FO),d1=A.by() +switch(d1.a){case 0:case 1:case 2:s=B.TS +break +case 3:case 4:case 5:s=B.TT +break +default:s=c9}r=A.b0Q(d1) +d5=d5!==!1 +if(d5)q=B.Er +else q=B.Es +if(d2==null)p=c9 +else p=d2 +if(p==null)p=B.ad +o=p===B.ao +if(d5){n=o?B.EN:B.EM +m=o?n.cy:n.b +l=o?n.db:n.c +k=n.CW +if(d3==null)d3=k +j=n.cy +i=n.fr +if(i==null)i=n.cx +h=n.at +g=d2===B.ao +f=m +e=l +d=k +c=j +b=d}else{f=c9 +e=f +h=e +i=h +d=i +n=d +c=n +k=c +j=k +b=j +g=b}if(f==null)f=o?B.nv:B.eS +a=A.ar7(f) +a0=o?B.nG:B.nI +a1=o?B.k:B.nt +a2=a===B.ao +if(o)a3=B.nB +else{a4=n==null?c9:n.f +a3=a4==null?B.jx:a4}a5=o?A.C(31,255,255,255):A.C(31,0,0,0) +a6=o?A.C(10,255,255,255):A.C(10,0,0,0) +if(k==null)k=o?B.jy:B.nQ +if(d3==null)d3=k +if(c==null)c=o?B.cb:B.i +if(i==null)i=o?B.Kl:B.Kk +if(n==null){a7=o?B.nB:B.l +a4=o?B.h_:B.jC +a8=A.ar7(B.eS)===B.ao +a9=A.ar7(a7) +b0=a8?B.i:B.k +a9=a9===B.ao?B.i:B.k +b1=o?B.i:B.k +b2=a8?B.i:B.k +n=A.aFo(a4,p,B.jE,c9,c9,c9,b2,o?B.k:B.i,c9,c9,b0,c9,a9,c9,b1,c9,c9,c9,c9,c9,B.eS,c9,c9,a7,c9,c9,c,c9,c9,c9,c9)}b3=o?B.M:B.R +b4=o?B.h_:B.nM +if(d==null)d=o?B.cb:B.i +if(e==null){e=n.f +if(e.j(0,f))e=B.i}b5=o?B.no:A.C(153,0,0,0) +b6=new A.Mw(o?B.jx:B.nL,c9,a5,a6,c9,c9,n,s) +b7=o?B.cR:B.ET +b8=o?B.nl:B.ju +b9=o?B.nl:B.EV +if(d5){c0=A.aNO(d1,c9,c9,B.a39,B.a38,B.a34) +a4=n.a===B.ad +c1=a4?n.db:n.cy +c2=a4?n.cy:n.db +a4=c0.a.Ul(c1,c1,c1) +a9=c0.b.Ul(c2,c2,c2) +c3=new A.yt(a4,a9,c0.c,c0.d,c0.e)}else c3=A.b0D(d1) +c4=o?c3.b:c3.a +c5=a2?c3.b:c3.a +d4=c4.cl(d4) +c6=c5.cl(c9) +c7=o?new A.dt(c9,c9,c9,c9,c9,$.aJd(),c9,c9):new A.dt(c9,c9,c9,c9,c9,$.aJc(),c9,c9) +c8=a2?B.NW:B.NV +if(h==null)h=B.jE +if(b==null)b=o?B.h_:B.jC +if(j==null)j=o?B.cb:B.i +return A.aH9(c9,B.BR,g===!0,b,B.C1,B.Tz,j,B.D0,B.D1,B.D2,B.Di,b6,k,c,B.EC,B.ED,B.EE,n,c9,B.KJ,B.KK,d,B.KW,b7,i,B.KX,B.La,B.Lb,B.LS,h,B.LY,A.b0s(d0),B.M8,B.Nj,a5,b8,b5,a6,B.NF,c7,e,B.DI,B.ON,s,B.TV,B.TW,B.TX,B.U8,B.U9,B.Ub,B.Vf,B.DV,d1,B.W8,f,a1,a0,c8,c6,B.Wa,B.Wd,d3,B.WH,B.WI,B.WJ,b4,B.WK,B.h0,B.k,B.Yd,B.Yh,b9,q,B.Z5,B.Z9,B.Za,B.ZG,d4,B.a3M,B.a3N,a3,B.a3R,c3,b3,d5,r)}, +aH9(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,b0,b1,b2,b3,b4,b5,b6,b7,b8,b9,c0,c1,c2,c3,c4,c5,c6,c7,c8,c9,d0,d1,d2,d3,d4,d5,d6,d7,d8,d9,e0,e1,e2,e3,e4,e5,e6,e7,e8,e9,f0,f1,f2,f3,f4,f5,f6,f7,f8,f9,g0,g1,g2,g3,g4,g5,g6){return new A.jJ(c,s,b2,c2,c4,d2,d3,e3,f3,!0,g6,g,m,n,r,a2,a4,a5,b5,b6,b7,b8,c1,d5,d6,d7,e2,e6,e8,e9,f2,g4,c0,d8,d9,f8,g3,a,b,e,f,h,i,j,k,l,o,p,q,a0,a1,a3,a6,a7,a8,a9,b1,b3,b4,b9,c3,c5,c6,c7,c8,c9,d0,d1,d4,e0,e1,e4,e5,e7,f0,f1,f4,f5,f6,f7,f9,g0,g2,b0,d,g1)}, +b0q(){return A.Gn(B.ad,null,null,null)}, +b0u(a,b){return $.aSv().bm(0,new A.z3(a,b),new A.ar8(a,b))}, +ar7(a){var s=a.V7()+0.05 +if(s*s>0.15)return B.ad +return B.ao}, +b0r(a,b,c){var s=a.c,r=s.oS(s,new A.ar5(b,c),t.K,t.Ag) +s=b.c +s=s.gd5(s) +r.U3(r,s.hJ(s,new A.ar6(a))) +return r}, +b0s(a){var s,r,q=t.K,p=t.ZF,o=A.A(q,p) +for(s=0;!1;++s){r=a[s] +o.n(0,r.gkd(r),p.a(r))}return A.aFs(o,q,t.Ag)}, +b0t(h4,h5,h6){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,b0,b1,b2,b3,b4,b5,b6,b7,b8,b9,c0,c1,c2,c3,c4,c5,c6,c7,c8,c9,d0,d1,d2,d3,d4,d5,d6,d7,d8,d9,e0,e1,e2,e3,e4,e5,e6,e7,e8,e9,f0,f1,f2,f3,f4,f5,f6,f7,f8,f9,g0,g1,g2,g3,g4,g5,g6,g7,g8,g9,h0,h1,h2,h3 +if(h4===h5)return h4 +s=h6<0.5 +r=s?h4.a:h5.a +q=s?h4.b:h5.b +p=A.b0r(h4,h5,h6) +o=s?h4.d:h5.d +n=s?h4.e:h5.e +m=s?h4.f:h5.f +l=s?h4.r:h5.r +k=A.b_i(h4.w,h5.w,h6) +j=s?h4.x:h5.x +i=A.b0R(h4.z,h5.z,h6) +h=A.y(h4.as,h5.as,h6) +h.toString +g=A.y(h4.at,h5.at,h6) +g.toString +f=A.aW_(h4.ax,h5.ax,h6) +e=A.y(h4.ay,h5.ay,h6) +e.toString +d=A.y(h4.ch,h5.ch,h6) +d.toString +c=A.y(h4.CW,h5.CW,h6) +c.toString +b=A.y(h4.cx,h5.cx,h6) +b.toString +a=A.y(h4.cy,h5.cy,h6) +a.toString +a0=A.y(h4.db,h5.db,h6) +a0.toString +a1=A.y(h4.dx,h5.dx,h6) +a1.toString +a2=A.y(h4.dy,h5.dy,h6) +a2.toString +a3=A.y(h4.fr,h5.fr,h6) +a3.toString +a4=A.y(h4.fx,h5.fx,h6) +a4.toString +a5=A.y(h4.fy,h5.fy,h6) +a5.toString +a6=A.y(h4.go,h5.go,h6) +a6.toString +a7=A.y(h4.id,h5.id,h6) +a7.toString +a8=A.y(h4.k2,h5.k2,h6) +a8.toString +a9=A.y(h4.k3,h5.k3,h6) +a9.toString +b0=A.y(h4.k4,h5.k4,h6) +b0.toString +b1=A.mU(h4.ok,h5.ok,h6) +b2=A.mU(h4.p1,h5.p1,h6) +b3=A.ym(h4.p2,h5.p2,h6) +b4=A.ym(h4.p3,h5.p3,h6) +b5=A.b0E(h4.p4,h5.p4,h6) +b6=A.aV7(h4.R8,h5.R8,h6) +b7=A.aVd(h4.RG,h5.RG,h6) +b8=A.aVh(h4.rx,h5.rx,h6) +b9=h4.ry +c0=h5.ry +c1=A.y(b9.a,c0.a,h6) +c2=A.y(b9.b,c0.b,h6) +c3=A.y(b9.c,c0.c,h6) +c4=A.y(b9.d,c0.d,h6) +c5=A.bb(b9.e,c0.e,h6) +c6=A.P(b9.f,c0.f,h6) +c7=A.ev(b9.r,c0.r,h6) +b9=A.ev(b9.w,c0.w,h6) +c0=A.aVq(h4.to,h5.to,h6) +c8=A.aVr(h4.x1,h5.x1,h6) +c9=A.aVs(h4.x2,h5.x2,h6) +d0=A.aVx(h4.xr,h5.xr,h6) +s=s?h4.y1:h5.y1 +d1=A.aVD(h4.y2,h5.y2,h6) +d2=A.aVH(h4.aL,h5.aL,h6) +d3=A.aVL(h4.bG,h5.bG,h6) +d4=A.aWe(h4.aM,h5.aM,h6) +d5=A.aWg(h4.aJ,h5.aJ,h6) +d6=A.aWt(h4.bq,h5.bq,h6) +d7=A.aWA(h4.bZ,h5.bZ,h6) +d8=A.aWX(h4.bt,h5.bt,h6) +d9=A.aWY(h4.B,h5.B,h6) +e0=A.aX5(h4.F,h5.F,h6) +e1=A.aXh(h4.a9,h5.a9,h6) +e2=A.aXi(h4.X,h5.X,h6) +e3=A.aXm(h4.aq,h5.aq,h6) +e4=A.aXO(h4.aH,h5.aH,h6) +e5=A.aYe(h4.aD,h5.aD,h6) +e6=A.aYt(h4.aE,h5.aE,h6) +e7=A.aYu(h4.bj,h5.bj,h6) +e8=A.aYv(h4.bM,h5.bM,h6) +e9=A.aYG(h4.bc,h5.bc,h6) +f0=A.aYH(h4.cY,h5.cY,h6) +f1=A.aYI(h4.cZ,h5.cZ,h6) +f2=A.aYP(h4.d9,h5.d9,h6) +f3=A.aZi(h4.eO,h5.eO,h6) +f4=A.aZB(h4.eP,h5.eP,h6) +f5=A.aZF(h4.cv,h5.cv,h6) +f6=A.b_k(h4.dv,h5.dv,h6) +f7=A.b_m(h4.av,h5.av,h6) +f8=A.b_o(h4.cj,h5.cj,h6) +f9=A.b_K(h4.e0,h5.e0,h6) +g0=A.b_N(h4.bE,h5.bE,h6) +g1=A.b04(h4.cI,h5.cI,h6) +g2=A.b06(h4.hD,h5.hD,h6) +g3=A.b0b(h4.f6,h5.f6,h6) +g4=A.b0h(h4.dO,h5.dO,h6) +g5=A.b0v(h4.hd,h5.hd,h6) +g6=A.b0x(h4.jM,h5.jM,h6) +g7=A.b0A(h4.bu,h5.bu,h6) +g8=h4.A +g8.toString +g9=h5.A +g9.toString +g9=A.y(g8,g9,h6) +g8=h4.k1 +g8.toString +h0=h5.k1 +h0.toString +h0=A.y(g8,h0,h6) +g8=h4.e1 +g8.toString +h1=h5.e1 +h1.toString +h1=A.y(g8,h1,h6) +g8=h4.es +g8.toString +h2=h5.es +h2.toString +h2=A.y(g8,h2,h6) +g8=h4.Q +g8.toString +h3=h5.Q +h3.toString +return A.aH9(b6,b7,r,h2,b8,new A.Da(c1,c2,c3,c4,c5,c6,c7,b9),A.y(g8,h3,h6),c0,c8,c9,d0,s,h,g,d1,d2,d3,f,q,d4,d5,e,d6,d,c,d7,d8,d9,e0,h1,e1,p,e2,e3,b,a,a0,a1,e4,b1,a2,o,e5,n,e6,e7,e8,e9,f0,f1,f2,m,l,f3,a3,a4,a5,b2,b3,f4,f5,a6,k,f6,f7,a7,f8,h0,a8,f9,g0,a9,j,g1,g2,g3,g4,b4,g5,g6,g9,g7,b5,b0,!0,i)}, +aYm(a,b){return new A.Qe(a,b,B.mo,b.a,b.b,b.c,b.d,b.e,b.f,b.r)}, +b0Q(a){switch(a.a){case 0:case 2:case 1:break +case 3:case 4:case 5:return B.a5o}return B.e_}, +b0R(a,b,c){var s,r +if(a===b)return a +s=A.P(a.a,b.a,c) +s.toString +r=A.P(a.b,b.b,c) +r.toString +return new A.nH(s,r)}, +tj:function tj(a,b){this.a=a +this.b=b}, +jJ:function jJ(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,b0,b1,b2,b3,b4,b5,b6,b7,b8,b9,c0,c1,c2,c3,c4,c5,c6,c7,c8,c9,d0,d1,d2,d3,d4,d5,d6,d7,d8,d9,e0,e1,e2,e3,e4,e5,e6,e7,e8,e9,f0,f1,f2,f3,f4,f5,f6,f7,f8,f9,g0,g1,g2,g3,g4,g5,g6){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.x=i +_.y=j +_.z=k +_.Q=l +_.as=m +_.at=n +_.ax=o +_.ay=p +_.ch=q +_.CW=r +_.cx=s +_.cy=a0 +_.db=a1 +_.dx=a2 +_.dy=a3 +_.fr=a4 +_.fx=a5 +_.fy=a6 +_.go=a7 +_.id=a8 +_.k1=a9 +_.k2=b0 +_.k3=b1 +_.k4=b2 +_.ok=b3 +_.p1=b4 +_.p2=b5 +_.p3=b6 +_.p4=b7 +_.R8=b8 +_.RG=b9 +_.rx=c0 +_.ry=c1 +_.to=c2 +_.x1=c3 +_.x2=c4 +_.xr=c5 +_.y1=c6 +_.y2=c7 +_.aL=c8 +_.bG=c9 +_.aM=d0 +_.aJ=d1 +_.bq=d2 +_.bZ=d3 +_.bt=d4 +_.B=d5 +_.F=d6 +_.a9=d7 +_.X=d8 +_.aq=d9 +_.aH=e0 +_.aD=e1 +_.aE=e2 +_.bj=e3 +_.bM=e4 +_.bc=e5 +_.cY=e6 +_.cZ=e7 +_.d9=e8 +_.eO=e9 +_.eP=f0 +_.cv=f1 +_.dv=f2 +_.av=f3 +_.cj=f4 +_.e0=f5 +_.bE=f6 +_.cI=f7 +_.hD=f8 +_.f6=f9 +_.dO=g0 +_.hd=g1 +_.jM=g2 +_.bu=g3 +_.e1=g4 +_.es=g5 +_.A=g6}, +ar8:function ar8(a,b){this.a=a +this.b=b}, +ar5:function ar5(a,b){this.a=a +this.b=b}, +ar6:function ar6(a){this.a=a}, +Qe:function Qe(a,b,c,d,e,f,g,h,i,j){var _=this +_.ay=a +_.ch=b +_.w=c +_.a=d +_.b=e +_.c=f +_.d=g +_.e=h +_.f=i +_.r=j}, +z3:function z3(a,b){this.a=a +this.b=b}, +Y6:function Y6(a,b,c){this.a=a +this.b=b +this.$ti=c}, +nH:function nH(a,b){this.a=a +this.b=b}, +a3f:function a3f(){}, +a45:function a45(){}, +b0v(a2,a3,a4){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1 +if(a2===a3&&!0)return a2 +s=a2.d +if(s==null)r=a3.d==null +else r=!1 +if(r)s=null +else if(s==null)s=a3.d +else{r=a3.d +if(!(r==null)){s.toString +r.toString +s=A.aQ(s,r,a4)}}r=A.y(a2.a,a3.a,a4) +q=A.l9(a2.b,a3.b,a4) +p=A.l9(a2.c,a3.c,a4) +o=A.y(a2.e,a3.e,a4) +n=t.KX.a(A.dS(a2.f,a3.f,a4)) +m=A.y(a2.r,a3.r,a4) +l=A.bb(a2.w,a3.w,a4) +k=A.y(a2.x,a3.x,a4) +j=A.y(a2.y,a3.y,a4) +i=A.y(a2.z,a3.z,a4) +h=A.bb(a2.Q,a3.Q,a4) +g=A.P(a2.as,a3.as,a4) +f=A.y(a2.at,a3.at,a4) +e=A.bb(a2.ax,a3.ax,a4) +d=A.y(a2.ay,a3.ay,a4) +c=A.dS(a2.ch,a3.ch,a4) +b=A.y(a2.CW,a3.CW,a4) +a=A.bb(a2.cx,a3.cx,a4) +if(a4<0.5)a0=a2.cy +else a0=a3.cy +a1=A.ev(a2.db,a3.db,a4) +return new A.Gr(r,q,p,s,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,A.dS(a2.dx,a3.dx,a4))}, +Gr:function Gr(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.x=i +_.y=j +_.z=k +_.Q=l +_.as=m +_.at=n +_.ax=o +_.ay=p +_.ch=q +_.CW=r +_.cx=s +_.cy=a0 +_.db=a1 +_.dx=a2}, +a3h:function a3h(){}, +b0x(a,b,c){var s,r,q,p,o,n,m,l,k,j,i,h,g,f +if(a===b)return a +s=A.bb(a.a,b.a,c) +r=A.oq(a.b,b.b,c) +q=A.y(a.c,b.c,c) +p=A.y(a.d,b.d,c) +o=A.y(a.e,b.e,c) +n=A.y(a.f,b.f,c) +m=A.y(a.r,b.r,c) +l=A.y(a.w,b.w,c) +k=A.y(a.y,b.y,c) +j=A.y(a.x,b.x,c) +i=A.y(a.z,b.z,c) +h=A.y(a.Q,b.Q,c) +g=A.y(a.as,b.as,c) +f=A.qS(a.ax,b.ax,c) +return new A.Gs(s,r,q,p,o,n,m,l,j,k,i,h,g,A.P(a.at,b.at,c),f)}, +Gs:function Gs(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.x=i +_.y=j +_.z=k +_.Q=l +_.as=m +_.at=n +_.ax=o}, +a3i:function a3i(){}, +yp:function yp(){}, +ard:function ard(a,b){this.a=a +this.b=b}, +are:function are(a){this.a=a}, +arb:function arb(a,b){this.a=a +this.b=b}, +arc:function arc(a,b){this.a=a +this.b=b}, +Gt:function Gt(){}, +aOe(a,b,c){return new A.Y3(b,null,c,B.aP,a,null)}, +b0y(a,b){return new A.Gw(b,a,null)}, +b0B(){var s,r,q +if($.ux.length!==0){s=A.a($.ux.slice(0),A.S($.ux)) +for(r=s.length,q=0;q>>16&255,r.gl(r)>>>8&255,r.gl(r)&255) +break +default:p=null}switch(q.a){case 1:o=b.a +break +case 0:r=b.a +o=A.C(0,r.gl(r)>>>16&255,r.gl(r)>>>8&255,r.gl(r)&255) +break +default:o=null}r=a.d +q=b.d +if(r!==q){n=A.y(p,o,c) +n.toString +q=A.P(r,q,c) +q.toString +return new A.b_(n,s,B.y,q)}q=A.y(p,o,c) +q.toString +return new A.b_(q,s,B.y,r)}, +dS(a,b,c){var s,r +if(a==b)return a +s=b!=null?b.dF(a,c):null +if(s==null&&a!=null)s=a.dA(b,c) +if(s==null)r=c<0.5?a:b +else r=s +return r}, +aMd(a,b,c){var s,r +if(a==b)return a +s=b!=null?b.dF(a,c):null +if(s==null&&a!=null)s=a.dA(b,c) +if(s==null)r=c<0.5?a:b +else r=s +return r}, +aO9(a,b,c){var s,r,q,p,o,n,m=a instanceof A.jP?a.a:A.a([a],t.Fi),l=b instanceof A.jP?b.a:A.a([b],t.Fi),k=A.a([],t.N_),j=Math.max(m.length,l.length) +for(s=1-c,r=0;ro/m?new A.G(o*p/m,p):new A.G(q,m*q/o) +r=b +break +case 2:q=c.a +p=c.b +o=b.a +r=q/p>o/m?new A.G(o,o*p/q):new A.G(m*q/p,m) +s=c +break +case 3:q=c.a +p=c.b +o=b.a +if(q/p>o/m){r=new A.G(o,o*p/q) +s=c}else{s=new A.G(q,m*q/o) +r=b}break +case 4:q=c.a +p=c.b +o=b.a +if(q/p>o/m){s=new A.G(o*p/m,p) +r=b}else{r=new A.G(m*q/p,m) +s=c}break +case 5:r=new A.G(Math.min(b.a,c.a),Math.min(m,c.b)) +s=r +break +case 6:n=b.a/m +q=c.b +s=m>q?new A.G(q*n,q):b +m=c.a +if(s.a>m)s=new A.G(m,m/n) +r=b +break +default:r=null +s=null}return new A.OA(r,s)}, +Mq:function Mq(a,b){this.a=a +this.b=b}, +OA:function OA(a,b){this.a=a +this.b=b}, +aVw(a,b,c){var s,r,q,p,o +if(a===b)return a +s=A.y(a.a,b.a,c) +s.toString +r=A.lz(a.b,b.b,c) +r.toString +q=A.P(a.c,b.c,c) +q.toString +p=A.P(a.d,b.d,c) +p.toString +o=a.e +return new A.ep(p,o===B.cn?b.e:o,s,r,q)}, +aFj(a,b,c){var s,r,q,p,o,n,m,l +if(a==null?b==null:a===b)return a +if(a==null)a=A.a([],t.sq) +if(b==null)b=A.a([],t.sq) +s=Math.min(a.length,b.length) +r=A.a([],t.sq) +for(q=0;q=B.b.gO(b))return B.b.gO(a) +s=B.b.as6(b,new A.aD8(c)) +r=a[s] +q=s+1 +p=a[q] +o=b[s] +o=A.y(r,p,(c-o)/(b[q]-o)) +o.toString +return o}, +b3N(a,b,c,d,e){var s,r,q=A.U6(null,null,t.i) +q.E(0,b) +q.E(0,d) +s=A.V(q,!1,q.$ti.c) +r=A.S(s).h("R<1,m>") +return new A.auk(A.V(new A.R(s,new A.aCP(a,b,c,d,e),r),!1,r.h("af.E")),s)}, +rG(a,b,c){var s +if(a==b)return a +s=b!=null?b.dF(a,c):null +if(s==null&&a!=null)s=a.dA(b,c) +if(s!=null)return s +return c<0.5?a.aV(0,1-c*2):b.aV(0,(c-0.5)*2)}, +aLD(a,b,c){var s,r,q,p +if(a==b)return a +if(a==null)return b.aV(0,c) +if(b==null)return a.aV(0,1-c) +s=A.b3N(a.a,a.Fu(),b.a,b.Fu(),c) +r=A.qx(a.d,b.d,c) +r.toString +q=A.qx(a.e,b.e,c) +q.toString +p=c<0.5?a.f:b.f +return new A.dO(r,q,p,s.a,s.b,null)}, +auk:function auk(a,b){this.a=a +this.b=b}, +aD8:function aD8(a){this.a=a}, +aCP:function aCP(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e}, +aek:function aek(){}, +dO:function dO(a,b,c,d,e,f){var _=this +_.d=a +_.e=b +_.f=c +_.a=d +_.b=e +_.c=f}, +ah7:function ah7(a){this.a=a}, +b1t(a,b){var s +if(a.x)A.T(A.Q(u.V)) +s=new A.ww(a) +s.xN(a) +s=new A.z9(a,null,s) +s.a6u(a,b,null) +return s}, +afu:function afu(a,b,c){var _=this +_.a=a +_.b=b +_.c=c +_.f=0}, +afw:function afw(a,b,c){this.a=a +this.b=b +this.c=c}, +afv:function afv(a,b){this.a=a +this.b=b}, +afx:function afx(a,b,c,d,e,f){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f}, +WB:function WB(){}, +au3:function au3(a){this.a=a}, +H6:function H6(a,b,c){this.a=a +this.b=b +this.c=c}, +z9:function z9(a,b,c){var _=this +_.d=$ +_.a=a +_.b=b +_.c=c}, +axA:function axA(a,b){this.a=a +this.b=b}, +a_z:function a_z(a,b){this.a=a +this.b=b}, +aO5(){return new A.VA(A.a([],t.XZ),A.a([],t.SM),A.a([],t.b))}, +aZX(a,b,c){return c}, +Cy:function Cy(a,b,c,d,e,f){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f}, +ki:function ki(){}, +afE:function afE(a,b,c){this.a=a +this.b=b +this.c=c}, +afF:function afF(a,b,c){this.a=a +this.b=b +this.c=c}, +afB:function afB(a,b){this.a=a +this.b=b}, +afA:function afA(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +afC:function afC(a){this.a=a}, +afD:function afD(a,b){this.a=a +this.b=b}, +VA:function VA(a,b,c){var _=this +_.a=a +_.b=b +_.e=_.d=_.c=null +_.r=_.f=!1 +_.w=0 +_.x=!1 +_.y=c}, +l6:function l6(a,b,c){this.a=a +this.b=b +this.c=c}, +LQ:function LQ(){}, +av9:function av9(a,b,c){var _=this +_.a=a +_.b=b +_.e=_.d=_.c=null +_.r=_.f=!1 +_.w=0 +_.x=!1 +_.y=c}, +Ap:function Ap(a,b,c){this.a=a +this.b=b +this.c=c}, +a6A:function a6A(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +a6B:function a6B(a){this.a=a}, +aYN(a){var s=new A.DF(A.a([],t.XZ),A.a([],t.SM),A.a([],t.b)) +s.a6l(a,null) +return s}, +aM0(a,b,c,d){var s=new A.Qx(d,c,A.a([],t.XZ),A.a([],t.SM),A.a([],t.b)) +s.a6k(null,a,b,c,d) +return s}, +fw:function fw(a,b,c){this.a=a +this.b=b +this.c=c}, +jm:function jm(a,b,c){this.a=a +this.b=b +this.c=c}, +afI:function afI(){this.b=this.a=null}, +ww:function ww(a){this.a=a}, +rN:function rN(){}, +afJ:function afJ(){}, +DF:function DF(a,b,c){var _=this +_.a=a +_.b=b +_.e=_.d=_.c=null +_.r=_.f=!1 +_.w=0 +_.x=!1 +_.y=c}, +aiP:function aiP(a,b){this.a=a +this.b=b}, +Qx:function Qx(a,b,c,d,e){var _=this +_.Q=_.z=null +_.as=a +_.at=b +_.ax=null +_.ay=$ +_.ch=null +_.CW=0 +_.cx=null +_.cy=!1 +_.a=c +_.b=d +_.e=_.d=_.c=null +_.r=_.f=!1 +_.w=0 +_.x=!1 +_.y=e}, +ai9:function ai9(a,b){this.a=a +this.b=b}, +ai8:function ai8(a){this.a=a}, +Z1:function Z1(){}, +Z0:function Z0(){}, +aLp(a,b,c,d){return new A.mX(a,c,b,!1,b!=null,d)}, +aIe(a){var s,r,q,p,o,n,m,l,k,j,i,h,g,f=A.a([],t.O_),e=t.oU,d=A.a([],e) +for(s=a.length,r="",q="",p=0;p0){n=-n +l=2*l +r=(n-Math.sqrt(j))/l +q=(n+Math.sqrt(j))/l +p=(c-r*b)/(q-r) +return new A.ays(r,q,b-p,p)}o=Math.sqrt(k-m)/(2*l) +s=-(n/2*l) +return new A.aBJ(o,s,b,(c-s*b)/o)}, +ap7:function ap7(a,b,c){this.a=a +this.b=b +this.c=c}, +FJ:function FJ(a,b){this.a=a +this.b=b}, +FI:function FI(a,b,c){this.b=a +this.c=b +this.a=c}, +u8:function u8(a,b,c){this.b=a +this.c=b +this.a=c}, +aur:function aur(a,b,c){this.a=a +this.b=b +this.c=c}, +ays:function ays(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +aBJ:function aBJ(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +Gv:function Gv(a,b){this.a=a +this.c=b}, +aZP(a,b,c,d,e,f,g){var s=null,r=new A.S6(new A.TF(s,s),B.zv,b,g,A.ag(t.O5),a,f,s,A.ag(t.T)) +r.aw() +r.saP(s) +r.a6n(a,s,b,c,d,e,f,g) +return r}, +xu:function xu(a,b){this.a=a +this.b=b}, +S6:function S6(a,b,c,d,e,f,g,h,i){var _=this +_.d7=_.cn=$ +_.cu=a +_.cH=$ +_.dN=null +_.jL=b +_.on=c +_.c6=d +_.ha=e +_.A=null +_.a1=f +_.al=g +_.fr$=h +_.fy=_.fx=null +_.go=!1 +_.k1=_.id=null +_.k2=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=i +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +akS:function akS(a){this.a=a}, +b15(a){}, +xy:function xy(){}, +am4:function am4(a){this.a=a}, +am6:function am6(a){this.a=a}, +am5:function am5(a){this.a=a}, +am3:function am3(a){this.a=a}, +am2:function am2(a){this.a=a}, +Wp:function Wp(a,b){var _=this +_.a=a +_.fx$=0 +_.fy$=b +_.id$=_.go$=0 +_.k1$=!1}, +Xu:function Xu(a,b,c,d,e,f,g,h){var _=this +_.b=a +_.c=b +_.d=c +_.e=null +_.f=!1 +_.r=d +_.y=_.x=_.w=!1 +_.z=e +_.Q=f +_.as=!1 +_.at=null +_.ax=0 +_.ay=!1 +_.ch=g +_.CW=h +_.cx=null}, +a1k:function a1k(a,b,c,d){var _=this +_.B=!1 +_.fx=a +_.fy=null +_.go=b +_.k1=null +_.fr$=c +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=d +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +qT(a){var s=a.a,r=a.b +return new A.az(s,s,r,r)}, +mw(a,b){var s,r,q=b==null,p=q?0:b +q=q?1/0:b +s=a==null +r=s?0:a +return new A.az(p,q,r,s?1/0:a)}, +AM(a,b){var s,r,q=b!==1/0,p=q?b:0 +q=q?b:1/0 +s=a!==1/0 +r=s?a:0 +return new A.az(p,q,r,s?a:1/0)}, +a7R(a){return new A.az(0,a.a,0,a.b)}, +oq(a,b,c){var s,r,q,p +if(a==b)return a +if(a==null)return b.S(0,c) +if(b==null)return a.S(0,1-c) +s=a.a +if(isFinite(s)){s=A.P(s,b.a,c) +s.toString}else s=1/0 +r=a.b +if(isFinite(r)){r=A.P(r,b.b,c) +r.toString}else r=1/0 +q=a.c +if(isFinite(q)){q=A.P(q,b.c,c) +q.toString}else q=1/0 +p=a.d +if(isFinite(p)){p=A.P(p,b.d,c) +p.toString}else p=1/0 +return new A.az(s,r,q,p)}, +aJX(a){return new A.mx(a.a,a.b,a.c)}, +az:function az(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +a7S:function a7S(){}, +mx:function mx(a,b,c){this.a=a +this.b=b +this.c=c}, +qV:function qV(a,b){this.c=a +this.a=b +this.b=null}, +ha:function ha(a){this.a=a}, +Bd:function Bd(){}, +Zb:function Zb(a,b){this.a=a +this.b=b}, +I9:function I9(a,b){this.a=a +this.b=b}, +H:function H(){}, +al6:function al6(a,b){this.a=a +this.b=b}, +al8:function al8(a,b){this.a=a +this.b=b}, +al7:function al7(a,b){this.a=a +this.b=b}, +d7:function d7(){}, +al5:function al5(a,b,c){this.a=a +this.b=b +this.c=c}, +Hj:function Hj(){}, +fd:function fd(a,b,c){var _=this +_.e=null +_.ci$=a +_.ak$=b +_.a=c}, +ai5:function ai5(){}, +Es:function Es(a,b,c,d,e){var _=this +_.B=a +_.e_$=b +_.a4$=c +_.d8$=d +_.fy=_.fx=null +_.go=!1 +_.k1=_.id=null +_.k2=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=e +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +IU:function IU(){}, +a0R:function a0R(){}, +aMJ(a,b){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e=null,d={} +d.a=b +if(a==null)a=B.kH +s=J.aF(a) +r=s.gu(a)-1 +q=A.bf(0,e,!1,t.Ef) +p=0<=r +while(!0){if(!!1)break +s.i(a,0) +o=b[0] +o.gBi(o) +break}while(!0){if(!!1)break +s.i(a,r) +n=b[-1] +n.gBi(n) +break}m=A.bc("oldKeyedChildren") +if(p){m.scJ(A.A(t.D2,t.bu)) +for(l=m.a,k=0;k<=r;){j=s.i(a,k) +i=j.a +if(i!=null){h=m.b +if(h===m)A.T(A.fy(l)) +J.hH(h,i,j)}++k}p=!0}else k=0 +for(l=m.a,g=0;!1;){o=d.a[g] +if(p){f=o.gBi(o) +i=m.b +if(i===m)A.T(A.fy(l)) +j=J.bq(i,f) +if(j!=null){o.gBi(o) +j=e}}else j=e +q[g]=A.aMI(j,o);++g}s.gu(a) +while(!0){if(!!1)break +q[g]=A.aMI(s.i(a,k),d.a[g]);++g;++k}return new A.ft(q,A.S(q).h("ft<1,cP>"))}, +aMI(a,b){var s,r=a==null?A.Fl(b.gBi(b),null):a,q=b.gYG(),p=A.lQ() +q.ga1A() +p.k2=q.ga1A() +p.e=!0 +q.gamd(q) +s=q.gamd(q) +p.b7(B.il,!0) +p.b7(B.zU,s) +q.gasU() +s=q.gasU() +p.b7(B.il,!0) +p.b7(B.zV,s) +q.ga0I(q) +p.b7(B.X4,q.ga0I(q)) +q.gam_(q) +p.b7(B.A0,q.gam_(q)) +q.gapr(q) +s=q.gapr(q) +p.b7(B.X5,!0) +p.b7(B.X_,s) +q.goL() +p.b7(B.lC,q.goL()) +q.gavm() +p.b7(B.zR,q.gavm()) +q.ga1w() +p.b7(B.A_,q.ga1w()) +q.gas5() +p.b7(B.X0,q.gas5()) +q.gKc(q) +p.b7(B.zO,q.gKc(q)) +q.gapQ() +p.b7(B.zT,q.gapQ()) +q.gapR(q) +p.b7(B.lB,q.gapR(q)) +q.gqR(q) +s=q.gqR(q) +p.b7(B.lD,!0) +p.b7(B.lA,s) +q.garl() +p.b7(B.X1,q.garl()) +q.gwi() +p.b7(B.zN,q.gwi()) +q.gasY(q) +p.b7(B.zY,q.gasY(q)) +q.gar4(q) +p.b7(B.im,q.gar4(q)) +q.gar1() +p.b7(B.zX,q.gar1()) +q.ga0z() +p.b7(B.zS,q.ga0z()) +q.gat5() +p.b7(B.zW,q.gat5()) +q.gasj() +p.b7(B.X3,q.gasj()) +q.gJz() +p.sJz(q.gJz()) +q.gHX() +p.sHX(q.gHX()) +q.gavz() +s=q.gavz() +p.b7(B.zZ,!0) +p.b7(B.zP,s) +q.gj9(q) +p.b7(B.zQ,q.gj9(q)) +q.gJo(q) +p.RG=new A.cS(q.gJo(q),B.ap) +p.e=!0 +q.gl(q) +p.rx=new A.cS(q.gl(q),B.ap) +p.e=!0 +q.garu() +p.ry=new A.cS(q.garu(),B.ap) +p.e=!0 +q.ganV() +p.to=new A.cS(q.ganV(),B.ap) +p.e=!0 +q.garb(q) +p.x1=new A.cS(q.garb(q),B.ap) +p.e=!0 +q.gbS() +p.aL=q.gbS() +p.e=!0 +q.gnj() +p.snj(q.gnj()) +q.gni() +p.sni(q.gni()) +q.gBO() +p.sBO(q.gBO()) +q.gBP() +p.sBP(q.gBP()) +q.gBQ() +p.sBQ(q.gBQ()) +q.gBN() +p.sBN(q.gBN()) +q.gBH() +p.sBH(q.gBH()) +q.gBC() +p.sBC(q.gBC()) +q.gBA(q) +p.sBA(0,q.gBA(q)) +q.gBB(q) +p.sBB(0,q.gBB(q)) +q.gBM(q) +p.sBM(0,q.gBM(q)) +q.gBK() +p.sBK(q.gBK()) +q.gBI() +p.sBI(q.gBI()) +q.gBL() +p.sBL(q.gBL()) +q.gBJ() +p.sBJ(q.gBJ()) +q.gBR() +p.sBR(q.gBR()) +q.gBS() +p.sBS(q.gBS()) +q.gBD() +p.sBD(q.gBD()) +q.gJM() +p.sJM(q.gJM()) +q.gBE() +p.sBE(q.gBE()) +r.m5(0,B.kH,p) +r.sbd(0,b.gbd(b)) +r.sc9(0,b.gc9(b)) +r.dy=b.gawG() +return r}, +Nv:function Nv(){}, +Et:function Et(a,b,c,d,e,f,g){var _=this +_.A=a +_.a1=b +_.al=c +_.bg=d +_.cR=e +_.c1=_.he=_.f7=_.cd=null +_.fr$=f +_.fy=_.fx=null +_.go=!1 +_.k1=_.id=null +_.k2=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=g +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +Ny:function Ny(){}, +aOw(a){var s=new A.a0S(a,A.ag(t.T)) +s.aw() +return s}, +aOG(){return new A.K_($.W().aj(),B.e8,B.cO,$.aO())}, +ut:function ut(a,b){this.a=a +this.b=b}, +arY:function arY(a,b,c,d,e,f){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=!0 +_.r=f}, +tT:function tT(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,b0,b1,b2,b3){var _=this +_.X=_.a9=_.F=_.B=null +_.aq=$ +_.aH=a +_.aD=b +_.bc=_.bM=_.bj=_.aE=null +_.cY=c +_.cZ=d +_.d9=e +_.eO=f +_.eP=g +_.cv=h +_.dv=i +_.av=j +_.e0=_.cj=null +_.bE=k +_.cI=l +_.hD=m +_.f6=n +_.dO=o +_.hd=p +_.jM=q +_.bu=r +_.e1=s +_.es=a0 +_.A=a1 +_.a1=a2 +_.al=a3 +_.bg=a4 +_.cd=!1 +_.f7=$ +_.he=a5 +_.c1=0 +_.cw=a6 +_.dE=_.eC=_.ce=null +_.ow=_.n2=$ +_.apw=_.qZ=_.ih=null +_.om=$ +_.Iz=null +_.ky=a7 +_.IA=null +_.Ay=_.Ax=_.Aw=_.IB=!1 +_.WB=null +_.WC=a8 +_.e_$=a9 +_.a4$=b0 +_.d8$=b1 +_.r0$=b2 +_.fy=_.fx=null +_.go=!1 +_.k1=_.id=null +_.k2=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=b3 +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +alc:function alc(a){this.a=a}, +alb:function alb(){}, +ala:function ala(a,b){this.a=a +this.b=b}, +ald:function ald(){}, +al9:function al9(){}, +a0S:function a0S(a,b){var _=this +_.B=a +_.fy=_.fx=null +_.go=!1 +_.k1=_.id=null +_.k2=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=b +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +py:function py(){}, +K_:function K_(a,b,c,d){var _=this +_.r=a +_.x=_.w=null +_.y=b +_.z=c +_.fx$=0 +_.fy$=d +_.id$=_.go$=0 +_.k1$=!1}, +H8:function H8(a,b,c){var _=this +_.r=!0 +_.w=!1 +_.x=a +_.y=$ +_.Q=_.z=null +_.as=b +_.ax=_.at=null +_.fx$=0 +_.fy$=c +_.id$=_.go$=0 +_.k1$=!1}, +yL:function yL(a,b){var _=this +_.r=a +_.fx$=0 +_.fy$=b +_.id$=_.go$=0 +_.k1$=!1}, +IV:function IV(){}, +IW:function IW(){}, +a0T:function a0T(){}, +Ev:function Ev(a,b){var _=this +_.B=a +_.F=$ +_.fy=_.fx=null +_.go=!1 +_.k1=_.id=null +_.k2=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=b +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +aPX(a,b,c){switch(a.a){case 0:switch(b){case B.q:return!0 +case B.Z:return!1 +case null:case void 0:return null}break +case 1:switch(c){case B.cL:return!0 +case B.mf:return!1 +case null:case void 0:return null}break}}, +OO:function OO(a,b){this.a=a +this.b=b}, +ex:function ex(a,b,c){var _=this +_.f=_.e=null +_.ci$=a +_.ak$=b +_.a=c}, +Q9:function Q9(a,b){this.a=a +this.b=b}, +wP:function wP(a,b){this.a=a +this.b=b}, +r7:function r7(a,b){this.a=a +this.b=b}, +Ex:function Ex(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){var _=this +_.B=a +_.F=b +_.a9=c +_.X=d +_.aq=e +_.aH=f +_.aD=g +_.aE=0 +_.bj=h +_.bM=i +_.IE$=j +_.apB$=k +_.e_$=l +_.a4$=m +_.d8$=n +_.fy=_.fx=null +_.go=!1 +_.k1=_.id=null +_.k2=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=o +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +alg:function alg(){}, +alf:function alf(){}, +awD:function awD(a,b,c){this.a=a +this.b=b +this.c=c}, +a0V:function a0V(){}, +a0W:function a0W(){}, +IX:function IX(){}, +Ez:function Ez(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r){var _=this +_.F=_.B=null +_.a9=a +_.X=b +_.aq=c +_.aH=d +_.aD=e +_.aE=null +_.bj=f +_.bM=g +_.bc=h +_.cY=i +_.cZ=j +_.d9=k +_.eO=l +_.eP=m +_.cv=n +_.dv=o +_.av=p +_.cj=q +_.fy=_.fx=null +_.go=!1 +_.k1=_.id=null +_.k2=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=r +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +ag(a){return new A.PO(a.h("PO<0>"))}, +aYX(a){return new A.Ru(a,A.A(t.S,t.M),A.ag(t.G))}, +aYM(a){return new A.kq(a,A.A(t.S,t.M),A.ag(t.G))}, +aNK(a){return new A.m3(a,B.e,A.A(t.S,t.M),A.ag(t.G))}, +aGv(){return new A.DH(B.e,A.A(t.S,t.M),A.ag(t.G))}, +aJG(a){return new A.At(a,B.bN,A.A(t.S,t.M),A.ag(t.G))}, +aGg(a,b){return new A.CU(a,b,A.A(t.S,t.M),A.ag(t.G))}, +aL4(a){var s,r,q=new A.bd(new Float64Array(16)) +q.de() +for(s=a.length-1;s>0;--s){r=a[s] +if(r!=null)r.qi(a[s-1],q)}return q}, +add(a,b,c,d){var s,r +if(a==null||b==null)return null +if(a===b)return a +s=a.z +r=b.z +if(sr){c.push(a.r) +return A.add(a.r,b,c,d)}c.push(a.r) +d.push(b.r) +return A.add(a.r,b.r,c,d)}, +Aj:function Aj(a,b,c){this.a=a +this.b=b +this.$ti=c}, +LI:function LI(a,b){this.a=a +this.$ti=b}, +eb:function eb(){}, +agz:function agz(a,b){this.a=a +this.b=b}, +agA:function agA(a,b){this.a=a +this.b=b}, +PO:function PO(a){this.a=null +this.$ti=a}, +Ru:function Ru(a,b,c){var _=this +_.ax=a +_.ay=null +_.CW=_.ch=!1 +_.a=b +_.b=0 +_.d=_.c=!1 +_.e=c +_.f=0 +_.r=null +_.w=!0 +_.y=_.x=null +_.z=0 +_.at=_.as=_.Q=null}, +eN:function eN(){}, +kq:function kq(a,b,c){var _=this +_.k3=a +_.ay=_.ax=null +_.a=b +_.b=0 +_.d=_.c=!1 +_.e=c +_.f=0 +_.r=null +_.w=!0 +_.y=_.x=null +_.z=0 +_.at=_.as=_.Q=null}, +r1:function r1(a,b,c){var _=this +_.k3=null +_.k4=a +_.ay=_.ax=null +_.a=b +_.b=0 +_.d=_.c=!1 +_.e=c +_.f=0 +_.r=null +_.w=!0 +_.y=_.x=null +_.z=0 +_.at=_.as=_.Q=null}, +B5:function B5(a,b,c){var _=this +_.k3=null +_.k4=a +_.ay=_.ax=null +_.a=b +_.b=0 +_.d=_.c=!1 +_.e=c +_.f=0 +_.r=null +_.w=!0 +_.y=_.x=null +_.z=0 +_.at=_.as=_.Q=null}, +vE:function vE(a,b,c){var _=this +_.k3=null +_.k4=a +_.ay=_.ax=null +_.a=b +_.b=0 +_.d=_.c=!1 +_.e=c +_.f=0 +_.r=null +_.w=!0 +_.y=_.x=null +_.z=0 +_.at=_.as=_.Q=null}, +B8:function B8(a,b){var _=this +_.ay=_.ax=_.k3=null +_.a=a +_.b=0 +_.d=_.c=!1 +_.e=b +_.f=0 +_.r=null +_.w=!0 +_.y=_.x=null +_.z=0 +_.at=_.as=_.Q=null}, +Cz:function Cz(a,b,c,d){var _=this +_.aL=a +_.k3=b +_.ay=_.ax=null +_.a=c +_.b=0 +_.d=_.c=!1 +_.e=d +_.f=0 +_.r=null +_.w=!0 +_.y=_.x=null +_.z=0 +_.at=_.as=_.Q=null}, +m3:function m3(a,b,c,d){var _=this +_.aL=a +_.aM=_.bG=null +_.aJ=!0 +_.k3=b +_.ay=_.ax=null +_.a=c +_.b=0 +_.d=_.c=!1 +_.e=d +_.f=0 +_.r=null +_.w=!0 +_.y=_.x=null +_.z=0 +_.at=_.as=_.Q=null}, +DH:function DH(a,b,c){var _=this +_.aL=null +_.k3=a +_.ay=_.ax=null +_.a=b +_.b=0 +_.d=_.c=!1 +_.e=c +_.f=0 +_.r=null +_.w=!0 +_.y=_.x=null +_.z=0 +_.at=_.as=_.Q=null}, +At:function At(a,b,c,d){var _=this +_.k3=a +_.k4=b +_.ay=_.ax=null +_.a=c +_.b=0 +_.d=_.c=!1 +_.e=d +_.f=0 +_.r=null +_.w=!0 +_.y=_.x=null +_.z=0 +_.at=_.as=_.Q=null}, +wF:function wF(){var _=this +_.b=_.a=null +_.c=!1 +_.d=null}, +CU:function CU(a,b,c,d){var _=this +_.k3=a +_.k4=b +_.ay=_.ax=null +_.a=c +_.b=0 +_.d=_.c=!1 +_.e=d +_.f=0 +_.r=null +_.w=!0 +_.y=_.x=null +_.z=0 +_.at=_.as=_.Q=null}, +Cc:function Cc(a,b,c,d,e,f){var _=this +_.k3=a +_.k4=b +_.ok=c +_.p1=d +_.p4=_.p3=_.p2=null +_.R8=!0 +_.ay=_.ax=null +_.a=e +_.b=0 +_.d=_.c=!1 +_.e=f +_.f=0 +_.r=null +_.w=!0 +_.y=_.x=null +_.z=0 +_.at=_.as=_.Q=null}, +Ai:function Ai(a,b,c,d,e,f){var _=this +_.k3=a +_.k4=b +_.ok=c +_.ay=_.ax=null +_.a=d +_.b=0 +_.d=_.c=!1 +_.e=e +_.f=0 +_.r=null +_.w=!0 +_.y=_.x=null +_.z=0 +_.at=_.as=_.Q=null +_.$ti=f}, +Zh:function Zh(){}, +aYx(a,b){var s +if(a==null)return!0 +s=a.b +if(t.ks.b(b))return!1 +return t.ge.b(s)||t.PB.b(b)||!s.gbv(s).j(0,b.gbv(b))}, +aYw(a5){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,a2,a3,a4=a5.d +if(a4==null)a4=a5.c +s=a5.a +r=a5.b +q=a4.grR() +p=a4.giu(a4) +o=a4.gbN() +n=a4.gcN(a4) +m=a4.giZ(a4) +l=a4.gbv(a4) +k=a4.gqF() +j=a4.gdY(a4) +a4.gwi() +i=a4.gC5() +h=a4.gwq() +g=a4.gdC() +f=a4.gIi() +e=a4.gv(a4) +d=a4.gK8() +c=a4.gKb() +b=a4.gKa() +a=a4.gK9() +a0=a4.gwj(a4) +a1=a4.gKu() +s.aa(0,new A.ai_(r,A.aZ7(j,k,m,g,f,a4.gAs(),0,n,!1,a0,o,l,h,i,d,a,b,c,e,a4.gtB(),a1,p,q).b0(a4.gc9(a4)),s)) +q=A.o(r).h("aX<1>") +p=q.h("ba") +a2=A.V(new A.ba(new A.aX(r,q),new A.ai0(s),p),!0,p.h("n.E")) +p=a4.grR() +q=a4.giu(a4) +a1=a4.gbN() +e=a4.gcN(a4) +c=a4.giZ(a4) +b=a4.gbv(a4) +a=a4.gqF() +d=a4.gdY(a4) +a4.gwi() +i=a4.gC5() +h=a4.gwq() +l=a4.gdC() +o=a4.gIi() +a0=a4.gv(a4) +n=a4.gK8() +f=a4.gKb() +g=a4.gKa() +m=a4.gK9() +k=a4.gwj(a4) +j=a4.gKu() +a3=A.aZ5(d,a,c,l,o,a4.gAs(),0,e,!1,k,a1,b,h,i,n,m,g,f,a0,a4.gtB(),j,q,p).b0(a4.gc9(a4)) +for(q=A.S(a2).h("cO<1>"),p=new A.cO(a2,q),p=new A.bu(p,p.gu(p),q.h("bu")),q=q.h("af.E");p.q();){o=p.d +if(o==null)o=q.a(o) +if(o.gCB()&&o.gBF(o)!=null){n=o.gBF(o) +n.toString +n.$1(a3.b0(r.i(0,o)))}}}, +a_3:function a_3(a,b){this.a=a +this.b=b}, +a_4:function a_4(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +Qv:function Qv(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=!1 +_.fx$=0 +_.fy$=d +_.id$=_.go$=0 +_.k1$=!1}, +ai1:function ai1(){}, +ai4:function ai4(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e}, +ai3:function ai3(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e}, +ai2:function ai2(a){this.a=a}, +ai_:function ai_(a,b,c){this.a=a +this.b=b +this.c=c}, +ai0:function ai0(a){this.a=a}, +a4F:function a4F(){}, +aMj(a,b,c){var s,r,q=a.ch,p=t.dJ.a(q.a) +if(p==null){s=a.rQ(null) +q.sar(0,s) +q=s}else{p.Kh() +a.rQ(p) +q=p}a.db=!1 +r=new A.ph(q,a.glP()) +b=r +a.G0(b,B.e) +b.xz()}, +aYS(a){var s=a.ch.a +s.toString +a.rQ(t.gY.a(s)) +a.db=!1}, +aZ_(a,b,c){var s=t.TT +return new A.nf(a,c,b,A.a([],s),A.a([],s),A.a([],s),A.aS(t.I9),A.aS(t.sv))}, +aZS(a){a.NC()}, +aZT(a){a.agL()}, +aOD(a,b){if(a==null)return null +if(a.ga7(a)||b.XR())return B.F +return A.aLX(b,a)}, +b20(a,b,c,d){var s,r,q=b.gaU(b) +q.toString +for(s=q;s!==a;s=q,b=r){s.dj(b,c) +q=s.gaU(s) +q.toString +r=b.gaU(b) +r.toString}a.dj(b,c) +a.dj(b,d)}, +aOC(a,b){if(a==null)return b +if(b==null)return a +return a.ea(b)}, +d6:function d6(){}, +ph:function ph(a,b){var _=this +_.a=a +_.b=b +_.e=_.d=_.c=null}, +aj5:function aj5(a,b,c){this.a=a +this.b=b +this.c=c}, +aj4:function aj4(a,b,c){this.a=a +this.b=b +this.c=c}, +aj3:function aj3(a,b,c){this.a=a +this.b=b +this.c=c}, +a9M:function a9M(){}, +nf:function nf(a,b,c,d,e,f,g,h){var _=this +_.b=a +_.c=b +_.d=c +_.e=null +_.f=!1 +_.r=d +_.y=_.x=_.w=!1 +_.z=e +_.Q=f +_.as=!1 +_.at=null +_.ax=0 +_.ay=!1 +_.ch=g +_.CW=h +_.cx=null}, +ajD:function ajD(){}, +ajC:function ajC(){}, +ajE:function ajE(){}, +ajF:function ajF(){}, +r:function r(){}, +aln:function aln(a){this.a=a}, +alq:function alq(a,b,c){this.a=a +this.b=b +this.c=c}, +alo:function alo(a){this.a=a}, +alp:function alp(){}, +alk:function alk(a,b,c,d,e,f,g,h,i,j,k){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.x=i +_.y=j +_.z=k}, +all:function all(a,b,c){this.a=a +this.b=b +this.c=c}, +alm:function alm(a,b){this.a=a +this.b=b}, +aT:function aT(){}, +es:function es(){}, +at:function at(){}, +px:function px(){}, +akR:function akR(a){this.a=a}, +aAv:function aAv(){}, +WQ:function WQ(a,b,c){this.b=a +this.c=b +this.a=c}, +hE:function hE(){}, +a1p:function a1p(a,b,c){var _=this +_.e=a +_.b=b +_.c=null +_.a=c}, +I3:function I3(a,b,c){var _=this +_.e=a +_.b=b +_.c=null +_.a=c}, +uX:function uX(a,b,c,d,e,f){var _=this +_.e=a +_.f=b +_.w=_.r=!1 +_.x=c +_.y=d +_.z=!1 +_.b=e +_.c=null +_.a=f}, +a2_:function a2_(){var _=this +_.b=_.a=null +_.d=_.c=$ +_.e=!1}, +a_H:function a_H(){}, +a0Y:function a0Y(){}, +aZQ(a,b,c){var s,r,q,p,o=a.b +o.toString +s=t.ot.a(o).b +if(s==null)o=B.W3 +else{o=c.$2(a,new A.az(0,b,0,1/0)) +r=s.b +q=s.c +$label0$0:{if(B.i_===r||B.i0===r||B.cF===r||B.i2===r||B.i1===r){p=null +break $label0$0}if(B.hZ===r){q.toString +p=a.x4(q) +break $label0$0}p=null}q=new A.xd(o,r,p,q) +o=q}return o}, +aHB(a,b){var s=a.a,r=b.a +if(sr)return-1 +else{s=a.b +if(s===b.b)return 0 +else return s===B.al?1:-1}}, +ng:function ng(a,b){this.b=a +this.a=b}, +jI:function jI(a,b){var _=this +_.b=_.a=null +_.ci$=a +_.ak$=b}, +Sh:function Sh(){}, +alj:function alj(a){this.a=a}, +ED:function ED(a,b,c,d,e,f,g,h,i){var _=this +_.B=a +_.aq=_.X=_.a9=_.F=null +_.aH=b +_.aD=c +_.aE=d +_.bj=null +_.bM=!1 +_.d9=_.cZ=_.cY=_.bc=null +_.r0$=e +_.e_$=f +_.a4$=g +_.d8$=h +_.fy=_.fx=null +_.go=!1 +_.k1=_.id=null +_.k2=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=i +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +alu:function alu(){}, +alv:function alv(){}, +alt:function alt(){}, +alr:function alr(){}, +als:function als(a,b){this.a=a +this.b=b}, +nW:function nW(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.e=_.d=null +_.f=!1 +_.w=_.r=null +_.x=$ +_.y=null +_.fx$=0 +_.fy$=d +_.id$=_.go$=0 +_.k1$=!1}, +J2:function J2(){}, +a0Z:function a0Z(){}, +a1_:function a1_(){}, +K1:function K1(){}, +a4Y:function a4Y(){}, +a4Z:function a4Z(){}, +aMH(a){var s=new A.Er(a,null,A.ag(t.T)) +s.aw() +s.saP(null) +return s}, +aZR(a,b,c,d,e,f){var s=b==null?B.b_:b +s=new A.EA(!0,c,e,d,a,s,null,A.ag(t.T)) +s.aw() +s.saP(null) +return s}, +St:function St(){}, +fF:function fF(){}, +Cp:function Cp(a,b){this.a=a +this.b=b}, +EE:function EE(){}, +Er:function Er(a,b,c){var _=this +_.A=a +_.fr$=b +_.fy=_.fx=null +_.go=!1 +_.k1=_.id=null +_.k2=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=c +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +Sj:function Sj(a,b,c,d){var _=this +_.A=a +_.a1=b +_.fr$=c +_.fy=_.fx=null +_.go=!1 +_.k1=_.id=null +_.k2=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=d +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +Eq:function Eq(a,b,c){var _=this +_.A=a +_.fr$=b +_.fy=_.fx=null +_.go=!1 +_.k1=_.id=null +_.k2=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=c +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +Sm:function Sm(a,b,c,d,e){var _=this +_.A=a +_.a1=b +_.al=c +_.fr$=d +_.fy=_.fx=null +_.go=!1 +_.k1=_.id=null +_.k2=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=e +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +Eo:function Eo(){}, +En:function En(a,b,c,d,e,f){var _=this +_.r_$=a +_.ID$=b +_.mU$=c +_.oo$=d +_.fr$=e +_.fy=_.fx=null +_.go=!1 +_.k1=_.id=null +_.k2=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=f +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +S7:function S7(a,b,c,d){var _=this +_.A=a +_.a1=b +_.fr$=c +_.fy=_.fx=null +_.go=!1 +_.k1=_.id=null +_.k2=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=d +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +Bm:function Bm(){}, +pG:function pG(a,b){this.b=a +this.c=b}, +zr:function zr(){}, +Sb:function Sb(a,b,c,d){var _=this +_.A=a +_.a1=null +_.al=b +_.cR=_.bg=null +_.fr$=c +_.fy=_.fx=null +_.go=!1 +_.k1=_.id=null +_.k2=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=d +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +Sa:function Sa(a,b,c,d){var _=this +_.A=a +_.a1=null +_.al=b +_.cR=_.bg=null +_.fr$=c +_.fy=_.fx=null +_.go=!1 +_.k1=_.id=null +_.k2=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=d +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +J3:function J3(){}, +Sn:function Sn(a,b,c,d,e,f,g,h,i){var _=this +_.oo=a +_.ci=b +_.cu=c +_.cH=d +_.dN=e +_.A=f +_.a1=null +_.al=g +_.cR=_.bg=null +_.fr$=h +_.fy=_.fx=null +_.go=!1 +_.k1=_.id=null +_.k2=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=i +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +alw:function alw(a,b){this.a=a +this.b=b}, +So:function So(a,b,c,d,e,f,g){var _=this +_.cu=a +_.cH=b +_.dN=c +_.A=d +_.a1=null +_.al=e +_.cR=_.bg=null +_.fr$=f +_.fy=_.fx=null +_.go=!1 +_.k1=_.id=null +_.k2=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=g +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +alx:function alx(a,b){this.a=a +this.b=b}, +NC:function NC(a,b){this.a=a +this.b=b}, +Sc:function Sc(a,b,c,d,e){var _=this +_.A=null +_.a1=a +_.al=b +_.bg=c +_.fr$=d +_.fy=_.fx=null +_.go=!1 +_.k1=_.id=null +_.k2=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=e +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +SA:function SA(a,b,c){var _=this +_.al=_.a1=_.A=null +_.bg=a +_.cd=_.cR=null +_.fr$=b +_.fy=_.fx=null +_.go=!1 +_.k1=_.id=null +_.k2=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=c +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +alX:function alX(a){this.a=a}, +Ew:function Ew(a,b,c,d,e,f){var _=this +_.A=null +_.a1=a +_.al=b +_.bg=c +_.cd=_.cR=null +_.f7=d +_.fr$=e +_.fy=_.fx=null +_.go=!1 +_.k1=_.id=null +_.k2=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=f +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +ale:function ale(a){this.a=a}, +Sf:function Sf(a,b,c,d){var _=this +_.A=a +_.a1=b +_.fr$=c +_.fy=_.fx=null +_.go=!1 +_.k1=_.id=null +_.k2=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=d +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +ali:function ali(a){this.a=a}, +Sr:function Sr(a,b,c,d,e,f,g,h,i,j,k,l){var _=this +_.d6=a +_.eN=b +_.cn=c +_.d7=d +_.cu=e +_.cH=f +_.dN=g +_.jL=h +_.on=i +_.A=j +_.fr$=k +_.fy=_.fx=null +_.go=!1 +_.k1=_.id=null +_.k2=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=l +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +EA:function EA(a,b,c,d,e,f,g,h){var _=this +_.d6=a +_.eN=b +_.cn=c +_.d7=d +_.cu=e +_.cH=!0 +_.A=f +_.fr$=g +_.fy=_.fx=null +_.go=!1 +_.k1=_.id=null +_.k2=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=h +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +Sv:function Sv(a,b){var _=this +_.a1=_.A=0 +_.fr$=a +_.fy=_.fx=null +_.go=!1 +_.k1=_.id=null +_.k2=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=b +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +Ey:function Ey(a,b,c,d){var _=this +_.A=a +_.a1=b +_.fr$=c +_.fy=_.fx=null +_.go=!1 +_.k1=_.id=null +_.k2=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=d +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +EB:function EB(a,b,c){var _=this +_.A=a +_.fr$=b +_.fy=_.fx=null +_.go=!1 +_.k1=_.id=null +_.k2=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=c +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +Em:function Em(a,b,c,d){var _=this +_.A=a +_.a1=b +_.fr$=c +_.fy=_.fx=null +_.go=!1 +_.k1=_.id=null +_.k2=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=d +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +nn:function nn(a,b,c){var _=this +_.cu=_.d7=_.cn=_.eN=_.d6=null +_.A=a +_.fr$=b +_.fy=_.fx=null +_.go=!1 +_.k1=_.id=null +_.k2=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=c +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +EG:function EG(a,b,c,d,e,f,g,h){var _=this +_.A=a +_.a1=b +_.al=c +_.bg=d +_.cR=e +_.cw=_.c1=_.he=_.f7=_.cd=null +_.ce=f +_.fr$=g +_.fy=_.fx=null +_.go=!1 +_.k1=_.id=null +_.k2=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=h +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +S9:function S9(a,b,c){var _=this +_.A=a +_.fr$=b +_.fy=_.fx=null +_.go=!1 +_.k1=_.id=null +_.k2=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=c +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +Sl:function Sl(a,b){var _=this +_.fr$=a +_.fy=_.fx=null +_.go=!1 +_.k1=_.id=null +_.k2=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=b +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +Sd:function Sd(a,b,c){var _=this +_.A=a +_.fr$=b +_.fy=_.fx=null +_.go=!1 +_.k1=_.id=null +_.k2=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=c +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +Sg:function Sg(a,b,c){var _=this +_.A=a +_.fr$=b +_.fy=_.fx=null +_.go=!1 +_.k1=_.id=null +_.k2=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=c +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +Si:function Si(a,b,c){var _=this +_.A=a +_.a1=null +_.fr$=b +_.fy=_.fx=null +_.go=!1 +_.k1=_.id=null +_.k2=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=c +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +Se:function Se(a,b,c,d,e,f,g){var _=this +_.A=a +_.a1=b +_.al=c +_.bg=d +_.cR=e +_.fr$=f +_.fy=_.fx=null +_.go=!1 +_.k1=_.id=null +_.k2=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=g +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +alh:function alh(a){this.a=a}, +Ep:function Ep(a,b,c,d,e){var _=this +_.A=a +_.a1=b +_.fr$=c +_.fy=_.fx=null +_.go=!1 +_.k1=_.id=null +_.k2=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=d +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null +_.$ti=e}, +a0M:function a0M(){}, +J4:function J4(){}, +J5:function J5(){}, +EF:function EF(a,b,c,d){var _=this +_.B=a +_.F=null +_.a9=b +_.fr$=c +_.fy=_.fx=null +_.go=!1 +_.k1=_.id=null +_.k2=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=d +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +aly:function aly(a){this.a=a}, +a12:function a12(){}, +anR(a,b){var s +if(a.p(0,b))return B.aU +s=b.b +if(sa.d)return B.aT +return b.a>=a.c?B.aT:B.b9}, +aN0(a,b,c){var s,r +if(a.p(0,b))return b +s=b.b +r=a.b +if(!(s<=r))s=s<=a.d&&b.a<=a.a +else s=!0 +if(s)return c===B.q?new A.k(a.a,r):new A.k(a.c,r) +else{s=a.d +return c===B.q?new A.k(a.c,s):new A.k(a.a,s)}}, +aMZ(a,b){return new A.Fi(a,b==null?B.m_:b,B.WL)}, +aMY(a,b){return new A.Fi(a,b==null?B.m_:b,B.fd)}, +pE:function pE(a,b){this.a=a +this.b=b}, +eS:function eS(){}, +Tq:function Tq(){}, +Fj:function Fj(a,b){this.a=a +this.b=b}, +yj:function yj(a,b){this.a=a +this.b=b}, +anM:function anM(){}, +B2:function B2(a){this.a=a}, +Fi:function Fi(a,b,c){this.b=a +this.c=b +this.a=c}, +xN:function xN(a,b){this.a=a +this.b=b}, +Fk:function Fk(a,b){this.a=a +this.b=b}, +pD:function pD(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e}, +u9:function u9(a,b,c){this.a=a +this.b=b +this.c=c}, +Gj:function Gj(a,b){this.a=a +this.b=b}, +a1X:function a1X(){}, +tU:function tU(){}, +alz:function alz(a,b,c){this.a=a +this.b=b +this.c=c}, +EC:function EC(a,b,c,d){var _=this +_.A=null +_.a1=a +_.al=b +_.fr$=c +_.fy=_.fx=null +_.go=!1 +_.k1=_.id=null +_.k2=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=d +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +S5:function S5(){}, +Ss:function Ss(a,b,c,d,e,f){var _=this +_.cn=a +_.d7=b +_.A=null +_.a1=c +_.al=d +_.fr$=e +_.fy=_.fx=null +_.go=!1 +_.k1=_.id=null +_.k2=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=f +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +aoB:function aoB(){}, +Eu:function Eu(a,b,c){var _=this +_.A=a +_.fr$=b +_.fy=_.fx=null +_.go=!1 +_.k1=_.id=null +_.k2=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=c +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +J7:function J7(){}, +o7(a,b){switch(b.a){case 0:return a +case 1:return A.b6c(a)}}, +b4L(a,b){switch(b.a){case 0:return a +case 1:return A.b6d(a)}}, +j2(a,b,c,d,e,f,g,h,i){var s=d==null?f:d,r=c==null?f:c,q=a==null?d:a +if(q==null)q=f +return new A.TN(h,g,f,s,e,r,f>0,b,i,q)}, +P9:function P9(a,b){this.a=a +this.b=b}, +pJ:function pJ(a,b,c,d,e,f,g,h,i,j,k,l){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.x=i +_.y=j +_.z=k +_.Q=l}, +TN:function TN(a,b,c,d,e,f,g,h,i,j){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.r=f +_.w=g +_.x=h +_.y=i +_.z=j}, +xW:function xW(a,b,c){this.a=a +this.b=b +this.c=c}, +TO:function TO(a,b,c){var _=this +_.c=a +_.d=b +_.a=c +_.b=null}, +FD:function FD(){}, +pK:function pK(a){this.a=a}, +nx:function nx(a,b,c){this.ci$=a +this.ak$=b +this.a=c}, +dL:function dL(){}, +alA:function alA(){}, +alB:function alB(a,b){this.a=a +this.b=b}, +a2n:function a2n(){}, +a2q:function a2q(){}, +Sx:function Sx(a,b,c,d,e,f){var _=this +_.aM=a +_.aJ=b +_.bq=$ +_.bZ=!0 +_.e_$=c +_.a4$=d +_.d8$=e +_.fx=null +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=f +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +alC:function alC(a,b,c){this.a=a +this.b=b +this.c=c}, +kk:function kk(){}, +alS:function alS(){}, +hx:function hx(a,b,c){var _=this +_.b=null +_.c=!1 +_.r5$=a +_.ci$=b +_.ak$=c +_.a=null}, +pz:function pz(){}, +alP:function alP(a,b,c){this.a=a +this.b=b +this.c=c}, +alR:function alR(a,b){this.a=a +this.b=b}, +alQ:function alQ(){}, +J8:function J8(){}, +a15:function a15(){}, +a16:function a16(){}, +a2o:function a2o(){}, +a2p:function a2p(){}, +EH:function EH(){}, +Sz:function Sz(a,b,c,d){var _=this +_.bE=null +_.cI=a +_.hD=b +_.fr$=c +_.fx=null +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=d +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +a14:function a14(){}, +aZM(a,b){return new A.iX(a.a-b.a,a.b-b.b,b.c-a.c,b.d-a.d)}, +aZN(a,b,c){var s,r,q,p,o +if(a==b)return a +if(a==null)return new A.iX(b.a*c,b.b*c,b.c*c,b.d*c) +if(b==null){s=1-c +return new A.iX(b.a.S(0,s),b.b.S(0,s),b.c.S(0,s),b.d.S(0,s))}r=A.P(a.a,b.a,c) +r.toString +q=A.P(a.b,b.b,c) +q.toString +p=A.P(a.c,b.c,c) +p.toString +o=A.P(a.d,b.d,c) +o.toString +return new A.iX(r,q,p,o)}, +alV(a,b){var s,r,q,p +for(s=t.Qv,r=a,q=0;r!=null;){p=r.b +p.toString +s.a(p) +if(!p.gBc())q=Math.max(q,A.fL(b.$1(r))) +r=p.ak$}return q}, +aMK(a,b,c,d){var s,r,q,p,o,n=b.w +if(n!=null&&b.f!=null){s=b.f +s.toString +n.toString +r=B.cN.Ks(c.a-s-n)}else{n=b.x +r=n!=null?B.cN.Ks(n):B.cN}n=b.e +if(n!=null&&b.r!=null){s=b.r +s.toString +n.toString +r=r.Co(c.b-s-n)}else{n=b.y +if(n!=null)r=r.Co(n)}a.bJ(r,!0) +q=b.w +if(!(q!=null)){n=b.f +q=n!=null?c.a-n-a.gv(a).a:d.nX(t.EP.a(c.Y(0,a.gv(a)))).a}p=(q<0||q+a.gv(a).a>c.a)&&!0 +o=b.e +if(!(o!=null)){n=b.r +o=n!=null?c.b-n-a.gv(a).b:d.nX(t.EP.a(c.Y(0,a.gv(a)))).b}if(o<0||o+a.gv(a).b>c.b)p=!0 +b.a=new A.k(q,o) +return p}, +iX:function iX(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +fj:function fj(a,b,c){var _=this +_.y=_.x=_.w=_.r=_.f=_.e=null +_.ci$=a +_.ak$=b +_.a=c}, +U7:function U7(a,b){this.a=a +this.b=b}, +EI:function EI(a,b,c,d,e,f,g,h,i){var _=this +_.B=!1 +_.F=null +_.a9=a +_.X=b +_.aq=c +_.aH=d +_.aD=e +_.e_$=f +_.a4$=g +_.d8$=h +_.fy=_.fx=null +_.go=!1 +_.k1=_.id=null +_.k2=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=i +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +alU:function alU(a){this.a=a}, +alT:function alT(a){this.a=a}, +a17:function a17(){}, +a18:function a18(){}, +og:function og(a,b){this.a=a +this.b=b}, +GG:function GG(a,b){this.a=a +this.b=b}, +tV:function tV(){}, +a1b:function a1b(){}, +aZO(a){for(;a!=null;){if(a instanceof A.tW)return a +a=a.gaU(a)}return null}, +aZY(a,b,c){var s=b.aq.a)return q +else if(a0)return a.awh(0,1e5) +return!0}, +yX:function yX(a){this.a=a +this.b=null}, +u5:function u5(a,b){this.a=a +this.b=b}, +aje:function aje(a){this.a=a}, +fi:function fi(){}, +and:function and(a){this.a=a}, +anf:function anf(a){this.a=a}, +ang:function ang(a,b){this.a=a +this.b=b}, +anh:function anh(a){this.a=a}, +anc:function anc(a){this.a=a}, +ane:function ane(a){this.a=a}, +aHa(){var s=new A.uv(new A.bI(new A.aD($.aw,t.d),t.gR)) +s.ST() +return s}, +yn:function yn(a,b){var _=this +_.a=null +_.b=!1 +_.c=null +_.d=a +_.e=null +_.f=b +_.r=$}, +uv:function uv(a){this.a=a +this.c=this.b=null}, +ara:function ara(a){this.a=a}, +Gp:function Gp(a){this.a=a}, +Ts:function Ts(){}, +ao2:function ao2(a){this.a=a}, +aKc(a){var s=$.aKa.i(0,a) +if(s==null){s=$.aKb +$.aKb=s+1 +$.aKa.n(0,a,s) +$.aK9.n(0,s,a)}return s}, +b_r(a,b){var s +if(a.length!==b.length)return!1 +for(s=0;s=0){q.P(r,0,p).split("\n") +q.bL(r,p+2) +n.push(new A.CV())}else n.push(new A.CV())}return n}, +b_w(a){switch(a){case"AppLifecycleState.resumed":return B.fI +case"AppLifecycleState.inactive":return B.j4 +case"AppLifecycleState.hidden":return B.j5 +case"AppLifecycleState.paused":return B.fJ +case"AppLifecycleState.detached":return B.e5}return null}, +xQ:function xQ(){}, +aok:function aok(a){this.a=a}, +aoj:function aoj(a){this.a=a}, +auN:function auN(){}, +auO:function auO(a){this.a=a}, +auP:function auP(a){this.a=a}, +a7X:function a7X(){}, +a9A(a){var s=0,r=A.a1(t.H) +var $async$a9A=A.a2(function(b,c){if(b===1)return A.Z(c,r) +while(true)switch(s){case 0:s=2 +return A.a7(B.bg.dl("Clipboard.setData",A.aY(["text",a.a],t.N,t.z),t.H),$async$a9A) +case 2:return A.a_(null,r)}}) +return A.a0($async$a9A,r)}, +a9r:function a9r(a){this.a=a}, +ado:function ado(a,b){this.a=a +this.b=!1 +this.c=b}, +adp:function adp(){}, +adr:function adr(a){this.a=a}, +adq:function adq(a){this.a=a}, +aY1(a){var s,r,q=a.c,p=B.SR.i(0,q) +if(p==null)p=new A.u(q) +q=a.d +s=B.Tm.i(0,q) +if(s==null)s=new A.j(q) +r=a.a +switch(a.b.a){case 0:return new A.rU(p,s,a.e,r,a.f) +case 1:return new A.oZ(p,s,null,r,a.f) +case 2:return new A.CR(p,s,a.e,r,!1)}}, +wE:function wE(a,b,c){this.c=a +this.a=b +this.b=c}, +oX:function oX(){}, +rU:function rU(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e}, +oZ:function oZ(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e}, +CR:function CR(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e}, +aer:function aer(a,b,c){var _=this +_.a=a +_.b=b +_.c=c +_.d=!1 +_.e=null}, +PH:function PH(a,b){this.a=a +this.b=b}, +CQ:function CQ(a,b){this.a=a +this.b=b}, +PI:function PI(a,b,c,d){var _=this +_.a=null +_.b=a +_.c=b +_.d=null +_.e=c +_.f=d}, +Ze:function Ze(){}, +agu:function agu(a,b,c){this.a=a +this.b=b +this.c=c}, +agv:function agv(){}, +j:function j(a){this.a=a}, +u:function u(a){this.a=a}, +Zf:function Zf(){}, +aGF(a,b,c,d){return new A.E5(a,c,b,d)}, +aGo(a){return new A.Dg(a)}, +ly:function ly(a,b){this.a=a +this.b=b}, +E5:function E5(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +Dg:function Dg(a){this.a=a}, +apo:function apo(){}, +ag3:function ag3(){}, +ag5:function ag5(){}, +apb:function apb(){}, +apd:function apd(a,b){this.a=a +this.b=b}, +apf:function apf(){}, +b16(a){var s,r,q +for(s=A.o(a),s=s.h("@<1>").N(s.z[1]),r=new A.bN(J.ap(a.a),a.b,s.h("bN<1,2>")),s=s.z[1];r.q();){q=r.a +if(q==null)q=s.a(q) +if(!q.j(0,B.aP))return q}return null}, +ahZ:function ahZ(a,b){this.a=a +this.b=b}, +Dh:function Dh(){}, +d0:function d0(){}, +Xy:function Xy(){}, +a2M:function a2M(a,b){this.a=a +this.b=b}, +jH:function jH(a){this.a=a}, +a_2:function a_2(){}, +om:function om(a,b,c){this.a=a +this.b=b +this.$ti=c}, +a7G:function a7G(a,b){this.a=a +this.b=b}, +tp:function tp(a,b){this.a=a +this.b=b}, +ahM:function ahM(a,b){this.a=a +this.b=b}, +kr:function kr(a,b){this.a=a +this.b=b}, +aZG(a){var s,r,q,p,o={} +o.a=null +s=new A.akn(o,a).$0() +r=$.aEM().d +q=A.o(r).h("aX<1>") +p=A.hp(new A.aX(r,q),q.h("n.E")).p(0,s.gk9()) +q=J.bq(a,"type") +q.toString +A.bQ(q) +switch(q){case"keydown":return new A.lK(o.a,p,s) +case"keyup":return new A.xr(null,!1,s) +default:throw A.c(A.wc("Unknown key event type: "+q))}}, +rV:function rV(a,b){this.a=a +this.b=b}, +iO:function iO(a,b){this.a=a +this.b=b}, +Ei:function Ei(){}, +kv:function kv(){}, +akn:function akn(a,b){this.a=a +this.b=b}, +lK:function lK(a,b,c){this.a=a +this.b=b +this.c=c}, +xr:function xr(a,b,c){this.a=a +this.b=b +this.c=c}, +aks:function aks(a,b){this.a=a +this.d=b}, +dy:function dy(a,b){this.a=a +this.b=b}, +a0v:function a0v(){}, +a0u:function a0u(){}, +S1:function S1(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e}, +EQ:function EQ(a,b){var _=this +_.b=_.a=null +_.f=_.e=_.d=_.c=!1 +_.r=a +_.fx$=0 +_.fy$=b +_.id$=_.go$=0 +_.k1$=!1}, +amf:function amf(a){this.a=a}, +amg:function amg(a){this.a=a}, +dR:function dR(a,b,c,d,e,f){var _=this +_.a=a +_.b=null +_.c=b +_.d=c +_.e=d +_.f=e +_.r=f +_.x=_.w=!1}, +amc:function amc(){}, +amd:function amd(){}, +amb:function amb(){}, +ame:function ame(){}, +y7:function y7(a,b){this.a=a +this.b=b}, +U5:function U5(a,b){this.a=a +this.b=b}, +aag:function aag(){this.a=null +this.b=$}, +apS(a){var s=0,r=A.a1(t.H) +var $async$apS=A.a2(function(b,c){if(b===1)return A.Z(c,r) +while(true)switch(s){case 0:s=2 +return A.a7(B.bg.dl(u.p,A.aY(["label",a.a,"primaryColor",a.b],t.N,t.z),t.H),$async$apS) +case 2:return A.a_(null,r)}}) +return A.a0($async$apS,r)}, +aNr(a){if($.yd!=null){$.yd=a +return}if(a.j(0,$.aH5))return +$.yd=a +A.fq(new A.apT())}, +a6z:function a6z(a,b){this.a=a +this.b=b}, +lX:function lX(a,b,c,d,e,f,g,h){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h}, +apT:function apT(){}, +Uo(a){var s=0,r=A.a1(t.H) +var $async$Uo=A.a2(function(b,c){if(b===1)return A.Z(c,r) +while(true)switch(s){case 0:s=2 +return A.a7(B.bg.dl("SystemSound.play",a.I(),t.H),$async$Uo) +case 2:return A.a_(null,r)}}) +return A.a0($async$Uo,r)}, +Un:function Un(a,b){this.a=a +this.b=b}, +j3:function j3(){}, +vv:function vv(a){this.a=a}, +wG:function wG(a){this.a=a}, +DQ:function DQ(a){this.a=a}, +Bx:function Bx(a){this.a=a}, +cn(a,b,c,d){var s=b1 +if(a1===0)m=0===a1 +else m=!1 +l=n&&a3a +q=!l +i=q&&!m&&sd||!q||k +if(c===o)return new A.yh(c,p,r) +else if((!h||i)&&s)return new A.Uv(new A.ce(!n?a-1:b,a),c,p,r) +else if((b===a||j)&&s)return new A.Uw(B.d.P(a0,d,d+(a1-d)),a,c,p,r) +else if(e)return new A.Ux(a0,new A.ce(b,a),c,p,r) +return new A.yh(c,p,r)}, +pO:function pO(){}, +Uw:function Uw(a,b,c,d,e){var _=this +_.d=a +_.e=b +_.a=c +_.b=d +_.c=e}, +Uv:function Uv(a,b,c,d){var _=this +_.d=a +_.a=b +_.b=c +_.c=d}, +Ux:function Ux(a,b,c,d,e){var _=this +_.d=a +_.e=b +_.a=c +_.b=d +_.c=e}, +yh:function yh(a,b,c){this.a=a +this.b=b +this.c=c}, +a2Y:function a2Y(){}, +pP:function pP(){}, +a_6:function a_6(a,b){this.a=a +this.b=b}, +aBc:function aBc(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=!1}, +Oy:function Oy(a,b,c){this.a=a +this.b=b +this.c=c}, +acG:function acG(a,b,c){this.a=a +this.b=b +this.c=c}, +b4B(a){switch(a){case"TextAffinity.downstream":return B.m +case"TextAffinity.upstream":return B.al}return null}, +aNw(a){var s,r,q,p,o=J.aF(a),n=A.bQ(o.i(a,"text")),m=A.j7(o.i(a,"selectionBase")) +if(m==null)m=-1 +s=A.j7(o.i(a,"selectionExtent")) +if(s==null)s=-1 +r=A.b4B(A.dk(o.i(a,"selectionAffinity"))) +if(r==null)r=B.m +q=A.v0(o.i(a,"selectionIsDirectional")) +p=A.cn(r,m,s,q===!0) +m=A.j7(o.i(a,"composingBase")) +if(m==null)m=-1 +o=A.j7(o.i(a,"composingExtent")) +return new A.dF(n,p,new A.ce(m,o==null?-1:o))}, +aNx(a){var s=A.a([],t.u1),r=$.aNy +$.aNy=r+1 +return new A.aqm(s,r,a)}, +b4D(a){switch(a){case"TextInputAction.none":return B.Zt +case"TextInputAction.unspecified":return B.Zu +case"TextInputAction.go":return B.Zx +case"TextInputAction.search":return B.Zy +case"TextInputAction.send":return B.Zz +case"TextInputAction.next":return B.ZA +case"TextInputAction.previous":return B.ZB +case"TextInputAction.continueAction":return B.ZC +case"TextInputAction.join":return B.ZD +case"TextInputAction.route":return B.Zv +case"TextInputAction.emergencyCall":return B.Zw +case"TextInputAction.done":return B.AY +case"TextInputAction.newline":return B.AX}throw A.c(A.wb(A.a([A.oB("Unknown text input action: "+a)],t.E)))}, +b4C(a){switch(a){case"FloatingCursorDragState.start":return B.oQ +case"FloatingCursorDragState.update":return B.kg +case"FloatingCursorDragState.end":return B.kh}throw A.c(A.wb(A.a([A.oB("Unknown text cursor action: "+a)],t.E)))}, +aoX:function aoX(a,b){this.a=a +this.b=b}, +aoY:function aoY(a,b){this.a=a +this.b=b}, +Gc:function Gc(a,b,c){this.a=a +this.b=b +this.c=c}, +hA:function hA(a,b){this.a=a +this.b=b}, +aq2:function aq2(a,b){this.a=a +this.b=b}, +aql:function aql(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.x=i +_.z=j +_.Q=k +_.as=l +_.at=m +_.ax=n}, +C8:function C8(a,b){this.a=a +this.b=b}, +akm:function akm(a,b){this.a=a +this.b=b}, +dF:function dF(a,b,c){this.a=a +this.b=b +this.c=c}, +aq6:function aq6(a,b){this.a=a +this.b=b}, +jz:function jz(a,b){this.a=a +this.b=b}, +aqX:function aqX(){}, +aqj:function aqj(){}, +ua:function ua(a,b,c){this.a=a +this.b=b +this.c=c}, +aqm:function aqm(a,b,c){var _=this +_.d=_.c=_.b=_.a=null +_.e=a +_.f=b +_.r=c}, +Uz:function Uz(a,b,c){var _=this +_.a=a +_.b=b +_.c=$ +_.d=null +_.e=$ +_.f=c +_.w=_.r=!1}, +aqC:function aqC(a){this.a=a}, +aqA:function aqA(){}, +aqz:function aqz(a,b){this.a=a +this.b=b}, +aqB:function aqB(a){this.a=a}, +aqD:function aqD(a){this.a=a}, +Gb:function Gb(){}, +a_I:function a_I(){}, +ayG:function ayG(){}, +a4K:function a4K(){}, +UZ:function UZ(a,b){this.a=a +this.b=b}, +V0:function V0(){this.a=$ +this.b=null}, +arE:function arE(){}, +b3C(a){var s=A.bc("parent") +a.jm(new A.aCN(s)) +return s.aI()}, +vg(a,b){return new A.mq(a,b,null)}, +LC(a,b){var s,r=t.L1,q=a.fY(r) +for(;s=q!=null,s;){if(b.$1(q))break +q=A.b3C(q).fY(r)}return s}, +aF5(a){var s={} +s.a=null +A.LC(a,new A.a6f(s)) +return B.Dm}, +aF7(a,b,c){var s={} +s.a=null +if((b==null?null:A.t(b))==null)A.cf(c) +A.LC(a,new A.a6i(s,b,a,c)) +return s.a}, +aF6(a,b){var s={} +s.a=null +A.cf(b) +A.LC(a,new A.a6g(s,null,b)) +return s.a}, +a6e(a,b,c){var s,r=b==null?null:A.t(b) +if(r==null)r=A.cf(c) +s=a.r.i(0,r) +if(c.h("bk<0>?").b(s))return s +else return null}, +qw(a,b,c){var s={} +s.a=null +A.LC(a,new A.a6h(s,b,a,c)) +return s.a}, +aV8(a,b,c){var s={} +s.a=null +A.LC(a,new A.a6j(s,b,a,c)) +return s.a}, +aL2(a,b,c,d,e,f,g,h,i,j){return new A.rz(d,e,!1,a,j,h,i,g,f,c,null)}, +aKj(a){return new A.Bv(a,new A.b5(A.a([],t.g),t.c))}, +aCN:function aCN(a){this.a=a}, +b6:function b6(){}, +bk:function bk(){}, +dz:function dz(){}, +cT:function cT(a,b,c){var _=this +_.c=a +_.a=b +_.b=null +_.$ti=c}, +a6d:function a6d(){}, +mq:function mq(a,b,c){this.d=a +this.e=b +this.a=c}, +a6f:function a6f(a){this.a=a}, +a6i:function a6i(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +a6g:function a6g(a,b,c){this.a=a +this.b=b +this.c=c}, +a6h:function a6h(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +a6j:function a6j(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +GN:function GN(a,b,c){var _=this +_.d=a +_.e=b +_.a=null +_.b=c +_.c=null}, +asB:function asB(a){this.a=a}, +GM:function GM(a,b,c,d,e){var _=this +_.f=a +_.r=b +_.w=c +_.b=d +_.a=e}, +rz:function rz(a,b,c,d,e,f,g,h,i,j,k){var _=this +_.c=a +_.d=b +_.e=c +_.w=d +_.x=e +_.y=f +_.z=g +_.Q=h +_.as=i +_.ax=j +_.a=k}, +HU:function HU(a,b){var _=this +_.f=_.e=_.d=!1 +_.r=a +_.a=null +_.b=b +_.c=null}, +avy:function avy(a){this.a=a}, +avw:function avw(a){this.a=a}, +avr:function avr(a){this.a=a}, +avs:function avs(a){this.a=a}, +avq:function avq(a,b){this.a=a +this.b=b}, +avv:function avv(a){this.a=a}, +avt:function avt(a){this.a=a}, +avu:function avu(a,b){this.a=a +this.b=b}, +avx:function avx(a,b){this.a=a +this.b=b}, +Vm:function Vm(a){this.a=a +this.b=null}, +Bv:function Bv(a,b){this.c=a +this.a=b +this.b=null}, +vh:function vh(){}, +vs:function vs(){}, +hQ:function hQ(){}, +NU:function NU(){}, +nl:function nl(){}, +RR:function RR(a){var _=this +_.f=_.e=$ +_.a=a +_.b=null}, +zj:function zj(){}, +II:function II(a,b,c,d,e,f,g,h){var _=this +_.e=a +_.f=b +_.apx$=c +_.apy$=d +_.apz$=e +_.apA$=f +_.a=g +_.b=null +_.$ti=h}, +IJ:function IJ(a,b,c,d,e,f,g,h){var _=this +_.e=a +_.f=b +_.apx$=c +_.apy$=d +_.apz$=e +_.apA$=f +_.a=g +_.b=null +_.$ti=h}, +Hk:function Hk(a,b,c,d){var _=this +_.c=a +_.d=b +_.a=c +_.b=null +_.$ti=d}, +VF:function VF(){}, +VD:function VD(){}, +Z9:function Z9(){}, +KO:function KO(){}, +KP:function KP(){}, +aJz(a,b,c){return new A.Aa(a,b,c,null)}, +Aa:function Aa(a,b,c,d){var _=this +_.c=a +_.e=b +_.f=c +_.a=d}, +VO:function VO(a,b,c){var _=this +_.e9$=a +_.c0$=b +_.a=null +_.b=c +_.c=null}, +VN:function VN(a,b,c,d,e,f,g,h){var _=this +_.e=a +_.f=b +_.r=c +_.w=d +_.x=e +_.y=f +_.c=g +_.a=h}, +a4q:function a4q(){}, +aJC(a,b,c){return new A.Ah(b,a,null,c.h("Ah<0>"))}, +Ah:function Ah(a,b,c,d){var _=this +_.e=a +_.c=b +_.a=c +_.$ti=d}, +b53(a,a0){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b=null +if(a==null||a.length===0)return B.b.gL(a0) +s=t.N +r=t.da +q=A.jk(b,b,b,s,r) +p=A.jk(b,b,b,s,r) +o=A.jk(b,b,b,s,r) +n=A.jk(b,b,b,s,r) +m=A.jk(b,b,b,t.ob,r) +for(l=0;l<1;++l){k=a0[l] +s=k.a +r=B.bX.i(0,s) +if(r==null)r=s +j=k.c +i=B.ch.i(0,j) +if(i==null)i=j +i=r+"_null_"+A.h(i) +if(q.i(0,i)==null)q.n(0,i,k) +r=B.bX.i(0,s) +r=(r==null?s:r)+"_null" +if(o.i(0,r)==null)o.n(0,r,k) +r=B.bX.i(0,s) +if(r==null)r=s +i=B.ch.i(0,j) +if(i==null)i=j +i=r+"_"+A.h(i) +if(p.i(0,i)==null)p.n(0,i,k) +r=B.bX.i(0,s) +s=r==null?s:r +if(n.i(0,s)==null)n.n(0,s,k) +s=B.ch.i(0,j) +if(s==null)s=j +if(m.i(0,s)==null)m.n(0,s,k)}for(h=b,g=h,f=0;f"))}, +WO:function WO(a,b,c,d){var _=this +_.e=a +_.f=b +_.c=c +_.a=d}, +a0P:function a0P(a,b,c,d){var _=this +_.A=a +_.a1=null +_.al=b +_.fr$=c +_.fy=_.fx=null +_.go=!1 +_.k1=_.id=null +_.k2=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=d +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +Uu:function Uu(){}, +UO:function UO(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +il:function il(a,b){this.a=a +this.b=b}, +av3:function av3(a,b,c){var _=this +_.b=a +_.c=b +_.d=0 +_.a=c}, +w1:function w1(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,b0,b1,b2,b3,b4,b5,b6,b7,b8,b9,c0,c1,c2,c3){var _=this +_.c=a +_.d=b +_.r=c +_.w=d +_.x=e +_.y=f +_.z=g +_.Q=h +_.as=i +_.ax=j +_.ay=k +_.CW=l +_.cy=m +_.db=n +_.dx=o +_.fy=p +_.go=q +_.k1=r +_.k2=s +_.k3=a0 +_.ok=a1 +_.p1=a2 +_.p2=a3 +_.p3=a4 +_.to=a5 +_.x1=a6 +_.xr=a7 +_.y2=a8 +_.aL=a9 +_.bG=b0 +_.aM=b1 +_.aJ=b2 +_.bq=b3 +_.bZ=b4 +_.bt=b5 +_.B=b6 +_.X=b7 +_.aq=b8 +_.aD=b9 +_.bj=c0 +_.eP=c1 +_.dv=c2 +_.a=c3}, +oA:function oA(a,b,c,d,e,f,g,h,i,j,k){var _=this +_.e=_.d=null +_.f=$ +_.r=a +_.w=b +_.x=c +_.Q=_.z=null +_.as=d +_.at=null +_.ax=e +_.ay=f +_.ch=g +_.CW=!1 +_.cx=null +_.db=_.cy=$ +_.fr=_.dy=_.dx=null +_.fx=!0 +_.k2=_.k1=_.id=_.go=_.fy=null +_.k3=0 +_.p1=_.ok=_.k4=!1 +_.p2=$ +_.p3=0 +_.R8=_.p4=null +_.RG=$ +_.rx=-1 +_.ry=null +_.y1=_.xr=_.x2=_.x1=_.to=$ +_.dD$=h +_.b9$=i +_.ii$=j +_.a=null +_.b=k +_.c=null}, +abh:function abh(){}, +abA:function abA(a){this.a=a}, +abB:function abB(a){this.a=a}, +abC:function abC(a){this.a=a}, +abD:function abD(a){this.a=a}, +abE:function abE(a){this.a=a}, +abF:function abF(a){this.a=a}, +abG:function abG(a){this.a=a}, +abH:function abH(a){this.a=a}, +abI:function abI(a){this.a=a}, +abJ:function abJ(a){this.a=a}, +abK:function abK(a){this.a=a}, +abL:function abL(a){this.a=a}, +abN:function abN(a){this.a=a}, +abd:function abd(a,b){this.a=a +this.b=b}, +abl:function abl(a,b){this.a=a +this.b=b}, +abM:function abM(a){this.a=a}, +abf:function abf(a){this.a=a}, +abp:function abp(a){this.a=a}, +abi:function abi(){}, +abj:function abj(a){this.a=a}, +abk:function abk(a){this.a=a}, +abe:function abe(){}, +abg:function abg(a){this.a=a}, +abq:function abq(a){this.a=a}, +abs:function abs(a){this.a=a}, +abr:function abr(a){this.a=a}, +abO:function abO(a){this.a=a}, +abP:function abP(a){this.a=a}, +abQ:function abQ(a,b,c){this.a=a +this.b=b +this.c=c}, +abm:function abm(a,b){this.a=a +this.b=b}, +abn:function abn(a,b){this.a=a +this.b=b}, +abo:function abo(a,b){this.a=a +this.b=b}, +abc:function abc(a){this.a=a}, +abu:function abu(a){this.a=a}, +abw:function abw(a){this.a=a}, +abv:function abv(a){this.a=a}, +aby:function aby(a){this.a=a}, +abx:function abx(a){this.a=a}, +abz:function abz(a,b,c){this.a=a +this.b=b +this.c=c}, +abt:function abt(a){this.a=a}, +HK:function HK(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,b0,b1,b2,b3,b4,b5,b6,b7,b8,b9,c0){var _=this +_.e=a +_.f=b +_.r=c +_.w=d +_.x=e +_.y=f +_.z=g +_.Q=h +_.as=i +_.at=j +_.ax=k +_.ay=l +_.ch=m +_.CW=n +_.cx=o +_.cy=p +_.db=q +_.dx=r +_.dy=s +_.fr=a0 +_.fx=a1 +_.fy=a2 +_.go=a3 +_.id=a4 +_.k1=a5 +_.k2=a6 +_.k3=a7 +_.k4=a8 +_.ok=a9 +_.p1=b0 +_.p2=b1 +_.p3=b2 +_.p4=b3 +_.R8=b4 +_.RG=b5 +_.rx=b6 +_.ry=b7 +_.to=b8 +_.c=b9 +_.a=c0}, +aAj:function aAj(a,b,c,d,e,f,g,h,i){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.x=i}, +Jj:function Jj(a,b,c,d,e,f){var _=this +_.c=a +_.d=b +_.e=c +_.f=d +_.r=e +_.a=f}, +a1L:function a1L(a,b){var _=this +_.d=a +_.a=null +_.b=b +_.c=null}, +aAk:function aAk(a){this.a=a}, +kX:function kX(a,b,c,d,e){var _=this +_.x=a +_.e=b +_.b=c +_.c=d +_.a=e}, +nL:function nL(a,b,c,d,e){var _=this +_.e=a +_.f=b +_.r=c +_.a=d +_.b=null +_.$ti=e}, +Kk:function Kk(a,b,c,d,e,f,g,h){var _=this +_.e=a +_.f=b +_.r=c +_.w=d +_.x=e +_.y=f +_.a=g +_.b=null +_.$ti=h}, +Kl:function Kl(a,b,c){var _=this +_.e=a +_.r=_.f=null +_.a=b +_.b=null +_.$ti=c}, +a1T:function a1T(a,b){this.e=a +this.a=b +this.b=null}, +X5:function X5(a,b){this.e=a +this.a=b +this.b=null}, +YH:function YH(a,b){this.a=a +this.b=b}, +a46:function a46(a,b,c){var _=this +_.ay=a +_.w=!1 +_.a=b +_.fx$=0 +_.fy$=c +_.id$=_.go$=0 +_.k1$=!1}, +HL:function HL(){}, +XU:function XU(){}, +HM:function HM(){}, +XV:function XV(){}, +XW:function XW(){}, +b5i(a){var s,r,q +for(s=a.length,r=!1,q=0;q>"),n=new A.R(a,new A.az8(),o) +for(s=new A.bu(n,n.gu(n),o.h("bu")),o=o.h("af.E"),r=null;s.q();){q=s.d +p=q==null?o.a(q):q +r=(r==null?p:r).rk(0,p)}if(r.ga7(r))return B.b.gL(a).a +return B.b.vE(B.b.gL(a).gW7(),r.glr(r)).w}, +aOv(a,b){A.ob(a,new A.aza(b),t.zP)}, +b1Q(a,b){A.ob(a,new A.az7(b),t.h7)}, +aGM(){return new A.akF(A.A(t.l5,t.UJ),A.b6g())}, +aL0(a,b){return new A.Cb(b==null?A.aGM():b,a,null)}, +ad9(a){var s +for(;s=a.Q,s!=null;a=s){if(a.e==null)return null +if(a instanceof A.HT)return a}return null}, +wf(a){var s,r=A.aFW(a,!1,!0) +if(r==null)return null +s=A.ad9(r) +return s==null?null:s.dy}, +aCJ:function aCJ(a){this.a=a}, +yW:function yW(a,b){this.b=a +this.c=b}, +pS:function pS(a,b){this.a=a +this.b=b}, +UX:function UX(a,b){this.a=a +this.b=b}, +OU:function OU(){}, +ada:function ada(){}, +adc:function adc(a,b){this.a=a +this.b=b}, +adb:function adb(a){this.a=a}, +yR:function yR(a,b){this.a=a +this.b=b}, +XE:function XE(a){this.a=a}, +aar:function aar(){}, +azb:function azb(a){this.a=a}, +aaz:function aaz(a,b){this.a=a +this.b=b}, +aaB:function aaB(a){this.a=a}, +aaA:function aaA(a){this.a=a}, +aaC:function aaC(a){this.a=a}, +aaD:function aaD(a){this.a=a}, +aat:function aat(a){this.a=a}, +aau:function aau(a){this.a=a}, +aav:function aav(){}, +aaw:function aaw(a){this.a=a}, +aax:function aax(a){this.a=a}, +aay:function aay(){}, +aas:function aas(a,b,c){this.a=a +this.b=b +this.c=c}, +aaE:function aaE(a){this.a=a}, +aaF:function aaF(a){this.a=a}, +aaG:function aaG(a){this.a=a}, +aaH:function aaH(a){this.a=a}, +ek:function ek(a,b,c){var _=this +_.a=a +_.b=b +_.c=c +_.d=null}, +az8:function az8(){}, +aza:function aza(a){this.a=a}, +az9:function az9(){}, +mc:function mc(a){this.a=a +this.b=null}, +az6:function az6(){}, +az7:function az7(a){this.a=a}, +akF:function akF(a,b){this.cH$=a +this.a=b}, +akG:function akG(){}, +akH:function akH(){}, +akI:function akI(a){this.a=a}, +Cb:function Cb(a,b,c){this.c=a +this.f=b +this.a=c}, +HT:function HT(a,b,c,d,e,f,g,h,i){var _=this +_.dy=a +_.a=b +_.b=c +_.c=d +_.d=e +_.e=null +_.f=f +_.r=g +_.y=_.x=_.w=null +_.z=!1 +_.Q=null +_.as=h +_.ax=_.at=null +_.ay=!1 +_.fx$=0 +_.fy$=i +_.id$=_.go$=0 +_.k1$=!1}, +Yz:function Yz(a){var _=this +_.d=$ +_.a=null +_.b=a +_.c=null}, +SH:function SH(a){this.a=a +this.b=null}, +tw:function tw(){}, +QG:function QG(a){this.a=a +this.b=null}, +tN:function tN(){}, +RM:function RM(a){this.a=a +this.b=null}, +Bu:function Bu(a,b){this.c=a +this.a=b +this.b=null}, +YA:function YA(){}, +a0B:function a0B(){}, +a4N:function a4N(){}, +a4O:function a4O(){}, +b1p(a){a.ez() +a.b1(A.aDQ())}, +aX3(a,b){var s,r,q,p=a.d +p===$&&A.b() +s=b.d +s===$&&A.b() +r=p-s +if(r!==0)return r +q=b.Q +if(a.Q!==q)return q?-1:1 +return 0}, +aX4(a,b){var s=A.S(b).h("R<1,f6>") +return A.aWr(!0,A.V(new A.R(b,new A.abU(),s),!0,s.h("af.E")),a,B.Qi,!0,B.KV,null)}, +aX2(a){a.bY() +a.b1(A.aQJ())}, +BS(a){var s=a.a,r=s instanceof A.rx?s:null +return new A.Op("",r,new A.pU())}, +b_W(a){var s=new A.fk(a.ac(),a,B.a0) +s.gcQ(s).c=s +s.gcQ(s).a=a +return s}, +aXR(a){return new A.fS(A.jk(null,null,null,t.h,t.X),a,B.a0)}, +aYz(a){return new A.iQ(A.ds(t.h),a,B.a0)}, +aI2(a,b,c,d){var s=new A.bG(b,c,"widgets library",a,d,!1) +A.d4(s) +return s}, +hT:function hT(){}, +bp:function bp(a,b){this.a=a +this.$ti=b}, +rF:function rF(a,b){this.a=a +this.$ti=b}, +i:function i(){}, +ao:function ao(){}, +X:function X(){}, +aAS:function aAS(a,b){this.a=a +this.b=b}, +a9:function a9(){}, +aV:function aV(){}, +ez:function ez(){}, +b4:function b4(){}, +av:function av(){}, +PR:function PR(){}, +b3:function b3(){}, +fe:function fe(){}, +yS:function yS(a,b){this.a=a +this.b=b}, +Z2:function Z2(a){this.a=!1 +this.b=a}, +awc:function awc(a,b){this.a=a +this.b=b}, +a82:function a82(a,b,c,d){var _=this +_.a=null +_.b=a +_.c=b +_.d=!1 +_.e=null +_.f=c +_.r=0 +_.w=!1 +_.y=_.x=null +_.z=d}, +a83:function a83(a,b,c){this.a=a +this.b=b +this.c=c}, +QJ:function QJ(){}, +aym:function aym(a,b){this.a=a +this.b=b}, +aI:function aI(){}, +abX:function abX(a){this.a=a}, +abV:function abV(a){this.a=a}, +abU:function abU(){}, +abY:function abY(a){this.a=a}, +abZ:function abZ(a){this.a=a}, +ac_:function ac_(a){this.a=a}, +abS:function abS(a){this.a=a}, +abW:function abW(){}, +abT:function abT(a){this.a=a}, +Op:function Op(a,b,c){this.d=a +this.e=b +this.a=c}, +Ba:function Ba(){}, +a9G:function a9G(){}, +a9H:function a9H(){}, +y1:function y1(a,b){var _=this +_.ax=null +_.ay=!1 +_.c=_.b=_.a=null +_.d=$ +_.e=a +_.f=null +_.r=b +_.y=_.x=null +_.z=!1 +_.Q=!0 +_.at=_.as=!1}, +fk:function fk(a,b,c){var _=this +_.k3=a +_.k4=!1 +_.ax=null +_.ay=!1 +_.c=_.b=_.a=null +_.d=$ +_.e=b +_.f=null +_.r=c +_.y=_.x=null +_.z=!1 +_.Q=!0 +_.at=_.as=!1}, +Ec:function Ec(){}, +pj:function pj(a,b,c){var _=this +_.ax=null +_.ay=!1 +_.c=_.b=_.a=null +_.d=$ +_.e=a +_.f=null +_.r=b +_.y=_.x=null +_.z=!1 +_.Q=!0 +_.at=_.as=!1 +_.$ti=c}, +aj8:function aj8(a){this.a=a}, +fS:function fS(a,b,c){var _=this +_.y2=a +_.ax=null +_.ay=!1 +_.c=_.b=_.a=null +_.d=$ +_.e=b +_.f=null +_.r=c +_.y=_.x=null +_.z=!1 +_.Q=!0 +_.at=_.as=!1}, +bi:function bi(){}, +amk:function amk(){}, +PQ:function PQ(a,b){var _=this +_.ax=null +_.ay=!1 +_.c=_.b=_.a=_.ch=null +_.d=$ +_.e=a +_.f=null +_.r=b +_.y=_.x=null +_.z=!1 +_.Q=!0 +_.at=_.as=!1}, +Fv:function Fv(a,b){var _=this +_.ax=_.k4=null +_.ay=!1 +_.c=_.b=_.a=_.ch=null +_.d=$ +_.e=a +_.f=null +_.r=b +_.y=_.x=null +_.z=!1 +_.Q=!0 +_.at=_.as=!1}, +iQ:function iQ(a,b,c){var _=this +_.k4=$ +_.ok=a +_.ax=null +_.ay=!1 +_.c=_.b=_.a=_.ch=null +_.d=$ +_.e=b +_.f=null +_.r=c +_.y=_.x=null +_.z=!1 +_.Q=!0 +_.at=_.as=!1}, +ai6:function ai6(a){this.a=a}, +SB:function SB(){}, +oQ:function oQ(a,b,c){this.a=a +this.b=b +this.$ti=c}, +a_g:function a_g(a,b){var _=this +_.c=_.b=_.a=null +_.d=$ +_.e=a +_.f=null +_.r=b +_.y=_.x=null +_.z=!1 +_.Q=!0 +_.at=_.as=!1}, +a_l:function a_l(a){this.a=a}, +a2x:function a2x(){}, +hn(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3){return new A.oK(b,a2,a3,a0,a1,p,r,s,q,f,l,h,j,k,i,g,m,o,n,a,d,c,e)}, +rE:function rE(){}, +cM:function cM(a,b,c){this.a=a +this.b=b +this.$ti=c}, +oK:function oK(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3){var _=this +_.c=a +_.d=b +_.e=c +_.f=d +_.r=e +_.w=f +_.x=g +_.y=h +_.z=i +_.ay=j +_.cy=k +_.x2=l +_.xr=m +_.y1=n +_.y2=o +_.aL=p +_.bG=q +_.aJ=r +_.bq=s +_.aD=a0 +_.aE=a1 +_.bj=a2 +_.a=a3}, +adQ:function adQ(a){this.a=a}, +adR:function adR(a,b){this.a=a +this.b=b}, +adS:function adS(a){this.a=a}, +adW:function adW(a,b){this.a=a +this.b=b}, +adX:function adX(a){this.a=a}, +adY:function adY(a,b){this.a=a +this.b=b}, +adZ:function adZ(a){this.a=a}, +ae_:function ae_(a,b){this.a=a +this.b=b}, +ae0:function ae0(a){this.a=a}, +ae1:function ae1(a,b){this.a=a +this.b=b}, +ae2:function ae2(a){this.a=a}, +adT:function adT(a,b){this.a=a +this.b=b}, +adU:function adU(a){this.a=a}, +adV:function adV(a,b){this.a=a +this.b=b}, +lJ:function lJ(a,b,c,d,e){var _=this +_.c=a +_.d=b +_.e=c +_.f=d +_.a=e}, +xq:function xq(a,b){var _=this +_.d=a +_.a=_.e=null +_.b=b +_.c=null}, +YF:function YF(a,b,c,d){var _=this +_.e=a +_.f=b +_.c=c +_.a=d}, +ao1:function ao1(){}, +auU:function auU(a){this.a=a}, +auZ:function auZ(a){this.a=a}, +auY:function auY(a){this.a=a}, +auV:function auV(a){this.a=a}, +auW:function auW(a){this.a=a}, +auX:function auX(a,b){this.a=a +this.b=b}, +av_:function av_(a){this.a=a}, +av0:function av0(a){this.a=a}, +av1:function av1(a,b){this.a=a +this.b=b}, +aLc(a,b,c,d,e,f){return new A.mS(e,b,a,c,d,f,null)}, +aLe(a,b,c){var s=A.A(t.K,t.U3) +a.b1(new A.aeB(c,new A.aeA(s,b))) +return s}, +aOj(a,b){var s,r=a.ga_() +r.toString +t.x.a(r) +s=r.br(0,b==null?null:b.ga_()) +r=r.gv(r) +return A.hs(s,new A.w(0,0,0+r.a,0+r.b))}, +wq:function wq(a,b){this.a=a +this.b=b}, +mS:function mS(a,b,c,d,e,f,g){var _=this +_.c=a +_.d=b +_.e=c +_.f=d +_.r=e +_.w=f +_.a=g}, +aeA:function aeA(a,b){this.a=a +this.b=b}, +aeB:function aeB(a,b){this.a=a +this.b=b}, +z1:function z1(a,b){var _=this +_.d=a +_.e=null +_.f=!0 +_.a=null +_.b=b +_.c=null}, +aw_:function aw_(a,b){this.a=a +this.b=b}, +avZ:function avZ(){}, +avW:function avW(a,b,c,d,e,f,g,h,i,j,k){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.x=i +_.y=j +_.z=k +_.at=_.as=_.Q=$}, +nQ:function nQ(a,b){var _=this +_.a=a +_.b=$ +_.c=null +_.d=b +_.f=_.e=$ +_.r=null +_.x=_.w=!1}, +avX:function avX(a){this.a=a}, +avY:function avY(a,b){this.a=a +this.b=b}, +oL:function oL(a,b){this.a=a +this.b=b}, +aez:function aez(){}, +aey:function aey(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e}, +aex:function aex(a,b,c,d,e,f){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f}, +Ct(a,b,c,d){return new A.oN(a,d,b,c,null)}, +oN:function oN(a,b,c,d,e){var _=this +_.c=a +_.d=b +_.x=c +_.z=d +_.a=e}, +ea:function ea(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +Pn(a,b,c){return new A.rM(b,a,c)}, +Cx(a,b){return new A.f2(new A.afs(null,b,a),null)}, +aG5(a){var s,r,q,p,o,n,m=A.aLj(a).U(a),l=m.a,k=l==null +if(!k&&m.b!=null&&m.c!=null&&m.d!=null&&m.e!=null&&m.f!=null&&m.gdH(m)!=null)l=m +else{if(k)l=24 +k=m.b +if(k==null)k=0 +s=m.c +if(s==null)s=400 +r=m.d +if(r==null)r=0 +q=m.e +if(q==null)q=48 +p=m.f +if(p==null)p=B.k +o=m.gdH(m) +if(o==null)o=B.ko.gdH(B.ko) +n=m.w +l=m.v_(p,k,r,o,q,n==null?null:n,l,s)}return l}, +aLj(a){var s=a.ap(t.Oh),r=s==null?null:s.w +return r==null?B.ko:r}, +rM:function rM(a,b,c){this.w=a +this.b=b +this.a=c}, +afs:function afs(a,b,c){this.a=a +this.b=b +this.c=c}, +mU(a,b,c){var s,r,q,p,o,n,m,l,k,j=null +if(a==b&&a!=null)return a +s=a==null +r=s?j:a.a +q=b==null +r=A.P(r,q?j:b.a,c) +p=s?j:a.b +p=A.P(p,q?j:b.b,c) +o=s?j:a.c +o=A.P(o,q?j:b.c,c) +n=s?j:a.d +n=A.P(n,q?j:b.d,c) +m=s?j:a.e +m=A.P(m,q?j:b.e,c) +l=s?j:a.f +l=A.y(l,q?j:b.f,c) +k=s?j:a.gdH(a) +k=A.P(k,q?j:b.gdH(b),c) +s=s?j:a.w +return new A.dt(r,p,o,n,m,l,k,A.b_A(s,q?j:b.w,c))}, +dt:function dt(a,b,c,d,e,f,g,h){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h}, +YZ:function YZ(){}, +aDy(a,b){var s=A.aKe(a),r=A.d_(a,B.cM) +r=r==null?null:r.b +if(r==null)r=1 +return new A.Cy(s,r,A.wL(a),A.e0(a),b,A.by())}, +wt:function wt(a,b,c,d){var _=this +_.c=a +_.r=b +_.w=c +_.a=d}, +I2:function I2(a){var _=this +_.f=_.e=_.d=null +_.r=!1 +_.w=$ +_.x=null +_.y=!1 +_.z=$ +_.a=_.ax=_.at=_.as=_.Q=null +_.b=a +_.c=null}, +aw8:function aw8(a,b,c){this.a=a +this.b=b +this.c=c}, +aw9:function aw9(a){this.a=a}, +awa:function awa(a){this.a=a}, +awb:function awb(a){this.a=a}, +a4B:function a4B(){}, +aWk(a,b){return new A.mG(a,b)}, +aFc(a,b,c,d,e,f,g,h){var s +if(h!=null||e!=null)s=A.mw(e,h) +else s=null +return new A.A5(a,g,c,s,f,b,d,null,null)}, +aJy(a,b,c,d,e){return new A.A9(a,d,e,b,c,null,null)}, +aJx(a,b,c,d){return new A.A6(a,d,b,c,null,null)}, +qU:function qU(a,b){this.a=a +this.b=b}, +mG:function mG(a,b){this.a=a +this.b=b}, +BI:function BI(a,b){this.a=a +this.b=b}, +oz:function oz(a,b){this.a=a +this.b=b}, +qR:function qR(a,b){this.a=a +this.b=b}, +Mo:function Mo(a,b){this.a=a +this.b=b}, +tm:function tm(a,b){this.a=a +this.b=b}, +m0:function m0(a,b){this.a=a +this.b=b}, +Pt:function Pt(){}, +wx:function wx(){}, +afO:function afO(a){this.a=a}, +afN:function afN(a){this.a=a}, +afM:function afM(a,b){this.a=a +this.b=b}, +qy:function qy(){}, +a6p:function a6p(){}, +A5:function A5(a,b,c,d,e,f,g,h,i){var _=this +_.r=a +_.x=b +_.y=c +_.Q=d +_.as=e +_.c=f +_.d=g +_.e=h +_.a=i}, +VJ:function VJ(a,b,c){var _=this +_.fx=_.fr=_.dy=_.dx=_.db=_.cy=_.cx=_.CW=null +_.e=_.d=$ +_.e9$=a +_.c0$=b +_.a=null +_.b=c +_.c=null}, +asD:function asD(){}, +asE:function asE(){}, +asF:function asF(){}, +asG:function asG(){}, +asH:function asH(){}, +asI:function asI(){}, +asJ:function asJ(){}, +asK:function asK(){}, +A9:function A9(a,b,c,d,e,f,g){var _=this +_.r=a +_.w=b +_.x=c +_.c=d +_.d=e +_.e=f +_.a=g}, +VM:function VM(a,b,c){var _=this +_.dy=_.dx=_.db=_.cy=_.cx=_.CW=null +_.e=_.d=$ +_.e9$=a +_.c0$=b +_.a=null +_.b=c +_.c=null}, +asQ:function asQ(){}, +asR:function asR(){}, +asS:function asS(){}, +asT:function asT(){}, +asU:function asU(){}, +asV:function asV(){}, +A6:function A6(a,b,c,d,e,f){var _=this +_.r=a +_.w=b +_.c=c +_.d=d +_.e=e +_.a=f}, +VK:function VK(a,b,c){var _=this +_.CW=null +_.e=_.d=$ +_.e9$=a +_.c0$=b +_.a=null +_.b=c +_.c=null}, +asL:function asL(){}, +A8:function A8(a,b,c,d,e,f,g,h,i,j,k){var _=this +_.r=a +_.w=b +_.x=c +_.z=d +_.Q=e +_.as=f +_.at=g +_.c=h +_.d=i +_.e=j +_.a=k}, +VL:function VL(a,b,c){var _=this +_.db=_.cy=_.cx=_.CW=null +_.e=_.d=$ +_.e9$=a +_.c0$=b +_.a=null +_.b=c +_.c=null}, +asM:function asM(){}, +asN:function asN(){}, +asO:function asO(){}, +asP:function asP(){}, +z4:function z4(){}, +aXS(a,b,c,d){var s=a.fY(d) +if(s==null)return +c.push(s) +d.a(s.gao()) +return}, +bt(a,b,c){var s,r,q,p,o,n +if(b==null)return a.ap(c) +s=A.a([],t.Fa) +A.aXS(a,b,s,c) +if(s.length===0)return null +r=B.b.gO(s) +for(q=s.length,p=0;p>")),i).ba(new A.aD1(k,h),t.e3)}, +wL(a){var s=a.ap(t.Gk) +return s==null?null:s.r.f}, +n7(a,b,c){var s=a.ap(t.Gk) +return s==null?null:c.h("0?").a(J.bq(s.r.e,b))}, +zl:function zl(a,b){this.a=a +this.b=b}, +aD_:function aD_(a){this.a=a}, +aD0:function aD0(){}, +aD1:function aD1(a,b){this.a=a +this.b=b}, +i_:function i_(){}, +a4a:function a4a(){}, +NL:function NL(){}, +Ik:function Ik(a,b,c,d){var _=this +_.r=a +_.w=b +_.b=c +_.a=d}, +D3:function D3(a,b,c,d){var _=this +_.c=a +_.d=b +_.e=c +_.a=d}, +ZH:function ZH(a,b,c){var _=this +_.d=a +_.e=b +_.a=_.f=null +_.b=c +_.c=null}, +axC:function axC(a){this.a=a}, +axD:function axD(a,b){this.a=a +this.b=b}, +axB:function axB(a,b,c){this.a=a +this.b=b +this.c=c}, +aYh(a,b){var s +a.ap(t.bS) +s=A.aYi(a,b) +if(s==null)return null +a.tq(s,null) +return b.a(s.gao())}, +aYi(a,b){var s,r,q,p=a.fY(b) +if(p==null)return null +s=a.fY(t.bS) +if(s!=null){r=s.d +r===$&&A.b() +q=p.d +q===$&&A.b() +q=r>q +r=q}else r=!1 +if(r)return null +return p}, +aLL(a,b){var s={} +s.a=null +a.jm(new A.ahi(s,b)) +s=s.a +s=s==null?null:s.gcQ(s) +return b.h("0?").a(s)}, +ahj(a,b){var s={} +s.a=null +a.jm(new A.ahk(s,b)) +s=s.a +s=s==null?null:s.gcQ(s) +return b.h("0?").a(s)}, +aLK(a,b){var s={} +s.a=null +a.jm(new A.ahh(s,b)) +s=s.a +s=s==null?null:s.ga_() +return b.h("0?").a(s)}, +ahi:function ahi(a,b){this.a=a +this.b=b}, +ahk:function ahk(a,b){this.a=a +this.b=b}, +ahh:function ahh(a,b){this.a=a +this.b=b}, +aLM(a,b){var s,r=b.a,q=a.a +if(rq?B.e.R(0,new A.k(q-r,0)):B.e}r=b.b +q=a.b +if(rq)s=s.R(0,new A.k(0,q-r))}return b.cm(s)}, +aLN(a,b,c){return new A.D5(a,null,null,null,b,c)}, +lx:function lx(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +aqE:function aqE(a,b){this.a=a +this.b=b}, +aqF:function aqF(){}, +te:function te(){this.b=this.a=null}, +ahl:function ahl(a,b){this.a=a +this.b=b}, +D5:function D5(a,b,c,d,e,f){var _=this +_.f=a +_.a=b +_.b=c +_.c=d +_.d=e +_.e=f}, +Ej:function Ej(a,b,c,d,e,f){var _=this +_.c=a +_.d=b +_.e=c +_.f=d +_.r=e +_.a=f}, +ZJ:function ZJ(a,b,c){this.c=a +this.d=b +this.a=c}, +XQ:function XQ(a,b){this.b=a +this.c=b}, +ZI:function ZI(a,b,c,d,e){var _=this +_.e=a +_.f=b +_.r=c +_.c=d +_.a=e}, +a0X:function a0X(a,b,c,d,e){var _=this +_.A=a +_.a1=b +_.al=c +_.fr$=d +_.fy=_.fx=null +_.go=!1 +_.k1=_.id=null +_.k2=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=e +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +pb(a,b,c){return new A.n9(b,a,c)}, +aLY(a){return new A.f2(new A.ahD(a),null)}, +aYr(a,b){return new A.f2(new A.ahC(0,b,a),null)}, +d_(a,b){var s=A.bt(a,b,t.w) +return s==null?null:s.w}, +QT:function QT(a,b){this.a=a +this.b=b}, +f_:function f_(a,b){this.a=a +this.b=b}, +Dd:function Dd(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r){var _=this +_.a=a +_.b=b +_.d=c +_.e=d +_.f=e +_.r=f +_.w=g +_.x=h +_.y=i +_.z=j +_.Q=k +_.as=l +_.at=m +_.ax=n +_.ay=o +_.ch=p +_.CW=q +_.cx=r}, +n9:function n9(a,b,c){this.w=a +this.b=b +this.a=c}, +ahD:function ahD(a){this.a=a}, +ahC:function ahC(a,b,c){this.a=a +this.b=b +this.c=c}, +ait:function ait(a,b){this.a=a +this.b=b}, +It:function It(a,b,c){this.c=a +this.e=b +this.a=c}, +ZS:function ZS(a){var _=this +_.a=_.e=_.d=null +_.b=a +_.c=null}, +axZ:function axZ(a,b){this.a=a +this.b=b}, +a4D:function a4D(){}, +aGp(a,b,c,d,e,f,g){return new A.Qu(c,!1,e,!0,f,b,g,null)}, +Qu:function Qu(a,b,c,d,e,f,g,h){var _=this +_.c=a +_.d=b +_.e=c +_.f=d +_.r=e +_.w=f +_.x=g +_.a=h}, +ahU:function ahU(a,b){this.a=a +this.b=b}, +LG:function LG(a,b,c,d,e){var _=this +_.e=a +_.f=b +_.r=c +_.c=d +_.a=e}, +yI:function yI(a,b,c,d,e,f,g,h,i){var _=this +_.aM=null +_.k3=_.k2=!1 +_.ok=_.k4=null +_.at=a +_.ay=b +_.ch=c +_.cx=_.CW=null +_.cy=!1 +_.db=null +_.f=d +_.r=e +_.w=null +_.a=f +_.b=null +_.c=g +_.d=h +_.e=i}, +VT:function VT(a){this.a=a}, +a_0:function a_0(a,b,c){this.c=a +this.d=b +this.a=c}, +Dx:function Dx(a,b,c,d,e,f){var _=this +_.c=a +_.d=b +_.e=c +_.f=d +_.r=e +_.a=f}, +K9:function K9(a,b){this.a=a +this.b=b}, +aBy:function aBy(a,b,c){var _=this +_.d=a +_.e=b +_.f=c +_.c=_.b=null}, +aLd(a,b){return new A.rH(b,a,null)}, +aM4(a,b,c,d,e,f,g,h,i,j,k,l){return new A.Dy(i,g,b,f,h,d,l,e,j,a,!0,c)}, +aM7(a){return A.QE(a).asP(null)}, +QE(a){var s,r=a instanceof A.fk&&a.gcQ(a) instanceof A.ht?t.uK.a(a.gcQ(a)):null +if(r==null)r=a.vC(t.uK) +s=r +s.toString +return s}, +aM6(a){var s=a.gcQ(a),r=s instanceof A.ht?t.uK.a(a.gcQ(a)):null +if(r==null)r=a.vC(t.uK) +return r}, +aYJ(a,b){var s,r,q,p,o,n,m,l=null,k=A.a([],t.ny) +if(B.d.bz(b,"/")&&b.length>1){b=B.d.bL(b,1) +s=t.z +k.push(a.z0("/",!0,l,s)) +r=b.split("/") +if(b.length!==0)for(q=r.length,p=0,o="";p=3}, +b2_(a){return a.ga_w()}, +aOy(a){return new A.azW(a)}, +aM5(a,b){var s,r,q,p +for(s=a.a,r=s.gBV(),q=r.length,p=0;p2?s[2]:null,B.mx) +case 1:s=s.eY(a,1)[1] +s.toString +t.pO.a(A.aZ1(new A.a8h(A.el(s)))) +return null}}, +xD:function xD(a,b){this.a=a +this.b=b}, +cx:function cx(){}, +amO:function amO(a){this.a=a}, +amN:function amN(a){this.a=a}, +i7:function i7(a,b){this.a=a +this.b=b}, +ey:function ey(){}, +pd:function pd(){}, +rH:function rH(a,b,c){this.f=a +this.b=b +this.a=c}, +np:function np(){}, +UW:function UW(){}, +NK:function NK(a){this.$ti=a}, +aal:function aal(a,b,c){this.a=a +this.b=b +this.c=c}, +Dy:function Dy(a,b,c,d,e,f,g,h,i,j,k,l){var _=this +_.c=a +_.d=b +_.f=c +_.r=d +_.w=e +_.x=f +_.y=g +_.Q=h +_.as=i +_.at=j +_.ax=k +_.a=l}, +aiD:function aiD(){}, +fm:function fm(a,b){this.a=a +this.b=b}, +a_f:function a_f(a,b,c){var _=this +_.a=null +_.b=a +_.c=b +_.d=c}, +eI:function eI(a,b,c,d,e,f,g){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=null +_.x=!0 +_.y=!1}, +azV:function azV(a,b){this.a=a +this.b=b}, +azT:function azT(){}, +azU:function azU(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e}, +azS:function azS(a,b){this.a=a +this.b=b}, +azW:function azW(a){this.a=a}, +qa:function qa(){}, +zf:function zf(a,b){this.a=a +this.b=b}, +ze:function ze(a,b){this.a=a +this.b=b}, +ID:function ID(a,b){this.a=a +this.b=b}, +IE:function IE(a,b){this.a=a +this.b=b}, +YM:function YM(a,b){var _=this +_.a=a +_.fx$=0 +_.fy$=b +_.id$=_.go$=0 +_.k1$=!1}, +ht:function ht(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q){var _=this +_.d=$ +_.e=a +_.f=b +_.r=c +_.w=d +_.x=e +_.y=f +_.z=!1 +_.Q=null +_.as=$ +_.at=g +_.ax=null +_.ch=_.ay=!1 +_.CW=0 +_.cx=h +_.cy=i +_.c6$=j +_.ha$=k +_.Az$=l +_.hb$=m +_.j1$=n +_.dD$=o +_.b9$=p +_.a=null +_.b=q +_.c=null}, +aiw:function aiw(a,b){this.a=a +this.b=b}, +aiC:function aiC(a){this.a=a}, +aiv:function aiv(){}, +aix:function aix(){}, +aiy:function aiy(a){this.a=a}, +aiz:function aiz(){}, +aiA:function aiA(){}, +aiu:function aiu(a){this.a=a}, +aiB:function aiB(a,b){this.a=a +this.b=b}, +Jc:function Jc(a,b){this.a=a +this.b=b}, +a1i:function a1i(){}, +a_7:function a_7(a,b,c,d){var _=this +_.c=a +_.d=b +_.e=c +_.a=d +_.b=null}, +aHn:function aHn(a,b,c,d){var _=this +_.c=a +_.d=b +_.e=c +_.a=d +_.b=null}, +YN:function YN(a){var _=this +_.y=null +_.a=!1 +_.c=_.b=null +_.fx$=0 +_.fy$=a +_.id$=_.go$=0 +_.k1$=!1}, +aw1:function aw1(){}, +tu:function tu(a){this.a=a}, +ayj:function ayj(){}, +IF:function IF(){}, +IG:function IG(){}, +a4z:function a4z(){}, +QK:function QK(){}, +e1:function e1(a,b,c,d){var _=this +_.d=a +_.b=b +_.a=c +_.$ti=d}, +IH:function IH(a,b,c){var _=this +_.ax=null +_.ay=!1 +_.c=_.b=_.a=null +_.d=$ +_.e=a +_.f=null +_.r=b +_.y=_.x=null +_.z=!1 +_.Q=!0 +_.at=_.as=!1 +_.$ti=c}, +jo:function jo(){}, +a4J:function a4J(){}, +pe(a,b){return new A.nc(a,b,new A.ca(null,$.aO(),t.lG),new A.bp(null,t.af))}, +b1W(a){return a.ad(0)}, +b1V(a,b){var s,r=a.ap(t.An) +if(r!=null)return r +s=A.a([A.oB("No Overlay widget found."),A.bo(A.t(a.gao()).k(0)+" widgets require an Overlay widget ancestor.\nAn overlay lets widgets float on top of other widget children."),A.Om("To introduce an Overlay widget, you can either directly include one, or use a widget that contains an Overlay itself, such as a Navigator, WidgetApp, MaterialApp, or CupertinoApp.")],t.E) +B.b.E(s,a.anX(B.a4l)) +throw A.c(A.wb(s))}, +nc:function nc(a,b,c,d){var _=this +_.a=a +_.b=!1 +_.c=b +_.d=c +_.e=null +_.f=d +_.r=!1}, +aiR:function aiR(a){this.a=a}, +nT:function nT(a,b,c,d){var _=this +_.c=a +_.d=b +_.e=c +_.a=d}, +zh:function zh(a){var _=this +_.d=$ +_.e=null +_.r=_.f=$ +_.a=null +_.b=a +_.c=null}, +ayt:function ayt(){}, +x0:function x0(a,b,c){this.c=a +this.d=b +this.a=c}, +x2:function x2(a,b,c,d){var _=this +_.d=a +_.dD$=b +_.b9$=c +_.a=null +_.b=d +_.c=null}, +aiW:function aiW(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +aiV:function aiV(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +aiX:function aiX(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e}, +aiU:function aiU(){}, +aiT:function aiT(){}, +K7:function K7(a,b,c,d){var _=this +_.e=a +_.f=b +_.c=c +_.a=d}, +a3e:function a3e(a,b,c){var _=this +_.k4=$ +_.ok=a +_.ax=null +_.ay=!1 +_.c=_.b=_.a=_.ch=null +_.d=$ +_.e=b +_.f=null +_.r=c +_.y=_.x=null +_.z=!1 +_.Q=!0 +_.at=_.as=!1}, +uU:function uU(){}, +azB:function azB(a){this.a=a}, +zC:function zC(a,b,c){var _=this +_.y=_.x=_.w=_.r=_.f=_.e=_.at=null +_.ci$=a +_.ak$=b +_.a=c}, +qg:function qg(a,b,c,d,e,f,g,h){var _=this +_.B=null +_.F=a +_.a9=b +_.X=c +_.aq=!1 +_.aH=d +_.e_$=e +_.a4$=f +_.d8$=g +_.fy=_.fx=null +_.go=!1 +_.k1=_.id=null +_.k2=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=h +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +azD:function azD(a){this.a=a}, +azC:function azC(a){this.a=a}, +aiS:function aiS(){this.b=this.a=null}, +DJ:function DJ(a,b,c,d){var _=this +_.c=a +_.d=b +_.e=c +_.a=d}, +a_t:function a_t(a){var _=this +_.d=null +_.e=!0 +_.a=_.f=null +_.b=a +_.c=null}, +ayu:function ayu(a,b){this.a=a +this.b=b}, +ayw:function ayw(a,b){this.a=a +this.b=b}, +ayv:function ayv(a){this.a=a}, +qc:function qc(a,b,c){var _=this +_.a=a +_.b=b +_.c=c +_.j4$=_.j3$=_.j2$=_.e=_.d=null}, +uT:function uT(a,b,c,d){var _=this +_.f=a +_.r=b +_.b=c +_.a=d}, +zi:function zi(a,b,c,d){var _=this +_.c=a +_.d=b +_.e=c +_.a=d}, +a_s:function a_s(a,b){var _=this +_.ax=_.ok=_.k4=null +_.ay=!1 +_.c=_.b=_.a=_.ch=null +_.d=$ +_.e=a +_.f=null +_.r=b +_.y=_.x=null +_.z=!1 +_.Q=!0 +_.at=_.as=!1}, +Xx:function Xx(a,b){this.c=a +this.a=b}, +qf:function qf(a,b,c){var _=this +_.A=a +_.a1=!1 +_.al=!0 +_.cR=_.bg=!1 +_.j4$=_.j3$=_.j2$=null +_.fr$=b +_.fy=_.fx=null +_.go=!1 +_.k1=_.id=null +_.k2=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=c +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +azm:function azm(a){this.a=a}, +azn:function azn(a){this.a=a}, +J1:function J1(a,b){var _=this +_.A=null +_.fr$=a +_.fy=_.fx=null +_.go=!1 +_.k1=_.id=null +_.k2=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=b +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +a_u:function a_u(){}, +a4Q:function a4Q(){}, +a4R:function a4R(){}, +KU:function KU(){}, +a4W:function a4W(){}, +aL9(a,b,c){return new A.Cj(a,c,b,null)}, +aOi(a,b,c){var s,r,q=null,p=t.Y,o=new A.ar(0,0,p),n=new A.ar(0,0,p),m=new A.HY(B.iN,o,n,b,a,$.aO()),l=A.c5(q,q,q,q,c) +l.by() +s=l.cM$ +s.b=!0 +s.a.push(m.gEe()) +m.b!==$&&A.bS() +m.b=l +r=A.dc(B.eb,l,q) +r.a.Z(0,m.gdm()) +t.m.a(r) +p=p.h("aP") +m.r!==$&&A.bS() +m.r=new A.aP(r,o,p) +m.x!==$&&A.bS() +m.x=new A.aP(r,n,p) +p=c.v4(m.gajj()) +m.y!==$&&A.bS() +m.y=p +return m}, +Cj:function Cj(a,b,c,d){var _=this +_.e=a +_.f=b +_.w=c +_.a=d}, +HZ:function HZ(a,b,c,d){var _=this +_.r=_.f=_.e=_.d=null +_.w=a +_.dD$=b +_.b9$=c +_.a=null +_.b=d +_.c=null}, +z_:function z_(a,b){this.a=a +this.b=b}, +HY:function HY(a,b,c,d,e,f){var _=this +_.a=a +_.b=$ +_.c=null +_.e=_.d=0 +_.f=b +_.r=$ +_.w=c +_.y=_.x=$ +_.z=null +_.as=_.Q=0.5 +_.at=0 +_.ax=d +_.ay=e +_.fx$=0 +_.fy$=f +_.id$=_.go$=0 +_.k1$=!1}, +avT:function avT(a){this.a=a}, +YG:function YG(a,b,c,d){var _=this +_.b=a +_.c=b +_.d=c +_.a=d}, +a2A:function a2A(a,b){this.a=a +this.b=b}, +FM:function FM(a,b,c,d){var _=this +_.c=a +_.e=b +_.f=c +_.a=d}, +JR:function JR(a,b,c){var _=this +_.d=$ +_.f=_.e=null +_.r=0 +_.w=!0 +_.dD$=a +_.b9$=b +_.a=null +_.b=c +_.c=null}, +aAV:function aAV(a,b,c){this.a=a +this.b=b +this.c=c}, +zy:function zy(a,b){this.a=a +this.b=b}, +JQ:function JQ(a,b,c,d){var _=this +_.b=_.a=$ +_.c=a +_.d=b +_.e=0 +_.f=c +_.fx$=0 +_.fy$=d +_.id$=_.go$=0 +_.k1$=!1}, +DK:function DK(a,b){this.a=a +this.hA$=b}, +IK:function IK(){}, +KK:function KK(){}, +L_:function L_(){}, +aMf(a,b){var s=a.gao() +return!(s instanceof A.x3)}, +aMh(a){var s=a.vD(t.Mf) +return s==null?null:s.d}, +JN:function JN(a){this.a=a}, +DN:function DN(){this.a=null}, +aj0:function aj0(a){this.a=a}, +x3:function x3(a,b,c){this.c=a +this.d=b +this.a=c}, +js:function js(){}, +ahH:function ahH(){}, +ajK:function ajK(){}, +NH:function NH(a,b){this.a=a +this.d=b}, +aZl(a,b){var s,r=a.vD(t.bb) +if(r==null)return!1 +s=A.anq(a).nt(a) +if(r.w.p(0,s))return r.r===b +return!1}, +RO(a){var s=a.ap(t.bb) +return s==null?null:s.f}, +xk:function xk(a,b,c,d,e){var _=this +_.f=a +_.r=b +_.w=c +_.b=d +_.a=e}, +xB(a){var s=a.ap(t.lQ) +return s==null?null:s.f}, +arF(a,b){return new A.GC(a,b,null)}, +pA:function pA(a,b,c){this.c=a +this.d=b +this.a=c}, +a1j:function a1j(a,b,c,d,e,f){var _=this +_.c6$=a +_.ha$=b +_.Az$=c +_.hb$=d +_.j1$=e +_.a=null +_.b=f +_.c=null}, +GC:function GC(a,b,c){this.f=a +this.b=b +this.a=c}, +EU:function EU(a,b,c){this.c=a +this.d=b +this.a=c}, +Jb:function Jb(a){var _=this +_.d=null +_.e=!1 +_.r=_.f=null +_.w=!1 +_.a=null +_.b=a +_.c=null}, +azN:function azN(a){this.a=a}, +azM:function azM(a,b){this.a=a +this.b=b}, +fg:function fg(){}, +lN:function lN(){}, +amh:function amh(a,b){this.a=a +this.b=b}, +aCf:function aCf(){}, +a4X:function a4X(){}, +cN:function cN(){}, +kW:function kW(){}, +J9:function J9(){}, +EP:function EP(a,b,c){var _=this +_.cy=a +_.y=null +_.a=!1 +_.c=_.b=null +_.fx$=0 +_.fy$=b +_.id$=_.go$=0 +_.k1$=!1 +_.$ti=c}, +EO:function EO(a,b){var _=this +_.cy=a +_.y=null +_.a=!1 +_.c=_.b=null +_.fx$=0 +_.fy$=b +_.id$=_.go$=0 +_.k1$=!1}, +aZZ(){return new A.SP(new A.b5(A.a([],t.Zt),t.CT))}, +aCg:function aCg(){}, +j_:function j_(a,b,c){this.a=a +this.b=b +this.c=c}, +xE:function xE(a,b,c,d,e,f,g){var _=this +_.c=a +_.d=b +_.e=c +_.f=d +_.r=e +_.a=f +_.$ti=g}, +amF:function amF(a,b){this.a=a +this.b=b}, +zu:function zu(a,b,c,d,e,f,g,h){var _=this +_.e=_.d=null +_.f=a +_.r=$ +_.w=!1 +_.c6$=b +_.ha$=c +_.Az$=d +_.hb$=e +_.j1$=f +_.a=null +_.b=g +_.c=null +_.$ti=h}, +aA3:function aA3(a){this.a=a}, +aA4:function aA4(a){this.a=a}, +aA2:function aA2(a){this.a=a}, +aA0:function aA0(a,b,c){this.a=a +this.b=b +this.c=c}, +azY:function azY(a){this.a=a}, +azZ:function azZ(a,b){this.a=a +this.b=b}, +aA1:function aA1(){}, +aA_:function aA_(){}, +a1v:function a1v(a,b,c,d,e,f,g){var _=this +_.f=a +_.r=b +_.w=c +_.x=d +_.y=e +_.b=f +_.a=g}, +jO:function jO(){}, +au4:function au4(a){this.a=a}, +M0:function M0(){}, +a6P:function a6P(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +SP:function SP(a){this.b=$ +this.a=a}, +SU:function SU(){}, +xF:function xF(){}, +SV:function SV(){}, +a1g:function a1g(a){var _=this +_.y=null +_.a=!1 +_.c=_.b=null +_.fx$=0 +_.fy$=a +_.id$=_.go$=0 +_.k1$=!1}, +a1o:function a1o(){}, +zI:function zI(){}, +tq(a,b){var s=a.ap(t.Fe),r=s==null?null:s.x +return b.h("jr<0>?").a(r)}, +x1:function x1(){}, +fH:function fH(){}, +arx:function arx(a,b,c){this.a=a +this.b=b +this.c=c}, +arv:function arv(a,b,c){this.a=a +this.b=b +this.c=c}, +arw:function arw(a,b,c){this.a=a +this.b=b +this.c=c}, +aru:function aru(a,b){this.a=a +this.b=b}, +Q2:function Q2(a,b){this.a=a +this.b=null +this.c=b}, +Q3:function Q3(){}, +ahc:function ahc(a){this.a=a}, +XG:function XG(a,b){this.e=a +this.a=b +this.b=null}, +Ix:function Ix(a,b,c,d,e,f){var _=this +_.f=a +_.r=b +_.w=c +_.x=d +_.b=e +_.a=f}, +zd:function zd(a,b,c){this.c=a +this.a=b +this.$ti=c}, +nR:function nR(a,b,c,d){var _=this +_.d=null +_.e=$ +_.f=a +_.r=b +_.a=null +_.b=c +_.c=null +_.$ti=d}, +ay1:function ay1(a){this.a=a}, +ay5:function ay5(a){this.a=a}, +ay6:function ay6(a){this.a=a}, +ay4:function ay4(a){this.a=a}, +ay2:function ay2(a){this.a=a}, +ay3:function ay3(a){this.a=a}, +jr:function jr(){}, +ahW:function ahW(a,b){this.a=a +this.b=b}, +ahX:function ahX(){}, +ahV:function ahV(){}, +uR:function uR(){}, +amX(a,b,c){return new A.T0(c,a,b,null)}, +T0:function T0(a,b,c,d){var _=this +_.d=a +_.f=b +_.x=c +_.a=d}, +Td:function Td(){}, +oO:function oO(a){this.a=a +this.b=!1}, +aeZ:function aeZ(a,b){this.c=a +this.a=b +this.b=!1}, +ans:function ans(a,b,c,d,e,f,g,h,i){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.x=i}, +ab0:function ab0(a,b){this.c=a +this.a=b +this.b=!1}, +M5:function M5(a,b){var _=this +_.c=$ +_.d=a +_.a=b +_.b=!1}, +O7:function O7(a){var _=this +_.d=_.c=$ +_.a=a +_.b=!1}, +F3:function F3(a,b,c){this.a=a +this.b=b +this.$ti=c}, +anm:function anm(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e}, +anl:function anl(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e}, +anq(a){var s=a.ap(t.Cy),r=s==null?null:s.f +return r==null?B.E4:r}, +Te:function Te(){}, +ann:function ann(){}, +ano:function ano(){}, +anp:function anp(){}, +aC7:function aC7(a,b,c,d,e,f,g){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g}, +F4:function F4(a,b,c){this.f=a +this.b=b +this.a=c}, +anr(){return new A.Tf(A.a([],t.ZP),$.aO())}, +Tf:function Tf(a,b){var _=this +_.f=a +_.fx$=0 +_.fy$=b +_.id$=_.go$=0 +_.k1$=!1}, +aPw(a,b){return b}, +aoP:function aoP(){}, +a1x:function a1x(a){this.a=a}, +TM:function TM(a,b,c,d,e,f){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.w=f}, +Jw:function Jw(a,b){this.c=a +this.a=b}, +Jx:function Jx(a,b){var _=this +_.f=_.e=_.d=null +_.r=!1 +_.ii$=a +_.a=null +_.b=b +_.c=null}, +aAu:function aAu(a,b){this.a=a +this.b=b}, +a50:function a50(){}, +nq:function nq(){}, +OB:function OB(a,b,c,d,e,f){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f}, +Yd:function Yd(){}, +aGV(a,b,c,d,e){var s=new A.kx(c,e,d,a,0) +if(b!=null)s.hA$=b +return s}, +b5S(a){return a.hA$===0}, +ij:function ij(){}, +as0:function as0(){}, +hw:function hw(){}, +F9:function F9(a,b,c,d){var _=this +_.d=a +_.a=b +_.b=c +_.hA$=d}, +kx:function kx(a,b,c,d,e){var _=this +_.d=a +_.e=b +_.a=c +_.b=d +_.hA$=e}, +lA:function lA(a,b,c,d,e,f){var _=this +_.d=a +_.e=b +_.f=c +_.a=d +_.b=e +_.hA$=f}, +pC:function pC(a,b,c,d){var _=this +_.d=a +_.a=b +_.b=c +_.hA$=d}, +V6:function V6(a,b,c,d){var _=this +_.d=a +_.a=b +_.b=c +_.hA$=d}, +Jm:function Jm(){}, +Jl:function Jl(a,b,c){this.f=a +this.b=b +this.a=c}, +q8:function q8(a){var _=this +_.a=a +_.j4$=_.j3$=_.j2$=null}, +F6:function F6(a,b){this.c=a +this.a=b}, +F7:function F7(a,b){var _=this +_.d=a +_.a=null +_.b=b +_.c=null}, +ant:function ant(a){this.a=a}, +anu:function anu(a){this.a=a}, +anv:function anv(a){this.a=a}, +aVt(a,b,c){var s,r +if(a>0){s=a/c +if(b"))}, +aHW(a,b){var s=$.aa.F$.z.i(0,a).ga_() +s.toString +return t.x.a(s).fZ(b)}, +Fb:function Fb(a,b){this.a=a +this.b=b}, +Fc:function Fc(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=null +_.f=e +_.r=f +_.w=g +_.x=h +_.y=i +_.z=j +_.Q=k +_.as=l +_.at=m +_.ax=n +_.ay=!1 +_.CW=_.ch=null +_.cy=_.cx=$ +_.dx=_.db=null +_.fx$=0 +_.fy$=o +_.id$=_.go$=0 +_.k1$=!1}, +anJ:function anJ(){}, +xs:function xs(a,b,c,d,e,f,g,h,i,j,k,l,m){var _=this +_.c=a +_.d=b +_.e=c +_.r=d +_.w=e +_.Q=f +_.ay=g +_.ch=h +_.CW=i +_.cx=j +_.cy=k +_.db=l +_.a=m}, +lL:function lL(a,b,c,d,e){var _=this +_.w=_.r=_.f=_.e=_.d=null +_.y=_.x=$ +_.z=a +_.as=_.Q=!1 +_.at=$ +_.dD$=b +_.b9$=c +_.a=null +_.b=d +_.c=null +_.$ti=e}, +akC:function akC(a){this.a=a}, +aky:function aky(a){this.a=a}, +akz:function akz(a){this.a=a}, +akv:function akv(a){this.a=a}, +akw:function akw(a){this.a=a}, +akx:function akx(a){this.a=a}, +akA:function akA(a){this.a=a}, +akB:function akB(a){this.a=a}, +akD:function akD(a){this.a=a}, +akE:function akE(a){this.a=a}, +mg:function mg(a,b,c,d,e,f,g,h,i,j){var _=this +_.cv=a +_.k2=!1 +_.bt=_.bZ=_.bq=_.aJ=_.aM=_.bG=_.aL=_.y2=_.y1=_.xr=_.x2=_.x1=_.to=_.ry=_.rx=_.RG=_.R8=_.p4=_.p3=_.p2=_.p1=_.ok=_.k4=_.k3=null +_.at=b +_.ay=c +_.ch=d +_.cx=_.CW=null +_.cy=!1 +_.db=null +_.f=e +_.r=f +_.w=null +_.a=g +_.b=null +_.c=h +_.d=i +_.e=j}, +mh:function mh(a,b,c,d,e,f,g,h,i,j){var _=this +_.hd=a +_.aH=_.aq=_.X=_.a9=_.F=_.B=_.bt=_.bZ=_.bq=_.aJ=_.aM=null +_.k3=_.k2=!1 +_.ok=_.k4=null +_.at=b +_.ay=c +_.ch=d +_.cx=_.CW=null +_.cy=!1 +_.db=null +_.f=e +_.r=f +_.w=null +_.a=g +_.b=null +_.c=h +_.d=i +_.e=j}, +zp:function zp(){}, +aYB(a,b){var s,r=a.b,q=b.b,p=r-q +if(!(p<3&&a.d-b.d>-3))s=q-r<3&&b.d-a.d>-3 +else s=!0 +if(s)return 0 +if(Math.abs(p)>3)return r>q?1:-1 +return a.d>b.d?1:-1}, +aYA(a,b){var s=a.a,r=b.a,q=s-r +if(q<1e-10&&a.c-b.c>-1e-10){if(a.c-b.c>1e-10)return 1 +return-1}if(r-s<1e-10&&b.c-a.c>-1e-10){if(b.c-a.c>1e-10)return-1 +return 1}if(Math.abs(q)>1e-10)return s>r?1:-1 +return a.c>b.c?1:-1}, +wY:function wY(){}, +ail:function ail(a){this.a=a}, +aim:function aim(a,b,c){this.a=a +this.b=b +this.c=c}, +ain:function ain(){}, +aij:function aij(a,b){this.a=a +this.b=b}, +aik:function aik(a){this.a=a}, +aio:function aio(a,b){this.a=a +this.b=b}, +aip:function aip(a){this.a=a}, +aia:function aia(a){this.a=a}, +aib:function aib(a){this.a=a}, +aic:function aic(a){this.a=a}, +aid:function aid(a){this.a=a}, +aie:function aie(a){this.a=a}, +aif:function aif(a){this.a=a}, +aig:function aig(a){this.a=a}, +aih:function aih(a){this.a=a}, +aii:function aii(a){this.a=a}, +a_5:function a_5(){}, +To(a){var s=a.ap(t.Wu) +return s==null?null:s.f}, +aN_(a,b){return new A.xO(b,a,null)}, +xM:function xM(a,b,c,d){var _=this +_.c=a +_.d=b +_.e=c +_.a=d}, +a1W:function a1W(a,b,c,d){var _=this +_.d=a +_.r3$=b +_.oq$=c +_.a=null +_.b=d +_.c=null}, +xO:function xO(a,b,c){this.f=a +this.b=b +this.a=c}, +Tn:function Tn(){}, +a5_:function a5_(){}, +KW:function KW(){}, +Fr:function Fr(a,b){this.c=a +this.a=b}, +a26:function a26(a){var _=this +_.d=$ +_.a=null +_.b=a +_.c=null}, +a27:function a27(a,b,c){this.x=a +this.b=b +this.a=c}, +eT(a,b,c,d,e){return new A.aW(a,c,e,b,d)}, +b_B(a){var s=A.A(t.y6,t.Xw) +a.aa(0,new A.aop(s)) +return s}, +aos(a,b,c){return new A.uh(null,c,a,b,null)}, +aW:function aW(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e}, +uD:function uD(a,b){this.a=a +this.b=b}, +xT:function xT(a,b){var _=this +_.b=a +_.c=null +_.fx$=0 +_.fy$=b +_.id$=_.go$=0 +_.k1$=!1}, +aop:function aop(a){this.a=a}, +aoo:function aoo(){}, +aoq:function aoq(a){this.a=a}, +aor:function aor(a){this.a=a}, +uh:function uh(a,b,c,d,e){var _=this +_.c=a +_.d=b +_.e=c +_.f=d +_.a=e}, +JB:function JB(a){var _=this +_.a=_.d=null +_.b=a +_.c=null}, +TA:function TA(a,b){var _=this +_.c=a +_.fx$=0 +_.fy$=b +_.id$=_.go$=0 +_.k1$=!1}, +Fs:function Fs(a,b){this.c=a +this.a=b}, +JA:function JA(a,b,c){var _=this +_.d=a +_.e=b +_.a=null +_.b=c +_.c=null}, +a2a:function a2a(a,b,c){this.f=a +this.b=b +this.a=c}, +a28:function a28(){}, +a29:function a29(){}, +a2b:function a2b(){}, +a2g:function a2g(){}, +a2h:function a2h(){}, +a4p:function a4p(){}, +aNg(a,b){return new A.xX(b,A.aH0(t.S,t.Dv),a,B.a0)}, +b_L(a,b,c,d,e){if(b===e-1)return d +return d+(d-c)/(b-a+1)*(e-b-1)}, +aY_(a,b){return new A.CO(b,a,null)}, +TS:function TS(){}, +ul:function ul(){}, +TP:function TP(a,b){this.d=a +this.a=b}, +xX:function xX(a,b,c,d){var _=this +_.k4=a +_.ok=b +_.p2=_.p1=null +_.p3=!1 +_.ax=null +_.ay=!1 +_.c=_.b=_.a=_.ch=null +_.d=$ +_.e=c +_.f=null +_.r=d +_.y=_.x=null +_.z=!1 +_.Q=!0 +_.at=_.as=!1}, +aoT:function aoT(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e}, +aoR:function aoR(){}, +aoS:function aoS(a,b){this.a=a +this.b=b}, +aoQ:function aoQ(a,b,c){this.a=a +this.b=b +this.c=c}, +aoU:function aoU(a,b){this.a=a +this.b=b}, +CO:function CO(a,b,c){this.f=a +this.b=b +this.a=c}, +aNh(a,b,c,d,e){return new A.TV(c,d,!0,e,b,null)}, +TT:function TT(a,b){this.a=a +this.b=b}, +FG:function FG(a){var _=this +_.a=!1 +_.fx$=0 +_.fy$=a +_.id$=_.go$=0 +_.k1$=!1}, +TV:function TV(a,b,c,d,e,f){var _=this +_.e=a +_.f=b +_.r=c +_.w=d +_.c=e +_.a=f}, +zt:function zt(a,b,c,d,e,f,g){var _=this +_.A=a +_.a1=b +_.al=c +_.bg=d +_.cR=e +_.f7=_.cd=null +_.he=!1 +_.c1=null +_.fr$=f +_.fy=_.fx=null +_.go=!1 +_.k1=_.id=null +_.k2=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=g +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +TU:function TU(){}, +Xv:function Xv(){}, +b33(a,b,c){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e=A.a([],t.bt) +for(s=J.aF(c),r=0,q=0,p=0;r=0){g=p+k +f=g+(n-m) +p=f+1 +q=g-m +e.push(new A.y7(new A.ce(g,f),o.b))}++r}return e}, +b5a(a,b,c,d,e){var s=null,r=e.b,q=e.a,p=a.a +if(q!==p)r=A.b33(p,q,r) +if(A.by()===B.ba)return A.c0(A.b2F(r,a,c,d,b),s,c,s) +return A.c0(A.b2G(r,a,c,d,a.b.c),s,c,s)}, +b2G(a,b,c,d,e){var s,r,q,p,o=null,n=A.a([],t.Ne),m=b.a,l=c.cl(d),k=m.length,j=J.aF(a),i=0,h=0 +while(!0){if(!(ii){r=r=e?c:l +n.push(A.c0(o,o,s,B.d.P(m,r,p)));++h +i=p}}j=m.length +if(ie){r=r=e&&g<=r&&f){o.push(A.c0(p,p,c,B.d.P(n,e,j))) +o.push(A.c0(p,p,l,B.d.P(n,j,g))) +o.push(A.c0(p,p,c,B.d.P(n,g,r)))}else o.push(A.c0(p,p,c,B.d.P(n,e,r))) +e=r}else{q=s.b +q=q=j&&q<=g&&f?l:k +o.push(A.c0(p,p,s,B.d.P(n,r,q)));++d +e=q}}j=n.length +if(ea/2 +n=s?o:o+B.b.gL(c).a.a +r=m.b +q=B.b.gL(c) +o=s?m.c:o+B.b.gO(c).a.a +p=B.b.gO(c) +n+=(o-n)/2 +o=m.d +return new A.Gl(new A.k(n,A.O(r+q.a.b-d,r,o)),new A.k(n,A.O(r+p.a.b,r,o)))}, +Gl:function Gl(a,b){this.a=a +this.b=b}, +b0k(a,b,c){var s=b/2,r=a-s +if(r<0)return 0 +if(a+s>c)return c-b +return r}, +UF:function UF(a,b,c){this.b=a +this.c=b +this.d=c}, +aHb(a){var s=a.ap(t.l3),r=s==null?null:s.f +return r!==!1}, +aNE(a){var s=a.CP(t.l3),r=s==null?null:s.r +return r==null?B.Ek:r}, +yo:function yo(a,b,c){this.c=a +this.d=b +this.a=c}, +a3g:function a3g(a,b){var _=this +_.d=!0 +_.e=a +_.a=null +_.b=b +_.c=null}, +HN:function HN(a,b,c,d){var _=this +_.f=a +_.r=b +_.b=c +_.a=d}, +j1:function j1(){}, +ei:function ei(){}, +a49:function a49(a,b,c){var _=this +_.w=a +_.a=null +_.b=!1 +_.c=null +_.d=b +_.e=null +_.f=c +_.r=$}, +Hi:function Hi(a){this.$ti=a}, +UM:function UM(a,b,c,d){var _=this +_.c=a +_.d=b +_.e=c +_.a=d}, +aNe(a,b,c,d){return new A.TK(c,d,a,b,null)}, +aMQ(a,b){return new A.T5(A.b8f(),B.ah,null,a,b,null)}, +b_9(a){return A.wU(a,a,1)}, +aMN(a,b){return new A.SS(A.b8e(),B.ah,null,a,b,null)}, +b__(a){return A.aLQ(a*3.141592653589793*2)}, +fQ(a,b,c){return new A.Ot(c,!1,b,null)}, +aKf(a,b,c,d){return new A.NJ(c,b,a,d,null)}, +oh(a,b,c){return new A.LF(b,c,a,null)}, +Ac:function Ac(){}, +GO:function GO(a){this.a=null +this.b=a +this.c=null}, +asW:function asW(){}, +TK:function TK(a,b,c,d,e){var _=this +_.e=a +_.f=b +_.r=c +_.c=d +_.a=e}, +Ql:function Ql(){}, +T5:function T5(a,b,c,d,e,f){var _=this +_.e=a +_.f=b +_.r=c +_.w=d +_.c=e +_.a=f}, +SS:function SS(a,b,c,d,e,f){var _=this +_.e=a +_.f=b +_.r=c +_.w=d +_.c=e +_.a=f}, +Ot:function Ot(a,b,c,d){var _=this +_.e=a +_.f=b +_.c=c +_.a=d}, +xt:function xt(a,b){this.a=a +this.b=b}, +E8:function E8(a,b,c){this.e=a +this.c=b +this.a=c}, +NB:function NB(a,b,c,d){var _=this +_.e=a +_.r=b +_.c=c +_.a=d}, +NJ:function NJ(a,b,c,d,e){var _=this +_.r=a +_.w=b +_.x=c +_.c=d +_.a=e}, +D0:function D0(){}, +LF:function LF(a,b,c,d){var _=this +_.e=a +_.f=b +_.c=c +_.a=d}, +b4x(a,b,c){var s={} +s.a=null +return new A.aDd(s,A.bc("arg"),a,b,c)}, +yv:function yv(a,b,c,d,e,f,g,h){var _=this +_.c=a +_.d=b +_.e=c +_.f=d +_.r=e +_.w=f +_.a=g +_.$ti=h}, +yw:function yw(a,b,c){var _=this +_.d=a +_.e=$ +_.f=null +_.r=!1 +_.a=_.x=_.w=null +_.b=b +_.c=null +_.$ti=c}, +arD:function arD(a){this.a=a}, +yx:function yx(a,b){this.a=a +this.b=b}, +V_:function V_(a,b,c,d){var _=this +_.w=a +_.x=b +_.a=c +_.fx$=0 +_.fy$=d +_.id$=_.go$=0 +_.k1$=!1}, +a3O:function a3O(a,b){this.a=a +this.b=-1 +this.$ti=b}, +aDd:function aDd(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e}, +aDc:function aDc(a,b,c){this.a=a +this.b=b +this.c=c}, +Ke:function Ke(){}, +yB:function yB(a,b,c,d){var _=this +_.c=a +_.d=b +_.a=c +_.$ti=d}, +zG:function zG(a,b){var _=this +_.d=$ +_.a=null +_.b=a +_.c=null +_.$ti=b}, +aBT:function aBT(a){this.a=a}, +Vi(a){var s=A.aYh(a,t._l) +return s==null?null:s.f}, +aNZ(a){var s=a.ap(t.Li) +s=s==null?null:s.f +if(s==null){s=$.tX.cx$ +s===$&&A.b()}return s}, +Vf:function Vf(a,b,c,d,e){var _=this +_.c=a +_.d=b +_.e=c +_.f=d +_.a=e}, +as_:function as_(a){this.a=a}, +IP:function IP(a,b,c,d,e){var _=this +_.c=a +_.d=b +_.e=c +_.f=d +_.a=e}, +a0z:function a0z(a,b){var _=this +_.bG=$ +_.ax=_.aJ=_.aM=null +_.ay=!1 +_.c=_.b=_.a=_.ch=null +_.d=$ +_.e=a +_.f=null +_.r=b +_.y=_.x=null +_.z=!1 +_.Q=!0 +_.at=_.as=!1}, +uY:function uY(a,b,c){this.f=a +this.b=b +this.a=c}, +IN:function IN(a,b,c){this.f=a +this.b=b +this.a=c}, +Hy:function Hy(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.$ti=d}, +aO_(a,b){var s +switch(b.a){case 0:s=a.ap(t.I) +s.toString +return A.aIC(s.w) +case 1:return B.a1 +case 2:s=a.ap(t.I) +s.toString +return A.aIC(s.w) +case 3:return B.a1}}, +GH:function GH(a,b,c,d,e,f,g,h){var _=this +_.e=a +_.r=b +_.w=c +_.x=d +_.y=e +_.Q=f +_.c=g +_.a=h}, +a42:function a42(a,b,c){var _=this +_.aJ=!1 +_.bq=null +_.k4=$ +_.ok=a +_.ax=null +_.ay=!1 +_.c=_.b=_.a=_.ch=null +_.d=$ +_.e=b +_.f=null +_.r=c +_.y=_.x=null +_.z=!1 +_.Q=!0 +_.at=_.as=!1}, +a5q:function a5q(){}, +a5r:function a5r(){}, +Vk:function Vk(a,b,c,d,e,f){var _=this +_.c=a +_.e=b +_.f=c +_.r=d +_.w=e +_.a=f}, +a44:function a44(a,b,c){this.f=a +this.b=b +this.a=c}, +a43:function a43(a,b,c,d){var _=this +_.e=a +_.f=b +_.c=c +_.a=d}, +a1c:function a1c(a,b,c,d){var _=this +_.A=a +_.a1=b +_.fr$=c +_.fy=_.fx=null +_.go=!1 +_.k1=_.id=null +_.k2=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=d +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +aO0(a,b){var s={},r=A.a([],t.p),q=A.a([14],t.n) +s.a=0 +new A.as3(s,q,b,r).$1(a) +return r}, +yC:function yC(){}, +as3:function as3(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +a48:function a48(a,b,c){this.f=a +this.b=b +this.a=c}, +W0:function W0(a,b,c,d){var _=this +_.e=a +_.f=b +_.c=c +_.a=d}, +J6:function J6(a,b,c,d,e){var _=this +_.B=a +_.F=b +_.a9=c +_.fr$=d +_.fy=_.fx=null +_.go=!1 +_.k1=_.id=null +_.k2=0 +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=e +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +azr:function azr(a){this.a=a}, +azq:function azq(a){this.a=a}, +a4U:function a4U(){}, +AE:function AE(a,b,c,d,e){var _=this +_.f=a +_.c=b +_.d=c +_.a=d +_.$ti=e}, +vp:function vp(){}, +H_:function H_(a,b){var _=this +_.e=_.d=$ +_.a=null +_.b=a +_.c=null +_.$ti=b}, +atv:function atv(a){this.a=a}, +atw:function atw(a){this.a=a}, +atu:function atu(a,b){this.a=a +this.b=b}, +AF:function AF(a,b,c,d,e,f,g){var _=this +_.e=a +_.f=b +_.r=c +_.w=d +_.c=e +_.a=f +_.$ti=g}, +qP:function qP(){}, +H0:function H0(a,b){var _=this +_.r=null +_.x=_.w=$ +_.a=null +_.b=a +_.c=null +_.$ti=b}, +atx:function atx(a){this.a=a}, +aJL(a,b){var s,r,q,p=!1 +try{r=A.akc(a,p,b) +return r}catch(q){r=A.ax(q) +if(r instanceof A.Ea){s=r +if(s.a!==A.cf(b))throw q +throw A.c(A.wc(" BlocProvider.of() called with a context that does not contain a "+A.cf(b).k(0)+".\n No ancestor could be found starting from the context that was passed to BlocProvider.of<"+A.cf(b).k(0)+">().\n\n This can happen if the context you used comes from a widget above the BlocProvider.\n\n The context used was: "+a.k(0)+"\n "))}else throw q}}, +aVo(a,b){var s=b.gum(),r=new A.j5(s,A.o(s).h("j5<1>")).Jr(new A.a7M(a)) +return r.gUU(r)}, +AG:function AG(a,b,c,d){var _=this +_.r=a +_.c=b +_.a=c +_.$ti=d}, +a7N:function a7N(a){this.a=a}, +a7M:function a7M(a){this.a=a}, +aYy(a,b){return new A.Qw(b,a,null)}, +Qw:function Qw(a,b,c){this.c=a +this.d=b +this.a=c}, +aZU(a,b,c,d){var s=new A.Sy(c,d,b,new A.alD(),A.a([],t.t),A.a([],t.n),a,A.A(t.S,t.x),0,null,null,A.ag(t.T)) +s.aw() +return s}, +nw:function nw(a,b,c){var _=this +_.b=_.x=_.w=null +_.c=!1 +_.r5$=a +_.ci$=b +_.ak$=c +_.a=null}, +Sy:function Sy(a,b,c,d,e,f,g,h,i,j,k,l){var _=this +_.jM=a +_.bu=b +_.e1=c +_.es=0 +_.A=d +_.a1=e +_.al=f +_.bg=0 +_.cR=null +_.aM=g +_.aJ=h +_.bq=$ +_.bZ=!0 +_.e_$=i +_.a4$=j +_.d8$=k +_.fx=null +_.a=!1 +_.b=null +_.c=0 +_.e=_.d=null +_.r=_.f=!1 +_.w=null +_.x=!1 +_.y=null +_.z=!0 +_.Q=null +_.as=!1 +_.at=null +_.ax=!1 +_.ay=$ +_.ch=l +_.CW=!1 +_.cx=$ +_.cy=!0 +_.db=!1 +_.dx=null +_.dy=!0 +_.fr=null}, +alD:function alD(){}, +alG:function alG(a){this.a=a}, +alH:function alH(){}, +alO:function alO(a,b){this.a=a +this.b=b}, +alN:function alN(a,b,c){this.a=a +this.b=b +this.c=c}, +alI:function alI(){}, +alJ:function alJ(a){this.a=a}, +alK:function alK(a){this.a=a}, +alE:function alE(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e}, +alF:function alF(a){this.a=a}, +alL:function alL(a,b){this.a=a +this.b=b}, +alM:function alM(a,b){this.a=a +this.b=b}, +aoV:function aoV(){}, +aoW:function aoW(){}, +Qb:function Qb(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r){var _=this +_.p3=a +_.p4=b +_.R8=c +_.RG=d +_.cx=e +_.c=f +_.d=g +_.e=h +_.f=i +_.r=j +_.x=k +_.Q=l +_.as=m +_.at=n +_.ax=o +_.ay=p +_.ch=q +_.a=r}, +TQ:function TQ(a,b,c,d,e){var _=this +_.f=a +_.r=b +_.w=c +_.d=d +_.a=e}, +a8a:function a8a(a,b){this.a=a +this.b=b}, +a8c:function a8c(a,b,c){this.a=a +this.b=b +this.c=c}, +Uk:function Uk(){}, +jG:function jG(){}, +apF:function apF(a,b){this.a=a +this.b=b}, +apE:function apE(a,b){this.a=a +this.b=b}, +apG:function apG(a,b){this.a=a +this.b=b}, +FU:function FU(a,b,c){this.a=a +this.b=b +this.c=c}, +FV:function FV(a,b){this.a=a +this.b=b}, +VX:function VX(a,b,c){this.a=a +this.b=b +this.c=c}, +FT:function FT(a,b,c,d,e){var _=this +_.c=a +_.d=b +_.e=c +_.a=d +_.b=e}, +aH4(a,b,c,d){var s,r=null +if(b==null)s=r +else s=b +return new A.Uj(d,c,new A.FT(a,r,r,r,r),s,r)}, +apA:function apA(a){this.b=a}, +Uj:function Uj(a,b,c,d,e){var _=this +_.c=a +_.d=b +_.r=c +_.at=d +_.a=e}, +S4:function S4(){}, +ajQ:function ajQ(a){this.a=a}, +b_1(a){A.aXU(new A.dG(a.gavj(),t.n0)) +return A.aS(t.Bt)}, +b_0(a,b,c,d,e,f,g){var s=A.aM4(B.a9,null,c,e,A.aR6(),null,a,null,b,!1,!0,g) +if(d!=null)return A.aLd(s,d) +else return s}, +ST:function ST(a,b,c,d,e,f,g,h,i,j){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.x=i +_.y=j +_.Q=_.z=null}, +amy:function amy(a,b,c){this.a=a +this.b=b +this.c=c}, +amr:function amr(a){this.a=a}, +ams:function ams(){}, +amt:function amt(){}, +amx:function amx(a,b){this.a=a +this.b=b}, +amu:function amu(){}, +amv:function amv(){}, +amw:function amw(){}, +a_v:function a_v(a,b){this.a=a +this.b=b}, +ayx:function ayx(){}, +amz:function amz(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e}, +amC:function amC(a,b,c){this.a=a +this.b=b +this.c=c}, +amD:function amD(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e}, +amE:function amE(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e}, +amB:function amB(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +amA:function amA(){}, +aLb(a,b,c){var s +if(a<0)return new A.bK(!0,t.d9) +s=A.aLb(a-1,b,c) +return s}, +Ck:function Ck(a,b,c,d){var _=this +_.a=$ +_.b=a +_.c=b +_.d=c +_.fx$=0 +_.fy$=d +_.id$=_.go$=0 +_.k1$=!1}, +aec:function aec(){}, +aed:function aed(a,b){this.a=a +this.b=b}, +ayi:function ayi(a,b,c){var _=this +_.a=a +_.b=b +_.c=c +_.d=$}, +YK:function YK(){}, +ais:function ais(a,b){this.a=a +this.b=b}, +tZ:function tZ(a,b,c){this.a=a +this.d=b +this.$ti=c}, +P6:function P6(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.fx$=0 +_.fy$=d +_.id$=_.go$=0 +_.k1$=!1}, +YI:function YI(){}, +YJ:function YJ(){}, +b_3(a,b,c,d){var s,r,q,p,o,n=d.y +n===$&&A.b() +s=n.asJ(0,c) +if(s==null)return null +r=A.b65(d.x,s) +for(n=r.gd5(r),n=n.gab(n),q=J.cb(b);n.q();){p=n.gJ(n) +o=p.a +p=p.b +q.n(b,o,A.j6(p,0,p.length,B.a2,!1))}return new A.fh(d,A.aIh(a,A.aRm(d.d,r)),new A.dN(B.f.k(A.fE(d)),t.kK))}, +aG8(a,b,c){return new A.iJ(b,a,A.aLm(b),A.aLn(b),c)}, +aLm(a){if(a.e!=null)return A.ae7(new A.afL(),null,"error",null) +return B.b.gO(a.a).a}, +aLn(a){if(a.e!=null)return a.c.k(0) +return B.b.gO(a.a).b}, +b_2(a,b,c,d,e){return new A.d9(c,d,e,b,a,A.EX(c))}, +EX(a){var s,r,q,p,o,n=new A.ck("") +for(s=J.aF4(a,new A.amH()),r=J.ap(s.a),s=new A.ik(r,s.b,s.$ti.h("ik<1>")),q=!1;s.q();){p=r.gJ(r).a +if(q)n.a+="/" +o=p.d +n.a+=o +q=q||o!=="/"}s=n.a +return s.charCodeAt(0)==0?s:s}, +aOz(a,b,c,d){var s,r,q=null +try{q=A.aOm(b,B.c9.gWt().b,null)}catch(s){if(!(A.ax(s) instanceof A.wC))throw s}r=t.X +r=A.A(r,r) +r.n(0,"location",a) +if(q!=null)r.n(0,"state",q) +if(c!=null)r.n(0,"imperativeMatches",c) +if(d!=null)r.n(0,"pageKey",d) +return r}, +fh:function fh(a,b,c){this.a=a +this.b=b +this.c=c}, +iJ:function iJ(a,b,c,d,e){var _=this +_.d=a +_.e=b +_.a=c +_.b=d +_.c=e}, +afL:function afL(){}, +d9:function d9(a,b,c,d,e,f){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f}, +amH:function amH(){}, +amJ:function amJ(){}, +amK:function amK(a){this.a=a}, +amL:function amL(){}, +amI:function amI(){}, +amG:function amG(a){this.b=a}, +a1u:function a1u(){}, +azX:function azX(){}, +a1t:function a1t(a){this.a=a}, +w7:function w7(a,b){this.c=a +this.a=b}, +acv:function acv(a){this.a=a}, +H3:function H3(a,b,c){this.c=a +this.d=b +this.a=c}, +Wx:function Wx(a){var _=this +_.d=$ +_.a=null +_.b=a +_.c=null}, +aLa(a){return new A.wm(a)}, +wm:function wm(a){this.a=a}, +oR:function oR(a,b,c){this.f=a +this.b=b +this.a=c}, +b79(a,b,c,d,e){return new A.he(b,c,e,d,a,t.gF)}, +vQ:function vQ(a,b){this.c=a +this.a=b}, +a9Z:function a9Z(a){this.a=a}, +aYK(a,b,c,d){return d}, +hg:function hg(){}, +Hx:function Hx(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q){var _=this +_.bZ=a +_.bt=b +_.B=c +_.fy=!1 +_.id=_.go=null +_.k1=d +_.k2=e +_.k3=f +_.k4=g +_.ok=h +_.p1=$ +_.p2=null +_.p3=$ +_.fN$=i +_.mS$=j +_.y=k +_.z=null +_.Q=!1 +_.at=_.as=null +_.ax=l +_.CW=_.ch=null +_.e=m +_.a=null +_.b=n +_.c=o +_.d=p +_.$ti=q}, +DA:function DA(a,b,c,d,e,f,g,h,i){var _=this +_.r=a +_.w=b +_.x=c +_.ay=d +_.c=e +_.d=f +_.a=g +_.b=h +_.$ti=i}, +b7a(a,b,c,d,e){return A.aLP(a,b,c,d,e,t.H)}, +wS:function wS(a,b){this.c=a +this.a=b}, +ahs:function ahs(a){this.a=a}, +ae8:function ae8(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +ae9:function ae9(a,b){this.a=a +this.b=b}, +aea:function aea(a,b,c){this.a=a +this.b=b +this.c=c}, +aRn(a,b){var s,r,q,p,o,n,m,l,k +for(s=$.aJ5().lm(0,a),s=new A.pZ(s.a,s.b,s.c),r=t.Qz,q=0,p="^";s.q();){o=s.d +n=(o==null?r.a(o):o).b +m=n.index +if(m>q)p+=A.a5L(B.d.P(a,q,m)) +l=n[1] +l.toString +k=n[2] +p+=k!=null?A.b3l(k,l):"(?<"+l+">[^/]+)" +b.push(l) +q=m+n[0].length}s=q"+s+")"}, +aRm(a,b){var s,r,q,p,o,n,m,l +for(s=$.aJ5().lm(0,a),s=new A.pZ(s.a,s.b,s.c),r=t.Qz,q=0,p="";s.q();p=l){o=s.d +n=(o==null?r.a(o):o).b +m=n.index +if(m>q)p+=B.d.P(a,q,m) +l=n[1] +l.toString +l=p+A.h(b.i(0,l)) +q=m+n[0].length}s=q"))) +s=m.i(0,q) +s.toString +p=A.zW(new A.aei(new A.aej(h,q),s)) +$.aRo.D(0,p) +p.ba(new A.aDW(p),t.y) +return a4.anj(h+"_"+q.k(0),A.a([h],t.s))}, +zW(a){return A.b6W(a)}, +b6W(a){var s=0,r=A.a1(t.H),q,p=2,o,n,m,l,k,j,i,h,g,f,e,d,c,b +var $async$zW=A.a2(function(a0,a1){if(a0===1){o=a1 +s=p}while(true)switch(s){case 0:g=a.a +f=g.a +e=g.b +d=f+"_"+e.k(0) +c=f+"-"+e.ZF() +e=a.b +n=e.a +if($.aHZ.p(0,d)){s=1 +break}else $.aHZ.D(0,d) +p=4 +m=null +f=$.aUh() +i=$.aJE +if(i==null){f=f.yv() +$.aJE=f}else f=i +s=7 +return A.a7(t.Yf.b(f)?f:A.hD(f,t.f9),$async$zW) +case 7:l=a1 +k=A.b3o(g,l) +if(k!=null)m=$.qv().jX(0,k) +g=m +f=t.CD +s=8 +return A.a7(t.T8.b(g)?g:A.hD(g,f),$async$zW) +case 8:if(a1!=null){g=A.zV(d,m) +q=g +s=1 +break}m=A.d5(null,f) +s=9 +return A.a7(m,$async$zW) +case 9:if(a1!=null){g=A.zV(d,m) +q=g +s=1 +break}$.aS7() +m=A.aCO(d,e) +s=10 +return A.a7(m,$async$zW) +case 10:if(a1!=null){g=A.zV(d,m) +q=g +s=1 +break}p=2 +s=6 +break +case 4:p=3 +b=o +j=A.ax(b) +$.aHZ.C(0,d) +A.v7("Error: google_fonts was unable to load font "+A.h(c)+" because the following exception occurred:\n"+A.h(j)) +A.v7("If troubleshooting doesn't solve the problem, please file an issue at https://github.com/material-foundation/flutter-packages/issues/new/choose.\n") +throw b +s=6 +break +case 3:s=2 +break +case 6:case 1:return A.a_(q,r) +case 2:return A.Z(o,r)}}) +return A.a0($async$zW,r)}, +zV(a,b){var s=0,r=A.a1(t.H),q,p,o +var $async$zV=A.a2(function(c,d){if(c===1)return A.Z(d,r) +while(true)switch(s){case 0:if(b==null){s=1 +break}s=3 +return A.a7(b,$async$zV) +case 3:p=d +if(p==null){s=1 +break}o=new A.ado(a,A.a([],t.SR)) +o.akT(A.d5(p,t.V4)) +s=4 +return A.a7(o.Bl(0),$async$zV) +case 4:case 1:return A.a_(q,r)}}) +return A.a0($async$zV,r)}, +b2T(a,b){var s,r,q,p,o=A.bc("bestMatch") +for(s=b.a,s=A.lw(s,s.r,b.$ti.c),r=null;s.q();){q=s.d +p=A.b2X(a,q) +if(r==null||p")),b.h("AS<0>")) +s.E(0,a) +return s}, +AS:function AS(a,b,c){this.a=a +this.c=b +this.$ti=c}, +a8v:function a8v(){}, +aYs(a){return A.b8i("media type",a,new A.ahE(a))}, +aLZ(a,b,c){var s=t.N +s=c==null?A.A(s,s):A.aVE(c,s) +return new A.De(a.toLowerCase(),b.toLowerCase(),new A.kH(s,t.G5))}, +De:function De(a,b,c){this.a=a +this.b=b +this.c=c}, +ahE:function ahE(a){this.a=a}, +ahG:function ahG(a){this.a=a}, +ahF:function ahF(){}, +b64(a){var s +a.Wy($.aTN(),"quoted string") +s=a.gJp().i(0,0) +return A.a5N(B.d.P(s,1,s.length-1),$.aTM(),new A.aDK(),null)}, +aDK:function aDK(){}, +b_E(a){return new A.Fw(null,a,B.a0)}, +b_D(a){var s=new A.TD(null,a.ac(),a,B.a0) +s.gcQ(s).c=s +s.gcQ(s).a=a +return s}, +tv:function tv(){}, +a_c:function a_c(a,b,c,d){var _=this +_.y2=a +_.hB$=b +_.ax=null +_.ay=!1 +_.c=_.b=_.a=null +_.d=$ +_.e=c +_.f=null +_.r=d +_.y=_.x=null +_.z=!1 +_.Q=!0 +_.at=_.as=!1}, +qb:function qb(a,b,c,d){var _=this +_.c=a +_.d=b +_.e=c +_.a=d}, +nS:function nS(a,b){var _=this +_.ax=_.aL=_.y2=null +_.ay=!1 +_.c=_.b=_.a=null +_.d=$ +_.e=a +_.f=null +_.r=b +_.y=_.x=null +_.z=!1 +_.Q=!0 +_.at=_.as=!1}, +ayk:function ayk(){}, +Fx:function Fx(){}, +aAH:function aAH(a){this.a=a}, +aAI:function aAI(a){this.a=a}, +aCe:function aCe(a){this.a=a}, +uk:function uk(){}, +Fw:function Fw(a,b,c){var _=this +_.hB$=a +_.ax=null +_.ay=!1 +_.c=_.b=_.a=null +_.d=$ +_.e=b +_.f=null +_.r=c +_.y=_.x=null +_.z=!1 +_.Q=!0 +_.at=_.as=!1}, +pH:function pH(){}, +xU:function xU(){}, +TD:function TD(a,b,c,d){var _=this +_.hB$=a +_.k3=b +_.k4=!1 +_.ax=null +_.ay=!1 +_.c=_.b=_.a=null +_.d=$ +_.e=c +_.f=null +_.r=d +_.y=_.x=null +_.z=!1 +_.Q=!0 +_.at=_.as=!1}, +a2i:function a2i(){}, +a2j:function a2j(){}, +a4I:function a4I(){}, +aj_(){var s=0,r=A.a1(t.A9),q,p,o +var $async$aj_=A.a2(function(a,b){if(a===1)return A.Z(b,r) +while(true)switch(s){case 0:o=$.aMe +if(o!=null){q=o +s=1 +break}s=3 +return A.a7($.aSd().m6(0),$async$aj_) +case 3:p=b +q=$.aMe=new A.DL(p.a,p.b,p.c,p.d,p.e,p.f) +s=1 +break +case 1:return A.a_(q,r)}}) +return A.a0($async$aj_,r)}, +DL:function DL(a,b,c,d,e,f){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f}, +b2m(a){if(a.Jh("chrome-extension"))return a.ge5()+"://"+a.gjP(a) +return a.gwk(a)}, +aiZ:function aiZ(){}, +ahI:function ahI(){}, +DM:function DM(a,b,c,d,e,f){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f}, +aiY:function aiY(){}, +aPK(a){if(t.Xu.b(a))return a +throw A.c(A.hL(a,"uri","Value must be a String or a Uri"))}, +aQ0(a,b){var s,r,q,p,o,n,m,l +for(s=b.length,r=1;r=1;s=q){q=s-1 +if(b[q]!=null)break}p=new A.ck("") +o=""+(a+"(") +p.a=o +n=A.S(b) +m=n.h("ac<1>") +l=new A.ac(b,0,s,m) +l.b2(b,0,s,n.c) +m=o+new A.R(l,new A.aDf(),m.h("R")).c_(0,", ") +p.a=m +p.a=m+("): part "+(r-1)+" was null, but part "+r+" was not.") +throw A.c(A.bC(p.k(0),null))}}, +a9N:function a9N(a,b){this.a=a +this.b=b}, +a9R:function a9R(){}, +a9S:function a9S(){}, +aDf:function aDf(){}, +ag_:function ag_(){}, +Rh(a,b){var s,r,q,p,o,n=b.a0i(a) +b.nb(a) +if(n!=null)a=B.d.bL(a,n.length) +s=t.s +r=A.a([],s) +q=A.a([],s) +s=a.length +if(s!==0&&b.lH(a.charCodeAt(0))){q.push(a[0]) +p=1}else{q.push("") +p=0}for(o=p;o").N(e).h("D6<1,2>"))}, +D6:function D6(a,b,c,d){var _=this +_.b=a +_.c=b +_.a=c +_.$ti=d}, +Gu:function Gu(a,b){this.a=a +this.$ti=b}, +aIa(a,b){var s=new A.R(new A.fu(a),A.aQf(),t.Hz.h("R")).nc(0) +return new A.uj(new A.Fu(a.charCodeAt(0)),'"'+s+'" expected')}, +Fu:function Fu(a){this.a=a}, +r4:function r4(a){this.a=a}, +Q6:function Q6(a,b,c){this.a=a +this.b=b +this.c=c}, +QI:function QI(a){this.a=a}, +b77(a){var s,r,q,p,o,n,m,l,k=A.V(a,!1,t.eg) +B.b.dK(k,new A.aEl()) +s=A.a([],t.zT) +for(r=k.length,q=0;q=p.a){n=p.b +s[s.length-1]=new A.e2(o.a,n)}else s.push(p)}}m=B.b.ra(s,0,new A.aEm()) +if(m===0)return B.Kp +else if(m-1===65535)return B.Kq +else if(s.length===1){r=s[0] +n=r.a +return n===r.b?new A.Fu(n):r}else{r=B.b.gL(s) +n=B.b.gO(s) +l=B.f.el(B.b.gO(s).b-B.b.gL(s).a+1+31,5) +r=new A.Q6(r.a,n.b,new Uint32Array(l)) +r.a6i(s) +return r}}, +aEl:function aEl(){}, +aEm:function aEm(){}, +aRl(a,b){var s=$.aTL().aZ(new A.vO(a,0)) +s=s.gl(s) +return new A.uj(s,b==null?"["+new A.R(new A.fu(a),A.aQf(),t.Hz.h("R")).nc(0)+"] expected":b)}, +aDa:function aDa(){}, +aD5:function aD5(){}, +aD9:function aD9(){}, +aD3:function aD3(){}, +eq:function eq(){}, +e2:function e2(a,b){this.a=a +this.b=b}, +Vn:function Vn(){}, +aVM(a,b,c){var s=b==null?A.aQB():b +return new A.r_(s,A.V(a,!1,c.h("au<0>")),c.h("r_<0>"))}, +os(a,b,c){var s=b==null?A.aQB():b +return new A.r_(s,A.V(a,!1,c.h("au<0>")),c.h("r_<0>"))}, +r_:function r_(a,b,c){this.b=a +this.a=b +this.$ti=c}, +e_:function e_(){}, +aRz(a,b,c,d){return new A.ud(a,b,c.h("@<0>").N(d).h("ud<1,2>"))}, +b_t(a,b,c,d){return new A.ud(a,b,c.h("@<0>").N(d).h("ud<1,2>"))}, +aMF(a,b,c,d,e){return A.p8(a,new A.akJ(b,c,d,e),!1,c.h("@<0>").N(d).h("+(1,2)"),e)}, +ud:function ud(a,b,c){this.a=a +this.b=b +this.$ti=c}, +akJ:function akJ(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +l_(a,b,c,d,e,f){return new A.ue(a,b,c,d.h("@<0>").N(e).N(f).h("ue<1,2,3>"))}, +b_u(a,b,c,d,e,f){return new A.ue(a,b,c,d.h("@<0>").N(e).N(f).h("ue<1,2,3>"))}, +tR(a,b,c,d,e,f){return A.p8(a,new A.akK(b,c,d,e,f),!1,c.h("@<0>").N(d).N(e).h("+(1,2,3)"),f)}, +ue:function ue(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.$ti=d}, +akK:function akK(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e}, +aEx(a,b,c,d,e,f,g,h){return new A.Fo(a,b,c,d,e.h("@<0>").N(f).N(g).N(h).h("Fo<1,2,3,4>"))}, +akL(a,b,c,d,e,f,g){return A.p8(a,new A.akM(b,c,d,e,f,g),!1,c.h("@<0>").N(d).N(e).N(f).h("+(1,2,3,4)"),g)}, +Fo:function Fo(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.$ti=e}, +akM:function akM(a,b,c,d,e,f){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f}, +aRA(a,b,c,d,e,f,g,h,i,j){return new A.Fp(a,b,c,d,e,f.h("@<0>").N(g).N(h).N(i).N(j).h("Fp<1,2,3,4,5>"))}, +aMG(a,b,c,d,e,f,g,h){return A.p8(a,new A.akN(b,c,d,e,f,g,h),!1,c.h("@<0>").N(d).N(e).N(f).N(g).h("+(1,2,3,4,5)"),h)}, +Fp:function Fp(a,b,c,d,e,f){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.$ti=f}, +akN:function akN(a,b,c,d,e,f,g){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g}, +aZK(a,b,c,d,e,f,g,h,i,j,k){return A.p8(a,new A.akO(b,c,d,e,f,g,h,i,j,k),!1,c.h("@<0>").N(d).N(e).N(f).N(g).N(h).N(i).N(j).h("+(1,2,3,4,5,6,7,8)"),k)}, +Fq:function Fq(a,b,c,d,e,f,g,h,i){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.$ti=i}, +akO:function akO(a,b,c,d,e,f,g,h,i,j){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.x=i +_.y=j}, +tb:function tb(){}, +aYO(a,b){return new A.iT(null,a,b.h("iT<0?>"))}, +iT:function iT(a,b,c){this.b=a +this.a=b +this.$ti=c}, +FA:function FA(a,b,c,d){var _=this +_.b=a +_.c=b +_.a=c +_.$ti=d}, +rm:function rm(a,b){this.a=a +this.$ti=b}, +QF:function QF(a){this.a=a}, +aI8(){return new A.je("input expected")}, +je:function je(a){this.a=a}, +uj:function uj(a,b){this.a=a +this.b=b}, +RL:function RL(a,b,c){this.a=a +this.b=b +this.c=c}, +bZ(a){var s=a.length +if(s===0)return new A.rm(a,t.oy) +else if(s===1){s=A.aIa(a,null) +return s}else{s=A.b7W(a,null) +return s}}, +b7W(a,b){return new A.RL(a.length,new A.aEz(a),'"'+a+'" expected')}, +aEz:function aEz(a){this.a=a}, +aML(a,b,c,d){return new A.SG(a.a,d,b,c)}, +SG:function SG(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +hY:function hY(a,b,c,d,e){var _=this +_.e=a +_.b=b +_.c=c +_.a=d +_.$ti=e}, +CW:function CW(){}, +aZk(a,b){return A.aGH(a,0,9007199254740991,b)}, +aGH(a,b,c,d){return new A.E9(b,c,a,d.h("E9<0>"))}, +E9:function E9(a,b,c,d){var _=this +_.b=a +_.c=b +_.a=c +_.$ti=d}, +EM:function EM(){}, +aMo(a,b,c){var s +if(c){s=$.a5T() +A.w9(a) +s=s.a.get(a)===B.ji}else s=!1 +if(s)throw A.c(A.ms("`const Object()` cannot be used as the token.")) +s=$.a5T() +A.w9(a) +if(b!==s.a.get(a))throw A.c(A.ms("Platform interfaces must not be implemented with `implements`"))}, +ajJ:function ajJ(){}, +b_p(a,b,c,d){var s,r,q,p,o=A.aMz(a,c) +try{q=o +if(q==null)p=null +else{q=q.gpJ() +p=q.gl(q)}s=p +if(!c.b(s)){q=A.aGK(A.cf(c),A.t(a.gao())) +throw A.c(q)}r=b.$1(s) +if(o!=null)a.tq(t.IS.a(o),new A.anL(c,a,b,r)) +else a.ap(c.h("fJ<0?>")) +return r}finally{}}, +akc(a,b,c){var s,r,q=A.aMz(a,c) +if(q==null)s=null +else{r=q.gpJ() +s=r.gl(r)}if($.aTo()){if(!c.b(s))throw A.c(A.aGK(A.cf(c),A.t(a.gao()))) +return s}return s==null?c.a(s):s}, +aMz(a,b){var s=b.h("z6<0?>?").a(a.fY(b.h("fJ<0?>"))) +if(s==null&&!b.b(null))throw A.c(new A.Ea(A.cf(b),A.t(a.gao()))) +return s}, +aGK(a,b){return new A.RT(a,b)}, +CC:function CC(a,b,c,d,e){var _=this +_.e=a +_.f=b +_.c=c +_.a=d +_.$ti=e}, +I5:function I5(a,b,c,d){var _=this +_.hB$=a +_.ax=null +_.ay=!1 +_.c=_.b=_.a=null +_.d=$ +_.e=b +_.f=null +_.r=c +_.y=_.x=null +_.z=!1 +_.Q=!0 +_.at=_.as=!1 +_.$ti=d}, +anL:function anL(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +fJ:function fJ(a,b,c,d){var _=this +_.f=a +_.b=b +_.a=c +_.$ti=d}, +uL:function uL(a,b){var _=this +_.b=_.a=!1 +_.c=a +_.$ti=b}, +z6:function z6(a,b,c,d){var _=this +_.bc=_.bM=!1 +_.cY=!0 +_.d9=_.cZ=!1 +_.eO=$ +_.y2=a +_.ax=null +_.ay=!1 +_.c=_.b=_.a=null +_.d=$ +_.e=b +_.f=null +_.r=c +_.y=_.x=null +_.z=!1 +_.Q=!0 +_.at=_.as=!1 +_.$ti=d}, +awd:function awd(a,b){this.a=a +this.b=b}, +awe:function awe(a){this.a=a}, +XA:function XA(){}, +kU:function kU(){}, +yN:function yN(a,b,c,d,e,f,g){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.$ti=g}, +Hl:function Hl(a){var _=this +_.b=null +_.c=!1 +_.a=_.f=_.e=_.d=null +_.$ti=a}, +Qy:function Qy(){}, +RT:function RT(a,b){this.a=a +this.b=b}, +Ea:function Ea(a,b){this.a=a +this.b=b}, +aFN(a,b){if(b<0)A.T(A.ef("Offset may not be negative, was "+b+".")) +else if(b>a.c.length)A.T(A.ef("Offset "+b+u.D+a.gu(a)+".")) +return new A.Ow(a,b)}, +aoZ:function aoZ(a,b,c){var _=this +_.a=a +_.b=b +_.c=c +_.d=null}, +Ow:function Ow(a,b){this.a=a +this.b=b}, +yU:function yU(a,b,c){this.a=a +this.b=b +this.c=c}, +aXG(a,b){var s=A.aXH(A.a([A.b1l(a,!0)],t._Y)),r=new A.aeW(b).$0(),q=B.f.k(B.b.gO(s).b+1),p=A.aXI(s)?0:3,o=A.S(s) +return new A.aeC(s,r,null,1+Math.max(q.length,p),new A.R(s,new A.aeE(),o.h("R<1,l>")).is(0,B.Dl),!A.b6G(new A.R(s,new A.aeF(),o.h("R<1,I?>"))),new A.ck(""))}, +aXI(a){var s,r,q +for(s=0;s").N(r.z[1]),s=new A.bN(J.ap(s.a),s.b,r.h("bN<1,2>")),r=r.z[1];s.q();){q=s.a +if(q==null)q=r.a(q) +J.a66(q,new A.aeI())}s=p.gd5(p) +r=A.o(s).h("kb") +return A.V(new A.kb(s,new A.aeJ(),r),!0,r.h("n.E"))}, +b1l(a,b){var s=new A.aw0(a).$0() +return new A.h1(s,!0,null)}, +b1n(a){var s,r,q,p,o,n,m=a.gcV(a) +if(!B.d.p(m,"\r\n"))return a +s=a.gbi(a) +r=s.gcz(s) +for(s=m.length-1,q=0;qb?a:b,r=c>d?c:d +return s>r?s:r}, +jY:function jY(a,b,c,d,e,f,g){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g}, +aK4(a,b,c,d,e){var s=A.tC(a,b,e),r=A.tC(b,c,e),q=A.tC(c,d,e),p=A.tC(s,r,e),o=A.tC(r,q,e) +return A.a([a,s,p,A.tC(p,o,e),o,q,d],t.Ic)}, +Rj(a,b){var s=A.a([],t.H9) +B.b.E(s,a) +return new A.fD(s,b)}, +aRf(a,b){var s,r,q,p +if(a==="")return A.Rj(B.Qm,b==null?B.bI:b) +s=new A.apQ(a,B.df,a.length) +s.uk() +r=A.a([],t.H9) +q=new A.iU(r,b==null?B.bI:b) +p=new A.apP(B.e2,B.e2,B.e2,B.df) +for(r=s.Ys(),r=new A.e4(r.a(),r.$ti.h("e4<1>"));r.q();)p.ap_(r.b,q) +return q.pd()}, +Rl:function Rl(a,b){this.a=a +this.b=b}, +x5:function x5(a,b){this.a=a +this.b=b}, +pl:function pl(){}, +fc:function fc(a,b,c){this.b=a +this.c=b +this.a=c}, +iP:function iP(a,b,c){this.b=a +this.c=b +this.a=c}, +eO:function eO(a,b,c,d,e,f,g){var _=this +_.b=a +_.c=b +_.d=c +_.e=d +_.f=e +_.r=f +_.a=g}, +a9V:function a9V(){}, +B7:function B7(a){this.a=a}, +iU:function iU(a,b){this.a=a +this.b=b}, +fD:function fD(a,b){this.a=a +this.b=b}, +aug:function aug(a){this.a=a +this.b=0}, +ayA:function ayA(a,b,c,d){var _=this +_.a=a +_.b=$ +_.c=b +_.d=c +_.e=$ +_.f=d}, +DT:function DT(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e}, +aXP(a){var s,r,q=null +if(a.length===0)throw A.c(A.bC("bytes was empty",q)) +s=a.byteLength +if(s>20&&a[0]===137&&a[1]===80&&a[2]===78&&a[3]===71&&a[4]===13&&a[5]===10&&a[6]===26&&a[7]===10){s=A.fC(a.buffer,0,q) +return new A.ajR(s.getUint32(16,!1),s.getUint32(20,!1))}if(s>8)if(a[0]===71)if(a[1]===73)if(a[2]===70)if(a[3]===56){r=a[4] +r=(r===55||r===57)&&a[5]===97}else r=!1 +else r=!1 +else r=!1 +else r=!1 +else r=!1 +if(r){s=A.fC(a.buffer,0,q) +return new A.ae3(s.getUint16(6,!0),s.getUint16(8,!0))}if(s>12&&a[0]===255&&a[1]===216&&a[2]===255)return A.aXZ(A.fC(a.buffer,0,q)) +if(s>28&&a[0]===82&&a[1]===73&&a[2]===70&&a[3]===70&&a[8]===87&&a[9]===69&&a[10]===66&&a[11]===80){s=A.fC(a.buffer,0,q) +return new A.as1(s.getUint16(26,!0),s.getUint16(28,!0))}if(s>22&&a[0]===66&&a[1]===77){s=A.fC(a.buffer,0,q) +return new A.a7P(s.getInt32(18,!0),s.getInt32(22,!0))}throw A.c(A.bC("unknown image type",q))}, +aXZ(a){var s,r=4+a.getUint16(4,!1) +for(;r>>0)}, +aK1(a,b,c,d){return new A.Y(((a&255)<<24|(b&255)<<16|(c&255)<<8|d&255)>>>0)}, +Y:function Y(a){this.a=a}, +kg:function kg(){}, +p5:function p5(a,b,c,d,e,f,g,h){var _=this +_.r=a +_.w=b +_.a=c +_.b=d +_.c=e +_.d=f +_.e=g +_.f=h}, +Cl:function Cl(a,b){this.a=a +this.b=b}, +pu:function pu(a,b,c,d,e,f,g,h,i){var _=this +_.r=a +_.w=b +_.x=c +_.a=d +_.b=e +_.c=f +_.d=g +_.e=h +_.f=i}, +lB:function lB(a,b,c){this.a=a +this.b=b +this.c=c}, +FO:function FO(a,b,c,d,e,f){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f}, +ru:function ru(a,b){this.a=a +this.b=b}, +eM:function eM(a,b){this.a=a +this.b=b}, +Rg:function Rg(a,b){this.a=a +this.b=b}, +FP:function FP(a,b){this.a=a +this.b=b}, +FQ:function FQ(a,b){this.a=a +this.b=b}, +Gq:function Gq(a,b){this.a=a +this.b=b}, +Gf:function Gf(a,b,c,d,e,f){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f}, +G9:function G9(a,b,c,d,e,f,g,h){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h}, +kd:function kd(a,b){this.a=a +this.b=b}, +uq:function uq(a,b){this.a=a +this.b=b}, +up:function up(a){this.a=a}, +aHk(a,b,c,d,e){var s=b==null?A.a([],t.f2):b +return new A.Vj(e,c,s,a,d)}, +ty(a,b,c){var s=b==null?A.a([],t.f2):b +return new A.x4(s,a,c==null?a.r:c)}, +aND(a,b){var s=A.a([],t.f2) +return new A.UC(b,s,a,a.r)}, +b_7(a,b,c){return new A.T1(c,b,a,B.aL)}, +aMl(a,b){return new A.x7(a,b,b.r)}, +aKg(a,b,c){return new A.vU(b,c,a,a.r)}, +aNA(a,b){return new A.UB(a,b,b.r)}, +aLl(a,b,c){return new A.Ps(a,b,c,c.r)}, +cG:function cG(){}, +XZ:function XZ(){}, +UV:function UV(){}, +fr:function fr(){}, +Vj:function Vj(a,b,c,d,e){var _=this +_.r=a +_.w=b +_.d=c +_.b=d +_.a=e}, +x4:function x4(a,b,c){this.d=a +this.b=b +this.a=c}, +UC:function UC(a,b,c,d){var _=this +_.r=a +_.d=b +_.b=c +_.a=d}, +T1:function T1(a,b,c,d){var _=this +_.r=a +_.d=b +_.b=c +_.a=d}, +B4:function B4(a,b,c,d){var _=this +_.b=a +_.c=b +_.d=c +_.a=d}, +D7:function D7(a,b,c,d,e){var _=this +_.b=a +_.c=b +_.d=c +_.e=d +_.a=e}, +x7:function x7(a,b,c){this.d=a +this.b=b +this.a=c}, +vU:function vU(a,b,c,d){var _=this +_.d=a +_.e=b +_.b=c +_.a=d}, +UB:function UB(a,b,c){this.d=a +this.b=b +this.a=c}, +Ps:function Ps(a,b,c,d){var _=this +_.d=a +_.e=b +_.b=c +_.a=d}, +DU:function DU(a,b,c,d){var _=this +_.b=a +_.c=b +_.d=c +_.a=d}, +b1d(a,b){var s,r,q=a.QY() +if(a.Q!=null){a.r.f_(0,new A.JU("svg",A.aHk(a.as,null,q.b,q.c,q.a))) +return}s=A.aHk(a.as,null,q.b,q.c,q.a) +a.Q=s +r=a.at +r.toString +a.q9(r,s) +return}, +b18(a,b){var s,r,q,p,o=a.at +if((o==null?null:o.r)===!0)return +o=a.r +s=o.gO(o).b +o=a.as +r=A.ty(o,null,null) +q=a.f +p=q.gnr() +s.uA(r,o.y,q.gpg(),a.eo("mask"),p,q.x7(a),p) +p=a.at +p.toString +a.q9(p,r) +return}, +b1f(a,b){var s,r,q,p,o=a.at +if((o==null?null:o.r)===!0)return +o=a.r +s=o.gO(o).b +r=a.at +q=A.aND(a.as,r.gJt(r)==="text") +o=a.f +p=o.gnr() +s.uA(q,a.as.y,o.gpg(),a.eo("mask"),p,o.x7(a),p) +a.q9(r,q) +return}, +b1e(a,b){var s=A.ty(a.as,null,null),r=a.at +r.toString +a.q9(r,s) +return}, +b1b(a,b){var s,r,q,p,o,n,m,l,k=null,j=a.as,i=a.eo("width") +if(i==null)i="" +s=a.eo("height") +if(s==null)s="" +r=A.aRc(i,"width",a.Q) +q=A.aRc(s,"height",a.Q) +if(r==null||q==null){p=a.QY() +r=p.a +q=p.b}o=j.a +n=o.i(0,"x") +m=o.i(0,"y") +a.z.D(0,"url(#"+A.h(a.as.b)+")") +l=A.ty(A.aNn(j.z,j.y,j.x,j.d,k,k,j.f,j.w,j.Q,j.at,j.as,q,j.c,j.b,o,j.e,k,k,k,k,j.r,r,A.BD(n),A.BD(m)),k,k) +o=a.at +o.toString +a.q9(o,l) +return}, +b1g(a,b){var s,r,q,p=a.r,o=p.gO(p).b,n=a.as.c +if(n==null||n.length===0)return +p=A.a5K(a.eo("transform")) +if(p==null)p=B.aL +s=a.a +r=A.dX(a.cX("x","0"),s,!1) +r.toString +s=A.dX(a.cX("y","0"),s,!1) +s.toString +q=A.ty(B.de,null,p.wL(r,s)) +s=a.f +r=s.gnr() +p=s.gpg() +q.H5(A.aKg(a.as,"url("+A.h(n)+")",r),p,r,r) +if("#"+A.h(a.as.b)!==n)a.A1(q) +o.uA(q,a.as.y,p,a.eo("mask"),r,s.x7(a),r) +return}, +aOc(a,b,c){var s,r,q,p,o="stop-color" +for(s=a.yR(),s=new A.e4(s.a(),s.$ti.h("e4<1>"));s.q();){r=s.b +if(r instanceof A.h0)continue +if(r instanceof A.fI){r=a.as.a.i(0,"stop-opacity") +if(r==null)r="1" +q=a.as.a.i(0,o) +if(q==null)q=null +p=a.wm(q,o,a.as.b) +if(p==null)p=B.cS +r=A.fp(r,!1) +r.toString +q=p.a +b.push(A.vH(q>>>16&255,q>>>8&255,q&255,r)) +r=a.as.a.i(0,"offset") +c.push(A.od(r==null?"0%":r))}}return}, +b1c(a,b){var s,r,q,p,o,n,m,l,k=a.Yr(),j=a.cX("cx","50%"),i=a.cX("cy","50%"),h=a.cX("r","50%"),g=a.cX("fx",j),f=a.cX("fy",i),e=a.Yt(),d=a.as,c=A.a5K(a.eo("gradientTransform")) +if(!a.at.r){s=A.a([],t.n) +r=A.a([],t.Ai) +A.aOc(a,r,s)}else{s=null +r=null}j.toString +q=A.od(j) +i.toString +p=A.od(i) +h.toString +o=A.od(h) +g.toString +n=A.od(g) +f.toString +m=A.od(f) +l=n!==q||m!==p?new A.bY(n,m):null +a.f.U5(new A.pu(new A.bY(q,p),o,l,"url(#"+A.h(d.b)+")",r,s,e,k,c),a.as.c) +return}, +b1a(a,b){var s,r,q,p,o,n,m,l,k=a.Yr(),j=a.cX("x1","0%") +j.toString +s=a.cX("x2","100%") +s.toString +r=a.cX("y1","0%") +r.toString +q=a.cX("y2","0%") +q.toString +p=a.as +o=A.a5K(a.eo("gradientTransform")) +n=a.Yt() +if(!a.at.r){m=A.a([],t.n) +l=A.a([],t.Ai) +A.aOc(a,l,m)}else{m=null +l=null}a.f.U5(new A.p5(new A.bY(A.od(j),A.od(r)),new A.bY(A.od(s),A.od(q)),"url(#"+A.h(p.b)+")",l,m,n,k,o),a.as.c) +return}, +b17(a,b){var s,r,q,p,o,n,m,l,k,j=a.as,i=A.a([],t.f2) +for(s=a.yR(),s=new A.e4(s.a(),s.$ti.h("e4<1>")),r=a.f,q=r.gnr(),p=t.H9,o=a.r;s.q();){n=s.b +if(n instanceof A.h0)continue +if(n instanceof A.fI){n=n.e +m=B.vp.i(0,n) +if(m!=null){n=m.$1(a) +n.toString +l=o.gO(o).b +n=a.ali(n,l.a).a +n=A.a(n.slice(0),A.S(n)) +l=a.as.x +if(l==null)l=B.bI +k=A.a([],p) +B.b.E(k,n) +n=a.as +i.push(new A.x7(new A.fD(k,l),n,n.r))}else if(n==="use"){n=a.as +i.push(new A.vU("url("+A.h(n.c)+")",q,n,n.r))}}}r.akP("url(#"+A.h(j.b)+")",i) +return}, +b19(a,b){var s,r,q,p,o,n,m,l=a.as.c +if(l==null)return +if(B.d.bz(l,"data:")){s=B.d.cS(l,";")+1 +r=B.d.fu(l,",",s) +q=B.d.P(l,B.d.cS(l,"/")+1,s-1) +p=$.aJa() +o=A.is(q,p,"").toLowerCase() +n=B.Tv.i(0,o) +if(n==null){A.v7("Warning: Unsupported image format "+o) +return}r=B.d.bL(l,r+1) +m=A.aLl(B.mY.cp(A.is(r,p,"")),n,a.as) +r=a.r +q=a.f +p=q.gnr() +r.gO(r).b.H5(m,q.gpg(),p,p) +a.A1(m) +return}return}, +b1J(a){var s,r,q,p=a.a,o=A.dX(a.cX("cx","0"),p,!1) +o.toString +s=A.dX(a.cX("cy","0"),p,!1) +s.toString +p=A.dX(a.cX("r","0"),p,!1) +p.toString +r=a.as.w +q=A.a([],t.H9) +return new A.iU(q,r==null?B.bI:r).kr(new A.i6(o-p,s-p,o+p,s+p)).pd()}, +b1M(a){var s=a.cX("d","") +s.toString +return A.aRf(s,a.as.w)}, +b1P(a){var s,r,q,p,o,n,m,l,k=a.a,j=A.dX(a.cX("x","0"),k,!1) +j.toString +s=A.dX(a.cX("y","0"),k,!1) +s.toString +r=A.dX(a.cX("width","0"),k,!1) +r.toString +q=A.dX(a.cX("height","0"),k,!1) +q.toString +p=a.eo("rx") +o=a.eo("ry") +if(p==null)p=o +if(o==null)o=p +if(p!=null&&p!==""){n=A.dX(p,k,!1) +n.toString +k=A.dX(o,k,!1) +k.toString +m=a.as.w +l=A.a([],t.H9) +return new A.iU(l,m==null?B.bI:m).akZ(new A.i6(j,s,j+r,s+q),n,k).pd()}k=a.as.w +n=A.a([],t.H9) +return new A.iU(n,k==null?B.bI:k).jA(new A.i6(j,s,j+r,s+q)).pd()}, +b1N(a){return A.aOt(a,!0)}, +b1O(a){return A.aOt(a,!1)}, +aOt(a,b){var s,r=a.cX("points","") +r.toString +if(r==="")return null +s=b?"z":"" +return A.aRf("M"+r+s,a.as.w)}, +b1K(a){var s,r,q,p,o=a.a,n=A.dX(a.cX("cx","0"),o,!1) +n.toString +s=A.dX(a.cX("cy","0"),o,!1) +s.toString +r=A.dX(a.cX("rx","0"),o,!1) +r.toString +o=A.dX(a.cX("ry","0"),o,!1) +o.toString +n-=r +s-=o +q=a.as.w +p=A.a([],t.H9) +return new A.iU(p,q==null?B.bI:q).kr(new A.i6(n,s,n+r*2,s+o*2)).pd()}, +b1L(a){var s,r,q,p,o=a.a,n=A.dX(a.cX("x1","0"),o,!1) +n.toString +s=A.dX(a.cX("x2","0"),o,!1) +s.toString +r=A.dX(a.cX("y1","0"),o,!1) +r.toString +o=A.dX(a.cX("y2","0"),o,!1) +o.toString +q=a.as.w +p=A.a([],t.H9) +if(q==null)q=B.bI +p.push(new A.iP(n,r,B.cE)) +p.push(new A.fc(s,o,B.bh)) +return new A.iU(p,q).pd()}, +aNn(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4){return new A.ya(o,n,m,d,p,g,a1,h,c,b,a,i,k,j,r,a0,s,a2,l,a3,q,a4,e,f)}, +BD(a){var s +if(a==null||a==="")return null +if(A.aQT(a))return new A.BC(A.aRd(a,1),!0) +s=A.fp(a,!1) +s.toString +return new A.BC(s,!1)}, +JU:function JU(a,b){this.a=a +this.b=b}, +kC:function kC(a,b,c,d,e,f,g,h,i){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.y=_.x=_.w=!0 +_.z=h +_.Q=null +_.as=i +_.at=null +_.ax=0 +_.ay=null +_.ch=!1}, +apH:function apH(){}, +apI:function apI(){}, +apJ:function apJ(){}, +apK:function apK(a){this.a=a}, +apL:function apL(a){this.a=a}, +apM:function apM(a){this.a=a}, +apN:function apN(){}, +apO:function apO(){}, +a1f:function a1f(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=!1 +_.e=d}, +azL:function azL(a,b){this.a=a +this.b=b}, +azK:function azK(){}, +azI:function azI(){}, +azH:function azH(a){this.a=a}, +azJ:function azJ(a){this.a=a}, +a41:function a41(a,b,c){this.a=a +this.b=b +this.c=c}, +ya:function ya(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1,a2,a3,a4){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.x=i +_.y=j +_.z=k +_.Q=l +_.as=m +_.at=n +_.ax=o +_.ay=p +_.ch=q +_.CW=r +_.cx=s +_.cy=a0 +_.db=a1 +_.dx=a2 +_.dy=a3 +_.fr=a4}, +apB:function apB(){}, +BC:function BC(a,b){this.a=a +this.b=b}, +FW:function FW(a,b,c,d,e,f,g,h,i,j,k){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.x=i +_.y=j +_.z=k}, +yb:function yb(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e}, +mC:function mC(a,b){this.a=a +this.b=b}, +am9:function am9(){this.a=$}, +SM:function SM(a,b){this.a=a +this.b=b}, +SL:function SL(a,b){this.a=a +this.b=b}, +xz:function xz(a,b,c){this.a=a +this.b=b +this.c=c}, +SI:function SI(a,b){this.a=a +this.b=b}, +SJ:function SJ(a,b,c){this.a=a +this.b=b +this.c=c}, +EN:function EN(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +SK:function SK(a,b,c,d,e,f,g,h){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h}, +Ul:function Ul(a,b,c){this.a=a +this.b=b +this.c=c}, +Vl:function Vl(){}, +On:function On(){}, +a9E:function a9E(a){var _=this +_.a=a +_.c=_.b=$ +_.d=null}, +a9F:function a9F(a,b){this.a=a +this.b=b}, +WN:function WN(){}, +Va:function Va(a,b,c,d,e,f,g,h,i,j,k){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.x=i +_.y=j +_.z=k}, +ka:function ka(a,b){this.a=a +this.b=b}, +iC:function iC(a,b,c,d,e,f){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f}, +tl:function tl(a){this.a=a}, +uB:function uB(a){this.a=a}, +tn(a){var s=new A.bd(new Float64Array(16)) +if(s.fL(a)===0)return null +return s}, +aYo(){return new A.bd(new Float64Array(16))}, +aYp(){var s=new A.bd(new Float64Array(16)) +s.de() +return s}, +aLQ(a){var s,r,q=new Float64Array(16) +q[15]=1 +s=Math.cos(a) +r=Math.sin(a) +q[0]=s +q[1]=r +q[2]=0 +q[4]=-r +q[5]=s +q[6]=0 +q[8]=0 +q[9]=0 +q[10]=1 +q[3]=0 +q[7]=0 +q[11]=0 +return new A.bd(q)}, +ko(a,b,c){var s=new Float64Array(16),r=new A.bd(s) +r.de() +s[14]=c +s[13]=b +s[12]=a +return r}, +wU(a,b,c){var s=new Float64Array(16) +s[15]=1 +s[10]=c +s[5]=b +s[0]=a +return new A.bd(s)}, +aMA(){var s=new Float64Array(4) +s[3]=1 +return new A.ps(s)}, +tk:function tk(a){this.a=a}, +bd:function bd(a){this.a=a}, +ps:function ps(a){this.a=a}, +eG:function eG(a){this.a=a}, +kI:function kI(a){this.a=a}, +eu:function eu(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +b4w(a){var s=a.pj(0) +s.toString +switch(s){case"<":return"<" +case"&":return"&" +case"]]>":return"]]>" +default:return A.aHK(s)}}, +b4q(a){var s=a.pj(0) +s.toString +switch(s){case"'":return"'" +case"&":return"&" +case"<":return"<" +default:return A.aHK(s)}}, +b3a(a){var s=a.pj(0) +s.toString +switch(s){case'"':return""" +case"&":return"&" +case"<":return"<" +default:return A.aHK(s)}}, +aHK(a){return A.n8(new A.EY(a),new A.aCh(),t.Dc.h("n.E"),t.N).nc(0)}, +Vr:function Vr(){}, +aCh:function aCh(){}, +pX:function pX(){}, +dx:function dx(a,b,c){this.c=a +this.a=b +this.b=c}, +nI:function nI(a,b){this.a=a +this.b=b}, +Vw:function Vw(){}, +asu:function asu(){}, +b0U(a,b,c){return new A.Vy(b,c,$,$,$,a)}, +Vy:function Vy(a,b,c,d,e,f){var _=this +_.b=a +_.c=b +_.IG$=c +_.IH$=d +_.II$=e +_.a=f}, +a4i:function a4i(){}, +Vq:function Vq(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.$ti=d}, +yF:function yF(a,b){this.a=a +this.b=b}, +asb:function asb(a,b,c,d,e,f,g){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g}, +asv:function asv(){}, +asw:function asw(){}, +Vx:function Vx(){}, +Vs:function Vs(a){this.a=a}, +a4e:function a4e(a,b){this.a=a +this.b=b}, +a5t:function a5t(){}, +d1:function d1(){}, +a4f:function a4f(){}, +a4g:function a4g(){}, +a4h:function a4h(){}, +jN:function jN(a,b,c,d,e){var _=this +_.e=a +_.ou$=b +_.os$=c +_.ot$=d +_.n_$=e}, +kM:function kM(a,b,c,d,e){var _=this +_.e=a +_.ou$=b +_.os$=c +_.ot$=d +_.n_$=e}, +kN:function kN(a,b,c,d,e){var _=this +_.e=a +_.ou$=b +_.os$=c +_.ot$=d +_.n_$=e}, +kO:function kO(a,b,c,d,e,f,g){var _=this +_.e=a +_.f=b +_.r=c +_.ou$=d +_.os$=e +_.ot$=f +_.n_$=g}, +h0:function h0(a,b,c,d,e){var _=this +_.e=a +_.ou$=b +_.os$=c +_.ot$=d +_.n_$=e}, +a4b:function a4b(){}, +kP:function kP(a,b,c,d,e,f){var _=this +_.e=a +_.f=b +_.ou$=c +_.os$=d +_.ot$=e +_.n_$=f}, +fI:function fI(a,b,c,d,e,f,g){var _=this +_.e=a +_.f=b +_.r=c +_.ou$=d +_.os$=e +_.ot$=f +_.n_$=g}, +a4j:function a4j(){}, +pY:function pY(a,b,c,d,e,f){var _=this +_.e=a +_.f=b +_.r=$ +_.ou$=c +_.os$=d +_.ot$=e +_.n_$=f}, +Vt:function Vt(a,b,c,d,e,f,g){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g}, +asc:function asc(a,b,c){var _=this +_.a=a +_.b=b +_.c=c +_.d=null}, +Vu:function Vu(a){this.a=a}, +asj:function asj(a){this.a=a}, +ast:function ast(){}, +ash:function ash(a){this.a=a}, +asd:function asd(){}, +ase:function ase(){}, +asg:function asg(){}, +asf:function asf(){}, +asq:function asq(){}, +ask:function ask(){}, +asi:function asi(){}, +asl:function asl(){}, +asr:function asr(){}, +ass:function ass(){}, +asp:function asp(){}, +asn:function asn(){}, +asm:function asm(){}, +aso:function aso(){}, +aDJ:function aDJ(){}, +Nf:function Nf(a,b){this.a=a +this.$ti=b}, +eY:function eY(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.n_$=d}, +a4c:function a4c(){}, +a4d:function a4d(){}, +GK:function GK(){}, +Vv:function Vv(){}, +aEe(){var s=0,r=A.a1(t.H) +var $async$aEe=A.a2(function(a,b){if(a===1)return A.Z(b,r) +while(true)switch(s){case 0:s=2 +return A.a7(A.aDp(new A.aEf(),new A.aEg()),$async$aEe) +case 2:return A.a_(null,r)}}) +return A.a0($async$aEe,r)}, +aEg:function aEg(){}, +aEf:function aEf(){}, +aWc(a){a.ap(t.H5) +return null}, +aVS(){var s=$.aw.i(0,B.AK),r=s==null?null:t.Kb.a(s).$0() +return r==null?new A.AN(A.aS(t.Gf)):r}, +b8j(){var s=$.aw.i(0,B.AK) +return s==null?null:t.Kb.a(s).$0()}, +aYa(a){return $.aY9.i(0,a).gawm()}, +aRq(a){if(typeof dartPrint=="function"){dartPrint(a) +return}if(typeof console=="object"&&typeof console.log!="undefined"){console.log(a) +return}if(typeof print=="function"){print(a) +return}throw"Unable to print message: "+String(a)}, +aL8(a){return A.bM(a)}, +aKL(a){return a}, +aXY(a){return a}, +b0_(a){return a}, +v6(a){var s=u.R.charCodeAt(a>>>6)+(a&63),r=s&1,q=u.I.charCodeAt(s>>>1) +return q>>>4&-r|q&15&r-1}, +mn(a,b){var s=(a&1023)<<10|b&1023,r=u.R.charCodeAt(1024+(s>>>9))+(s&511),q=r&1,p=u.I.charCodeAt(r>>>1) +return p>>>4&-q|p&15&q-1}, +b6t(a,b,c,d){var s,r,q,p,o,n=A.A(d,c.h("v<0>")) +for(s=c.h("q<0>"),r=0;r<1;++r){q=a[r] +p=b.$1(q) +o=n.i(0,p) +if(o==null){o=A.a([],s) +n.n(0,p,o) +p=o}else p=o +J.eo(p,q)}return n}, +aLs(a,b,c){var s=A.V(a,!0,c) +B.b.dK(s,b) +return s}, +aXU(a){var s=J.ap(a.a),r=a.$ti +if(new A.m6(s,r.h("m6<1>")).q())return r.c.a(s.gJ(s)) +return null}, +aLt(a,b,c,d){return new A.fn(A.aXV(a,b,c,d),d.h("fn<0>"))}, +aXV(a,b,c,d){return function(){var s=a,r=b,q=c,p=d +var o=0,n=1,m,l,k,j +return function $async$aLt(e,f,g){if(f===1){m=g +o=n}while(true)switch(o){case 0:l=0,k=0 +case 2:if(!(k<5)){o=4 +break}j=l+1 +o=5 +return e.b=r.$2(l,s[k]),1 +case 5:case 3:++k,l=j +o=2 +break +case 4:return 0 +case 1:return e.c=m,3}}}}, +aKU(){var s=$.aKT +return s==null?$.aKT=!1:s}, +aFP(a){var s,r,q,p,o=t.A,n=A.a([A.a([],o)],t.zS) +for(s=a.length,r=0;r>>24&255)/255===0){s=a.a.a +if((s.gl(s)>>>24&255)/255===0){s=a.b.a +if((s.gl(s)>>>24&255)/255===0){s=a.c.a +s=(s.gl(s)>>>24&255)/255===0}else s=!1}else s=!1}else s=!1 +if(s)return!1 +return!0}, +a9B(a,b){var s=1-b/100 +return A.C(a.gl(a)>>>24&255,B.c.an((a.gl(a)>>>16&255)*s),B.c.an((a.gl(a)>>>8&255)*s),B.c.an((a.gl(a)&255)*s))}, +aKY(a){var s=a.a,r=s?a.b.d.b:0,q=s?a.b.a.b:0,p=s?a.b.b.b:0 +return new A.aG(r,q,p,s?a.b.c.b:0)}, +aFQ(a){var s=a.a,r=s?A.aou(a.b):0,q=s?A.aou(a.c):0,p=s?A.aou(a.d):0 +return new A.aG(r,q,p,s?A.aou(a.e):0)}, +aYR(a){var s +if(a.gbs()===0){a.sbU(null) +s=a.gM(a).a +a.sM(0,A.C(0,s>>>16&255,s>>>8&255,s&255))}}, +aGx(a,b,c,d){if(c!=null){a.sM(0,B.k) +a.sbU(c.iX(0,d))}else{a.sM(0,b==null?B.n:b) +a.sbU(null)}}, +aou(a){var s=a.b!=null&&a.a!==0?0+a.a:0,r=a.c +return r.a&&r.c!==0?s+r.c:s}, +eK(a,b,c,d,e){var s,r,q,p=a!=null +if(p&&b!=null&&a.length===b.length){s=a.length +r=J.rP(s,e) +for(q=0;q=a.length?b[q]:a[q] +r[q]=d.$3(p,b[q],c)}return r}else return b}, +b6P(a,b,c){var s +if(a!==b)if(isNaN(a))s=isNaN(b) +else s=!1 +else s=!0 +if(s)return a +if(a==1/0||a==-1/0||b==1/0||b==-1/0)return b +return a*(1-c)+b*c}, +b6R(a,b,c){return B.c.an(a+(b-a)*c)}, +aIu(a,b,c){var s,r,q,p,o,n,m,l,k,j,i=a.length +if(b.length!==i){s=J.rP(i,t.i) +for(r=0;r>>24&255,B.c.an((r>>>16&255)*s),B.c.an((r>>>8&255)*s),B.c.an((r&255)*s))}, +aK2(a,b){var s=b/100,r=a.a,q=r>>>16&255,p=r>>>8&255,o=r&255 +return A.C(r>>>24&255,B.c.an(q+(255-q)*s),B.c.an(p+(255-p)*s),B.c.an(o+(255-o)*s))}, +aDw(a,b,c,d,e){return A.b5l(a,b,c,d,e,e)}, +b5l(a,b,c,d,e,f){var s=0,r=A.a1(f),q,p +var $async$aDw=A.a2(function(g,h){if(g===1)return A.Z(h,r) +while(true)switch(s){case 0:p=A.hD(null,t.P) +s=3 +return A.a7(p,$async$aDw) +case 3:q=a.$1(b) +s=1 +break +case 1:return A.a_(q,r)}}) +return A.a0($async$aDw,r)}, +a5M(a,b){var s +if(a==null)return b==null +if(b==null||a.gu(a)!==b.gu(b))return!1 +if(a===b)return!0 +for(s=a.gab(a);s.q();)if(!b.p(0,s.gJ(s)))return!1 +return!0}, +dn(a,b){var s,r,q +if(a==null)return b==null +if(b==null||J.bF(a)!==J.bF(b))return!1 +if(a===b)return!0 +for(s=J.aF(a),r=J.aF(b),q=0;q1e6){if(p.b==null)p.b=$.RQ.$0() +p.it(0) +$.a5u=0}while(!0){if($.a5u<12288){p=$.a5Y() +p=!p.ga7(p)}else p=q +if(!p)break +s=$.a5Y().wx() +$.a5u=$.a5u+s.length +r=$.aRr +if(r==null)A.aRq(s) +else r.$1(s)}q=$.a5Y() +if(!q.ga7(q)){$.aHP=!0 +$.a5u=0 +A.cy(B.h4,A.b7B()) +if($.aCD==null)$.aCD=new A.bI(new A.aD($.aw,t.d),t.gR)}else{$.aIZ().nC(0) +q=$.aCD +if(q!=null)q.iV(0) +$.aCD=null}}, +acF(a){var s=0,r=A.a1(t.H),q +var $async$acF=A.a2(function(b,c){if(b===1)return A.Z(c,r) +while(true)$async$outer:switch(s){case 0:a.ga_().xl(B.AO) +switch(A.ak(a).r.a){case 0:case 1:q=A.Uo(B.Z7) +s=1 +break $async$outer +case 2:case 3:case 4:case 5:q=A.d5(null,t.H) +s=1 +break $async$outer}case 1:return A.a_(q,r)}}) +return A.a0($async$acF,r)}, +aKX(a){a.ga_().xl(B.SM) +switch(A.ak(a).r.a){case 0:case 1:return A.aeq() +case 2:case 3:case 4:case 5:return A.d5(null,t.H)}}, +b7z(a,b,c,d,e){var s,r,q=d.b,p=q+e,o=a.b,n=c.b-10,m=p+o<=n +o=q-e-o +s=(o>=10===m?b:m)?Math.min(p,n):Math.max(o,10) +q=a.a +r=c.a-q +return new A.k(r<=20?r/2:A.O(d.a-q/2,10,r-10),s)}, +ahB(a){var s=a.a +if(s[0]===1&&s[1]===0&&s[2]===0&&s[3]===0&&s[4]===0&&s[5]===1&&s[6]===0&&s[7]===0&&s[8]===0&&s[9]===0&&s[10]===1&&s[11]===0&&s[14]===0&&s[15]===1)return new A.k(s[12],s[13]) +return null}, +aGm(a,b){var s,r,q +if(a==b)return!0 +if(a==null){b.toString +return A.Qm(b)}if(b==null)return A.Qm(a) +s=a.a +r=s[0] +q=b.a +return r===q[0]&&s[1]===q[1]&&s[2]===q[2]&&s[3]===q[3]&&s[4]===q[4]&&s[5]===q[5]&&s[6]===q[6]&&s[7]===q[7]&&s[8]===q[8]&&s[9]===q[9]&&s[10]===q[10]&&s[11]===q[11]&&s[12]===q[12]&&s[13]===q[13]&&s[14]===q[14]&&s[15]===q[15]}, +Qm(a){var s=a.a +return s[0]===1&&s[1]===0&&s[2]===0&&s[3]===0&&s[4]===0&&s[5]===1&&s[6]===0&&s[7]===0&&s[8]===0&&s[9]===0&&s[10]===1&&s[11]===0&&s[12]===0&&s[13]===0&&s[14]===0&&s[15]===1}, +c7(a,b){var s=a.a,r=b.a,q=b.b,p=s[0]*r+s[4]*q+s[12],o=s[1]*r+s[5]*q+s[13],n=s[3]*r+s[7]*q+s[15] +if(n===1)return new A.k(p,o) +else return new A.k(p/n,o/n)}, +ahA(a,b,c,d,e){var s,r=e?1:1/(a[3]*b+a[7]*c+a[15]),q=(a[0]*b+a[4]*c+a[12])*r,p=(a[1]*b+a[5]*c+a[13])*r +if(d){s=$.aEK() +s[2]=q +s[0]=q +s[3]=p +s[1]=p}else{s=$.aEK() +if(qs[2])s[2]=q +if(p>s[3])s[3]=p}}, +hs(b1,b2){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,a2,a3,a4=b1.a,a5=b2.a,a6=b2.b,a7=b2.c,a8=a7-a5,a9=b2.d,b0=a9-a6 +if(!isFinite(a8)||!isFinite(b0)){s=a4[3]===0&&a4[7]===0&&a4[15]===1 +A.ahA(a4,a5,a6,!0,s) +A.ahA(a4,a7,a6,!1,s) +A.ahA(a4,a5,a9,!1,s) +A.ahA(a4,a7,a9,!1,s) +a7=$.aEK() +return new A.w(a7[0],a7[1],a7[2],a7[3])}a7=a4[0] +r=a7*a8 +a9=a4[4] +q=a9*b0 +p=a7*a5+a9*a6+a4[12] +a9=a4[1] +o=a9*a8 +a7=a4[5] +n=a7*b0 +m=a9*a5+a7*a6+a4[13] +a7=a4[3] +if(a7===0&&a4[7]===0&&a4[15]===1){l=p+r +if(r<0)k=p +else{k=l +l=p}if(q<0)l+=q +else k+=q +j=m+o +if(o<0)i=m +else{i=j +j=m}if(n<0)j+=n +else i+=n +return new A.w(l,j,k,i)}else{a9=a4[7] +h=a9*b0 +g=a7*a5+a9*a6+a4[15] +f=p/g +e=m/g +a9=p+r +a7=g+a7*a8 +d=a9/a7 +c=m+o +b=c/a7 +a=g+h +a0=(p+q)/a +a1=(m+n)/a +a7+=h +a2=(a9+q)/a7 +a3=(c+n)/a7 +return new A.w(A.aLV(f,d,a0,a2),A.aLV(e,b,a1,a3),A.aLU(f,d,a0,a2),A.aLU(e,b,a1,a3))}}, +aLV(a,b,c,d){var s=ab?a:b,r=c>d?c:d +return s>r?s:r}, +aLX(a,b){var s +if(A.Qm(a))return b +s=new A.bd(new Float64Array(16)) +s.aW(a) +s.fL(s) +return A.hs(s,b)}, +aLW(a){var s,r=new A.bd(new Float64Array(16)) +r.de() +s=new A.kI(new Float64Array(4)) +s.xq(0,0,0,a.a) +r.Dg(0,s) +s=new A.kI(new Float64Array(4)) +s.xq(0,0,0,a.b) +r.Dg(1,s) +return r}, +Ll(a,b,c){if(a==null||!1)return a===b +return a>b-c&&a").b(s))return s +return new A.bK(s,e.h("bK<0>"))}, +b7Q(a){var s=$.b4s +if(s!=null)s.b3(0) +$.b3e=!1 +return}, +i3(a){var s=null +return A.b6s(s,s,s,s,s,s,s,"Assistant",s,s,s,s,A.aY([B.Nv,new A.lo("f28488ab014bdfd98c208e1333f017e7df733170a47454b4e06bdcc9634f1048",47472),B.Nw,new A.lo("e84f598d0f695a2eff4274bb1c0ee3161417631009d2d255bcf350dda0dd41a3",47700),B.Nx,new A.lo("74eed00eb58c95d62107019c6db7cbc3e82b61c32dbcfa41b73804fb01392bc7",47692),B.Ny,new A.lo("571721e6f096baff44cf55b1c08ba2f51774bdfceffae28ed35dcb3cb9b84c8c",47640),B.Nz,new A.lo("48513533bec634e8f6ef4bae2a8b4d6238c72a6327c2396c3d33cb8e5e78c63d",47716),B.NA,new A.lo("d794fc350a5e9a95a7d3dcd8b0f2e73875a31af117132823f18b8795e614a31a",47652),B.NB,new A.lo("4bfece19aadcac1e47b9eb19c30b618f3813e63326b81358ae7ce3c805596332",47532)],t.gm,t.Ks),s,s,s,s,s,s,a,s)}, +aYT(a){var s=A.i3(a.a),r=A.i3(a.b),q=A.i3(a.c),p=A.i3(a.d),o=A.i3(a.e),n=A.i3(a.f),m=A.i3(a.r),l=A.i3(a.w),k=A.i3(a.x) +return A.ar0(A.i3(a.y),A.i3(a.z),A.i3(a.Q),s,r,q,p,o,n,A.i3(a.as),A.i3(a.at),A.i3(a.ax),m,l,k)}, +b61(a){var s +if(a==null)return B.bz +s=A.aX9(a) +return s==null?B.bz:s}, +b8d(a){return a}, +b8a(a){return a}, +b8i(a,b,c){var s,r,q,p +try{q=c.$0() +return q}catch(p){q=A.ax(p) +if(q instanceof A.xY){s=q +throw A.c(A.b_Q("Invalid "+a+": "+s.a,s.b,J.aJm(s)))}else if(t.bE.b(q)){r=q +throw A.c(A.cc("Invalid "+a+' "'+b+'": '+J.aUK(r),J.aJm(r),J.aUL(r)))}else throw p}}, +aQt(){var s,r,q,p,o=null +try{o=A.aHf()}catch(s){if(t.VI.b(A.ax(s))){r=$.aCC +if(r!=null)return r +throw s}else throw s}if(J.d(o,$.aPf)){r=$.aCC +r.toString +return r}$.aPf=o +if($.aIQ()===$.Lt())r=$.aCC=o.U(".").k(0) +else{q=o.Kw() +p=q.length-1 +r=$.aCC=p===0?q:B.d.P(q,0,p)}return r}, +aQP(a){var s +if(!(a>=65&&a<=90))s=a>=97&&a<=122 +else s=!0 +return s}, +aQQ(a,b){var s=a.length,r=b+2 +if(s"),p=A.aS(q) +for(;q.b(a);){if(b.ai(0,a)){q=b.i(0,a) +q.toString +return c.h("au<0>").a(q)}else if(!p.D(0,a))throw A.c(A.Q("Recursive references detected: "+p.k(0))) +a=a.$ti.h("au<1>").a(A.aMv(a.a,a.b,null))}for(q=A.cX(p,p.r,p.$ti.c),s=q.$ti.c;q.q();){r=q.d +b.n(0,r==null?s.a(r):r,a)}return a}, +b4z(a){switch(a){case 8:return"\\b" +case 9:return"\\t" +case 10:return"\\n" +case 11:return"\\v" +case 12:return"\\f" +case 13:return"\\r" +case 34:return'\\"' +case 39:return"\\'" +case 92:return"\\\\"}if(a<32)return"\\x"+B.d.lO(B.f.iv(a,16),2,"0") +return A.dK(a)}, +b7N(a,b){return a}, +b7O(a,b){return b}, +b7M(a,b){return a.b<=b.b?b:a}, +b6G(a){var s,r,q,p +if(a.gu(a)===0)return!0 +s=a.gL(a) +for(r=A.eD(a,1,null,a.$ti.h("af.E")),q=r.$ti,r=new A.bu(r,r.gu(r),q.h("bu")),q=q.h("af.E");r.q();){p=r.d +if(!J.d(p==null?q.a(p):p,s))return!1}return!0}, +b7F(a,b){var s=B.b.cS(a,null) +if(s<0)throw A.c(A.bC(A.h(a)+" contains no null elements.",null)) +a[s]=b}, +aRw(a,b){var s=B.b.cS(a,b) +if(s<0)throw A.c(A.bC(A.h(a)+" contains no elements matching "+b.k(0)+".",null)) +a[s]=null}, +b5w(a,b){var s,r,q,p +for(s=new A.fu(a),r=t.Hz,s=new A.bu(s,s.gu(s),r.h("bu")),r=r.h("B.E"),q=0;s.q();){p=s.d +if((p==null?r.a(p):p)===b)++q}return q}, +aDP(a,b,c){var s,r,q +if(b.length===0)for(s=0;!0;){r=B.d.fu(a,"\n",s) +if(r===-1)return a.length-s>=c?s:null +if(r-s>=c)return s +s=r+1}r=B.d.cS(a,b) +for(;r!==-1;){q=r===0?0:B.d.Bj(a,"\n",r-1)+1 +if(c===r-q)return q +r=B.d.fu(a,b,r+1)}return null}, +b5r(a){switch(a.a){case 0:return B.le +case 2:return B.zl +case 1:return B.zk +case 3:return B.W9 +case 4:return B.zm}}, +aE9(a){var s=0,r=A.a1(t.y),q +var $async$aE9=A.a2(function(b,c){if(b===1)return A.Z(c,r) +while(true)switch(s){case 0:q=$.aIS().w_(a.k(0),new A.PN(A.b5r(B.OD),new A.Pu(!0,!0,B.d5),null)) +s=1 +break +case 1:return A.a_(q,r)}}) +return A.a0($async$aE9,r)}, +aDt(a){var s=0,r=A.a1(t.y),q +var $async$aDt=A.a2(function(b,c){if(b===1)return A.Z(c,r) +while(true)switch(s){case 0:q=$.aIS().UR(a.k(0)) +s=1 +break +case 1:return A.a_(q,r)}}) +return A.a0($async$aDt,r)}, +b8h(){var s,r,q,p,o=$.aCl +if(o!=null)return o +o=$.W() +q=o.qD() +o.qC(q,null) +s=q.mR() +r=null +try{r=s.wG(1,1) +$.aCl=!1}catch(p){if(t.fS.b(A.ax(p)))$.aCl=!0 +else throw p}finally{o=r +if(o!=null)o.m() +s.m()}o=$.aCl +o.toString +return o}, +b8b(a){var s,r,q,p=a.getUint16(0,!1)&65535,o=p&32768,n=p>>>10&31,m=p&1023 +if(n===0){if(m!==0){a.setUint32(0,1056964608+m,!1) +s=a.getFloat32(0,!1)-$.aS3().getFloat32(0,!1) +return o===0?s:-s}r=0 +q=0}else{q=m<<13 +if(n===31){if(q!==0)q|=4194304 +r=255}else r=n-15+127}a.setUint32(0,(o<<16|r<<23|q)>>>0,!1) +return a.getFloat32(0,!1)}, +fp(a,b){if(a==null)return null +a=B.d.fb(B.d.nn(B.d.nn(B.d.nn(B.d.nn(B.d.nn(a,"rem",""),"em",""),"ex",""),"px",""),"pt","")) +if(b)return A.RP(a) +return A.zQ(a)}, +dX(a,b,c){var s,r,q=null,p=a==null,o=p?q:B.d.p(a,"pt") +if(o===!0)s=1.3333333333333333 +else{o=p?q:B.d.p(a,"rem") +if(o===!0)s=b.b +else{o=p?q:B.d.p(a,"em") +if(o===!0)s=b.b +else{p=p?q:B.d.p(a,"ex") +s=p===!0?b.c:1}}}r=A.fp(a,c) +return r!=null?r*s:q}, +b4i(a){var s,r,q,p,o,n,m,l=A.a([],t.n) +for(s=a.length,r="",q=0;q0&&a[q-1]==="e" +if(o&&!n){if(r!==""){m=A.fp(r,!1) +m.toString +l.push(m)}r=p==="-"?"-":""}else{if(p===".")if(A.aEy(r,".",0)){m=A.fp(r,!1) +m.toString +l.push(m) +r=""}r+=p}}if(r.length!==0){s=A.fp(r,!1) +s.toString +l.push(s)}return l}, +a5K(a){var s,r,q,p,o,n,m,l,k +if(a==null||a==="")return null +s=$.aUd() +if(!s.b.test(a))throw A.c(A.Q("illegal or unsupported transform: "+a)) +s=$.aUc().lm(0,a) +s=A.V(s,!0,A.o(s).h("n.E")) +r=A.S(s).h("cO<1>") +q=new A.cO(s,r) +for(s=new A.bu(q,q.gu(q),r.h("bu")),r=r.h("af.E"),p=B.aL;s.q();){o=s.d +if(o==null)o=r.a(o) +n=o.pj(1) +n.toString +m=B.d.fb(n) +o=o.pj(2) +o.toString +l=A.b4i(B.d.fb(o)) +k=B.To.i(0,m) +if(k==null)throw A.c(A.Q("Unsupported transform: "+m)) +p=k.$2(l,p)}return p}, +b4c(a,b){return A.mr(a[0],a[1],a[2],a[3],a[4],a[5],null).eS(b)}, +b4f(a,b){return A.mr(1,0,Math.tan(B.b.gL(a)),1,0,0,null).eS(b)}, +b4g(a,b){return A.mr(1,Math.tan(B.b.gL(a)),0,1,0,0,null).eS(b)}, +b4h(a,b){var s=a.length<2?0:a[1] +return A.mr(1,0,0,1,B.b.gL(a),s,null).eS(b)}, +b4e(a,b){var s=a[0] +return A.mr(s,0,0,a.length<2?s:a[1],0,0,null).eS(b)}, +b4d(a,b){var s,r,q=B.aL.avg(a[0]*3.141592653589793/180),p=a.length +if(p>1){s=a[1] +r=p===3?a[2]:s +return A.mr(1,0,0,1,s,r,null).eS(q).wL(-s,-r).eS(b)}else return q.eS(b)}, +aRe(a){if(a==="inherit"||a==null)return null +return a!=="evenodd"?B.bI:B.Vl}, +od(a){var s +if(A.aQT(a))return A.aRd(a,1) +else{s=A.fp(a,!1) +s.toString +return s}}, +aRd(a,b){var s=A.fp(B.d.P(a,0,a.length-1),!1) +s.toString +return s/100*b}, +aQT(a){var s=B.d.fs(a,"%") +return s}, +aRc(a,b,c){var s,r,q +if(c!=null)if(b==="width")s=c.r +else s=b==="height"?c.w:null +else s=null +if(B.d.p(a,"%")){r=A.zQ(B.d.P(a,0,a.length-1)) +s.toString +q=r/100*s}else if(B.d.bz(a,"0.")){r=A.zQ(a) +s.toString +q=r*s}else q=a.length!==0?A.zQ(a):null +return q}, +jc(a,b){var s +if(a==null)return b==null +if(b==null||a.length!==b.length)return!1 +if(a===b)return!0 +for(s=0;s")) +g.b2(i,0,2,h.h("B.E")) +B.b.E(j,g) +c4.a.push(l) +l=k.length +c3.setUint32(0,l,!0) +g=c4.a +j=c4.d +i=A.as(j) +h=new A.ac(j,0,4,i.h("ac")) +h.b2(j,0,4,i.h("B.E")) +B.b.E(g,h) +h=c4.a +g=k.buffer +k=k.byteOffset +l=new Uint8Array(g,k,l) +B.b.E(h,l)}for(p=c5.c,o=p.length,n=0;l=p.length,n")) +g.b2(i,0,4,h.h("B.E")) +B.b.E(o,g) +c4.a.push(k.a) +c3.setUint16(0,j,!0) +k=c4.a +g=c4.d +o=A.as(g) +i=new A.ac(g,0,2,o.h("ac")) +i.b2(g,0,2,o.h("B.E")) +B.b.E(k,i) +c3.setUint16(0,b==null?c0:b,!0) +o=c4.a +k=c4.d +i=A.as(k) +h=new A.ac(k,0,2,i.h("ac")) +h.b2(k,0,2,i.h("B.E")) +B.b.E(o,h) +s.n(0,e,j)}if(c!=null){b=q.i(0,c.b) +o=c.a +k=c.c +k=k==null?b9:k.a +if(k==null)k=0 +j=c.d +j=j==null?b9:j.a +if(j==null)j=0 +i=f.a +h=c.e +if(h==null)h=4 +g=c.f +if(g==null)g=1 +c4.f0(B.Bz) +a=c4.e++ +c4.a.push(29) +c3.setUint32(0,o.a,!0) +o=c4.a +a0=c4.d +a1=A.as(a0) +a2=new A.ac(a0,0,4,a1.h("ac")) +a2.b2(a0,0,4,a1.h("B.E")) +B.b.E(o,a2) +c4.a.push(k) +c4.a.push(j) +c4.a.push(i.a) +c3.setFloat32(0,h,!0) +h=c4.a +i=c4.d +o=A.as(i) +k=new A.ac(i,0,4,o.h("ac")) +k.b2(i,0,4,o.h("B.E")) +B.b.E(h,k) +c3.setFloat32(0,g,!0) +g=c4.a +k=c4.d +o=A.as(k) +j=new A.ac(k,0,4,o.h("ac")) +j.b2(k,0,4,o.h("B.E")) +B.b.E(g,j) +c3.setUint16(0,a,!0) +j=c4.a +g=c4.d +o=A.as(g) +k=new A.ac(g,0,2,o.h("ac")) +k.b2(g,0,2,o.h("B.E")) +B.b.E(j,k) +c3.setUint16(0,b==null?c0:b,!0) +o=c4.a +k=c4.d +j=A.as(k) +i=new A.ac(k,0,2,j.h("ac")) +i.b2(k,0,2,j.h("B.E")) +B.b.E(o,i) +r.n(0,e,a)}++e}a3=A.A(c2,c2) +for(c2=c5.d,p=c2.length,o=t.ZC,l=t.n,k=t.JO,j=t.wd,a4=0,n=0;n")) +a2.b2(a0,0,2,a1.h("B.E")) +B.b.E(g,a2) +a2=i.length +c3.setUint32(0,a2,!0) +g=c4.a +a1=c4.d +a0=A.as(a1) +b0=new A.ac(a1,0,4,a0.h("ac")) +b0.b2(a1,0,4,a0.h("B.E")) +B.b.E(g,b0) +b0=c4.a +g=i.buffer +i=i.byteOffset +i=new Uint8Array(g,i,a2) +B.b.E(b0,i) +i=h.length +c3.setUint32(0,i,!0) +g=c4.a +a0=c4.d +a1=A.as(a0) +a2=new A.ac(a0,0,4,a1.h("ac")) +a2.b2(a0,0,4,a1.h("B.E")) +B.b.E(g,a2) +g=c4.a +b1=B.f.bF(g.length,4) +if(b1!==0){a0=$.v9() +a1=4-b1 +a2=A.as(a0) +b0=new A.ac(a0,0,a1,a2.h("ac")) +b0.b2(a0,0,a1,a2.h("B.E")) +B.b.E(g,b0)}g=c4.a +a0=h.buffer +h=h.byteOffset +i=new Uint8Array(a0,h,4*i) +B.b.E(g,i) +a3.n(0,a4,a);++a4}for(c2=c5.y,p=c2.length,n=0;n")) +a1.b2(a,0,2,a0.h("B.E")) +B.b.E(g,a1) +c3.setFloat32(0,o==null?0/0:o,!0) +o=c4.a +g=c4.d +a=A.as(g) +a0=new A.ac(g,0,4,a.h("ac")) +a0.b2(g,0,4,a.h("B.E")) +B.b.E(o,a0) +c3.setFloat32(0,l==null?0/0:l,!0) +o=c4.a +l=c4.d +g=A.as(l) +a=new A.ac(l,0,4,g.h("ac")) +a.b2(l,0,4,g.h("B.E")) +B.b.E(o,a) +c3.setFloat32(0,k==null?0/0:k,!0) +o=c4.a +l=c4.d +k=A.as(l) +g=new A.ac(l,0,4,k.h("ac")) +g.b2(l,0,4,k.h("B.E")) +B.b.E(o,g) +c3.setFloat32(0,j==null?0/0:j,!0) +o=c4.a +l=c4.d +k=A.as(l) +j=new A.ac(l,0,4,k.h("ac")) +j.b2(l,0,4,k.h("B.E")) +B.b.E(o,j) +o=i?1:0 +c4.a.push(o) +o=c4.a +if(h!=null){l=h.length +o.push(l) +o=c4.a +b1=B.f.bF(o.length,8) +if(b1!==0){k=$.v9() +j=8-b1 +i=A.as(k) +g=new A.ac(k,0,j,i.h("ac")) +g.b2(k,0,j,i.h("B.E")) +B.b.E(o,g)}o=c4.a +k=h.buffer +h=h.byteOffset +l=new Uint8Array(k,h,8*l) +B.b.E(o,l)}else o.push(0)}for(c2=c5.f,p=c2.length,n=0;n")) +b0.b2(a1,0,2,a2.h("B.E")) +B.b.E(a0,b0) +c3.setFloat32(0,k,!0) +k=c4.a +b0=c4.d +a0=A.as(b0) +a1=new A.ac(b0,0,4,a0.h("ac")) +a1.b2(b0,0,4,a0.h("B.E")) +B.b.E(k,a1) +c3.setFloat32(0,i,!0) +i=c4.a +a1=c4.d +k=A.as(a1) +a0=new A.ac(a1,0,4,k.h("ac")) +a0.b2(a1,0,4,k.h("B.E")) +B.b.E(i,a0) +c4.a.push(j.a) +c4.a.push(h.a) +c4.a.push(g.a) +c3.setUint32(0,a.a,!0) +a=c4.a +g=c4.d +k=A.as(g) +j=new A.ac(g,0,4,k.h("ac")) +j.b2(g,0,4,k.h("B.E")) +B.b.E(a,j) +if(l!=null){b4=B.ca.cp(l) +l=b4.length +c3.setUint16(0,l,!0) +k=c4.a +j=c4.d +i=A.as(j) +h=new A.ac(j,0,2,i.h("ac")) +h.b2(j,0,2,i.h("B.E")) +B.b.E(k,h) +h=c4.a +k=b4.buffer +i=b4.byteOffset +l=new Uint8Array(k,i,l) +B.b.E(h,l)}else{c3.setUint16(0,0,!0) +l=c4.a +k=c4.d +j=A.as(k) +i=new A.ac(k,0,2,j.h("ac")) +i.b2(k,0,2,j.h("B.E")) +B.b.E(l,i)}b4=B.ca.cp(o) +o=b4.length +c3.setUint16(0,o,!0) +l=c4.a +k=c4.d +j=A.as(k) +i=new A.ac(k,0,2,j.h("ac")) +i.b2(k,0,2,j.h("B.E")) +B.b.E(l,i) +i=c4.a +l=b4.buffer +j=b4.byteOffset +o=new Uint8Array(l,j,o) +B.b.E(i,o)}for(c2=c5.z,p=c2.length,o=c5.w,l=c5.x,k=c5.e,n=0;n")) +a0.b2(g,0,2,a.h("B.E")) +B.b.E(j,a0) +c3.setUint16(0,i.gu(i),!0) +a0=c4.a +j=c4.d +g=A.as(j) +a=new A.ac(j,0,2,g.h("ac")) +a.b2(j,0,2,g.h("B.E")) +B.b.E(a0,a) +a=c4.a +b1=B.f.bF(a.length,4) +if(b1!==0){j=$.v9() +g=4-b1 +a0=A.as(j) +a1=new A.ac(j,0,g,a0.h("ac")) +a1.b2(j,0,g,a0.h("B.E")) +B.b.E(a,a1)}j=c4.a +g=i.buffer +a=i.byteOffset +i=i.gu(i) +i=new Uint8Array(g,a,4*i) +B.b.E(j,i) +c3.setUint16(0,h.gu(h),!0) +j=c4.a +i=c4.d +g=A.as(i) +a=new A.ac(i,0,2,g.h("ac")) +a.b2(i,0,2,g.h("B.E")) +B.b.E(j,a) +a=c4.a +b1=B.f.bF(a.length,2) +if(b1!==0){j=$.v9() +i=2-b1 +g=A.as(j) +a0=new A.ac(j,0,i,g.h("ac")) +a0.b2(j,0,i,g.h("B.E")) +B.b.E(a,a0)}j=c4.a +i=h.buffer +g=h.byteOffset +h=h.gu(h) +i=new Uint8Array(i,g,2*h) +B.b.E(j,i) +break +case 2:j=s.i(0,a9.d) +j.toString +c4.f0(B.c8) +c4.lf() +c4.a.push(37) +c3.setUint16(0,j,!0) +j=c4.a +i=c4.d +h=A.as(i) +g=new A.ac(i,0,2,h.h("ac")) +g.b2(i,0,2,h.h("B.E")) +B.b.E(j,g) +break +case 3:c4.f0(B.c8) +c4.lf() +c4.a.push(38) +break +case 4:j=a3.i(0,a9.c) +j.toString +c4.f0(B.c8) +c4.lf() +c4.a.push(42) +c3.setUint16(0,j,!0) +j=c4.a +i=c4.d +h=A.as(i) +g=new A.ac(i,0,2,h.h("ac")) +g.b2(i,0,2,h.h("B.E")) +B.b.E(j,g) +break +case 5:c4.f0(B.c8) +c4.lf() +c4.a.push(43) +break +case 8:j=a9.f +j.toString +b6=l[j] +j=b6.a +i=b6.b +h=b6.c +g=b6.d +a=b6.e.pc() +c4.f0(B.c8) +a0=c4.z++ +c4.a.push(49) +c3.setUint16(0,a0,!0) +a0=c4.a +a1=c4.d +a2=A.as(a1) +b0=new A.ac(a1,0,2,a2.h("ac")) +b0.b2(a1,0,2,a2.h("B.E")) +B.b.E(a0,b0) +c3.setFloat32(0,j,!0) +j=c4.a +b0=c4.d +a0=A.as(b0) +a1=new A.ac(b0,0,4,a0.h("ac")) +a1.b2(b0,0,4,a0.h("B.E")) +B.b.E(j,a1) +c3.setFloat32(0,i,!0) +i=c4.a +a1=c4.d +j=A.as(a1) +a0=new A.ac(a1,0,4,j.h("ac")) +a0.b2(a1,0,4,j.h("B.E")) +B.b.E(i,a0) +c3.setFloat32(0,h,!0) +h=c4.a +a0=c4.d +j=A.as(a0) +i=new A.ac(a0,0,4,j.h("ac")) +i.b2(a0,0,4,j.h("B.E")) +B.b.E(h,i) +c3.setFloat32(0,g,!0) +g=c4.a +i=c4.d +j=A.as(i) +h=new A.ac(i,0,4,j.h("ac")) +h.b2(i,0,4,j.h("B.E")) +B.b.E(g,h) +j=a.length +c4.a.push(j) +i=c4.a +b1=B.f.bF(i.length,8) +if(b1!==0){h=$.v9() +g=8-b1 +a0=A.as(h) +a1=new A.ac(h,0,g,a0.h("ac")) +a1.b2(h,0,g,a0.h("B.E")) +B.b.E(i,a1)}i=c4.a +h=a.buffer +a=a.byteOffset +j=new Uint8Array(h,a,8*j) +B.b.E(i,j) +break +case 9:j=a9.c +j.toString +c4.f0(B.c8) +c4.lf() +c4.a.push(51) +c3.setUint16(0,j,!0) +j=c4.a +i=c4.d +h=A.as(i) +g=new A.ac(i,0,2,h.h("ac")) +g.b2(i,0,2,h.h("B.E")) +B.b.E(j,g) +break +case 6:j=a9.c +j.toString +i=a9.d +h=s.i(0,i) +i=r.i(0,i) +g=a9.e +c4.f0(B.c8) +c4.lf() +c4.a.push(44) +c3.setUint16(0,j,!0) +j=c4.a +a=c4.d +a0=A.as(a) +a1=new A.ac(a,0,2,a0.h("ac")) +a1.b2(a,0,2,a0.h("B.E")) +B.b.E(j,a1) +c3.setUint16(0,h==null?c0:h,!0) +j=c4.a +h=c4.d +a=A.as(h) +a0=new A.ac(h,0,2,a.h("ac")) +a0.b2(h,0,2,a.h("B.E")) +B.b.E(j,a0) +c3.setUint16(0,i==null?c0:i,!0) +j=c4.a +i=c4.d +h=A.as(i) +a=new A.ac(i,0,2,h.h("ac")) +a.b2(i,0,2,h.h("B.E")) +B.b.E(j,a) +c3.setUint16(0,g==null?c0:g,!0) +j=c4.a +i=c4.d +h=A.as(i) +g=new A.ac(i,0,2,h.h("ac")) +g.b2(i,0,2,h.h("B.E")) +B.b.E(j,g) +break +case 7:j=a9.c +j.toString +b7=o[j] +j=b7.a +i=b7.b +h=i.a +g=i.b +a=b7.c +a=a==null?b9:a.pc() +c4.f0(B.c8) +c4.lf() +c4.a.push(47) +c3.setUint16(0,j,!0) +j=c4.a +a0=c4.d +a1=A.as(a0) +a2=new A.ac(a0,0,2,a1.h("ac")) +a2.b2(a0,0,2,a1.h("B.E")) +B.b.E(j,a2) +c3.setFloat32(0,h,!0) +a2=c4.a +j=c4.d +a0=A.as(j) +a1=new A.ac(j,0,4,a0.h("ac")) +a1.b2(j,0,4,a0.h("B.E")) +B.b.E(a2,a1) +c3.setFloat32(0,g,!0) +a1=c4.a +a2=c4.d +j=A.as(a2) +a0=new A.ac(a2,0,4,j.h("ac")) +a0.b2(a2,0,4,j.h("B.E")) +B.b.E(a1,a0) +c3.setFloat32(0,i.c-h,!0) +h=c4.a +a0=c4.d +j=A.as(a0) +a1=new A.ac(a0,0,4,j.h("ac")) +a1.b2(a0,0,4,j.h("B.E")) +B.b.E(h,a1) +c3.setFloat32(0,i.d-g,!0) +g=c4.a +i=c4.d +j=A.as(i) +h=new A.ac(i,0,4,j.h("ac")) +h.b2(i,0,4,j.h("B.E")) +B.b.E(g,h) +j=c4.a +if(a!=null){i=a.length +j.push(i) +j=c4.a +b1=B.f.bF(j.length,8) +if(b1!==0){h=$.v9() +g=8-b1 +a0=A.as(h) +a1=new A.ac(h,0,g,a0.h("ac")) +a1.b2(h,0,g,a0.h("B.E")) +B.b.E(j,a1)}j=c4.a +h=a.buffer +a=a.byteOffset +i=new Uint8Array(h,a,8*i) +B.b.E(j,i)}else j.push(0) +break}}if(c4.b)A.T(A.Q("done() must not be called more than once on the same VectorGraphicsBuffer.")) +b8=A.fC(new Uint8Array(A.em(c4.a)).buffer,0,b9) +c4.a=A.a([],c1) +c4.b=!0 +return A.dD(b8.buffer,0,b9)}},B={} +var w=[A,J,B] +var $={} +A.A3.prototype={ +sI_(a){var s,r,q,p=this +if(J.d(a,p.c))return +if(a==null){p.Ec() +p.c=null +return}s=p.a.$0() +r=a.a +q=s.a +if(rr){p.Ec() +p.b=A.cy(A.dp(0,r-q),p.gGC())}p.c=a}, +Ec(){var s=this.b +if(s!=null)s.b3(0) +this.b=null}, +ajm(){var s=this,r=s.a.$0(),q=s.c,p=r.a +q=q.a +if(p>=q){s.b=null +q=s.d +if(q!=null)q.$0()}else s.b=A.cy(A.dp(0,q-p),s.gGC())}} +A.a6r.prototype={ +ql(){var s=0,r=A.a1(t.H),q=this,p +var $async$ql=A.a2(function(a,b){if(a===1)return A.Z(b,r) +while(true)switch(s){case 0:s=2 +return A.a7(q.a.$0(),$async$ql) +case 2:p=q.b.$0() +s=3 +return A.a7(t.L0.b(p)?p:A.hD(p,t.z),$async$ql) +case 3:return A.a_(null,r)}}) +return A.a0($async$ql,r)}, +aux(){return A.aXp(new A.a6t(this),new A.a6u(this))}, +agI(){return A.aXo(new A.a6s(this))}} +A.a6t.prototype={ +$0(){var s=0,r=A.a1(t.e),q,p=this +var $async$$0=A.a2(function(a,b){if(a===1)return A.Z(b,r) +while(true)switch(s){case 0:s=3 +return A.a7(p.a.ql(),$async$$0) +case 3:q=t.e.a({}) +s=1 +break +case 1:return A.a_(q,r)}}) +return A.a0($async$$0,r)}, +$S:296} +A.a6u.prototype={ +$1(a){return this.a_C(a)}, +$0(){return this.$1(null)}, +a_C(a){var s=0,r=A.a1(t.e),q,p=this,o +var $async$$1=A.a2(function(b,c){if(b===1)return A.Z(c,r) +while(true)switch(s){case 0:o=p.a +s=3 +return A.a7(o.a.$1(a),$async$$1) +case 3:q=o.agI() +s=1 +break +case 1:return A.a_(q,r)}}) +return A.a0($async$$1,r)}, +$S:138} +A.a6s.prototype={ +$1(a){return this.a_B(a)}, +$0(){return this.$1(null)}, +a_B(a){var s=0,r=A.a1(t.e),q,p=this,o +var $async$$1=A.a2(function(b,c){if(b===1)return A.Z(c,r) +while(true)switch(s){case 0:o=p.a.b.$0() +s=3 +return A.a7(t.L0.b(o)?o:A.hD(o,t.z),$async$$1) +case 3:q=t.e.a({}) +s=1 +break +case 1:return A.a_(q,r)}}) +return A.a0($async$$1,r)}, +$S:138} +A.AO.prototype={ +I(){return"BrowserEngine."+this.b}} +A.nb.prototype={ +I(){return"OperatingSystem."+this.b}} +A.a8t.prototype={ +gaS(a){var s=this.d +if(s==null){this.O3() +s=this.d}s.toString +return s}, +gcL(){if(this.y==null)this.O3() +var s=this.e +s.toString +return s}, +O3(){var s,r,q,p,o,n,m,l,k=this,j=!1,i=null,h=k.y +if(h!=null){A.vY(h,0) +h=k.y +h.toString +A.vX(h,0) +k.y=null}h=k.x +if(h!=null&&h.length!==0){h.toString +s=B.b.fz(h,0) +k.y=s +i=s +j=!0 +r=!0}else{h=k.f +$.c4() +q=self.window.devicePixelRatio +if(q===0)q=1 +p=k.r +o=self.window.devicePixelRatio +if(o===0)o=1 +i=k.N_(h,p) +n=i +k.y=n +if(n==null){A.aRu() +i=k.N_(h,p)}n=i.style +A.x(n,"position","absolute") +A.x(n,"width",A.h(h/q)+"px") +A.x(n,"height",A.h(p/o)+"px") +r=!1}if(!J.d(k.z.lastChild,i))k.z.append(i) +try{if(j)i.style.removeProperty("z-index") +h=A.k7(i,"2d",null) +h.toString +k.d=t.e.a(h)}catch(m){}h=k.d +if(h==null){A.aRu() +h=A.k7(i,"2d",null) +h.toString +h=k.d=t.e.a(h)}q=k.as +k.e=new A.a9Q(h,k,q,B.bN,B.aG,B.dd) +l=k.gaS(k) +l.save();++k.Q +A.aKm(l,1,0,0,1,0,0) +if(r)l.clearRect(0,0,k.f*q,k.r*q) +$.c4() +h=self.window.devicePixelRatio +if(h===0)h=1 +p=self.window.devicePixelRatio +if(p===0)p=1 +l.scale(h*q,p*q) +k.ahb()}, +N_(a,b){var s=this.as +return A.b8g(B.c.dk(a*s),B.c.dk(b*s))}, +a0(a){var s,r,q,p,o,n=this +n.a50(0) +if(n.y!=null){s=n.d +if(s!=null)try{s.font=""}catch(q){r=A.ax(q) +if(!J.d(r.name,"NS_ERROR_FAILURE"))throw q}}if(n.y!=null){n.Gi() +n.e.it(0) +p=n.w +if(p==null)p=n.w=A.a([],t.J) +o=n.y +o.toString +p.push(o) +n.e=n.d=null}n.x=n.w +n.e=n.d=n.y=n.w=null}, +Rr(a,b,c,d){var s,r,q,p,o,n,m,l,k,j,i=this,h=i.gaS(i) +if(d!=null)for(s=d.length,r=i.as,q=t.Ci;a>>16&255,p>>>8&255,p&255).a)) +s.translate(-5e4,0) +l=new Float32Array(2) +$.cZ() +p=$.c4().d +if(p==null){p=self.window.devicePixelRatio +if(p===0)p=1}l[0]=5e4*p +p=i.b +p.c.ZZ(l) +k=l[0] +j=l[1] +l[1]=0 +l[0]=0 +p.c.ZZ(l) +A.aFF(s,k-l[0]) +A.aFG(s,j-l[1])}}, +m_(){var s=this,r=s.z +if((r==null?null:r.x)!=null){r=$.cz() +r=r===B.W||!1}else r=!1 +if(r)s.a.restore() +r=s.Q +if(r!=null){s.a.translate(-r.a,-r.b) +s.Q=null}}, +hi(a){var s=this.a +if(a===B.D)s.stroke() +else A.aaL(s,null)}, +it(a){var s,r=this,q=r.a +A.aaM(q,"") +s=q.fillStyle +r.r=s==null?null:s +A.aaN(q,"") +s=q.strokeStyle +r.w=s==null?null:s +q.shadowBlur=0 +A.aFE(q,"none") +A.aFF(q,0) +A.aFG(q,0) +q.globalCompositeOperation="source-over" +r.d=B.bN +A.aFD(q,1) +r.x=1 +q.lineCap="butt" +r.e=B.aG +q.lineJoin="miter" +r.f=B.dd +r.Q=null}} +A.a1z.prototype={ +a0(a){B.b.a0(this.a) +this.b=null +this.c=A.dQ()}, +bH(a){var s=this.c,r=new A.bU(new Float32Array(16)) +r.aW(s) +s=this.b +s=s==null?null:A.n5(s,!0,t.Sv) +this.a.push(new A.T2(r,s))}, +b_(a){var s,r=this.a +if(r.length===0)return +s=r.pop() +this.c=s.a +this.b=s.b}, +au(a,b,c){this.c.au(0,b,c)}, +ei(a,b,c){this.c.ei(0,b,c)}, +lY(a,b){this.c.Zw(0,B.zu,b)}, +a2(a,b){this.c.cP(0,new A.bU(b))}, +ia(a){var s,r,q=this.b +if(q==null)q=this.b=A.a([],t.CK) +s=this.c +r=new A.bU(new Float32Array(16)) +r.aW(s) +q.push(new A.u_(a,null,null,r))}, +o5(a){var s,r,q=this.b +if(q==null)q=this.b=A.a([],t.CK) +s=this.c +r=new A.bU(new Float32Array(16)) +r.aW(s) +q.push(new A.u_(null,a,null,r))}, +iS(a,b){var s,r,q=this.b +if(q==null)q=this.b=A.a([],t.CK) +s=this.c +r=new A.bU(new Float32Array(16)) +r.aW(s) +q.push(new A.u_(null,null,b,r))}} +A.iw.prototype={ +jI(a,b,c,d){var s=d.ay,r=this.a,q=a.b,p=d.a +if(s===B.hd){q===$&&A.b() +q=q.a +q===$&&A.b() +q=q.a +q.toString +A.ai(r,"drawImageRectCubic",[q,A.fM(b),A.fM(c),0.3333333333333333,0.3333333333333333,p])}else{q===$&&A.b() +q=q.a +q===$&&A.b() +q=q.a +q.toString +A.ai(r,"drawImageRectOptions",[q,A.fM(b),A.fM(c),A.aRI(s),A.aRK(s),p])}}, +e4(a,b){var s=b==null?null:b.a +A.aGY(this.a,s,A.fM(a),null,null)}, +D0(a,b,c){t.p1.a(b) +b.J5(new A.a96(this,c,a))}} +A.a96.prototype={ +$1(a){A.aGY(this.a.a,this.b.a,A.fM(this.c),a,0)}, +$S:1} +A.aCo.prototype={ +$1(a){var s=$.cR +s=(s==null?$.cR=A.hk(self.window.flutterConfiguration):s).b +if(s==null)s=null +else{s=s.canvasKitBaseUrl +if(s==null)s=null}return(s==null?"https://www.gstatic.com/flutter-canvaskit/74d16627b940bb15e50891f82cad6c3e3465bd6d/":s)+a}, +$S:66} +A.aCF.prototype={ +$1(a){this.a.remove() +this.b.e7(0,!0)}, +$S:1} +A.aCE.prototype={ +$1(a){this.a.remove() +this.b.e7(0,!1)}, +$S:1} +A.a8p.prototype={ +bH(a){B.c.V(this.a.a.save())}, +e4(a,b){var s=t.qo,r=this.a +if(a==null){s.a(b) +A.aGY(r.a,b.a,null,null,null)}else r.e4(a,s.a(b))}, +b_(a){this.a.a.restore()}, +Ci(a){this.a.a.restoreToCount(a)}, +Lb(){return B.c.V(this.a.a.getSaveCount())}, +au(a,b,c){this.a.a.translate(b,c)}, +ei(a,b,c){var s=c==null?b:c +this.a.a.scale(b,s) +return null}, +aV(a,b){return this.ei(a,b,null)}, +lY(a,b){this.a.a.rotate(b*180/3.141592653589793,0,0)}, +a2(a,b){if(b.length!==16)throw A.c(A.bC('"matrix4" must have 16 entries.',null)) +this.a.a.concat(A.aRJ(A.zY(b)))}, +o6(a,b,c){this.a.a.clipRect(A.fM(a),$.aJ6()[b.a],c)}, +ia(a){return this.o6(a,B.cr,!0)}, +V1(a,b){return this.o6(a,B.cr,b)}, +A2(a,b){this.a.a.clipRRect(A.Lp(a),$.a5X(),b)}, +o5(a){return this.A2(a,!0)}, +uP(a,b,c){var s=t.E_.a(b).a +s===$&&A.b() +s=s.a +s.toString +this.a.a.clipPath(s,$.a5X(),c)}, +iS(a,b){return this.uP(a,b,!0)}, +ig(a,b,c){A.ai(this.a.a,"drawLine",[a.a,a.b,b.a,b.b,t.qo.a(c).a])}, +qP(a){this.a.a.drawPaint(t.qo.a(a).a)}, +cB(a,b){t.qo.a(b) +this.a.a.drawRect(A.fM(a),b.a)}, +bQ(a,b){t.qo.a(b) +this.a.a.drawRRect(A.Lp(a),b.a)}, +qN(a,b,c){t.qo.a(c) +this.a.a.drawDRRect(A.Lp(a),A.Lp(b),c.a)}, +qO(a,b){t.qo.a(b) +this.a.a.drawOval(A.fM(a),b.a)}, +du(a,b,c){this.a.a.drawCircle(a.a,a.b,b,t.qo.a(c).a)}, +In(a,b,c,d,e){t.qo.a(e) +A.ai(this.a.a,"drawArc",[A.fM(a),b*57.29577951308232,c*57.29577951308232,!1,e.a])}, +bP(a,b){var s +t.E_.a(a) +t.qo.a(b) +s=a.a +s===$&&A.b() +s=s.a +s.toString +this.a.a.drawPath(s,b.a)}, +jI(a,b,c,d){this.a.jI(t.XY.a(a),b,c,t.qo.a(d))}, +mQ(a){var s=t.Bn.a(a).a +s===$&&A.b() +s=s.a +s.toString +this.a.a.drawPicture(s)}, +lw(a,b){var s=t.z7.a(a).a +s===$&&A.b() +s=s.a +s.toString +this.a.a.drawParagraph(s,b.a,b.b)}, +vo(a,b,c){var s +t.V1.a(a) +t.qo.a(c) +s=a.f +s===$&&A.b() +s=s.a +s.toString +this.a.a.drawVertices(s,$.aES()[b.a],c.a)}, +of(a,b,c,d){var s,r,q,p,o,n,m,l +t.E_.a(a) +$.cZ() +s=$.c4().d +if(s==null){s=self.window.devicePixelRatio +if(s===0)s=1}r=d?5:4 +q=A.C(B.c.an((b.gl(b)>>>24&255)*0.039),b.gl(b)>>>16&255,b.gl(b)>>>8&255,b.gl(b)&255) +p=A.C(B.c.an((b.gl(b)>>>24&255)*0.25),b.gl(b)>>>16&255,b.gl(b)>>>8&255,b.gl(b)&255) +o=t.e.a({ambient:A.zX(q),spot:A.zX(p)}) +n=$.bx.bn().computeTonalColors(o) +m=a.a +m===$&&A.b() +m=m.a +m.toString +l=new Float32Array(3) +l[2]=s*c +s=new Float32Array(3) +s[0]=0 +s[1]=-1 +s[2]=1 +A.ai(this.a.a,"drawShadow",[m,l,s,1.3333333333333333,n.ambient,n.spot,r|4])}} +A.Qa.prototype={ +gt(a){var s=this.a +return s.gt(s)}, +j(a,b){if(b==null)return!1 +if(A.t(this)!==J.U(b))return!1 +return b instanceof A.Qa&&b.a.j(0,this.a)}, +k(a){return this.a.k(0)}} +A.MI.prototype={$ik3:1} +A.AX.prototype={ +tY(){return A.b5E(this.a,this.b)}, +gt(a){return A.N(this.a,this.b,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a,b){if(b==null)return!1 +if(A.t(this)!==J.U(b))return!1 +return b instanceof A.AX&&b.a.j(0,this.a)&&b.b===this.b}, +k(a){return"ColorFilter.mode("+this.a.k(0)+", "+this.b.k(0)+")"}} +A.vz.prototype={ +gafb(){var s,r,q=new Float32Array(20) +for(s=this.a,r=0;r<20;++r)if(B.b.p(B.Pj,r))q[r]=s[r]/255 +else q[r]=s[r] +return q}, +tY(){return $.bx.bn().ColorFilter.MakeMatrix(this.gafb())}, +gt(a){return A.bv(this.a)}, +j(a,b){if(b==null)return!1 +return A.t(this)===J.U(b)&&b instanceof A.vz&&A.qs(this.a,b.a)}, +k(a){return"ColorFilter.matrix("+A.h(this.a)+")"}} +A.MQ.prototype={ +tY(){return $.bx.bn().ColorFilter.MakeLinearToSRGBGamma()}, +j(a,b){if(b==null)return!1 +return A.t(this)===J.U(b)}, +gt(a){return A.fE(A.t(this))}, +k(a){return"ColorFilter.linearToSrgbGamma()"}} +A.MX.prototype={ +tY(){return $.bx.bn().ColorFilter.MakeSRGBToLinearGamma()}, +j(a,b){if(b==null)return!1 +return A.t(this)===J.U(b)}, +gt(a){return A.fE(A.t(this))}, +k(a){return"ColorFilter.srgbToLinearGamma()"}} +A.vy.prototype={ +tY(){var s,r=$.bx.bn().ColorFilter,q=this.a.b +q===$&&A.b() +q=q.a +q.toString +s=this.b.b +s===$&&A.b() +s=s.a +s.toString +return r.MakeCompose(q,s)}, +j(a,b){if(b==null)return!1 +if(!(b instanceof A.vy))return!1 +return b.a.j(0,this.a)&&b.b.j(0,this.b)}, +gt(a){return A.N(this.a,this.b,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a){return"ColorFilter.compose("+this.a.k(0)+", "+this.b.k(0)+")"}} +A.Pi.prototype={ +a08(){var s=this.b.a +return new A.R(s,new A.afh(),A.S(s).h("R<1,iw>"))}, +a8a(a){var s,r,q,p,o,n,m=this.Q +if(m.ai(0,a)){s=null.querySelector("#sk_path_defs") +s.toString +r=A.a([],t.J) +q=m.i(0,a) +q.toString +for(p=t.qr,p=A.cC(new A.eZ(s.children,p),p.h("n.E"),t.e),s=J.ap(p.a),p=A.o(p),p=p.h("@<1>").N(p.z[1]).z[1];s.q();){o=p.a(s.gJ(s)) +if(q.p(0,o.id))r.push(o)}for(s=r.length,n=0;n") +a2.Wb(A.hp(new A.ba(m,new A.afi(a4),k),k.h("n.E"))) +B.b.E(a3,s) +h.Z7(s) +a3=a4.c +if(a3){m=a4.d +m.toString +m=a2.d.i(0,m) +g=m.gCk(m)}else g=null +for(m=a4.b,k=m.length,f=a2.d,e=$.e9.a,j=0;j") +q=A.V(new A.R(s,new A.afe(),r),!0,r.h("af.E")) +if(q.length>A.lV().b-1)B.b.eF(q) +r=m.gadY() +p=m.e +if(l){l=A.lV() +o=l.d +B.b.E(l.e,o) +B.b.a0(o) +p.a0(0) +B.b.aa(q,r)}else{l=A.o(p).h("aX<1>") +n=A.V(new A.aX(p,l),!0,l.h("n.E")) +new A.ba(n,new A.aff(q),A.S(n).h("ba<1>")).aa(0,m.gah_()) +new A.ba(q,new A.afg(m),A.S(q).h("ba<1>")).aa(0,r)}}, +a09(a){var s,r,q,p,o,n,m,l,k=A.lV().b-1 +if(k===0)return B.Qz +s=A.a([],t.jT) +r=t.t +q=new A.pf(A.a([],r),!1) +for(p=0;p") +s=new A.cO(s,r) +return new A.bu(s,s.gu(s),r.h("bu"))}} +A.O9.prototype={} +A.m5.prototype={} +A.aDH.prototype={ +$1(a){var s,r,q,p,o=null +for(s=this.a,r=this.b,q=0;p=q+a,p=0;++q){if(!J.d(r[p],s[s.length-1-q]))return o +if(q===s.length-1){s=r.length +if(a===s-1)return new A.m5(B.b.cf(r,0,s-q-1),B.aa,!1,o) +else if(a===q)return new A.m5(B.b.eY(r,a+1),B.aa,!1,o) +else return o}}return new A.m5(B.b.eY(r,a+1),B.b.cf(s,0,s.length-1-a),!0,B.b.gL(r))}, +$S:147} +A.TH.prototype={ +gIN(){var s,r=this.b +if(r===$){s=$.cR +s=(s==null?$.cR=A.hk(self.window.flutterConfiguration):s).b +if(s==null)s=null +else{s=s.useColorEmoji +if(s==null)s=null}s=s===!0 +r=this.b=A.aXw(new A.aoG(this),A.a([A.a4("Noto Sans","notosans/v30/o-0IIpQlx3QUlC5A4PNb4j5Ba_2c7A.ttf",!0),A.a4("Noto Color Emoji","notocoloremoji/v25/Yq6P-KqIXTD0t4D9z1ESnKM3-HpFab5s79iz64w.ttf",s),A.a4("Noto Emoji","notoemoji/v39/bMrnmSyK7YY-MEu6aWjPDs-ar6uWaGWuob-r0jwvS-FGJCMY.ttf",!s),A.a4("Noto Sans Symbols","notosanssymbols/v40/rP2up3q65FkAtHfwd-eIS2brbDN6gxP34F9jRRCe4W3gfQ8gavVFRkzrbQ.ttf",!0),A.a4("Noto Sans Symbols 2","notosanssymbols2/v21/I_uyMoGduATTei9eI8daxVHDyfisHr71ypPqfX71-AI.ttf",!0),A.a4("Noto Sans Adlam","notosansadlam/v21/neIczCCpqp0s5pPusPamd81eMfjPonvqdbYxxpgufnv0TGnBZLwhuvk.ttf",!0),A.a4("Noto Sans Anatolian Hieroglyphs","notosansanatolianhieroglyphs/v16/ijw9s4roRME5LLRxjsRb8A0gKPSWq4BbDmHHu6j2pEtUJzZWXybIymc5QYo.ttf",!0),A.a4("Noto Sans Arabic","notosansarabic/v18/nwpxtLGrOAZMl5nJ_wfgRg3DrWFZWsnVBJ_sS6tlqHHFlhQ5l3sQWIHPqzCfyGyvu3CBFQLaig.ttf",!0),A.a4("Noto Sans Armenian","notosansarmenian/v42/ZgN0jOZKPa7CHqq0h37c7ReDUubm2SEdFXp7ig73qtTY5idb74R9UdM3y2nZLorxb60iYy6zF3Eg.ttf",!0),A.a4("Noto Sans Avestan","notosansavestan/v20/bWti7ejKfBziStx7lIzKOLQZKhIJkyu9SASLji8U.ttf",!0),A.a4("Noto Sans Balinese","notosansbalinese/v24/NaPwcYvSBuhTirw6IaFn6UrRDaqje-lpbbRtYf-Fwu2Ov7fdhE5Vd222PPY.ttf",!0),A.a4("Noto Sans Bamum","notosansbamum/v26/uk-0EGK3o6EruUbnwovcbBTkkklK_Ya_PBHfNGTPEddO-_gLykxEkxA.ttf",!0),A.a4("Noto Sans Bassa Vah","notosansbassavah/v17/PN_bRee-r3f7LnqsD5sax12gjZn7mBpL5YwUpA2MBdcFn4MaAc6p34gH-GD7.ttf",!0),A.a4("Noto Sans Batak","notosansbatak/v16/gok2H6TwAEdtF9N8-mdTCQvT-Zdgo4_PHuk74A.ttf",!0),A.a4("Noto Sans Bengali","notosansbengali/v20/Cn-SJsCGWQxOjaGwMQ6fIiMywrNJIky6nvd8BjzVMvJx2mcSPVFpVEqE-6KmsolLudCk8izI0lc.ttf",!0),A.a4("Noto Sans Bhaiksuki","notosansbhaiksuki/v15/UcC63EosKniBH4iELXATsSBWdvUHXxhj8rLUdU4wh9U.ttf",!0),A.a4("Noto Sans Brahmi","notosansbrahmi/v18/vEFK2-VODB8RrNDvZSUmQQIIByV18tK1W77HtMo.ttf",!0),A.a4("Noto Sans Buginese","notosansbuginese/v18/esDM30ldNv-KYGGJpKGk18phe_7Da6_gtfuEXLmNtw.ttf",!0),A.a4("Noto Sans Buhid","notosansbuhid/v18/Dxxy8jiXMW75w3OmoDXVWJD7YwzAe6tgnaFoGA.ttf",!0),A.a4("Noto Sans Canadian Aboriginal","notosanscanadianaboriginal/v21/4C_TLjTuEqPj-8J01CwaGkiZ9os0iGVkezM1mUT-j_Lmlzda6uH_nnX1bzigWLn_yAsg0q0uhQ.ttf",!0),A.a4("Noto Sans Carian","notosanscarian/v16/LDIpaoiONgYwA9Yc6f0gUILeMIOgs7ob9yGLmfI.ttf",!0),A.a4("Noto Sans Caucasian Albanian","notosanscaucasianalbanian/v16/nKKA-HM_FYFRJvXzVXaANsU0VzsAc46QGOkWytlTs-TXrYDmoVmRSZo.ttf",!0),A.a4("Noto Sans Chakma","notosanschakma/v17/Y4GQYbJ8VTEp4t3MKJSMjg5OIzhi4JjTQhYBeYo.ttf",!0),A.a4("Noto Sans Cham","notosanscham/v27/pe06MIySN5pO62Z5YkFyQb_bbuRhe6D4yip43qfcERwcv7GykboaLg.ttf",!0),A.a4("Noto Sans Cherokee","notosanscherokee/v19/KFOPCm6Yu8uF-29fiz9vQF9YWK6Z8O10cHNA0cSkZCHYWi5PDkm5rAffjl0.ttf",!0),A.a4("Noto Sans Coptic","notosanscoptic/v17/iJWfBWmUZi_OHPqn4wq6kgqumOEd78u_VG0xR4Y.ttf",!0),A.a4("Noto Sans Cuneiform","notosanscuneiform/v17/bMrrmTWK7YY-MF22aHGGd7H8PhJtvBDWgb9JlRQueeQ.ttf",!0),A.a4("Noto Sans Cypriot","notosanscypriot/v15/8AtzGta9PYqQDjyp79a6f8Cj-3a3cxIsK5MPpahF.ttf",!0),A.a4("Noto Sans Deseret","notosansdeseret/v17/MwQsbgPp1eKH6QsAVuFb9AZM6MMr2Vq9ZnJSZtQG.ttf",!0),A.a4("Noto Sans Devanagari","notosansdevanagari/v25/TuGoUUFzXI5FBtUq5a8bjKYTZjtRU6Sgv3NaV_SNmI0b8QQCQmHn6B2OHjbL_08AlXQly-AzoFoW4Ow.ttf",!0),A.a4("Noto Sans Duployan","notosansduployan/v17/gokzH7nwAEdtF9N8-mdTDx_X9JM5wsvrFsIn6WYDvA.ttf",!0),A.a4("Noto Sans Egyptian Hieroglyphs","notosansegyptianhieroglyphs/v28/vEF42-tODB8RrNDvZSUmRhcQHzx1s7y_F9-j3qSzEcbEYindSVK8xRg7iw.ttf",!0),A.a4("Noto Sans Elbasan","notosanselbasan/v16/-F6rfiZqLzI2JPCgQBnw400qp1trvHdlre4dFcFh.ttf",!0),A.a4("Noto Sans Elymaic","notosanselymaic/v15/UqyKK9YTJW5liNMhTMqe9vUFP65ZD4AjWOT0zi2V.ttf",!0),A.a4("Noto Sans Georgian","notosansgeorgian/v42/PlIaFke5O6RzLfvNNVSitxkr76PRHBC4Ytyq-Gof7PUs4S7zWn-8YDB09HFNdpvnzFj-f5WK0OQV.ttf",!0),A.a4("Noto Sans Glagolitic","notosansglagolitic/v17/1q2ZY4-BBFBst88SU_tOj4J-4yuNF_HI4ERK4Amu7nM1.ttf",!0),A.a4("Noto Sans Gothic","notosansgothic/v16/TuGKUUVzXI5FBtUq5a8bj6wRbzxTFMX40kFQRx0.ttf",!0),A.a4("Noto Sans Grantha","notosansgrantha/v17/3y976akwcCjmsU8NDyrKo3IQfQ4o-r8cFeulHc6N.ttf",!0),A.a4("Noto Sans Gujarati","notosansgujarati/v23/wlpWgx_HC1ti5ViekvcxnhMlCVo3f5pv17ivlzsUB14gg1TMR2Gw4VceEl7MA_ypFwPM_OdiEH0s.ttf",!0),A.a4("Noto Sans Gunjala Gondi","notosansgunjalagondi/v17/bWto7e7KfBziStx7lIzKPrcSMwcEnCv6DW7n5hcVXYMTK4q1.ttf",!0),A.a4("Noto Sans Gurmukhi","notosansgurmukhi/v26/w8g9H3EvQP81sInb43inmyN9zZ7hb7ATbSWo4q8dJ74a3cVrYFQ_bogT0-gPeG1OenbxZ_trdp7h.ttf",!0),A.a4("Noto Sans HK","notosanshk/v31/nKKF-GM_FYFRJvXzVXaAPe97P1KHynJFP716qHB--oWTiYjNvVA.ttf",!0),A.a4("Noto Sans Hanunoo","notosanshanunoo/v17/f0Xs0fCv8dxkDWlZSoXOj6CphMloFsEsEpgL_ix2.ttf",!0),A.a4("Noto Sans Hatran","notosanshatran/v16/A2BBn4Ne0RgnVF3Lnko-0sOBIfL_mM83r1nwzDs.ttf",!0),A.a4("Noto Sans Hebrew","notosanshebrew/v43/or3HQ7v33eiDljA1IufXTtVf7V6RvEEdhQlk0LlGxCyaeNKYZC0sqk3xXGiXd4qtoiJltutR2g.ttf",!0),A.a4("Noto Sans Imperial Aramaic","notosansimperialaramaic/v16/a8IMNpjwKmHXpgXbMIsbTc_kvks91LlLetBr5itQrtdml3YfPNno.ttf",!0),A.a4("Noto Sans Indic Siyaq Numbers","notosansindicsiyaqnumbers/v16/6xK5dTJFKcWIu4bpRBjRZRpsIYHabOeZ8UZLubTzpXNHKx2WPOpVd5Iu.ttf",!0),A.a4("Noto Sans Inscriptional Pahlavi","notosansinscriptionalpahlavi/v16/ll8UK3GaVDuxR-TEqFPIbsR79Xxz9WEKbwsjpz7VklYlC7FCVtqVOAYK0QA.ttf",!0),A.a4("Noto Sans Inscriptional Parthian","notosansinscriptionalparthian/v16/k3k7o-IMPvpLmixcA63oYi-yStDkgXuXncL7dzfW3P4TAJ2yklBJ2jNkLlLr.ttf",!0),A.a4("Noto Sans JP","notosansjp/v52/-F6jfjtqLzI2JPCgQBnw7HFyzSD-AsregP8VFBEj75vY0rw-oME.ttf",!0),A.a4("Noto Sans Javanese","notosansjavanese/v21/2V01KJkDAIA6Hp4zoSScDjV0Y-eoHAHT-Z3MngEefiidxJnkFFliZYWj4O8.ttf",!0),A.a4("Noto Sans KR","notosanskr/v36/PbyxFmXiEBPT4ITbgNA5Cgms3VYcOA-vvnIzzuoyeLTq8H4hfeE.ttf",!0),A.a4("Noto Sans Kaithi","notosanskaithi/v18/buEtppS9f8_vkXadMBJJu0tWjLwjQi0KdoZIKlo.ttf",!0),A.a4("Noto Sans Kannada","notosanskannada/v26/8vIs7xs32H97qzQKnzfeXycxXZyUmySvZWItmf1fe6TVmgop9ndpS-BqHEyGrDvNzSIMLsPKrkY.ttf",!0),A.a4("Noto Sans Kayah Li","notosanskayahli/v20/B50nF61OpWTRcGrhOVJJwOMXdca6Yecki3E06x2jVTX3WCc3CZH4EXLuKVM.ttf",!0),A.a4("Noto Sans Kharoshthi","notosanskharoshthi/v16/Fh4qPiLjKS30-P4-pGMMXCCfvkc5Vd7KE5z4rFyx5mR1.ttf",!0),A.a4("Noto Sans Khmer","notosanskhmer/v23/ijw3s5roRME5LLRxjsRb-gssOenAyendxrgV2c-Zw-9vbVUti_Z_dWgtWYuNAJz4kAbrddiA.ttf",!0),A.a4("Noto Sans Khojki","notosanskhojki/v16/-nFnOHM29Oofr2wohFbTuPPKVWpmK_d709jy92k.ttf",!0),A.a4("Noto Sans Khudawadi","notosanskhudawadi/v18/fdNi9t6ZsWBZ2k5ltHN73zZ5hc8HANlHIjRnVVXz9MY.ttf",!0),A.a4("Noto Sans Lao","notosanslao/v24/bx6lNx2Ol_ixgdYWLm9BwxM3NW6BOkuf763Clj73CiQ_J1Djx9pidOt4ccbdf5MK3riB2w.ttf",!0),A.a4("Noto Sans Lepcha","notosanslepcha/v16/0QI7MWlB_JWgA166SKhu05TekNS32AJstqBXgd4.ttf",!0),A.a4("Noto Sans Limbu","notosanslimbu/v22/3JnlSDv90Gmq2mrzckOBBRRoNJVj0MF3OHRDnA.ttf",!0),A.a4("Noto Sans Linear A","notosanslineara/v18/oPWS_l16kP4jCuhpgEGmwJOiA18FZj22zmHQAGQicw.ttf",!0),A.a4("Noto Sans Linear B","notosanslinearb/v17/HhyJU4wt9vSgfHoORYOiXOckKNB737IV3BkFTq4EPw.ttf",!0),A.a4("Noto Sans Lisu","notosanslisu/v25/uk-3EGO3o6EruUbnwovcYhz6kh57_nqbcTdjJnHP2Vwt29IlxkVdig.ttf",!0),A.a4("Noto Sans Lycian","notosanslycian/v15/QldVNSNMqAsHtsJ7UmqxBQA9r8wA5_naCJwn00E.ttf",!0),A.a4("Noto Sans Lydian","notosanslydian/v17/c4m71mVzGN7s8FmIukZJ1v4ZlcPReUPXMoIjEQI.ttf",!0),A.a4("Noto Sans Mahajani","notosansmahajani/v17/-F6sfiVqLzI2JPCgQBnw60Agp0JrvD5Fh8ARHNh4zg.ttf",!0),A.a4("Noto Sans Malayalam","notosansmalayalam/v26/sJoi3K5XjsSdcnzn071rL37lpAOsUThnDZIfPdbeSNzVakglNM-Qw8EaeB8Nss-_RuD9BFzEr6HxEA.ttf",!0),A.a4("Noto Sans Mandaic","notosansmandaic/v16/cIfnMbdWt1w_HgCcilqhKQBo_OsMI5_A_gMk0izH.ttf",!0),A.a4("Noto Sans Manichaean","notosansmanichaean/v17/taiVGntiC4--qtsfi4Jp9-_GkPZZCcrfekqCNTtFCtdX.ttf",!0),A.a4("Noto Sans Marchen","notosansmarchen/v19/aFTO7OZ_Y282EP-WyG6QTOX_C8WZMHhPk652ZaHk.ttf",!0),A.a4("Noto Sans Masaram Gondi","notosansmasaramgondi/v17/6xK_dThFKcWIu4bpRBjRYRV7KZCbUq6n_1kPnuGe7RI9WSWX.ttf",!0),A.a4("Noto Sans Math","notosansmath/v15/7Aump_cpkSecTWaHRlH2hyV5UHkG-V048PW0.ttf",!0),A.a4("Noto Sans Mayan Numerals","notosansmayannumerals/v16/PlIuFk25O6RzLfvNNVSivR09_KqYMwvvDKYjfIiE68oo6eepYQ.ttf",!0),A.a4("Noto Sans Medefaidrin","notosansmedefaidrin/v22/WwkzxOq6Dk-wranENynkfeVsNbRZtbOIdLb1exeM4ZeuabBfmErWlT318e5A3rw.ttf",!0),A.a4("Noto Sans Meetei Mayek","notosansmeeteimayek/v14/HTxAL3QyKieByqY9eZPFweO0be7M21uSphSdhqILnmrRfJ8t_1TJ_vTW5PgeFYVa.ttf",!0),A.a4("Noto Sans Meroitic","notosansmeroitic/v17/IFS5HfRJndhE3P4b5jnZ3ITPvC6i00UDgDhTiKY9KQ.ttf",!0),A.a4("Noto Sans Miao","notosansmiao/v17/Dxxz8jmXMW75w3OmoDXVV4zyZUjgUYVslLhx.ttf",!0),A.a4("Noto Sans Modi","notosansmodi/v20/pe03MIySN5pO62Z5YkFyT7jeav5qWVAgVol-.ttf",!0),A.a4("Noto Sans Mongolian","notosansmongolian/v17/VdGCAYADGIwE0EopZx8xQfHlgEAMsrToxLsg6-av1x0.ttf",!0),A.a4("Noto Sans Mro","notosansmro/v18/qWcsB6--pZv9TqnUQMhe9b39WDzRtjkho4M.ttf",!0),A.a4("Noto Sans Multani","notosansmultani/v20/9Bty3ClF38_RfOpe1gCaZ8p30BOFO1A0pfCs5Kos.ttf",!0),A.a4("Noto Sans Myanmar","notosansmyanmar/v20/AlZq_y1ZtY3ymOryg38hOCSdOnFq0En23OU4o1AC.ttf",!0),A.a4("Noto Sans NKo","notosansnko/v2/esDX31ZdNv-KYGGJpKGk2_RpMpCMHMLBrdA.ttf",!0),A.a4("Noto Sans Nabataean","notosansnabataean/v16/IFS4HfVJndhE3P4b5jnZ34DfsjO330dNoBJ9hK8kMK4.ttf",!0),A.a4("Noto Sans New Tai Lue","notosansnewtailue/v20/H4cKBW-Pl9DZ0Xe_nHUapt7PovLXAhAnY7wqaLy-OJgU3p_pdeXAYUbghFPKzeY.ttf",!0),A.a4("Noto Sans Newa","notosansnewa/v16/7r3fqXp6utEsO9pI4f8ok8sWg8n_qN4R5lNU.ttf",!0),A.a4("Noto Sans Nushu","notosansnushu/v19/rnCw-xRQ3B7652emAbAe_Ai1IYaFWFAMArZKqQ.ttf",!0),A.a4("Noto Sans Ogham","notosansogham/v17/kmKlZqk1GBDGN0mY6k5lmEmww4hrt5laQxcoCA.ttf",!0),A.a4("Noto Sans Ol Chiki","notosansolchiki/v21/N0b92TJNOPt-eHmFZCdQbrL32r-4CvhzDzRwlxOQYuVALWk267I6gVrz5gQ.ttf",!0),A.a4("Noto Sans Old Hungarian","notosansoldhungarian/v16/E213_cD6hP3GwCJPEUssHEM0KqLaHJXg2PiIgRfjbg5nCYXt.ttf",!0),A.a4("Noto Sans Old Italic","notosansolditalic/v16/TuGOUUFzXI5FBtUq5a8bh68BJxxEVam7tWlRdRhtCC4d.ttf",!0),A.a4("Noto Sans Old North Arabian","notosansoldnortharabian/v16/esDF30BdNv-KYGGJpKGk2tNiMt7Jar6olZDyNdr81zBQmUo_xw4ABw.ttf",!0),A.a4("Noto Sans Old Permic","notosansoldpermic/v17/snf1s1q1-dF8pli1TesqcbUY4Mr-ElrwKLdXgv_dKYB5.ttf",!0),A.a4("Noto Sans Old Persian","notosansoldpersian/v16/wEOjEAbNnc5caQTFG18FHrZr9Bp6-8CmIJ_tqOlQfx9CjA.ttf",!0),A.a4("Noto Sans Old Sogdian","notosansoldsogdian/v16/3JnjSCH90Gmq2mrzckOBBhFhdrMst48aURt7neIqM-9uyg.ttf",!0),A.a4("Noto Sans Old South Arabian","notosansoldsoutharabian/v16/3qT5oiOhnSyU8TNFIdhZTice3hB_HWKsEnF--0XCHiKx1OtDT9HwTA.ttf",!0),A.a4("Noto Sans Old Turkic","notosansoldturkic/v16/yMJNMJVya43H0SUF_WmcGEQVqoEMKDKbsE2RjEw-Vyws.ttf",!0),A.a4("Noto Sans Oriya","notosansoriya/v27/AYCppXfzfccDCstK_hrjDyADv5e9748vhj3CJBLHIARtgD6TJQS0dJT5Ivj0f6_c6LhHBRe-.ttf",!0),A.a4("Noto Sans Osage","notosansosage/v18/oPWX_kB6kP4jCuhpgEGmw4mtAVtXRlaSxkrMCQ.ttf",!0),A.a4("Noto Sans Osmanya","notosansosmanya/v18/8vIS7xs32H97qzQKnzfeWzUyUpOJmz6kR47NCV5Z.ttf",!0),A.a4("Noto Sans Pahawh Hmong","notosanspahawhhmong/v18/bWtp7e_KfBziStx7lIzKKaMUOBEA3UPQDW7krzc_c48aMpM.ttf",!0),A.a4("Noto Sans Palmyrene","notosanspalmyrene/v16/ZgNPjOdKPa7CHqq0h37c_ASCWvH93SFCPnK5ZpdNtcA.ttf",!0),A.a4("Noto Sans Pau Cin Hau","notosanspaucinhau/v20/x3d-cl3IZKmUqiMg_9wBLLtzl22EayN7ehIdjEWqKMxsKw.ttf",!0),A.a4("Noto Sans Phags Pa","notosansphagspa/v15/pxiZyoo6v8ZYyWh5WuPeJzMkd4SrGChkqkSsrvNXiA.ttf",!0),A.a4("Noto Sans Phoenician","notosansphoenician/v17/jizFRF9Ksm4Bt9PvcTaEkIHiTVtxmFtS5X7Jot-p5561.ttf",!0),A.a4("Noto Sans Psalter Pahlavi","notosanspsalterpahlavi/v16/rP2Vp3K65FkAtHfwd-eISGznYihzggmsicPfud3w1G3KsUQBct4.ttf",!0),A.a4("Noto Sans Rejang","notosansrejang/v18/Ktk2AKuMeZjqPnXgyqrib7DIogqwN4O3WYZB_sU.ttf",!0),A.a4("Noto Sans Runic","notosansrunic/v17/H4c_BXWPl9DZ0Xe_nHUaus7W68WWaxpvHtgIYg.ttf",!0),A.a4("Noto Sans SC","notosanssc/v36/k3kCo84MPvpLmixcA63oeAL7Iqp5IZJF9bmaG9_FnYxNbPzS5HE.ttf",!0),A.a4("Noto Sans Saurashtra","notosanssaurashtra/v19/ea8GacQ0Wfz_XKWXe6OtoA8w8zvmYwTef9ndjhPTSIx9.ttf",!0),A.a4("Noto Sans Sharada","notosanssharada/v16/gok0H7rwAEdtF9N8-mdTGALG6p0kwoXLPOwr4H8a.ttf",!0),A.a4("Noto Sans Shavian","notosansshavian/v17/CHy5V_HZE0jxJBQlqAeCKjJvQBNF4EFQSplv2Cwg.ttf",!0),A.a4("Noto Sans Siddham","notosanssiddham/v17/OZpZg-FwqiNLe9PELUikxTWDoCCeGqndk3Ic92ZH.ttf",!0),A.a4("Noto Sans Sinhala","notosanssinhala/v26/yMJ2MJBya43H0SUF_WmcBEEf4rQVO2P524V5N_MxQzQtb-tf5dJbC30Fu9zUwg2a5lgLpJwbQRM.ttf",!0),A.a4("Noto Sans Sogdian","notosanssogdian/v16/taiQGn5iC4--qtsfi4Jp6eHPnfxQBo--Pm6KHidM.ttf",!0),A.a4("Noto Sans Sora Sompeng","notosanssorasompeng/v24/PlIRFkO5O6RzLfvNNVSioxM2_OTrEhPyDLolKvCsHzCxWuGkYHR818DpZXJQd4Mu.ttf",!0),A.a4("Noto Sans Soyombo","notosanssoyombo/v17/RWmSoL-Y6-8q5LTtXs6MF6q7xsxgY0FrIFOcK25W.ttf",!0),A.a4("Noto Sans Sundanese","notosanssundanese/v24/FwZw7_84xUkosG2xJo2gm7nFwSLQkdymq2mkz3Gz1_b6ctxpNNHCizv7fQES.ttf",!0),A.a4("Noto Sans Syloti Nagri","notosanssylotinagri/v20/uU9eCAQZ75uhfF9UoWDRiY3q7Sf_VFV3m4dGFVfxN87gsj0.ttf",!0),A.a4("Noto Sans Syriac","notosanssyriac/v16/Ktk7AKuMeZjqPnXgyqribqzQqgW0LYiVqV7dXcP0C-VD9MaJyZfUL_FC.ttf",!0),A.a4("Noto Sans TC","notosanstc/v35/-nFuOG829Oofr2wohFbTp9ifNAn722rq0MXz76Cy_CpOtma3uNQ.ttf",!0),A.a4("Noto Sans Tagalog","notosanstagalog/v18/J7aFnoNzCnFcV9ZI-sUYuvote1R0wwEAA8jHexnL.ttf",!0),A.a4("Noto Sans Tagbanwa","notosanstagbanwa/v18/Y4GWYbB8VTEp4t3MKJSMmQdIKjRtt_nZRjQEaYpGoQ.ttf",!0),A.a4("Noto Sans Tai Le","notosanstaile/v17/vEFK2-VODB8RrNDvZSUmVxEATwR58tK1W77HtMo.ttf",!0),A.a4("Noto Sans Tai Tham","notosanstaitham/v19/kJEbBv0U4hgtwxDUw2x9q7tbjLIfbPGHBoaVSAZ3MdLJBCUbPgquyaRGKMw.ttf",!0),A.a4("Noto Sans Tai Viet","notosanstaiviet/v16/8QIUdj3HhN_lv4jf9vsE-9GMOLsaSPZr644fWsRO9w.ttf",!0),A.a4("Noto Sans Takri","notosanstakri/v23/TuGJUVpzXI5FBtUq5a8bnKIOdTwQNO_W3khJXg.ttf",!0),A.a4("Noto Sans Tamil","notosanstamil/v27/ieVc2YdFI3GCY6SyQy1KfStzYKZgzN1z4LKDbeZce-0429tBManUktuex7vGo70RqKDt_EvT.ttf",!0),A.a4("Noto Sans Tamil Supplement","notosanstamilsupplement/v21/DdTz78kEtnooLS5rXF1DaruiCd_bFp_Ph4sGcn7ax_vsAeMkeq1x.ttf",!0),A.a4("Noto Sans Telugu","notosanstelugu/v25/0FlxVOGZlE2Rrtr-HmgkMWJNjJ5_RyT8o8c7fHkeg-esVC5dzHkHIJQqrEntezbqQUbf-3v37w.ttf",!0),A.a4("Noto Sans Thaana","notosansthaana/v23/C8c14dM-vnz-s-3jaEsxlxHkBH-WZOETXfoQrfQ9Y4XrbhLhnu4-tbNu.ttf",!0),A.a4("Noto Sans Thai","notosansthai/v20/iJWnBXeUZi_OHPqn4wq6hQ2_hbJ1xyN9wd43SofNWcd1MKVQt_So_9CdU5RtpzF-QRvzzXg.ttf",!0),A.a4("Noto Sans Tifinagh","notosanstifinagh/v17/I_uzMoCduATTei9eI8dawkHIwvmhCvbn6rnEcXfs4Q.ttf",!0),A.a4("Noto Sans Tirhuta","notosanstirhuta/v16/t5t6IQYRNJ6TWjahPR6X-M-apUyby7uGUBsTrn5P.ttf",!0),A.a4("Noto Sans Ugaritic","notosansugaritic/v16/3qTwoiqhnSyU8TNFIdhZVCwbjCpkAXXkMhoIkiazfg.ttf",!0),A.a4("Noto Sans Vai","notosansvai/v17/NaPecZTSBuhTirw6IaFn_UrURMTsDIRSfr0.ttf",!0),A.a4("Noto Sans Wancho","notosanswancho/v17/zrf-0GXXyfn6Fs0lH9P4cUubP0GBqAPopiRfKp8.ttf",!0),A.a4("Noto Sans Warang Citi","notosanswarangciti/v17/EYqtmb9SzL1YtsZSScyKDXIeOv3w-zgsNvKRpeVCCXzdgA.ttf",!0),A.a4("Noto Sans Yi","notosansyi/v19/sJoD3LFXjsSdcnzn071rO3apxVDJNVgSNg.ttf",!0),A.a4("Noto Sans Zanabazar Square","notosanszanabazarsquare/v16/Cn-jJsuGWQxOjaGwMQ6fOicyxLBEMRfDtkzl4uagQtJxOCEgN0Gc.ttf",!0)],t.Qg))}return r}, +Rj(){var s,r,q,p,o,n=this,m=n.r +if(m!=null){m.delete() +n.r=null +m=n.w +if(m!=null)m.delete() +n.w=null}n.r=$.bx.bn().TypefaceFontProvider.Make() +m=$.bx.bn().FontCollection.Make() +n.w=m +m.enableFontFallback() +n.w.setDefaultFontManager(n.r) +m=n.f +m.a0(0) +for(s=n.d,r=s.length,q=0;q"),s=new A.cO(s,r),s=new A.bu(s,s.gu(s),r.h("bu")),r=r.h("af.E"),q=B.fa;s.q();){p=s.d +if(p==null)p=r.a(p) +switch(p.a.a){case 0:p=p.b +p.toString +o=p +break +case 1:p=p.c +o=new A.w(p.a,p.b,p.c,p.d) +break +case 2:p=p.d.a +p===$&&A.b() +p=p.a.getBounds() +o=new A.w(p[0],p[1],p[2],p[3]) +break +default:continue $label0$1}q=q.ea(o)}return q}} +A.aj2.prototype={} +A.vN.prototype={ +kS(a,b){this.b=this.nl(a,b)}, +nl(a,b){var s,r,q,p,o,n +for(s=this.c,r=s.length,q=B.F,p=0;p=q.c||q.b>=q.d)q=o.b +else{n=o.b +if(!(n.a>=n.c||n.b>=n.d))q=q.j0(n)}}return q}, +kN(a){var s,r,q,p,o +for(s=this.c,r=s.length,q=0;q=o.c||o.b>=o.d))p.hi(a)}}} +A.SQ.prototype={ +hi(a){this.kN(a)}} +A.M3.prototype={ +kS(a,b){this.b=this.nl(a,b).j0(a.ganE())}, +hi(a){var s,r,q=this,p=A.AZ() +p.slo(q.r) +s=a.a +s.D0(q.b,q.f,p) +r=p.b +r===$&&A.b() +r.m() +q.kN(a) +s.b_(0)}, +$ia6T:1} +A.N2.prototype={ +kS(a,b){var s,r,q=null,p=this.f,o=a.c.a +o.push(new A.kp(B.U3,q,q,p,q,q)) +s=this.nl(a,b) +p=p.a +p===$&&A.b() +r=A.aIm(p.a.getBounds()) +if(s.BU(r))this.b=s.ea(r) +o.pop()}, +hi(a){var s,r=this,q=a.a +q.bH(0) +s=r.r +q.amo(0,r.f,s!==B.a9) +s=s===B.dA +if(s)q.e4(r.b,null) +r.kN(a) +if(s)q.b_(0) +q.b_(0)}, +$ia9l:1} +A.N4.prototype={ +kS(a,b){var s,r=null,q=this.f,p=a.c.a +p.push(new A.kp(B.U1,q,r,r,r,r)) +s=this.nl(a,b) +if(s.BU(q))this.b=s.ea(q) +p.pop()}, +hi(a){var s,r,q=a.a +q.bH(0) +s=this.f +r=this.r +q.ams(s,B.cr,r!==B.a9) +r=r===B.dA +if(r)q.e4(s,null) +this.kN(a) +if(r)q.b_(0) +q.b_(0)}, +$ia9o:1} +A.N3.prototype={ +kS(a,b){var s,r,q,p,o=null,n=this.f,m=a.c.a +m.push(new A.kp(B.U2,o,n,o,o,o)) +s=this.nl(a,b) +r=n.a +q=n.b +p=n.c +n=n.d +if(s.BU(new A.w(r,q,p,n)))this.b=s.ea(new A.w(r,q,p,n)) +m.pop()}, +hi(a){var s,r=this,q=a.a +q.bH(0) +s=r.r +q.amq(r.f,s!==B.a9) +s=s===B.dA +if(s)q.e4(r.b,null) +r.kN(a) +if(s)q.b_(0) +q.b_(0)}, +$ia9n:1} +A.QS.prototype={ +kS(a,b){var s,r,q,p,o=this,n=null,m=new A.bU(new Float32Array(16)) +m.aW(b) +s=o.r +r=s.a +s=s.b +m.au(0,r,s) +q=A.dQ() +q.l5(r,s,0) +p=a.c.a +p.push(A.aGq(q)) +p.push(new A.kp(B.U5,n,n,n,n,o.f)) +o.a2b(a,m) +p.pop() +p.pop() +o.b=o.b.au(0,r,s)}, +hi(a){var s,r,q,p=this,o=A.AZ() +o.sM(0,A.C(p.f,0,0,0)) +s=a.a +s.bH(0) +r=p.r +q=r.a +r=r.b +s.au(0,q,r) +s.e4(p.b.cm(new A.k(-q,-r)),o) +r=o.b +r===$&&A.b() +r.m() +p.kN(a) +s.b_(0) +s.b_(0)}, +$iaiQ:1} +A.Gy.prototype={ +kS(a,b){var s=this.f,r=b.eS(s),q=a.c.a +q.push(A.aGq(s)) +this.b=A.aEF(s,this.nl(a,r)) +q.pop()}, +hi(a){var s=a.a +s.bH(0) +s.a2(0,this.f.a) +this.kN(a) +s.b_(0)}, +$iUT:1} +A.QQ.prototype={$iaiO:1} +A.Pr.prototype={ +kS(a,b){var s,r,q,p,o=this,n=new A.bU(new Float32Array(16)) +n.aW(b) +s=o.f +r=s.a +s=s.b +n.au(0,r,s) +q=A.dQ() +q.l5(r,s,0) +s=a.c.a +s.push(A.aGq(q)) +p=o.nl(a,n) +q=t.p1.a(o.r).d +q===$&&A.b() +q=q.a +q.toString +new A.afz(o,p).$1(q) +s.pop()}, +hi(a){var s,r,q=this,p=a.a +p.bH(0) +s=q.f +p.au(0,s.a,s.b) +r=A.AZ() +r.sarj(q.r) +p.e4(q.b,r) +s=r.b +s===$&&A.b() +s.m() +q.kN(a) +p.b_(0) +p.b_(0)}, +$iafy:1} +A.afz.prototype={ +$1(a){var s=a.getOutputBounds(A.fM(this.b)) +this.a.b=new A.w(s[0],s[1],s[2],s[3])}, +$S:1} +A.Rt.prototype={ +kS(a,b){var s=this.c.a +s===$&&A.b() +this.b=A.aIm(s.a.cullRect()).cm(this.d)}, +hi(a){var s,r=a.b.a +B.c.V(r.save()) +s=this.d +r.translate(s.a,s.b) +s=this.c.a +s===$&&A.b() +s=s.a +s.toString +r.drawPicture(s) +r.restore()}} +A.N9.prototype={ +hi(a){var s,r,q=A.AZ() +q.siU(this.f) +s=a.a +s.e4(this.b,q) +r=q.b +r===$&&A.b() +r.m() +this.kN(a) +s.b_(0)}, +$ia9C:1} +A.PP.prototype={ +m(){}} +A.agx.prototype={ +U8(a,b,c,d){var s,r=this.b +r===$&&A.b() +s=new A.Rt(t.Bn.a(b),a,B.F) +s.a=r +r.c.push(s)}, +Ub(a){var s=this.b +s===$&&A.b() +t.L6.a(a) +a.a=s +s.c.push(a)}, +bk(){return new A.PP(new A.agy(this.a,$.cZ().gjd()))}, +ev(){var s=this.b +s===$&&A.b() +if(s===this.a)return +s=s.a +s.toString +this.b=s}, +YJ(a,b,c){return this.lR(new A.M3(a,b,A.a([],t.k5),B.F))}, +YK(a,b,c){return this.lR(new A.N2(t.E_.a(a),b,A.a([],t.k5),B.F))}, +YL(a,b,c){return this.lR(new A.N3(a,b,A.a([],t.k5),B.F))}, +YM(a,b,c){return this.lR(new A.N4(a,b,A.a([],t.k5),B.F))}, +YN(a,b){return this.lR(new A.N9(a,A.a([],t.k5),B.F))}, +YO(a,b,c){return this.lR(new A.Pr(b,a,A.a([],t.k5),B.F))}, +K5(a,b,c){var s=A.dQ() +s.l5(a,b,0) +return this.lR(new A.QQ(s,A.a([],t.k5),B.F))}, +YP(a,b,c){return this.lR(new A.QS(a,b,A.a([],t.k5),B.F))}, +wr(a,b){return this.lR(new A.Gy(new A.bU(A.zY(a)),A.a([],t.k5),B.F))}, +auE(a){var s=this.b +s===$&&A.b() +a.a=s +s.c.push(a) +return this.b=a}, +lR(a){return this.auE(a,t.vn)}} +A.agy.prototype={} +A.adv.prototype={ +auH(a,b){A.aEC("preroll_frame",new A.adw(this,a,!0)) +A.aEC("apply_frame",new A.adx(this,a,!0)) +return!0}} +A.adw.prototype={ +$0(){var s=this.b.a +s.b=s.nl(new A.ak4(new A.Dk(A.a([],t.YE))),A.dQ())}, +$S:0} +A.adx.prototype={ +$0(){var s=this.a,r=A.a([],t.iW),q=new A.MR(r),p=s.a +r.push(p) +s.c.a08().aa(0,q.gakN()) +s=this.b.a +r=s.b +if(!r.ga7(r))s.kN(new A.aj2(q,p))}, +$S:0} +A.a9I.prototype={} +A.a99.prototype={} +A.MR.prototype={ +akO(a){this.a.push(a)}, +bH(a){var s,r,q +for(s=this.a,r=0,q=0;q0)){p.ax=null +s=null}else{r=a.a +q=new A.a99(r,s) +s=$.bx.bn().MaskFilter.MakeBlur($.aTT()[r.a],s,!0) +s.toString +r=new A.eF(o,t.R) +r.h0(q,s,o,t.e) +q.c!==$&&A.bS() +q.c=r +p.ax=q +s=q}}else s=p.ax=null +if(s==null)s=null +else{s=s.c +s===$&&A.b() +s=s.a +s.toString}p.a.setMaskFilter(s)}, +sn3(a){var s,r=this +if(r.ay===a)return +r.ay=a +s=r.as +s=s==null?null:s.CU(a) +r.a.setShader(s)}, +siU(a){var s,r=this +if(r.ch===a)return +r.ch=a +r.Q=null +s=A.b5x(a) +s.toString +s=r.CW=A.ahm(s) +if(r.z){r.Q=s +s=r.CW=A.ahm(new A.vy($.aEQ(),s))}s=s.b +s===$&&A.b() +s=s.a +s.toString +r.a.setColorFilter(s)}, +sLR(a){if(this.cx===a)return +this.cx=a +this.a.setStrokeMiter(a)}, +sarj(a){if(J.d(this.c,a))return +t.fz.a(a) +a.J5(new A.a9a(this)) +this.c=a}, +$ine:1} +A.a9a.prototype={ +$1(a){this.a.a.setImageFilter(a)}, +$S:1} +A.B_.prototype={ +gox(){return this.b}, +sox(a){var s +if(this.b===a)return +this.b=a +s=this.a +s===$&&A.b() +s=s.a +s.toString +s.setFillType($.A_()[a.a])}, +U1(a,b,c){var s=this.a +s===$&&A.b() +s=s.a +s.toString +s.addArc(A.fM(a),b*57.29577951308232,c*57.29577951308232)}, +kr(a){var s=this.a +s===$&&A.b() +s=s.a +s.toString +s.addOval(A.fM(a),!1,1)}, +zE(a,b,c){var s,r,q=A.dQ() +q.l5(c.a,c.b,0) +s=A.a5O(q.a) +t.E_.a(b) +q=this.a +q===$&&A.b() +q=q.a +q.toString +r=b.a +r===$&&A.b() +r=r.a +r.toString +A.ai(q,"addPath",[r,s[0],s[1],s[2],s[3],s[4],s[5],s[6],s[7],s[8],!1])}, +ex(a){var s=this.a +s===$&&A.b() +s=s.a +s.toString +s.addRRect(A.Lp(a),!1)}, +jA(a){var s=this.a +s===$&&A.b() +s=s.a +s.toString +s.addRect(A.fM(a))}, +ks(a,b,c,d,e){var s=this.a +s===$&&A.b() +s=s.a +s.toString +s.arcToOval(A.fM(b),c*57.29577951308232,d*57.29577951308232,e)}, +Up(a,b){var s=this.a +s===$&&A.b() +s=s.a +s.toString +A.ai(s,"arcToRotated",[b.a,b.b,0,!0,!1,a.a,a.b])}, +aA(a){var s=this.a +s===$&&A.b() +s.a.close()}, +HG(){return new A.MV(this,!1)}, +p(a,b){var s=this.a +s===$&&A.b() +return s.a.contains(b.a,b.b)}, +v5(a,b,c,d,e,f){var s=this.a +s===$&&A.b() +s=s.a +s.toString +A.ai(s,"cubicTo",[a,b,c,d,e,f])}, +ho(a){var s=this.a +s===$&&A.b() +return A.aIm(s.a.getBounds())}, +b5(a,b,c){var s=this.a +s===$&&A.b() +s.a.lineTo(b,c)}, +d0(a,b,c){var s=this.a +s===$&&A.b() +s.a.moveTo(b,c)}, +YR(a,b,c,d){var s=this.a +s===$&&A.b() +s.a.quadTo(a,b,c,d)}, +it(a){var s +this.b=B.bH +s=this.a +s===$&&A.b() +s.a.reset()}, +cm(a){var s,r=this.a +r===$&&A.b() +s=r.a.copy() +A.ai(s,"transform",[1,0,a.a,0,1,a.b,0,0,1]) +r=this.b +s.setFillType($.A_()[r.a]) +return A.MU(s,r)}, +$itz:1} +A.MV.prototype={ +gab(a){var s,r,q,p=this,o="Iterator",n=p.c +if(n===$){s=p.a.a +s===$&&A.b() +if(s.a.isEmpty())r=B.Dq +else{r=new A.a97(p) +s=s.a +s.toString +q=new A.eF(o,t.R) +q.h0(r,new self.window.flutterCanvasKit.ContourMeasureIter(s,!1,1),o,t.e) +r.b!==$&&A.bS() +r.b=q}p.c!==$&&A.ay() +n=p.c=r}return n}} +A.a97.prototype={ +gJ(a){var s=this.d +if(s==null)throw A.c(A.ef(u.g)) +return s}, +q(){var s,r,q=this,p="PathMetric",o=q.b +o===$&&A.b() +s=o.a.next() +if(s==null){q.d=null +return!1}o=new A.MJ(q.a) +r=new A.eF(p,t.R) +r.h0(o,s,p,t.e) +o.b!==$&&A.bS() +o.b=r +q.d=o;++q.c +return!0}} +A.MJ.prototype={ +WA(a,b){var s,r=this.b +r===$&&A.b() +r=r.a.getSegment(a,b,!0) +s=this.a.a.b +r.setFillType($.A_()[s.a]) +return A.MU(r,s)}, +gu(a){var s=this.b +s===$&&A.b() +return s.a.length()}, +$ix6:1} +A.a9c.prototype={ +gJ(a){throw A.c(A.ef("PathMetric iterator is empty."))}, +q(){return!1}} +A.MW.prototype={ +m(){this.b=!0 +var s=this.a +s===$&&A.b() +s.m()}, +wG(a,b){var s,r,q,p,o=A.lV(),n=o.c +if(n===$){s=A.be(self.document,"flt-canvas-container") +o.c!==$&&A.ay() +n=o.c=new A.lU(s)}o=n.HS(new A.G(a,b)).a +s=o.getCanvas() +s.clear(A.aD4($.a60(),B.n)) +r=this.a +r===$&&A.b() +r=r.a +r.toString +s.drawPicture(r) +q=o.makeImageSnapshot() +o=$.bx.bn().AlphaType.Premul +r=$.bx.bn().ColorType.RGBA_8888 +p=A.b_H(o,self.window.flutterCanvasKit.ColorSpace.SRGB,r,b,a) +r=q.readPixels(0,0,p) +r=$.bx.bn().MakeImage(p,r,4*a) +if(r==null)throw A.c(A.Q("Unable to convert image pixels into SkImage.")) +return A.a98(r,null)}} +A.ot.prototype={ +uK(a){var s=new self.window.flutterCanvasKit.PictureRecorder() +this.a=s +return this.b=new A.iw(s.beginRecording(A.fM(a),!0))}, +mR(){var s,r,q,p=this.a +if(p==null)throw A.c(A.Q("PictureRecorder is not recording")) +s=p.finishRecordingAsPicture() +p.delete() +this.a=null +r=new A.MW() +q=new A.eF("Picture",t.R) +q.h0(r,s,"Picture",t.e) +r.a!==$&&A.bS() +r.a=q +return r}, +gXL(){return this.a!=null}} +A.akl.prototype={ +aot(a){var s,r,q,p +try{p=a.b +if(p.ga7(p))return +s=A.lV().a.U_(p) +$.aEJ().x=p +r=new A.iw(s.a.a.getCanvas()) +r.a.clear(A.aD4($.a60(),B.n)) +q=new A.adv(r,null,$.aEJ()) +q.auH(a,!0) +p=A.lV().a +if(!p.ax)$.e9.bn().c.prepend(p.x) +p.ax=!0 +J.aV_(s) +$.aEJ().a1R(0)}finally{this.ahA()}}, +ahA(){var s,r +for(s=this.b,r=0;!1;++r)s[r].$0() +for(s=$.j9,r=0;rq.a||a.b>q.b +else r=!1 +if(r){p=a.S(0,1.4) +r=j.a +if(r!=null)r.m() +j.a=null +r=j.y +r.toString +o=p.a +A.vY(r,o) +r=j.y +r.toString +n=p.b +A.vX(r,n) +j.ay=p +j.z=B.c.dk(o) +j.Q=B.c.dk(n) +j.zm()}}if(j.b||j.ay==null){r=j.a +if(r!=null)r.m() +j.a=null +j.ax=!1 +r=j.f +if(r!=null)r.releaseResourcesAndAbandonContext() +r=j.f +if(r!=null)r.delete() +j.f=null +r=j.y +if(r!=null){A.f7(r,i,j.e,!1) +r=j.y +r.toString +A.f7(r,h,j.d,!1) +j.y.remove() +j.d=j.e=null}j.z=B.c.dk(a.a) +r=B.c.dk(a.b) +j.Q=r +m=j.y=A.zO(r,j.z) +r=A.aA("true") +if(r==null)r=t.K.a(r) +m.setAttribute("aria-hidden",r) +A.x(m.style,"position","absolute") +j.zm() +r=t.e +j.e=r.a(A.bM(j.ga8D())) +o=r.a(A.bM(j.ga8B())) +j.d=o +A.cE(m,h,o,!1) +A.cE(m,i,j.e,!1) +j.c=j.b=!1 +o=$.dl +if((o==null?$.dl=A.j8():o)!==-1){o=$.cR +o=!(o==null?$.cR=A.hk(self.window.flutterConfiguration):o).gUV()}else o=!1 +if(o){o=$.bx.bn() +n=$.dl +if(n==null)n=$.dl=A.j8() +l=j.r=B.c.V(o.GetWebGLContext(m,r.a({antialias:0,majorVersion:n}))) +if(l!==0){j.f=$.bx.bn().MakeGrContext(l) +if(j.as===-1||j.at===-1){r=j.y +r.toString +o=$.dl +k=A.aWK(r,o==null?$.dl=A.j8():o) +j.as=B.c.V(k.getParameter(B.c.V(k.SAMPLES))) +j.at=B.c.V(k.getParameter(B.c.V(k.STENCIL_BITS)))}j.Sy()}}j.x.append(m) +j.ay=a}else{$.cZ() +r=$.c4().d +if(r==null){r=self.window.devicePixelRatio +if(r===0)r=1}if(r!==j.CW)j.zm()}$.cZ() +r=$.c4().d +if(r==null){r=self.window.devicePixelRatio +if(r===0)r=1}j.CW=r +j.ch=a +j.T0() +r=j.a +if(r!=null)r.m() +return j.a=j.a8S(a)}, +zm(){var s,r,q,p,o=this.z +$.cZ() +s=$.c4() +r=s.d +if(r==null){r=self.window.devicePixelRatio +if(r===0)r=1}q=this.Q +s=s.d +if(s==null){s=self.window.devicePixelRatio +if(s===0)s=1}p=this.y.style +A.x(p,"width",A.h(o/r)+"px") +A.x(p,"height",A.h(q/s)+"px")}, +T0(){var s,r=B.c.dk(this.ch.b),q=this.Q +$.cZ() +s=$.c4().d +if(s==null){s=self.window.devicePixelRatio +if(s===0)s=1}A.x(this.y.style,"transform","translate(0, -"+A.h((q-r)/s)+"px)")}, +a8E(a){this.c=!1 +$.b8().Jf() +a.stopPropagation() +a.preventDefault()}, +a8C(a){var s=this,r=A.lV() +s.c=!0 +if(r.arT(s)){s.b=!0 +a.preventDefault()}else s.m()}, +a8S(a){var s,r=this,q=$.dl +if((q==null?$.dl=A.j8():q)===-1){q=r.y +q.toString +return r.yx(q,"WebGL support not detected")}else{q=$.cR +if((q==null?$.cR=A.hk(self.window.flutterConfiguration):q).gUV()){q=r.y +q.toString +return r.yx(q,"CPU rendering forced by application")}else if(r.r===0){q=r.y +q.toString +return r.yx(q,"Failed to initialize WebGL context")}else{q=$.bx.bn() +s=r.f +s.toString +s=A.ai(q,"MakeOnScreenGLSurface",[s,B.c.Zx(a.a),B.c.Zx(a.b),self.window.flutterCanvasKit.ColorSpace.SRGB,r.as,r.at]) +if(s==null){q=r.y +q.toString +return r.yx(q,"Failed to initialize WebGL surface")}return new A.MY(s,r.r)}}}, +yx(a,b){if(!$.aNm){$.e7().$1("WARNING: Falling back to CPU-only rendering. "+b+".") +$.aNm=!0}return new A.MY($.bx.bn().MakeSWCanvasSurface(a),null)}, +m(){var s=this,r=s.y +if(r!=null)A.f7(r,"webglcontextlost",s.d,!1) +r=s.y +if(r!=null)A.f7(r,"webglcontextrestored",s.e,!1) +s.e=s.d=null +s.x.remove() +r=s.a +if(r!=null)r.m()}} +A.apz.prototype={ +$2(a,b){this.a.a.a.flush() +return!0}, +$S:617} +A.MY.prototype={ +m(){if(this.c)return +this.a.dispose() +this.c=!0}} +A.Ue.prototype={ +a0n(){var s,r=this,q=r.e,p=q.length +if(p!==0){s=q.pop() +r.d.push(s) +return s}else{q=r.d +if(q.length+p+1>>0 +if((s|2)===s)r=(r|B.c.V($.bx.bn().OverlineDecoration))>>>0 +if((s|4)===s)r=(r|B.c.V($.bx.bn().LineThroughDecoration))>>>0 +b2.decoration=r}if(b!=null)b2.decorationThickness=b +if(d!=null){s=A.zX(d) +b2.decorationColor=s}if(c!=null)b2.decorationStyle=$.aU3()[c.a] +if(a1!=null)b2.textBaseline=$.aJ7()[a1.a] +if(a2!=null)A.aNa(b2,a2) +if(a3!=null)b2.letterSpacing=a3 +if(a4!=null)b2.wordSpacing=a4 +if(a5!=null)A.aNc(b2,a5) +switch(g.ax){case null:case void 0:break +case B.C:A.aNb(b2,!0) +break +case B.m0:A.aNb(b2,!1) +break}if(a6!=null){s=a6.Ra("-") +b2.locale=s}q=g.dx +if(q===$){p=A.aHU(g.x,g.y) +g.dx!==$&&A.ay() +g.dx=p +q=p}A.aN9(b2,q) +if(a!=null||a0!=null)b2.fontStyle=A.aIF(a,a0) +if(a8!=null){g=A.zX(new A.m(a8.y)) +b2.foregroundColor=g}if(a9!=null){o=A.a([],t.J) +for(g=a9.length,n=0;n")),r=r.h("B.E");p.q();){q=p.d +if(q==null)q=r.a(q) +if(s>=q.startIndex&&s<=q.endIndex)return new A.ce(B.c.V(q.startIndex),B.c.V(q.endIndex))}return B.c2}, +qx(){var s,r,q,p=this.a +p===$&&A.b() +p=J.l1(p.a.getLineMetrics(),t.e) +s=A.a([],t.ER) +for(r=p.$ti,p=new A.bu(p,p.gu(p),r.h("bu")),r=r.h("B.E");p.q();){q=p.d +s.push(new A.MP(q==null?r.a(q):q))}return s}, +m(){var s=this.a +s===$&&A.b() +s.m() +this.as=!0}} +A.MP.prototype={ +gUv(){return this.a.ascent}, +gI5(){return this.a.descent}, +ga_0(){return this.a.ascent}, +gX8(){return this.a.isHardBreak}, +gkt(){return this.a.baseline}, +gbh(a){var s=this.a +return B.c.an(s.ascent+s.descent)}, +gjb(a){return this.a.left}, +gbB(a){return this.a.width}, +gJq(a){return B.c.V(this.a.lineNumber)}, +$ip4:1} +A.a9b.prototype={ +zF(a,b,c,d,e){var s;++this.c +this.d.push(1) +s=e==null?b:e +A.ai(this.a,"addPlaceholder",[a,b,$.aTY()[c.a],$.aJ7()[0],s])}, +U9(a,b,c){return this.zF(a,b,c,null,null)}, +qc(a){var s=A.a([],t.s),r=B.b.gO(this.e),q=r.x +if(q!=null)s.push(q) +q=r.y +if(q!=null)B.b.E(s,q) +$.W().grb().gIN().ape(a,s) +this.a.addText(a)}, +bk(){var s,r,q,p,o,n,m,l,k,j="Paragraph" +if($.aTf()){s=this.a +r=B.a2.eA(0,new A.fu(s.getText())) +q=A.b_n($.aUu(),r) +p=q==null +o=p?null:q.i(0,r) +if(o!=null)n=o +else{m=A.aQF(r,B.p5) +l=A.aQF(r,B.p4) +n=new A.a0H(A.b6h(r),l,m)}if(!p){p=q.c +k=p.i(0,r) +if(k==null)q.MI(0,r,n) +else{m=k.d +if(!J.d(m.b,n)){k.eg(0) +q.MI(0,r,n)}else{k.eg(0) +l=q.b +l.zC(m) +l=l.a.b.xU() +l.toString +p.n(0,r,l)}}}s.setWordsUtf16(n.c) +s.setGraphemeBreaksUtf16(n.b) +s.setLineBreaksUtf16(n.a)}s=this.a +n=s.build() +s.delete() +s=new A.MS(this.b) +r=new A.eF(j,t.R) +r.h0(s,n,j,t.e) +s.a!==$&&A.bS() +s.a=r +return s}, +gYw(){return this.c}, +ev(){var s=this.e +if(s.length<=1)return +s.pop() +this.a.pop()}, +p0(a6){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,a2,a3,a4=this.e,a5=B.b.gO(a4) +t.BQ.a(a6) +s=a6.a +if(s==null)s=a5.a +r=a6.b +if(r==null)r=a5.b +q=a6.c +if(q==null)q=a5.c +p=a6.d +if(p==null)p=a5.d +o=a6.e +if(o==null)o=a5.e +n=a6.f +if(n==null)n=a5.f +m=a6.r +if(m==null)m=a5.r +l=a6.w +if(l==null)l=a5.w +k=a6.x +if(k==null)k=a5.x +j=a6.y +if(j==null)j=a5.y +i=a6.z +if(i==null)i=a5.z +h=a6.Q +if(h==null)h=a5.Q +g=a6.as +if(g==null)g=a5.as +f=a6.at +if(f==null)f=a5.at +e=a6.ax +if(e==null)e=a5.ax +d=a6.ay +if(d==null)d=a5.ay +c=a6.ch +if(c==null)c=a5.ch +b=a6.CW +if(b==null)b=a5.CW +a=a6.cx +if(a==null)a=a5.cx +a0=a6.db +if(a0==null)a0=a5.db +a1=A.aFl(c,s,r,q,p,o,k,j,a5.cy,i,m,a0,n,b,f,e,h,d,a,l,g) +a4.push(a1) +a4=a1.CW +s=a4==null +if(!s||a1.ch!=null){a2=s?null:a4.a +if(a2==null){a2=$.aRS() +a4=a1.a +a4=a4==null?null:a4.gl(a4) +if(a4==null)a4=4278190080 +a2.setColorInt(a4)}a4=a1.ch +a3=a4==null?null:a4.a +if(a3==null)a3=$.aRR() +this.a.pushPaintStyle(a1.gLM(),a2,a3)}else this.a.pushStyle(a1.gLM())}} +A.aCM.prototype={ +$1(a){return this.a===a}, +$S:36} +A.CG.prototype={ +I(){return"IntlSegmenterGranularity."+this.b}} +A.My.prototype={ +k(a){return"CanvasKitError: "+this.a}} +A.MZ.prototype={ +m(){var s=this.f +s===$&&A.b() +s.m()}} +A.a9e.prototype={ +$1(a){return a<0||a>=this.a.length}, +$S:34} +A.B6.prototype={ +a0W(a,b){var s={} +s.a=!1 +this.a.t9(0,A.dk(J.bq(a.b,"text"))).ba(new A.a9y(s,b),t.P).o2(new A.a9z(s,b))}, +a_V(a){this.b.rV(0).ba(new A.a9t(a),t.P).o2(new A.a9u(this,a))}, +aqZ(a){this.b.rV(0).ba(new A.a9w(a),t.P).o2(new A.a9x(a))}} +A.a9y.prototype={ +$1(a){var s=this.b +if(a){s.toString +s.$1(B.ac.cq([!0]))}else{s.toString +s.$1(B.ac.cq(["copy_fail","Clipboard.setData failed",null])) +this.a.a=!0}}, +$S:105} +A.a9z.prototype={ +$1(a){var s +if(!this.a.a){s=this.b +s.toString +s.$1(B.ac.cq(["copy_fail","Clipboard.setData failed",null]))}}, +$S:37} +A.a9t.prototype={ +$1(a){var s=A.aY(["text",a],t.N,t.z),r=this.a +r.toString +r.$1(B.ac.cq([s]))}, +$S:232} +A.a9u.prototype={ +$1(a){var s +if(a instanceof A.uz){A.Ch(B.z,null,t.H).ba(new A.a9s(this.b),t.P) +return}s=this.b +A.v7("Could not get text from clipboard: "+A.h(a)) +s.toString +s.$1(B.ac.cq(["paste_fail","Clipboard.getData failed",null]))}, +$S:37} +A.a9s.prototype={ +$1(a){var s=this.a +if(s!=null)s.$1(null)}, +$S:29} +A.a9w.prototype={ +$1(a){var s=A.aY(["value",a.length!==0],t.N,t.z),r=this.a +r.toString +r.$1(B.ac.cq([s]))}, +$S:232} +A.a9x.prototype={ +$1(a){var s,r +if(a instanceof A.uz){A.Ch(B.z,null,t.H).ba(new A.a9v(this.a),t.P) +return}s=A.aY(["value",!1],t.N,t.z) +r=this.a +r.toString +r.$1(B.ac.cq([s]))}, +$S:37} +A.a9v.prototype={ +$1(a){var s=this.a +if(s!=null)s.$1(null)}, +$S:29} +A.a9p.prototype={ +t9(a,b){return this.a0V(0,b)}, +a0V(a,b){var s=0,r=A.a1(t.y),q,p=2,o,n,m,l,k +var $async$t9=A.a2(function(c,d){if(c===1){o=d +s=p}while(true)switch(s){case 0:p=4 +m=self.window.navigator.clipboard +m.toString +b.toString +s=7 +return A.a7(A.jd(m.writeText(b),t.z),$async$t9) +case 7:p=2 +s=6 +break +case 4:p=3 +k=o +n=A.ax(k) +A.v7("copy is not successful "+A.h(n)) +m=A.d5(!1,t.y) +q=m +s=1 +break +s=6 +break +case 3:s=2 +break +case 6:q=A.d5(!0,t.y) +s=1 +break +case 1:return A.a_(q,r) +case 2:return A.Z(o,r)}}) +return A.a0($async$t9,r)}} +A.a9q.prototype={ +rV(a){var s=0,r=A.a1(t.N),q +var $async$rV=A.a2(function(b,c){if(b===1)return A.Z(c,r) +while(true)switch(s){case 0:q=A.jd(self.window.navigator.clipboard.readText(),t.N) +s=1 +break +case 1:return A.a_(q,r)}}) +return A.a0($async$rV,r)}} +A.acw.prototype={ +t9(a,b){return A.d5(this.aid(b),t.y)}, +aid(a){var s,r,q,p,o="-99999px",n="transparent",m=A.be(self.document,"textarea"),l=m.style +A.x(l,"position","absolute") +A.x(l,"top",o) +A.x(l,"left",o) +A.x(l,"opacity","0") +A.x(l,"color",n) +A.x(l,"background-color",n) +A.x(l,"background",n) +self.document.body.append(m) +s=m +A.aKx(s,a) +s.focus() +s.select() +r=!1 +try{r=self.document.execCommand("copy") +if(!r)A.v7("copy is not successful")}catch(p){q=A.ax(p) +A.v7("copy is not successful "+A.h(q))}finally{s.remove()}return r}} +A.acx.prototype={ +rV(a){return A.aFY(new A.uz("Paste is not implemented for this browser."),null,t.N)}} +A.Na.prototype={ +I(){return"ColorFilterType."+this.b}} +A.Oe.prototype={ +k(a){var s=this +switch(s.d.a){case 0:return"ColorFilter.mode("+A.h(s.a)+", "+A.h(s.b)+")" +case 1:return"ColorFilter.matrix("+A.h(s.c)+")" +case 2:return"ColorFilter.linearToSrgbGamma()" +case 3:return"ColorFilter.srgbToLinearGamma()"}}} +A.acS.prototype={ +gUV(){var s=this.b +if(s==null)s=null +else{s=s.canvasKitForceCpuOnly +if(s==null)s=null}return s===!0}, +ganN(){var s=this.b +if(s==null)s=null +else{s=s.debugShowSemanticsNodes +if(s==null)s=null}return s===!0}, +gZm(){var s=this.b +if(s==null)s=null +else{s=s.renderer +if(s==null)s=null}if(s==null){s=self.window.flutterWebRenderer +if(s==null)s=null}return s}} +A.Of.prototype={} +A.ani.prototype={ +xo(a){return this.a11(a)}, +a11(a){var s=0,r=A.a1(t.y),q,p=2,o,n,m,l,k,j,i +var $async$xo=A.a2(function(b,c){if(b===1){o=c +s=p}while(true)switch(s){case 0:j=self.window.screen +s=j!=null?3:4 +break +case 3:n=j.orientation +s=n!=null?5:6 +break +case 5:l=J.aF(a) +s=l.ga7(a)?7:9 +break +case 7:n.unlock() +q=!0 +s=1 +break +s=8 +break +case 9:m=A.b_c(A.dk(l.gL(a))) +s=m!=null?10:11 +break +case 10:p=13 +s=16 +return A.a7(A.jd(n.lock(m),t.z),$async$xo) +case 16:q=!0 +s=1 +break +p=2 +s=15 +break +case 13:p=12 +i=o +l=A.d5(!1,t.y) +q=l +s=1 +break +s=15 +break +case 12:s=2 +break +case 15:case 11:case 8:case 6:case 4:q=!1 +s=1 +break +case 1:return A.a_(q,r) +case 2:return A.Z(o,r)}}) +return A.a0($async$xo,r)}} +A.aaO.prototype={ +$1(a){return this.a.warn(a)}, +$S:12} +A.aaR.prototype={ +$1(a){a.toString +return A.bQ(a)}, +$S:226} +A.Pl.prototype={ +gb6(a){return A.el(this.b.status)}, +gJ1(){var s=this.b,r=A.el(s.status)>=200&&A.el(s.status)<300,q=A.el(s.status),p=A.el(s.status),o=A.el(s.status)>307&&A.el(s.status)<400 +return r||q===0||p===304||o}, +gBX(){var s=this +if(!s.gJ1())throw A.c(new A.Pk(s.a,s.gb6(s))) +return new A.afj(s.b)}, +$iaLh:1} +A.afj.prototype={ +C8(a,b,c){var s=0,r=A.a1(t.H),q=this,p,o,n +var $async$C8=A.a2(function(d,e){if(d===1)return A.Z(e,r) +while(true)switch(s){case 0:n=q.a.body.getReader() +p=t.e +case 2:if(!!0){s=3 +break}s=4 +return A.a7(A.jd(n.read(),p),$async$C8) +case 4:o=e +if(o.done){s=3 +break}b.$1(c.a(o.value)) +s=2 +break +case 3:return A.a_(null,r)}}) +return A.a0($async$C8,r)}, +qj(){var s=0,r=A.a1(t.pI),q,p=this,o +var $async$qj=A.a2(function(a,b){if(a===1)return A.Z(b,r) +while(true)switch(s){case 0:s=3 +return A.a7(A.jd(p.a.arrayBuffer(),t.X),$async$qj) +case 3:o=b +o.toString +q=t.pI.a(o) +s=1 +break +case 1:return A.a_(q,r)}}) +return A.a0($async$qj,r)}} +A.Pk.prototype={ +k(a){return'Flutter Web engine failed to fetch "'+this.a+'". HTTP request succeeded, but the server responded with HTTP status '+this.b+"."}, +$ic2:1} +A.Pj.prototype={ +k(a){return'Flutter Web engine failed to complete HTTP request to fetch "'+this.a+'": '+A.h(this.b)}, +$ic2:1} +A.O_.prototype={} +A.By.prototype={} +A.aDx.prototype={ +$2(a,b){this.a.$2(J.l1(a,t.e),b)}, +$S:330} +A.aDe.prototype={ +$1(a){var s=A.eW(a,0,null) +if(B.Xi.p(0,B.b.gO(s.grB())))return s.k(0) +self.window.console.error("URL rejected by TrustedTypes policy flutter-engine: "+a+"(download prevented)") +return null}, +$S:343} +A.XK.prototype={ +q(){var s=++this.b,r=this.a +if(s>r.length)throw A.c(A.Q("Iterator out of bounds")) +return s"))}, +gu(a){return B.c.V(this.a.length)}} +A.XP.prototype={ +q(){var s=++this.b,r=this.a +if(s>r.length)throw A.c(A.Q("Iterator out of bounds")) +return s"))}, +gu(a){return B.c.V(this.a.length)}} +A.NY.prototype={ +gJ(a){var s=this.b +s===$&&A.b() +return s}, +q(){var s=this.a.next() +if(s.done)return!1 +this.b=this.$ti.c.a(s.value) +return!0}} +A.OS.prototype={ +Ue(a){var s,r=this +if(!J.d(a,r.e)){s=r.e +if(s!=null)s.remove() +r.e=a +s=r.b +s.toString +a.toString +s.append(a)}}, +gaaX(){var s=this.w +s===$&&A.b() +return s}, +a_7(){var s,r=this.d.style +$.cZ() +s=$.c4().d +if(s==null){s=self.window.devicePixelRatio +if(s===0)s=1}A.x(r,"transform","scale("+A.h(1/s)+")")}, +aeW(a){var s +this.a_7() +s=$.e6() +if(!B.lE.p(0,s)&&!$.cZ().arY()&&$.a62().c){$.cZ().V8(!0) +$.b8().Jf()}else{s=$.cZ() +s.o8() +s.V8(!1) +$.b8().Jf()}}, +Ua(a){var s,r=this,q=$.cz(),p=r.c +if(p==null){s=A.be(self.document,"flt-svg-filters") +A.x(s.style,"visibility","hidden") +if(q===B.W){q=r.f +q===$&&A.b() +r.a.Uy(s,q)}else{q=r.w +q===$&&A.b() +q.insertBefore(s,q.firstChild)}r.c=s +q=s}else q=p +q.append(a)}, +rG(a){if(a==null)return +a.remove()}} +A.ac9.prototype={} +A.T2.prototype={} +A.u_.prototype={} +A.a1y.prototype={} +A.amY.prototype={ +bH(a){var s,r,q=this,p=q.vB$ +p=p.length===0?q.a:B.b.gO(p) +s=q.lB$ +r=new A.bU(new Float32Array(16)) +r.aW(s) +q.WF$.push(new A.a1y(p,r))}, +b_(a){var s,r,q,p=this,o=p.WF$ +if(o.length===0)return +s=o.pop() +p.lB$=s.b +o=p.vB$ +r=s.a +q=p.a +while(!0){if(!!J.d(o.length===0?q:B.b.gO(o),r))break +o.pop()}}, +au(a,b,c){this.lB$.au(0,b,c)}, +ei(a,b,c){this.lB$.ei(0,b,c)}, +lY(a,b){this.lB$.Zw(0,B.zu,b)}, +a2(a,b){this.lB$.cP(0,new A.bU(b))}} +A.aEw.prototype={ +$1(a){$.aHS=!1 +$.b8().jS("flutter/system",$.aTj(),new A.aEv())}, +$S:38} +A.aEv.prototype={ +$1(a){}, +$S:33} +A.ade.prototype={ +ape(a,b){var s,r,q,p,o,n=this,m=A.aS(t.S) +for(s=new A.SY(a),r=n.d,q=n.c;s.q();){p=s.d +if(!(p<160||r.p(0,p)||q.p(0,p)))m.D(0,p)}if(m.a===0)return +o=A.V(m,!0,m.$ti.c) +if(n.a.a03(o,b).length!==0)n.akW(o)}, +akW(a){var s=this +s.at.E(0,a) +if(!s.ax){s.ax=!0 +s.Q=A.Ch(B.z,new A.adm(s),t.H)}}, +a9P(){var s,r +this.ax=!1 +s=this.at +if(s.a===0)return +r=A.V(s,!0,A.o(s).c) +s.a0(0) +this.apF(r)}, +apF(a){var s,r,q,p,o,n,m,l,k,j,i,h,g,f=this,e=A.a([],t.t),d=A.a([],t._m),c=t.Qg,b=A.a([],c) +for(s=a.length,r=t.Ie,q=0;qr){B.b.a0(k) +k.push(o) +r=o.e +q=o}else if(n===r){k.push(o) +if(o.d1)if(B.b.qX(k,new A.adl(l))){s=self.window.navigator.language +if(s==="zh-Hans"||s==="zh-CN"||s==="zh-SG"||s==="zh-MY"){m=l.f +if(B.b.p(k,m))q=m}else if(s==="zh-Hant"||s==="zh-TW"||s==="zh-MO"){m=l.r +if(B.b.p(k,m))q=m}else if(s==="zh-HK"){m=l.w +if(B.b.p(k,m))q=m}else if(s==="ja"){m=l.x +if(B.b.p(k,m))q=m}else if(s==="ko"){m=l.y +if(B.b.p(k,m))q=m}else{m=l.f +if(B.b.p(k,m))q=m}}else{m=l.z +if(B.b.p(k,m))q=m +else{m=l.f +if(B.b.p(k,m))q=m}}q.toString +return q}, +a8Z(a){var s,r,q,p=A.a([],t._m) +for(s=a.split(","),r=s.length,q=0;q=q[r])s=r+1 +else p=r}}} +A.Ou.prototype={ +aw3(){var s=this.f +if(s==null)return A.d5(null,t.H) +else return s.a}, +D(a,b){var s,r,q=this +if(q.c.p(0,b)||q.d.ai(0,b.b))return +s=q.d +r=s.a +s.n(0,b.b,b) +if(q.f==null)q.f=new A.bI(new A.aD($.aw,t.d),t.gR) +if(r===0)A.cy(B.z,q.ga1J())}, +pq(){var s=0,r=A.a1(t.H),q=this,p,o,n,m,l,k,j,i +var $async$pq=A.a2(function(a,b){if(a===1)return A.Z(b,r) +while(true)switch(s){case 0:j=A.A(t.N,t.uz) +i=A.a([],t.s) +for(p=q.d,o=p.gaT(p),n=A.o(o),n=n.h("@<1>").N(n.z[1]),o=new A.bN(J.ap(o.a),o.b,n.h("bN<1,2>")),m=t.H,n=n.z[1];o.q();){l=o.a +if(l==null)l=n.a(l) +j.n(0,l.b,A.aXA(new A.acD(q,l,i),m))}s=2 +return A.a7(A.oJ(j.gaT(j),m),$async$pq) +case 2:B.b.jr(i) +for(o=i.length,n=q.a,m=n.as,k=0;k").N(s.z[1]),o=new A.bN(J.ap(o.a),o.b,s.h("bN<1,2>")),s=s.z[1];o.q();){r=o.a +for(r=J.ap(r==null?s.a(r):r);r.q();){q=r.gJ(r) +q.b.$1(q.a)}}p.b=p.a +p.a=null}, +MR(a,b){var s,r=this,q=r.a +if(q==null)q=r.a=A.A(t.N,r.$ti.h("v>")) +s=q.i(0,a) +if(s==null){s=A.a([],r.$ti.h("q>")) +q.n(0,a,s) +q=s}else q=s +q.push(b)}, +av6(a){var s,r,q=this.b +if(q==null)return null +s=q.i(0,a) +if(s==null||s.length===0)return null +r=(s&&B.b).fz(s,0) +this.MR(a,r) +return r.a}} +A.yO.prototype={} +A.DV.prototype={ +gh5(){return this.cx}, +nW(a){var s=this +s.ts(a) +s.cx=a.cx +s.cy=a.cy +s.db=a.db +a.cx=null}, +bI(a){var s,r=this,q="transform-origin",p=r.lt("flt-backdrop") +A.x(p.style,q,"0 0 0") +s=A.be(self.document,"flt-backdrop-interior") +r.cx=s +A.x(s.style,"position","absolute") +s=r.lt("flt-backdrop-filter") +r.cy=s +A.x(s.style,q,"0 0 0") +s=r.cy +s.toString +p.append(s) +s=r.cx +s.toString +p.append(s) +return p}, +j_(){var s=this +s.pz() +$.en.rG(s.db) +s.cy=s.cx=s.db=null}, +en(){var s,r,q,p,o,n,m,l,k,j,i,h,g=this,f=t.m1.a(g.CW) +$.en.rG(g.db) +g.db=null +s=g.fr +r=g.f +if(s!=r){r.toString +q=new A.bU(new Float32Array(16)) +if(q.fL(r)===0)A.T(A.hL(r,"other","Matrix cannot be inverted")) +g.dy=q +g.fr=g.f}s=$.cZ() +p=$.c4().d +if(p==null){r=self.window.devicePixelRatio +p=r===0?1:r}r=g.dy +r===$&&A.b() +o=A.aEF(r,new A.w(0,0,s.gjd().a*p,s.gjd().b*p)) +n=o.a +m=o.b +l=o.c-n +k=o.d-m +j=g.e +for(;j!=null;){if(j.gvV()){i=g.dx=j.w +n=i.a +m=i.b +l=i.c-n +k=i.d-m +break}j=j.e}h=g.cy.style +A.x(h,"position","absolute") +A.x(h,"left",A.h(n)+"px") +A.x(h,"top",A.h(m)+"px") +A.x(h,"width",A.h(l)+"px") +A.x(h,"height",A.h(k)+"px") +s=$.cz() +if(s===B.bO){A.x(h,"background-color","#000") +A.x(h,"opacity","0.2")}else{if(s===B.W){s=g.cy +s.toString +A.dY(s,"-webkit-backdrop-filter",f.gAM())}s=g.cy +s.toString +A.dY(s,"backdrop-filter",f.gAM())}}, +bw(a,b){var s=this +s.lc(0,b) +if(!s.CW.j(0,b.CW))s.en() +else s.Ns()}, +Ns(){var s=this.e +for(;s!=null;){if(s.gvV()){if(!J.d(s.w,this.dx))this.en() +break}s=s.e}}, +kY(){this.a33() +this.Ns()}, +$ia6T:1} +A.mu.prototype={ +sqn(a,b){var s,r,q=this +q.a=b +s=B.c.dP(b.a)-1 +r=B.c.dP(q.a.b)-1 +if(q.z!==s||q.Q!==r){q.z=s +q.Q=r +q.Ty()}}, +Ty(){A.x(this.c.style,"transform","translate("+this.z+"px, "+this.Q+"px)")}, +Sd(){var s=this,r=s.a,q=r.a +r=r.b +s.d.au(0,-q+(q-1-s.z)+1,-r+(r-1-s.Q)+1)}, +Wc(a,b){return this.r>=A.a7K(a.c-a.a)&&this.w>=A.a7J(a.d-a.b)&&this.ay===b}, +a0(a){var s,r,q,p,o,n=this +n.at=!1 +n.d.a0(0) +s=n.f +r=s.length +for(q=n.c,p=0;po){l=o +o=p +p=l}if(n>m){l=m +m=n +n=l}k=Math.abs(a2.r) +j=Math.abs(a2.e) +i=Math.abs(a2.w) +h=Math.abs(a2.f) +g=Math.abs(a2.z) +f=Math.abs(a2.x) +e=Math.abs(a2.Q) +d=Math.abs(a2.y) +b.beginPath() +b.moveTo(p+k,n) +a=o-k +b.lineTo(a,n) +A.Lb(b,a,n+i,k,i,0,4.71238898038469,6.283185307179586,!1) +a=m-d +b.lineTo(o,a) +A.Lb(b,o-f,a,f,d,0,0,1.5707963267948966,!1) +a=p+g +b.lineTo(a,m) +A.Lb(b,a,m-e,g,e,0,1.5707963267948966,3.141592653589793,!1) +a=n+h +b.lineTo(p,a) +A.Lb(b,p+j,a,j,h,0,3.141592653589793,4.71238898038469,!1) +a1.gcL().hi(c) +a1.gcL().m_()}}, +qO(a,b){var s,r,q,p,o,n,m=this.d +if(this.zs(b)){a=A.L9(a,b) +s=A.La(a,b,"draw-oval",m.c) +m=a.a +r=a.b +this.tN(s,new A.k(m,r),b) +A.x(s.style,"border-radius",A.h((a.c-m)/2)+"px / "+A.h((a.d-r)/2)+"px")}else{m.gcL().l6(b,a) +r=b.b +m.gaS(m).beginPath() +q=m.gcL().Q +p=q==null +o=p?a.gaK().a:a.gaK().a-q.a +n=p?a.gaK().b:a.gaK().b-q.b +A.Lb(m.gaS(m),o,n,(a.c-a.a)/2,(a.d-a.b)/2,0,0,6.283185307179586,!1) +m.gcL().hi(r) +m.gcL().m_()}}, +du(a,b,c){var s,r,q,p,o,n,m,l,k=this +if(k.GT(c)){s=A.L9(A.hv(a,b),c) +r=A.La(s,c,"draw-circle",k.d.c) +k.tN(r,new A.k(s.a,s.b),c) +A.x(r.style,"border-radius","50%")}else{q=c.w!=null?A.hv(a,b):null +p=k.d +p.gcL().l6(c,q) +q=c.b +p.gaS(p).beginPath() +o=p.gcL().Q +n=o==null +m=a.a +m=n?m:m-o.a +l=a.b +l=n?l:l-o.b +A.Lb(p.gaS(p),m,l,b,b,0,0,6.283185307179586,!1) +p.gcL().hi(q) +p.gcL().m_()}}, +bP(a,b){var s,r,q,p,o,n,m,l,k,j,i,h=this +if(h.zs(b)){s=h.d +r=s.c +t.Ci.a(a) +q=a.a.La() +if(q!=null){h.cB(q,b) +return}p=a.a +o=p.ax?p.Pb():null +if(o!=null){h.bQ(o,b) +return}n=A.aQq() +p=A.aA("visible") +if(p==null)p=t.K.a(p) +n.setAttribute("overflow",p) +p=self.document.createElementNS("http://www.w3.org/2000/svg","path") +n.append(p) +m=b.b +if(m!==B.D)if(m!==B.a4){m=b.c +m=m!==0&&m!=null}else m=!1 +else m=!0 +l=b.r +if(m){m=A.aA(A.dm(l)) +if(m==null)m=t.K.a(m) +p.setAttribute("stroke",m) +m=b.c +m=A.aA(A.h(m==null?1:m)) +if(m==null)m=t.K.a(m) +p.setAttribute("stroke-width",m) +m=b.d +if(m!=null){m=A.aA(A.h(A.aRE(m))) +if(m==null)m=t.K.a(m) +p.setAttribute("stroke-linecap",m)}m=A.aA("none") +if(m==null)m=t.K.a(m) +p.setAttribute("fill",m)}else{m=A.aA(A.dm(l)) +if(m==null)m=t.K.a(m) +p.setAttribute("fill",m)}if(a.b===B.d6){m=A.aA("evenodd") +if(m==null)m=t.K.a(m) +p.setAttribute("fill-rule",m)}m=A.aA(A.aRk(a.a,0,0)) +if(m==null)m=t.K.a(m) +p.setAttribute("d",m) +if(s.b==null){k=n.style +A.x(k,"position","absolute") +if(!r.vX(0)){A.x(k,"transform",A.jV(r.a)) +A.x(k,"transform-origin","0 0 0")}}if(b.x!=null){s=b.b +j=A.dm(b.r) +i=b.x.b +p=$.cz() +if(p===B.W&&s!==B.D)A.x(n.style,"box-shadow","0px 0px "+A.h(i*2)+"px "+j) +else A.x(n.style,"filter","blur("+A.h(i)+"px)")}h.tN(n,B.e,b)}else{s=b.w!=null?a.ho(0):null +p=h.d +p.gcL().l6(b,s) +s=b.b +if(s==null&&b.c!=null)p.bP(a,B.D) +else p.bP(a,s) +p.gcL().m_()}}, +of(a,b,c,d){var s,r,q,p,o,n=this.d,m=A.b5n(a.ho(0),c) +if(m!=null){s=(B.c.an(0.3*(b.gl(b)>>>24&255))&255)<<24|b.gl(b)&16777215 +r=A.b5h(s>>>16&255,s>>>8&255,s&255,255) +n.gaS(n).save() +q=n.gaS(n) +q.globalAlpha=(s>>>24&255)/255 +if(d){s=$.cz() +s=s!==B.W}else s=!1 +q=m.b +p=m.a +o=q.a +q=q.b +if(s){n.gaS(n).translate(o,q) +A.aFC(n.gaS(n),A.aR2(new A.tg(B.cn,p))) +A.aaN(n.gaS(n),"") +A.aaM(n.gaS(n),r)}else{A.aFC(n.gaS(n),"none") +A.aaN(n.gaS(n),"") +A.aaM(n.gaS(n),r) +n.gaS(n).shadowBlur=p +A.aFE(n.gaS(n),r) +A.aFF(n.gaS(n),o) +A.aFG(n.gaS(n),q)}n.pW(n.gaS(n),a) +A.aaL(n.gaS(n),null) +n.gaS(n).restore()}}, +Gj(a){var s,r,q,p=a.a,o=A.aaP(p) +o.toString +s=this.b +if(s!=null){r=s.av6(o) +if(r!=null)return r}if(!a.b){a.b=!0 +A.x(p.style,"position","absolute")}q=A.aaS(p,!0) +p=this.b +if(p!=null)p.MR(o,new A.yO(q,A.b3h(),p.$ti.h("yO<1>"))) +return q}, +Oq(a,b,c){var s,r,q,p,o,n,m,l,k,j,i,h=this +t.gc.a(a) +s=c.a +r=A.aQo(c.z) +if(r instanceof A.wX)q=h.a8R(a,r.b,r.c,c) +else if(r instanceof A.wV){p=A.aRH(r.b) +o=p.b +h.c.append(o) +h.f.push(o) +q=h.Gj(a) +A.x(q.style,"filter","url(#"+p.a+")")}else q=h.Gj(a) +o=q.style +n=A.aDo(s) +A.x(o,"mix-blend-mode",n==null?"":n) +if(h.ax&&!0){o=h.d +o.gcL().l6(c,null) +o.gaS(o).drawImage(q,b.a,b.b) +o.gcL().m_()}else{o=h.d +if(o.b!=null){n=q.style +n.removeProperty("width") +n.removeProperty("height") +n=o.b +n.toString +m=A.aHN(n,q,b,o.c) +for(o=m.length,n=h.c,l=h.f,k=0;k=6.283185307179586;s=!1){r.ks(0,a,b,3.141592653589793,s) +b+=3.141592653589793 +r.ks(0,a,b,3.141592653589793,!1) +b+=3.141592653589793 +c-=6.283185307179586}r.ks(0,a,b,c,s) +this.a.bP(r,t.Vh.a(e))}, +bP(a,b){this.a.bP(a,t.Vh.a(b))}, +jI(a,b,c,d){var s,r,q=this.a +t.Vh.a(d) +s=q.d +d.b=q.e=s.a=s.c=!0 +r=new A.R0(a,b,c,d.a) +q.a.mc(c,r) +q.c.push(r)}, +mQ(a){this.a.mQ(a)}, +lw(a,b){this.a.lw(a,b)}, +vo(a,b,c){var s,r=this.a +t.Yu.a(a) +t.Vh.a(c) +c.b=r.e=r.d.c=!0 +s=new A.R9(a,b,c.a) +r.aaZ(a.b,0,c,s) +r.c.push(s)}, +of(a,b,c,d){var s,r,q=this.a +q.e=q.d.c=!0 +s=A.b5m(a.ho(0),c) +r=new A.R8(t.Ci.a(a),b,c,d) +q.a.mc(s,r) +q.c.push(r)}} +A.Hz.prototype={ +gh5(){return this.hC$}, +bI(a){var s=this.lt("flt-clip"),r=A.be(self.document,"flt-clip-interior") +this.hC$=r +A.x(r.style,"position","absolute") +r=this.hC$ +r.toString +s.append(r) +return s}, +Un(a,b){var s +if(b!==B.o){s=a.style +A.x(s,"overflow","hidden") +A.x(s,"z-index","0")}}} +A.DX.prototype={ +jf(){var s=this +s.f=s.e.f +if(s.CW!==B.o)s.w=s.cx +else s.w=null +s.r=null}, +bI(a){var s=this.MA(0),r=A.aA("rect") +if(r==null)r=t.K.a(r) +s.setAttribute("clip-type",r) +return s}, +en(){var s,r=this,q=r.d.style,p=r.cx,o=p.a +A.x(q,"left",A.h(o)+"px") +s=p.b +A.x(q,"top",A.h(s)+"px") +A.x(q,"width",A.h(p.c-o)+"px") +A.x(q,"height",A.h(p.d-s)+"px") +p=r.d +p.toString +r.Un(p,r.CW) +p=r.hC$.style +A.x(p,"left",A.h(-o)+"px") +A.x(p,"top",A.h(-s)+"px")}, +bw(a,b){var s=this +s.lc(0,b) +if(!s.cx.j(0,b.cx)||s.CW!==b.CW){s.w=null +s.en()}}, +gvV(){return!0}, +$ia9o:1} +A.Rn.prototype={ +jf(){var s,r=this +r.f=r.e.f +if(r.cx!==B.o){s=r.CW +r.w=new A.w(s.a,s.b,s.c,s.d)}else r.w=null +r.r=null}, +bI(a){var s=this.MA(0),r=A.aA("rrect") +if(r==null)r=t.K.a(r) +s.setAttribute("clip-type",r) +return s}, +en(){var s,r=this,q=r.d.style,p=r.CW,o=p.a +A.x(q,"left",A.h(o)+"px") +s=p.b +A.x(q,"top",A.h(s)+"px") +A.x(q,"width",A.h(p.c-o)+"px") +A.x(q,"height",A.h(p.d-s)+"px") +A.x(q,"border-top-left-radius",A.h(p.e)+"px") +A.x(q,"border-top-right-radius",A.h(p.r)+"px") +A.x(q,"border-bottom-right-radius",A.h(p.x)+"px") +A.x(q,"border-bottom-left-radius",A.h(p.z)+"px") +p=r.d +p.toString +r.Un(p,r.cx) +p=r.hC$.style +A.x(p,"left",A.h(-o)+"px") +A.x(p,"top",A.h(-s)+"px")}, +bw(a,b){var s=this +s.lc(0,b) +if(!s.CW.j(0,b.CW)||s.cx!==b.cx){s.w=null +s.en()}}, +gvV(){return!0}, +$ia9n:1} +A.DW.prototype={ +bI(a){return this.lt("flt-clippath")}, +jf(){var s=this +s.a32() +if(s.cx!==B.o){if(s.w==null)s.w=s.CW.ho(0)}else s.w=null}, +en(){var s=this,r=s.cy +if(r!=null)r.remove() +r=s.d +r.toString +r=A.aQr(r,s.CW) +s.cy=r +s.d.append(r)}, +bw(a,b){var s,r=this +r.lc(0,b) +if(b.CW!==r.CW){r.w=null +s=b.cy +if(s!=null)s.remove() +r.en()}else r.cy=b.cy +b.cy=null}, +j_(){var s=this.cy +if(s!=null)s.remove() +this.cy=null +this.pz()}, +gvV(){return!0}, +$ia9l:1} +A.DY.prototype={ +gh5(){return this.CW}, +nW(a){this.ts(a) +this.CW=a.CW +this.cy=a.cy +a.CW=null}, +oZ(a){++a.a +this.a31(a);--a.a}, +j_(){var s=this +s.pz() +$.en.rG(s.cy) +s.CW=s.cy=null}, +bI(a){var s=this.lt("flt-color-filter"),r=A.be(self.document,"flt-filter-interior") +A.x(r.style,"position","absolute") +this.CW=r +s.append(r) +return s}, +en(){var s,r,q,p=this,o="visibility" +$.en.rG(p.cy) +p.cy=null +s=A.aQo(p.cx) +if(s==null){A.x(p.d.style,"background-color","") +r=p.CW +if(r!=null)A.x(r.style,o,"visible") +return}if(s instanceof A.wX)p.a76(s) +else{r=p.CW +if(s instanceof A.wV){p.cy=s.Jw(r) +r=p.CW.style +q=s.a +A.x(r,"filter",q!=null?"url(#"+q+")":"")}else if(r!=null)A.x(r.style,o,"visible")}}, +a76(a){var s,r=a.Jw(this.CW) +this.cy=r +if(r==null)return +r=this.CW.style +s=a.a +A.x(r,"filter",s!=null?"url(#"+s+")":"")}, +bw(a,b){this.lc(0,b) +if(b.cx!==this.cx)this.en()}, +$ia9C:1} +A.apD.prototype={ +Db(a,b){var s,r,q,p,o=self.document.createElementNS("http://www.w3.org/2000/svg","feColorMatrix"),n=o.type +n.toString +A.amR(n,1) +n=o.result +n.toString +A.xH(n,b) +n=o.values.baseVal +n.toString +for(s=this.b,r=0;r<20;++r){q=s.createSVGNumber() +p=a[r] +q.value=p +n.appendItem(q)}this.c.append(o)}, +pm(a,b,c){var s=self.document.createElementNS("http://www.w3.org/2000/svg","feFlood"),r=A.aA(a) +if(r==null)r=t.K.a(r) +s.setAttribute("flood-color",r) +r=A.aA(b) +if(r==null)r=t.K.a(r) +s.setAttribute("flood-opacity",r) +r=s.result +r.toString +A.xH(r,c) +this.c.append(s)}, +Lz(a,b,c){var s=self.document.createElementNS("http://www.w3.org/2000/svg","feBlend"),r=s.in1 +r.toString +A.xH(r,a) +r=s.in2 +r.toString +A.xH(r,b) +r=s.mode +r.toString +A.amR(r,c) +this.c.append(s)}, +xm(a,b,c,d,e,f,g,h){var s=self.document.createElementNS("http://www.w3.org/2000/svg","feComposite"),r=s.in1 +r.toString +A.xH(r,a) +r=s.in2 +r.toString +A.xH(r,b) +r=s.operator +r.toString +A.amR(r,g) +if(c!=null){r=s.k1 +r.toString +A.amS(r,c)}if(d!=null){r=s.k2 +r.toString +A.amS(r,d)}if(e!=null){r=s.k3 +r.toString +A.amS(r,e)}if(f!=null){r=s.k4 +r.toString +A.amS(r,f)}r=s.result +r.toString +A.xH(r,h) +this.c.append(s)}, +Dc(a,b,c,d){return this.xm(a,b,null,null,null,null,c,d)}, +bk(){var s=this.b +s.append(this.c) +return new A.apC(this.a,s)}} +A.apC.prototype={} +A.aaJ.prototype={ +lp(a,b){throw A.c(A.co(null))}, +o5(a){throw A.c(A.co(null))}, +iS(a,b){throw A.c(A.co(null))}, +ig(a,b,c){throw A.c(A.co(null))}, +qP(a){throw A.c(A.co(null))}, +cB(a,b){var s +a=A.L9(a,b) +s=this.vB$ +s=s.length===0?this.a:B.b.gO(s) +s.append(A.La(a,b,"draw-rect",this.lB$))}, +bQ(a,b){var s,r=A.La(A.L9(new A.w(a.a,a.b,a.c,a.d),b),b,"draw-rrect",this.lB$) +A.aQ6(r.style,a) +s=this.vB$ +s=s.length===0?this.a:B.b.gO(s) +s.append(r)}, +qO(a,b){throw A.c(A.co(null))}, +du(a,b,c){throw A.c(A.co(null))}, +bP(a,b){throw A.c(A.co(null))}, +of(a,b,c,d){throw A.c(A.co(null))}, +jI(a,b,c,d){throw A.c(A.co(null))}, +lw(a,b){var s=A.aQx(a,b,this.lB$),r=this.vB$ +r=r.length===0?this.a:B.b.gO(r) +r.append(s)}, +vo(a,b,c){throw A.c(A.co(null))}, +qU(){}} +A.DZ.prototype={ +jf(){var s,r,q,p=this,o=p.e.f +p.f=o +s=p.cx +r=s.a +q=s.b +if(r!==0||q!==0){o.toString +s=new A.bU(new Float32Array(16)) +s.aW(o) +p.f=s +s.au(0,r,q)}p.r=null}, +grs(){var s,r=this.cy +if(r==null){r=this.cx +s=A.dQ() +s.l5(-r.a,-r.b,0) +this.cy=s +r=s}return r}, +gh5(){return this.dx}, +nW(a){this.ts(a) +this.db=a.db +this.dx=a.dx +a.dx=a.db=null}, +j_(){var s=this +s.pz() +$.en.rG(s.db) +s.dx=s.db=null}, +bI(a){var s="position",r="absolute",q="transform-origin",p=this.lt("flt-image-filter"),o=this.lt("flt-image-filter-interior") +A.dY(o,s,r) +A.dY(o,q,"0 0 0") +A.dY(p,s,r) +A.dY(p,q,"0 0 0") +this.dx=o +p.appendChild(o) +return p}, +en(){var s,r,q=this,p=t.m1.a(q.CW) +$.en.rG(q.db) +q.db=null +A.x(q.dx.style,"filter",p.gAM()) +A.x(q.dx.style,"transform",p.gavK()) +s=q.d.style +r=q.cx +A.x(s,"left",A.h(r.a)+"px") +A.x(s,"top",A.h(r.b)+"px")}, +bw(a,b){var s=this +s.lc(0,b) +if(!b.CW.j(0,s.CW)||!b.cx.j(0,s.cx))s.en()}, +$iafy:1} +A.E_.prototype={ +jf(){var s,r,q=this,p=q.e.f +q.f=p +s=q.CW +if(s!==0||q.cx!==0){p.toString +r=new A.bU(new Float32Array(16)) +r.aW(p) +q.f=r +r.au(0,s,q.cx)}q.r=null}, +grs(){var s=this,r=s.cy +if(r==null){r=A.dQ() +r.l5(-s.CW,-s.cx,0) +s.cy=r}return r}, +bI(a){var s=A.be(self.document,"flt-offset") +A.dY(s,"position","absolute") +A.dY(s,"transform-origin","0 0 0") +return s}, +en(){A.x(this.d.style,"transform","translate("+A.h(this.CW)+"px, "+A.h(this.cx)+"px)")}, +bw(a,b){var s=this +s.lc(0,b) +if(b.CW!==s.CW||b.cx!==s.cx)s.en()}, +$iaiO:1} +A.E0.prototype={ +jf(){var s,r,q,p=this,o=p.e.f +p.f=o +s=p.cx +r=s.a +q=s.b +if(r!==0||q!==0){o.toString +s=new A.bU(new Float32Array(16)) +s.aW(o) +p.f=s +s.au(0,r,q)}p.r=null}, +grs(){var s,r=this.cy +if(r==null){r=this.cx +s=A.dQ() +s.l5(-r.a,-r.b,0) +this.cy=s +r=s}return r}, +bI(a){var s=A.be(self.document,"flt-opacity") +A.dY(s,"position","absolute") +A.dY(s,"transform-origin","0 0 0") +return s}, +en(){var s,r=this.d +r.toString +A.dY(r,"opacity",A.h(this.CW/255)) +s=this.cx +A.x(r.style,"transform","translate("+A.h(s.a)+"px, "+A.h(s.b)+"px)")}, +bw(a,b){var s=this +s.lc(0,b) +if(s.CW!==b.CW||!s.cx.j(0,b.cx))s.en()}, +$iaiQ:1} +A.y8.prototype={ +slo(a){var s=this +if(s.b){s.a=s.a.ep(0) +s.b=!1}s.a.a=a}, +gaG(a){var s=this.a.b +return s==null?B.a4:s}, +saG(a,b){var s=this +if(s.b){s.a=s.a.ep(0) +s.b=!1}s.a.b=b}, +gbs(){var s=this.a.c +return s==null?0:s}, +sbs(a){var s=this +if(s.b){s.a=s.a.ep(0) +s.b=!1}s.a.c=a}, +sla(a){var s=this +if(s.b){s.a=s.a.ep(0) +s.b=!1}s.a.d=a}, +spr(a){var s=this +if(s.b){s.a=s.a.ep(0) +s.b=!1}s.a.e=a}, +svU(a){var s=this +if(s.b){s.a=s.a.ep(0) +s.b=!1}s.a.f=a}, +gM(a){return new A.m(this.a.r)}, +sM(a,b){var s=this +if(s.b){s.a=s.a.ep(0) +s.b=!1}s.a.r=b.gl(b)}, +sB8(a){}, +sbU(a){var s=this +if(s.b){s.a=s.a.ep(0) +s.b=!1}s.a.w=a}, +sw8(a){var s=this +if(s.b){s.a=s.a.ep(0) +s.b=!1}s.a.x=a}, +sn3(a){var s=this +if(s.b){s.a=s.a.ep(0) +s.b=!1}s.a.y=a}, +siU(a){var s=this +if(s.b){s.a=s.a.ep(0) +s.b=!1}s.a.z=a}, +sLR(a){}, +k(a){var s,r,q=""+"Paint(",p=this.a.b,o=p==null +if((o?B.a4:p)===B.D){q+=(o?B.a4:p).k(0) +p=this.a +o=p.c +s=o==null +if((s?0:o)!==0)q+=" "+A.h(s?0:o) +else q+=" hairline" +p=p.d +o=p==null +if((o?B.aG:p)!==B.aG)q+=" "+(o?B.aG:p).k(0) +r="; "}else r="" +p=this.a +if(!p.f){q+=r+"antialias off" +r="; "}p=p.r +q=(p!==4278190080?q+(r+new A.m(p).k(0)):q)+")" +return q.charCodeAt(0)==0?q:q}, +$ine:1} +A.Uf.prototype={ +ep(a){var s=this,r=new A.Uf() +r.a=s.a +r.y=s.y +r.x=s.x +r.w=s.w +r.f=s.f +r.r=s.r +r.z=s.z +r.c=s.c +r.b=s.b +r.e=s.e +r.d=s.d +return r}, +k(a){return this.c4(0)}} +A.hc.prototype={ +Cq(){var s,r,q,p,o,n,m,l,k,j=this,i=A.a([],t.yv),h=j.a8x(0.25),g=B.f.aip(1,h) +i.push(new A.k(j.a,j.b)) +if(h===5){s=new A.WP() +j.NB(s) +r=s.a +r.toString +q=s.b +q.toString +p=r.c +if(p===r.e&&r.d===r.f&&q.a===q.c&&q.b===q.d){o=new A.k(p,r.d) +i.push(o) +i.push(o) +i.push(o) +i.push(new A.k(q.e,q.f)) +g=2 +n=!0}else n=!1}else n=!1 +if(!n)A.aFr(j,h,i) +m=2*g+1 +k=0 +while(!0){if(!(k=0)s.c=-r +s.e=s.d=-1}, +jA(a){this.zG(a,0,0)}, +yr(){var s,r=this.a,q=r.w +for(r=r.r,s=0;s359){j=c4<0?-0.001953125:0.001953125 +i=p +do{i-=j +m=Math.cos(i) +l=Math.sin(i)}while(o===m&&n===l)}}h=c4>0?0:1 +g=c0/2 +f=(c2.d-c2.b)/2 +e=c2.gaK().a+g*Math.cos(p) +d=c2.gaK().b+f*Math.sin(p) +if(o===m&&n===l){if(c5)b9.d0(0,e,d) +else b9.FA(e,d) +return}c=o*m+n*l +b=o*l-n*m +if(Math.abs(b)<=0.000244140625)if(c>0)if(!(b>=0&&h===0))c0=b<=0&&h===1 +else c0=!0 +else c0=!1 +else c0=!1 +if(c0){if(c5)b9.d0(0,e,d) +else b9.FA(e,d) +return}c0=h===1 +if(c0)b=-b +if(0===b)a=2 +else if(0===c)a=b>0?1:3 +else{r=b<0 +a=r?2:0 +if(c<0!==r)++a}a0=A.a([],t.td) +for(a1=0;a11){d=Math.sqrt(d) +l*=d +k*=d}c=(q*h+p*g)/l +b=(p*h-q*g)/k +a=(n*h+m*g)/l +a0=(m*h-n*g)/k +a1=a-c +a2=a0-b +a3=Math.sqrt(Math.max(1/(a1*a1+a2*a2)-0.25,0)) +a4=(c+a)/2-a2*a3 +a5=(b+a0)/2+a1*a3 +a6=Math.atan2(b-a5,c-a4) +a7=Math.atan2(a0-a5,a-a4)-a6 +if(a7<0)a7+=6.283185307179586 +if(Math.abs(a7)<0.0000031415926535897933){c2.b5(0,n,m) +return}a8=B.c.dk(Math.abs(a7/2.0943951023931953)) +a9=a7/a8 +b0=Math.tan(a9/2) +if(!isFinite(b0))return +b1=Math.sqrt(0.5+Math.cos(a9)*0.5) +b2=Math.abs(1.5707963267948966-Math.abs(a9)-0)<0.000244140625&&B.c.dP(l)===l&&B.c.dP(k)===k&&B.c.dP(n)===n&&B.c.dP(m)===m +for(b3=a6,b4=0;b4=6.283185307179586||c<=-6.283185307179586){s=b/1.5707963267948966 +r=Math.floor(s+0.5) +if(Math.abs(s-r-0)<0.000244140625){q=r+1 +if(q<0)q+=4 +p=c>0?0:1 +this.DW(a,p,B.c.V(q)) +return}}this.ks(0,a,b,c,!0)}, +ex(a1){var s,r,q,p,o,n,m,l,k,j,i,h,g=this,f=g.yr(),e=a1.a,d=a1.b,c=a1.c,b=a1.d,a=new A.w(e,d,c,b),a0=a1.e +if(a0===0||a1.f===0)if(a1.r===0||a1.w===0)if(a1.z===0||a1.Q===0)s=a1.x===0||a1.y===0 +else s=!1 +else s=!1 +else s=!1 +if(s||e>=c||d>=b)g.zG(a,0,3) +else if(A.b6M(a1))g.DW(a,0,3) +else{r=c-e +q=b-d +p=Math.max(0,a0) +o=Math.max(0,a1.r) +n=Math.max(0,a1.z) +m=Math.max(0,a1.x) +l=Math.max(0,a1.f) +k=Math.max(0,a1.w) +j=Math.max(0,a1.Q) +i=Math.max(0,a1.y) +h=A.aCw(j,i,q,A.aCw(l,k,q,A.aCw(n,m,r,A.aCw(p,o,r,1)))) +a0=b-h*j +g.d0(0,e,a0) +g.b5(0,e,d+h*l) +g.h7(e,d,e+h*p,d,0.707106781) +g.b5(0,c-h*o,d) +g.h7(c,d,c,d+h*k,0.707106781) +g.b5(0,c,b-h*i) +g.h7(c,b,c-h*m,b,0.707106781) +g.b5(0,e+h*n,b) +g.h7(e,b,e,a0,0.707106781) +g.aA(0) +g.e=f?0:-1 +e=g.a +e.ax=f +e.ch=!1 +e.CW=6}}, +zE(a,b,c){this.akY(b,c.a,c.b,null,0)}, +akY(a9,b0,b1,b2,b3){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,a2,a3,a4,a5,a6,a7,a8=this +t.Ci.a(a9) +s=a9.a +if(s.w===0)return +r=s.j(0,a8.a)?A.aNl(a8):a9 +s=a8.a +q=s.d +if(b3===0)if(b2!=null)p=b2[15]===1&&b2[14]===0&&b2[11]===0&&b2[10]===1&&b2[9]===0&&b2[8]===0&&b2[7]===0&&b2[6]===0&&b2[3]===0&&b2[2]===0 +else p=!0 +else p=!1 +o=r.a +if(p)s.zQ(0,o) +else{n=new A.pm(o) +n.pB(o) +m=new Float32Array(8) +for(s=b2==null,l=2*(q-1),k=l+1,p=q===0,j=!0;i=n.kM(0,m),i!==6;j=!1)switch(i){case 0:if(s){h=m[0] +g=h+b0}else{h=b2[0] +f=m[0] +g=h*(f+b0)+b2[4]*(m[1]+b1)+b2[12] +h=f}if(s){f=m[1] +e=f+b1}else{f=b2[1] +d=b2[5] +c=m[1] +e=f*(h+b0)+d*(c+b1)+b2[13]+b1 +f=c}if(j&&a8.a.w!==0){a8.pO() +if(p){b=0 +a=0}else{h=a8.a.f +b=h[l] +a=h[k]}if(a8.c<=0||!p||b!==g||a!==e)a8.b5(0,m[0],m[1])}else{a0=a8.a.hM(0,0) +a8.c=a0+1 +a1=a0*2 +d=a8.a.f +d[a1]=h +d[a1+1]=f +a8.e=a8.d=-1}break +case 1:a8.b5(0,m[2],m[3]) +break +case 2:h=m[2] +f=m[3] +d=m[4] +c=m[5] +a0=a8.a.hM(2,0) +a1=a0*2 +a2=a8.a.f +a2[a1]=h +a2[a1+1]=f +a1=(a0+1)*2 +a2[a1]=d +a2[a1+1]=c +a8.e=a8.d=-1 +break +case 3:a8.h7(m[2],m[3],m[4],m[5],o.y[n.b]) +break +case 4:a8.v5(m[2],m[3],m[4],m[5],m[6],m[7]) +break +case 5:a8.aA(0) +break}}s=r.c +if(s>=0)a8.c=q+s +s=a8.a +a3=s.d +a4=s.f +for(a5=q*2,s=a3*2,p=b2==null;a5s.c||q>s.d)return!1 +p=a3.a +o=new A.ajc(p,r,q,new Float32Array(18)) +o.aks() +n=B.d6===a3.b +m=o.d +if((n?m&1:m)!==0)return!0 +l=o.e +if(l<=1)return l!==0 +p=(l&1)===0 +if(!p||n)return!p +k=A.aGA(a3.a,!0) +j=new Float32Array(18) +i=A.a([],t.yv) +p=k.a +h=!1 +do{g=i.length +switch(k.kM(0,j)){case 0:case 5:break +case 1:A.b83(j,r,q,i) +break +case 2:A.b84(j,r,q,i) +break +case 3:f=k.f +A.b81(j,r,q,p.y[f],i) +break +case 4:A.b82(j,r,q,i) +break +case 6:h=!0 +break}f=i.length +if(f>g){e=f-1 +d=i[e] +c=d.a +b=d.b +if(Math.abs(c*c+b*b-0)<0.000244140625)B.b.fz(i,e) +else for(a=0;a0?1:0 +if(f<=0){f=b*a1 +if(f<0)f=-1 +else f=f>0?1:0 +f=f<=0}else f=!1}else f=!1 +if(f){a2=B.b.fz(i,e) +if(a!==i.length)i[a]=a2 +break}}}}while(!h) +return i.length!==0}, +cm(a){var s,r=a.a,q=a.b,p=this.a,o=A.aYU(p,r,q),n=p.e,m=new Uint8Array(n) +B.O.md(m,0,p.r) +o=new A.x8(o,m) +n=p.x +o.x=n +o.z=p.z +s=p.y +if(s!=null){n=new Float32Array(n) +o.y=n +B.f0.md(n,0,s)}o.e=p.e +o.w=p.w +o.c=p.c +o.d=p.d +n=p.Q +o.Q=n +if(!n){o.a=p.a.au(0,r,q) +n=p.b +o.b=n==null?null:n.au(0,r,q) +o.as=p.as}o.cx=p.cx +o.at=p.at +o.ax=p.ax +o.ay=p.ay +o.ch=p.ch +o.CW=p.CW +r=new A.pL(o,B.bH) +r.Ez(this) +return r}, +ho(e2){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,b0,b1,b2,b3,b4,b5,b6,b7,b8,b9,c0,c1,c2,c3,c4,c5,c6,c7,c8,c9,d0,d1,d2,d3,d4,d5,d6,d7,d8,d9,e0=this,e1=e0.a +if((e1.ax?e1.CW:-1)===-1)s=(e1.at?e1.CW:-1)!==-1 +else s=!0 +if(s)return e1.ho(0) +if(!e1.Q&&e1.b!=null){e1=e1.b +e1.toString +return e1}r=new A.pm(e1) +r.pB(e1) +q=e0.a.f +for(p=!1,o=0,n=0,m=0,l=0,k=0,j=0,i=0,h=0,g=null,f=null,e=null;d=r.at6(),d!==6;){c=r.e +switch(d){case 0:j=q[c] +h=q[c+1] +i=h +k=j +break +case 1:j=q[c+2] +h=q[c+3] +i=h +k=j +break +case 2:if(f==null)f=new A.akd() +b=c+1 +a=q[c] +a0=b+1 +a1=q[b] +b=a0+1 +a2=q[a0] +a0=b+1 +a3=q[b] +a4=q[a0] +a5=q[a0+1] +s=f.a=Math.min(a,a4) +a6=f.b=Math.min(a1,a5) +a7=f.c=Math.max(a,a4) +a8=f.d=Math.max(a1,a5) +a9=a-2*a2+a4 +if(Math.abs(a9)>0.000244140625){b0=(a-a2)/a9 +if(b0>=0&&b0<=1){b1=1-b0 +b2=b1*b1 +b3=2*b0*b1 +b0*=b0 +b4=b2*a+b3*a2+b0*a4 +b5=b2*a1+b3*a3+b0*a5 +s=Math.min(s,b4) +f.a=s +a7=Math.max(a7,b4) +f.c=a7 +a6=Math.min(a6,b5) +f.b=a6 +a8=Math.max(a8,b5) +f.d=a8}}a9=a1-2*a3+a5 +if(Math.abs(a9)>0.000244140625){b6=(a1-a3)/a9 +if(b6>=0&&b6<=1){b7=1-b6 +b2=b7*b7 +b3=2*b6*b7 +b6*=b6 +b8=b2*a+b3*a2+b6*a4 +b9=b2*a1+b3*a3+b6*a5 +s=Math.min(s,b8) +f.a=s +a7=Math.max(a7,b8) +f.c=a7 +a6=Math.min(a6,b9) +f.b=a6 +a8=Math.max(a8,b9) +f.d=a8}h=a8 +j=a7 +i=a6 +k=s}else{h=a8 +j=a7 +i=a6 +k=s}break +case 3:if(e==null)e=new A.a9J() +s=e1.y[r.b] +b=c+1 +a=q[c] +a0=b+1 +a1=q[b] +b=a0+1 +a2=q[a0] +a0=b+1 +a3=q[b] +a4=q[a0] +a5=q[a0+1] +e.a=Math.min(a,a4) +e.b=Math.min(a1,a5) +e.c=Math.max(a,a4) +e.d=Math.max(a1,a5) +c0=new A.nm() +c1=a4-a +c2=s*(a2-a) +if(c0.n4(s*c1-c1,c1-2*c2,c2)!==0){a6=c0.a +a6.toString +if(a6>=0&&a6<=1){c3=2*(s-1) +a9=(-c3*a6+c3)*a6+1 +c4=a2*s +b4=(((a4-2*c4+a)*a6+2*(c4-a))*a6+a)/a9 +c4=a3*s +b5=(((a5-2*c4+a1)*a6+2*(c4-a1))*a6+a1)/a9 +e.a=Math.min(e.a,b4) +e.c=Math.max(e.c,b4) +e.b=Math.min(e.b,b5) +e.d=Math.max(e.d,b5)}}c5=a5-a1 +c6=s*(a3-a1) +if(c0.n4(s*c5-c5,c5-2*c6,c6)!==0){a6=c0.a +a6.toString +if(a6>=0&&a6<=1){c3=2*(s-1) +a9=(-c3*a6+c3)*a6+1 +c4=a2*s +b8=(((a4-2*c4+a)*a6+2*(c4-a))*a6+a)/a9 +c4=a3*s +b9=(((a5-2*c4+a1)*a6+2*(c4-a1))*a6+a1)/a9 +e.a=Math.min(e.a,b8) +e.c=Math.max(e.c,b8) +e.b=Math.min(e.b,b9) +e.d=Math.max(e.d,b9)}}k=e.a +i=e.b +j=e.c +h=e.d +break +case 4:if(g==null)g=new A.a9U() +b=c+1 +c7=q[c] +a0=b+1 +c8=q[b] +b=a0+1 +c9=q[a0] +a0=b+1 +d0=q[b] +b=a0+1 +d1=q[a0] +a0=b+1 +d2=q[b] +d3=q[a0] +d4=q[a0+1] +s=Math.min(c7,d3) +g.a=s +g.c=Math.min(c8,d4) +a6=Math.max(c7,d3) +g.b=a6 +g.d=Math.max(c8,d4) +if(!(c7c9&&c9>d1&&d1>d3 +else a7=!0 +if(!a7){a7=-c7 +d5=a7+3*(c9-d1)+d3 +d6=2*(c7-2*c9+d1) +d7=d6*d6-4*d5*(a7+c9) +if(d7>=0&&Math.abs(d5)>0.000244140625){a7=-d6 +a8=2*d5 +if(d7===0){d8=a7/a8 +b1=1-d8 +if(d8>=0&&d8<=1){a7=3*b1 +b4=b1*b1*b1*c7+a7*b1*d8*c9+a7*d8*d8*d1+d8*d8*d8*d3 +g.a=Math.min(b4,s) +g.b=Math.max(b4,a6)}}else{d7=Math.sqrt(d7) +d8=(a7-d7)/a8 +b1=1-d8 +if(d8>=0&&d8<=1){s=3*b1 +b4=b1*b1*b1*c7+s*b1*d8*c9+s*d8*d8*d1+d8*d8*d8*d3 +g.a=Math.min(b4,g.a) +g.b=Math.max(b4,g.b)}d8=(a7+d7)/a8 +b1=1-d8 +if(d8>=0&&d8<=1){s=3*b1 +b4=b1*b1*b1*c7+s*b1*d8*c9+s*d8*d8*d1+d8*d8*d8*d3 +g.a=Math.min(b4,g.a) +g.b=Math.max(b4,g.b)}}}}if(!(c8d0&&d0>d2&&d2>d4 +else s=!0 +if(!s){s=-c8 +d5=s+3*(d0-d2)+d4 +d6=2*(c8-2*d0+d2) +d7=d6*d6-4*d5*(s+d0) +if(d7>=0&&Math.abs(d5)>0.000244140625){s=-d6 +a6=2*d5 +if(d7===0){d8=s/a6 +b1=1-d8 +if(d8>=0&&d8<=1){s=3*b1 +b5=b1*b1*b1*c8+s*b1*d8*d0+s*d8*d8*d2+d8*d8*d8*d4 +g.c=Math.min(b5,g.c) +g.d=Math.max(b5,g.d)}}else{d7=Math.sqrt(d7) +d8=(s-d7)/a6 +b1=1-d8 +if(d8>=0&&d8<=1){a7=3*b1 +b5=b1*b1*b1*c8+a7*b1*d8*d0+a7*d8*d8*d2+d8*d8*d8*d4 +g.c=Math.min(b5,g.c) +g.d=Math.max(b5,g.d)}s=(s+d7)/a6 +b7=1-s +if(s>=0&&s<=1){a6=3*b7 +b5=b7*b7*b7*c8+a6*b7*s*d0+a6*s*s*d2+s*s*s*d4 +g.c=Math.min(b5,g.c) +g.d=Math.max(b5,g.d)}}}}k=g.a +i=g.c +j=g.b +h=g.d +break}if(!p){l=h +m=j +n=i +o=k +p=!0}else{o=Math.min(o,k) +m=Math.max(m,j) +n=Math.min(n,i) +l=Math.max(l,h)}}d9=p?new A.w(o,n,m,l):B.F +e0.a.ho(0) +return e0.a.b=d9}, +HG(){var s=A.aMm(this.a),r=A.a([],t._k) +return new A.Uh(new A.apt(new A.a2I(s,A.aGA(s,!1),r,!1)))}, +k(a){return this.c4(0)}, +$itz:1} +A.aja.prototype={ +E5(a){var s=this,r=s.r,q=s.x +if(r!==q||s.w!==s.y){if(isNaN(r)||isNaN(s.w)||isNaN(q)||isNaN(s.y))return 5 +a[0]=r +a[1]=s.w +a[2]=q +r=s.y +a[3]=r +s.r=q +s.w=r +return 1}else{a[0]=q +a[1]=s.y +return 5}}, +y_(){var s,r,q=this +if(q.e===1){q.e=2 +return new A.k(q.x,q.y)}s=q.a.f +r=q.Q +return new A.k(s[r-2],s[r-1])}, +auo(){var s=this,r=s.z,q=s.a +if(rs)a=s}r=this.c +q=r.length +if(q===0)return-1 +p=q-1 +for(o=0;os)b=s +r=$.W().bD() +if(a>b||h.c.length===0)return r +q=h.RV(a) +p=h.RV(b) +if(q===-1||p===-1)return r +o=h.c +n=o[q] +m=h.P9(q,a) +l=m.a +r.d0(0,l.a,l.b) +k=m.c +j=h.P9(p,b).c +if(q===p)h.FX(n,k,j,r) +else{i=q +do{h.FX(n,k,1,r);++i +n=o[i] +if(i!==p){k=0 +continue}else break}while(!0) +h.FX(n,0,j,r)}return r}, +FX(a,b,c,d){var s,r=a.c +switch(a.a){case 1:s=1-c +d.b5(0,r[2]*c+r[0]*s,r[3]*c+r[1]*s) +break +case 4:s=$.aIX() +A.b5d(r,b,c,s) +d.v5(s[2],s[3],s[4],s[5],s[6],s[7]) +break +case 2:s=$.aIX() +A.b2S(r,b,c,s) +d.YR(s[2],s[3],s[4],s[5]) +break +case 3:throw A.c(A.co(null)) +default:throw A.c(A.a3("Invalid segment type"))}}, +a7B(a0){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c=this,b=1073741823,a={} +c.f=!1 +a.a=0 +s=new A.ayz(a,c) +r=new Float32Array(8) +q=a0.a +p=c.c +o=!1 +do{if(a0.auo()===0&&o)break +n=a0.kM(0,r) +switch(n){case 0:o=!0 +break +case 1:s.$4(r[0],r[1],r[2],r[3]) +break +case 4:a.a=A.aHx(r[0],r[1],r[2],r[3],r[4],r[5],r[6],r[7],a.a,0,b,p) +break +case 3:m=a0.f +l=q.y[m] +k=new A.hc(r[0],r[1],r[2],r[3],r[4],r[5],l).Cq() +j=k.length +m=k[0] +i=m.a +h=m.b +for(g=1;g>>1 +g=this.xY(o,n,q,p,e,f,this.xY(a,b,s,r,o,n,g,h,m),h,m)}else{l=a-e +k=b-f +j=g+Math.sqrt(l*l+k*k) +if(j>g)this.c.push(new A.zk(2,j,A.a([a,b,c,d,e,f],t.n))) +g=j}return g}} +A.ayz.prototype={ +$4(a,b,c,d){var s=a-c,r=b-d,q=this.a,p=q.a,o=q.a=p+Math.sqrt(s*s+r*r) +if(o>p)this.b.c.push(new A.zk(1,o,A.a([a,b,c,d],t.n)))}, +$S:692} +A.apt.prototype={ +gJ(a){var s=this.a +if(s==null)throw A.c(A.ef(u.g)) +return s}, +q(){var s,r=this.b,q=r.af5() +if(q)++r.e +if(q){s=r.e +this.a=new A.Ug(r.c[s].e,s,r) +return!0}this.a=null +return!1}} +A.Ug.prototype={ +WA(a,b){return this.d.c[this.c].apv(a,b,!0)}, +k(a){return"PathMetric"}, +$ix6:1, +gu(a){return this.a}} +A.JT.prototype={} +A.zk.prototype={ +amH(a1){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0=this +switch(a0.a){case 1:s=a0.c +r=s[2] +q=s[0] +p=1-a1 +o=s[3] +s=s[1] +A.a5y(r-q,o-s) +return new A.JT(a1,new A.k(r*a1+q*p,o*a1+s*p)) +case 4:s=a0.c +r=s[0] +q=s[1] +p=s[2] +o=s[3] +n=s[4] +m=s[5] +l=s[6] +s=s[7] +k=n-2*p+r +j=m-2*o+q +i=p-r +h=o-q +g=(l+3*(p-n)-r)*a1 +f=(s+3*(o-m)-q)*a1 +e=a1===0 +if(!(e&&r===p&&q===o))d=a1===1&&n===l&&m===s +else d=!0 +if(d){c=e?n-r:l-p +b=e?m-q:s-o +if(c===0&&b===0){c=l-r +b=s-q}A.a5y(c,b)}else A.a5y((g+2*k)*a1+i,(f+2*j)*a1+h) +return new A.JT(a1,new A.k(((g+3*k)*a1+3*i)*a1+r,((f+3*j)*a1+3*h)*a1+q)) +case 2:s=a0.c +r=s[0] +q=s[1] +p=s[2] +o=s[3] +n=s[4] +s=s[5] +a=A.aGZ(r,q,p,o,n,s) +m=a.Iw(a1) +l=a.Ix(a1) +if(!(a1===0&&r===p&&q===o))k=a1===1&&p===n&&o===s +else k=!0 +n-=r +s-=q +if(k)A.a5y(n,s) +else A.a5y(2*(n*a1+(p-r)),2*(s*a1+(o-q))) +return new A.JT(a1,new A.k(m,l)) +default:throw A.c(A.a3("Invalid segment type"))}}} +A.x8.prototype={ +fd(a,b,c){var s=a*2,r=this.f +r[s]=b +r[s+1]=c}, +i7(a){var s=this.f,r=a*2 +return new A.k(s[r],s[r+1])}, +La(){var s=this +if(s.ay)return new A.w(s.i7(0).a,s.i7(0).b,s.i7(1).a,s.i7(2).b) +else return s.w===4?s.a9a():null}, +ho(a){var s +if(this.Q)this.Es() +s=this.a +s.toString +return s}, +a9a(){var s,r,q,p,o,n,m,l,k=this,j=null,i=k.i7(0).a,h=k.i7(0).b,g=k.i7(1).a,f=k.i7(1).b +if(k.r[1]!==1||f!==h)return j +s=g-i +r=k.i7(2).a +q=k.i7(2).b +if(k.r[2]!==1||r!==g)return j +p=q-f +o=k.i7(3) +n=k.i7(3).b +if(k.r[3]!==1||n!==q)return j +if(r-o.a!==s||n-h!==p)return j +m=Math.min(i,g) +l=Math.min(h,q) +return new A.w(m,l,m+Math.abs(s),l+Math.abs(p))}, +a0m(){var s,r,q,p,o +if(this.w===2){s=this.r +s=s[0]!==0||s[1]!==1}else s=!0 +if(s)return null +s=this.f +r=s[0] +q=s[1] +p=s[2] +o=s[3] +if(q===o||r===p)return new A.w(r,q,p,o) +return null}, +Pb(){var s,r,q,p,o,n,m,l,k,j,i,h={},g=this.ho(0),f=A.a([],t.kG),e=new A.pm(this) +e.pB(this) +s=new Float32Array(8) +h.a=e.kM(0,s) +h.b=0 +for(;r=h.a=e.kM(0,s),r!==6;)if(3===r){q=s[2] +p=s[3] +o=q-s[0] +n=p-s[1] +m=s[4] +l=s[5] +if(o!==0){k=Math.abs(o) +j=Math.abs(l-p)}else{j=Math.abs(n) +k=n!==0?Math.abs(m-q):Math.abs(o)}f.push(new A.aC(k,j));++h.b}m=f[0] +l=f[1] +i=f[2] +return A.xn(g,f[3],i,m,l)}, +j(a,b){if(b==null)return!1 +if(this===b)return!0 +if(J.U(b)!==A.t(this))return!1 +return b instanceof A.x8&&this.api(b)}, +gt(a){var s=this +return A.N(s.cx,s.f,s.y,s.r,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +api(a){var s,r,q,p,o,n,m,l=this +if(l.cx!==a.cx)return!1 +s=l.d +if(s!==a.d)return!1 +r=s*2 +for(q=l.f,p=a.f,o=0;oq.c){s=a+10 +q.c=s +r=new Float32Array(s*2) +B.f0.md(r,0,q.f) +q.f=r}q.d=a}, +Gg(a){var s,r,q=this +if(a>q.e){s=a+8 +q.e=s +r=new Uint8Array(s) +B.O.md(r,0,q.r) +q.r=r}q.w=a}, +Ge(a){var s,r,q=this +if(a>q.x){s=a+4 +q.x=s +r=new Float32Array(s) +s=q.y +if(s!=null)B.f0.md(r,0,s) +q.y=r}q.z=a}, +zQ(a,b){var s,r,q,p,o,n,m,l,k,j,i=this,h=b.d,g=i.d+h +i.Dp() +i.Gf(g) +s=b.f +for(r=h*2-1,q=g*2-1,p=i.f;r>=0;--r,--q)p[q]=s[r] +o=i.w +n=b.w +i.Gg(o+n) +for(p=i.r,m=b.r,l=0;lm){l.a=m +l.b=s}else if(s===m)return 1}return o}} +A.aoF.prototype={ +Iw(a){return(this.a*a+this.c)*a+this.e}, +Ix(a){return(this.b*a+this.d)*a+this.f}} +A.ajc.prototype={ +aks(){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e=this,d=e.a,c=A.aGA(d,!0) +for(s=e.f,r=t.td;q=c.kM(0,s),q!==6;)switch(q){case 0:case 5:break +case 1:e.a8u() +break +case 2:p=!A.aMn(s)?A.aYW(s):0 +o=e.NU(s[0],s[1],s[2],s[3],s[4],s[5]) +e.d+=p>0?o+e.NU(s[4],s[5],s[6],s[7],s[8],s[9]):o +break +case 3:n=d.y[c.f] +m=s[0] +l=s[1] +k=s[2] +j=s[3] +i=s[4] +h=s[5] +g=A.aMn(s) +f=A.a([],r) +new A.hc(m,l,k,j,i,h,n).amj(f) +e.NT(f[0]) +if(!g&&f.length===2)e.NT(f[1]) +break +case 4:e.a8q() +break}}, +a8u(){var s,r,q,p,o,n=this,m=n.f,l=m[0],k=m[1],j=m[2],i=m[3] +if(k>i){s=k +r=i +q=-1}else{s=i +r=k +q=1}m=n.c +if(ms)return +p=n.b +if(A.ajd(p,m,l,k,j,i)){++n.e +return}if(m===s)return +o=(j-l)*(m-k)-(i-k)*(p-l) +if(o===0){if(p!==j||m!==i)++n.e +q=0}else if(A.b_6(o)===q)q=0 +n.d+=q}, +NU(a,b,c,d,e,f){var s,r,q,p,o,n,m,l,k=this +if(b>f){s=b +r=f +q=-1}else{s=f +r=b +q=1}p=k.c +if(ps)return 0 +o=k.b +if(A.ajd(o,p,a,b,e,f)){++k.e +return 0}if(p===s)return 0 +n=new A.nm() +if(0===n.n4(b-2*d+f,2*(d-b),b-p))m=q===1?a:e +else{l=n.a +l.toString +m=((e-2*c+a)*l+2*(c-a))*l+a}if(Math.abs(m-o)<0.000244140625)if(o!==e||p!==f){++k.e +return 0}return mg){s=h +r=g +q=-1}else{s=g +r=h +q=1}p=i.c +if(ps)return +o=i.b +if(A.ajd(o,p,a.a,h,a.e,g)){++i.e +return}if(p===s)return +n=a.r +m=a.d*n-p*n+p +l=new A.nm() +if(0===l.n4(g+(h-2*m),2*(m-h),h-p))k=q===1?a.a:a.e +else{j=l.a +j.toString +k=A.aW3(a.a,a.c,a.e,n,j)/A.aW2(n,j)}if(Math.abs(k-o)<0.000244140625)if(o!==a.e||p!==a.f){++i.e +return}p=i.d +i.d=p+(kq){p=b +o=q +n=-1}else{p=q +o=b +n=1}m=g.c +if(mp)return +l=g.b +if(A.ajd(l,m,d,b,r,q)){++g.e +return}if(m===p)return +k=Math.min(d,Math.min(a,Math.min(s,r))) +j=Math.max(d,Math.max(a,Math.max(s,r))) +if(lj){g.d+=n +return}i=A.aQe(f,a0,m) +if(i==null)return +h=A.aQA(d,a,s,r,i) +if(Math.abs(h-l)<0.000244140625)if(l!==r||m!==q){++g.e +return}f=g.d +g.d=f+(h1,o=null,n=1/0,m=0;m<$.o5.length;++m){l=$.o5[m] +$.c4() +k=self.window.devicePixelRatio +if(k===0)k=1 +if(l.y!==k)continue +k=l.a +j=k.c-k.a +k=k.d-k.b +i=j*k +h=c.dy +g=self.window.devicePixelRatio +if(l.r>=B.c.dk(s*(g===0?1:g))+2){g=self.window.devicePixelRatio +f=l.w>=B.c.dk(r*(g===0?1:g))+2&&l.ay===h}else f=!1 +e=i4)){if(j===b&&k===a){o=l +break}n=i +o=l}}if(o!=null){B.b.C($.o5,o) +o.sqn(0,a0) +o.b=c.fx +return o}d=A.aVm(a0,c.cy.b.d,c.dy) +d.b=c.fx +return d}, +N5(){A.x(this.d.style,"transform","translate("+A.h(this.CW)+"px, "+A.h(this.cx)+"px)")}, +en(){this.N5() +this.xT(null)}, +bk(){this.Ev(null) +this.fr=!0 +this.Md()}, +bw(a,b){var s,r,q=this +q.Mh(0,b) +q.fx=b.fx +if(b!==q)b.fx=null +if(q.CW!==b.CW||q.cx!==b.cx)q.N5() +q.Ev(b) +if(q.cy===b.cy){s=q.ch +r=s instanceof A.mu&&q.dy!==s.ay +if(q.fr||r)q.xT(b) +else q.ch=b.ch}else q.xT(b)}, +kY(){var s=this +s.Mg() +s.Ev(s) +if(s.fr)s.xT(s)}, +j_(){A.a5A(this.ch) +this.ch=null +this.Me()}} +A.ajg.prototype={ +$0(){var s,r=this.a,q=r.fy +q.toString +s=r.ch=r.aac(q) +s.b=r.fx +q=r.d +q.toString +A.aIz(q) +r.d.append(s.c) +s.a0(0) +q=r.cy.b +q.toString +r=r.fy +r.toString +q.Hf(s,r) +s.qU()}, +$S:0} +A.akP.prototype={ +Hf(a,b){var s,r,q,p,o,n,m,l,k,j +try{m=this.b +m.toString +m=A.aRt(b,m) +l=this.c +k=l.length +if(m){s=k +for(r=0;r1){s=q.a +s.y=s.r.pop() +r=s.w.pop() +if(r!=null){s.Q=r.a +s.as=r.b +s.at=r.c +s.ax=r.d +s.z=!0}else if(s.z)s.z=!1}s=q.c +if(s.length!==0&&B.b.gO(s) instanceof A.DO)s.pop() +else s.push(B.DW);--q.r}, +Ci(a){var s +while(!0){s=this.r +if(!(a1))break +this.b_(0)}}, +lp(a,b){var s=new A.QY(a,b) +switch(b.a){case 1:this.a.lp(a,s) +break +case 0:break}this.d.c=!0 +this.c.push(s)}, +cB(a,b){var s,r,q=this,p=b.a +if(p.w!=null)q.d.c=!0 +q.e=!0 +s=A.v1(b) +b.b=!0 +r=new A.R7(a,p) +p=q.a +if(s!==0)p.mc(a.dz(s),r) +else p.mc(a,r) +q.c.push(r)}, +bQ(a,b){var s,r,q,p,o,n,m,l,k=this,j=b.a +if(j.w!=null||!a.as)k.d.c=!0 +k.e=!0 +s=A.v1(b) +r=a.a +q=a.c +p=Math.min(r,q) +o=a.b +n=a.d +m=Math.min(o,n) +q=Math.max(r,q) +n=Math.max(o,n) +b.b=!0 +l=new A.R6(a,j) +k.a.nv(p-s,m-s,q+s,n+s,l) +k.c.push(l)}, +qN(b0,b1,b2){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,a2,a3=this,a4=new A.w(b1.a,b1.b,b1.c,b1.d),a5=b0.a,a6=b0.b,a7=b0.c,a8=b0.d,a9=new A.w(a5,a6,a7,a8) +if(a9.j(0,a4)||!a9.ea(a4).j(0,a4))return +s=b0.t4() +r=b1.t4() +q=s.e +p=s.f +o=s.r +n=s.w +m=s.z +l=s.Q +k=s.x +j=s.y +i=r.e +h=r.f +g=r.r +f=r.w +e=r.z +d=r.Q +c=r.x +b=r.y +if(i*i+h*h>q*q+p*p||g*g+f*f>o*o+n*n||e*e+d*d>m*m+l*l||c*c+b*b>k*k+j*j)return +a3.e=a3.d.c=!0 +a=A.v1(b2) +b2.b=!0 +a0=new A.R_(b0,b1,b2.a) +q=$.W().bD() +q.sox(B.d6) +q.ex(b0) +q.ex(b1) +q.aA(0) +a0.x=q +a1=Math.min(a5,a7) +a2=Math.max(a5,a7) +a3.a.nv(a1-a,Math.min(a6,a8)-a,a2+a,Math.max(a6,a8)+a,a0) +a3.c.push(a0)}, +bP(a,a0){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b=this +if(a0.a.w==null){t.Ci.a(a) +s=a.a.La() +if(s!=null){b.cB(s,a0) +return}r=a.a +q=r.ax?r.Pb():null +if(q!=null){b.bQ(q,a0) +return}p=a.a.a0m() +if(p!=null){r=a0.a.c +r=(r==null?0:r)===0}else r=!1 +if(r){r=p.a +o=p.c +n=Math.min(r,o) +m=p.b +l=p.d +k=Math.min(m,l) +r=o-r +j=Math.abs(r) +m=l-m +i=Math.abs(m) +h=m===0?1:i +g=r===0?1:j +a0.saG(0,B.a4) +b.cB(new A.w(n,k,n+g,k+h),a0) +return}}t.Ci.a(a) +if(a.a.w!==0){b.e=b.d.c=!0 +f=a.ho(0) +e=A.v1(a0) +if(e!==0)f=f.dz(e) +d=new A.pL(A.aMm(a.a),B.bH) +d.Ez(a) +a0.b=!0 +c=new A.R5(d,a0.a) +b.a.mc(f,c) +d.b=a.b +b.c.push(c)}}, +mQ(a){var s,r,q=this,p=t.S9.a(a).b +if(p==null)return +if(p.e)q.e=!0 +s=q.d +r=p.d +s.a=B.cx.nw(s.a,r.a) +s.b=B.cx.nw(s.b,r.b) +s.c=B.cx.nw(s.c,r.c) +q.bH(0) +B.b.E(q.c,p.c) +q.b_(0) +p=p.b +if(p!=null)q.a.a0u(p)}, +lw(a,b){var s,r,q,p,o=this +t.zI.a(a) +if(!a.e)return +o.e=!0 +s=o.d +s.c=!0 +s.b=!0 +r=new A.R4(a,b) +q=a.gh1().z +s=b.a +p=b.b +o.a.nv(s+q.a,p+q.b,s+q.c,p+q.d,r) +o.c.push(r)}, +aaZ(a,b,c,d){var s,r,q,p,o,n,m,l=a[0],k=a[1],j=a.length +for(s=k,r=l,q=2;qa.d||s.da.c}} +A.DO.prototype={ +e6(a){a.bH(0)}, +k(a){return this.c4(0)}} +A.Ra.prototype={ +e6(a){a.b_(0)}, +k(a){return this.c4(0)}} +A.Re.prototype={ +e6(a){a.au(0,this.a,this.b)}, +k(a){return this.c4(0)}} +A.Rc.prototype={ +e6(a){a.ei(0,this.a,this.b)}, +k(a){return this.c4(0)}} +A.Rb.prototype={ +e6(a){a.lY(0,this.a)}, +k(a){return this.c4(0)}} +A.Rd.prototype={ +e6(a){a.a2(0,this.a)}, +k(a){return this.c4(0)}} +A.QY.prototype={ +e6(a){a.lp(this.f,this.r)}, +k(a){return this.c4(0)}} +A.QX.prototype={ +e6(a){a.o5(this.f)}, +k(a){return this.c4(0)}} +A.QW.prototype={ +e6(a){a.iS(0,this.f)}, +k(a){return this.c4(0)}} +A.R1.prototype={ +e6(a){a.ig(this.f,this.r,this.w)}, +k(a){return this.c4(0)}} +A.R3.prototype={ +e6(a){a.qP(this.f)}, +k(a){return this.c4(0)}} +A.R9.prototype={ +e6(a){a.vo(this.f,this.r,this.w)}, +k(a){return this.c4(0)}} +A.R7.prototype={ +e6(a){a.cB(this.f,this.r)}, +k(a){return this.c4(0)}} +A.R6.prototype={ +e6(a){a.bQ(this.f,this.r)}, +k(a){return this.c4(0)}} +A.R_.prototype={ +e6(a){var s=this.w +if(s.b==null)s.b=B.a4 +a.bP(this.x,s)}, +k(a){return this.c4(0)}} +A.R2.prototype={ +e6(a){a.qO(this.f,this.r)}, +k(a){return this.c4(0)}} +A.QZ.prototype={ +e6(a){a.du(this.f,this.r,this.w)}, +k(a){return this.c4(0)}} +A.R5.prototype={ +e6(a){a.bP(this.f,this.r)}, +k(a){return this.c4(0)}} +A.R8.prototype={ +e6(a){var s=this +a.of(s.f,s.r,s.w,s.x)}, +k(a){return this.c4(0)}} +A.R0.prototype={ +e6(a){var s=this +a.jI(s.f,s.r,s.w,s.x)}, +k(a){return this.c4(0)}} +A.R4.prototype={ +e6(a){a.lw(this.f,this.r)}, +k(a){return this.c4(0)}} +A.ayy.prototype={ +lp(a,b){var s,r,q,p,o=this,n=a.a,m=a.b,l=a.c,k=a.d +if(!o.x){s=$.aEO() +s[0]=n +s[1]=m +s[2]=l +s[3]=k +A.aEE(o.y,s) +n=s[0] +m=s[1] +l=s[2] +k=s[3]}if(!o.z){o.Q=n +o.as=m +o.at=l +o.ax=k +o.z=!0 +r=k +q=l +p=m +s=n}else{s=o.Q +if(n>s){o.Q=n +s=n}p=o.as +if(m>p){o.as=m +p=m}q=o.at +if(l=q||p>=r)b.a=!0 +else{b.b=s +b.c=p +b.d=q +b.e=r}}, +mc(a,b){this.nv(a.a,a.b,a.c,a.d,b)}, +nv(a,b,c,d,e){var s,r,q,p,o,n,m,l,k,j=this +if(a===c||b===d){e.a=!0 +return}if(!j.x){s=$.aEO() +s[0]=a +s[1]=b +s[2]=c +s[3]=d +A.aEE(j.y,s) +r=s[0] +q=s[1] +p=s[2] +o=s[3]}else{o=d +p=c +q=b +r=a}if(j.z){n=j.at +if(r>=n){e.a=!0 +return}m=j.Q +if(p<=m){e.a=!0 +return}l=j.ax +if(q>=l){e.a=!0 +return}k=j.as +if(o<=k){e.a=!0 +return}if(rn)p=n +if(ql)o=l}e.b=r +e.c=q +e.d=p +e.e=o +if(j.b){j.c=Math.min(Math.min(j.c,r),p) +j.e=Math.max(Math.max(j.e,r),p) +j.d=Math.min(Math.min(j.d,q),o) +j.f=Math.max(Math.max(j.f,q),o)}else{j.c=Math.min(r,p) +j.e=Math.max(r,p) +j.d=Math.min(q,o) +j.f=Math.max(q,o)}j.b=!0}, +a0u(a){var s,r,q,p,o,n=this,m=a.a,l=a.b,k=a.c,j=a.d +if(m===k||l===j)return +if(!n.x){s=$.aEO() +s[0]=m +s[1]=l +s[2]=k +s[3]=j +A.aEE(n.y,s) +r=s[0] +q=s[1] +p=s[2] +o=s[3]}else{o=j +p=k +q=l +r=m}if(n.b){n.c=Math.min(Math.min(n.c,r),p) +n.e=Math.max(Math.max(n.e,r),p) +n.d=Math.min(Math.min(n.d,q),o) +n.f=Math.max(Math.max(n.f,q),o)}else{n.c=Math.min(r,p) +n.e=Math.max(r,p) +n.d=Math.min(q,o) +n.f=Math.max(q,o)}n.b=!0}, +D1(){var s=this,r=s.y,q=new A.bU(new Float32Array(16)) +q.aW(r) +s.r.push(q) +r=s.z?new A.w(s.Q,s.as,s.at,s.ax):null +s.w.push(r)}, +amF(){var s,r,q,p,o,n,m,l,k,j,i=this +if(!i.b)return B.F +s=i.a +r=s.a +if(isNaN(r))r=-1/0 +q=s.c +if(isNaN(q))q=1/0 +p=s.b +if(isNaN(p))p=-1/0 +o=s.d +if(isNaN(o))o=1/0 +s=i.c +n=i.e +m=Math.min(s,n) +l=Math.max(s,n) +n=i.d +s=i.f +k=Math.min(n,s) +j=Math.max(n,s) +if(lc1||b7>c2)return +if(b8-b6$.aG_||r>$.aFZ){k=$.ae4 +if(k!=null){h=k.a.getExtension("WEBGL_lose_context") +if(h!=null)h.loseContext()}$.aG0=$.ae4=null +$.aG_=Math.max($.aG_,s) +$.aFZ=Math.max($.aFZ,s)}k=$.aG0 +if(k==null)k=$.aG0=A.aiN(s,r) +g=$.ae4 +k=g==null?$.ae4=A.aG1(k):g +k.fr=s +k.fx=r +f=k.A_(l,i) +g=k.a +e=f.a +A.ai(g,"useProgram",[e]) +d=k.CH(e,"position") +A.aRC(k,f,q,p,s,r,c3) +c=!o +if(c){b=m.e +a=B.f.eH(1,b.gbB(b).Kv(0)) +b=B.f.eH(1,b.gbh(b).Kv(0)) +A.ai(g,"uniform4f",[k.hp(0,e,"u_textransform"),a,b,0,0])}b=g.createBuffer() +b.toString +if(c)if(n){a0=g.createVertexArray() +a0.toString +A.ai(g,"bindVertexArray",[a0])}else a0=null +else a0=null +A.ai(g,a9,[d]) +A.ai(g,b0,[k.gim(),b]) +A.aQc(k,b4,1) +A.ai(g,b1,[d,2,k.gJm(),!1,0,0]) +a1=b4.length/2|0 +if(o){a2=g.createBuffer() +A.ai(g,b0,[k.gim(),a2]) +a3=new Uint32Array(a1) +for(o=c6.r,a4=0;a41;)s.pop() +t.IF.a(B.b.gL(s)).oZ(new A.ak5())}, +$S:0} +A.apx.prototype={ +$0(){var s,r,q=t.IF,p=this.a.a +if($.apv==null)q.a(B.b.gL(p)).bk() +else{s=q.a(B.b.gL(p)) +r=$.apv +r.toString +s.bw(0,r)}A.b5j(q.a(B.b.gL(p))) +$.apv=q.a(B.b.gL(p)) +return new A.y9(q.a(B.b.gL(p)).d)}, +$S:686} +A.rl.prototype={ +v2(b1,b2,b3){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,a2,a3,a4,a5,a6=this,a7="bindBuffer",a8="texParameteri",a9=a6.a,b0=a6.b +if(a9!==B.V&&b0!==B.V){s=a6.ahi(a6.e,a9,b0) +s.toString +r=a9===B.fv||a9===B.fw +q=b0===B.fv||b0===B.fw +if(r)p=q?"repeat":"repeat-x" +else p=q?"repeat-y":"no-repeat" +p=b1.createPattern(s,p) +p.toString +return p}else{if($.jb==null)$.jb=new A.uZ() +b2.toString +$.cZ() +s=$.c4() +o=s.d +if(o==null){p=self.window.devicePixelRatio +o=p===0?1:p}p=b2.a +n=B.c.dk((b2.c-p)*o) +m=b2.b +l=B.c.dk((b2.d-m)*o) +k=$.dl +j=(k==null?$.dl=A.j8():k)===2 +i=A.aNX() +h=A.aL7(j,a9,b0) +g=A.aG1(A.aiN(n,l)) +g.fr=n +g.fx=l +f=g.A_(i,h) +k=g.a +e=f.a +A.ai(k,"useProgram",[e]) +d=new Float32Array(12) +c=b2.au(0,-p,-m) +b=c.a +d[0]=b +a=c.b +d[1]=a +a0=c.c +d[2]=a0 +d[3]=a +d[4]=a0 +a1=c.d +d[5]=a1 +d[6]=a0 +d[7]=a1 +d[8]=b +d[9]=a1 +d[10]=b +d[11]=a +a2=g.CH(e,"position") +A.aRC(g,f,0,0,n,l,new A.bU(a6.c)) +a6.f=p!==0||m!==0 +b=a6.e +a=B.f.eH(1,b.gbB(b).Kv(0)) +a0=B.f.eH(1,b.gbh(b).Kv(0)) +A.ai(k,"uniform4f",[g.hp(0,e,"u_textransform"),a,a0,p,m]) +m=k.createBuffer() +m.toString +if(j){a3=k.createVertexArray() +a3.toString +A.ai(k,"bindVertexArray",[a3])}else a3=null +A.ai(k,"enableVertexAttribArray",[a2]) +A.ai(k,a7,[g.gim(),m]) +s=s.d +if(s==null){s=self.window.devicePixelRatio +if(s===0)s=1}A.aQc(g,d,s) +A.ai(k,"vertexAttribPointer",[a2,2,g.gJm(),!1,0,0]) +a4=k.createTexture() +k.activeTexture(g.gXT()) +A.ai(k,"bindTexture",[g.gfP(),a4]) +g.ZA(0,g.gfP(),0,g.gBe(),g.gBe(),g.gBh(),b.gB4()) +if(j){A.ai(k,a8,[g.gfP(),g.gBf(),A.aEB(g,a9)]) +A.ai(k,a8,[g.gfP(),g.gBg(),A.aEB(g,b0)]) +A.ai(k,"generateMipmap",[g.gfP()])}else{A.ai(k,a8,[g.gfP(),g.gBf(),g.grn()]) +A.ai(k,a8,[g.gfP(),g.gBg(),g.grn()]) +A.ai(k,a8,[g.gfP(),g.gXU(),g.gXS()])}A.ai(k,"clear",[g.gJl()]) +g.Wl(6,B.me) +if(a3!=null)k.bindVertexArray(null) +a5=g.Z_(!1) +A.ai(k,a7,[g.gim(),null]) +A.ai(k,a7,[g.goJ(),null]) +a5.toString +s=b1.createPattern(a5,"no-repeat") +s.toString +return s}}, +ahi(a,a0,a1){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c=a0===B.fw?2:1,b=a1===B.fw?2:1 +if(c===1&&b===1)return a.gB4() +s=a.gbB(a) +r=a.gbh(a) +q=s.S(0,c) +p=r.S(0,b) +o=A.aiN(q,p) +n=o.a +if(n!=null)n=A.aKB(n,"2d",null) +else{n=o.b +n.toString +n=A.k7(n,"2d",null)}n.toString +for(m=0;m>>24&255)<1}, +$S:685} +A.aon.prototype={ +UX(a,b){var s,r,q=this +q.b=!0 +s=q.a +if(s==null)q.a=A.aiN(a,b) +else if(a!==s.c&&b!==s.d){s.c=a +s.d=b +r=s.a +if(r!=null){r.width=a +s=s.a +s.toString +s.height=b}else{r=s.b +if(r!=null){A.vY(r,a) +r=s.b +r.toString +A.vX(r,b) +r=s.b +r.toString +s.Tc(r)}}}s=q.a +s.toString +return A.aG1(s)}} +A.w5.prototype={$ij0:1} +A.P8.prototype={ +v2(a,b,c){var s,r,q,p,o,n,m,l,k,j,i=this,h=i.f +if(h===B.V||h===B.dm){s=i.r +r=b.a +q=b.b +p=i.b +o=i.c +n=p.a +m=o.a +p=p.b +o=o.b +if(s!=null){l=(n+m)/2-r +k=(p+o)/2-q +s.ZY(0,n-l,p-k) +p=s.b +n=s.c +s.ZY(0,m-l,o-k) +j=a.createLinearGradient(p+l-r,n+k-q,s.b+l-r,s.c+k-q)}else j=a.createLinearGradient(n-r,p-q,m-r,o-q) +A.aP4(j,i.d,i.e,h===B.dm) +return j}else{h=a.createPattern(i.v1(b,c,!1),"no-repeat") +h.toString +return h}}, +v1(b9,c0,c1){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,b0,b1,b2,b3,b4=this,b5="u_resolution",b6="m_gradient",b7=b9.c,b8=b9.a +b7-=b8 +s=B.c.dk(b7) +r=b9.d +q=b9.b +r-=q +p=B.c.dk(r) +if($.jb==null)$.jb=new A.uZ() +o=$.a6_().UX(s,p) +o.fr=s +o.fx=p +n=A.aM9(b4.d,b4.e) +m=A.aHh() +l=b4.f +k=$.dl +j=A.Tz(k==null?$.dl=A.j8():k) +j.e=1 +j.mB(11,"v_color") +j.em(9,b5) +j.em(14,b6) +i=j.goz() +k=A.a([],t.s) +h=new A.lR("main",k) +j.c.push(h) +k.push("vec4 localCoord = m_gradient * vec4(gl_FragCoord.x, u_resolution.y - gl_FragCoord.y, 0, 1);") +k.push("float st = localCoord.x;") +k.push(i.a+" = "+A.aI7(j,h,n,l)+" * scale + bias;") +g=o.A_(m,j.bk()) +m=o.a +k=g.a +A.ai(m,"useProgram",[k]) +f=b4.b +e=f.a +d=f.b +f=b4.c +c=f.a +b=f.b +a=c-e +a0=b-d +a1=Math.sqrt(a*a+a0*a0) +f=a1<11920929e-14 +a2=f?0:-a0/a1 +a3=f?1:a/a1 +a4=l!==B.V +a5=a4?b7/2:(e+c)/2-b8 +a6=a4?r/2:(d+b)/2-q +a7=A.dQ() +a7.l5(-a5,-a6,0) +a8=A.dQ() +a9=a8.a +a9[0]=a3 +a9[1]=a2 +a9[4]=-a2 +a9[5]=a3 +b0=A.dQ() +b0.avL(0,0.5) +if(a1>11920929e-14)b0.aV(0,1/a1) +b7=b4.r +if(b7!=null){b1=new A.bU(new Float32Array(16)) +b1.fL(new A.bU(b7.a)) +b2=b9.gaK() +b7=b2.a +b8=b2.b +b0.au(0,-b7,-b8) +b0.cP(0,b1) +b0.au(0,b7,b8)}b0.cP(0,a8) +b0.cP(0,a7) +n.LI(o,g) +A.ai(m,"uniformMatrix4fv",[o.hp(0,k,b6),!1,b0.a]) +A.ai(m,"uniform2f",[o.hp(0,k,b5),s,p]) +b3=new A.aem(c1,b9,o,g,n,s,p).$0() +$.a6_().b=!1 +return b3}} +A.aem.prototype={ +$0(){var s=this,r=$.jb,q=s.b,p=s.c,o=s.d,n=s.e,m=s.f,l=s.r,k=q.c,j=q.a,i=q.d +q=q.b +if(s.a)return r.Wj(new A.w(0,0,0+(k-j),0+(i-q)),p,o,n,m,l) +else{r=r.Wh(new A.w(0,0,0+(k-j),0+(i-q)),p,o,n,m,l) +r.toString +return r}}, +$S:134} +A.wp.prototype={ +v2(a,b,c){var s,r=this +if(r.r==null){s=r.f +s=s===B.V||s===B.dm}else s=!1 +if(s)return r.O4(a,b,c) +else{s=a.createPattern(r.v1(b,c,!1),"no-repeat") +s.toString +return s}}, +O4(a,b,c){var s=this,r=s.b,q=r.a-b.a +r=r.b-b.b +r=A.ai(a,"createRadialGradient",[q,r,0,q,r,s.c]) +A.aP4(r,s.d,s.e,s.f===B.dm) +return r}, +v1(a,a0,a1){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d=this,c=a.c,b=a.a +c-=b +s=B.c.dk(c) +r=a.d +q=a.b +r-=q +p=B.c.dk(r) +if($.jb==null)$.jb=new A.uZ() +o=$.a6_().UX(s,p) +o.fr=s +o.fx=p +n=A.aM9(d.d,d.e) +m=o.A_(A.aHh(),d.EE(n,a,d.f)) +l=o.a +k=m.a +A.ai(l,"useProgram",[k]) +j=d.b +i=j.a +j=j.b +A.ai(l,"uniform2f",[o.hp(0,k,"u_tile_offset"),2*(c*((i-b)/c-0.5)),2*(r*(0.5-(j-q)/r))]) +A.ai(l,"uniform1f",[o.hp(0,k,"u_radius"),d.c]) +n.LI(o,m) +h=o.hp(0,k,"m_gradient") +g=A.dQ() +c=d.r +if(c!=null){f=new A.bU(new Float32Array(16)) +f.fL(new A.bU(c)) +g.au(0,-i,-j) +g.cP(0,f) +g.au(0,i,j)}A.ai(l,"uniformMatrix4fv",[h,!1,g.a]) +e=new A.aen(a1,a,o,m,n,s,p).$0() +$.a6_().b=!1 +return e}, +EE(a,b,c){var s,r,q=$.dl,p=A.Tz(q==null?$.dl=A.j8():q) +p.e=1 +p.mB(11,"v_color") +p.em(9,"u_resolution") +p.em(9,"u_tile_offset") +p.em(2,"u_radius") +p.em(14,"m_gradient") +s=p.goz() +q=A.a([],t.s) +r=new A.lR("main",q) +p.c.push(r) +q.push(u.J) +q.push(u.E) +q.push("float dist = length(localCoord);") +q.push("float st = abs(dist / u_radius);") +q.push(s.a+" = "+A.aI7(p,r,a,c)+" * scale + bias;") +return p.bk()}} +A.aen.prototype={ +$0(){var s=this,r=$.jb,q=s.b,p=s.c,o=s.d,n=s.e,m=s.f,l=s.r,k=q.c,j=q.a,i=q.d +q=q.b +if(s.a)return r.Wj(new A.w(0,0,0+(k-j),0+(i-q)),p,o,n,m,l) +else{r=r.Wh(new A.w(0,0,0+(k-j),0+(i-q)),p,o,n,m,l) +r.toString +return r}}, +$S:134} +A.P7.prototype={ +v2(a,b,c){var s=this,r=s.f +if((r===B.V||r===B.dm)&&s.y===0&&s.x.j(0,B.e))return s.O4(a,b,c) +else{if($.jb==null)$.jb=new A.uZ() +r=a.createPattern(s.v1(b,c,!1),"no-repeat") +r.toString +return r}}, +EE(a,b,c){var s,r,q,p,o=this,n=o.b,m=o.x,l=n.a-m.a,k=n.b-m.b,j=l*l+k*k +if(j<14210854822304103e-30)return o.a2q(a,b,c) +Math.sqrt(j) +n=$.dl +s=A.Tz(n==null?$.dl=A.j8():n) +s.e=1 +s.mB(11,"v_color") +s.em(9,"u_resolution") +s.em(9,"u_tile_offset") +s.em(2,"u_radius") +s.em(14,"m_gradient") +r=s.goz() +n=A.a([],t.s) +q=new A.lR("main",n) +s.c.push(q) +n.push(u.J) +n.push(u.E) +n.push("float dist = length(localCoord);") +m=o.y +p=B.c.ZN(m/(Math.min(b.c-b.a,b.d-b.b)/2),8) +n.push(m===0?"float st = dist / u_radius;":"float st = ((dist / u_radius) - "+p+") / (1.0 - "+p+");") +if(c===B.V)n.push("if (st < 0.0) { st = -1.0; }") +n.push(r.a+" = "+A.aI7(s,q,a,c)+" * scale + bias;") +return s.bk()}} +A.lk.prototype={ +gAM(){return""}} +A.H1.prototype={ +gAM(){return"blur("+A.h((this.a+this.b)*0.5)+"px)"}, +j(a,b){var s=this +if(b==null)return!1 +if(J.U(b)!==A.t(s))return!1 +return b instanceof A.H1&&b.c===s.c&&b.a===s.a&&b.b===s.b}, +gt(a){return A.N(this.a,this.b,this.c,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a){return"ImageFilter.blur("+this.a+", "+this.b+", "+this.c.k(0)+")"}} +A.Ir.prototype={ +gavK(){return A.jV(this.a)}, +j(a,b){if(b==null)return!1 +if(J.U(b)!==A.t(this))return!1 +return b instanceof A.Ir&&b.b===this.b&&A.qs(b.a,this.a)}, +gt(a){return A.N(A.bv(this.a),this.b,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a){return"ImageFilter.matrix("+A.h(this.a)+", "+this.b.k(0)+")"}} +A.Oh.prototype={$ilk:1} +A.wX.prototype={ +Jw(a){var s,r,q,p=this,o=p.c +switch(o.a){case 0:case 8:case 7:A.x(a.style,"visibility","hidden") +return null +case 2:case 6:return null +case 1:case 3:o=p.c=B.jc +break +case 4:case 5:case 9:case 10:case 11:case 12:case 13:case 14:case 15:case 16:case 17:case 18:case 19:case 20:case 21:case 22:case 23:case 24:case 25:case 26:case 27:case 28:break}s=p.b +r=A.aRG(s,o) +o=r.b +$.en.Ua(o) +p.a=r.a +q=p.c +if(q===B.jb||q===B.mQ||q===B.ja)A.x(a.style,"background-color",A.dm(s.a)) +return o}} +A.wV.prototype={ +Jw(a){var s=A.aRH(this.b),r=s.b +$.en.Ua(r) +this.a=s.a +return r}} +A.Ty.prototype={ +goz(){var s=this.Q +if(s==null)s=this.Q=new A.uf(this.y?"gFragColor":"gl_FragColor",11,3) +return s}, +mB(a,b){var s=new A.uf(b,a,1) +this.b.push(s) +return s}, +em(a,b){var s=new A.uf(b,a,2) +this.b.push(s) +return s}, +U7(a,b){var s=new A.uf(b,a,3) +this.b.push(s) +return s}, +TY(a,b){var s,r,q=this,p="varying ",o=b.c +switch(o){case 0:q.as.a+="const " +break +case 1:if(q.y)s="in " +else s=q.z?p:"attribute " +q.as.a+=s +break +case 2:q.as.a+="uniform " +break +case 3:s=q.y?"out ":p +q.as.a+=s +break}s=q.as +r=s.a+=A.b_y(b.b)+" "+b.a +if(o===0)o=s.a=r+" = " +else o=r +s.a=o+";\n"}, +bk(){var s,r,q,p,o,n=this,m=n.y +if(m)n.as.a+="#version 300 es\n" +s=n.e +if(s!=null){if(s===0)s="lowp" +else s=s===1?"mediump":"highp" +n.as.a+="precision "+s+" float;\n"}if(m&&n.Q!=null){m=n.Q +m.toString +n.TY(n.as,m)}for(m=n.b,s=m.length,r=n.as,q=0;q=0;--r,p=n){a.toString +o=B.b.cS(a,r)!==-1&&B.b.p(m,r) +n=s[r].d +n.toString +if(!o)if(p==null)q.append(n) +else q.insertBefore(n,p)}}, +aeG(a0){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e=this.x,d=e.length,c=a0.x,b=c.length,a=A.a([],t.l) +for(s=0;s1&&e.charCodeAt(0)<127&&e.charCodeAt(1)<127) +o=A.b2H(new A.agl(h,e,a,p,q),t.S) +if(f.type!=="keydown")if(h.b){r=A.ri(f) +r.toString +r=r==="CapsLock" +n=r}else n=!1 +else n=!0 +if(h.b){r=A.ri(f) +r.toString +r=r==="CapsLock"}else r=!1 +if(r){h.RE(B.z,new A.agm(s,q,o),new A.agn(h,q)) +m=B.bU}else if(n){r=h.f +if(r.i(0,q)!=null){l=f.repeat +if(l==null)l=g +if(l===!0)m=B.Ox +else{l=h.d +l.toString +l.$1(new A.hX(s,B.bo,q,o.$0(),g,!0)) +r.C(0,q) +m=B.bU}}else m=B.bU}else{if(h.f.i(0,q)==null){f.preventDefault() +return}m=B.bo}r=h.f +k=r.i(0,q) +switch(m.a){case 0:j=o.$0() +break +case 1:j=g +break +case 2:j=k +break +default:j=g}l=j==null +if(l)r.C(0,q) +else r.n(0,q,j) +$.aTt().aa(0,new A.ago(h,o,a,s)) +if(p)if(!l)h.aiV(q,o.$0(),s) +else{r=h.r.C(0,q) +if(r!=null)r.$0()}if(p)i=e +else i=g +e=k==null?o.$0():k +r=m===B.bo?g:i +if(h.d.$1(new A.hX(s,m,q,e,r,!1)))f.preventDefault()}, +ik(a){var s=this,r={} +r.a=!1 +s.d=new A.agt(r,s) +try{s.abL(a)}finally{if(!r.a)s.d.$1(B.Ow) +s.d=null}}, +DM(a,b,c,d,e){var s=this,r=$.aTA(),q=$.aTB(),p=$.aJ1() +s.zf(r,q,p,a?B.bU:B.bo,e) +r=$.aJe() +q=$.aJf() +p=$.aJ2() +s.zf(r,q,p,b?B.bU:B.bo,e) +r=$.aTC() +q=$.aTD() +p=$.aJ3() +s.zf(r,q,p,c?B.bU:B.bo,e) +r=$.aTE() +q=$.aTF() +p=$.aJ4() +s.zf(r,q,p,d?B.bU:B.bo,e)}, +zf(a,b,c,d,e){var s,r=this,q=r.f,p=q.ai(0,a),o=q.ai(0,b),n=p||o,m=d===B.bU&&!n,l=d===B.bo&&n +if(m){r.a.$1(new A.hX(A.aHR(e),B.bU,a,c,null,!0)) +q.n(0,a,c)}if(l&&p){s=q.i(0,a) +s.toString +r.SA(e,a,s)}if(l&&o){q=q.i(0,b) +q.toString +r.SA(e,b,q)}}, +SA(a,b,c){this.a.$1(new A.hX(A.aHR(a),B.bo,b,c,null,!0)) +this.f.C(0,b)}} +A.agp.prototype={ +$1(a){var s=this +if(!s.a.a&&!s.b.e){s.c.$0() +s.b.a.$1(s.d.$0())}}, +$S:29} +A.agq.prototype={ +$0(){this.a.a=!0}, +$S:0} +A.agr.prototype={ +$0(){return new A.hX(new A.b1(this.a.a+2e6),B.bo,this.b,this.c,null,!0)}, +$S:139} +A.ags.prototype={ +$0(){this.a.f.C(0,this.b)}, +$S:0} +A.agl.prototype={ +$0(){var s,r,q,p,o,n=this,m=n.b,l=B.Tf.i(0,m) +if(l!=null)return l +s=n.c.a +if(B.vw.ai(0,A.lh(s))){m=A.lh(s) +m.toString +m=B.vw.i(0,m) +r=m==null?null:m[B.c.V(s.location)] +r.toString +return r}if(n.d){q=n.a.c.a02(A.ri(s),A.lh(s),B.c.V(s.keyCode)) +if(q!=null)return q}if(m==="Dead"){m=s.altKey +p=s.ctrlKey +o=s.shiftKey +s=s.metaKey +m=m?1073741824:0 +p=p?268435456:0 +o=o?536870912:0 +s=s?2147483648:0 +return n.e+(m+p+o+s)+98784247808}return B.d.gt(m)+98784247808}, +$S:48} +A.agm.prototype={ +$0(){return new A.hX(this.a,B.bo,this.b,this.c.$0(),null,!0)}, +$S:139} +A.agn.prototype={ +$0(){this.a.f.C(0,this.b)}, +$S:0} +A.ago.prototype={ +$2(a,b){var s,r,q=this +if(J.d(q.b.$0(),a))return +s=q.a +r=s.f +if(r.amL(0,a)&&!b.$1(q.c))r.wy(r,new A.agk(s,a,q.d))}, +$S:529} +A.agk.prototype={ +$2(a,b){var s=this.b +if(b!==s)return!1 +this.a.d.$1(new A.hX(this.c,B.bo,a,s,null,!0)) +return!0}, +$S:510} +A.agt.prototype={ +$1(a){this.a.a=!0 +return this.b.a.$1(a)}, +$S:130} +A.a9O.prototype={ +ie(a){if(!this.b)return +this.b=!1 +A.cE(this.a,"contextmenu",$.aEU(),null)}, +ap0(a){if(this.b)return +this.b=!0 +A.f7(this.a,"contextmenu",$.aEU(),null)}} +A.ahY.prototype={} +A.aEp.prototype={ +$1(a){a.preventDefault()}, +$S:1} +A.a7Y.prototype={ +gajL(){var s=this.a +s===$&&A.b() +return s}, +m(){var s=this +if(s.c||s.gnq()==null)return +s.c=!0 +s.ajM()}, +vr(){var s=0,r=A.a1(t.H),q=this +var $async$vr=A.a2(function(a,b){if(a===1)return A.Z(b,r) +while(true)switch(s){case 0:s=q.gnq()!=null?2:3 +break +case 2:s=4 +return A.a7(q.kZ(),$async$vr) +case 4:s=5 +return A.a7(q.gnq().xd(0,-1),$async$vr) +case 5:case 3:return A.a_(null,r)}}) +return A.a0($async$vr,r)}, +gls(){var s=this.gnq() +s=s==null?null:s.a0b() +return s==null?"/":s}, +ga5(){var s=this.gnq() +return s==null?null:s.Lf(0)}, +ajM(){return this.gajL().$0()}} +A.Dj.prototype={ +a6j(a){var s,r=this,q=r.d +if(q==null)return +r.a=q.H9(r.gJS(r)) +if(!r.Fr(r.ga5())){s=t.z +q.p8(0,A.aY(["serialCount",0,"state",r.ga5()],s,s),"flutter",r.gls())}r.e=r.gEG()}, +gEG(){if(this.Fr(this.ga5())){var s=this.ga5() +s.toString +return B.c.V(A.mk(J.bq(t.f.a(s),"serialCount")))}return 0}, +Fr(a){return t.f.b(a)&&J.bq(a,"serialCount")!=null}, +xp(a,b,c){var s,r,q=this.d +if(q!=null){s=t.z +r=this.e +if(b){r===$&&A.b() +s=A.aY(["serialCount",r,"state",c],s,s) +a.toString +q.p8(0,s,"flutter",a)}else{r===$&&A.b();++r +this.e=r +s=A.aY(["serialCount",r,"state",c],s,s) +a.toString +q.YQ(0,s,"flutter",a)}}}, +LH(a){return this.xp(a,!1,null)}, +JT(a,b){var s,r,q,p,o=this +if(!o.Fr(b)){s=o.d +s.toString +r=o.e +r===$&&A.b() +q=t.z +s.p8(0,A.aY(["serialCount",r+1,"state",b],q,q),"flutter",o.gls())}o.e=o.gEG() +s=$.b8() +r=o.gls() +t.Xy.a(b) +q=b==null?null:J.bq(b,"state") +p=t.z +s.jS("flutter/navigation",B.b3.jK(new A.jq("pushRouteInformation",A.aY(["location",r,"state",q],p,p))),new A.ai7())}, +kZ(){var s=0,r=A.a1(t.H),q,p=this,o,n,m +var $async$kZ=A.a2(function(a,b){if(a===1)return A.Z(b,r) +while(true)switch(s){case 0:p.m() +if(p.b||p.d==null){s=1 +break}p.b=!0 +o=p.gEG() +s=o>0?3:4 +break +case 3:s=5 +return A.a7(p.d.xd(0,-o),$async$kZ) +case 5:case 4:n=p.ga5() +n.toString +t.f.a(n) +m=p.d +m.toString +m.p8(0,J.bq(n,"state"),"flutter",p.gls()) +case 1:return A.a_(q,r)}}) +return A.a0($async$kZ,r)}, +gnq(){return this.d}} +A.ai7.prototype={ +$1(a){}, +$S:33} +A.Fy.prototype={ +a6q(a){var s,r=this,q=r.d +if(q==null)return +r.a=q.H9(r.gJS(r)) +s=r.gls() +if(!A.aGX(A.aKy(self.window.history))){q.p8(0,A.aY(["origin",!0,"state",r.ga5()],t.N,t.z),"origin","") +r.aio(q,s)}}, +xp(a,b,c){var s=this.d +if(s!=null)this.Gn(s,a,!0)}, +LH(a){return this.xp(a,!1,null)}, +JT(a,b){var s,r=this,q="flutter/navigation" +if(A.aN6(b)){s=r.d +s.toString +r.aim(s) +$.b8().jS(q,B.b3.jK(B.TY),new A.aoC())}else if(A.aGX(b)){s=r.f +s.toString +r.f=null +$.b8().jS(q,B.b3.jK(new A.jq("pushRoute",s)),new A.aoD())}else{r.f=r.gls() +r.d.xd(0,-1)}}, +Gn(a,b,c){var s +if(b==null)b=this.gls() +s=this.e +if(c)a.p8(0,s,"flutter",b) +else a.YQ(0,s,"flutter",b)}, +aio(a,b){return this.Gn(a,b,!1)}, +aim(a){return this.Gn(a,null,!1)}, +kZ(){var s=0,r=A.a1(t.H),q,p=this,o,n +var $async$kZ=A.a2(function(a,b){if(a===1)return A.Z(b,r) +while(true)switch(s){case 0:p.m() +if(p.b||p.d==null){s=1 +break}p.b=!0 +o=p.d +s=3 +return A.a7(o.xd(0,-1),$async$kZ) +case 3:n=p.ga5() +n.toString +o.p8(0,J.bq(t.f.a(n),"state"),"flutter",p.gls()) +case 1:return A.a_(q,r)}}) +return A.a0($async$kZ,r)}, +gnq(){return this.d}} +A.aoC.prototype={ +$1(a){}, +$S:33} +A.aoD.prototype={ +$1(a){}, +$S:33} +A.na.prototype={} +A.BV.prototype={ +gDR(){var s,r,q=this,p=q.b +if(p===$){s=q.a +r=A.Q0(new A.ba(s,new A.acC(),A.S(s).h("ba<1>")),t.Te) +q.b!==$&&A.ay() +q.b=r +p=r}return p}} +A.acC.prototype={ +$1(a){return a.c}, +$S:30} +A.Oj.prototype={ +uK(a){var s +this.b=a +this.c=!0 +s=A.a([],t.EO) +return this.a=new A.akP(new A.ayy(a,A.a([],t.Xr),A.a([],t.cA),A.dQ()),s,new A.alW())}, +gXL(){return this.c}, +mR(){var s,r=this +if(!r.c)r.uK(B.fa) +r.c=!1 +s=r.a +s.b=s.a.amF() +s.f=!0 +s=r.a +r.b===$&&A.b() +return new A.Oi(s)}} +A.Oi.prototype={ +wG(a,b){throw A.c(A.a3("toImageSync is not supported on the HTML backend. Use drawPicture instead, or toImage."))}, +m(){this.a=!0}} +A.Pc.prototype={ +gQK(){var s,r=this,q=r.c +if(q===$){s=t.e.a(A.bM(r.gafp())) +r.c!==$&&A.ay() +r.c=s +q=s}return q}, +afq(a){var s,r,q,p=A.aKz(a) +p.toString +for(s=this.a,r=s.length,q=0;q>>0)) +f.fA(c,B.ac.cq([!0])) +return +case"SystemChrome.setSystemUIOverlayStyle":l=A.j7(J.bq(t.xE.a(s.b),"statusBarColor")) +A.aRB(l==null?null:new A.m(l>>>0)) +f.fA(c,B.ac.cq([!0])) +return +case"SystemChrome.setPreferredOrientations":B.E3.xo(t.j.a(s.b)).ba(new A.aci(f,c),t.P) +return +case"SystemSound.play":f.fA(c,B.ac.cq([!0])) +return +case"Clipboard.setData":new A.B6(A.aFu(),A.aGz()).a0W(s,c) +return +case"Clipboard.getData":new A.B6(A.aFu(),A.aGz()).a_V(c) +return +case"Clipboard.hasStrings":new A.B6(A.aFu(),A.aGz()).aqZ(c) +return}break +case"flutter/service_worker":q=self.window +k=self.document.createEvent("Event") +k.initEvent("flutter-first-frame",!0,!0) +q.dispatchEvent(k) +return +case"flutter/textinput":q=$.a62() +q.guO(q).aqU(b,c) +return +case"flutter/contextmenu":switch(B.b3.iY(b).a){case"enableContextMenu":f.e.i(0,0).gVd().ap0(0) +f.fA(c,B.ac.cq([!0])) +return +case"disableContextMenu":f.e.i(0,0).gVd().ie(0) +f.fA(c,B.ac.cq([!0])) +return}return +case"flutter/mousecursor":s=B.dx.iY(b) +o=t.f.a(s.b) +switch(s.a){case"activateSystemCursor":q=f.e.i(0,0) +j=q.c +if(j===$){k=$.en.f +k===$&&A.b() +j!==$&&A.ay() +j=q.c=new A.ahY(k)}q=A.dk(J.bq(o,"kind")) +k=j.a.style +q=B.Tb.i(0,q) +A.x(k,"cursor",q==null?"default":q) +break}return +case"flutter/web_test_e2e":f.fA(c,B.ac.cq([A.b3E(B.b3,b)])) +return +case"flutter/platform_views":q=f.db +if(q==null)q=f.db=new A.ajN($.aEL(),new A.acj()) +c.toString +q.aqt(b,c) +return +case"flutter/accessibility":q=$.en.y +q===$&&A.b() +k=t.f +i=k.a(J.bq(k.a(B.cp.h8(b)),"data")) +h=A.dk(J.bq(i,"message")) +if(h!=null&&h.length!==0){g=A.aGe(i,"assertiveness") +q.Uj(h,B.PA[g==null?0:g])}f.fA(c,B.cp.cq(!0)) +return +case"flutter/navigation":f.e.i(0,0).IS(b).ba(new A.ack(f,c),t.P) +f.to="/" +return}q=$.aRp +if(q!=null){q.$3(a,b,c) +return}f.fA(c,null)}, +tX(a,b){return this.abO(a,b)}, +abO(a,b){var s=0,r=A.a1(t.H),q=1,p,o=this,n,m,l,k,j,i +var $async$tX=A.a2(function(c,d){if(c===1){p=d +s=q}while(true)switch(s){case 0:q=3 +i=t.Lk +s=6 +return A.a7(A.zS($.zJ.wY(a)),$async$tX) +case 6:n=i.a(d) +s=7 +return A.a7(n.gBX().qj(),$async$tX) +case 7:m=d +o.fA(b,A.fC(m,0,null)) +q=1 +s=5 +break +case 3:q=2 +j=p +l=A.ax(j) +$.e7().$1("Error while trying to load an asset: "+A.h(l)) +o.fA(b,null) +s=5 +break +case 2:s=1 +break +case 5:return A.a_(null,r) +case 1:return A.Z(p,r)}}) +return A.a0($async$tX,r)}, +aaG(a){switch(a){case"HapticFeedbackType.lightImpact":return 10 +case"HapticFeedbackType.mediumImpact":return 20 +case"HapticFeedbackType.heavyImpact":return 30 +case"HapticFeedbackType.selectionClick":return 10 +default:return 50}}, +l4(){var s=$.aRx +if(s==null)throw A.c(A.cj("scheduleFrameCallback must be initialized first.")) +s.$0()}, +a6P(){var s=this +if(s.fr!=null)return +s.a=s.a.Vh(A.aFL()) +s.fr=A.dd(self.window,"languagechange",new A.acg(s))}, +a6L(){var s,r,q,p=new self.MutationObserver(A.bM(new A.acf(this))) +this.go=p +s=self.document.documentElement +s.toString +r=A.a(["style"],t.s) +q=A.A(t.N,t.z) +q.n(0,"attributes",!0) +q.n(0,"attributeFilter",r) +r=A.aA(q) +if(r==null)r=t.K.a(r) +p.observe(s,r)}, +Tv(a){var s=this,r=s.a +if(r.d!==a){s.a=r.an5(a) +A.o9(null,null) +A.o9(s.k4,s.ok)}}, +ajR(a){var s=this.a,r=s.a +if((r.a&32)!==0!==a){this.a=s.Vf(r.an2(a)) +A.o9(null,null)}}, +a6I(){var s,r=this,q=r.k2 +r.Tv(q.matches?B.ao:B.ad) +s=t.e.a(A.bM(new A.ace(r))) +r.k3=s +q.addListener(s)}, +jT(a,b,c){A.Lg(this.R8,this.RG,new A.ub(b,0,a,c),t.KL)}, +gAk(){var s=this.to +return s==null?this.to=this.e.i(0,0).gzT().gls():s}, +fA(a,b){A.Ch(B.z,null,t.H).ba(new A.acn(a,b),t.P)}} +A.acm.prototype={ +$0(){return this.a.$1(this.b.$1(this.c))}, +$S:0} +A.acl.prototype={ +$1(a){this.a.Cl(this.b,a,t.CD)}, +$S:33} +A.ach.prototype={ +$1(a){this.a.fA(this.b,B.ac.cq([!0]))}, +$S:29} +A.aci.prototype={ +$1(a){this.a.fA(this.b,B.ac.cq([a]))}, +$S:105} +A.acj.prototype={ +$1(a){var s=$.en.r +s===$&&A.b() +s.append(a)}, +$S:1} +A.ack.prototype={ +$1(a){var s=this.b +if(a)this.a.fA(s,B.ac.cq([!0])) +else if(s!=null)s.$1(null)}, +$S:105} +A.acg.prototype={ +$1(a){var s=this.a +s.a=s.a.Vh(A.aFL()) +A.o9(s.fx,s.fy)}, +$S:1} +A.acf.prototype={ +$2(a,b){var s,r,q,p,o,n,m,l=null +for(s=J.ap(a),r=t.e,q=this.a;s.q();){p=s.gJ(s) +p.toString +r.a(p) +o=p.type +if((o==null?l:o)==="attributes"){o=p.attributeName +o=(o==null?l:o)==="style"}else o=!1 +if(o){o=self.document.documentElement +o.toString +n=A.b7c(o) +m=(n==null?16:n)/16 +o=q.a +if(o.e!==m){q.a=o.anb(m) +A.o9(l,l) +A.o9(q.id,q.k1)}}}}, +$S:509} +A.ace.prototype={ +$1(a){var s=A.aKz(a) +s.toString +s=s?B.ao:B.ad +this.a.Tv(s)}, +$S:1} +A.acn.prototype={ +$1(a){var s=this.a +if(s!=null)s.$1(this.b)}, +$S:29} +A.aE7.prototype={ +$0(){this.a.$2(this.b,this.c)}, +$S:0} +A.Vg.prototype={ +k(a){return A.t(this).k(0)+"[view: null, geometry: "+B.F.k(0)+"]"}} +A.RE.prototype={ +uZ(a,b,c,d,e){var s=this,r=a==null?s.a:a,q=d==null?s.c:d,p=c==null?s.d:c,o=e==null?s.e:e,n=b==null?s.f:b +return new A.RE(r,!1,q,p,o,n,s.r,s.w)}, +Vf(a){return this.uZ(a,null,null,null,null)}, +Vh(a){return this.uZ(null,a,null,null,null)}, +anb(a){return this.uZ(null,null,null,null,a)}, +an5(a){return this.uZ(null,null,a,null,null)}, +an7(a){return this.uZ(null,null,null,a,null)}} +A.ajL.prototype={ +Kf(a,b,c){var s=this.a +if(s.ai(0,a))return!1 +s.n(0,a,b) +if(!c)this.c.D(0,a) +return!0}, +auN(a,b){return this.Kf(a,b,!0)}, +auW(a,b,c){this.d.n(0,b,a) +return this.b.bm(0,b,new A.ajM(this,b,"flt-pv-slot-"+b,a,c))}, +ahD(a){var s,r,q +if(a==null)return +s=$.cz() +if(s!==B.W){a.remove() +return}s=a.getAttribute("slot") +r="tombstone-"+A.h(s==null?null:s) +q=A.be(self.document,"slot") +A.x(q.style,"display","none") +s=A.aA(r) +if(s==null)s=t.K.a(s) +q.setAttribute("name",s) +s=$.en.w +s===$&&A.b() +s.append(q) +s=A.aA(r) +if(s==null)s=t.K.a(s) +a.setAttribute("slot",s) +a.remove() +q.remove()}} +A.ajM.prototype={ +$0(){var s,r,q,p,o=this,n=A.be(self.document,"flt-platform-view"),m=o.b +n.id="flt-pv-"+m +s=A.aA(o.c) +if(s==null)s=t.K.a(s) +n.setAttribute("slot",s) +s=o.d +r=o.a.a.i(0,s) +r.toString +q=t.e +if(t._a.b(r))p=q.a(r.$2$params(m,o.e)) +else{t.xA.a(r) +p=q.a(r.$1(m))}if(p.style.getPropertyValue("height").length===0){$.e7().$1("Height of Platform View type: ["+s+"] may not be set. Defaulting to `height: 100%`.\nSet `style.height` to any appropriate value to stop this message.") +A.x(p.style,"height","100%")}if(p.style.getPropertyValue("width").length===0){$.e7().$1("Width of Platform View type: ["+s+"] may not be set. Defaulting to `width: 100%`.\nSet `style.width` to any appropriate value to stop this message.") +A.x(p.style,"width","100%")}n.append(p) +return n}, +$S:107} +A.ajN.prototype={ +a8U(a,b){var s=t.f.a(a.b),r=J.aF(s),q=B.c.V(A.kZ(r.i(s,"id"))),p=A.bQ(r.i(s,"viewType")),o=r.i(s,"params") +r=this.b +if(!r.a.ai(0,p)){b.$1(B.dx.oj("unregistered_view_type","If you are the author of the PlatformView, make sure `registerViewFactory` is invoked.","A HtmlElementView widget is trying to create a platform view with an unregistered type: <"+p+">.")) +return}if(r.b.ai(0,q)){b.$1(B.dx.oj("recreating_view","view id: "+q,"trying to create an already created view")) +return}this.c.$1(r.auW(p,q,o)) +b.$1(B.dx.vp(null))}, +aqt(a,b){var s,r=B.dx.iY(a) +switch(r.a){case"create":this.a8U(r,b) +return +case"dispose":s=this.b +s.ahD(s.b.C(0,A.el(r.b))) +b.$1(B.dx.vp(null)) +return}b.$1(null)}} +A.amV.prototype={ +aw8(){A.cE(self.document,"touchstart",t.e.a(A.bM(new A.amW())),null)}} +A.amW.prototype={ +$1(a){}, +$S:1} +A.RI.prototype={ +a8K(){var s,r=this +if("PointerEvent" in self.window){s=new A.ayH(A.A(t.S,t.ZW),A.a([],t.he),r.a,r.gFT(),r.c,r.d) +s.tb() +return s}if("TouchEvent" in self.window){s=new A.aBA(A.aS(t.S),A.a([],t.he),r.a,r.gFT(),r.c,r.d) +s.tb() +return s}if("MouseEvent" in self.window){s=new A.ay7(new A.uH(),A.a([],t.he),r.a,r.gFT(),r.c,r.d) +s.tb() +return s}throw A.c(A.a3("This browser does not support pointer, touch, or mouse events."))}, +afx(a){var s=A.a(a.slice(0),A.S(a)),r=$.b8() +A.Lg(r.as,r.at,new A.xf(s),t.kf)}} +A.ak0.prototype={ +k(a){return"pointers:"+("PointerEvent" in self.window)+", touch:"+("TouchEvent" in self.window)+", mouse:"+("MouseEvent" in self.window)}} +A.Ij.prototype={} +A.atr.prototype={ +H7(a,b,c,d,e){var s=t.e.a(A.bM(new A.ats(d))) +A.cE(b,c,s,e) +this.a.push(new A.Ij(c,b,s,e,!1))}, +H6(a,b,c,d){return this.H7(a,b,c,d,!0)}} +A.ats.prototype={ +$1(a){var s=$.eP +if((s==null?$.eP=A.mJ():s).Z1(a))this.a.$1(a)}, +$S:1} +A.a47.prototype={ +Q6(a,b){if(b==null)return!1 +return Math.abs(b- -3*a)>1}, +aed(a){var s,r,q,p,o,n=this,m=$.cz() +if(m===B.bO)return!1 +if(n.Q6(a.deltaX,A.aKG(a))||n.Q6(a.deltaY,A.aKH(a)))return!1 +if(!(B.c.bF(a.deltaX,120)===0&&B.c.bF(a.deltaY,120)===0)){m=A.aKG(a) +if(B.c.bF(m==null?1:m,120)===0){m=A.aKH(a) +m=B.c.bF(m==null?1:m,120)===0}else m=!1}else m=!0 +if(m){m=a.deltaX +s=n.f +r=s==null +q=r?null:s.deltaX +p=Math.abs(m-(q==null?0:q)) +m=a.deltaY +q=r?null:s.deltaY +o=Math.abs(m-(q==null?0:q)) +if(!r)if(!(p===0&&o===0))m=!(p<20&&o<20) +else m=!0 +else m=!0 +if(m){if(A.hi(a)!=null)m=(r?null:A.hi(s))!=null +else m=!1 +if(m){m=A.hi(a) +m.toString +s.toString +s=A.hi(s) +s.toString +if(m-s<50&&n.r)return!0}return!1}}return!0}, +a8I(a){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d=this +if(d.aed(a)){s=B.b6 +r=-2}else{s=B.bj +r=-1}q=a.deltaX +p=a.deltaY +switch(B.c.V(a.deltaMode)){case 1:o=$.aP1 +if(o==null){n=A.be(self.document,"div") +o=n.style +A.x(o,"font-size","initial") +A.x(o,"display","none") +self.document.body.append(n) +o=A.aFK(self.window,n).getPropertyValue("font-size") +if(B.d.p(o,"px"))m=A.RP(A.is(o,"px","")) +else m=null +n.remove() +o=$.aP1=m==null?16:m/4}q*=o +p*=o +break +case 2:o=$.cZ() +q*=o.gjd().a +p*=o.gjd().b +break +case 0:o=$.e6() +if(o===B.bZ){o=$.cz() +if(o!==B.W)o=o===B.bO +else o=!0}else o=!1 +if(o){$.cZ() +o=$.c4() +l=o.d +if(l==null){l=self.window.devicePixelRatio +if(l===0)l=1}q*=l +o=o.d +if(o==null){o=self.window.devicePixelRatio +if(o===0)o=1}p*=o}break +default:break}k=A.a([],t.v) +j=A.aIf(a,d.b) +o=$.e6() +if(o===B.bZ){o=$.agh +o=o==null?null:o.gtM().f.ai(0,$.aJe()) +if(o!==!0){o=$.agh +o=o==null?null:o.gtM().f.ai(0,$.aJf()) +i=o===!0}else i=!0}else i=!1 +o=a.ctrlKey&&!i +l=d.d +h=j.a +if(o){o=A.hi(a) +o.toString +o=A.uG(o) +$.cZ() +g=$.c4() +f=g.d +if(f==null){f=self.window.devicePixelRatio +if(f===0)f=1}g=g.d +if(g==null){g=self.window.devicePixelRatio +if(g===0)g=1}e=A.k8(a) +e.toString +l.amR(k,B.c.V(e),B.d8,r,s,h*f,j.b*g,1,1,Math.exp(-p/200),B.W6,o)}else{o=A.hi(a) +o.toString +o=A.uG(o) +$.cZ() +g=$.c4() +f=g.d +if(f==null){f=self.window.devicePixelRatio +if(f===0)f=1}g=g.d +if(g==null){g=self.window.devicePixelRatio +if(g===0)g=1}e=A.k8(a) +e.toString +l.amT(k,B.c.V(e),B.d8,r,s,h*f,j.b*g,1,1,q,p,B.W5,o)}d.f=a +d.r=s===B.b6 +return k}, +MT(a){var s=this.b,r=t.e.a(A.bM(a)),q=t.K,p=A.aA(A.aY(["capture",!1,"passive",!1],t.N,q)) +q=p==null?q.a(p):p +s.addEventListener("wheel",r,q) +this.a.push(new A.Ij("wheel",s,r,!1,!0))}, +PO(a){this.c.$1(this.a8I(a)) +a.preventDefault()}} +A.me.prototype={ +k(a){return A.t(this).k(0)+"(change: "+this.a.k(0)+", buttons: "+this.b+")"}} +A.uH.prototype={ +Ll(a,b){var s +if(this.a!==0)return this.D_(b) +s=(b===0&&a>-1?A.b5p(a):b)&1073741823 +this.a=s +return new A.me(B.zj,s)}, +D_(a){var s=a&1073741823,r=this.a +if(r===0&&s!==0)return new A.me(B.d8,r) +this.a=s +return new A.me(s===0?B.d8:B.f8,s)}, +xf(a){if(this.a!==0&&(a&1073741823)===0){this.a=0 +return new A.me(B.ld,0)}return null}, +Lm(a){if((a&1073741823)===0){this.a=0 +return new A.me(B.d8,0)}return null}, +Ln(a){var s +if(this.a===0)return null +s=this.a=(a==null?0:a)&1073741823 +if(s===0)return new A.me(B.ld,s) +else return new A.me(B.f8,s)}} +A.ayH.prototype={ +EW(a){return this.w.bm(0,a,new A.ayJ())}, +Rq(a){if(A.aFJ(a)==="touch")this.w.C(0,A.aKC(a))}, +DY(a,b,c,d,e){this.H7(0,a,b,new A.ayI(this,d,c),e)}, +DX(a,b,c){return this.DY(a,b,c,!0,!0)}, +a6Q(a,b,c,d){return this.DY(a,b,c,d,!0)}, +tb(){var s=this,r=s.b +s.DX(r,"pointerdown",new A.ayK(s)) +s.DX(self.window,"pointermove",new A.ayL(s)) +s.DY(r,"pointerleave",new A.ayM(s),!1,!1) +s.DX(self.window,"pointerup",new A.ayN(s)) +s.a6Q(r,"pointercancel",new A.ayO(s),!1) +s.MT(new A.ayP(s))}, +ht(a,b,c){var s,r,q,p,o,n,m,l,k=this,j=A.aFJ(c) +j.toString +s=k.R4(j) +j=A.aKD(c) +j.toString +r=A.aKE(c) +r.toString +j=Math.abs(j)>Math.abs(r)?A.aKD(c):A.aKE(c) +j.toString +r=A.hi(c) +r.toString +q=A.uG(r) +p=c.pressure +if(p==null)p=null +o=A.aIf(c,k.b) +r=k.pM(c) +$.cZ() +n=$.c4() +m=n.d +if(m==null){m=self.window.devicePixelRatio +if(m===0)m=1}n=n.d +if(n==null){n=self.window.devicePixelRatio +if(n===0)n=1}l=p==null?0:p +k.d.amS(a,b.b,b.a,r,s,o.a*m,o.b*n,l,1,B.dS,j/180*3.141592653589793,q)}, +a9W(a){var s,r +if("getCoalescedEvents" in a){s=J.l1(a.getCoalescedEvents(),t.e) +r=new A.ft(s.a,s.$ti.h("ft<1,e>")) +if(!r.ga7(r))return r}return A.a([a],t.J)}, +R4(a){switch(a){case"mouse":return B.bj +case"pen":return B.bu +case"touch":return B.aE +default:return B.c_}}, +pM(a){var s=A.aFJ(a) +s.toString +if(this.R4(s)===B.bj)s=-1 +else{s=A.aKC(a) +s.toString +s=B.c.V(s)}return s}} +A.ayJ.prototype={ +$0(){return new A.uH()}, +$S:472} +A.ayI.prototype={ +$1(a){var s,r,q,p,o +if(this.b){s=a.getModifierState("Alt") +r=a.getModifierState("Control") +q=a.getModifierState("Meta") +p=a.getModifierState("Shift") +o=A.hi(a) +o.toString +this.a.e.DM(s,r,q,p,o)}this.c.$1(a)}, +$S:1} +A.ayK.prototype={ +$1(a){var s,r,q=this.a,p=q.pM(a),o=A.a([],t.v),n=q.EW(p),m=A.k8(a) +m.toString +s=n.xf(B.c.V(m)) +if(s!=null)q.ht(o,s,a) +m=B.c.V(a.button) +r=A.k8(a) +r.toString +q.ht(o,n.Ll(m,B.c.V(r)),a) +q.c.$1(o)}, +$S:18} +A.ayL.prototype={ +$1(a){var s,r,q,p,o=this.a,n=o.EW(o.pM(a)),m=A.a([],t.v) +for(s=J.ap(o.a9W(a));s.q();){r=s.gJ(s) +q=r.buttons +if(q==null)q=null +q.toString +p=n.xf(B.c.V(q)) +if(p!=null)o.ht(m,p,r) +q=r.buttons +if(q==null)q=null +q.toString +o.ht(m,n.D_(B.c.V(q)),r)}o.c.$1(m)}, +$S:18} +A.ayM.prototype={ +$1(a){var s,r=this.a,q=r.EW(r.pM(a)),p=A.a([],t.v),o=A.k8(a) +o.toString +s=q.Lm(B.c.V(o)) +if(s!=null){r.ht(p,s,a) +r.c.$1(p)}}, +$S:18} +A.ayN.prototype={ +$1(a){var s,r,q,p=this.a,o=p.pM(a),n=p.w +if(n.ai(0,o)){s=A.a([],t.v) +n=n.i(0,o) +n.toString +r=A.k8(a) +q=n.Ln(r==null?null:B.c.V(r)) +p.Rq(a) +if(q!=null){p.ht(s,q,a) +p.c.$1(s)}}}, +$S:18} +A.ayO.prototype={ +$1(a){var s,r=this.a,q=r.pM(a),p=r.w +if(p.ai(0,q)){s=A.a([],t.v) +p=p.i(0,q) +p.toString +p.a=0 +r.Rq(a) +r.ht(s,new A.me(B.lb,0),a) +r.c.$1(s)}}, +$S:18} +A.ayP.prototype={ +$1(a){this.a.PO(a)}, +$S:1} +A.aBA.prototype={ +xP(a,b,c){this.H6(0,a,b,new A.aBB(this,!0,c))}, +tb(){var s=this,r=s.b +s.xP(r,"touchstart",new A.aBC(s)) +s.xP(r,"touchmove",new A.aBD(s)) +s.xP(r,"touchend",new A.aBE(s)) +s.xP(r,"touchcancel",new A.aBF(s))}, +y0(a,b,c,d,e){var s,r,q,p,o,n=A.aWS(e) +n.toString +n=B.c.V(n) +s=e.clientX +$.cZ() +r=$.c4() +q=r.d +if(q==null){q=self.window.devicePixelRatio +if(q===0)q=1}p=e.clientY +r=r.d +if(r==null){r=self.window.devicePixelRatio +if(r===0)r=1}o=c?1:0 +this.d.amP(b,o,a,n,s*q,p*r,1,1,B.dS,d)}} +A.aBB.prototype={ +$1(a){var s=a.altKey,r=a.ctrlKey,q=a.metaKey,p=a.shiftKey,o=A.hi(a) +o.toString +this.a.e.DM(s,r,q,p,o) +this.c.$1(a)}, +$S:1} +A.aBC.prototype={ +$1(a){var s,r,q,p,o,n,m,l=A.hi(a) +l.toString +s=A.uG(l) +r=A.a([],t.v) +for(l=t.e,q=t.VA,q=A.cC(new A.nN(a.changedTouches,q),q.h("n.E"),l),l=A.cC(q.a,A.o(q).c,l),q=J.ap(l.a),l=A.o(l),l=l.h("@<1>").N(l.z[1]).z[1],p=this.a;q.q();){o=l.a(q.gJ(q)) +n=o.identifier +if(n==null)n=null +n.toString +m=p.w +if(!m.p(0,B.c.V(n))){n=o.identifier +if(n==null)n=null +n.toString +m.D(0,B.c.V(n)) +p.y0(B.zj,r,!0,s,o)}}p.c.$1(r)}, +$S:18} +A.aBD.prototype={ +$1(a){var s,r,q,p,o,n,m +a.preventDefault() +s=A.hi(a) +s.toString +r=A.uG(s) +q=A.a([],t.v) +for(s=t.e,p=t.VA,p=A.cC(new A.nN(a.changedTouches,p),p.h("n.E"),s),s=A.cC(p.a,A.o(p).c,s),p=J.ap(s.a),s=A.o(s),s=s.h("@<1>").N(s.z[1]).z[1],o=this.a;p.q();){n=s.a(p.gJ(p)) +m=n.identifier +if(m==null)m=null +m.toString +if(o.w.p(0,B.c.V(m)))o.y0(B.f8,q,!0,r,n)}o.c.$1(q)}, +$S:18} +A.aBE.prototype={ +$1(a){var s,r,q,p,o,n,m,l +a.preventDefault() +s=A.hi(a) +s.toString +r=A.uG(s) +q=A.a([],t.v) +for(s=t.e,p=t.VA,p=A.cC(new A.nN(a.changedTouches,p),p.h("n.E"),s),s=A.cC(p.a,A.o(p).c,s),p=J.ap(s.a),s=A.o(s),s=s.h("@<1>").N(s.z[1]).z[1],o=this.a;p.q();){n=s.a(p.gJ(p)) +m=n.identifier +if(m==null)m=null +m.toString +l=o.w +if(l.p(0,B.c.V(m))){m=n.identifier +if(m==null)m=null +m.toString +l.C(0,B.c.V(m)) +o.y0(B.ld,q,!1,r,n)}}o.c.$1(q)}, +$S:18} +A.aBF.prototype={ +$1(a){var s,r,q,p,o,n,m,l=A.hi(a) +l.toString +s=A.uG(l) +r=A.a([],t.v) +for(l=t.e,q=t.VA,q=A.cC(new A.nN(a.changedTouches,q),q.h("n.E"),l),l=A.cC(q.a,A.o(q).c,l),q=J.ap(l.a),l=A.o(l),l=l.h("@<1>").N(l.z[1]).z[1],p=this.a;q.q();){o=l.a(q.gJ(q)) +n=o.identifier +if(n==null)n=null +n.toString +m=p.w +if(m.p(0,B.c.V(n))){n=o.identifier +if(n==null)n=null +n.toString +m.C(0,B.c.V(n)) +p.y0(B.lb,r,!1,s,o)}}p.c.$1(r)}, +$S:18} +A.ay7.prototype={ +MO(a,b,c,d){this.H7(0,a,b,new A.ay8(this,!0,c),d)}, +DU(a,b,c){return this.MO(a,b,c,!0)}, +tb(){var s=this,r=s.b +s.DU(r,"mousedown",new A.ay9(s)) +s.DU(self.window,"mousemove",new A.aya(s)) +s.MO(r,"mouseleave",new A.ayb(s),!1) +s.DU(self.window,"mouseup",new A.ayc(s)) +s.MT(new A.ayd(s))}, +ht(a,b,c){var s,r,q=A.aIf(c,this.b),p=A.hi(c) +p.toString +p=A.uG(p) +$.cZ() +s=$.c4() +r=s.d +if(r==null){r=self.window.devicePixelRatio +if(r===0)r=1}s=s.d +if(s==null){s=self.window.devicePixelRatio +if(s===0)s=1}this.d.amQ(a,b.b,b.a,-1,B.bj,q.a*r,q.b*s,1,1,B.dS,p)}} +A.ay8.prototype={ +$1(a){var s=a.getModifierState("Alt"),r=a.getModifierState("Control"),q=a.getModifierState("Meta"),p=a.getModifierState("Shift"),o=A.hi(a) +o.toString +this.a.e.DM(s,r,q,p,o) +this.c.$1(a)}, +$S:1} +A.ay9.prototype={ +$1(a){var s,r,q=A.a([],t.v),p=this.a,o=p.w,n=A.k8(a) +n.toString +s=o.xf(B.c.V(n)) +if(s!=null)p.ht(q,s,a) +n=B.c.V(a.button) +r=A.k8(a) +r.toString +p.ht(q,o.Ll(n,B.c.V(r)),a) +p.c.$1(q)}, +$S:18} +A.aya.prototype={ +$1(a){var s,r=A.a([],t.v),q=this.a,p=q.w,o=A.k8(a) +o.toString +s=p.xf(B.c.V(o)) +if(s!=null)q.ht(r,s,a) +o=A.k8(a) +o.toString +q.ht(r,p.D_(B.c.V(o)),a) +q.c.$1(r)}, +$S:18} +A.ayb.prototype={ +$1(a){var s,r=A.a([],t.v),q=this.a,p=A.k8(a) +p.toString +s=q.w.Lm(B.c.V(p)) +if(s!=null){q.ht(r,s,a) +q.c.$1(r)}}, +$S:18} +A.ayc.prototype={ +$1(a){var s,r=A.a([],t.v),q=this.a,p=A.k8(a) +p=p==null?null:B.c.V(p) +s=q.w.Ln(p) +if(s!=null){q.ht(r,s,a) +q.c.$1(r)}}, +$S:18} +A.ayd.prototype={ +$1(a){this.a.PO(a)}, +$S:1} +A.zo.prototype={} +A.ajS.prototype={ +yb(a,b,c){return this.a.bm(0,a,new A.ajT(b,c))}, +nL(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,a0,a1,a2,a3,a4,a5,a6,a7,a8){var s,r,q=this.a.i(0,c) +q.toString +s=q.b +r=q.c +q.b=i +q.c=j +q=q.a +if(q==null)q=0 +return A.aMr(a,b,c,d,e,f,!1,h,i-s,j-r,i,j,k,q,l,m,n,o,p,a0,a1,a2,a3,a4,a5,a6,!1,a7,a8)}, +FE(a,b,c){var s=this.a.i(0,a) +s.toString +return s.b!==b||s.c!==c}, +mw(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,a0,a1,a2,a3,a4,a5,a6,a7){var s,r,q=this.a.i(0,c) +q.toString +s=q.b +r=q.c +q.b=i +q.c=j +q=q.a +if(q==null)q=0 +return A.aMr(a,b,c,d,e,f,!1,h,i-s,j-r,i,j,k,q,l,m,n,o,p,a0,a1,a2,a3,a4,B.dS,a5,!0,a6,a7)}, +uV(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){var s,r,q,p=this +if(m===B.dS)switch(c.a){case 1:p.yb(d,f,g) +a.push(p.nL(b,c,d,0,0,e,!1,0,f,g,0,h,i,0,0,0,0,0,j,k,l,m,0,n,o)) +break +case 3:s=p.a.ai(0,d) +p.yb(d,f,g) +if(!s)a.push(p.mw(b,B.lc,d,0,0,e,!1,0,f,g,0,h,i,0,0,0,0,0,j,k,l,0,n,o)) +a.push(p.nL(b,c,d,0,0,e,!1,0,f,g,0,h,i,0,0,0,0,0,j,k,l,m,0,n,o)) +p.b=b +break +case 4:s=p.a.ai(0,d) +p.yb(d,f,g).a=$.aOu=$.aOu+1 +if(!s)a.push(p.mw(b,B.lc,d,0,0,e,!1,0,f,g,0,h,i,0,0,0,0,0,j,k,l,0,n,o)) +if(p.FE(d,f,g))a.push(p.mw(0,B.d8,d,0,0,e,!1,0,f,g,0,0,i,0,0,0,0,0,j,k,l,0,n,o)) +a.push(p.nL(b,c,d,0,0,e,!1,0,f,g,0,h,i,0,0,0,0,0,j,k,l,m,0,n,o)) +p.b=b +break +case 5:a.push(p.nL(b,c,d,0,0,e,!1,0,f,g,0,h,i,0,0,0,0,0,j,k,l,m,0,n,o)) +p.b=b +break +case 6:case 0:r=p.a +q=r.i(0,d) +q.toString +if(c===B.lb){f=q.b +g=q.c}if(p.FE(d,f,g))a.push(p.mw(p.b,B.f8,d,0,0,e,!1,0,f,g,0,h,i,0,0,0,0,0,j,k,l,0,n,o)) +a.push(p.nL(b,c,d,0,0,e,!1,0,f,g,0,h,i,0,0,0,0,0,j,k,l,m,0,n,o)) +if(e===B.aE){a.push(p.mw(0,B.W4,d,0,0,e,!1,0,f,g,0,0,i,0,0,0,0,0,j,k,l,0,n,o)) +r.C(0,d)}break +case 2:r=p.a +q=r.i(0,d) +q.toString +a.push(p.nL(b,c,d,0,0,e,!1,0,q.b,q.c,0,h,i,0,0,0,0,0,j,k,l,m,0,n,o)) +r.C(0,d) +break +case 7:case 8:case 9:break}else switch(m.a){case 1:case 2:case 3:s=p.a.ai(0,d) +p.yb(d,f,g) +if(!s)a.push(p.mw(b,B.lc,d,0,0,e,!1,0,f,g,0,h,i,0,0,0,0,0,j,k,l,0,n,o)) +if(p.FE(d,f,g))if(b!==0)a.push(p.mw(b,B.f8,d,0,0,e,!1,0,f,g,0,h,i,0,0,0,0,0,j,k,l,0,n,o)) +else a.push(p.mw(b,B.d8,d,0,0,e,!1,0,f,g,0,h,i,0,0,0,0,0,j,k,l,0,n,o)) +a.push(p.nL(b,c,d,0,0,e,!1,0,f,g,0,h,i,0,0,0,0,0,j,k,l,m,0,n,o)) +break +case 0:break +case 4:break}}, +amR(a,b,c,d,e,f,g,h,i,j,k,l){return this.uV(a,b,c,d,e,f,g,h,i,j,0,0,k,0,l)}, +amT(a,b,c,d,e,f,g,h,i,j,k,l,m){return this.uV(a,b,c,d,e,f,g,h,i,1,j,k,l,0,m)}, +amQ(a,b,c,d,e,f,g,h,i,j,k){return this.uV(a,b,c,d,e,f,g,h,i,1,0,0,j,0,k)}, +amP(a,b,c,d,e,f,g,h,i,j){return this.uV(a,b,c,d,B.aE,e,f,g,h,1,0,0,i,0,j)}, +amS(a,b,c,d,e,f,g,h,i,j,k,l){return this.uV(a,b,c,d,e,f,g,h,i,1,0,0,j,k,l)}} +A.ajT.prototype={ +$0(){return new A.zo(this.a,this.b)}, +$S:306} +A.aGJ.prototype={} +A.ako.prototype={ +a6m(a){var s=this,r=t.e +s.b=r.a(A.bM(new A.akp(s))) +A.cE(self.window,"keydown",s.b,null) +s.c=r.a(A.bM(new A.akq(s))) +A.cE(self.window,"keyup",s.c,null) +$.qo.push(new A.akr(s))}, +m(){var s,r,q=this +A.f7(self.window,"keydown",q.b,null) +A.f7(self.window,"keyup",q.c,null) +for(s=q.a,r=A.lw(s,s.r,A.o(s).c);r.q();)s.i(0,r.d).b3(0) +s.a0(0) +$.aGL=q.c=q.b=null}, +PB(a){var s,r,q,p,o,n,m=this,l=globalThis.KeyboardEvent +if(!(l!=null&&a instanceof l))return +s=new A.lm(a) +r=A.ri(a) +r.toString +if(a.type==="keydown"&&A.lh(a)==="Tab"&&a.isComposing)return +q=A.lh(a) +q.toString +if(!(q==="Meta"||q==="Shift"||q==="Alt"||q==="Control")&&m.e){q=m.a +p=q.i(0,r) +if(p!=null)p.b3(0) +if(a.type==="keydown")p=a.ctrlKey||a.shiftKey||a.altKey||a.metaKey +else p=!1 +if(p)q.n(0,r,A.cy(B.jW,new A.akt(m,r,s))) +else q.C(0,r)}o=a.getModifierState("Shift")?1:0 +if(a.getModifierState("Alt")||a.getModifierState("AltGraph"))o|=2 +if(a.getModifierState("Control"))o|=4 +if(a.getModifierState("Meta"))o|=8 +m.d=o +if(a.type==="keydown")if(A.lh(a)==="CapsLock"){r=o|32 +m.d=r}else if(A.ri(a)==="NumLock"){r=o|16 +m.d=r}else if(A.lh(a)==="ScrollLock"){r=o|64 +m.d=r}else{if(A.lh(a)==="Meta"){r=$.e6() +r=r===B.l6}else r=!1 +if(r){r=o|8 +m.d=r}else r=o}else r=o +n=A.aY(["type",a.type,"keymap","web","code",A.ri(a),"key",A.lh(a),"location",B.c.V(a.location),"metaState",r,"keyCode",B.c.V(a.keyCode)],t.N,t.z) +$.b8().jS("flutter/keyevent",B.ac.cq(n),new A.aku(s))}} +A.akp.prototype={ +$1(a){this.a.PB(a)}, +$S:1} +A.akq.prototype={ +$1(a){this.a.PB(a)}, +$S:1} +A.akr.prototype={ +$0(){this.a.m()}, +$S:0} +A.akt.prototype={ +$0(){var s,r,q=this.a +q.a.C(0,this.b) +s=this.c.a +r=A.aY(["type","keyup","keymap","web","code",A.ri(s),"key",A.lh(s),"location",B.c.V(s.location),"metaState",q.d,"keyCode",B.c.V(s.keyCode)],t.N,t.z) +$.b8().jS("flutter/keyevent",B.ac.cq(r),A.b3i())}, +$S:0} +A.aku.prototype={ +$1(a){if(a==null)return +if(A.v_(J.bq(t.a.a(B.ac.h8(a)),"handled")))this.a.a.preventDefault()}, +$S:33} +A.P4.prototype={} +A.P3.prototype={ +Ip(a,b,c,d){var s=this.dy,r=this.fr,q=this.fx +A.ai(b,"drawImage",[s,0,0,r,q,c,d,r,q])}, +A_(a,b){var s,r,q,p,o,n=this,m="attachShader",l=a+"||"+b,k=J.bq($.ae5.bn(),l) +if(k==null){s=n.V4(0,"VERTEX_SHADER",a) +r=n.V4(0,"FRAGMENT_SHADER",b) +q=n.a +p=q.createProgram() +A.ai(q,m,[p,s]) +A.ai(q,m,[p,r]) +A.ai(q,"linkProgram",[p]) +o=n.ay +if(!A.ai(q,"getProgramParameter",[p,o==null?n.ay=q.LINK_STATUS:o]))A.T(A.cj(A.ai(q,"getProgramInfoLog",[p]))) +k=new A.P4(p) +J.hH($.ae5.bn(),l,k)}return k}, +V4(a,b,c){var s,r=this.a,q=r.createShader(r[b]) +if(q==null)throw A.c(A.cj(A.b2K(r,"getError"))) +A.ai(r,"shaderSource",[q,c]) +A.ai(r,"compileShader",[q]) +s=this.c +if(!A.ai(r,"getShaderParameter",[q,s==null?this.c=r.COMPILE_STATUS:s]))throw A.c(A.cj("Shader compilation failed: "+A.h(A.ai(r,"getShaderInfoLog",[q])))) +return q}, +ZA(a,b,c,d,e,f,g){A.ai(this.a,"texImage2D",[b,c,d,e,f,g])}, +Wl(a,b){A.ai(this.a,"drawArrays",[this.ajz(b),0,a])}, +ajz(a){var s,r=this +switch(a.a){case 0:return r.gJn() +case 2:s=r.ax +return s==null?r.ax=r.a.TRIANGLE_FAN:s +case 1:s=r.ax +return s==null?r.ax=r.a.TRIANGLE_STRIP:s}}, +gim(){var s=this.d +return s==null?this.d=this.a.ARRAY_BUFFER:s}, +goJ(){var s=this.e +return s==null?this.e=this.a.ELEMENT_ARRAY_BUFFER:s}, +gJm(){var s=this.r +return s==null?this.r=this.a.FLOAT:s}, +gBe(){var s=this.cx +return s==null?this.cx=this.a.RGBA:s}, +gBh(){var s=this.ch +return s==null?this.ch=this.a.UNSIGNED_BYTE:s}, +gXV(){var s=this.CW +return s==null?this.CW=this.a.UNSIGNED_SHORT:s}, +goK(){var s=this.f +return s==null?this.f=this.a.STATIC_DRAW:s}, +gJn(){var s=this.ax +return s==null?this.ax=this.a.TRIANGLES:s}, +gJl(){var s=this.w +return s==null?this.w=this.a.COLOR_BUFFER_BIT:s}, +gfP(){var s=this.x +return s==null?this.x=this.a.TEXTURE_2D:s}, +gXT(){var s=this.dx +return s==null?this.dx=this.a.TEXTURE0:s}, +gBf(){var s=this.y +return s==null?this.y=this.a.TEXTURE_WRAP_S:s}, +gBg(){var s=this.z +return s==null?this.z=this.a.TEXTURE_WRAP_T:s}, +grn(){var s=this.as +return s==null?this.as=this.a.CLAMP_TO_EDGE:s}, +gXS(){var s=this.cy +return s==null?this.cy=this.a.LINEAR:s}, +gXU(){var s=this.db +return s==null?this.db=this.a.TEXTURE_MIN_FILTER:s}, +hp(a,b,c){var s=A.ai(this.a,"getUniformLocation",[b,c]) +if(s==null)throw A.c(A.cj(c+" not found")) +else return s}, +CH(a,b){var s=A.ai(this.a,"getAttribLocation",[a,b]) +if(s==null)throw A.c(A.cj(b+" not found")) +else return s}, +Z_(a){var s,r,q=this +if("transferToImageBitmap" in q.dy&&a){q.dy.getContext("webgl2") +return q.dy.transferToImageBitmap()}else{s=q.fr +r=A.zO(q.fx,s) +s=A.k7(r,"2d",null) +s.toString +q.Ip(0,t.e.a(s),0,0) +return r}}} +A.aiM.prototype={ +Tc(a){var s,r,q,p,o=this.c +$.c4() +s=self.window.devicePixelRatio +if(s===0)s=1 +r=this.d +q=self.window.devicePixelRatio +if(q===0)q=1 +p=a.style +A.x(p,"position","absolute") +A.x(p,"width",A.h(o/s)+"px") +A.x(p,"height",A.h(r/q)+"px")}} +A.An.prototype={ +I(){return"Assertiveness."+this.b}} +A.a67.prototype={ +alj(a){switch(a.a){case 0:return this.a +case 1:return this.b}}, +Uj(a,b){var s=this.alj(b),r=A.be(self.document,"div") +A.aKA(r,a) +s.append(r) +A.cy(B.bS,new A.a68(r))}} +A.a68.prototype={ +$0(){return this.a.remove()}, +$S:0} +A.Hb.prototype={ +I(){return"_CheckableKind."+this.b}} +A.a93.prototype={ +eV(a){var s,r,q,p,o=this,n="true" +o.ld(0) +s=o.b +if((s.k3&1)!==0){switch(o.e.a){case 0:r=A.aA("checkbox") +if(r==null)r=t.K.a(r) +s.k2.setAttribute("role",r) +break +case 1:r=A.aA("radio") +if(r==null)r=t.K.a(r) +s.k2.setAttribute("role",r) +break +case 2:r=A.aA("switch") +if(r==null)r=t.K.a(r) +s.k2.setAttribute("role",r) +break}if(s.It()===B.h6){q=s.k2 +r=A.aA(n) +if(r==null)r=t.K.a(r) +q.setAttribute("aria-disabled",r) +r=A.aA(n) +if(r==null)r=t.K.a(r) +q.setAttribute("disabled",r)}else o.Rm() +r=s.a +p=A.aA((r&2)!==0||(r&131072)!==0?n:"false") +r=p==null?t.K.a(p):p +s.k2.setAttribute("aria-checked",r)}}, +m(){this.tt() +this.Rm()}, +Rm(){var s=this.b.k2 +s.removeAttribute("aria-disabled") +s.removeAttribute("disabled")}} +A.NS.prototype={ +eV(a){var s,r,q +this.ld(0) +s=this.b +if((s.a&4096)!==0){r=s.z +s=s.k2 +q=A.aA(r==null?"":r) +if(q==null)q=t.K.a(q) +s.setAttribute("aria-label",q) +q=A.aA("dialog") +if(q==null)q=t.K.a(q) +s.setAttribute("role",q)}}, +VZ(a){var s,r=this.b +if((r.a&4096)!==0)return +r=r.k2 +s=A.aA("dialog") +if(s==null)s=t.K.a(s) +r.setAttribute("role",s) +s=A.aA(a.b.k2.id) +if(s==null)s=t.K.a(s) +r.setAttribute("aria-describedby",s)}} +A.xC.prototype={ +eV(a){var s,r=this,q=r.b +if((q.a&4096)===0)return +if((q.k3&1024)!==0){s=r.d +if(s!=null)s.VZ(r) +else q.k1.e.push(new A.amM(r))}}, +aeB(){var s,r,q=this.b.ok +while(!0){s=q!=null +if(s){r=q.p2 +r=(r==null?null:r.a)!==B.i3}else r=!1 +if(!r)break +q=q.ok}if(s){s=q.p2 +s=(s==null?null:s.a)===B.i3}else s=!1 +if(s){s=q.p2 +s.toString +this.d=t.JX.a(s)}}} +A.amM.prototype={ +$0(){var s,r=this.a +r.aeB() +s=r.d +if(s!=null)s.VZ(r)}, +$S:0} +A.wg.prototype={ +eV(a){var s,r=this.b +if((r.a&2097152)!==0){s=this.d +if(s.b==null)s.Y3(r.id,r.k2) +r=r.a +if((r&32)!==0)r=(r&64)===0||(r&128)!==0 +else r=!1 +s.UW(r)}else this.d.Ds()}} +A.ve.prototype={ +Y3(a,b){var s,r,q=this,p=q.b,o=p==null +if(b===(o?null:p.a[2])){o=p.a +if(a===o[3])return +s=o[2] +r=o[1] +q.b=new A.IS([o[0],r,s,a]) +return}if(!o)q.Ds() +o=t.e +s=o.a(A.bM(new A.a6a(q))) +s=[o.a(A.bM(new A.a6b(q))),s,b,a] +q.b=new A.IS(s) +b.tabIndex=0 +A.cE(b,"focus",s[1],null) +A.cE(b,"blur",s[0],null)}, +Ds(){var s,r=this.b +this.b=null +if(r==null)return +s=r.a +A.f7(s[2],"focus",s[1],null) +A.f7(s[2],"blur",s[0],null) +s[2].blur()}, +S4(a){var s,r,q=this.b +if(q==null)return +s=$.b8() +r=q.a[3] +s.jT(r,a?B.ly:B.lz,null)}, +UW(a){var s=this.b +if(s==null)return +this.a.e.push(new A.a69(this,s,a))}} +A.a6a.prototype={ +$1(a){return this.a.S4(!0)}, +$S:1} +A.a6b.prototype={ +$1(a){return this.a.S4(!1)}, +$S:1} +A.a69.prototype={ +$0(){var s=this.b +if(!J.d(this.a.b,s))return +s=s.a +if(this.c)s[2].focus() +else s[2].blur()}, +$S:0} +A.afG.prototype={ +eV(a){var s,r,q,p=this +p.ld(0) +s=p.b +if(s.gJk()){r=s.dy +r=r!=null&&!B.f1.ga7(r)}else r=!1 +if(r){if(p.e==null){p.e=A.be(self.document,"flt-semantics-img") +r=s.dy +if(r!=null&&!B.f1.ga7(r)){r=p.e.style +A.x(r,"position","absolute") +A.x(r,"top","0") +A.x(r,"left","0") +q=s.y +A.x(r,"width",A.h(q.c-q.a)+"px") +q=s.y +A.x(r,"height",A.h(q.d-q.b)+"px")}A.x(p.e.style,"font-size","6px") +r=p.e +r.toString +s.k2.append(r)}s=p.e +s.toString +r=A.aA("img") +if(r==null)r=t.K.a(r) +s.setAttribute("role",r) +p.S6(p.e)}else{r=s.k2 +if(s.gJk()){s=A.aA("img") +if(s==null)s=t.K.a(s) +r.setAttribute("role",s) +p.S6(r) +p.Ej()}else{p.Ej() +r.removeAttribute("aria-label")}}}, +S6(a){var s=this.b.z +if(s!=null&&s.length!==0){a.toString +s.toString +s=A.aA(s) +if(s==null)s=t.K.a(s) +a.setAttribute("aria-label",s)}}, +Ej(){var s=this.e +if(s!=null){s.remove() +this.e=null}}, +m(){this.tt() +this.Ej() +this.b.k2.removeAttribute("aria-label")}} +A.afP.prototype={ +a6e(a){var s,r=this,q=r.b +r.hy(new A.td(B.ib,q)) +r.hy(new A.xC(B.lo,q)) +r.hy(new A.CS(B.zx,q)) +q=r.e +a.k2.append(q) +A.aaQ(q,"range") +s=A.aA("slider") +if(s==null)s=t.K.a(s) +q.setAttribute("role",s) +A.cE(q,"change",t.e.a(A.bM(new A.afQ(r,a))),null) +s=new A.afR(r) +r.w=s +a.k1.as.push(s) +r.f.Y3(a.id,q)}, +eV(a){var s,r=this +r.ld(0) +s=r.b +switch(s.k1.z.a){case 1:r.a9J() +r.ajT() +break +case 0:r.Oj() +break}r.f.UW((s.a&32)!==0)}, +a9J(){var s=this.e,r=A.aFH(s) +r.toString +if(!r)return +A.aKs(s,!1)}, +ajT(){var s,r,q,p,o,n,m,l=this +if(!l.x){s=l.b.k3 +r=(s&4096)!==0||(s&8192)!==0||(s&16384)!==0}else r=!0 +if(!r)return +l.x=!1 +q=""+l.r +s=l.e +A.aKt(s,q) +p=A.aA(q) +if(p==null)p=t.K.a(p) +s.setAttribute("aria-valuenow",p) +p=l.b +o=p.ax +o.toString +o=A.aA(o) +if(o==null)o=t.K.a(o) +s.setAttribute("aria-valuetext",o) +n=p.ch.length!==0?""+(l.r+1):q +s.max=n +o=A.aA(n) +if(o==null)o=t.K.a(o) +s.setAttribute("aria-valuemax",o) +m=p.cx.length!==0?""+(l.r-1):q +s.min=m +p=A.aA(m) +if(p==null)p=t.K.a(p) +s.setAttribute("aria-valuemin",p)}, +Oj(){var s=this.e,r=A.aFH(s) +r.toString +if(r)return +A.aKs(s,!0)}, +m(){var s=this +s.tt() +s.f.Ds() +B.b.C(s.b.k1.as,s.w) +s.w=null +s.Oj() +s.e.remove()}} +A.afQ.prototype={ +$1(a){var s,r=this.a,q=r.e,p=A.aFH(q) +p.toString +if(p)return +r.x=!0 +q=A.aFI(q) +q.toString +s=A.ir(q,null) +q=r.r +if(s>q){r.r=q+1 +$.b8().jT(this.b.id,B.zM,null)}else if(sq){s=s.b +s.toString +if((s&32)!==0||(s&16)!==0)$.b8().jT(p,B.fh,n) +else $.b8().jT(p,B.fj,n)}else{s=s.b +s.toString +if((s&32)!==0||(s&16)!==0)$.b8().jT(p,B.fi,n) +else $.b8().jT(p,B.fk,n)}}}, +eV(a){var s,r,q,p=this +p.ld(0) +s=p.b +r=s.k1 +r.e.push(new A.anG(p)) +if(p.r==null){s=s.k2 +A.x(s.style,"touch-action","none") +p.OT() +q=new A.anH(p) +p.e=q +r.as.push(q) +q=t.e.a(A.bM(new A.anI(p))) +p.r=q +A.cE(s,"scroll",q,null)}}, +gOo(){var s=this.b,r=s.b +r.toString +r=(r&32)!==0||(r&16)!==0 +s=s.k2 +if(r)return B.c.V(s.scrollTop) +else return B.c.V(s.scrollLeft)}, +QA(){var s,r,q,p,o=this,n="transform",m=o.b,l=m.k2,k=m.y +if(k==null){$.e7().$1("Warning! the rect attribute of semanticsObject is null") +return}s=m.b +s.toString +s=(s&32)!==0||(s&16)!==0 +r=o.f +q=k.d-k.b +p=k.c-k.a +if(s){s=B.c.dk(q) +r=r.style +A.x(r,n,"translate(0px,"+(s+10)+"px)") +A.x(r,"width",""+B.c.an(p)+"px") +A.x(r,"height","10px") +l.scrollTop=10 +m.p3=o.w=B.c.V(l.scrollTop) +m.p4=0}else{s=B.c.dk(p) +r=r.style +A.x(r,n,"translate("+(s+10)+"px,0px)") +A.x(r,"width","10px") +A.x(r,"height",""+B.c.an(q)+"px") +l.scrollLeft=10 +q=B.c.V(l.scrollLeft) +o.w=q +m.p3=0 +m.p4=q}}, +OT(){var s="overflow-y",r="overflow-x",q=this.b,p=q.k2 +switch(q.k1.z.a){case 1:q=q.b +q.toString +if((q&32)!==0||(q&16)!==0)A.x(p.style,s,"scroll") +else A.x(p.style,r,"scroll") +break +case 0:q=q.b +q.toString +if((q&32)!==0||(q&16)!==0)A.x(p.style,s,"hidden") +else A.x(p.style,r,"hidden") +break}}, +m(){var s,r,q,p,o=this +o.tt() +s=o.b +r=s.k2 +q=r.style +q.removeProperty("overflowY") +q.removeProperty("overflowX") +q.removeProperty("touch-action") +p=o.r +if(p!=null)A.f7(r,"scroll",p,null) +B.b.C(s.k1.as,o.e) +o.e=null}} +A.anG.prototype={ +$0(){var s=this.a +s.QA() +s.b.Kd()}, +$S:0} +A.anH.prototype={ +$1(a){this.a.OT()}, +$S:149} +A.anI.prototype={ +$1(a){this.a.agV()}, +$S:1} +A.w4.prototype={ +k(a){var s=A.a([],t.s),r=this.a +if((r&1)!==0)s.push("accessibleNavigation") +if((r&2)!==0)s.push("invertColors") +if((r&4)!==0)s.push("disableAnimations") +if((r&8)!==0)s.push("boldText") +if((r&16)!==0)s.push("reduceMotion") +if((r&32)!==0)s.push("highContrast") +if((r&64)!==0)s.push("onOffSwitchLabels") +return"AccessibilityFeatures"+A.h(s)}, +j(a,b){if(b==null)return!1 +if(J.U(b)!==A.t(this))return!1 +return b instanceof A.w4&&b.a===this.a}, +gt(a){return B.f.gt(this.a)}, +Vm(a,b){var s=(a==null?(this.a&1)!==0:a)?1:0,r=this.a +s=(r&2)!==0?s|2:s&4294967293 +s=(r&4)!==0?s|4:s&4294967291 +s=(r&8)!==0?s|8:s&4294967287 +s=(r&16)!==0?s|16:s&4294967279 +s=(b==null?(r&32)!==0:b)?s|32:s&4294967263 +return new A.w4((r&64)!==0?s|64:s&4294967231)}, +an2(a){return this.Vm(null,a)}, +amX(a){return this.Vm(a,null)}} +A.ac5.prototype={ +sar7(a){var s=this.a +this.a=a?s|32:s&4294967263}, +bk(){return new A.w4(this.a)}} +A.Tx.prototype={$iaGW:1} +A.Tv.prototype={} +A.kt.prototype={ +I(){return"PrimaryRole."+this.b}} +A.tY.prototype={ +I(){return"Role."+this.b}} +A.RN.prototype={ +tD(a,b){var s=this,r=s.b +s.hy(new A.wg(new A.ve(r.k1),B.ln,r)) +s.hy(new A.td(B.ib,r)) +s.hy(new A.xC(B.lo,r)) +s.hy(new A.CS(B.zx,r)) +s.hy(new A.G3(B.zw,r))}, +hy(a){var s=this.c;(s==null?this.c=A.a([],t.VM):s).push(a)}, +eV(a){var s,r,q=this.c +if(q==null)return +for(s=q.length,r=0;r1)for(p=0;p=0;--p){g=l[p] +s=g.id +if(!B.b.p(a0,s)){k=g.k2 +if(a1==null)m.append(k) +else m.insertBefore(k,a1) +g.ok=a2 +q.c.n(0,s,a2)}a1=g.k2}a2.p1=l}, +aaO(){var s,r,q=this +if(q.go!==-1)return B.li +else if((q.a&16)!==0)return B.zo +else{s=q.b +s.toString +if((s&64)!==0||(s&128)!==0)return B.zn +else if(q.gJk())return B.zp +else{s=q.a +if((s&1)!==0||(s&65536)!==0)return B.lh +else if((s&8)!==0)return B.lg +else{r=q.b +r.toString +if((r&32)!==0||(r&16)!==0||(r&4)!==0||(r&8)!==0)return B.lf +else if((s&2048)!==0)return B.i3 +else return B.lj}}}}, +a8V(a){var s,r,q,p=this +switch(a.a){case 3:s=new A.aq7(B.zo,p) +s.ail() +break +case 1:s=A.be(self.document,"flt-semantics-scroll-overflow") +r=new A.anz(s,B.lf,p) +r.tD(B.lf,p) +q=s.style +A.x(q,"position","absolute") +A.x(q,"transform-origin","0 0 0") +A.x(q,"pointer-events","none") +p.k2.append(s) +s=r +break +case 0:s=A.aXQ(p) +break +case 2:s=new A.a84(B.lg,p) +s.tD(B.lg,p) +r=A.aA("button") +if(r==null)r=t.K.a(r) +p.k2.setAttribute("role",r) +break +case 4:s=new A.a93(A.b2P(p),B.lh,p) +s.tD(B.lh,p) +break +case 6:s=new A.NS(B.i3,p) +s.hy(new A.wg(new A.ve(p.k1),B.ln,p)) +s.hy(new A.td(B.ib,p)) +break +case 5:s=new A.afG(B.zp,p) +s.hy(new A.wg(new A.ve(p.k1),B.ln,p)) +s.hy(new A.td(B.ib,p)) +s.hy(new A.xC(B.lo,p)) +s.hy(new A.G3(B.zw,p)) +break +case 7:s=new A.ajP(B.li,p) +s.tD(B.li,p) +break +case 8:s=new A.adI(B.lj,p) +s.tD(B.lj,p) +break +default:s=null}return s}, +ak2(){var s=this,r=s.p2,q=s.aaO() +if(r!=null)if(r.a===q){r.eV(0) +return}else{r.m() +r=s.p2=null}if(r==null){r=s.a8V(q) +s.p2=r +r.eV(0)}}, +Kd(){var s,r,q,p,o,n,m,l,k,j,i=this,h=i.k2,g=h.style,f=i.y +A.x(g,"width",A.h(f.c-f.a)+"px") +f=i.y +A.x(g,"height",A.h(f.d-f.b)+"px") +g=i.dy +s=g!=null&&!B.f1.ga7(g)?i.L8():null +g=i.y +r=g.b===0&&g.a===0 +q=i.dx +g=q==null +p=g||A.aED(q)===B.Bh +if(r&&p&&i.p3===0&&i.p4===0){A.ao7(h) +if(s!=null)A.ao7(s) +return}o=A.bc("effectiveTransform") +if(!r)if(g){g=i.y +n=g.a +m=g.b +g=A.dQ() +g.l5(n,m,0) +o.b=g +l=n===0&&m===0}else{g=new A.bU(new Float32Array(16)) +g.aW(new A.bU(q)) +f=i.y +g.au(0,f.a,f.b) +o.b=g +l=J.aUP(o.aI())}else if(!p){o.b=new A.bU(q) +l=!1}else l=!0 +if(!l){h=h.style +A.x(h,"transform-origin","0 0 0") +A.x(h,"transform",A.jV(o.aI().a))}else A.ao7(h) +if(s!=null)if(!r||i.p3!==0||i.p4!==0){h=i.y +g=h.a +f=i.p4 +h=h.b +k=i.p3 +j=s.style +A.x(j,"top",A.h(-h+k)+"px") +A.x(j,"left",A.h(-g+f)+"px")}else A.ao7(s)}, +a_e(a){var s +a.$1(this) +s=this.p1 +if(s!=null)B.b.aa(s,new A.ao8(a))}, +k(a){return this.c4(0)}} +A.ao8.prototype={ +$1(a){a.a_e(this.a)}, +$S:152} +A.a6c.prototype={ +I(){return"AccessibilityMode."+this.b}} +A.rD.prototype={ +I(){return"GestureMode."+this.b}} +A.Fn.prototype={ +I(){return"SemanticsUpdatePhase."+this.b}} +A.aco.prototype={ +a6b(){$.qo.push(new A.acp(this))}, +aa4(){var s,r,q,p,o,n,m,l,k,j,i,h=this +for(r=h.d,q=r.length,p=h.b,o=t.Qo,n=0;n>>0}n=m.cx +if(l.ax!==n){l.ax=n +l.k3=(l.k3|4096)>>>0}n=m.cy +if(l.ay!==n){l.ay=n +l.k3=(l.k3|4096)>>>0}n=m.ax +if(l.z!==n){l.z=n +l.k3=(l.k3|1024)>>>0}n=m.ay +if(l.Q!==n){l.Q=n +l.k3=(l.k3|1024)>>>0}n=m.at +if(!J.d(l.y,n)){l.y=n +l.k3=(l.k3|512)>>>0}n=m.go +if(l.dx!==n){l.dx=n +l.k3=(l.k3|65536)>>>0}n=m.z +if(l.r!==n){l.r=n +l.k3=(l.k3|64)>>>0}n=m.c +if(l.b!==n){l.b=n +l.k3=(l.k3|2)>>>0}n=m.f +if(l.c!==n){l.c=n +l.k3=(l.k3|4)>>>0}n=m.r +if(l.d!==n){l.d=n +l.k3=(l.k3|8)>>>0}n=m.x +if(l.e!==n){l.e=n +l.k3=(l.k3|16)>>>0}n=m.y +if(l.f!==n){l.f=n +l.k3=(l.k3|32)>>>0}n=m.Q +if(l.w!==n){l.w=n +l.k3=(l.k3|128)>>>0}n=m.as +if(l.x!==n){l.x=n +l.k3=(l.k3|256)>>>0}n=m.ch +if(l.as!==n){l.as=n +l.k3=(l.k3|2048)>>>0}n=m.CW +if(l.at!==n){l.at=n +l.k3=(l.k3|2048)>>>0}n=m.db +if(l.ch!==n){l.ch=n +l.k3=(l.k3|8192)>>>0}n=m.dx +if(l.CW!==n){l.CW=n +l.k3=(l.k3|8192)>>>0}n=m.dy +if(l.cx!==n){l.cx=n +l.k3=(l.k3|16384)>>>0}n=m.fr +if(l.cy!==n){l.cy=n +l.k3=(l.k3|16384)>>>0}n=m.fx +if(l.fy!==n){l.fy=n +l.k3=(l.k3|4194304)>>>0}n=m.fy +if(l.db!=n){l.db=n +l.k3=(l.k3|32768)>>>0}n=m.k1 +if(l.fr!==n){l.fr=n +l.k3=(l.k3|1048576)>>>0}n=m.id +if(l.dy!==n){l.dy=n +l.k3=(l.k3|524288)>>>0}n=m.k2 +if(l.fx!==n){l.fx=n +l.k3=(l.k3|2097152)>>>0}n=m.w +if(l.go!==n){l.go=n +l.k3=(l.k3|8388608)>>>0}l.ak2() +n=l.k3 +if((n&512)!==0||(n&65536)!==0||(n&64)!==0)l.Kd() +n=l.dy +n=!(n!=null&&!B.f1.ga7(n))&&l.go===-1 +k=l.k2 +if(n){n=k.style +n.setProperty("pointer-events","all","")}else{n=k.style +n.setProperty("pointer-events","none","")}}for(o=0;o=20)return i.d=!0 +if(!B.Xd.p(0,a.type))return!0 +if(i.a!=null)return!1 +r=A.bc("activationPoint") +switch(a.type){case"click":r.scJ(new A.By(a.offsetX,a.offsetY)) +break +case"touchstart":case"touchend":s=t.VA +s=A.cC(new A.nN(a.changedTouches,s),s.h("n.E"),t.e) +s=A.o(s).z[1].a(J.oe(s.a)) +r.scJ(new A.By(s.clientX,s.clientY)) +break +case"pointerdown":case"pointerup":r.scJ(new A.By(a.clientX,a.clientY)) +break +default:return!0}q=i.b.getBoundingClientRect() +s=q.left +p=q.right +o=q.left +n=q.top +m=q.bottom +l=q.top +k=r.aI().a-(s+(p-o)/2) +j=r.aI().b-(n+(m-l)/2) +if(k*k+j*j<1&&!0){i.d=!0 +i.a=A.cy(B.bS,new A.ahT(i)) +return!1}return!0}, +Yy(){var s,r=this.b=A.be(self.document,"flt-semantics-placeholder") +A.cE(r,"click",t.e.a(A.bM(new A.ahS(this))),!0) +s=A.aA("button") +if(s==null)s=t.K.a(s) +r.setAttribute("role",s) +s=A.aA("Enable accessibility") +if(s==null)s=t.K.a(s) +r.setAttribute("aria-label",s) +s=r.style +A.x(s,"position","absolute") +A.x(s,"left","0") +A.x(s,"top","0") +A.x(s,"right","0") +A.x(s,"bottom","0") +return r}, +m(){var s=this.b +if(s!=null)s.remove() +this.a=this.b=null}} +A.ahT.prototype={ +$0(){this.a.m() +var s=$.eP;(s==null?$.eP=A.mJ():s).sD8(!0)}, +$S:0} +A.ahS.prototype={ +$1(a){this.a.Cw(a)}, +$S:1} +A.a84.prototype={ +eV(a){var s,r +this.ld(0) +s=this.b +r=s.k2 +if(s.It()===B.h6){s=A.aA("true") +if(s==null)s=t.K.a(s) +r.setAttribute("aria-disabled",s)}else r.removeAttribute("aria-disabled")}} +A.G3.prototype={ +eV(a){var s=this,r=s.b,q=r.b +q.toString +if((q&1)===0||r.It()===B.h6)s.aj_() +else if(s.d==null){q=t.e.a(A.bM(new A.aq1(s))) +s.d=q +A.cE(r.k2,"click",q,null)}}, +aj_(){var s=this.d +if(s==null)return +A.f7(this.b.k2,"click",s,null) +this.d=null}} +A.aq1.prototype={ +$1(a){var s=this.a.b +if(s.k1.z!==B.cX)return +$.b8().jT(s.id,B.dW,null)}, +$S:1} +A.aof.prototype={ +Is(a,b,c,d){this.CW=b +this.x=d +this.y=c}, +akD(a){var s,r,q=this,p=q.ch +if(p===a)return +else if(p!=null)q.ie(0) +q.ch=a +q.c=a.e +q.Sz() +p=q.CW +p.toString +s=q.x +s.toString +r=q.y +r.toString +q.a2g(0,p,r,s)}, +ie(a){var s,r,q,p=this +if(!p.b)return +p.b=!1 +p.w=p.r=null +for(s=p.z,r=0;r=this.b)throw A.c(A.Pv(b,this,null,null,null)) +return this.a[b]}, +n(a,b,c){if(b>=this.b)throw A.c(A.Pv(b,this,null,null,null)) +this.a[b]=c}, +su(a,b){var s,r,q,p=this,o=p.b +if(bo){if(o===0)q=new Uint8Array(b) +else q=p.y3(b) +B.O.dW(q,0,p.b,p.a) +p.a=q}}p.b=b}, +eZ(a,b){var s=this,r=s.b +if(r===s.a.length)s.MJ(r) +s.a[s.b++]=b}, +D(a,b){var s=this,r=s.b +if(r===s.a.length)s.MJ(r) +s.a[s.b++]=b}, +zz(a,b,c,d){A.eA(c,"start") +if(d!=null&&c>d)throw A.c(A.c9(d,c,null,"end",null)) +this.a6G(b,c,d)}, +E(a,b){return this.zz(a,b,0,null)}, +a6G(a,b,c){var s,r,q,p=this +if(A.o(p).h("v").b(a))c=c==null?a.length:c +if(c!=null){p.ae4(p.b,a,b,c) +return}for(s=J.ap(a),r=0;s.q();){q=s.gJ(s) +if(r>=b)p.eZ(0,q);++r}if(ro.gu(b)||d>o.gu(b))throw A.c(A.Q("Too few elements")) +s=d-c +r=p.b+s +p.a9O(r) +o=p.a +q=a+s +B.O.bC(o,q,p.b+s,o,a) +B.O.bC(p.a,a,q,b,c) +p.b=r}, +eu(a,b,c){var s,r,q,p=this +if(b<0||b>p.b)throw A.c(A.c9(b,0,p.b,null,null)) +s=p.b +r=p.a +if(ss)throw A.c(A.c9(c,0,s,null,null)) +s=this.a +if(A.o(this).h("mi").b(d))B.O.bC(s,b,c,d.a,e) +else B.O.bC(s,b,c,d,e)}, +dW(a,b,c,d){return this.bC(a,b,c,d,0)}} +A.Z7.prototype={} +A.UY.prototype={} +A.jq.prototype={ +k(a){return A.t(this).k(0)+"("+this.a+", "+A.h(this.b)+")"}} +A.ag2.prototype={ +cq(a){return A.fC(B.ca.cp(B.c9.qS(a)).buffer,0,null)}, +h8(a){if(a==null)return a +return B.c9.eA(0,B.cK.cp(A.dD(a.buffer,0,null)))}} +A.ag4.prototype={ +jK(a){return B.ac.cq(A.aY(["method",a.a,"args",a.b],t.N,t.z))}, +iY(a){var s,r,q,p=null,o=B.ac.h8(a) +if(!t.f.b(o))throw A.c(A.cc("Expected method call Map, got "+A.h(o),p,p)) +s=J.aF(o) +r=s.i(o,"method") +q=s.i(o,"args") +if(typeof r=="string")return new A.jq(r,q) +throw A.c(A.cc("Invalid method call: "+A.h(o),p,p))}} +A.apa.prototype={ +cq(a){var s=A.aHm() +this.eW(0,s,!0) +return s.mP()}, +h8(a){var s,r +if(a==null)return null +s=new A.S2(a) +r=this.je(0,s) +if(s.b=b.a.byteLength)throw A.c(B.bn) +return this.lV(b.kf(0),b)}, +lV(a,b){var s,r,q,p,o,n,m,l,k=this +switch(a){case 0:s=null +break +case 1:s=!0 +break +case 2:s=!1 +break +case 3:r=b.a.getInt32(b.b,B.av===$.e5()) +b.b+=4 +s=r +break +case 4:s=b.CQ(0) +break +case 5:q=k.fw(b) +s=A.ir(B.cK.cp(b.mb(q)),16) +break +case 6:b.mj(8) +r=b.a.getFloat64(b.b,B.av===$.e5()) +b.b+=8 +s=r +break +case 7:q=k.fw(b) +s=B.cK.cp(b.mb(q)) +break +case 8:s=b.mb(k.fw(b)) +break +case 9:q=k.fw(b) +b.mj(4) +p=b.a +o=A.aGs(p.buffer,p.byteOffset+b.b,q) +b.b=b.b+4*q +s=o +break +case 10:s=b.CR(k.fw(b)) +break +case 11:q=k.fw(b) +b.mj(8) +p=b.a +o=A.aGr(p.buffer,p.byteOffset+b.b,q) +b.b=b.b+8*q +s=o +break +case 12:q=k.fw(b) +s=[] +for(p=b.a,n=0;n=p.byteLength)A.T(B.bn) +b.b=m+1 +s.push(k.lV(p.getUint8(m),b))}break +case 13:q=k.fw(b) +p=t.z +s=A.A(p,p) +for(p=b.a,n=0;n=p.byteLength)A.T(B.bn) +b.b=m+1 +m=k.lV(p.getUint8(m),b) +l=b.b +if(l>=p.byteLength)A.T(B.bn) +b.b=l+1 +s.n(0,m,k.lV(p.getUint8(l),b))}break +default:throw A.c(B.bn)}return s}, +hn(a,b){var s,r,q +if(b<254)a.b.eZ(0,b) +else{s=a.b +r=a.c +q=a.d +if(b<=65535){s.eZ(0,254) +r.setUint16(0,b,B.av===$.e5()) +s.zz(0,q,0,2)}else{s.eZ(0,255) +r.setUint32(0,b,B.av===$.e5()) +s.zz(0,q,0,4)}}}, +fw(a){var s=a.kf(0) +switch(s){case 254:s=a.a.getUint16(a.b,B.av===$.e5()) +a.b+=2 +return s +case 255:s=a.a.getUint32(a.b,B.av===$.e5()) +a.b+=4 +return s +default:return s}}} +A.apc.prototype={ +$2(a,b){var s=this.a,r=this.b +s.eW(0,r,a) +s.eW(0,r,b)}, +$S:153} +A.ape.prototype={ +iY(a){var s,r,q +a.toString +s=new A.S2(a) +r=B.cp.je(0,s) +q=B.cp.je(0,s) +if(typeof r=="string"&&s.b>=a.byteLength)return new A.jq(r,q) +else throw A.c(B.oS)}, +vp(a){var s=A.aHm() +s.b.eZ(0,0) +B.cp.eW(0,s,a) +return s.mP()}, +oj(a,b,c){var s=A.aHm() +s.b.eZ(0,1) +B.cp.eW(0,s,a) +B.cp.eW(0,s,c) +B.cp.eW(0,s,b) +return s.mP()}} +A.as8.prototype={ +mj(a){var s,r,q=this.b,p=B.f.bF(q.b,a) +if(p!==0)for(s=a-p,r=0;r0)b=c +else{$.cZ() +f=$.c4().d +if(f==null){f=self.window.devicePixelRatio +if(f===0)f=1}b=1/f}f=d==null?a8:A.dm(d.gl(d)) +b0.setProperty("-webkit-text-stroke",A.h(b)+"px "+A.h(f),"")}else if(d!=null){f=A.dm(d.gl(d)) +b0.setProperty("color",f,"")}f=g.cx +a=f==null?a8:f.gM(f) +if(a!=null){f=A.dm(a.a) +b0.setProperty("background-color",f,"")}a0=g.at +if(a0!=null){f=B.c.dP(a0) +b0.setProperty("font-size",""+f+"px","")}f=g.f +if(f!=null){f=A.aQE(f) +f.toString +b0.setProperty("font-weight",f,"")}f=g.r +if(f!=null){f=f===B.bC?"normal":"italic" +b0.setProperty("font-style",f,"")}f=A.aDu(g.y) +f.toString +b0.setProperty("font-family",f,"") +f=g.ax +if(f!=null)b0.setProperty("letter-spacing",A.h(f)+"px","") +f=g.ay +if(f!=null)b0.setProperty("word-spacing",A.h(f)+"px","") +f=g.b +e=f!=null +a1=e&&!0 +a2=g.db +if(a2!=null){a3=A.b4p(a2) +b0.setProperty("text-shadow",a3,"")}if(a1)if(e){e=g.d +f=f.a +a3=(f|1)===f?""+"underline ":"" +if((f|2)===f)a3+="overline " +f=(f|4)===f?a3+"line-through ":a3 +if(e!=null)f+=A.h(A.b35(e)) +a4=f.length===0?a8:f.charCodeAt(0)==0?f:f +if(a4!=null){f=$.cz() +if(f===B.W){f=h.style +f.setProperty("-webkit-text-decoration",a4,"")}else b0.setProperty("text-decoration",a4,"") +a5=g.c +if(a5!=null){f=A.dm(a5.a) +b0.setProperty("text-decoration-color",f,"")}}}a6=g.as +if(a6!=null&&a6.length!==0){g=A.b3p(a6) +b0.setProperty("font-variation-settings",g,"")}g=j.ZK() +f=g.a +e=g.b +a3=h.style +a3.setProperty("position","absolute","") +a3.setProperty("top",A.h(e)+"px","") +a3.setProperty("left",A.h(f)+"px","") +a3.setProperty("width",A.h(g.c-f)+"px","") +a3.setProperty("line-height",A.h(g.d-e)+"px","") +h.append(self.document.createTextNode(i)) +a9.append(h)}++q}return a9}, +wZ(){return this.gh1().wZ()}, +x_(a,b,c,d){return this.gh1().a_T(a,b,c,d)}, +CI(a,b,c){return this.x_(a,b,c,B.cO)}, +eh(a){return this.gh1().eh(a)}, +l3(a){var s,r +switch(a.b.a){case 0:s=a.a-1 +break +case 1:s=a.a +break +default:s=null}r=this.c +r===$&&A.b() +return new A.ce(A.aO3(B.a67,r,s+1),A.aO3(B.a66,r,s))}, +CS(a){var s,r,q,p,o,n=this,m=a.a,l=t.OB,k=0 +while(!0){s=n.r +if(s===$){r=A.a([],l) +n.r!==$&&A.ay() +q=n.r=new A.pQ(n,r,B.F) +p=q +s=p}else p=s +if(!(k=o.b&&m") +return A.V(new A.R(s,new A.a8s(),r),!0,r.h("af.E"))}, +m(){this.y=!0}} +A.a8s.prototype={ +$1(a){return a.a}, +$S:266} +A.tx.prototype={ +gaG(a){return this.a}, +gbi(a){return this.c}} +A.xe.prototype={$itx:1, +gaG(a){return this.f}, +gbi(a){return this.w}} +A.y6.prototype={ +Kl(){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b=this,a=b.a +if(a==null){s=b.gEo(b) +r=b.gEI() +q=b.gEJ() +p=b.gEK() +o=b.gEL() +n=b.gF9(b) +m=b.gF7(b) +l=b.gGz() +k=b.gF3(b) +j=b.gF4() +i=b.gF5() +h=b.gF8() +g=b.gF6(b) +f=b.gFz(b) +e=b.gH_(b) +d=b.gDP(b) +c=b.gFD() +e=b.a=A.aKS(b.gE6(b),s,r,q,p,o,k,j,i,g,m,h,n,b.gyg(),d,f,c,b.gGo(),l,e) +return e}return a}} +A.ME.prototype={ +gEo(a){var s=this.c.a +if(s==null)if(this.gyg()==null){s=this.b +s=s.gEo(s)}else s=null +return s}, +gEI(){var s=this.c.b +return s==null?this.b.gEI():s}, +gEJ(){var s=this.c.c +return s==null?this.b.gEJ():s}, +gEK(){var s=this.c.d +return s==null?this.b.gEK():s}, +gEL(){var s=this.c.e +return s==null?this.b.gEL():s}, +gF9(a){var s=this.c.f +if(s==null){s=this.b +s=s.gF9(s)}return s}, +gF7(a){var s=this.c.r +if(s==null){s=this.b +s=s.gF7(s)}return s}, +gGz(){var s=this.c.w +return s==null?this.b.gGz():s}, +gF4(){var s=this.c.z +return s==null?this.b.gF4():s}, +gF5(){var s=this.b.gF5() +return s}, +gF8(){var s=this.c.as +return s==null?this.b.gF8():s}, +gF6(a){var s=this.c.at +if(s==null){s=this.b +s=s.gF6(s)}return s}, +gFz(a){var s=this.c.ax +if(s==null){s=this.b +s=s.gFz(s)}return s}, +gH_(a){var s=this.c.ay +if(s==null){s=this.b +s=s.gH_(s)}return s}, +gDP(a){var s=this.c.ch +if(s==null){s=this.b +s=s.gDP(s)}return s}, +gFD(){var s=this.c.CW +return s==null?this.b.gFD():s}, +gE6(a){var s=this.c.cx +if(s==null){s=this.b +s=s.gE6(s)}return s}, +gyg(){var s=this.c.cy +return s==null?this.b.gyg():s}, +gGo(){var s=this.c.db +return s==null?this.b.gGo():s}, +gF3(a){var s=this.c +if(s.x)s=s.y +else{s=this.b +s=s.gF3(s)}return s}} +A.SR.prototype={ +gEo(a){return null}, +gEI(){return null}, +gEJ(){return null}, +gEK(){return null}, +gEL(){return null}, +gF9(a){return this.b.c}, +gF7(a){return this.b.d}, +gGz(){return null}, +gF3(a){var s=this.b.f +return s==null?"sans-serif":s}, +gF4(){return null}, +gF5(){return null}, +gF8(){return null}, +gF6(a){var s=this.b.r +return s==null?14:s}, +gFz(a){return null}, +gH_(a){return null}, +gDP(a){return this.b.w}, +gFD(){return this.b.Q}, +gE6(a){return null}, +gyg(){return null}, +gGo(){return null}} +A.a8r.prototype={ +gEH(){var s=this.d,r=s.length +return r===0?this.e:s[r-1]}, +gYw(){return this.f}, +zF(a,b,c,d,e){var s,r=this,q=r.a,p=q.a,o=p+$.aUs() +q.a=o +s=r.gEH().Kl() +r.Tb(s);++r.f +r.r.push(1) +q=e==null?b:e +r.c.push(new A.xe(s,p.length,o.length,a,b,c,q))}, +U9(a,b,c){return this.zF(a,b,c,null,null)}, +p0(a){this.d.push(new A.ME(this.gEH(),t.Q4.a(a)))}, +ev(){var s=this.d +if(s.length!==0)s.pop()}, +qc(a){var s,r=this,q=r.a,p=q.a,o=p+a +q.a=o +s=r.gEH().Kl() +r.Tb(s) +r.c.push(new A.tx(s,p.length,o.length))}, +Tb(a){var s,r,q,p,o=this +if(!o.w)return +s=a.ax +if(s!=null&&s!==0){o.w=!1 +return}r=a.b +if(r!=null){q=r.a +q=B.h.a!==q}else q=!1 +if(q){o.w=!1 +return}p=a.as +if(p!=null&&p.length!==0){o.w=!1 +return}}, +bk(){var s,r=this,q=r.c +if(q.length===0)q.push(new A.tx(r.e.Kl(),0,0)) +s=r.a.a +return new A.MA(q,r.b,s.charCodeAt(0)==0?s:s,r.w)}} +A.af8.prototype={ +lK(a){return this.ask(a)}, +ask(a0){var s=0,r=A.a1(t.S7),q,p=this,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a +var $async$lK=A.a2(function(a1,a2){if(a1===1)return A.Z(a2,r) +while(true)switch(s){case 0:b=A.a([],t.Rh) +for(o=a0.a,n=o.length,m=0;m")) +b.q() +e=A.b2U(e) +d=A.S(e) +s=new J.cp(e,e.length,d.h("cp<1>")) +s.q() +e=this.b +r=A.S(e) +q=new J.cp(e,e.length,r.h("cp<1>")) +q.q() +p=b.d +if(p==null)p=c.c.a(p) +o=s.d +if(o==null)o=d.c.a(o) +n=q.d +if(n==null)n=r.c.a(n) +for(e=c.c,d=d.c,r=r.c,m=0;!0;m=k){c=p.b +l=o.b +k=Math.min(c,Math.min(l,n.gbi(n))) +j=c-k +i=j===0?p.c:B.A +h=k-m +f.push(A.aGf(m,k,i,o.c,o.d,n,A.qp(p.d-j,0,h),A.qp(p.e-j,0,h))) +if(c===k)if(b.q()){p=b.d +if(p==null)p=e.a(p) +g=!0}else g=!1 +else g=!1 +if(l===k)if(s.q()){o=s.d +if(o==null)o=d.a(o) +g=!0}if(n.gbi(n)===k)if(q.q()){n=q.d +if(n==null)n=r.a(n) +g=!0}if(!g)break}return f}} +A.aul.prototype={ +gt(a){var s=this +return A.N(s.a,s.b,s.c,s.d,s.e,s.f,s.r,s.w,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a,b){var s=this +if(b==null)return!1 +return b instanceof A.km&&b.a===s.a&&b.b===s.b&&b.c===s.c&&b.d==s.d&&b.e===s.e&&b.f===s.f&&b.r===s.r&&b.w===s.w}} +A.km.prototype={ +gu(a){return this.b-this.a}, +gJi(){return this.b-this.a===this.w}, +glG(){return this.f instanceof A.xe}, +CV(a){var s=a.c +s===$&&A.b() +return B.d.P(s,this.a,this.b-this.r)}, +l9(a,b){var s,r,q,p,o,n,m,l,k,j=this,i=j.a +if(i===b)return A.a([null,j],t.oA) +s=j.b +if(s===b)return A.a([j,null],t.oA) +r=s-b +q=j.r +p=Math.min(q,r) +o=j.w +n=Math.min(o,r) +m=j.d +l=j.e +k=j.f +return A.a([A.aGf(i,b,B.A,m,l,k,q-p,o-n),A.aGf(b,s,j.c,m,l,k,p,n)],t.cN)}, +k(a){var s=this +return B.a4i.k(0)+"("+s.a+", "+s.b+", "+s.c.k(0)+", "+A.h(s.d)+")"}} +A.avA.prototype={ +xn(a,b,c,d,e){var s=this +s.kz$=a +s.mV$=b +s.mW$=c +s.mX$=d +s.f4$=e}} +A.avB.prototype={ +gjb(a){var s,r,q=this,p=q.hc$ +p===$&&A.b() +s=q.r1$ +if(p.x===B.q){s===$&&A.b() +p=s}else{s===$&&A.b() +r=q.f4$ +r===$&&A.b() +r=p.a.f-(s+(r+q.f5$)) +p=r}return p}, +grJ(a){var s,r=this,q=r.hc$ +q===$&&A.b() +s=r.r1$ +if(q.x===B.q){s===$&&A.b() +q=r.f4$ +q===$&&A.b() +q=s+(q+r.f5$)}else{s===$&&A.b() +q=q.a.f-s}return q}, +as4(a){var s,r,q=this,p=q.hc$ +p===$&&A.b() +s=p.e +if(q.b>p.c-s)return +r=q.w +if(r===0)return +q.f5$=(a-p.a.f)/(p.f-s)*r}} +A.avz.prototype={ +gSJ(){var s,r,q,p,o,n,m,l,k=this,j=k.AC$ +if(j===$){s=k.hc$ +s===$&&A.b() +r=k.gjb(k) +q=k.hc$.a +p=k.mV$ +p===$&&A.b() +o=k.grJ(k) +n=k.hc$ +m=k.mW$ +m===$&&A.b() +l=k.d +l.toString +k.AC$!==$&&A.ay() +j=k.AC$=new A.eE(s.a.r+r,q.w-p,q.r+o,n.a.w+m,l)}return j}, +ZK(){var s,r,q,p,o,n,m,l,k,j,i=this,h=i.hc$ +h===$&&A.b() +if(i.b>h.c-h.e){s=i.d +s.toString +h=h.a.r +if(s===B.q){s=i.gjb(i) +r=i.hc$.a +q=i.mV$ +q===$&&A.b() +p=i.grJ(i) +o=i.f4$ +o===$&&A.b() +n=i.f5$ +m=i.mX$ +m===$&&A.b() +l=i.hc$ +k=i.mW$ +k===$&&A.b() +j=i.d +j.toString +j=new A.eE(h+s,r.w-q,r.r+p-(o+n-m),l.a.w+k,j) +h=j}else{s=i.gjb(i) +r=i.f4$ +r===$&&A.b() +q=i.f5$ +p=i.mX$ +p===$&&A.b() +o=i.hc$.a +n=i.mV$ +n===$&&A.b() +m=i.grJ(i) +l=i.hc$ +k=i.mW$ +k===$&&A.b() +j=i.d +j.toString +j=new A.eE(h+s+(r+q-p),o.w-n,o.r+m,l.a.w+k,j) +h=j}return h}return i.gSJ()}, +ZP(a,b){var s,r,q,p,o,n,m,l,k,j=this +if(b==null)b=j.a +if(a==null)a=j.b +s=j.a +r=b<=s +if(r&&a>=j.b-j.r)return j.gSJ() +if(r)q=0 +else{r=j.kz$ +r===$&&A.b() +r.soa(j.f) +r=j.kz$ +p=$.va() +o=r.a.c +o===$&&A.b() +r=r.c +q=A.qt(p,o,s,b,r.gaG(r).ax)}s=j.b-j.r +if(a>=s)n=0 +else{r=j.kz$ +r===$&&A.b() +r.soa(j.f) +r=j.kz$ +p=$.va() +o=r.a.c +o===$&&A.b() +r=r.c +n=A.qt(p,o,a,s,r.gaG(r).ax)}s=j.d +s.toString +if(s===B.q){m=j.gjb(j)+q +l=j.grJ(j)-n}else{m=j.gjb(j)+n +l=j.grJ(j)-q}s=j.hc$ +s===$&&A.b() +s=s.a +r=s.r +s=s.w +p=j.mV$ +p===$&&A.b() +o=j.mW$ +o===$&&A.b() +k=j.d +k.toString +return new A.eE(r+m,s-p,r+l,s+o,k)}, +avv(){return this.ZP(null,null)}, +a0c(a){var s,r,q,p,o,n,m,l,k,j=this +a=j.aeE(a) +s=j.a +r=j.b-j.r +q=r-s +if(q===0)return new A.b9(s,B.m) +if(q===1){p=j.f4$ +p===$&&A.b() +return aq.c;){if(q.gam4()){q.arA() +s.push(q.bk()) +a0.x=!0 +break $label0$0}if(q.garO())q.av9() +else q.apV() +n+=q.ald(o,n+1) +s.push(q.bk()) +q=q.Ye()}a1=q.a +if(a1.length!==0){a1=B.b.gO(a1).c +a1=a1===B.cy||a1===B.cz}else a1=!1 +if(a1){s.push(q.bk()) +q=q.Ye()}}a1=r.b +l=a1.e +if(l!=null&&s.length>l){a0.x=!0 +B.b.p7(s,l,s.length)}for(r=s.length,k=1/0,j=-1/0,i=0;ij)j=c}a0.z=new A.w(k,0,j,a0.c) +if(r!==0)if(isFinite(a0.b)&&a1.a===B.iy)for(n=0;n=d;--s){q=o[s] +q.r1$=e+r +if(q.d==null)q.d=a +p=q.f4$ +p===$&&A.b() +r+=p+q.f5$}return r}, +wZ(){var s,r,q,p,o,n,m,l=A.a([],t.Lx) +for(s=this.y,r=s.length,q=0;q=b||a<0||b<0)return A.a([],t.Lx) +s=this.a.c +s===$&&A.b() +r=s.length +if(a>r||b>r)return A.a([],t.Lx) +q=A.a([],t.Lx) +for(s=this.y,p=s.length,o=0;o=j+l.r)return new A.b9(l.c-l.d,B.al) +s=k-j +for(k=l.w,j=k.length,r=0;r1 +return this.as>0}, +gal4(){var s=this.c-this.w,r=this.d.b,q=r.a +switch((q==null?B.az:q).a){case 2:return s/2 +case 1:return s +case 4:r=r.b +return(r==null?B.q:r)===B.Z?s:0 +case 5:r=r.b +return(r==null?B.q:r)===B.Z?0:s +default:return 0}}, +gam4(){var s,r=this.d.b +if(r.z==null)return!1 +s=r.e +return s==null||s===this.f+1}, +ga7Q(){var s=this.a +if(s.length!==0){s=B.b.gO(s).c +s=s===B.cy||s===B.cz}else s=!1 +if(s)return!1 +s=this.b +s=s==null?null:s.length!==0 +if(s===!0)return!1 +return!0}, +U4(a){var s=this +s.zn(a) +if(a.c!==B.A)s.Q=s.a.length +B.b.D(s.a,a)}, +zn(a){var s,r=this,q=a.w +r.at=r.at+q +if(a.gJi())r.ax+=q +else{r.ax=q +q=r.x +s=a.mX$ +s===$&&A.b() +r.w=q+s}q=r.x +s=a.f4$ +s===$&&A.b() +r.x=q+(s+a.f5$) +if(a.glG())r.a6W(a) +if(a.c!==B.A)++r.as +q=r.y +s=a.mV$ +s===$&&A.b() +r.y=Math.max(q,s) +s=r.z +q=a.mW$ +q===$&&A.b() +r.z=Math.max(s,q)}, +a6W(a){var s,r,q,p,o,n=this,m=t.mX.a(a.f) +switch(m.c.a){case 3:s=n.y +r=m.b-s +break +case 4:r=n.z +s=m.b-r +break +case 5:q=n.y +p=n.z +o=m.b/2-(q+p)/2 +s=q+o +r=p+o +break +case 1:s=m.b +r=0 +break +case 2:r=m.b +s=0 +break +case 0:s=m.d +r=m.b-s +break +default:s=null +r=null}q=a.mX$ +q===$&&A.b() +p=a.f4$ +p===$&&A.b() +a.xn(n.e,s,r,q,p+a.f5$)}, +uc(){var s,r=this,q=r.as=r.ax=r.at=r.z=r.y=r.x=r.w=0 +r.Q=-1 +for(s=r.a;q1||a +q=B.b.gO(s) +if(q.glG()){if(r){p=g.b +p.toString +B.b.eu(p,0,B.b.eF(s)) +g.uc()}return}p=g.e +p.soa(q.f) +o=g.x +n=q.f4$ +n===$&&A.b() +m=q.f5$ +l=q.b-q.r +k=p.WQ(q.a,l,r,b-(o-(n+m))) +if(k===l)return +B.b.eF(s) +g.uc() +j=q.l9(0,k) +i=B.b.gL(j) +if(i!=null){p.JB(i) +g.U4(i)}h=B.b.gO(j) +if(h!=null){p.JB(h) +s=g.b +s.toString +B.b.eu(s,0,h)}}, +apV(){return this.WR(!1,null)}, +arA(){var s,r,q,p,o,n,m,l,k,j,i,h,g=this,f=g.d.b.z +f.toString +g.b=A.a([],t.cN) +s=g.e +r=g.a +s.soa(B.b.gO(r).f) +q=$.va() +p=f.length +o=A.qt(q,f,0,p,null) +n=g.c +m=Math.max(0,n-o) +while(!0){if(r.length>1){l=g.x +k=B.b.gO(r) +j=k.f4$ +j===$&&A.b() +k=l-(j+k.f5$) +l=k}else l=0 +if(!(l>m))break +l=g.b +l.toString +B.b.eu(l,0,B.b.eF(r)) +g.uc() +s.soa(B.b.gO(r).f) +o=A.qt(q,f,0,p,null) +m=n-o}i=B.b.gO(r) +g.WR(!0,m) +f=g.gWv() +h=new A.O8($,$,$,$,$,$,$,$,0,B.cz,null,B.km,i.f,0,0,f,f) +f=i.mV$ +f===$&&A.b() +r=i.mW$ +r===$&&A.b() +h.xn(s,f,r,o,o) +g.U4(h)}, +av9(){var s,r=this.a,q=r.length,p=q-2 +for(;r[p].c===B.A;)--p +s=p+1 +A.cU(s,q,q,null,null) +this.b=A.eD(r,s,q,A.S(r).c).dI(0) +B.b.p7(r,s,r.length) +this.uc()}, +ald(a,b){var s,r=this,q=r.a,p=b +while(!0){if(r.ga7Q())if(p1;){p=B.f.d4(q+r,2) +o=$.va() +s===$&&A.b() +n=this.c +m=A.qt(o,s,a,p,n.gaG(n).ax) +if(md?q:p +r=p}}return q===a&&!c?q+1:q}} +A.ap1.prototype={ +$2(a,b){b.gPS().remove()}, +$S:261} +A.p2.prototype={ +I(){return"LineBreakType."+this.b}} +A.acz.prototype={ +AR(){return A.b2W(this.a)}} +A.arS.prototype={ +AR(){var s=this.a +return A.aQa(s,s,this.b)}} +A.p1.prototype={ +gt(a){var s=this +return A.N(s.a,s.b,s.c,s.d,s.e,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a,b){var s=this +if(b==null)return!1 +return b instanceof A.p1&&b.a===s.a&&b.b===s.b&&b.c===s.c&&b.d===s.d&&b.e===s.e}, +k(a){return"LineBreakFragment("+this.a+", "+this.b+", "+this.c.k(0)+")"}} +A.aCv.prototype={ +$2(a,b){var s=this,r=a===B.cz?s.b.length:s.a.f,q=s.a,p=q.a +if(p===B.dH)++q.d +else if(p===B.eC||p===B.hr||p===B.hv){++q.e;++q.d}if(a===B.A)return +p=q.c +s.c.push(new A.p1(a,q.e,q.d,p,r)) +q.c=q.f +q.d=q.e=0 +q.a=q.b=null}, +$S:265} +A.SX.prototype={ +m(){this.a.remove()}} +A.aqH.prototype={ +am(a,b){var s,r,q,p,o,n,m,l=this.a.gh1().y +for(s=l.length,r=0;rthis.b)return B.a5M +return B.a5L}} +A.nG.prototype={ +AO(a,b,c){var s=A.Le(b,c) +return s==null?this.b:this.r9(s)}, +r9(a){var s,r,q,p,o=this +if(a==null)return o.b +s=o.c +r=s.i(0,a) +if(r!=null)return r +q=o.a7e(a) +p=q===-1?o.b:o.a[q].c +s.n(0,a,p) +return p}, +a7e(a){var s,r,q=this.a,p=q.length +for(s=0;s")).aa(0,new A.ac7(this,r)) +return r}} +A.ac7.prototype={ +$1(a){var s=this.a,r=s.b.i(0,a) +r.toString +this.b.push(A.dd(r,"input",new A.ac8(s,a,r)))}, +$S:109} +A.ac8.prototype={ +$1(a){var s,r=this.a.c,q=this.b +if(r.i(0,q)==null)throw A.c(A.Q("AutofillInfo must have a valid uniqueIdentifier.")) +else{r=r.i(0,q) +r.toString +s=A.aKN(this.c) +$.b8().jS("flutter/textinput",B.b3.jK(new A.jq(u.l,[0,A.aY([r.b,s.ZI()],t.ob,t.z)])),A.a5w())}}, +$S:1} +A.LW.prototype={ +Uo(a,b){var s,r,q="password",p=this.d,o=this.e,n=globalThis.HTMLInputElement +if(n!=null&&a instanceof n){if(o!=null)a.placeholder=o +s=p==null +if(!s){a.name=p +a.id=p +if(B.d.p(p,q))A.aaQ(a,q) +else A.aaQ(a,"text")}s=s?"on":p +a.autocomplete=s}else{n=globalThis.HTMLTextAreaElement +if(n!=null&&a instanceof n){if(o!=null)a.placeholder=o +s=p==null +if(!s){a.name=p +a.id=p}r=A.aA(s?"on":p) +s=r==null?t.K.a(r):r +a.setAttribute("autocomplete",s)}}}, +fK(a){return this.Uo(a,!1)}} +A.yi.prototype={} +A.w2.prototype={ +gBx(){return Math.min(this.b,this.c)}, +gBv(){return Math.max(this.b,this.c)}, +ZI(){var s=this +return A.aY(["text",s.a,"selectionBase",s.b,"selectionExtent",s.c,"composingBase",s.d,"composingExtent",s.e],t.N,t.z)}, +gt(a){var s=this +return A.N(s.a,s.b,s.c,s.d,s.e,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +if(A.t(s)!==J.U(b))return!1 +return b instanceof A.w2&&b.a==s.a&&b.gBx()===s.gBx()&&b.gBv()===s.gBv()&&b.d===s.d&&b.e===s.e}, +k(a){return this.c4(0)}, +fK(a){var s,r,q=this,p=globalThis.HTMLInputElement +if(p!=null&&a instanceof p){a.toString +A.aKt(a,q.a) +s=q.gBx() +r=q.gBv() +a.setSelectionRange(s,r)}else{p=globalThis.HTMLTextAreaElement +if(p!=null&&a instanceof p){a.toString +A.aKx(a,q.a) +s=q.gBx() +r=q.gBv() +a.setSelectionRange(s,r)}else{s=a==null?null:A.aWO(a) +throw A.c(A.a3("Unsupported DOM element type: <"+A.h(s)+"> ("+J.U(a).k(0)+")"))}}}} +A.afW.prototype={} +A.P5.prototype={ +ka(){var s,r=this,q=r.w +if(q!=null){s=r.c +s.toString +q.fK(s)}q=r.d +q===$&&A.b() +if(q.w!=null){r.wp() +q=r.e +if(q!=null)q.fK(r.c) +r.gWP().focus() +r.c.focus()}}} +A.T_.prototype={ +ka(){var s,r=this,q=r.w +if(q!=null){s=r.c +s.toString +q.fK(s)}q=r.d +q===$&&A.b() +if(q.w!=null)A.cy(B.z,new A.amU(r))}, +vR(){if(this.w!=null)this.ka() +this.c.focus()}} +A.amU.prototype={ +$0(){var s,r=this.a +r.wp() +r.gWP().focus() +r.c.focus() +s=r.e +if(s!=null){r=r.c +r.toString +s.fK(r)}}, +$S:0} +A.Br.prototype={ +gjJ(){var s=null,r=this.f +if(r==null){r=this.e.a +r.toString +r=this.f=new A.yi(r,"",-1,-1,s,s,s,s)}return r}, +gWP(){var s=this.d +s===$&&A.b() +s=s.w +return s==null?null:s.a}, +ri(a,b,c){var s,r,q,p=this,o="none",n="transparent" +p.c=a.a.HR() +p.Hg(a) +s=p.c +s.classList.add("flt-text-editing") +r=s.style +A.x(r,"forced-color-adjust",o) +A.x(r,"white-space","pre-wrap") +A.x(r,"align-content","center") +A.x(r,"position","absolute") +A.x(r,"top","0") +A.x(r,"left","0") +A.x(r,"padding","0") +A.x(r,"opacity","1") +A.x(r,"color",n) +A.x(r,"background-color",n) +A.x(r,"background",n) +A.x(r,"caret-color",n) +A.x(r,"outline",o) +A.x(r,"border",o) +A.x(r,"resize",o) +A.x(r,"text-shadow",o) +A.x(r,"overflow","hidden") +A.x(r,"transform-origin","0 0 0") +q=$.cz() +if(q!==B.co)q=q===B.W +else q=!0 +if(q)s.classList.add("transparentTextEditing") +s=p.r +if(s!=null){q=p.c +q.toString +s.fK(q)}s=p.d +s===$&&A.b() +if(s.w==null){s=$.en.x +s===$&&A.b() +q=p.c +q.toString +s.append(q) +p.Q=!1}p.vR() +p.b=!0 +p.x=c +p.y=b}, +Hg(a){var s,r,q,p,o,n=this +n.d=a +s=n.c +if(a.c){s.toString +r=A.aA("readonly") +if(r==null)r=t.K.a(r) +s.setAttribute("readonly",r)}else s.removeAttribute("readonly") +if(a.d){s=n.c +s.toString +r=A.aA("password") +if(r==null)r=t.K.a(r) +s.setAttribute("type",r)}if(a.a===B.n6){s=n.c +s.toString +r=A.aA("none") +if(r==null)r=t.K.a(r) +s.setAttribute("inputmode",r)}q=A.aXd(a.b) +s=n.c +s.toString +q.amI(s) +p=a.r +s=n.c +if(p!=null){s.toString +p.Uo(s,!0)}else{s.toString +r=A.aA("off") +if(r==null)r=t.K.a(r) +s.setAttribute("autocomplete",r)}o=a.e?"on":"off" +s=n.c +s.toString +r=A.aA(o) +if(r==null)r=t.K.a(r) +s.setAttribute("autocorrect",r)}, +vR(){this.ka()}, +uB(){var s,r,q=this,p=q.d +p===$&&A.b() +p=p.w +if(p!=null)B.b.E(q.z,p.uC()) +p=q.z +s=q.c +s.toString +r=q.gvG() +p.push(A.dd(s,"input",r)) +s=q.c +s.toString +p.push(A.dd(s,"keydown",q.gwb())) +p.push(A.dd(self.document,"selectionchange",r)) +r=q.c +r.toString +A.cE(r,"beforeinput",t.e.a(A.bM(q.gAS())),null) +r=q.c +r.toString +q.zB(r) +r=q.c +r.toString +p.push(A.dd(r,"blur",new A.aah(q))) +q.C6()}, +KL(a){this.w=a +if(this.b)this.ka()}, +KM(a){var s +this.r=a +if(this.b){s=this.c +s.toString +a.fK(s)}}, +ie(a){var s,r,q,p=this,o=null +p.b=!1 +p.w=p.r=p.f=p.e=null +for(s=p.z,r=0;r=0&&a.c>=0) +else s=!0 +if(s)return +a.fK(this.c)}, +ka(){this.c.focus()}, +wp(){var s,r,q=this.d +q===$&&A.b() +q=q.w +q.toString +s=this.c +s.toString +r=q.a +r.insertBefore(s,q.d) +q=$.en.x +q===$&&A.b() +q.append(r) +this.Q=!0}, +WZ(a){var s,r,q=this,p=q.c +p.toString +s=q.anY(A.aKN(p)) +p=q.d +p===$&&A.b() +if(p.f){q.gjJ().r=s.d +q.gjJ().w=s.e +r=A.b0e(s,q.e,q.gjJ())}else r=null +if(!s.j(0,q.e)){q.e=s +q.f=r +q.x.$2(s,r)}q.f=null}, +aq0(a){var s,r,q,p=this,o=A.dk(a.data),n=A.dk(a.inputType) +if(n!=null){s=p.e +r=s.b +q=s.c +r=r>q?r:q +if(B.d.p(n,"delete")){p.gjJ().b="" +p.gjJ().d=r}else if(n==="insertLineBreak"){p.gjJ().b="\n" +p.gjJ().c=r +p.gjJ().d=r}else if(o!=null){p.gjJ().b=o +p.gjJ().c=r +p.gjJ().d=r}}}, +asQ(a){var s,r,q=globalThis.KeyboardEvent +if(q!=null&&a instanceof q)if(a.keyCode===13){s=this.y +s.toString +r=this.d +r===$&&A.b() +s.$1(r.b) +if(!(this.d.a instanceof A.Qz))a.preventDefault()}}, +Is(a,b,c,d){var s,r=this +r.ri(b,c,d) +r.uB() +s=r.e +if(s!=null)r.Ly(s) +r.c.focus()}, +C6(){var s=this,r=s.z,q=s.c +q.toString +r.push(A.dd(q,"mousedown",new A.aai())) +q=s.c +q.toString +r.push(A.dd(q,"mouseup",new A.aaj())) +q=s.c +q.toString +r.push(A.dd(q,"mousemove",new A.aak()))}} +A.aah.prototype={ +$1(a){this.a.c.focus()}, +$S:1} +A.aai.prototype={ +$1(a){a.preventDefault()}, +$S:1} +A.aaj.prototype={ +$1(a){a.preventDefault()}, +$S:1} +A.aak.prototype={ +$1(a){a.preventDefault()}, +$S:1} +A.afn.prototype={ +ri(a,b,c){var s,r=this +r.DA(a,b,c) +s=r.c +s.toString +a.a.Va(s) +s=r.d +s===$&&A.b() +if(s.w!=null)r.wp() +s=r.c +s.toString +a.x.Lv(s)}, +vR(){A.x(this.c.style,"transform","translate(-9999px, -9999px)") +this.p1=!1}, +uB(){var s,r,q,p=this,o=p.d +o===$&&A.b() +o=o.w +if(o!=null)B.b.E(p.z,o.uC()) +o=p.z +s=p.c +s.toString +r=p.gvG() +o.push(A.dd(s,"input",r)) +s=p.c +s.toString +o.push(A.dd(s,"keydown",p.gwb())) +o.push(A.dd(self.document,"selectionchange",r)) +r=p.c +r.toString +A.cE(r,"beforeinput",t.e.a(A.bM(p.gAS())),null) +r=p.c +r.toString +p.zB(r) +r=p.c +r.toString +o.push(A.dd(r,"focus",new A.afq(p))) +p.a6S() +q=new A.lT() +$.mp() +q.nC(0) +r=p.c +r.toString +o.push(A.dd(r,"blur",new A.afr(p,q)))}, +KL(a){var s=this +s.w=a +if(s.b&&s.p1)s.ka()}, +ie(a){var s +this.a2f(0) +s=this.ok +if(s!=null)s.b3(0) +this.ok=null}, +a6S(){var s=this.c +s.toString +this.z.push(A.dd(s,"click",new A.afo(this)))}, +RJ(){var s=this.ok +if(s!=null)s.b3(0) +this.ok=A.cy(B.aD,new A.afp(this))}, +ka(){var s,r +this.c.focus() +s=this.w +if(s!=null){r=this.c +r.toString +s.fK(r)}}} +A.afq.prototype={ +$1(a){this.a.RJ()}, +$S:1} +A.afr.prototype={ +$1(a){var s=A.dp(this.b.gWo(),0).a<2e5,r=self.document.hasFocus()&&s,q=this.a +if(r)q.c.focus() +else q.a.Da()}, +$S:1} +A.afo.prototype={ +$1(a){var s=this.a +if(s.p1){s.vR() +s.RJ()}}, +$S:1} +A.afp.prototype={ +$0(){var s=this.a +s.p1=!0 +s.ka()}, +$S:0} +A.a6n.prototype={ +ri(a,b,c){var s,r,q=this +q.DA(a,b,c) +s=q.c +s.toString +a.a.Va(s) +s=q.d +s===$&&A.b() +if(s.w!=null)q.wp() +else{s=$.en.x +s===$&&A.b() +r=q.c +r.toString +s.append(r)}s=q.c +s.toString +a.x.Lv(s)}, +uB(){var s,r,q=this,p=q.d +p===$&&A.b() +p=p.w +if(p!=null)B.b.E(q.z,p.uC()) +p=q.z +s=q.c +s.toString +r=q.gvG() +p.push(A.dd(s,"input",r)) +s=q.c +s.toString +p.push(A.dd(s,"keydown",q.gwb())) +p.push(A.dd(self.document,"selectionchange",r)) +r=q.c +r.toString +A.cE(r,"beforeinput",t.e.a(A.bM(q.gAS())),null) +r=q.c +r.toString +q.zB(r) +r=q.c +r.toString +p.push(A.dd(r,"blur",new A.a6o(q))) +q.C6()}, +ka(){var s,r +this.c.focus() +s=this.w +if(s!=null){r=this.c +r.toString +s.fK(r)}}} +A.a6o.prototype={ +$1(a){var s=this.a +if(self.document.hasFocus())s.c.focus() +else s.a.Da()}, +$S:1} +A.acH.prototype={ +ri(a,b,c){var s +this.DA(a,b,c) +s=this.d +s===$&&A.b() +if(s.w!=null)this.wp()}, +uB(){var s,r,q=this,p=q.d +p===$&&A.b() +p=p.w +if(p!=null)B.b.E(q.z,p.uC()) +p=q.z +s=q.c +s.toString +r=q.gvG() +p.push(A.dd(s,"input",r)) +s=q.c +s.toString +p.push(A.dd(s,"keydown",q.gwb())) +s=q.c +s.toString +A.cE(s,"beforeinput",t.e.a(A.bM(q.gAS())),null) +s=q.c +s.toString +q.zB(s) +s=q.c +s.toString +p.push(A.dd(s,"keyup",new A.acJ(q))) +s=q.c +s.toString +p.push(A.dd(s,"select",r)) +r=q.c +r.toString +p.push(A.dd(r,"blur",new A.acK(q))) +q.C6()}, +agG(){A.cy(B.z,new A.acI(this))}, +ka(){var s,r,q=this +q.c.focus() +s=q.w +if(s!=null){r=q.c +r.toString +s.fK(r)}s=q.e +if(s!=null){r=q.c +r.toString +s.fK(r)}}} +A.acJ.prototype={ +$1(a){this.a.WZ(a)}, +$S:1} +A.acK.prototype={ +$1(a){this.a.agG()}, +$S:1} +A.acI.prototype={ +$0(){this.a.c.focus()}, +$S:0} +A.aqk.prototype={} +A.aqr.prototype={ +jh(a){var s=a.b +if(s!=null&&s!==this.a&&a.c){a.c=!1 +a.giB().ie(0)}a.b=this.a +a.d=this.b}} +A.aqy.prototype={ +jh(a){var s=a.giB(),r=a.d +r.toString +s.Hg(r)}} +A.aqt.prototype={ +jh(a){a.giB().Ly(this.a)}} +A.aqw.prototype={ +jh(a){if(!a.c)a.aiU()}} +A.aqs.prototype={ +jh(a){a.giB().KL(this.a)}} +A.aqv.prototype={ +jh(a){a.giB().KM(this.a)}} +A.aqi.prototype={ +jh(a){if(a.c){a.c=!1 +a.giB().ie(0)}}} +A.aqo.prototype={ +jh(a){if(a.c){a.c=!1 +a.giB().ie(0)}}} +A.aqu.prototype={ +jh(a){}} +A.aqq.prototype={ +jh(a){}} +A.aqp.prototype={ +jh(a){}} +A.aqn.prototype={ +jh(a){a.Da() +if(this.a)A.b7H() +A.b5e()}} +A.aEt.prototype={ +$2(a,b){var s=t.qr +s=A.cC(new A.eZ(b.getElementsByClassName("submitBtn"),s),s.h("n.E"),t.e) +A.o(s).z[1].a(J.oe(s.a)).click()}, +$S:267} +A.aq4.prototype={ +aqU(a,b){var s,r,q,p,o,n,m,l,k=B.b3.iY(a) +switch(k.a){case"TextInput.setClient":s=k.b +r=J.aF(s) +q=new A.aqr(A.el(r.i(s,0)),A.aLq(t.a.a(r.i(s,1)))) +break +case"TextInput.updateConfig":this.a.d=A.aLq(t.a.a(k.b)) +q=B.Eg +break +case"TextInput.setEditingState":q=new A.aqt(A.aKO(t.a.a(k.b))) +break +case"TextInput.show":q=B.Ee +break +case"TextInput.setEditableSizeAndTransform":q=new A.aqs(A.aX_(t.a.a(k.b))) +break +case"TextInput.setStyle":s=t.a.a(k.b) +r=J.aF(s) +p=A.el(r.i(s,"textAlignIndex")) +o=A.el(r.i(s,"textDirectionIndex")) +n=A.j7(r.i(s,"fontWeightIndex")) +m=n!=null?A.aQD(n):"normal" +l=A.aP6(r.i(s,"fontSize")) +if(l==null)l=null +q=new A.aqv(new A.abR(l,m,A.dk(r.i(s,"fontFamily")),B.QR[p],B.pk[o])) +break +case"TextInput.clearClient":q=B.E9 +break +case"TextInput.hide":q=B.Ea +break +case"TextInput.requestAutofill":q=B.Eb +break +case"TextInput.finishAutofillContext":q=new A.aqn(A.v_(k.b)) +break +case"TextInput.setMarkedTextRect":q=B.Ed +break +case"TextInput.setCaretRect":q=B.Ec +break +default:$.b8().fA(b,null) +return}q.jh(this.a) +new A.aq5(b).$0()}} +A.aq5.prototype={ +$0(){$.b8().fA(this.a,B.ac.cq([!0]))}, +$S:0} +A.afk.prototype={ +guO(a){var s=this.a +if(s===$){s!==$&&A.ay() +s=this.a=new A.aq4(this)}return s}, +giB(){var s,r,q,p,o=this,n=null,m=o.f +if(m===$){s=$.eP +if((s==null?$.eP=A.mJ():s).x){s=A.b_s(o) +r=s}else{s=$.cz() +if(s===B.W){q=$.e6() +q=q===B.aS}else q=!1 +if(q)p=new A.afn(o,A.a([],t.Up),$,$,$,n) +else if(s===B.W)p=new A.T_(o,A.a([],t.Up),$,$,$,n) +else{if(s===B.co){q=$.e6() +q=q===B.hV}else q=!1 +if(q)p=new A.a6n(o,A.a([],t.Up),$,$,$,n) +else p=s===B.bO?new A.acH(o,A.a([],t.Up),$,$,$,n):A.aXD(o)}r=p}o.f!==$&&A.ay() +m=o.f=r}return m}, +aiU(){var s,r,q=this +q.c=!0 +s=q.giB() +r=q.d +r.toString +s.Is(0,r,new A.afl(q),new A.afm(q))}, +Da(){var s,r=this +if(r.c){r.c=!1 +r.giB().ie(0) +r.guO(r) +s=r.b +$.b8().jS("flutter/textinput",B.b3.jK(new A.jq("TextInputClient.onConnectionClosed",[s])),A.a5w())}}} +A.afm.prototype={ +$2(a,b){var s,r,q="flutter/textinput",p=this.a +if(p.d.f){p.guO(p) +p=p.b +s=t.N +r=t.z +$.b8().jS(q,B.b3.jK(new A.jq(u.s,[p,A.aY(["deltas",A.a([A.aY(["oldText",b.a,"deltaText",b.b,"deltaStart",b.c,"deltaEnd",b.d,"selectionBase",b.e,"selectionExtent",b.f,"composingBase",b.r,"composingExtent",b.w],s,r)],t.H7)],s,r)])),A.a5w())}else{p.guO(p) +p=p.b +$.b8().jS(q,B.b3.jK(new A.jq("TextInputClient.updateEditingState",[p,a.ZI()])),A.a5w())}}, +$S:271} +A.afl.prototype={ +$1(a){var s=this.a +s.guO(s) +s=s.b +$.b8().jS("flutter/textinput",B.b3.jK(new A.jq("TextInputClient.performAction",[s,a])),A.a5w())}, +$S:273} +A.abR.prototype={ +fK(a){var s=this,r=a.style +A.x(r,"text-align",A.b85(s.d,s.e)) +A.x(r,"font",s.b+" "+A.h(s.a)+"px "+A.h(A.aDu(s.c)))}, +ghf(a){return this.b}} +A.aba.prototype={ +fK(a){var s=A.jV(this.c),r=a.style +A.x(r,"width",A.h(this.a)+"px") +A.x(r,"height",A.h(this.b)+"px") +A.x(r,"transform",s)}} +A.abb.prototype={ +$1(a){return A.kZ(a)}, +$S:274} +A.Gz.prototype={ +I(){return"TransformKind."+this.b}} +A.aDs.prototype={ +$1(a){return"0x"+B.d.lO(B.f.iv(a,16),2,"0")}, +$S:82} +A.Q7.prototype={ +gu(a){return this.b.b}, +i(a,b){var s=this.c.i(0,b) +return s==null?null:s.d.b}, +MI(a,b,c){var s,r,q,p=this.b +p.zC(new A.a0F(b,c)) +s=this.c +r=p.a +q=r.b.xU() +q.toString +s.n(0,b,q) +if(p.b>this.a){s.C(0,r.a.gAu().a) +p.eF(0)}}} +A.bU.prototype={ +aW(a){var s=a.a,r=this.a +r[15]=s[15] +r[14]=s[14] +r[13]=s[13] +r[12]=s[12] +r[11]=s[11] +r[10]=s[10] +r[9]=s[9] +r[8]=s[8] +r[7]=s[7] +r[6]=s[6] +r[5]=s[5] +r[4]=s[4] +r[3]=s[3] +r[2]=s[2] +r[1]=s[1] +r[0]=s[0]}, +i(a,b){return this.a[b]}, +au(a,b,a0){var s=this.a,r=s[0],q=s[4],p=s[8],o=s[12],n=s[1],m=s[5],l=s[9],k=s[13],j=s[2],i=s[6],h=s[10],g=s[14],f=s[3],e=s[7],d=s[11],c=s[15] +s[12]=r*b+q*a0+p*0+o +s[13]=n*b+m*a0+l*0+k +s[14]=j*b+i*a0+h*0+g +s[15]=f*b+e*a0+d*0+c}, +avL(a,b){return this.au(a,b,0)}, +hN(a,b,c,d){var s=c==null?b:c,r=d==null?b:d,q=this.a +q[15]=q[15] +q[0]=q[0]*b +q[1]=q[1]*b +q[2]=q[2]*b +q[3]=q[3]*b +q[4]=q[4]*s +q[5]=q[5]*s +q[6]=q[6]*s +q[7]=q[7]*s +q[8]=q[8]*r +q[9]=q[9]*r +q[10]=q[10]*r +q[11]=q[11]*r +q[12]=q[12] +q[13]=q[13] +q[14]=q[14]}, +aV(a,b){return this.hN(a,b,null,null)}, +ei(a,b,c){return this.hN(a,b,c,null)}, +wn(a,b,c){var s=this.a,r=s[0],q=s[4],p=s[8],o=s[12],n=s[1],m=s[5],l=s[9],k=s[13],j=s[2],i=s[6],h=s[10],g=s[14],f=1/(s[3]*a+s[7]*b+s[11]*c+s[15]) +return new A.IR((r*a+q*b+p*c+o)*f,(n*a+m*b+l*c+k)*f,(j*a+i*b+h*c+g)*f)}, +vX(a){var s=this.a +return s[0]===1&&s[1]===0&&s[2]===0&&s[3]===0&&s[4]===0&&s[5]===1&&s[6]===0&&s[7]===0&&s[8]===0&&s[9]===0&&s[10]===1&&s[11]===0&&s[12]===0&&s[13]===0&&s[14]===0&&s[15]===1}, +Zw(b0,b1,b2){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a=b1.a,a0=b1.b,a1=b1.c,a2=Math.sqrt(a*a+a0*a0+a1*a1),a3=a/a2,a4=a0/a2,a5=a1/a2,a6=Math.cos(b2),a7=Math.sin(b2),a8=1-a6,a9=a3*a3*a8+a6 +a1=a5*a7 +s=a3*a4*a8-a1 +a0=a4*a7 +r=a3*a5*a8+a0 +q=a4*a3*a8+a1 +p=a4*a4*a8+a6 +a1=a3*a7 +o=a4*a5*a8-a1 +n=a5*a3*a8-a0 +m=a5*a4*a8+a1 +l=a5*a5*a8+a6 +a1=this.a +a0=a1[0] +a=a1[4] +k=a1[8] +j=a1[1] +i=a1[5] +h=a1[9] +g=a1[2] +f=a1[6] +e=a1[10] +d=a1[3] +c=a1[7] +b=a1[11] +a1[0]=a0*a9+a*q+k*n +a1[1]=j*a9+i*q+h*n +a1[2]=g*a9+f*q+e*n +a1[3]=d*a9+c*q+b*n +a1[4]=a0*s+a*p+k*m +a1[5]=j*s+i*p+h*m +a1[6]=g*s+f*p+e*m +a1[7]=d*s+c*p+b*m +a1[8]=a0*r+a*o+k*l +a1[9]=j*r+i*o+h*l +a1[10]=g*r+f*o+e*l +a1[11]=d*r+c*o+b*l}, +l5(a,b,c){var s=this.a +s[14]=c +s[13]=b +s[12]=a}, +fL(b5){var s,r,q,p,o=b5.a,n=o[0],m=o[1],l=o[2],k=o[3],j=o[4],i=o[5],h=o[6],g=o[7],f=o[8],e=o[9],d=o[10],c=o[11],b=o[12],a=o[13],a0=o[14],a1=o[15],a2=n*i-m*j,a3=n*h-l*j,a4=n*g-k*j,a5=m*h-l*i,a6=m*g-k*i,a7=l*g-k*h,a8=f*a-e*b,a9=f*a0-d*b,b0=f*a1-c*b,b1=e*a0-d*a,b2=e*a1-c*a,b3=d*a1-c*a0,b4=a2*b3-a3*b2+a4*b1+a5*b0-a6*a9+a7*a8 +if(b4===0){this.aW(b5) +return 0}s=1/b4 +r=this.a +r[0]=(i*b3-h*b2+g*b1)*s +r[1]=(-m*b3+l*b2-k*b1)*s +r[2]=(a*a7-a0*a6+a1*a5)*s +r[3]=(-e*a7+d*a6-c*a5)*s +q=-j +r[4]=(q*b3+h*b0-g*a9)*s +r[5]=(n*b3-l*b0+k*a9)*s +p=-b +r[6]=(p*a7+a0*a4-a1*a3)*s +r[7]=(f*a7-d*a4+c*a3)*s +r[8]=(j*b2-i*b0+g*a8)*s +r[9]=(-n*b2+m*b0-k*a8)*s +r[10]=(b*a6-a*a4+a1*a2)*s +r[11]=(-f*a6+e*a4-c*a2)*s +r[12]=(q*b1+i*a9-h*a8)*s +r[13]=(n*b1-m*a9+l*a8)*s +r[14]=(p*a5+a*a3-a0*a2)*s +r[15]=(f*a5-e*a3+d*a2)*s +return b4}, +cP(b5,b6){var s=this.a,r=s[15],q=s[0],p=s[4],o=s[8],n=s[12],m=s[1],l=s[5],k=s[9],j=s[13],i=s[2],h=s[6],g=s[10],f=s[14],e=s[3],d=s[7],c=s[11],b=b6.a,a=b[15],a0=b[0],a1=b[4],a2=b[8],a3=b[12],a4=b[1],a5=b[5],a6=b[9],a7=b[13],a8=b[2],a9=b[6],b0=b[10],b1=b[14],b2=b[3],b3=b[7],b4=b[11] +s[0]=q*a0+p*a4+o*a8+n*b2 +s[4]=q*a1+p*a5+o*a9+n*b3 +s[8]=q*a2+p*a6+o*b0+n*b4 +s[12]=q*a3+p*a7+o*b1+n*a +s[1]=m*a0+l*a4+k*a8+j*b2 +s[5]=m*a1+l*a5+k*a9+j*b3 +s[9]=m*a2+l*a6+k*b0+j*b4 +s[13]=m*a3+l*a7+k*b1+j*a +s[2]=i*a0+h*a4+g*a8+f*b2 +s[6]=i*a1+h*a5+g*a9+f*b3 +s[10]=i*a2+h*a6+g*b0+f*b4 +s[14]=i*a3+h*a7+g*b1+f*a +s[3]=e*a0+d*a4+c*a8+r*b2 +s[7]=e*a1+d*a5+c*a9+r*b3 +s[11]=e*a2+d*a6+c*b0+r*b4 +s[15]=e*a3+d*a7+c*b1+r*a}, +eS(a){var s=new A.bU(new Float32Array(16)) +s.aW(this) +s.cP(0,a) +return s}, +ZZ(a){var s=a[0],r=a[1],q=this.a +a[0]=q[0]*s+q[4]*r+q[12] +a[1]=q[1]*s+q[5]*r+q[13]}, +k(a){return this.c4(0)}} +A.acE.prototype={ +ZY(a,b,c){var s=this.a +this.b=s[12]+s[0]*b+s[4]*c +this.c=s[13]+s[1]*b+s[5]*c}} +A.Nu.prototype={ +a69(a){var s=A.b5B(new A.aa5(this)) +this.b=s +s.observe(this.a)}, +a7i(a){this.c.D(0,a)}, +aA(a){var s=this.b +s===$&&A.b() +s.disconnect() +this.c.aA(0)}, +gYk(a){var s=this.c +return new A.j5(s,A.o(s).h("j5<1>"))}, +o8(){var s,r +$.cZ() +s=$.c4().d +if(s==null){r=self.window.devicePixelRatio +s=r===0?1:r}r=this.a +return new A.G(r.clientWidth*s,r.clientHeight*s)}, +V5(a,b){return B.fx}} +A.aa5.prototype={ +$2(a,b){new A.R(a,new A.aa4(),a.$ti.h("R")).aa(0,this.a.ga7h())}, +$S:281} +A.aa4.prototype={ +$1(a){return new A.G(a.contentRect.width,a.contentRect.height)}, +$S:286} +A.aaq.prototype={} +A.P0.prototype={ +afM(a){this.b.D(0,null)}, +aA(a){var s=this.a +s===$&&A.b() +s.b.removeEventListener(s.a,s.c) +this.b.aA(0)}, +gYk(a){var s=this.b +return new A.j5(s,A.o(s).h("j5<1>"))}, +o8(){var s,r,q,p=A.bc("windowInnerWidth"),o=A.bc("windowInnerHeight"),n=self.window.visualViewport +$.cZ() +s=$.c4().d +if(s==null){r=self.window.devicePixelRatio +s=r===0?1:r}if(n!=null){r=$.e6() +if(r===B.aS){r=self.document.documentElement.clientWidth +q=self.document.documentElement.clientHeight +p.b=r*s +o.b=q*s}else{r=n.width +if(r==null)r=null +r.toString +p.b=r*s +r=A.aKF(n) +r.toString +o.b=r*s}}else{r=self.window.innerWidth +if(r==null)r=null +r.toString +p.b=r*s +r=A.aKI(self.window) +r.toString +o.b=r*s}return new A.G(p.aI(),o.aI())}, +V5(a,b){var s,r,q,p +$.cZ() +s=$.c4().d +if(s==null){r=self.window.devicePixelRatio +s=r===0?1:r}q=self.window.visualViewport +p=A.bc("windowInnerHeight") +if(q!=null){r=$.e6() +if(r===B.aS&&!b)p.b=self.document.documentElement.clientHeight*s +else{r=A.aKF(q) +r.toString +p.b=r*s}}else{r=A.aKI(self.window) +r.toString +p.b=r*s}return new A.Vh(0,0,0,a-p.aI())}} +A.aa6.prototype={ +Xp(a,b){var s +b.gd5(b).aa(0,new A.aa7(this)) +s=A.aA("custom-element") +if(s==null)s=t.K.a(s) +this.b.setAttribute("flt-embedding",s)}, +Ux(a){A.x(a.style,"width","100%") +A.x(a.style,"height","100%") +A.x(a.style,"display","block") +A.x(a.style,"overflow","hidden") +A.x(a.style,"position","relative") +this.b.appendChild(a) +this.ww(a)}, +Uy(a,b){this.b.insertBefore(a,b) +this.ww(a)}} +A.aa7.prototype={ +$1(a){var s=A.aA(a.b) +if(s==null)s=t.K.a(s) +this.a.b.setAttribute(a.a,s)}, +$S:231} +A.ac1.prototype={ +ww(a){}} +A.adz.prototype={ +Xp(a,b){var s,r,q="0",p="none" +b.gd5(b).aa(0,new A.adA(this)) +s=self.document.body +s.toString +r=A.aA("full-page") +if(r==null)r=t.K.a(r) +s.setAttribute("flt-embedding",r) +this.a78() +r=self.document.body +r.toString +A.dY(r,"position","fixed") +A.dY(r,"top",q) +A.dY(r,"right",q) +A.dY(r,"bottom",q) +A.dY(r,"left",q) +A.dY(r,"overflow","hidden") +A.dY(r,"padding",q) +A.dY(r,"margin",q) +A.dY(r,"user-select",p) +A.dY(r,"-webkit-user-select",p) +A.dY(r,"touch-action",p)}, +Ux(a){var s=a.style +A.x(s,"position","absolute") +A.x(s,"top","0") +A.x(s,"right","0") +A.x(s,"bottom","0") +A.x(s,"left","0") +self.document.body.append(a) +this.ww(a)}, +Uy(a,b){self.document.body.insertBefore(a,b) +this.ww(a)}, +a78(){var s,r,q +for(s=t.qr,s=A.cC(new A.eZ(self.document.head.querySelectorAll('meta[name="viewport"]'),s),s.h("n.E"),t.e),r=J.ap(s.a),s=A.o(s),s=s.h("@<1>").N(s.z[1]).z[1];r.q();)s.a(r.gJ(r)).remove() +q=A.be(self.document,"meta") +s=A.aA("") +if(s==null)s=t.K.a(s) +q.setAttribute("flt-viewport",s) +q.name="viewport" +q.content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" +self.document.head.append(q) +this.ww(q)}} +A.adA.prototype={ +$1(a){var s,r=self.document.body +r.toString +s=A.aA(a.b) +if(s==null)s=t.K.a(s) +r.setAttribute(a.a,s)}, +$S:231} +A.Og.prototype={ +a6a(a,b){var s=this,r=s.b,q=s.a +r.e.n(0,q,s) +r.f.n(0,q,B.nd) +$.qo.push(new A.aca(s))}, +gVd(){var s,r=this.d +if(r===$){s=$.en.f +s===$&&A.b() +r!==$&&A.ay() +r=this.d=new A.a9O(s)}return r}, +gzT(){var s=this.e +if(s==null){s=$.aER() +s=this.e=A.aIi(s)}return s}, +uv(){var s=0,r=A.a1(t.H),q,p=this,o,n +var $async$uv=A.a2(function(a,b){if(a===1)return A.Z(b,r) +while(true)switch(s){case 0:n=p.e +if(n==null){n=$.aER() +n=p.e=A.aIi(n)}if(n instanceof A.Fy){s=1 +break}o=n.gnq() +n=p.e +n=n==null?null:n.kZ() +s=3 +return A.a7(t.uz.b(n)?n:A.hD(n,t.H),$async$uv) +case 3:p.e=A.aN5(o) +case 1:return A.a_(q,r)}}) +return A.a0($async$uv,r)}, +zt(){var s=0,r=A.a1(t.H),q,p=this,o,n +var $async$zt=A.a2(function(a,b){if(a===1)return A.Z(b,r) +while(true)switch(s){case 0:n=p.e +if(n==null){n=$.aER() +n=p.e=A.aIi(n)}if(n instanceof A.Dj){s=1 +break}o=n.gnq() +n=p.e +n=n==null?null:n.kZ() +s=3 +return A.a7(t.uz.b(n)?n:A.hD(n,t.H),$async$zt) +case 3:p.e=A.aM_(o) +case 1:return A.a_(q,r)}}) +return A.a0($async$zt,r)}, +uw(a){return this.akr(a)}, +akr(a){var s=0,r=A.a1(t.y),q,p=2,o,n=[],m=this,l,k,j +var $async$uw=A.a2(function(b,c){if(b===1){o=c +s=p}while(true)switch(s){case 0:k=m.f +j=new A.bI(new A.aD($.aw,t.d),t.gR) +m.f=j.a +s=3 +return A.a7(k,$async$uw) +case 3:l=!1 +p=4 +s=7 +return A.a7(a.$0(),$async$uw) +case 7:l=c +n.push(6) +s=5 +break +case 4:n=[2] +case 5:p=2 +J.aUE(j) +s=n.pop() +break +case 6:q=l +s=1 +break +case 1:return A.a_(q,r) +case 2:return A.Z(o,r)}}) +return A.a0($async$uw,r)}, +IS(a){return this.aqp(a)}, +aqp(a){var s=0,r=A.a1(t.y),q,p=this +var $async$IS=A.a2(function(b,c){if(b===1)return A.Z(c,r) +while(true)switch(s){case 0:q=p.uw(new A.acb(p,a)) +s=1 +break +case 1:return A.a_(q,r)}}) +return A.a0($async$IS,r)}, +gnU(){var s=this.b.f.i(0,this.a) +return s==null?B.nd:s}, +gjd(){if(this.x==null)this.o8() +var s=this.x +s.toString +return s}, +o8(){var s=this.r +s===$&&A.b() +this.x=s.o8()}, +V8(a){var s=this.r +s===$&&A.b() +this.w=s.V5(this.x.b,a)}, +arY(){var s,r,q,p +if(this.x!=null){s=this.r +s===$&&A.b() +r=s.o8() +s=this.x +q=s.b +p=r.b +if(q!==p&&s.a!==r.a){s=s.a +if(!(q>s&&pq&&r.a

").N(b).h("ft<1,2>"))}, +D(a,b){if(!!a.fixed$length)A.T(A.a3("add")) +a.push(b)}, +fz(a,b){if(!!a.fixed$length)A.T(A.a3("removeAt")) +if(b<0||b>=a.length)throw A.c(A.RY(b,null)) +return a.splice(b,1)[0]}, +eu(a,b,c){if(!!a.fixed$length)A.T(A.a3("insert")) +if(b<0||b>a.length)throw A.c(A.RY(b,null)) +a.splice(b,0,c)}, +vS(a,b,c){var s,r +if(!!a.fixed$length)A.T(A.a3("insertAll")) +A.akk(b,0,a.length,"index") +if(!t.Ee.b(c))c=J.Ly(c) +s=J.bF(c) +a.length=a.length+s +r=b+s +this.bC(a,r,a.length,a,b) +this.dW(a,b,r,c)}, +eF(a){if(!!a.fixed$length)A.T(A.a3("removeLast")) +if(a.length===0)throw A.c(A.zP(a,-1)) +return a.pop()}, +C(a,b){var s +if(!!a.fixed$length)A.T(A.a3("remove")) +for(s=0;s"))}, +E(a,b){var s +if(!!a.fixed$length)A.T(A.a3("addAll")) +if(Array.isArray(b)){this.a6H(a,b) +return}for(s=J.ap(b);s.q();)a.push(s.gJ(s))}, +a6H(a,b){var s,r=b.length +if(r===0)return +if(a===b)throw A.c(A.ci(a)) +for(s=0;s").N(c).h("R<1,2>"))}, +c_(a,b){var s,r=A.bf(a.length,"",!1,t.N) +for(s=0;sa.length)throw A.c(A.c9(b,0,a.length,"start",null)) +if(c==null)c=a.length +else if(ca.length)throw A.c(A.c9(c,b,a.length,"end",null)) +if(b===c)return A.a([],A.S(a)) +return A.a(a.slice(b,c),A.S(a))}, +eY(a,b){return this.cf(a,b,null)}, +x9(a,b,c){A.cU(b,c,a.length,null,null) +return A.eD(a,b,c,A.S(a).c)}, +gL(a){if(a.length>0)return a[0] +throw A.c(A.cm())}, +gO(a){var s=a.length +if(s>0)return a[s-1] +throw A.c(A.cm())}, +gct(a){var s=a.length +if(s===1)return a[0] +if(s===0)throw A.c(A.cm()) +throw A.c(A.ag0())}, +p7(a,b,c){if(!!a.fixed$length)A.T(A.a3("removeRange")) +A.cU(b,c,a.length,null,null) +a.splice(b,c-b)}, +bC(a,b,c,d,e){var s,r,q,p,o +if(!!a.immutable$list)A.T(A.a3("setRange")) +A.cU(b,c,a.length,null,null) +s=c-b +if(s===0)return +A.eA(e,"skipCount") +if(t.j.b(d)){r=d +q=e}else{r=J.aF3(d,e).eU(0,!1) +q=0}p=J.aF(r) +if(q+s>p.gu(r))throw A.c(A.aLr()) +if(q=0;--o)a[b+o]=p.i(r,q+o) +else for(o=0;o0){a[0]=q +a[1]=r}return}if(A.S(a).c.b(null)){for(p=0,o=0;o0)this.ah7(a,p)}, +jr(a){return this.dK(a,null)}, +ah7(a,b){var s,r=a.length +for(;s=r-1,r>0;r=s)if(a[s]===null){a[s]=void 0;--b +if(b===0)break}}, +cS(a,b){var s,r=a.length +if(0>=r)return-1 +for(s=0;s=r +for(s=q;s>=0;--s)if(J.d(a[s],b))return s +return-1}, +p(a,b){var s +for(s=0;s"))}, +gt(a){return A.fE(a)}, +gu(a){return a.length}, +su(a,b){if(!!a.fixed$length)A.T(A.a3("set length")) +if(b<0)throw A.c(A.c9(b,0,null,"newLength",null)) +if(b>a.length)A.S(a).c.a(null) +a.length=b}, +i(a,b){if(!(b>=0&&b=0&&b"))}, +R(a,b){var s=A.V(a,!0,A.S(a).c) +this.E(s,b) +return s}, +Xn(a,b,c){var s +if(c>=a.length)return-1 +for(s=c;s=0;--s)if(b.$1(a[s]))return s +return-1}, +gdT(a){return A.cf(A.S(a))}, +$ia8:1, +$in:1, +$iv:1} +J.ag6.prototype={} +J.cp.prototype={ +gJ(a){var s=this.d +return s==null?this.$ti.c.a(s):s}, +q(){var s,r=this,q=r.a,p=q.length +if(r.b!==p)throw A.c(A.K(q)) +s=r.c +if(s>=p){r.d=null +return!1}r.d=q[s] +r.c=s+1 +return!0}} +J.oV.prototype={ +b4(a,b){var s +if(ab)return 1 +else if(a===b){if(a===0){s=this.goI(b) +if(this.goI(a)===s)return 0 +if(this.goI(a))return-1 +return 1}return 0}else if(isNaN(a)){if(isNaN(b))return 0 +return 1}else return-1}, +goI(a){return a===0?1/a<0:a<0}, +q6(a){return Math.abs(a)}, +gDo(a){var s +if(a>0)s=1 +else s=a<0?-1:a +return s}, +V(a){var s +if(a>=-2147483648&&a<=2147483647)return a|0 +if(isFinite(a)){s=a<0?Math.ceil(a):Math.floor(a) +return s+0}throw A.c(A.a3(""+a+".toInt()"))}, +dk(a){var s,r +if(a>=0){if(a<=2147483647){s=a|0 +return a===s?s:s+1}}else if(a>=-2147483648)return a|0 +r=Math.ceil(a) +if(isFinite(r))return r +throw A.c(A.a3(""+a+".ceil()"))}, +dP(a){var s,r +if(a>=0){if(a<=2147483647)return a|0}else if(a>=-2147483648){s=a|0 +return a===s?s:s-1}r=Math.floor(a) +if(isFinite(r))return r +throw A.c(A.a3(""+a+".floor()"))}, +an(a){if(a>0){if(a!==1/0)return Math.round(a)}else if(a>-1/0)return 0-Math.round(0-a) +throw A.c(A.a3(""+a+".round()"))}, +Zx(a){if(a<0)return-Math.round(-a) +else return Math.round(a)}, +i9(a,b,c){if(B.f.b4(b,c)>0)throw A.c(A.zN(b)) +if(this.b4(a,b)<0)return b +if(this.b4(a,c)>0)return c +return a}, +af(a,b){var s +if(b>20)throw A.c(A.c9(b,0,20,"fractionDigits",null)) +s=a.toFixed(b) +if(a===0&&this.goI(a))return"-"+s +return s}, +ZN(a,b){var s +if(b<1||b>21)throw A.c(A.c9(b,1,21,"precision",null)) +s=a.toPrecision(b) +if(a===0&&this.goI(a))return"-"+s +return s}, +iv(a,b){var s,r,q,p +if(b<2||b>36)throw A.c(A.c9(b,2,36,"radix",null)) +s=a.toString(b) +if(s.charCodeAt(s.length-1)!==41)return s +r=/^([\da-z]+)(?:\.([\da-z]+))?\(e\+(\d+)\)$/.exec(s) +if(r==null)A.T(A.a3("Unexpected toString result: "+s)) +s=r[1] +q=+r[3] +p=r[2] +if(p!=null){s+=p +q-=p.length}return s+B.d.S("0",q)}, +k(a){if(a===0&&1/a<0)return"-0.0" +else return""+a}, +gt(a){var s,r,q,p,o=a|0 +if(a===o)return o&536870911 +s=Math.abs(a) +r=Math.log(s)/0.6931471805599453|0 +q=Math.pow(2,r) +p=s<1?s/q:q/s +return((p*9007199254740992|0)+(p*3542243181176521|0))*599197+r*1259&536870911}, +R(a,b){return a+b}, +Y(a,b){return a-b}, +eH(a,b){return a/b}, +S(a,b){return a*b}, +bF(a,b){var s=a%b +if(s===0)return 0 +if(s>0)return s +if(b<0)return s-b +else return s+b}, +hS(a,b){if((a|0)===a)if(b>=1||b<-1)return a/b|0 +return this.SH(a,b)}, +d4(a,b){return(a|0)===a?a/b|0:this.SH(a,b)}, +SH(a,b){var s=a/b +if(s>=-2147483648&&s<=2147483647)return s|0 +if(s>0){if(s!==1/0)return Math.floor(s)}else if(s>-1/0)return Math.ceil(s) +throw A.c(A.a3("Result of truncating division is "+A.h(s)+": "+A.h(a)+" ~/ "+A.h(b)))}, +a1b(a,b){if(b<0)throw A.c(A.zN(b)) +return b>31?0:a<>>0}, +aip(a,b){return b>31?0:a<>>0}, +el(a,b){var s +if(a>0)s=this.Si(a,b) +else{s=b>31?31:b +s=a>>s>>>0}return s}, +aiw(a,b){if(0>b)throw A.c(A.zN(b)) +return this.Si(a,b)}, +Si(a,b){return b>31?0:a>>>b}, +q1(a,b){if(b>31)return 0 +return a>>>b}, +Lk(a,b){return a<=b}, +gdT(a){return A.cf(t.Jy)}, +$ic8:1, +$iz:1, +$icg:1} +J.wB.prototype={ +q6(a){return Math.abs(a)}, +gDo(a){var s +if(a>0)s=1 +else s=a<0?-1:a +return s}, +gdT(a){return A.cf(t.S)}, +$icQ:1, +$il:1} +J.CM.prototype={ +gdT(a){return A.cf(t.i)}, +$icQ:1} +J.lr.prototype={ +iT(a,b){if(b<0)throw A.c(A.zP(a,b)) +if(b>=a.length)A.T(A.zP(a,b)) +return a.charCodeAt(b)}, +zK(a,b,c){var s=b.length +if(c>s)throw A.c(A.c9(c,0,s,null,null)) +return new A.a2B(b,a,c)}, +lm(a,b){return this.zK(a,b,0)}, +nf(a,b,c){var s,r,q=null +if(c<0||c>b.length)throw A.c(A.c9(c,0,b.length,q,q)) +s=a.length +if(c+s>b.length)return q +for(r=0;rr)return!1 +return b===this.bL(a,r-s)}, +Zj(a,b,c,d){A.akk(d,0,a.length,"startIndex") +return A.b80(a,b,c,d)}, +nn(a,b,c){return this.Zj(a,b,c,0)}, +l9(a,b){if(typeof b=="string")return A.a(a.split(b),t.s) +else if(b instanceof A.oW&&b.gQy().exec("").length-2===0)return A.a(a.split(b.b),t.s) +else return this.a99(a,b)}, +kX(a,b,c,d){var s=A.cU(b,c,a.length,null,null) +return A.aRF(a,b,s,d)}, +a99(a,b){var s,r,q,p,o,n,m=A.a([],t.s) +for(s=J.aEY(b,a),s=s.gab(s),r=0,q=1;s.q();){p=s.gJ(s) +o=p.gbW(p) +n=p.gbi(p) +q=n-o +if(q===0&&r===o)continue +m.push(this.P(a,r,o)) +r=n}if(r0)m.push(this.bL(a,r)) +return m}, +df(a,b,c){var s +if(c<0||c>a.length)throw A.c(A.c9(c,0,a.length,null,null)) +if(typeof b=="string"){s=c+b.length +if(s>a.length)return!1 +return b===a.substring(c,s)}return J.aJq(b,a,c)!=null}, +bz(a,b){return this.df(a,b,0)}, +P(a,b,c){return a.substring(b,A.cU(b,c,a.length,null,null))}, +bL(a,b){return this.P(a,b,null)}, +avs(a){return a.toLowerCase()}, +avw(a){return a.toUpperCase()}, +fb(a){var s,r,q,p=a.trim(),o=p.length +if(o===0)return p +if(p.charCodeAt(0)===133){s=J.aLx(p,1) +if(s===o)return""}else s=0 +r=o-1 +q=p.charCodeAt(r)===133?J.aLy(p,r):o +if(s===0&&q===o)return p +return p.substring(s,q)}, +Cv(a){var s=a.trimStart() +if(s.length===0)return s +if(s.charCodeAt(0)!==133)return s +return s.substring(J.aLx(s,1))}, +KF(a){var s,r=a.trimEnd(),q=r.length +if(q===0)return r +s=q-1 +if(r.charCodeAt(s)!==133)return r +return r.substring(0,J.aLy(r,s))}, +S(a,b){var s,r +if(0>=b)return"" +if(b===1||a.length===0)return a +if(b!==b>>>0)throw A.c(B.DU) +for(s=a,r="";!0;){if((b&1)===1)r=s+r +b=b>>>1 +if(b===0)break +s+=s}return r}, +lO(a,b,c){var s=b-a.length +if(s<=0)return a +return this.S(c,s)+a}, +au4(a,b){return this.lO(a,b," ")}, +au5(a,b){var s=b-a.length +if(s<=0)return a +return a+this.S(" ",s)}, +fu(a,b,c){var s,r,q,p +if(c<0||c>a.length)throw A.c(A.c9(c,0,a.length,null,null)) +if(typeof b=="string")return a.indexOf(b,c) +if(b instanceof A.oW){s=b.OC(a,c) +return s==null?-1:s.b.index}for(r=a.length,q=J.zR(b),p=c;p<=r;++p)if(q.nf(b,a,p)!=null)return p +return-1}, +cS(a,b){return this.fu(a,b,0)}, +Bj(a,b,c){var s,r +if(c==null)c=a.length +else if(c<0||c>a.length)throw A.c(A.c9(c,0,a.length,null,null)) +s=b.length +r=a.length +if(c+s>r)c=r-s +return a.lastIndexOf(b,c)}, +rq(a,b){return this.Bj(a,b,null)}, +A5(a,b,c){var s=a.length +if(c>s)throw A.c(A.c9(c,0,s,null,null)) +return A.aEy(a,b,c)}, +p(a,b){return this.A5(a,b,0)}, +b4(a,b){var s +if(a===b)s=0 +else s=a>6}r=r+((r&67108863)<<3)&536870911 +r^=r>>11 +return r+((r&16383)<<15)&536870911}, +gdT(a){return A.cf(t.N)}, +gu(a){return a.length}, +i(a,b){if(!(b>=0&&b").N(s.z[1]).h("MC<1,2>"))}, +gu(a){return J.bF(this.gi0())}, +ga7(a){return J.it(this.gi0())}, +gc8(a){return J.l2(this.gi0())}, +iA(a,b){var s=A.o(this) +return A.cC(J.aF3(this.gi0(),b),s.c,s.z[1])}, +bl(a,b){return A.o(this).z[1].a(J.Lw(this.gi0(),b))}, +gL(a){return A.o(this).z[1].a(J.oe(this.gi0()))}, +gO(a){return A.o(this).z[1].a(J.vd(this.gi0()))}, +p(a,b){return J.vb(this.gi0(),b)}, +k(a){return J.f0(this.gi0())}} +A.MC.prototype={ +q(){return this.a.q()}, +gJ(a){var s=this.a +return this.$ti.z[1].a(s.gJ(s))}} +A.qY.prototype={ +iO(a,b){return A.cC(this.a,A.o(this).c,b)}, +gi0(){return this.a}} +A.HO.prototype={$ia8:1} +A.H9.prototype={ +i(a,b){return this.$ti.z[1].a(J.bq(this.a,b))}, +n(a,b,c){J.hH(this.a,b,this.$ti.c.a(c))}, +su(a,b){J.aUY(this.a,b)}, +D(a,b){J.eo(this.a,this.$ti.c.a(b))}, +dK(a,b){var s=b==null?null:new A.au5(this,b) +J.a66(this.a,s)}, +eu(a,b,c){J.aJn(this.a,b,this.$ti.c.a(c))}, +C(a,b){return J.of(this.a,b)}, +eF(a){return this.$ti.z[1].a(J.aJr(this.a))}, +x9(a,b,c){var s=this.$ti +return A.cC(J.aUO(this.a,b,c),s.c,s.z[1])}, +bC(a,b,c,d,e){var s=this.$ti +J.aUZ(this.a,b,c,A.cC(d,s.z[1],s.c),e)}, +dW(a,b,c,d){return this.bC(a,b,c,d,0)}, +$ia8:1, +$iv:1} +A.au5.prototype={ +$2(a,b){var s=this.a.$ti.z[1] +return this.b.$2(s.a(a),s.a(b))}, +$S(){return this.a.$ti.h("l(1,1)")}} +A.ft.prototype={ +iO(a,b){return new A.ft(this.a,this.$ti.h("@<1>").N(b).h("ft<1,2>"))}, +gi0(){return this.a}} +A.mB.prototype={ +iO(a,b){return new A.mB(this.a,this.b,this.$ti.h("@<1>").N(b).h("mB<1,2>"))}, +D(a,b){return this.a.D(0,this.$ti.c.a(b))}, +E(a,b){var s=this.$ti +this.a.E(0,A.cC(b,s.z[1],s.c))}, +C(a,b){return this.a.C(0,b)}, +rk(a,b){var s,r=this +if(r.b!=null)return r.a8y(b,!0) +s=r.$ti +return new A.mB(r.a.rk(0,b),null,s.h("@<1>").N(s.z[1]).h("mB<1,2>"))}, +a8y(a,b){var s,r=this.b,q=this.$ti,p=q.z[1],o=r==null?A.p7(p):r.$1$0(p) +for(p=this.a,p=p.gab(p),q=q.z[1];p.q();){s=q.a(p.gJ(p)) +if(b===a.p(0,s))o.D(0,s)}return o}, +NG(){var s=this.b,r=this.$ti.z[1],q=s==null?A.p7(r):s.$1$0(r) +q.E(0,this) +return q}, +iw(a){return this.NG()}, +$ia8:1, +$ibV:1, +gi0(){return this.a}} +A.mz.prototype={ +o1(a,b,c){var s=this.$ti +return new A.mz(this.a,s.h("@<1>").N(s.z[1]).N(b).N(c).h("mz<1,2,3,4>"))}, +ai(a,b){return J.vc(this.a,b)}, +i(a,b){return this.$ti.h("4?").a(J.bq(this.a,b))}, +n(a,b,c){var s=this.$ti +J.hH(this.a,s.c.a(b),s.z[1].a(c))}, +bm(a,b,c){var s=this.$ti +return s.z[3].a(J.A2(this.a,s.c.a(b),new A.a8y(this,c)))}, +E(a,b){var s=this.$ti +J.aEX(this.a,new A.mz(b,s.h("@<3>").N(s.z[3]).N(s.c).N(s.z[1]).h("mz<1,2,3,4>")))}, +C(a,b){return this.$ti.h("4?").a(J.of(this.a,b))}, +aa(a,b){J.h7(this.a,new A.a8x(this,b))}, +gc2(a){var s=this.$ti +return A.cC(J.Lx(this.a),s.c,s.z[2])}, +gaT(a){var s=this.$ti +return A.cC(J.aF_(this.a),s.z[1],s.z[3])}, +gu(a){return J.bF(this.a)}, +ga7(a){return J.it(this.a)}, +gc8(a){return J.l2(this.a)}, +gd5(a){var s=J.a64(this.a) +return s.eQ(s,new A.a8w(this),this.$ti.h("aH<3,4>"))}} +A.a8y.prototype={ +$0(){return this.a.$ti.z[1].a(this.b.$0())}, +$S(){return this.a.$ti.h("2()")}} +A.a8x.prototype={ +$2(a,b){var s=this.a.$ti +this.b.$2(s.z[2].a(a),s.z[3].a(b))}, +$S(){return this.a.$ti.h("~(1,2)")}} +A.a8w.prototype={ +$1(a){var s=this.a.$ti,r=s.z[3] +return new A.aH(s.z[2].a(a.a),r.a(a.b),s.h("@<3>").N(r).h("aH<1,2>"))}, +$S(){return this.a.$ti.h("aH<3,4>(aH<1,2>)")}} +A.mA.prototype={ +iO(a,b){return new A.mA(this.a,this.$ti.h("@<1>").N(b).h("mA<1,2>"))}, +$ia8:1, +gi0(){return this.a}} +A.iK.prototype={ +k(a){return"LateInitializationError: "+this.a}} +A.fu.prototype={ +gu(a){return this.a.length}, +i(a,b){return this.a.charCodeAt(b)}} +A.aEk.prototype={ +$0(){return A.d5(null,t.P)}, +$S:112} +A.aoi.prototype={} +A.a8.prototype={} +A.af.prototype={ +gab(a){var s=this +return new A.bu(s,s.gu(s),A.o(s).h("bu"))}, +aa(a,b){var s,r=this,q=r.gu(r) +for(s=0;s").N(c).h("R<1,2>"))}, +is(a,b){var s,r,q=this,p=q.gu(q) +if(p===0)throw A.c(A.cm()) +s=q.bl(0,0) +for(r=1;rs)throw A.c(A.c9(r,0,s,"start",null))}}, +ga9M(){var s=J.bF(this.a),r=this.c +if(r==null||r>s)return s +return r}, +gaiW(){var s=J.bF(this.a),r=this.b +if(r>s)return s +return r}, +gu(a){var s,r=J.bF(this.a),q=this.b +if(q>=r)return 0 +s=this.c +if(s==null||s>=r)return r-q +return s-q}, +bl(a,b){var s=this,r=s.gaiW()+b +if(b<0||r>=s.ga9M())throw A.c(A.dB(b,s.gu(s),s,null,"index")) +return J.Lw(s.a,r)}, +iA(a,b){var s,r,q=this +A.eA(b,"count") +s=q.b+b +r=q.c +if(r!=null&&s>=r)return new A.hj(q.$ti.h("hj<1>")) +return A.eD(q.a,s,r,q.$ti.c)}, +wD(a,b){var s,r,q,p=this +A.eA(b,"count") +s=p.c +r=p.b +q=r+b +if(s==null)return A.eD(p.a,r,q,p.$ti.c) +else{if(s=o){r.d=null +return!1}r.d=p.bl(q,s);++r.c +return!0}} +A.hr.prototype={ +gab(a){var s=A.o(this) +return new A.bN(J.ap(this.a),this.b,s.h("@<1>").N(s.z[1]).h("bN<1,2>"))}, +gu(a){return J.bF(this.a)}, +ga7(a){return J.it(this.a)}, +gL(a){return this.b.$1(J.oe(this.a))}, +gO(a){return this.b.$1(J.vd(this.a))}, +bl(a,b){return this.b.$1(J.Lw(this.a,b))}} +A.rj.prototype={$ia8:1} +A.bN.prototype={ +q(){var s=this,r=s.b +if(r.q()){s.a=s.c.$1(r.gJ(r)) +return!0}s.a=null +return!1}, +gJ(a){var s=this.a +return s==null?this.$ti.z[1].a(s):s}} +A.R.prototype={ +gu(a){return J.bF(this.a)}, +bl(a,b){return this.b.$1(J.Lw(this.a,b))}} +A.ba.prototype={ +gab(a){return new A.ik(J.ap(this.a),this.b,this.$ti.h("ik<1>"))}, +eQ(a,b,c){return new A.hr(this,b,this.$ti.h("@<1>").N(c).h("hr<1,2>"))}} +A.ik.prototype={ +q(){var s,r +for(s=this.a,r=this.b;s.q();)if(r.$1(s.gJ(s)))return!0 +return!1}, +gJ(a){var s=this.a +return s.gJ(s)}} +A.kb.prototype={ +gab(a){var s=this.$ti +return new A.Oq(J.ap(this.a),this.b,B.n2,s.h("@<1>").N(s.z[1]).h("Oq<1,2>"))}} +A.Oq.prototype={ +gJ(a){var s=this.d +return s==null?this.$ti.z[1].a(s):s}, +q(){var s,r,q=this,p=q.c +if(p==null)return!1 +for(s=q.a,r=q.b;!p.q();){q.d=null +if(s.q()){q.c=null +p=J.ap(r.$1(s.gJ(s))) +q.c=p}else return!1}p=q.c +q.d=p.gJ(p) +return!0}} +A.uo.prototype={ +gab(a){return new A.Up(J.ap(this.a),this.b,A.o(this).h("Up<1>"))}} +A.BM.prototype={ +gu(a){var s=J.bF(this.a),r=this.b +if(s>r)return r +return s}, +$ia8:1} +A.Up.prototype={ +q(){if(--this.b>=0)return this.a.q() +this.b=-1 +return!1}, +gJ(a){var s +if(this.b<0){this.$ti.c.a(null) +return null}s=this.a +return s.gJ(s)}} +A.nv.prototype={ +iA(a,b){A.LL(b,"count") +A.eA(b,"count") +return new A.nv(this.a,this.b+b,A.o(this).h("nv<1>"))}, +gab(a){return new A.TI(J.ap(this.a),this.b,A.o(this).h("TI<1>"))}} +A.w3.prototype={ +gu(a){var s=J.bF(this.a)-this.b +if(s>=0)return s +return 0}, +iA(a,b){A.LL(b,"count") +A.eA(b,"count") +return new A.w3(this.a,this.b+b,this.$ti)}, +$ia8:1} +A.TI.prototype={ +q(){var s,r +for(s=this.a,r=0;r"))}} +A.TJ.prototype={ +q(){var s,r,q=this +if(!q.c){q.c=!0 +for(s=q.a,r=q.b;s.q();)if(!r.$1(s.gJ(s)))return!0}return q.a.q()}, +gJ(a){var s=this.a +return s.gJ(s)}} +A.hj.prototype={ +gab(a){return B.n2}, +aa(a,b){}, +ga7(a){return!0}, +gu(a){return 0}, +gL(a){throw A.c(A.cm())}, +gO(a){throw A.c(A.cm())}, +bl(a,b){throw A.c(A.c9(b,0,0,"index",null))}, +p(a,b){return!1}, +hJ(a,b){return this}, +eQ(a,b,c){return new A.hj(c.h("hj<0>"))}, +iA(a,b){A.eA(b,"count") +return this}, +eU(a,b){var s=this.$ti.c +return b?J.wA(0,s):J.CI(0,s)}, +dI(a){return this.eU(a,!0)}, +iw(a){return A.p7(this.$ti.c)}} +A.Oa.prototype={ +q(){return!1}, +gJ(a){throw A.c(A.cm())}} +A.mQ.prototype={ +gab(a){return new A.OV(J.ap(this.a),this.b,A.o(this).h("OV<1>"))}, +gu(a){return J.bF(this.a)+J.bF(this.b)}, +ga7(a){return J.it(this.a)&&J.it(this.b)}, +gc8(a){return J.l2(this.a)||J.l2(this.b)}, +p(a,b){return J.vb(this.a,b)||J.vb(this.b,b)}, +gL(a){var s=J.ap(this.a) +if(s.q())return s.gJ(s) +return J.oe(this.b)}, +gO(a){var s,r=J.ap(this.b) +if(r.q()){s=r.gJ(r) +for(;r.q();)s=r.gJ(r) +return s}return J.vd(this.a)}} +A.BL.prototype={ +bl(a,b){var s=this.a,r=J.aF(s),q=r.gu(s) +if(b"))}} +A.m6.prototype={ +q(){var s,r +for(s=this.a,r=this.$ti.c;s.q();)if(r.b(s.gJ(s)))return!0 +return!1}, +gJ(a){var s=this.a +return this.$ti.c.a(s.gJ(s))}} +A.BX.prototype={ +su(a,b){throw A.c(A.a3("Cannot change the length of a fixed-length list"))}, +D(a,b){throw A.c(A.a3("Cannot add to a fixed-length list"))}, +eu(a,b,c){throw A.c(A.a3("Cannot add to a fixed-length list"))}, +C(a,b){throw A.c(A.a3("Cannot remove from a fixed-length list"))}, +eF(a){throw A.c(A.a3("Cannot remove from a fixed-length list"))}} +A.V3.prototype={ +n(a,b,c){throw A.c(A.a3("Cannot modify an unmodifiable list"))}, +su(a,b){throw A.c(A.a3("Cannot change the length of an unmodifiable list"))}, +D(a,b){throw A.c(A.a3("Cannot add to an unmodifiable list"))}, +eu(a,b,c){throw A.c(A.a3("Cannot add to an unmodifiable list"))}, +C(a,b){throw A.c(A.a3("Cannot remove from an unmodifiable list"))}, +dK(a,b){throw A.c(A.a3("Cannot modify an unmodifiable list"))}, +eF(a){throw A.c(A.a3("Cannot remove from an unmodifiable list"))}, +bC(a,b,c,d,e){throw A.c(A.a3("Cannot modify an unmodifiable list"))}, +dW(a,b,c,d){return this.bC(a,b,c,d,0)}} +A.yy.prototype={} +A.ZC.prototype={ +gu(a){return J.bF(this.a)}, +bl(a,b){A.aG9(b,J.bF(this.a),this,null,null) +return b}} +A.cw.prototype={ +i(a,b){return this.ai(0,b)?J.bq(this.a,A.el(b)):null}, +gu(a){return J.bF(this.a)}, +gaT(a){return A.eD(this.a,0,null,this.$ti.c)}, +gc2(a){return new A.ZC(this.a)}, +ga7(a){return J.it(this.a)}, +gc8(a){return J.l2(this.a)}, +ai(a,b){return A.zK(b)&&b>=0&&b>"))}, +apg(a){var s=this +return function(){var r=a +var q=0,p=1,o,n,m,l +return function $async$gd5(b,c,d){if(c===1){o=d +q=p}while(true)switch(q){case 0:n=s.gc2(s),n=n.gab(n),m=A.o(s),m=m.h("@<1>").N(m.z[1]).h("aH<1,2>") +case 2:if(!n.q()){q=3 +break}l=n.gJ(n) +q=4 +return b.b=new A.aH(l,s.i(0,l),m),1 +case 4:q=2 +break +case 3:return 0 +case 1:return b.c=o,3}}}}, +oS(a,b,c,d){var s=A.A(c,d) +this.aa(0,new A.a9L(this,b,s)) +return s}, +$iaJ:1} +A.a9L.prototype={ +$2(a,b){var s=this.b.$2(a,b) +this.c.n(0,s.a,s.b)}, +$S(){return A.o(this.a).h("~(1,2)")}} +A.bs.prototype={ +gu(a){return this.b.length}, +gQb(){var s=this.$keys +if(s==null){s=Object.keys(this.a) +this.$keys=s}return s}, +ai(a,b){if(typeof b!="string")return!1 +if("__proto__"===b)return!1 +return this.a.hasOwnProperty(b)}, +i(a,b){if(!this.ai(0,b))return null +return this.b[this.a[b]]}, +aa(a,b){var s,r,q=this.gQb(),p=this.b +for(s=q.length,r=0;r"))}, +gaT(a){return new A.uP(this.b,this.$ti.h("uP<2>"))}} +A.uP.prototype={ +gu(a){return this.a.length}, +ga7(a){return 0===this.a.length}, +gc8(a){return 0!==this.a.length}, +gab(a){var s=this.a +return new A.q6(s,s.length,this.$ti.h("q6<1>"))}} +A.q6.prototype={ +gJ(a){var s=this.d +return s==null?this.$ti.c.a(s):s}, +q(){var s=this,r=s.c +if(r>=s.b){s.d=null +return!1}s.d=s.a[r] +s.c=r+1 +return!0}} +A.bz.prototype={ +mp(){var s,r=this,q=r.$map +if(q==null){s=r.$ti +q=new A.rT(s.h("@<1>").N(s.z[1]).h("rT<1,2>")) +A.aQC(r.a,q) +r.$map=q}return q}, +ai(a,b){return this.mp().ai(0,b)}, +i(a,b){return this.mp().i(0,b)}, +aa(a,b){this.mp().aa(0,b)}, +gc2(a){var s=this.mp() +return new A.aX(s,A.o(s).h("aX<1>"))}, +gaT(a){var s=this.mp() +return s.gaT(s)}, +gu(a){return this.mp().a}} +A.Bc.prototype={ +D(a,b){A.aFt()}, +E(a,b){A.aFt()}, +C(a,b){A.aFt()}} +A.fO.prototype={ +gu(a){return this.b}, +ga7(a){return this.b===0}, +gc8(a){return this.b!==0}, +gab(a){var s,r=this,q=r.$keys +if(q==null){q=Object.keys(r.a) +r.$keys=q}s=q +return new A.q6(s,s.length,r.$ti.h("q6<1>"))}, +p(a,b){if(typeof b!="string")return!1 +if("__proto__"===b)return!1 +return this.a.hasOwnProperty(b)}, +iw(a){return A.hp(this,this.$ti.c)}} +A.fb.prototype={ +gu(a){return this.a.length}, +ga7(a){return this.a.length===0}, +gc8(a){return this.a.length!==0}, +gab(a){var s=this.a +return new A.q6(s,s.length,this.$ti.h("q6<1>"))}, +mp(){var s,r,q,p,o=this,n=o.$map +if(n==null){s=o.$ti +n=new A.rT(s.h("@<1>").N(s.c).h("rT<1,2>")) +for(s=o.a,r=s.length,q=0;q")}} +A.mY.prototype={ +$0(){return this.a.$1$0(this.$ti.z[0])}, +$1(a){return this.a.$1$1(a,this.$ti.z[0])}, +$2(a,b){return this.a.$1$2(a,b,this.$ti.z[0])}, +$S(){return A.b6E(A.a5F(this.a),this.$ti)}} +A.CK.prototype={ +gasS(){var s=this.a +if(s instanceof A.lW)return s +return this.a=new A.lW(s)}, +gauv(){var s,r,q,p,o,n=this +if(n.c===1)return B.t +s=n.d +r=J.aF(s) +q=r.gu(s)-J.bF(n.e)-n.f +if(q===0)return B.t +p=[] +for(o=0;o>>0}, +k(a){return"Closure '"+this.$_name+"' of "+("Instance of '"+A.aka(this.a)+"'")}} +A.Xn.prototype={ +k(a){return"Reading static variable '"+this.a+"' during its initialization"}} +A.SZ.prototype={ +k(a){return"RuntimeError: "+this.a}} +A.azF.prototype={} +A.fx.prototype={ +gu(a){return this.a}, +ga7(a){return this.a===0}, +gc8(a){return this.a!==0}, +gc2(a){return new A.aX(this,A.o(this).h("aX<1>"))}, +gaT(a){var s=A.o(this) +return A.n8(new A.aX(this,s.h("aX<1>")),new A.aga(this),s.c,s.z[1])}, +ai(a,b){var s,r +if(typeof b=="string"){s=this.b +if(s==null)return!1 +return s[b]!=null}else if(typeof b=="number"&&(b&0x3fffffff)===b){r=this.c +if(r==null)return!1 +return r[b]!=null}else return this.Xw(b)}, +Xw(a){var s=this.d +if(s==null)return!1 +return this.oH(s[this.oG(a)],a)>=0}, +amL(a,b){return new A.aX(this,A.o(this).h("aX<1>")).fJ(0,new A.ag9(this,b))}, +E(a,b){J.h7(b,new A.ag8(this))}, +i(a,b){var s,r,q,p,o=null +if(typeof b=="string"){s=this.b +if(s==null)return o +r=s[b] +q=r==null?o:r.b +return q}else if(typeof b=="number"&&(b&0x3fffffff)===b){p=this.c +if(p==null)return o +r=p[b] +q=r==null?o:r.b +return q}else return this.Xx(b)}, +Xx(a){var s,r,q=this.d +if(q==null)return null +s=q[this.oG(a)] +r=this.oH(s,a) +if(r<0)return null +return s[r].b}, +n(a,b,c){var s,r,q=this +if(typeof b=="string"){s=q.b +q.MM(s==null?q.b=q.FL():s,b,c)}else if(typeof b=="number"&&(b&0x3fffffff)===b){r=q.c +q.MM(r==null?q.c=q.FL():r,b,c)}else q.Xz(b,c)}, +Xz(a,b){var s,r,q,p=this,o=p.d +if(o==null)o=p.d=p.FL() +s=p.oG(a) +r=o[s] +if(r==null)o[s]=[p.FM(a,b)] +else{q=p.oH(r,a) +if(q>=0)r[q].b=b +else r.push(p.FM(a,b))}}, +bm(a,b,c){var s,r,q=this +if(q.ai(0,b)){s=q.i(0,b) +return s==null?A.o(q).z[1].a(s):s}r=c.$0() +q.n(0,b,r) +return r}, +C(a,b){var s=this +if(typeof b=="string")return s.Ro(s.b,b) +else if(typeof b=="number"&&(b&0x3fffffff)===b)return s.Ro(s.c,b) +else return s.Xy(b)}, +Xy(a){var s,r,q,p,o=this,n=o.d +if(n==null)return null +s=o.oG(a) +r=n[s] +q=o.oH(r,a) +if(q<0)return null +p=r.splice(q,1)[0] +o.T5(p) +if(r.length===0)delete n[s] +return p.b}, +a0(a){var s=this +if(s.a>0){s.b=s.c=s.d=s.e=s.f=null +s.a=0 +s.FJ()}}, +aa(a,b){var s=this,r=s.e,q=s.r +for(;r!=null;){b.$2(r.a,r.b) +if(q!==s.r)throw A.c(A.ci(s)) +r=r.c}}, +MM(a,b,c){var s=a[b] +if(s==null)a[b]=this.FM(b,c) +else s.b=c}, +Ro(a,b){var s +if(a==null)return null +s=a[b] +if(s==null)return null +this.T5(s) +delete a[b] +return s.b}, +FJ(){this.r=this.r+1&1073741823}, +FM(a,b){var s,r=this,q=new A.ah8(a,b) +if(r.e==null)r.e=r.f=q +else{s=r.f +s.toString +q.d=s +r.f=s.c=q}++r.a +r.FJ() +return q}, +T5(a){var s=this,r=a.d,q=a.c +if(r==null)s.e=q +else r.c=q +if(q==null)s.f=r +else q.d=r;--s.a +s.FJ()}, +oG(a){return J.D(a)&1073741823}, +oH(a,b){var s,r +if(a==null)return-1 +s=a.length +for(r=0;r"]=s +delete s[""] +return s}} +A.aga.prototype={ +$1(a){var s=this.a,r=s.i(0,a) +return r==null?A.o(s).z[1].a(r):r}, +$S(){return A.o(this.a).h("2(1)")}} +A.ag9.prototype={ +$1(a){return J.d(this.a.i(0,a),this.b)}, +$S(){return A.o(this.a).h("F(1)")}} +A.ag8.prototype={ +$2(a,b){this.a.n(0,a,b)}, +$S(){return A.o(this.a).h("~(1,2)")}} +A.ah8.prototype={} +A.aX.prototype={ +gu(a){return this.a.a}, +ga7(a){return this.a.a===0}, +gab(a){var s=this.a,r=new A.wJ(s,s.r,this.$ti.h("wJ<1>")) +r.c=s.e +return r}, +p(a,b){return this.a.ai(0,b)}, +aa(a,b){var s=this.a,r=s.e,q=s.r +for(;r!=null;){b.$1(r.a) +if(q!==s.r)throw A.c(A.ci(s)) +r=r.c}}} +A.wJ.prototype={ +gJ(a){return this.d}, +q(){var s,r=this,q=r.a +if(r.b!==q.r)throw A.c(A.ci(q)) +s=r.c +if(s==null){r.d=null +return!1}else{r.d=s.a +r.c=s.c +return!0}}} +A.CN.prototype={ +oG(a){return A.mo(a)&1073741823}, +oH(a,b){var s,r,q +if(a==null)return-1 +s=a.length +for(r=0;r0;){--q;--s +j[q]=r[s]}}return A.Q0(j,k)}} +A.a0C.prototype={ +yh(){return[this.a,this.b]}, +j(a,b){if(b==null)return!1 +return b instanceof A.a0C&&this.$s===b.$s&&J.d(this.a,b.a)&&J.d(this.b,b.b)}, +gt(a){return A.N(this.$s,this.a,this.b,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}} +A.a0D.prototype={ +yh(){return[this.a,this.b,this.c]}, +j(a,b){var s=this +if(b==null)return!1 +return b instanceof A.a0D&&s.$s===b.$s&&J.d(s.a,b.a)&&J.d(s.b,b.b)&&J.d(s.c,b.c)}, +gt(a){var s=this +return A.N(s.$s,s.a,s.b,s.c,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}} +A.a0E.prototype={ +yh(){return this.a}, +j(a,b){if(b==null)return!1 +return b instanceof A.a0E&&this.$s===b.$s&&A.b1S(this.a,b.a)}, +gt(a){return A.N(this.$s,A.bv(this.a),B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}} +A.oW.prototype={ +k(a){return"RegExp/"+this.a+"/"+this.b.flags}, +gQz(){var s=this,r=s.c +if(r!=null)return r +r=s.b +return s.c=A.aGa(s.a,r.multiline,!r.ignoreCase,r.unicode,r.dotAll,!0)}, +gQy(){var s=this,r=s.d +if(r!=null)return r +r=s.b +return s.d=A.aGa(s.a+"|()",r.multiline,!r.ignoreCase,r.unicode,r.dotAll,!0)}, +IK(a){var s=this.b.exec(a) +if(s==null)return null +return new A.zb(s)}, +a1Q(a){var s=this.IK(a) +if(s!=null)return s.b[0] +return null}, +zK(a,b,c){var s=b.length +if(c>s)throw A.c(A.c9(c,0,s,null,null)) +return new A.VG(this,b,c)}, +lm(a,b){return this.zK(a,b,0)}, +OC(a,b){var s,r=this.gQz() +r.lastIndex=b +s=r.exec(a) +if(s==null)return null +return new A.zb(s)}, +a9T(a,b){var s,r=this.gQy() +r.lastIndex=b +s=r.exec(a) +if(s==null)return null +if(s.pop()!=null)return null +return new A.zb(s)}, +nf(a,b,c){if(c<0||c>b.length)throw A.c(A.c9(c,0,b.length,null,null)) +return this.a9T(b,c)}, +asJ(a,b){return this.nf(a,b,0)}} +A.zb.prototype={ +gbW(a){return this.b.index}, +gbi(a){var s=this.b +return s.index+s[0].length}, +pj(a){return this.b[a]}, +i(a,b){return this.b[b]}, +at4(a){var s,r=this.b.groups +if(r!=null){s=r[a] +if(s!=null||a in r)return s}throw A.c(A.hL(a,"name","Not a capture group name"))}, +$ith:1, +$iS3:1} +A.VG.prototype={ +gab(a){return new A.pZ(this.a,this.b,this.c)}} +A.pZ.prototype={ +gJ(a){var s=this.d +return s==null?t.Qz.a(s):s}, +q(){var s,r,q,p,o,n=this,m=n.b +if(m==null)return!1 +s=n.c +r=m.length +if(s<=r){q=n.a +p=q.OC(m,s) +if(p!=null){n.d=p +o=p.gbi(p) +if(p.b.index===o){if(q.b.unicode){s=n.c +q=s+1 +if(q=55296&&s<=56319){s=m.charCodeAt(q) +s=s>=56320&&s<=57343}else s=!1}else s=!1}else s=!1 +o=(s?o+1:o)+1}n.c=o +return!0}}n.b=n.d=null +return!1}} +A.y3.prototype={ +gbi(a){return this.a+this.c.length}, +i(a,b){if(b!==0)A.T(A.RY(b,null)) +return this.c}, +pj(a){if(a!==0)throw A.c(A.RY(a,null)) +return this.c}, +$ith:1, +gbW(a){return this.a}} +A.a2B.prototype={ +gab(a){return new A.a2C(this.a,this.b,this.c)}, +gL(a){var s=this.b,r=this.a.indexOf(s,this.c) +if(r>=0)return new A.y3(r,s) +throw A.c(A.cm())}} +A.a2C.prototype={ +q(){var s,r,q=this,p=q.c,o=q.b,n=o.length,m=q.a,l=m.length +if(p+n>l){q.d=null +return!1}s=m.indexOf(o,p) +if(s<0){q.c=l+1 +q.d=null +return!1}r=s+n +q.d=new A.y3(s,o) +q.c=r===q.c?r+1:r +return!0}, +gJ(a){var s=this.d +s.toString +return s}} +A.au6.prototype={ +aI(){var s=this.b +if(s===this)throw A.c(new A.iK("Local '"+this.a+"' has not been initialized.")) +return s}, +bn(){var s=this.b +if(s===this)throw A.c(A.mZ(this.a)) +return s}, +scJ(a){var s=this +if(s.b!==s)throw A.c(new A.iK("Local '"+s.a+"' has already been initialized.")) +s.b=a}} +A.awf.prototype={ +T(){var s,r=this,q=r.b +if(q===r){s=r.c.$0() +if(r.b!==r)throw A.c(new A.iK("Local '"+r.a+u.N)) +r.b=s +q=s}return q}} +A.Dl.prototype={ +gdT(a){return B.a40}, +Ur(a,b,c){throw A.c(A.a3("Int64List not supported by dart2js."))}, +$icQ:1, +$iMx:1} +A.Dq.prototype={ +gWq(a){return a.BYTES_PER_ELEMENT}, +ae8(a,b,c,d){var s=A.c9(b,0,c,d,null) +throw A.c(s)}, +Nu(a,b,c,d){if(b>>>0!==b||b>c)this.ae8(a,b,c,d)}} +A.Dm.prototype={ +gdT(a){return B.a41}, +gWq(a){return 1}, +L3(a,b,c){throw A.c(A.a3("Int64 accessor not supported by dart2js."))}, +LD(a,b,c,d){throw A.c(A.a3("Int64 accessor not supported by dart2js."))}, +a18(a,b,c,d){return a.setUint32(b,c,B.av===d)}, +a17(a,b,c){return this.a18(a,b,c,B.jg)}, +$icQ:1, +$ic1:1} +A.wZ.prototype={ +gu(a){return a.length}, +S8(a,b,c,d,e){var s,r,q=a.length +this.Nu(a,b,q,"start") +this.Nu(a,c,q,"end") +if(b>c)throw A.c(A.c9(b,0,c,null,null)) +s=c-b +if(e<0)throw A.c(A.bC(e,null)) +r=d.length +if(r-e0){s=Date.now()-r.c +if(s>(p+1)*o)p=B.f.hS(s,o)}q.c=p +r.d.$1(q)}, +$S:19} +A.GR.prototype={ +e7(a,b){var s,r=this +if(b==null)b=r.$ti.c.a(b) +if(!r.b)r.a.mk(b) +else{s=r.a +if(r.$ti.h("ae<1>").b(b))s.Nm(b) +else s.tK(b)}}, +mF(a,b){var s +if(b==null)b=A.LS(a) +s=this.a +if(this.b)s.iG(a,b) +else s.xV(a,b)}, +$iNb:1} +A.aCi.prototype={ +$1(a){return this.a.$2(0,a)}, +$S:24} +A.aCj.prototype={ +$2(a,b){this.a.$2(1,new A.BT(a,b))}, +$S:349} +A.aDh.prototype={ +$2(a,b){this.a(a,b)}, +$S:352} +A.e4.prototype={ +gJ(a){return this.b}, +ahl(a,b){var s,r,q +a=a +b=b +s=this.a +for(;!0;)try{r=s(this,a,b) +return r}catch(q){b=q +a=1}}, +q(){var s,r,q,p,o=this,n=null,m=0 +for(;!0;){s=o.d +if(s!=null)try{if(s.q()){o.b=J.aUI(s) +return!0}else o.d=null}catch(r){n=r +m=1 +o.d=null}q=o.ahl(m,n) +if(1===q)return!0 +if(0===q){o.b=null +p=o.e +if(p==null||p.length===0){o.a=A.aOF +return!1}o.a=p.pop() +m=0 +n=null +continue}if(2===q){m=0 +n=null +continue}if(3===q){n=o.c +o.c=null +p=o.e +if(p==null||p.length===0){o.b=null +o.a=A.aOF +throw n +return!1}o.a=p.pop() +m=1 +continue}throw A.c(A.Q("sync*"))}return!1}, +H1(a){var s,r,q=this +if(a instanceof A.fn){s=a.a() +r=q.e +if(r==null)r=q.e=[] +r.push(q.a) +q.a=s +return 2}else{q.d=J.ap(a) +return 2}}} +A.fn.prototype={ +gab(a){return new A.e4(this.a(),this.$ti.h("e4<1>"))}} +A.LR.prototype={ +k(a){return A.h(this.a)}, +$ibX:1, +gxx(){return this.b}} +A.j5.prototype={} +A.yJ.prototype={ +FS(){}, +FV(){}} +A.q0.prototype={ +gLQ(a){return new A.j5(this,A.o(this).h("j5<1>"))}, +gyC(){return this.c<4}, +Rp(a){var s=a.CW,r=a.ch +if(s==null)this.d=r +else s.ch=r +if(r==null)this.e=s +else r.CW=s +a.CW=a +a.ch=a}, +Sw(a,b,c,d){var s,r,q,p,o,n,m,l=this +if((l.c&4)!==0)return A.aOb(c,A.o(l).c) +s=A.o(l) +r=$.aw +q=d?1:0 +p=A.aHo(r,a,s.c) +A.aO8(r,b) +o=c==null?A.aQ7():c +n=new A.yJ(l,p,r.wv(o,t.H),r,q,s.h("yJ<1>")) +n.CW=n +n.ch=n +n.ay=l.c&1 +m=l.e +l.e=n +n.ch=null +n.CW=m +if(m==null)l.d=n +else m.ch=n +if(l.d===n)A.a5B(l.a) +return n}, +Rc(a){var s,r=this +A.o(r).h("yJ<1>").a(a) +if(a.ch===a)return null +s=a.ay +if((s&2)!==0)a.ay=s|4 +else{r.Rp(a) +if((r.c&2)===0&&r.d==null)r.Ea()}return null}, +Rd(a){}, +Re(a){}, +xO(){if((this.c&4)!==0)return new A.jE("Cannot add new events after calling close") +return new A.jE("Cannot add new events while doing an addStream")}, +D(a,b){if(!this.gyC())throw A.c(this.xO()) +this.nQ(b)}, +aA(a){var s,r,q=this +if((q.c&4)!==0){s=q.r +s.toString +return s}if(!q.gyC())throw A.c(q.xO()) +q.c|=4 +r=q.r +if(r==null)r=q.r=new A.aD($.aw,t.d) +q.nR() +return r}, +OO(a){var s,r,q,p=this,o=p.c +if((o&2)!==0)throw A.c(A.Q(u.c)) +s=p.d +if(s==null)return +r=o&1 +p.c=o^3 +for(;s!=null;){o=s.ay +if((o&1)===r){s.ay=o|2 +a.$1(s) +o=s.ay^=1 +q=s.ch +if((o&4)!==0)p.Rp(s) +s.ay&=4294967293 +s=q}else s=s.ch}p.c&=4294967293 +if(p.d==null)p.Ea()}, +Ea(){if((this.c&4)!==0){var s=this.r +if((s.a&30)===0)s.mk(null)}A.a5B(this.b)}} +A.JW.prototype={ +gyC(){return A.q0.prototype.gyC.call(this)&&(this.c&2)===0}, +xO(){if((this.c&2)!==0)return new A.jE(u.c) +return this.a4m()}, +nQ(a){var s=this,r=s.d +if(r==null)return +if(r===s.e){s.c|=2 +r.tF(0,a) +s.c&=4294967293 +if(s.d==null)s.Ea() +return}s.OO(new A.aB7(s,a))}, +nR(){var s=this +if(s.d!=null)s.OO(new A.aB8(s)) +else s.r.mk(null)}} +A.aB7.prototype={ +$1(a){a.tF(0,this.b)}, +$S(){return this.a.$ti.h("~(q1<1>)")}} +A.aB8.prototype={ +$1(a){a.a8g()}, +$S(){return this.a.$ti.h("~(q1<1>)")}} +A.GS.prototype={ +nQ(a){var s,r +for(s=this.d,r=this.$ti.h("ma<1>");s!=null;s=s.ch)s.pE(new A.ma(a,r))}, +nR(){var s=this.d +if(s!=null)for(;s!=null;s=s.ch)s.pE(B.fP) +else this.r.mk(null)}} +A.adF.prototype={ +$0(){var s,r,q +try{this.a.nJ(this.b.$0())}catch(q){s=A.ax(q) +r=A.aZ(q) +A.aCu(this.a,s,r)}}, +$S:0} +A.adE.prototype={ +$0(){var s,r,q +try{this.a.nJ(this.b.$0())}catch(q){s=A.ax(q) +r=A.aZ(q) +A.aCu(this.a,s,r)}}, +$S:0} +A.adD.prototype={ +$0(){var s,r,q,p=this,o=p.a +if(o==null){p.c.a(null) +p.b.nJ(null)}else try{p.b.nJ(o.$0())}catch(q){s=A.ax(q) +r=A.aZ(q) +A.aCu(p.b,s,r)}}, +$S:0} +A.adH.prototype={ +$2(a,b){var s=this,r=s.a,q=--r.b +if(r.a!=null){r.a=null +if(r.b===0||s.c)s.d.iG(a,b) +else{s.e.b=a +s.f.b=b}}else if(q===0&&!s.c)s.d.iG(s.e.aI(),s.f.aI())}, +$S:128} +A.adG.prototype={ +$1(a){var s,r=this,q=r.a;--q.b +s=q.a +if(s!=null){J.hH(s,r.b,a) +if(q.b===0)r.c.tK(A.n5(s,!0,r.w))}else if(q.b===0&&!r.e)r.c.iG(r.f.aI(),r.r.aI())}, +$S(){return this.w.h("b7(0)")}} +A.adC.prototype={ +$2(a,b){var s +if(this.a.b(a))s=!1 +else s=!0 +if(s)throw A.c(a) +return this.c.$2(a,b)}, +$S(){return this.d.h("0/(I,dw)")}} +A.adB.prototype={ +$1(a){return a}, +$S(){return this.a.h("0(0)")}} +A.yK.prototype={ +mF(a,b){var s +A.fK(a,"error",t.K) +if((this.a.a&30)!==0)throw A.c(A.Q("Future already completed")) +s=$.aw.Iv(a,b) +if(s!=null){a=s.a +b=s.b}else if(b==null)b=A.LS(a) +this.iG(a,b)}, +o7(a){return this.mF(a,null)}, +$iNb:1} +A.bI.prototype={ +e7(a,b){var s=this.a +if((s.a&30)!==0)throw A.c(A.Q("Future already completed")) +s.mk(b)}, +iV(a){return this.e7(a,null)}, +iG(a,b){this.a.xV(a,b)}} +A.jQ.prototype={ +asL(a){if((this.c&15)!==6)return!0 +return this.b.b.Ko(this.d,a.a,t.y,t.K)}, +aq4(a){var s,r=this.e,q=null,p=t.z,o=t.K,n=a.a,m=this.b.b +if(t.Hg.b(r))q=m.Zz(r,n,a.b,p,o,t.Km) +else q=m.Ko(r,n,p,o) +try{p=q +return p}catch(s){if(t.ns.b(A.ax(s))){if((this.c&1)!==0)throw A.c(A.bC("The error handler of Future.then must return a value of the returned future's type","onError")) +throw A.c(A.bC("The error handler of Future.catchError must return a value of the future's type","onError"))}else throw s}}} +A.aD.prototype={ +S2(a){this.a=this.a&1|4 +this.c=a}, +fV(a,b,c){var s,r,q=$.aw +if(q===B.ai){if(b!=null&&!t.Hg.b(b)&&!t.C_.b(b))throw A.c(A.hL(b,"onError",u.w))}else{a=q.Cb(a,c.h("0/"),this.$ti.c) +if(b!=null)b=A.aPN(b,q)}s=new A.aD($.aw,c.h("aD<0>")) +r=b==null?1:3 +this.pD(new A.jQ(s,r,a,b,this.$ti.h("@<1>").N(c).h("jQ<1,2>"))) +return s}, +ba(a,b){return this.fV(a,null,b)}, +SR(a,b,c){var s=new A.aD($.aw,c.h("aD<0>")) +this.pD(new A.jQ(s,19,a,b,this.$ti.h("@<1>").N(c).h("jQ<1,2>"))) +return s}, +qt(a,b){var s=this.$ti,r=$.aw,q=new A.aD(r,s) +if(r!==B.ai)a=A.aPN(a,r) +this.pD(new A.jQ(q,2,b,a,s.h("@<1>").N(s.c).h("jQ<1,2>"))) +return q}, +o2(a){return this.qt(a,null)}, +ix(a){var s=this.$ti,r=$.aw,q=new A.aD(r,s) +if(r!==B.ai)a=r.wv(a,t.z) +this.pD(new A.jQ(q,8,a,null,s.h("@<1>").N(s.c).h("jQ<1,2>"))) +return q}, +aif(a){this.a=this.a&1|16 +this.c=a}, +xX(a){this.a=a.a&30|this.a&1 +this.c=a.c}, +pD(a){var s=this,r=s.a +if(r<=3){a.a=s.c +s.c=a}else{if((r&4)!==0){r=s.c +if((r.a&24)===0){r.pD(a) +return}s.xX(r)}s.b.pk(new A.avG(s,a))}}, +G3(a){var s,r,q,p,o,n=this,m={} +m.a=a +if(a==null)return +s=n.a +if(s<=3){r=n.c +n.c=a +if(r!=null){q=a.a +for(p=a;q!=null;p=q,q=o)o=q.a +p.a=r}}else{if((s&4)!==0){s=n.c +if((s.a&24)===0){s.G3(a) +return}n.xX(s)}m.a=n.z_(a) +n.b.pk(new A.avN(m,n))}}, +yV(){var s=this.c +this.c=null +return this.z_(s)}, +z_(a){var s,r,q +for(s=a,r=null;s!=null;r=s,s=q){q=s.a +s.a=r}return r}, +Ed(a){var s,r,q,p=this +p.a^=2 +try{a.fV(new A.avK(p),new A.avL(p),t.P)}catch(q){s=A.ax(q) +r=A.aZ(q) +A.fq(new A.avM(p,s,r))}}, +nJ(a){var s,r=this,q=r.$ti +if(q.h("ae<1>").b(a))if(q.b(a))A.aHp(a,r) +else r.Ed(a) +else{s=r.yV() +r.a=8 +r.c=a +A.yY(r,s)}}, +tK(a){var s=this,r=s.yV() +s.a=8 +s.c=a +A.yY(s,r)}, +iG(a,b){var s=this.yV() +this.aif(A.a6G(a,b)) +A.yY(this,s)}, +mk(a){if(this.$ti.h("ae<1>").b(a)){this.Nm(a) +return}this.a79(a)}, +a79(a){this.a^=2 +this.b.pk(new A.avI(this,a))}, +Nm(a){if(this.$ti.b(a)){A.b1k(a,this) +return}this.Ed(a)}, +xV(a,b){this.a^=2 +this.b.pk(new A.avH(this,a,b))}, +$iae:1} +A.avG.prototype={ +$0(){A.yY(this.a,this.b)}, +$S:0} +A.avN.prototype={ +$0(){A.yY(this.b,this.a.a)}, +$S:0} +A.avK.prototype={ +$1(a){var s,r,q,p=this.a +p.a^=2 +try{p.tK(p.$ti.c.a(a))}catch(q){s=A.ax(q) +r=A.aZ(q) +p.iG(s,r)}}, +$S:37} +A.avL.prototype={ +$2(a,b){this.a.iG(a,b)}, +$S:44} +A.avM.prototype={ +$0(){this.a.iG(this.b,this.c)}, +$S:0} +A.avJ.prototype={ +$0(){A.aHp(this.a.a,this.b)}, +$S:0} +A.avI.prototype={ +$0(){this.a.tK(this.b)}, +$S:0} +A.avH.prototype={ +$0(){this.a.iG(this.b,this.c)}, +$S:0} +A.avQ.prototype={ +$0(){var s,r,q,p,o,n,m=this,l=null +try{q=m.a.a +l=q.b.b.Kn(q.d,t.z)}catch(p){s=A.ax(p) +r=A.aZ(p) +q=m.c&&m.b.a.c.a===s +o=m.a +if(q)o.c=m.b.a.c +else o.c=A.a6G(s,r) +o.b=!0 +return}if(l instanceof A.aD&&(l.a&24)!==0){if((l.a&16)!==0){q=m.a +q.c=l.c +q.b=!0}return}if(t.L0.b(l)){n=m.b.a +q=m.a +q.c=l.ba(new A.avR(n),t.z) +q.b=!1}}, +$S:0} +A.avR.prototype={ +$1(a){return this.a}, +$S:400} +A.avP.prototype={ +$0(){var s,r,q,p,o,n +try{q=this.a +p=q.a +o=p.$ti +q.c=p.b.b.Ko(p.d,this.b,o.h("2/"),o.c)}catch(n){s=A.ax(n) +r=A.aZ(n) +q=this.a +q.c=A.a6G(s,r) +q.b=!0}}, +$S:0} +A.avO.prototype={ +$0(){var s,r,q,p,o,n,m=this +try{s=m.a.a.c +p=m.b +if(p.a.asL(s)&&p.a.e!=null){p.c=p.a.aq4(s) +p.b=!1}}catch(o){r=A.ax(o) +q=A.aZ(o) +p=m.a.a.c +n=m.b +if(p.a===r)n.c=p +else n.c=A.a6G(r,q) +n.b=!0}}, +$S:0} +A.VY.prototype={} +A.eg.prototype={ +gu(a){var s={},r=new A.aD($.aw,t.wJ) +s.a=0 +this.nd(new A.apl(s,this),!0,new A.apm(s,r),r.gNO()) +return r}, +gL(a){var s=new A.aD($.aw,A.o(this).h("aD")),r=this.nd(null,!0,new A.apj(s),s.gNO()) +r.JL(new A.apk(this,r,s)) +return s}} +A.apl.prototype={ +$1(a){++this.a.a}, +$S(){return A.o(this.b).h("~(eg.T)")}} +A.apm.prototype={ +$0(){this.b.nJ(this.a.a)}, +$S:0} +A.apj.prototype={ +$0(){var s,r,q,p +try{q=A.cm() +throw A.c(q)}catch(p){s=A.ax(p) +r=A.aZ(p) +A.aCu(this.a,s,r)}}, +$S:0} +A.apk.prototype={ +$1(a){A.b2M(this.b,this.c,a)}, +$S(){return A.o(this.a).h("~(eg.T)")}} +A.FL.prototype={ +nd(a,b,c,d){return this.a.nd(a,!0,c,d)}} +A.JP.prototype={ +gLQ(a){return new A.m8(this,A.o(this).h("m8<1>"))}, +gagc(){if((this.b&8)===0)return this.a +return this.a.gKR()}, +OA(){var s,r=this +if((r.b&8)===0){s=r.a +return s==null?r.a=new A.zm(A.o(r).h("zm<1>")):s}s=r.a.gKR() +return s}, +gSx(){var s=this.a +return(this.b&8)!==0?s.gKR():s}, +Na(){if((this.b&4)!==0)return new A.jE("Cannot add event after closing") +return new A.jE("Cannot add event while adding a stream")}, +Ox(){var s=this.c +if(s==null)s=this.c=(this.b&2)!==0?$.Ls():new A.aD($.aw,t.d) +return s}, +D(a,b){if(this.b>=4)throw A.c(this.Na()) +this.tF(0,b)}, +aA(a){var s=this,r=s.b +if((r&4)!==0)return s.Ox() +if(r>=4)throw A.c(s.Na()) +s.NJ() +return s.Ox()}, +NJ(){var s=this.b|=4 +if((s&1)!==0)this.nR() +else if((s&3)===0)this.OA().D(0,B.fP)}, +tF(a,b){var s=this,r=s.b +if((r&1)!==0)s.nQ(b) +else if((r&3)===0)s.OA().D(0,new A.ma(b,A.o(s).h("ma<1>")))}, +Sw(a,b,c,d){var s,r,q,p,o=this +if((o.b&3)!==0)throw A.c(A.Q("Stream has already been listened to.")) +s=A.b13(o,a,b,c,d,A.o(o).c) +r=o.gagc() +q=o.b|=1 +if((q&8)!==0){p=o.a +p.sKR(s) +p.av5(0)}else o.a=s +s.aig(r) +q=s.e +s.e=q|32 +new A.aAU(o).$0() +s.e&=4294967263 +s.Nv((q&4)!==0) +return s}, +Rc(a){var s,r,q,p,o,n,m,l=this,k=null +if((l.b&8)!==0)k=l.a.b3(0) +l.a=null +l.b=l.b&4294967286|2 +s=l.r +if(s!=null)if(k==null)try{r=s.$0() +if(t.uz.b(r))k=r}catch(o){q=A.ax(o) +p=A.aZ(o) +n=new A.aD($.aw,t.d) +n.xV(q,p) +k=n}else k=k.ix(s) +m=new A.aAT(l) +if(k!=null)k=k.ix(m) +else m.$0() +return k}, +Rd(a){if((this.b&8)!==0)this.a.awD(0) +A.a5B(this.e)}, +Re(a){if((this.b&8)!==0)this.a.av5(0) +A.a5B(this.f)}} +A.aAU.prototype={ +$0(){A.a5B(this.a.d)}, +$S:0} +A.aAT.prototype={ +$0(){var s=this.a.c +if(s!=null&&(s.a&30)===0)s.mk(null)}, +$S:0} +A.VZ.prototype={ +nQ(a){this.gSx().pE(new A.ma(a,this.$ti.h("ma<1>")))}, +nR(){this.gSx().pE(B.fP)}} +A.q_.prototype={} +A.m8.prototype={ +gt(a){return(A.fE(this.a)^892482866)>>>0}, +j(a,b){if(b==null)return!1 +if(this===b)return!0 +return b instanceof A.m8&&b.a===this.a}} +A.uJ.prototype={ +QF(){return this.w.Rc(this)}, +FS(){this.w.Rd(this)}, +FV(){this.w.Re(this)}} +A.q1.prototype={ +aig(a){if(a==null)return +this.r=a +if(a.c!=null){this.e|=64 +a.D3(this)}}, +JL(a){this.a=A.aHo(this.d,a,A.o(this).c)}, +b3(a){var s=this.e&=4294967279 +if((s&8)===0)this.Nk() +s=this.f +return s==null?$.Ls():s}, +Nk(){var s,r=this,q=r.e|=8 +if((q&64)!==0){s=r.r +if(s.a===1)s.a=3}if((q&32)===0)r.r=null +r.f=r.QF()}, +tF(a,b){var s=this,r=s.e +if((r&8)!==0)return +if(r<32)s.nQ(b) +else s.pE(new A.ma(b,A.o(s).h("ma<1>")))}, +a8g(){var s=this,r=s.e +if((r&8)!==0)return +r|=2 +s.e=r +if(r<32)s.nR() +else s.pE(B.fP)}, +FS(){}, +FV(){}, +QF(){return null}, +pE(a){var s,r=this,q=r.r +if(q==null)q=r.r=new A.zm(A.o(r).h("zm<1>")) +q.D(0,a) +s=r.e +if((s&64)===0){s|=64 +r.e=s +if(s<128)q.D3(r)}}, +nQ(a){var s=this,r=s.e +s.e=r|32 +s.d.Cl(s.a,a,A.o(s).c) +s.e&=4294967263 +s.Nv((r&4)!==0)}, +nR(){var s,r=this,q=new A.atz(r) +r.Nk() +r.e|=16 +s=r.f +if(s!=null&&s!==$.Ls())s.ix(q) +else q.$0()}, +Nv(a){var s,r,q=this,p=q.e +if((p&64)!==0&&q.r.c==null){p=q.e=p&4294967231 +if((p&4)!==0)if(p<128){s=q.r +s=s==null?null:s.c==null +s=s!==!1}else s=!1 +else s=!1 +if(s){p&=4294967291 +q.e=p}}for(;!0;a=r){if((p&8)!==0){q.r=null +return}r=(p&4)!==0 +if(a===r)break +q.e=p^32 +if(r)q.FS() +else q.FV() +p=q.e&=4294967263}if((p&64)!==0&&p<128)q.r.D3(q)}} +A.atz.prototype={ +$0(){var s=this.a,r=s.e +if((r&16)===0)return +s.e=r|42 +s.d.wC(s.c) +s.e&=4294967263}, +$S:0} +A.zx.prototype={ +nd(a,b,c,d){return this.a.Sw(a,d,c,b===!0)}, +Jr(a){return this.nd(a,null,null,null)}} +A.Xz.prototype={ +gk6(a){return this.a}, +sk6(a,b){return this.a=b}} +A.ma.prototype={ +Yu(a){a.nQ(this.b)}} +A.av2.prototype={ +Yu(a){a.nR()}, +gk6(a){return null}, +sk6(a,b){throw A.c(A.Q("No events after a done."))}} +A.zm.prototype={ +D3(a){var s=this,r=s.a +if(r===1)return +if(r>=1){s.a=1 +return}A.fq(new A.ayC(s,a)) +s.a=1}, +D(a,b){var s=this,r=s.c +if(r==null)s.b=s.c=b +else{r.sk6(0,b) +s.c=b}}} +A.ayC.prototype={ +$0(){var s,r,q=this.a,p=q.a +q.a=0 +if(p===3)return +s=q.b +r=s.gk6(s) +q.b=r +if(r==null)q.c=null +s.Yu(this.b)}, +$S:0} +A.HB.prototype={ +JL(a){}, +b3(a){this.a=-1 +this.c=null +return $.Ls()}, +afw(){var s,r,q,p=this,o=p.a-1 +if(o===0){p.a=-1 +s=p.c +if(s!=null){r=s +q=!0}else{r=null +q=!1}if(q){p.c=null +p.b.wC(r)}}else p.a=o}} +A.a2z.prototype={} +A.HP.prototype={ +nd(a,b,c,d){return A.aOb(c,this.$ti.c)}} +A.aCn.prototype={ +$0(){return this.a.nJ(this.b)}, +$S:0} +A.a4l.prototype={} +A.a4k.prototype={$iuC:1} +A.aD6.prototype={ +$0(){A.aXg(this.a,this.b)}, +$S:0} +A.a1q.prototype={ +gahI(){return B.a78}, +gqW(){return this}, +wC(a){var s,r,q +try{if(B.ai===$.aw){a.$0() +return}A.aPP(null,null,this,a)}catch(q){s=A.ax(q) +r=A.aZ(q) +A.aI3(s,r)}}, +Cl(a,b){var s,r,q +try{if(B.ai===$.aw){a.$1(b) +return}A.aPQ(null,null,this,a,b)}catch(q){s=A.ax(q) +r=A.aZ(q) +A.aI3(s,r)}}, +alL(a,b){return new A.azQ(this,a,b)}, +alK(a,b,c,d){return new A.azO(this,a,c,d,b)}, +Hp(a){return new A.azP(this,a)}, +UC(a,b){return new A.azR(this,a,b)}, +i(a,b){return null}, +B0(a,b){A.aI3(a,b)}, +Kn(a){if($.aw===B.ai)return a.$0() +return A.aPP(null,null,this,a)}, +Ko(a,b){if($.aw===B.ai)return a.$1(b) +return A.aPQ(null,null,this,a,b)}, +Zz(a,b,c){if($.aw===B.ai)return a.$2(b,c) +return A.b4l(null,null,this,a,b,c)}, +wv(a){return a}, +Cb(a){return a}, +Ca(a){return a}, +Iv(a,b){return null}, +pk(a){A.aD7(null,null,this,a)}, +VI(a,b){return A.aNF(a,b)}, +VC(a,b){return A.b0w(a,b)}} +A.azQ.prototype={ +$0(){return this.a.Kn(this.b,this.c)}, +$S(){return this.c.h("0()")}} +A.azO.prototype={ +$2(a,b){var s=this +return s.a.Zz(s.b,a,b,s.e,s.c,s.d)}, +$S(){return this.e.h("@<0>").N(this.c).N(this.d).h("1(2,3)")}} +A.azP.prototype={ +$0(){return this.a.wC(this.b)}, +$S:0} +A.azR.prototype={ +$1(a){return this.a.Cl(this.b,a,this.c)}, +$S(){return this.c.h("~(0)")}} +A.nP.prototype={ +gu(a){return this.a}, +ga7(a){return this.a===0}, +gc8(a){return this.a!==0}, +gc2(a){return new A.uO(this,A.o(this).h("uO<1>"))}, +gaT(a){var s=A.o(this) +return A.n8(new A.uO(this,s.h("uO<1>")),new A.avV(this),s.c,s.z[1])}, +ai(a,b){var s,r +if(typeof b=="string"&&b!=="__proto__"){s=this.b +return s==null?!1:s[b]!=null}else if(typeof b=="number"&&(b&1073741823)===b){r=this.c +return r==null?!1:r[b]!=null}else return this.pF(b)}, +pF(a){var s=this.d +if(s==null)return!1 +return this.hw(this.OV(s,a),a)>=0}, +E(a,b){J.h7(b,new A.avU(this))}, +i(a,b){var s,r,q +if(typeof b=="string"&&b!=="__proto__"){s=this.b +r=s==null?null:A.aHq(s,b) +return r}else if(typeof b=="number"&&(b&1073741823)===b){q=this.c +r=q==null?null:A.aHq(q,b) +return r}else return this.OU(0,b)}, +OU(a,b){var s,r,q=this.d +if(q==null)return null +s=this.OV(q,b) +r=this.hw(s,b) +return r<0?null:s[r+1]}, +n(a,b,c){var s,r,q=this +if(typeof b=="string"&&b!=="__proto__"){s=q.b +q.NL(s==null?q.b=A.aHr():s,b,c)}else if(typeof b=="number"&&(b&1073741823)===b){r=q.c +q.NL(r==null?q.c=A.aHr():r,b,c)}else q.S1(b,c)}, +S1(a,b){var s,r,q,p=this,o=p.d +if(o==null)o=p.d=A.aHr() +s=p.hV(a) +r=o[s] +if(r==null){A.aHs(o,s,[a,b]);++p.a +p.e=null}else{q=p.hw(r,a) +if(q>=0)r[q+1]=b +else{r.push(a,b);++p.a +p.e=null}}}, +bm(a,b,c){var s,r,q=this +if(q.ai(0,b)){s=q.i(0,b) +return s==null?A.o(q).z[1].a(s):s}r=c.$0() +q.n(0,b,r) +return r}, +C(a,b){var s=this +if(typeof b=="string"&&b!=="__proto__")return s.mm(s.b,b) +else if(typeof b=="number"&&(b&1073741823)===b)return s.mm(s.c,b) +else return s.lk(0,b)}, +lk(a,b){var s,r,q,p,o=this,n=o.d +if(n==null)return null +s=o.hV(b) +r=n[s] +q=o.hw(r,b) +if(q<0)return null;--o.a +o.e=null +p=r.splice(q,2)[1] +if(0===r.length)delete n[s] +return p}, +aa(a,b){var s,r,q,p,o,n=this,m=n.Eu() +for(s=m.length,r=A.o(n).z[1],q=0;q"))}, +p(a,b){return this.a.ai(0,b)}} +A.z0.prototype={ +gJ(a){var s=this.d +return s==null?this.$ti.c.a(s):s}, +q(){var s=this,r=s.b,q=s.c,p=s.a +if(r!==p.e)throw A.c(A.ci(p)) +else if(q>=r.length){s.d=null +return!1}else{s.d=r[q] +s.c=q+1 +return!0}}} +A.Ii.prototype={ +i(a,b){if(!this.y.$1(b))return null +return this.a2z(b)}, +n(a,b,c){this.a2B(b,c)}, +ai(a,b){if(!this.y.$1(b))return!1 +return this.a2y(b)}, +C(a,b){if(!this.y.$1(b))return null +return this.a2A(b)}, +oG(a){return this.x.$1(a)&1073741823}, +oH(a,b){var s,r,q +if(a==null)return-1 +s=a.length +for(r=this.w,q=0;q"))}, +u7(a){return new A.mb(a.h("mb<0>"))}, +FO(){return this.u7(t.z)}, +gab(a){return new A.jR(this,this.tL(),A.o(this).h("jR<1>"))}, +gu(a){return this.a}, +ga7(a){return this.a===0}, +gc8(a){return this.a!==0}, +p(a,b){var s,r +if(typeof b=="string"&&b!=="__proto__"){s=this.b +return s==null?!1:s[b]!=null}else if(typeof b=="number"&&(b&1073741823)===b){r=this.c +return r==null?!1:r[b]!=null}else return this.Ex(b)}, +Ex(a){var s=this.d +if(s==null)return!1 +return this.hw(s[this.hV(a)],a)>=0}, +D(a,b){var s,r,q=this +if(typeof b=="string"&&b!=="__proto__"){s=q.b +return q.tI(s==null?q.b=A.aHt():s,b)}else if(typeof b=="number"&&(b&1073741823)===b){r=q.c +return q.tI(r==null?q.c=A.aHt():r,b)}else return q.f_(0,b)}, +f_(a,b){var s,r,q=this,p=q.d +if(p==null)p=q.d=A.aHt() +s=q.hV(b) +r=p[s] +if(r==null)p[s]=[b] +else{if(q.hw(r,b)>=0)return!1 +r.push(b)}++q.a +q.e=null +return!0}, +E(a,b){var s +for(s=J.ap(b);s.q();)this.D(0,s.gJ(s))}, +C(a,b){var s=this +if(typeof b=="string"&&b!=="__proto__")return s.mm(s.b,b) +else if(typeof b=="number"&&(b&1073741823)===b)return s.mm(s.c,b) +else return s.lk(0,b)}, +lk(a,b){var s,r,q,p=this,o=p.d +if(o==null)return!1 +s=p.hV(b) +r=o[s] +q=p.hw(r,b) +if(q<0)return!1;--p.a +p.e=null +r.splice(q,1) +if(0===r.length)delete o[s] +return!0}, +a0(a){var s=this +if(s.a>0){s.b=s.c=s.d=s.e=null +s.a=0}}, +tL(){var s,r,q,p,o,n,m,l,k,j,i=this,h=i.e +if(h!=null)return h +h=A.bf(i.a,null,!1,t.z) +s=i.b +if(s!=null){r=Object.getOwnPropertyNames(s) +q=r.length +for(p=0,o=0;o=r.length){s.d=null +return!1}else{s.d=r[q] +s.c=q+1 +return!0}}} +A.im.prototype={ +pR(){return new A.im(A.o(this).h("im<1>"))}, +u7(a){return new A.im(a.h("im<0>"))}, +FO(){return this.u7(t.z)}, +gab(a){var s=this,r=new A.q7(s,s.r,A.o(s).h("q7<1>")) +r.c=s.e +return r}, +gu(a){return this.a}, +ga7(a){return this.a===0}, +gc8(a){return this.a!==0}, +p(a,b){var s,r +if(typeof b=="string"&&b!=="__proto__"){s=this.b +if(s==null)return!1 +return s[b]!=null}else if(typeof b=="number"&&(b&1073741823)===b){r=this.c +if(r==null)return!1 +return r[b]!=null}else return this.Ex(b)}, +Ex(a){var s=this.d +if(s==null)return!1 +return this.hw(s[this.hV(a)],a)>=0}, +aa(a,b){var s=this,r=s.e,q=s.r +for(;r!=null;){b.$1(r.a) +if(q!==s.r)throw A.c(A.ci(s)) +r=r.b}}, +gL(a){var s=this.e +if(s==null)throw A.c(A.Q("No elements")) +return s.a}, +gO(a){var s=this.f +if(s==null)throw A.c(A.Q("No elements")) +return s.a}, +D(a,b){var s,r,q=this +if(typeof b=="string"&&b!=="__proto__"){s=q.b +return q.tI(s==null?q.b=A.aHu():s,b)}else if(typeof b=="number"&&(b&1073741823)===b){r=q.c +return q.tI(r==null?q.c=A.aHu():r,b)}else return q.f_(0,b)}, +f_(a,b){var s,r,q=this,p=q.d +if(p==null)p=q.d=A.aHu() +s=q.hV(b) +r=p[s] +if(r==null)p[s]=[q.En(b)] +else{if(q.hw(r,b)>=0)return!1 +r.push(q.En(b))}return!0}, +C(a,b){var s=this +if(typeof b=="string"&&b!=="__proto__")return s.mm(s.b,b) +else if(typeof b=="number"&&(b&1073741823)===b)return s.mm(s.c,b) +else return s.lk(0,b)}, +lk(a,b){var s,r,q,p,o=this,n=o.d +if(n==null)return!1 +s=o.hV(b) +r=n[s] +q=o.hw(r,b) +if(q<0)return!1 +p=r.splice(q,1)[0] +if(0===r.length)delete n[s] +o.NM(p) +return!0}, +aa1(a,b){var s,r,q,p,o=this,n=o.e +for(;n!=null;n=r){s=n.a +r=n.b +q=o.r +p=a.$1(s) +if(q!==o.r)throw A.c(A.ci(o)) +if(!0===p)o.C(0,s)}}, +a0(a){var s=this +if(s.a>0){s.b=s.c=s.d=s.e=s.f=null +s.a=0 +s.Em()}}, +tI(a,b){if(a[b]!=null)return!1 +a[b]=this.En(b) +return!0}, +mm(a,b){var s +if(a==null)return!1 +s=a[b] +if(s==null)return!1 +this.NM(s) +delete a[b] +return!0}, +Em(){this.r=this.r+1&1073741823}, +En(a){var s,r=this,q=new A.axz(a) +if(r.e==null)r.e=r.f=q +else{s=r.f +s.toString +q.c=s +r.f=s.b=q}++r.a +r.Em() +return q}, +NM(a){var s=this,r=a.c,q=a.b +if(r==null)s.e=q +else r.b=q +if(q==null)s.f=r +else q.c=r;--s.a +s.Em()}, +hV(a){return J.D(a)&1073741823}, +hw(a,b){var s,r +if(a==null)return-1 +s=a.length +for(r=0;r"))}, +gu(a){return this.b}, +gL(a){var s +if(this.b===0)throw A.c(A.Q("No such element")) +s=this.c +s.toString +return s}, +gO(a){var s +if(this.b===0)throw A.c(A.Q("No such element")) +s=this.c.j4$ +s.toString +return s}, +ga7(a){return this.b===0}, +Fv(a,b,c){var s,r,q=this +if(b.j2$!=null)throw A.c(A.Q("LinkedListEntry is already in a LinkedList"));++q.a +b.j2$=q +s=q.b +if(s===0){b.j3$=b +q.c=b.j4$=b +q.b=s+1 +return}r=a.j4$ +r.toString +b.j4$=r +b.j3$=a +a.j4$=r.j3$=b +if(c&&a==q.c)q.c=b +q.b=s+1}, +T4(a){var s,r,q=this;++q.a +s=a.j3$ +s.j4$=a.j4$ +a.j4$.j3$=s +r=--q.b +a.j2$=a.j3$=a.j4$=null +if(r===0)q.c=null +else if(a===q.c)q.c=s}} +A.z8.prototype={ +gJ(a){var s=this.c +return s==null?this.$ti.c.a(s):s}, +q(){var s=this,r=s.a +if(s.b!==r.a)throw A.c(A.ci(s)) +if(r.b!==0)r=s.e&&s.d===r.gL(r) +else r=!0 +if(r){s.c=null +return!1}s.e=!0 +r=s.d +s.c=r +s.d=r.j3$ +return!0}} +A.iM.prototype={ +gk6(a){var s=this.j2$ +if(s==null||s.gL(s)===this.j3$)return null +return this.j3$}, +gYD(){var s=this.j2$ +if(s==null||this===s.gL(s))return null +return this.j4$}} +A.B.prototype={ +gab(a){return new A.bu(a,this.gu(a),A.as(a).h("bu"))}, +bl(a,b){return this.i(a,b)}, +aa(a,b){var s,r=this.gu(a) +for(s=0;s"))}, +KU(a,b){return new A.dG(a,b.h("dG<0>"))}, +eQ(a,b,c){return new A.R(a,b,A.as(a).h("@").N(c).h("R<1,2>"))}, +iA(a,b){return A.eD(a,b,null,A.as(a).h("B.E"))}, +eU(a,b){var s,r,q,p,o=this +if(o.ga7(a)){s=A.as(a).h("B.E") +return b?J.wA(0,s):J.CI(0,s)}r=o.i(a,0) +q=A.bf(o.gu(a),r,b,A.as(a).h("B.E")) +for(p=1;p").N(b).h("ft<1,2>"))}, +eF(a){var s,r=this +if(r.gu(a)===0)throw A.c(A.cm()) +s=r.i(a,r.gu(a)-1) +r.su(a,r.gu(a)-1) +return s}, +dK(a,b){var s=b==null?A.b5f():b +A.TW(a,0,this.gu(a)-1,s)}, +R(a,b){var s=A.V(a,!0,A.as(a).h("B.E")) +B.b.E(s,b) +return s}, +cf(a,b,c){var s=this.gu(a) +if(c==null)c=s +A.cU(b,c,s,null,null) +return A.n5(this.x9(a,b,c),!0,A.as(a).h("B.E"))}, +eY(a,b){return this.cf(a,b,null)}, +x9(a,b,c){A.cU(b,c,this.gu(a),null,null) +return A.eD(a,b,c,A.as(a).h("B.E"))}, +p7(a,b,c){A.cU(b,c,this.gu(a),null,null) +if(c>b)this.NH(a,b,c)}, +AJ(a,b,c,d){var s +A.cU(b,c,this.gu(a),null,null) +for(s=b;s").b(d)){r=e +q=d}else{p=J.aF3(d,e) +q=p.eU(p,!1) +r=0}p=J.aF(q) +if(r+s>p.gu(q))throw A.c(A.aLr()) +if(r=0;--o)this.n(a,b+o,p.i(q,r+o)) +else for(o=0;o"))}, +oS(a,b,c,d){var s,r,q,p,o,n=A.A(c,d) +for(s=J.ap(this.gc2(a)),r=A.as(a).h("aM.V");s.q();){q=s.gJ(s) +p=this.i(a,q) +o=b.$2(q,p==null?r.a(p):p) +n.n(0,o.a,o.b)}return n}, +U3(a,b){var s,r +for(s=b.gab(b);s.q();){r=s.gJ(s) +this.n(a,r.a,r.b)}}, +wy(a,b){var s,r,q,p,o=A.as(a),n=A.a([],o.h("q")) +for(s=J.ap(this.gc2(a)),o=o.h("aM.V");s.q();){r=s.gJ(s) +q=this.i(a,r) +if(b.$2(r,q==null?o.a(q):q))n.push(r)}for(o=n.length,p=0;p").N(s.h("aM.V")).h("Il<1,2>"))}, +k(a){return A.ahp(a)}, +$iaJ:1} +A.ahn.prototype={ +$2(a,b){J.hH(this.a,a,b)}, +$S(){return A.as(this.a).h("~(aM.K,aM.V)")}} +A.aho.prototype={ +$1(a){var s=this.a,r=J.bq(s,a) +if(r==null)r=A.as(s).h("aM.V").a(r) +s=A.as(s) +return new A.aH(a,r,s.h("@").N(s.h("aM.V")).h("aH<1,2>"))}, +$S(){return A.as(this.a).h("aH(aM.K)")}} +A.ahq.prototype={ +$2(a,b){var s,r=this.a +if(!r.a)this.b.a+=", " +r.a=!1 +r=this.b +s=r.a+=A.h(a) +r.a=s+": " +r.a+=A.h(b)}, +$S:124} +A.yz.prototype={} +A.Il.prototype={ +gu(a){return J.bF(this.a)}, +ga7(a){return J.it(this.a)}, +gc8(a){return J.l2(this.a)}, +gL(a){var s=this.a,r=J.dW(s) +s=r.i(s,J.oe(r.gc2(s))) +return s==null?this.$ti.z[1].a(s):s}, +gO(a){var s=this.a,r=J.dW(s) +s=r.i(s,J.vd(r.gc2(s))) +return s==null?this.$ti.z[1].a(s):s}, +gab(a){var s=this.a,r=this.$ti +return new A.ZK(J.ap(J.Lx(s)),s,r.h("@<1>").N(r.z[1]).h("ZK<1,2>"))}} +A.ZK.prototype={ +q(){var s=this,r=s.a +if(r.q()){s.c=J.bq(s.b,r.gJ(r)) +return!0}s.c=null +return!1}, +gJ(a){var s=this.c +return s==null?this.$ti.z[1].a(s):s}} +A.qi.prototype={ +n(a,b,c){throw A.c(A.a3("Cannot modify unmodifiable map"))}, +E(a,b){throw A.c(A.a3("Cannot modify unmodifiable map"))}, +C(a,b){throw A.c(A.a3("Cannot modify unmodifiable map"))}, +bm(a,b,c){throw A.c(A.a3("Cannot modify unmodifiable map"))}} +A.wQ.prototype={ +o1(a,b,c){return J.a63(this.a,b,c)}, +i(a,b){return J.bq(this.a,b)}, +n(a,b,c){J.hH(this.a,b,c)}, +E(a,b){J.aEX(this.a,b)}, +bm(a,b,c){return J.A2(this.a,b,c)}, +ai(a,b){return J.vc(this.a,b)}, +aa(a,b){J.h7(this.a,b)}, +ga7(a){return J.it(this.a)}, +gc8(a){return J.l2(this.a)}, +gu(a){return J.bF(this.a)}, +gc2(a){return J.Lx(this.a)}, +C(a,b){return J.of(this.a,b)}, +k(a){return J.f0(this.a)}, +gaT(a){return J.aF_(this.a)}, +gd5(a){return J.a64(this.a)}, +oS(a,b,c,d){return J.aJp(this.a,b,c,d)}, +$iaJ:1} +A.kH.prototype={ +o1(a,b,c){return new A.kH(J.a63(this.a,b,c),b.h("@<0>").N(c).h("kH<1,2>"))}} +A.HD.prototype={ +aer(a,b){var s=this +s.b=b +s.a=a +if(a!=null)a.b=s +if(b!=null)b.a=s}, +ajH(){var s,r=this,q=r.a +if(q!=null)q.b=r.b +s=r.b +if(s!=null)s.a=q +r.a=r.b=null}} +A.HC.prototype={ +Rk(a){var s,r,q=this +q.c=null +s=q.a +if(s!=null)s.b=q.b +r=q.b +if(r!=null)r.a=s +q.a=q.b=null +return q.d}, +eg(a){var s=this,r=s.c +if(r!=null)--r.b +s.c=null +s.ajH() +return s.d}, +xU(){return this}, +$iaKK:1, +gAu(){return this.d}} +A.HE.prototype={ +xU(){return null}, +Rk(a){throw A.c(A.cm())}, +gAu(){throw A.c(A.cm())}} +A.BB.prototype={ +iO(a,b){return new A.mA(this,this.$ti.h("@<1>").N(b).h("mA<1,2>"))}, +gu(a){return this.b}, +zC(a){var s=this.a +new A.HC(this,a,s.$ti.h("HC<1>")).aer(s,s.b);++this.b}, +eF(a){var s=this.a.a.Rk(0);--this.b +return s}, +gL(a){return this.a.b.gAu()}, +gO(a){return this.a.a.gAu()}, +ga7(a){var s=this.a +return s.b===s}, +gab(a){return new A.XR(this,this.a.b,this.$ti.h("XR<1>"))}, +k(a){return A.rO(this,"{","}")}, +$ia8:1} +A.XR.prototype={ +q(){var s=this,r=s.b,q=r==null?null:r.xU() +if(q==null){s.a=s.b=s.c=null +return!1}r=s.a +if(r!=q.c)throw A.c(A.ci(r)) +s.c=q.d +s.b=q.b +return!0}, +gJ(a){var s=this.c +return s==null?this.$ti.c.a(s):s}} +A.CY.prototype={ +iO(a,b){return new A.mA(this,this.$ti.h("@<1>").N(b).h("mA<1,2>"))}, +gab(a){var s=this +return new A.ZD(s,s.c,s.d,s.b,s.$ti.h("ZD<1>"))}, +ga7(a){return this.b===this.c}, +gu(a){return(this.c-this.b&this.a.length-1)>>>0}, +gL(a){var s=this,r=s.b +if(r===s.c)throw A.c(A.cm()) +r=s.a[r] +return r==null?s.$ti.c.a(r):r}, +gO(a){var s=this,r=s.b,q=s.c +if(r===q)throw A.c(A.cm()) +r=s.a +r=r[(q-1&r.length-1)>>>0] +return r==null?s.$ti.c.a(r):r}, +bl(a,b){var s,r=this +A.aG9(b,r.gu(r),r,null,null) +s=r.a +s=s[(r.b+b&s.length-1)>>>0] +return s==null?r.$ti.c.a(s):s}, +eU(a,b){var s,r,q,p,o,n,m=this,l=m.a.length-1,k=(m.c-m.b&l)>>>0 +if(k===0){s=m.$ti.c +return b?J.wA(0,s):J.CI(0,s)}s=m.$ti.c +r=A.bf(k,m.gL(m),b,s) +for(q=m.a,p=m.b,o=0;o>>0] +r[o]=n==null?s.a(n):n}return r}, +dI(a){return this.eU(a,!0)}, +E(a,b){var s,r,q,p,o,n,m,l,k=this,j=k.$ti +if(j.h("v<1>").b(b)){s=b.length +r=k.gu(k) +q=r+s +p=k.a +o=p.length +if(q>=o){n=A.bf(A.aLG(q+(q>>>1)),null,!1,j.h("1?")) +k.c=k.akA(n) +k.a=n +k.b=0 +B.b.bC(n,r,q,b,0) +k.c+=s}else{j=k.c +m=o-j +if(s>>0)s[p]=null +q.b=q.c=0;++q.d}}, +k(a){return A.rO(this,"{","}")}, +zC(a){var s=this,r=s.b,q=s.a +r=s.b=(r-1&q.length-1)>>>0 +q[r]=a +if(r===s.c)s.Po();++s.d}, +wx(){var s,r,q=this,p=q.b +if(p===q.c)throw A.c(A.cm());++q.d +s=q.a +r=s[p] +if(r==null)r=q.$ti.c.a(r) +s[p]=null +q.b=(p+1&s.length-1)>>>0 +return r}, +eF(a){var s,r=this,q=r.b,p=r.c +if(q===p)throw A.c(A.cm());++r.d +q=r.a +p=r.c=(p-1&q.length-1)>>>0 +s=q[p] +if(s==null)s=r.$ti.c.a(s) +q[p]=null +return s}, +f_(a,b){var s=this,r=s.a,q=s.c +r[q]=b +r=(q+1&r.length-1)>>>0 +s.c=r +if(s.b===r)s.Po();++s.d}, +Po(){var s=this,r=A.bf(s.a.length*2,null,!1,s.$ti.h("1?")),q=s.a,p=s.b,o=q.length-p +B.b.bC(r,0,o,q,p) +B.b.bC(r,o,o+s.b,s.a,0) +s.b=0 +s.c=s.a.length +s.a=r}, +akA(a){var s,r,q=this,p=q.b,o=q.c,n=q.a +if(p<=o){s=o-p +B.b.bC(a,0,s,n,p) +return s}else{r=n.length-p +B.b.bC(a,0,r,n,p) +B.b.bC(a,r,r+q.c,q.a,0) +return q.c+r}}} +A.ZD.prototype={ +gJ(a){var s=this.e +return s==null?this.$ti.c.a(s):s}, +q(){var s,r=this,q=r.a +if(r.c!==q.d)A.T(A.ci(q)) +s=r.d +if(s===r.b){r.e=null +return!1}q=q.a +r.e=q[s] +r.d=(s+1&q.length-1)>>>0 +return!0}} +A.jB.prototype={ +ga7(a){return this.gu(this)===0}, +gc8(a){return this.gu(this)!==0}, +iO(a,b){return A.aol(this,null,A.o(this).c,b)}, +E(a,b){var s +for(s=J.ap(b);s.q();)this.D(0,s.gJ(s))}, +Z7(a){var s,r +for(s=a.length,r=0;r").N(c).h("rj<1,2>"))}, +gct(a){var s,r=this +if(r.gu(r)>1)throw A.c(A.ag0()) +s=r.gab(r) +if(!s.q())throw A.c(A.cm()) +return s.gJ(s)}, +k(a){return A.rO(this,"{","}")}, +qX(a,b){var s +for(s=this.gab(this);s.q();)if(!b.$1(s.gJ(s)))return!1 +return!0}, +fJ(a,b){var s +for(s=this.gab(this);s.q();)if(b.$1(s.gJ(s)))return!0 +return!1}, +iA(a,b){return A.aNd(this,b,A.o(this).c)}, +gL(a){var s=this.gab(this) +if(!s.q())throw A.c(A.cm()) +return s.gJ(s)}, +gO(a){var s,r=this.gab(this) +if(!r.q())throw A.c(A.cm()) +do s=r.gJ(r) +while(r.q()) +return s}, +bl(a,b){var s,r +A.eA(b,"index") +s=this.gab(this) +for(r=b;s.q();){if(r===0)return s.gJ(s);--r}throw A.c(A.dB(b,b-r,this,null,"index"))}, +$ia8:1, +$in:1, +$ibV:1} +A.zv.prototype={ +iO(a,b){return A.aol(this,this.gFN(),A.o(this).c,b)}, +ob(a){var s,r,q=this.pR() +for(s=this.gab(this);s.q();){r=s.gJ(s) +if(!a.p(0,r))q.D(0,r)}return q}, +rk(a,b){var s,r,q=this.pR() +for(s=this.gab(this);s.q();){r=s.gJ(s) +if(b.p(0,r))q.D(0,r)}return q}, +iw(a){var s=this.pR() +s.E(0,this) +return s}} +A.a2w.prototype={} +A.hF.prototype={} +A.h3.prototype={ +aha(a){var s=this,r=s.$ti +r=new A.h3(a,s.a,r.h("@<1>").N(r.z[1]).h("h3<1,2>")) +r.b=s.b +r.c=s.c +return r}} +A.a2v.prototype={ +jx(a){var s,r,q,p,o,n,m,l,k,j,i,h=this,g=null,f=h.gek() +if(f==null){h.Eq(a,a) +return-1}s=h.gEp() +for(r=g,q=f,p=r,o=p,n=o,m=n;!0;){r=s.$2(q.a,a) +if(r>0){l=q.b +if(l==null)break +r=s.$2(l.a,a) +if(r>0){q.b=l.c +l.c=q +k=l.b +if(k==null){q=l +break}q=l +l=k}if(m==null)n=q +else m.b=q +m=q +q=l}else{if(r<0){j=q.c +if(j==null)break +r=s.$2(j.a,a) +if(r<0){q.c=j.b +j.b=q +i=j.c +if(i==null){q=j +break}q=j +j=i}if(o==null)p=q +else o.c=q}else break +o=q +q=j}}if(o!=null){o.c=q.b +q.b=p}if(m!=null){m.b=q.c +q.c=n}if(h.gek()!==q){h.sek(q);++h.c}return r}, +aiS(a){var s,r,q=a.b +for(s=a;q!=null;s=q,q=r){s.b=q.c +q.c=s +r=q.b}return s}, +Sm(a){var s,r,q=a.c +for(s=a;q!=null;s=q,q=r){s.c=q.b +q.b=s +r=q.c}return s}, +lk(a,b){var s,r,q,p,o=this +if(o.gek()==null)return null +if(o.jx(b)!==0)return null +s=o.gek() +r=s.b;--o.a +q=s.c +if(r==null)o.sek(q) +else{p=o.Sm(r) +p.c=q +o.sek(p)}++o.b +return s}, +DV(a,b){var s,r=this;++r.a;++r.b +s=r.gek() +if(s==null){r.sek(a) +return}if(b<0){a.b=s +a.c=s.c +s.c=null}else{a.c=s +a.b=s.b +s.b=null}r.sek(a)}, +gOJ(){var s=this,r=s.gek() +if(r==null)return null +s.sek(s.aiS(r)) +return s.gek()}, +gQc(){var s=this,r=s.gek() +if(r==null)return null +s.sek(s.Sm(r)) +return s.gek()}, +pF(a){return this.GU(a)&&this.jx(a)===0}, +Eq(a,b){return this.gEp().$2(a,b)}, +GU(a){return this.gawo().$1(a)}} +A.FH.prototype={ +i(a,b){var s=this +if(!s.f.$1(b))return null +if(s.d!=null)if(s.jx(b)===0)return s.d.d +return null}, +C(a,b){var s +if(!this.f.$1(b))return null +s=this.lk(0,b) +if(s!=null)return s.d +return null}, +n(a,b,c){var s,r=this,q=r.jx(b) +if(q===0){r.d=r.d.aha(c);++r.c +return}s=r.$ti +r.DV(new A.h3(c,b,s.h("@<1>").N(s.z[1]).h("h3<1,2>")),q)}, +bm(a,b,c){var s,r,q,p,o=this,n=o.jx(b) +if(n===0)return o.d.d +s=o.b +r=o.c +q=c.$0() +if(s!==o.b)throw A.c(A.ci(o)) +if(r!==o.c)n=o.jx(b) +p=o.$ti +o.DV(new A.h3(q,b,p.h("@<1>").N(p.z[1]).h("h3<1,2>")),n) +return q}, +E(a,b){J.h7(b,new A.ap2(this))}, +ga7(a){return this.d==null}, +gc8(a){return this.d!=null}, +aa(a,b){var s,r,q=this.$ti +q=q.h("@<1>").N(q.z[1]) +s=new A.uV(this,A.a([],q.h("q>")),this.c,q.h("uV<1,2>")) +for(;s.q();){r=s.gJ(s) +b.$2(r.a,r.b)}}, +gu(a){return this.a}, +ai(a,b){return this.pF(b)}, +gc2(a){var s=this.$ti +return new A.nX(this,s.h("@<1>").N(s.h("h3<1,2>")).h("nX<1,2>"))}, +gaT(a){var s=this.$ti +return new A.uW(this,s.h("@<1>").N(s.z[1]).h("uW<1,2>"))}, +gd5(a){var s=this.$ti +return new A.JG(this,s.h("@<1>").N(s.z[1]).h("JG<1,2>"))}, +apJ(){if(this.d==null)return null +return this.gOJ().a}, +XW(){if(this.d==null)return null +return this.gQc().a}, +as7(a){var s,r,q,p=this +if(p.d==null)return null +if(p.jx(a)<0)return p.d.a +s=p.d.b +if(s==null)return null +r=s.c +for(;r!=null;s=r,r=q)q=r.c +return s.a}, +apK(a){var s,r,q,p=this +if(p.d==null)return null +if(p.jx(a)>0)return p.d.a +s=p.d.c +if(s==null)return null +r=s.b +for(;r!=null;s=r,r=q)q=r.b +return s.a}, +$iaJ:1, +Eq(a,b){return this.e.$2(a,b)}, +GU(a){return this.f.$1(a)}, +gek(){return this.d}, +gEp(){return this.e}, +sek(a){return this.d=a}} +A.ap3.prototype={ +$1(a){return this.a.b(a)}, +$S:76} +A.ap2.prototype={ +$2(a,b){this.a.n(0,a,b)}, +$S(){return this.a.$ti.h("~(1,2)")}} +A.mf.prototype={ +gJ(a){var s=this.b +if(s.length===0){A.o(this).h("mf.T").a(null) +return null}return this.Fd(B.b.gO(s))}, +agS(a){var s,r,q=this.b +B.b.a0(q) +s=this.a +s.jx(a) +r=s.gek() +r.toString +q.push(r) +this.d=s.c}, +q(){var s,r,q=this,p=q.c,o=q.a,n=o.b +if(p!==n){if(p==null){q.c=n +s=o.gek() +for(p=q.b;s!=null;){p.push(s) +s=s.b}return p.length!==0}throw A.c(A.ci(o))}p=q.b +if(p.length===0)return!1 +if(q.d!==o.c)q.agS(B.b.gO(p).a) +s=B.b.gO(p) +r=s.c +if(r!=null){for(;r!=null;){p.push(r) +r=r.b}return!0}p.pop() +while(!0){if(!(p.length!==0&&B.b.gO(p).c===s))break +s=p.pop()}return p.length!==0}} +A.nX.prototype={ +gu(a){return this.a.a}, +ga7(a){return this.a.a===0}, +gab(a){var s=this.a,r=this.$ti +return new A.nY(s,A.a([],r.h("q<2>")),s.c,r.h("@<1>").N(r.z[1]).h("nY<1,2>"))}, +p(a,b){return this.a.pF(b)}, +iw(a){var s=this.a,r=this.$ti,q=A.U6(s.e,s.f,r.c) +q.a=s.a +q.d=q.O1(s.d,r.z[1]) +return q}} +A.uW.prototype={ +gu(a){return this.a.a}, +ga7(a){return this.a.a===0}, +gab(a){var s=this.a,r=this.$ti +r=r.h("@<1>").N(r.z[1]) +return new A.JK(s,A.a([],r.h("q>")),s.c,r.h("JK<1,2>"))}} +A.JG.prototype={ +gu(a){return this.a.a}, +ga7(a){return this.a.a===0}, +gab(a){var s=this.a,r=this.$ti +r=r.h("@<1>").N(r.z[1]) +return new A.uV(s,A.a([],r.h("q>")),s.c,r.h("uV<1,2>"))}} +A.nY.prototype={ +Fd(a){return a.a}} +A.JK.prototype={ +Fd(a){return a.d}} +A.uV.prototype={ +Fd(a){var s=this.$ti +return new A.aH(a.a,a.d,s.h("@<1>").N(s.z[1]).h("aH<1,2>"))}} +A.y_.prototype={ +QB(a){return A.U6(new A.ap5(this,a),this.f,a)}, +pR(){return this.QB(t.z)}, +iO(a,b){return A.aol(this,this.gaf8(),this.$ti.c,b)}, +gab(a){var s=this.$ti +return new A.nY(this,A.a([],s.h("q>")),this.c,s.h("@<1>").N(s.h("hF<1>")).h("nY<1,2>"))}, +gu(a){return this.a}, +ga7(a){return this.d==null}, +gc8(a){return this.d!=null}, +gL(a){if(this.a===0)throw A.c(A.cm()) +return this.gOJ().a}, +gO(a){if(this.a===0)throw A.c(A.cm()) +return this.gQc().a}, +p(a,b){return this.f.$1(b)&&this.jx(this.$ti.c.a(b))===0}, +D(a,b){return this.f_(0,b)}, +f_(a,b){var s=this.jx(b) +if(s===0)return!1 +this.DV(new A.hF(b,this.$ti.h("hF<1>")),s) +return!0}, +C(a,b){if(!this.f.$1(b))return!1 +return this.lk(0,this.$ti.c.a(b))!=null}, +E(a,b){var s +for(s=J.ap(b);s.q();)this.f_(0,s.gJ(s))}, +rk(a,b){var s,r=this,q=r.$ti,p=A.U6(r.e,r.f,q.c) +for(q=new A.nY(r,A.a([],q.h("q>")),r.c,q.h("@<1>").N(q.h("hF<1>")).h("nY<1,2>"));q.q();){s=q.gJ(q) +if(b.p(0,s))p.f_(0,s)}return p}, +a8j(){var s=this,r=s.$ti,q=A.U6(s.e,s.f,r.c) +q.a=s.a +q.d=s.O1(s.d,r.h("hF<1>")) +return q}, +O1(a,b){var s +if(a==null)return null +s=new A.hF(a.a,this.$ti.h("hF<1>")) +new A.ap4(this,b).$2(a,s) +return s}, +iw(a){return this.a8j()}, +k(a){return A.rO(this,"{","}")}, +$ia8:1, +$ibV:1, +Eq(a,b){return this.e.$2(a,b)}, +GU(a){return this.f.$1(a)}, +gek(){return this.d}, +gEp(){return this.e}, +sek(a){return this.d=a}} +A.ap6.prototype={ +$1(a){return this.a.b(a)}, +$S:76} +A.ap5.prototype={ +$2(a,b){var s=this.a,r=s.$ti.c +r.a(a) +r.a(b) +return s.e.$2(a,b)}, +$S(){return this.b.h("l(0,0)")}} +A.ap4.prototype={ +$2(a,b){var s,r,q,p,o,n=this.a.$ti.h("hF<1>") +do{s=a.b +r=a.c +if(s!=null){q=new A.hF(s.a,n) +b.b=q +this.$2(s,q)}p=r!=null +if(p){o=new A.hF(r.a,n) +b.c=o +b=o +a=r}}while(p)}, +$S(){return this.a.$ti.N(this.b).h("~(1,hF<2>)")}} +A.JH.prototype={} +A.JI.prototype={} +A.JJ.prototype={} +A.Kj.prototype={} +A.Zc.prototype={ +i(a,b){var s,r=this.b +if(r==null)return this.c.i(0,b) +else if(typeof b!="string")return null +else{s=r[b] +return typeof s=="undefined"?this.agJ(b):s}}, +gu(a){return this.b==null?this.c.a:this.pG().length}, +ga7(a){return this.gu(this)===0}, +gc8(a){return this.gu(this)>0}, +gc2(a){var s +if(this.b==null){s=this.c +return new A.aX(s,A.o(s).h("aX<1>"))}return new A.Zd(this)}, +gaT(a){var s,r=this +if(r.b==null){s=r.c +return s.gaT(s)}return A.n8(r.pG(),new A.awu(r),t.N,t.z)}, +n(a,b,c){var s,r,q=this +if(q.b==null)q.c.n(0,b,c) +else if(q.ai(0,b)){s=q.b +s[b]=c +r=q.a +if(r==null?s!=null:r!==s)r[b]=null}else q.TJ().n(0,b,c)}, +E(a,b){J.h7(b,new A.awt(this))}, +ai(a,b){if(this.b==null)return this.c.ai(0,b) +if(typeof b!="string")return!1 +return Object.prototype.hasOwnProperty.call(this.a,b)}, +bm(a,b,c){var s +if(this.ai(0,b))return this.i(0,b) +s=c.$0() +this.n(0,b,s) +return s}, +C(a,b){if(this.b!=null&&!this.ai(0,b))return null +return this.TJ().C(0,b)}, +aa(a,b){var s,r,q,p,o=this +if(o.b==null)return o.c.aa(0,b) +s=o.pG() +for(r=0;r"))}return s}, +p(a,b){return this.a.ai(0,b)}} +A.Ia.prototype={ +aA(a){var s,r,q=this +q.a5l(0) +s=q.a +r=s.a +s.a="" +s=q.c +s.D(0,A.aI_(r.charCodeAt(0)==0?r:r,q.b)) +s.aA(0)}} +A.arQ.prototype={ +$0(){var s,r +try{s=new TextDecoder("utf-8",{fatal:true}) +return s}catch(r){}return null}, +$S:201} +A.arP.prototype={ +$0(){var s,r +try{s=new TextDecoder("utf-8",{fatal:false}) +return s}catch(r){}return null}, +$S:201} +A.LM.prototype={ +qS(a){return B.BU.cp(a)}, +eA(a,b){var s=B.BT.cp(b) +return s}} +A.a3R.prototype={ +cp(a){var s,r,q,p=A.cU(0,null,a.length,null,null)-0,o=new Uint8Array(p) +for(s=~this.a,r=0;rb)s.h2(a,b,r,!1) +s.D(0,B.OS) +b=r+1}if(b=0){i=u.U.charCodeAt(h) +if(i===k)continue +k=i}else{if(h===-1){if(o<0){g=p==null?c:p.a.length +if(g==null)g=0 +o=g+(r-q) +n=r}++m +if(k===61)continue}k=i}if(h!==-2){if(p==null){p=new A.ck("") +g=p}else g=p +g.a+=B.d.P(a0,q,r) +g.a+=A.dK(k) +q=l +continue}}throw A.c(A.cc("Invalid base64 data",a0,r))}if(p!=null){g=p.a+=B.d.P(a0,q,a2) +f=g.length +if(o>=0)A.aJJ(a0,n,a2,o,m,f) +else{e=B.f.bF(f-1,4)+1 +if(e===1)throw A.c(A.cc(b,a0,a2)) +for(;e<4;){g+="=" +p.a=g;++e}}g=p.a +return B.d.kX(a0,a1,a2,g.charCodeAt(0)==0?g:g)}d=a2-a1 +if(o>=0)A.aJJ(a0,n,a2,o,m,d) +else{e=B.f.bF(d,4) +if(e===1)throw A.c(A.cc(b,a0,a2)) +if(e>1)a0=B.d.kX(a0,a2,a2,e===2?"==":"=")}return a0}} +A.Mf.prototype={ +hr(a){return new A.aBQ(new A.a3W(new A.Kp(!1),a,a.a),new A.atp(u.U))}} +A.atp.prototype={ +anw(a,b){return new Uint8Array(b)}, +ap3(a,b,c,d){var s,r=this,q=(r.a&3)+(c-b),p=B.f.d4(q,3),o=p*4 +if(d&&q-p*3>0)o+=4 +s=r.anw(0,o) +r.a=A.b12(r.b,a,b,c,d,s,0,r.a) +if(o>0)return s +return null}} +A.atq.prototype={ +D(a,b){this.O_(0,b,0,b.length,!1)}, +aA(a){this.O_(0,B.aa,0,0,!0)}} +A.aBQ.prototype={ +O_(a,b,c,d,e){var s=this.b.ap3(b,c,d,e) +if(s!=null)this.a.h2(s,0,s.length,e)}} +A.Me.prototype={ +amU(a,b){var s,r,q=A.cU(b,null,a.length,null,null) +if(b===q)return new Uint8Array(0) +s=new A.Wm() +r=s.I1(0,a,b,q) +r.toString +s.HD(0,a,q) +return r}, +cp(a){return this.amU(a,0)}, +hr(a){return new A.ato(a,new A.Wm())}} +A.Wm.prototype={ +I1(a,b,c,d){var s,r=this,q=r.a +if(q<0){r.a=A.aO7(b,c,d,q) +return null}if(c===d)return new Uint8Array(0) +s=A.b1_(b,c,d,q) +r.a=A.b11(b,c,d,s,0,r.a) +return s}, +HD(a,b,c){var s=this.a +if(s<-1)throw A.c(A.cc("Missing padding character",b,c)) +if(s>0)throw A.c(A.cc("Invalid length, must be multiple of four",b,c)) +this.a=-1}} +A.ato.prototype={ +D(a,b){var s,r=b.length +if(r===0)return +s=this.b.I1(0,b,0,r) +if(s!=null)this.a.a.a+=s}, +aA(a){this.b.HD(0,null,null) +this.a.aA(0)}, +h2(a,b,c,d){var s,r +A.cU(b,c,a.length,null,null) +if(b===c)return +s=this.b +r=s.I1(0,a,b,c) +if(r!=null)this.a.a.a+=r +if(d){s.HD(0,a,c) +this.a.aA(0)}}} +A.a87.prototype={} +A.H5.prototype={ +D(a,b){this.a.D(0,b)}, +aA(a){this.a.aA(0)}} +A.WA.prototype={ +D(a,b){var s,r,q=this,p=q.b,o=q.c,n=J.aF(b) +if(n.gu(b)>p.length-o){p=q.b +s=n.gu(b)+p.length-1 +s|=B.f.el(s,1) +s|=s>>>2 +s|=s>>>4 +s|=s>>>8 +r=new Uint8Array((((s|s>>>16)>>>0)+1)*2) +p=q.b +B.O.dW(r,0,p.length,p) +q.b=r}p=q.b +o=q.c +B.O.dW(p,o,o+n.gu(b),b) +q.c=q.c+n.gu(b)}, +aA(a){this.a.$1(B.O.cf(this.b,0,this.c))}} +A.MF.prototype={} +A.a2f.prototype={ +D(a,b){this.b.push(b)}, +aA(a){this.a.$1(this.b)}} +A.N8.prototype={} +A.bl.prototype={ +apZ(a,b){var s=A.o(this) +return new A.HV(this,a,s.h("@").N(s.h("bl.T")).N(b).h("HV<1,2,3>"))}, +hr(a){throw A.c(A.a3("This converter does not support chunked conversions: "+this.k(0)))}} +A.HV.prototype={ +hr(a){return this.a.hr(new A.Ia(this.b.a,a,new A.ck("")))}} +A.rk.prototype={} +A.wC.prototype={ +k(a){var s=A.rn(this.a) +return(this.b!=null?"Converting object to an encodable object failed:":"Converting object did not return an encodable object:")+" "+s}} +A.PD.prototype={ +k(a){return"Cyclic error in JSON stringify"}} +A.agb.prototype={ +VO(a,b,c){var s=A.aI_(b,this.gVR().a) +return s}, +eA(a,b){return this.VO(a,b,null)}, +qS(a){var s=A.aOm(a,this.gWt().b,null) +return s}, +gWt(){return B.Ot}, +gVR(){return B.p6}} +A.PF.prototype={ +hr(a){return new A.aws(null,this.b,a)}} +A.aws.prototype={ +D(a,b){var s,r=this +if(r.d)throw A.c(A.Q("Only one call to add allowed")) +r.d=!0 +s=r.c.Ut() +A.aOl(b,s,r.b,r.a) +s.aA(0)}, +aA(a){}} +A.PE.prototype={ +hr(a){return new A.Ia(this.a,a,new A.ck(""))}} +A.aww.prototype={ +a_z(a){var s,r,q,p,o,n=this,m=a.length +for(s=0,r=0;r92){if(q>=55296){p=q&64512 +if(p===55296){o=r+1 +o=!(o=0&&(a.charCodeAt(p)&64512)===55296)}else p=!1 +else p=!0 +if(p){if(r>s)n.CG(a,s,r) +s=r+1 +n.e3(92) +n.e3(117) +n.e3(100) +p=q>>>8&15 +n.e3(p<10?48+p:87+p) +p=q>>>4&15 +n.e3(p<10?48+p:87+p) +p=q&15 +n.e3(p<10?48+p:87+p)}}continue}if(q<32){if(r>s)n.CG(a,s,r) +s=r+1 +n.e3(92) +switch(q){case 8:n.e3(98) +break +case 9:n.e3(116) +break +case 10:n.e3(110) +break +case 12:n.e3(102) +break +case 13:n.e3(114) +break +default:n.e3(117) +n.e3(48) +n.e3(48) +p=q>>>4&15 +n.e3(p<10?48+p:87+p) +p=q&15 +n.e3(p<10?48+p:87+p) +break}}else if(q===34||q===92){if(r>s)n.CG(a,s,r) +s=r+1 +n.e3(92) +n.e3(q)}}if(s===0)n.hK(a) +else if(s255||!1){if(s>b){r=this.a +r.toString +r.D(0,A.jF(a,b,s))}r=this.a +r.toString +r.D(0,A.jF(B.Pt,0,1)) +b=s+1}if(b16)this.F0()}, +rT(a,b){if(this.a.a.length!==0)this.F0() +this.b.D(0,b)}, +F0(){var s=this.a,r=s.a +s.a="" +this.b.D(0,r.charCodeAt(0)==0?r:r)}} +A.JS.prototype={ +aA(a){}, +h2(a,b,c,d){var s,r +if(b!==0||c!==a.length)for(s=this.a,r=b;r>>18|240 +q=o.b=p+1 +r[p]=s>>>12&63|128 +p=o.b=q+1 +r[q]=s>>>6&63|128 +o.b=p+1 +r[p]=s&63|128 +return!0}else{o.zv() +return!1}}, +OF(a,b,c){var s,r,q,p,o,n,m,l=this +if(b!==c&&(a.charCodeAt(c-1)&64512)===55296)--c +for(s=l.c,r=s.length,q=b;q=r)break +l.b=o+1 +s[o]=p}else{o=p&64512 +if(o===55296){if(l.b+4>r)break +n=q+1 +if(l.TX(p,a.charCodeAt(n)))q=n}else if(o===56320){if(l.b+3>r)break +l.zv()}else if(p<=2047){o=l.b +m=o+1 +if(m>=r)break +l.b=m +s[o]=p>>>6|192 +l.b=m+1 +s[m]=p&63|128}else{o=l.b +if(o+2>=r)break +m=l.b=o+1 +s[o]=p>>>12|224 +o=l.b=m+1 +s[m]=p>>>6&63|128 +l.b=o+1 +s[o]=p&63|128}}}return q}} +A.aBR.prototype={ +aA(a){if(this.a!==0){this.h2("",0,0,!0) +return}this.d.a.aA(0)}, +h2(a,b,c,d){var s,r,q,p,o,n=this +n.b=0 +s=b===c +if(s&&!d)return +r=n.a +if(r!==0){if(n.TX(r,!s?a.charCodeAt(b):0))++b +n.a=0}s=n.d +r=n.c +q=c-1 +p=r.length-3 +do{b=n.OF(a,b,c) +o=d&&b===c +if(b===q&&(a.charCodeAt(b)&64512)===55296){if(d&&n.b1000){s=B.f.d4(b+c,2) +r=q.Ey(a,b,s,!1) +if((q.b&1)!==0)return r +return r+q.Ey(a,s,c,d)}return q.anS(a,b,c,d)}, +apN(a,b){var s=this.b +this.b=0 +if(s<=32)return +if(this.a)b.a+=A.dK(65533) +else throw A.c(A.cc(A.aP_(77),null,null))}, +anS(a,b,c,d){var s,r,q,p,o,n,m,l=this,k=65533,j=l.b,i=l.c,h=new A.ck(""),g=b+1,f=a[b] +$label0$0:for(s=l.a;!0;){for(;!0;g=p){r="AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFFFFFFFFFFFFFFFFGGGGGGGGGGGGGGGGHHHHHHHHHHHHHHHHHHHHHHHHHHHIHHHJEEBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBKCCCCCCCCCCCCDCLONNNMEEEEEEEEEEE".charCodeAt(f)&31 +i=j<=32?f&61694>>>r:(f&63|i<<6)>>>0 +j=" \x000:XECCCCCN:lDb \x000:XECCCCCNvlDb \x000:XECCCCCN:lDb AAAAA\x00\x00\x00\x00\x00AAAAA00000AAAAA:::::AAAAAGG000AAAAA00KKKAAAAAG::::AAAAA:IIIIAAAAA000\x800AAAAA\x00\x00\x00\x00 AAAAA".charCodeAt(j+r) +if(j===0){h.a+=A.dK(i) +if(g===c)break $label0$0 +break}else if((j&1)!==0){if(s)switch(j){case 69:case 67:h.a+=A.dK(k) +break +case 65:h.a+=A.dK(k);--g +break +default:q=h.a+=A.dK(k) +h.a=q+A.dK(k) +break}else{l.b=j +l.c=g-1 +return""}j=0}if(g===c)break $label0$0 +p=g+1 +f=a[g]}p=g+1 +f=a[g] +if(f<128){while(!0){if(!(p=128){o=n-1 +p=n +break}p=n}if(o-g<20)for(m=g;m32)if(s)h.a+=A.dK(k) +else{l.b=77 +l.c=c +return""}l.b=j +l.c=i +s=h.a +return s.charCodeAt(0)==0?s:s}} +A.a5p.prototype={} +A.mj.prototype={} +A.aiH.prototype={ +$2(a,b){var s=this.b,r=this.a,q=s.a+=r.a +q+=a.a +s.a=q +s.a=q+": " +s.a+=A.rn(b) +r.a=", "}, +$S:441} +A.iz.prototype={ +D(a,b){return A.aWh(this.a+B.f.d4(b.a,1000),this.b)}, +j(a,b){if(b==null)return!1 +return b instanceof A.iz&&this.a===b.a&&this.b===b.b}, +b4(a,b){return B.f.b4(this.a,b.a)}, +gt(a){var s=this.a +return(s^B.f.el(s,30))&1073741823}, +k(a){var s=this,r=A.aWi(A.aZw(s)),q=A.Nx(A.aZu(s)),p=A.Nx(A.aZq(s)),o=A.Nx(A.aZr(s)),n=A.Nx(A.aZt(s)),m=A.Nx(A.aZv(s)),l=A.aWj(A.aZs(s)),k=r+"-"+q +if(s.b)return k+"-"+p+" "+o+":"+n+":"+m+"."+l+"Z" +else return k+"-"+p+" "+o+":"+n+":"+m+"."+l}, +$ic8:1} +A.b1.prototype={ +R(a,b){return new A.b1(this.a+b.a)}, +Y(a,b){return new A.b1(this.a-b.a)}, +S(a,b){return new A.b1(B.c.an(this.a*b))}, +Lk(a,b){return this.a<=b.a}, +j(a,b){if(b==null)return!1 +return b instanceof A.b1&&this.a===b.a}, +gt(a){return B.f.gt(this.a)}, +b4(a,b){return B.f.b4(this.a,b.a)}, +k(a){var s,r,q,p,o,n=this.a,m=B.f.d4(n,36e8),l=n%36e8 +if(n<0){m=0-m +n=0-l +s="-"}else{n=l +s=""}r=B.f.d4(n,6e7) +n%=6e7 +q=r<10?"0":"" +p=B.f.d4(n,1e6) +o=p<10?"0":"" +return s+m+":"+q+r+":"+o+p+"."+B.d.lO(B.f.k(n%1e6),6,"0")}, +q6(a){return new A.b1(Math.abs(this.a))}, +$ic8:1} +A.av7.prototype={ +k(a){return this.I()}} +A.bX.prototype={ +gxx(){return A.aZ(this.$thrownJsError)}} +A.qA.prototype={ +k(a){var s=this.a +if(s!=null)return"Assertion failed: "+A.rn(s) +return"Assertion failed"}, +gjZ(a){return this.a}} +A.nD.prototype={} +A.jZ.prototype={ +gEY(){return"Invalid argument"+(!this.a?"(s)":"")}, +gEX(){return""}, +k(a){var s=this,r=s.c,q=r==null?"":" ("+r+")",p=s.d,o=p==null?"":": "+A.h(p),n=s.gEY()+q+o +if(!s.a)return n +return n+s.gEX()+": "+A.rn(s.gJd())}, +gJd(){return this.b}} +A.xp.prototype={ +gJd(){return this.b}, +gEY(){return"RangeError"}, +gEX(){var s,r=this.e,q=this.f +if(r==null)s=q!=null?": Not less than or equal to "+A.h(q):"" +else if(q==null)s=": Not greater than or equal to "+A.h(r) +else if(q>r)s=": Not in inclusive range "+A.h(r)+".."+A.h(q) +else s=qe.length +else s=!1 +if(s)f=null +if(f==null){if(e.length>78)e=B.d.P(e,0,75)+"..." +return g+"\n"+e}for(r=1,q=0,p=!1,o=0;o1?g+(" (at line "+r+", character "+(f-q+1)+")\n"):g+(" (at character "+(f+1)+")\n") +m=e.length +for(o=f;o78)if(f-q<75){l=q+75 +k=q +j="" +i="..."}else{if(m-f<75){k=m-75 +l=m +i=""}else{k=f-36 +l=f+36 +i="..."}j="..."}else{l=m +k=q +j="" +i=""}return g+j+B.d.P(e,k,l)+i+"\n"+B.d.S(" ",f-k+j.length)+"^\n"}else return f!=null?g+(" (at offset "+A.h(f)+")"):g}, +$ic2:1, +gjZ(a){return this.a}, +gth(a){return this.b}, +gcz(a){return this.c}} +A.n.prototype={ +iO(a,b){return A.cC(this,A.as(this).h("n.E"),b)}, +IM(a,b){var s=this,r=A.as(s) +if(r.h("a8").b(s))return A.aL3(s,b,r.h("n.E")) +return new A.mQ(s,b,r.h("mQ"))}, +eQ(a,b,c){return A.n8(this,b,A.as(this).h("n.E"),c)}, +hJ(a,b){return new A.ba(this,b,A.as(this).h("ba"))}, +KU(a,b){return new A.dG(this,b.h("dG<0>"))}, +p(a,b){var s +for(s=this.gab(this);s.q();)if(J.d(s.gJ(s),b))return!0 +return!1}, +aa(a,b){var s +for(s=this.gab(this);s.q();)b.$1(s.gJ(s))}, +c_(a,b){var s,r,q=this.gab(this) +if(!q.q())return"" +s=J.f0(q.gJ(q)) +if(!q.q())return s +if(b.length===0){r=s +do r+=J.f0(q.gJ(q)) +while(q.q())}else{r=s +do r=r+b+J.f0(q.gJ(q)) +while(q.q())}return r.charCodeAt(0)==0?r:r}, +nc(a){return this.c_(a,"")}, +fJ(a,b){var s +for(s=this.gab(this);s.q();)if(b.$1(s.gJ(s)))return!0 +return!1}, +eU(a,b){return A.V(this,b,A.as(this).h("n.E"))}, +dI(a){return this.eU(a,!0)}, +iw(a){return A.hp(this,A.as(this).h("n.E"))}, +gu(a){var s,r=this.gab(this) +for(s=0;r.q();)++s +return s}, +ga7(a){return!this.gab(this).q()}, +gc8(a){return!this.ga7(this)}, +wD(a,b){return A.b07(this,b,A.as(this).h("n.E"))}, +iA(a,b){return A.aNd(this,b,A.as(this).h("n.E"))}, +gL(a){var s=this.gab(this) +if(!s.q())throw A.c(A.cm()) +return s.gJ(s)}, +gO(a){var s,r=this.gab(this) +if(!r.q())throw A.c(A.cm()) +do s=r.gJ(r) +while(r.q()) +return s}, +gct(a){var s,r=this.gab(this) +if(!r.q())throw A.c(A.cm()) +s=r.gJ(r) +if(r.q())throw A.c(A.ag0()) +return s}, +as8(a,b){var s,r,q=this.gab(this) +do{if(!q.q())throw A.c(A.cm()) +s=q.gJ(q)}while(!b.$1(s)) +for(;q.q();){r=q.gJ(q) +if(b.$1(r))s=r}return s}, +bl(a,b){var s,r +A.eA(b,"index") +s=this.gab(this) +for(r=b;s.q();){if(r===0)return s.gJ(s);--r}throw A.c(A.dB(b,b-r,this,null,"index"))}, +k(a){return A.aLu(this,"(",")")}, +a1u(a){return this.gct(this).$0()}} +A.HX.prototype={ +bl(a,b){A.aG9(b,this.a,this,null,null) +return this.b.$1(b)}, +gu(a){return this.a}} +A.PB.prototype={} +A.aH.prototype={ +k(a){return"MapEntry("+A.h(this.a)+": "+A.h(this.b)+")"}} +A.b7.prototype={ +gt(a){return A.I.prototype.gt.call(this,this)}, +k(a){return"null"}} +A.I.prototype={$iI:1, +j(a,b){return this===b}, +gt(a){return A.fE(this)}, +k(a){return"Instance of '"+A.aka(this)+"'"}, +G(a,b){throw A.c(A.aM8(this,b))}, +gdT(a){return A.t(this)}, +toString(){return this.k(this)}, +$0(){return this.G(this,A.J("$0","$0",0,[],[],0))}, +$1(a){return this.G(this,A.J("$1","$1",0,[a],[],0))}, +$2(a,b){return this.G(this,A.J("$2","$2",0,[a,b],[],0))}, +$3$1(a,b,c,d){return this.G(this,A.J("$3$1","$3$1",0,[a,b,c,d],[],3))}, +$1$2$onError(a,b,c){return this.G(this,A.J("$1$2$onError","$1$2$onError",0,[a,b,c],["onError"],1))}, +$2$1(a,b,c){return this.G(this,A.J("$2$1","$2$1",0,[a,b,c],[],2))}, +$1$1(a,b){return this.G(this,A.J("$1$1","$1$1",0,[a,b],[],1))}, +$3(a,b,c){return this.G(this,A.J("$3","$3",0,[a,b,c],[],0))}, +$4(a,b,c,d){return this.G(this,A.J("$4","$4",0,[a,b,c,d],[],0))}, +$3$3(a,b,c,d,e,f){return this.G(this,A.J("$3$3","$3$3",0,[a,b,c,d,e,f],[],3))}, +$2$2(a,b,c,d){return this.G(this,A.J("$2$2","$2$2",0,[a,b,c,d],[],2))}, +$1$hostElementAttributes(a){return this.G(this,A.J("$1$hostElementAttributes","$1$hostElementAttributes",0,[a],["hostElementAttributes"],0))}, +$1$highContrast(a){return this.G(this,A.J("$1$highContrast","$1$highContrast",0,[a],["highContrast"],0))}, +$1$accessibilityFeatures(a){return this.G(this,A.J("$1$accessibilityFeatures","$1$accessibilityFeatures",0,[a],["accessibilityFeatures"],0))}, +$3$replace$state(a,b,c){return this.G(this,A.J("$3$replace$state","$3$replace$state",0,[a,b,c],["replace","state"],0))}, +$2$path(a,b){return this.G(this,A.J("$2$path","$2$path",0,[a,b],["path"],0))}, +$1$2(a,b,c){return this.G(this,A.J("$1$2","$1$2",0,[a,b,c],[],1))}, +$1$growable(a){return this.G(this,A.J("$1$growable","$1$growable",0,[a],["growable"],0))}, +$2$params(a,b){return this.G(this,A.J("$2$params","$2$params",0,[a,b],["params"],0))}, +$3$onAction$onChange(a,b,c){return this.G(this,A.J("$3$onAction$onChange","$3$onAction$onChange",0,[a,b,c],["onAction","onChange"],0))}, +$1$0(a){return this.G(this,A.J("$1$0","$1$0",0,[a],[],1))}, +$1$locales(a){return this.G(this,A.J("$1$locales","$1$locales",0,[a],["locales"],0))}, +$1$textScaleFactor(a){return this.G(this,A.J("$1$textScaleFactor","$1$textScaleFactor",0,[a],["textScaleFactor"],0))}, +$1$platformBrightness(a){return this.G(this,A.J("$1$platformBrightness","$1$platformBrightness",0,[a],["platformBrightness"],0))}, +$12$buttons$change$device$kind$physicalX$physicalY$pressure$pressureMax$scale$signalKind$timeStamp(a,b,c,d,e,f,g,h,i,j,k,l){return this.G(this,A.J("$12$buttons$change$device$kind$physicalX$physicalY$pressure$pressureMax$scale$signalKind$timeStamp","$12$buttons$change$device$kind$physicalX$physicalY$pressure$pressureMax$scale$signalKind$timeStamp",0,[a,b,c,d,e,f,g,h,i,j,k,l],["buttons","change","device","kind","physicalX","physicalY","pressure","pressureMax","scale","signalKind","timeStamp"],0))}, +$13$buttons$change$device$kind$physicalX$physicalY$pressure$pressureMax$scrollDeltaX$scrollDeltaY$signalKind$timeStamp(a,b,c,d,e,f,g,h,i,j,k,l,m){return this.G(this,A.J("$13$buttons$change$device$kind$physicalX$physicalY$pressure$pressureMax$scrollDeltaX$scrollDeltaY$signalKind$timeStamp","$13$buttons$change$device$kind$physicalX$physicalY$pressure$pressureMax$scrollDeltaX$scrollDeltaY$signalKind$timeStamp",0,[a,b,c,d,e,f,g,h,i,j,k,l,m],["buttons","change","device","kind","physicalX","physicalY","pressure","pressureMax","scrollDeltaX","scrollDeltaY","signalKind","timeStamp"],0))}, +$11$buttons$change$device$kind$physicalX$physicalY$pressure$pressureMax$signalKind$timeStamp(a,b,c,d,e,f,g,h,i,j,k){return this.G(this,A.J("$11$buttons$change$device$kind$physicalX$physicalY$pressure$pressureMax$signalKind$timeStamp","$11$buttons$change$device$kind$physicalX$physicalY$pressure$pressureMax$signalKind$timeStamp",0,[a,b,c,d,e,f,g,h,i,j,k],["buttons","change","device","kind","physicalX","physicalY","pressure","pressureMax","signalKind","timeStamp"],0))}, +$10$buttons$change$device$physicalX$physicalY$pressure$pressureMax$signalKind$timeStamp(a,b,c,d,e,f,g,h,i,j){return this.G(this,A.J("$10$buttons$change$device$physicalX$physicalY$pressure$pressureMax$signalKind$timeStamp","$10$buttons$change$device$physicalX$physicalY$pressure$pressureMax$signalKind$timeStamp",0,[a,b,c,d,e,f,g,h,i,j],["buttons","change","device","physicalX","physicalY","pressure","pressureMax","signalKind","timeStamp"],0))}, +$4$checkModifiers(a,b,c,d){return this.G(this,A.J("$4$checkModifiers","$4$checkModifiers",0,[a,b,c,d],["checkModifiers"],0))}, +$12$buttons$change$device$kind$physicalX$physicalY$pressure$pressureMax$signalKind$tilt$timeStamp(a,b,c,d,e,f,g,h,i,j,k,l){return this.G(this,A.J("$12$buttons$change$device$kind$physicalX$physicalY$pressure$pressureMax$signalKind$tilt$timeStamp","$12$buttons$change$device$kind$physicalX$physicalY$pressure$pressureMax$signalKind$tilt$timeStamp",0,[a,b,c,d,e,f,g,h,i,j,k,l],["buttons","change","device","kind","physicalX","physicalY","pressure","pressureMax","signalKind","tilt","timeStamp"],0))}, +$1$accessibleNavigation(a){return this.G(this,A.J("$1$accessibleNavigation","$1$accessibleNavigation",0,[a],["accessibleNavigation"],0))}, +$1$semanticsEnabled(a){return this.G(this,A.J("$1$semanticsEnabled","$1$semanticsEnabled",0,[a],["semanticsEnabled"],0))}, +$4$cancelOnError$onDone$onError(a,b,c,d){return this.G(this,A.J("$4$cancelOnError$onDone$onError","$4$cancelOnError$onDone$onError",0,[a,b,c,d],["cancelOnError","onDone","onError"],0))}, +$1$style(a){return this.G(this,A.J("$1$style","$1$style",0,[a],["style"],0))}, +$2$priority$scheduler(a,b){return this.G(this,A.J("$2$priority$scheduler","$2$priority$scheduler",0,[a,b],["priority","scheduler"],0))}, +$2$position(a,b){return this.G(this,A.J("$2$position","$2$position",0,[a,b],["position"],0))}, +$1$bodyColor(a){return this.G(this,A.J("$1$bodyColor","$1$bodyColor",0,[a],["bodyColor"],0))}, +$2$aspect(a,b){return this.G(this,A.J("$2$aspect","$2$aspect",0,[a,b],["aspect"],0))}, +$1$findFirstFocus(a){return this.G(this,A.J("$1$findFirstFocus","$1$findFirstFocus",0,[a],["findFirstFocus"],0))}, +$1$withDelay(a){return this.G(this,A.J("$1$withDelay","$1$withDelay",0,[a],["withDelay"],0))}, +$1$2$arguments(a,b,c){return this.G(this,A.J("$1$2$arguments","$1$2$arguments",0,[a,b,c],["arguments"],1))}, +$2$type(a,b){return this.G(this,A.J("$2$type","$2$type",0,[a,b],["type"],0))}, +$1$matches(a){return this.G(this,A.J("$1$matches","$1$matches",0,[a],["matches"],0))}, +$5(a,b,c,d,e){return this.G(this,A.J("$5","$5",0,[a,b,c,d,e],[],0))}, +$1$range(a){return this.G(this,A.J("$1$range","$1$range",0,[a],["range"],0))}, +$2$after(a,b){return this.G(this,A.J("$2$after","$2$after",0,[a,b],["after"],0))}, +$1$reversed(a){return this.G(this,A.J("$1$reversed","$1$reversed",0,[a],["reversed"],0))}, +$2$alignmentPolicy(a,b){return this.G(this,A.J("$2$alignmentPolicy","$2$alignmentPolicy",0,[a,b],["alignmentPolicy"],0))}, +$2$ignoreCurrentFocus(a,b){return this.G(this,A.J("$2$ignoreCurrentFocus","$2$ignoreCurrentFocus",0,[a,b],["ignoreCurrentFocus"],0))}, +$1$paragraphWidth(a){return this.G(this,A.J("$1$paragraphWidth","$1$paragraphWidth",0,[a],["paragraphWidth"],0))}, +$21$background$color$decoration$decorationColor$decorationStyle$decorationThickness$fontFamily$fontFamilyFallback$fontFeatures$fontSize$fontStyle$fontVariations$fontWeight$foreground$height$leadingDistribution$letterSpacing$locale$shadows$textBaseline$wordSpacing(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1){return this.G(this,A.J("$21$background$color$decoration$decorationColor$decorationStyle$decorationThickness$fontFamily$fontFamilyFallback$fontFeatures$fontSize$fontStyle$fontVariations$fontWeight$foreground$height$leadingDistribution$letterSpacing$locale$shadows$textBaseline$wordSpacing","$21$background$color$decoration$decorationColor$decorationStyle$decorationThickness$fontFamily$fontFamilyFallback$fontFeatures$fontSize$fontStyle$fontVariations$fontWeight$foreground$height$leadingDistribution$letterSpacing$locale$shadows$textBaseline$wordSpacing",0,[a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0,a1],["background","color","decoration","decorationColor","decorationStyle","decorationThickness","fontFamily","fontFamilyFallback","fontFeatures","fontSize","fontStyle","fontVariations","fontWeight","foreground","height","leadingDistribution","letterSpacing","locale","shadows","textBaseline","wordSpacing"],0))}, +$12$ellipsis$fontFamily$fontSize$fontStyle$fontWeight$height$locale$maxLines$strutStyle$textAlign$textDirection$textHeightBehavior(a,b,c,d,e,f,g,h,i,j,k,l){return this.G(this,A.J("$12$ellipsis$fontFamily$fontSize$fontStyle$fontWeight$height$locale$maxLines$strutStyle$textAlign$textDirection$textHeightBehavior","$12$ellipsis$fontFamily$fontSize$fontStyle$fontWeight$height$locale$maxLines$strutStyle$textAlign$textDirection$textHeightBehavior",0,[a,b,c,d,e,f,g,h,i,j,k,l],["ellipsis","fontFamily","fontSize","fontStyle","fontWeight","height","locale","maxLines","strutStyle","textAlign","textDirection","textHeightBehavior"],0))}, +$9$fontFamily$fontFamilyFallback$fontSize$fontStyle$fontWeight$forceStrutHeight$height$leading$leadingDistribution(a,b,c,d,e,f,g,h,i){return this.G(this,A.J("$9$fontFamily$fontFamilyFallback$fontSize$fontStyle$fontWeight$forceStrutHeight$height$leading$leadingDistribution","$9$fontFamily$fontFamilyFallback$fontSize$fontStyle$fontWeight$forceStrutHeight$height$leading$leadingDistribution",0,[a,b,c,d,e,f,g,h,i],["fontFamily","fontFamilyFallback","fontSize","fontStyle","fontWeight","forceStrutHeight","height","leading","leadingDistribution"],0))}, +$4$boxHeightStyle$boxWidthStyle(a,b,c,d){return this.G(this,A.J("$4$boxHeightStyle$boxWidthStyle","$4$boxHeightStyle$boxWidthStyle",0,[a,b,c,d],["boxHeightStyle","boxWidthStyle"],0))}, +$2$end$start(a,b){return this.G(this,A.J("$2$end$start","$2$end$start",0,[a,b],["end","start"],0))}, +$3$dimensions$textScaler(a,b,c){return this.G(this,A.J("$3$dimensions$textScaler","$3$dimensions$textScaler",0,[a,b,c],["dimensions","textScaler"],0))}, +$3$boxHeightStyle(a,b,c){return this.G(this,A.J("$3$boxHeightStyle","$3$boxHeightStyle",0,[a,b,c],["boxHeightStyle"],0))}, +$3$includePlaceholders$includeSemanticsLabels(a,b,c){return this.G(this,A.J("$3$includePlaceholders$includeSemanticsLabels","$3$includePlaceholders$includeSemanticsLabels",0,[a,b,c],["includePlaceholders","includeSemanticsLabels"],0))}, +$8$color$fill$grade$opacity$opticalSize$shadows$size$weight(a,b,c,d,e,f,g,h){return this.G(this,A.J("$8$color$fill$grade$opacity$opticalSize$shadows$size$weight","$8$color$fill$grade$opacity$opticalSize$shadows$size$weight",0,[a,b,c,d,e,f,g,h],["color","fill","grade","opacity","opticalSize","shadows","size","weight"],0))}, +$1$color(a){return this.G(this,A.J("$1$color","$1$color",0,[a],["color"],0))}, +$3$textDirection(a,b,c){return this.G(this,A.J("$3$textDirection","$3$textDirection",0,[a,b,c],["textDirection"],0))}, +$3$debugReport(a,b,c){return this.G(this,A.J("$3$debugReport","$3$debugReport",0,[a,b,c],["debugReport"],0))}, +$3$cancel$down$reason(a,b,c){return this.G(this,A.J("$3$cancel$down$reason","$3$cancel$down$reason",0,[a,b,c],["cancel","down","reason"],0))}, +$2$down$up(a,b){return this.G(this,A.J("$2$down$up","$2$down$up",0,[a,b],["down","up"],0))}, +$1$down(a){return this.G(this,A.J("$1$down","$1$down",0,[a],["down"],0))}, +$2$value(a,b){return this.G(this,A.J("$2$value","$2$value",0,[a,b],["value"],0))}, +$1$context(a){return this.G(this,A.J("$1$context","$1$context",0,[a],["context"],0))}, +$11$borderRadius$color$containedInkWell$controller$customBorder$onRemoved$position$radius$rectCallback$referenceBox$textDirection(a,b,c,d,e,f,g,h,i,j,k){return this.G(this,A.J("$11$borderRadius$color$containedInkWell$controller$customBorder$onRemoved$position$radius$rectCallback$referenceBox$textDirection","$11$borderRadius$color$containedInkWell$controller$customBorder$onRemoved$position$radius$rectCallback$referenceBox$textDirection",0,[a,b,c,d,e,f,g,h,i,j,k],["borderRadius","color","containedInkWell","controller","customBorder","onRemoved","position","radius","rectCallback","referenceBox","textDirection"],0))}, +$1$details(a){return this.G(this,A.J("$1$details","$1$details",0,[a],["details"],0))}, +$2$textDirection(a,b){return this.G(this,A.J("$2$textDirection","$2$textDirection",0,[a,b],["textDirection"],0))}, +$2$reversed(a,b){return this.G(this,A.J("$2$reversed","$2$reversed",0,[a,b],["reversed"],0))}, +$2$minHeight$minWidth(a,b){return this.G(this,A.J("$2$minHeight$minWidth","$2$minHeight$minWidth",0,[a,b],["minHeight","minWidth"],0))}, +$1$isBuildFromExternalSources(a){return this.G(this,A.J("$1$isBuildFromExternalSources","$1$isBuildFromExternalSources",0,[a],["isBuildFromExternalSources"],0))}, +$5$arguments$child$key$name$restorationId(a,b,c,d,e){return this.G(this,A.J("$5$arguments$child$key$name$restorationId","$5$arguments$child$key$name$restorationId",0,[a,b,c,d,e],["arguments","child","key","name","restorationId"],0))}, +$1$5(a,b,c,d,e,f){return this.G(this,A.J("$1$5","$1$5",0,[a,b,c,d,e,f],[],1))}, +$2$padding$viewPadding(a,b){return this.G(this,A.J("$2$padding$viewPadding","$2$padding$viewPadding",0,[a,b],["padding","viewPadding"],0))}, +$1$textScaler(a){return this.G(this,A.J("$1$textScaler","$1$textScaler",0,[a],["textScaler"],0))}, +$3$sigmaX$sigmaY$tileMode(a,b,c){return this.G(this,A.J("$3$sigmaX$sigmaY$tileMode","$3$sigmaX$sigmaY$tileMode",0,[a,b,c],["sigmaX","sigmaY","tileMode"],0))}, +$1$bottom(a){return this.G(this,A.J("$1$bottom","$1$bottom",0,[a],["bottom"],0))}, +$1$removeTop(a){return this.G(this,A.J("$1$removeTop","$1$removeTop",0,[a],["removeTop"],0))}, +$1$viewInsets(a){return this.G(this,A.J("$1$viewInsets","$1$viewInsets",0,[a],["viewInsets"],0))}, +$1$top(a){return this.G(this,A.J("$1$top","$1$top",0,[a],["top"],0))}, +$2$padding$viewInsets(a,b){return this.G(this,A.J("$2$padding$viewInsets","$2$padding$viewInsets",0,[a,b],["padding","viewInsets"],0))}, +$2$maxWidth$minWidth(a,b){return this.G(this,A.J("$2$maxWidth$minWidth","$2$maxWidth$minWidth",0,[a,b],["maxWidth","minWidth"],0))}, +$2$maxHeight$minHeight(a,b){return this.G(this,A.J("$2$maxHeight$minHeight","$2$maxHeight$minHeight",0,[a,b],["maxHeight","minHeight"],0))}, +$1$side(a){return this.G(this,A.J("$1$side","$1$side",0,[a],["side"],0))}, +$2$color$fontSize(a,b){return this.G(this,A.J("$2$color$fontSize","$2$color$fontSize",0,[a,b],["color","fontSize"],0))}, +$2$cause$from(a,b){return this.G(this,A.J("$2$cause$from","$2$cause$from",0,[a,b],["cause","from"],0))}, +$1$selection(a){return this.G(this,A.J("$1$selection","$1$selection",0,[a],["selection"],0))}, +$1$rect(a){return this.G(this,A.J("$1$rect","$1$rect",0,[a],["rect"],0))}, +$4$curve$descendant$duration$rect(a,b,c,d){return this.G(this,A.J("$4$curve$descendant$duration$rect","$4$curve$descendant$duration$rect",0,[a,b,c,d],["curve","descendant","duration","rect"],0))}, +$5$baseline$baselineOffset(a,b,c,d,e){return this.G(this,A.J("$5$baseline$baselineOffset","$5$baseline$baselineOffset",0,[a,b,c,d,e],["baseline","baselineOffset"],0))}, +$3$curve$duration$rect(a,b,c){return this.G(this,A.J("$3$curve$duration$rect","$3$curve$duration$rect",0,[a,b,c],["curve","duration","rect"],0))}, +$1$composing(a){return this.G(this,A.J("$1$composing","$1$composing",0,[a],["composing"],0))}, +$1$affinity(a){return this.G(this,A.J("$1$affinity","$1$affinity",0,[a],["affinity"],0))}, +$3$code$details$message(a,b,c){return this.G(this,A.J("$3$code$details$message","$3$code$details$message",0,[a,b,c],["code","details","message"],0))}, +$2$code$message(a,b){return this.G(this,A.J("$2$code$message","$2$code$message",0,[a,b],["code","message"],0))}, +$2$overscroll$scrollbars(a,b){return this.G(this,A.J("$2$overscroll$scrollbars","$2$overscroll$scrollbars",0,[a,b],["overscroll","scrollbars"],0))}, +$2$baseOffset$extentOffset(a,b){return this.G(this,A.J("$2$baseOffset$extentOffset","$2$baseOffset$extentOffset",0,[a,b],["baseOffset","extentOffset"],0))}, +$2$0(a,b){return this.G(this,A.J("$2$0","$2$0",0,[a,b],[],2))}, +$2$affinity$extentOffset(a,b){return this.G(this,A.J("$2$affinity$extentOffset","$2$affinity$extentOffset",0,[a,b],["affinity","extentOffset"],0))}, +$1$extentOffset(a){return this.G(this,A.J("$1$extentOffset","$1$extentOffset",0,[a],["extentOffset"],0))}, +$1$text(a){return this.G(this,A.J("$1$text","$1$text",0,[a],["text"],0))}, +$9$ascent$baseline$descent$hardBreak$height$left$lineNumber$unscaledAscent$width(a,b,c,d,e,f,g,h,i){return this.G(this,A.J("$9$ascent$baseline$descent$hardBreak$height$left$lineNumber$unscaledAscent$width","$9$ascent$baseline$descent$hardBreak$height$left$lineNumber$unscaledAscent$width",0,[a,b,c,d,e,f,g,h,i],["ascent","baseline","descent","hardBreak","height","left","lineNumber","unscaledAscent","width"],0))}, +$2$composing$selection(a,b){return this.G(this,A.J("$2$composing$selection","$2$composing$selection",0,[a,b],["composing","selection"],0))}, +$8$removeBottomInset$removeBottomPadding$removeLeftPadding$removeRightPadding$removeTopPadding(a,b,c,d,e,f,g,h){return this.G(this,A.J("$8$removeBottomInset$removeBottomPadding$removeLeftPadding$removeRightPadding$removeTopPadding","$8$removeBottomInset$removeBottomPadding$removeLeftPadding$removeRightPadding$removeTopPadding",0,[a,b,c,d,e,f,g,h],["removeBottomInset","removeBottomPadding","removeLeftPadding","removeRightPadding","removeTopPadding"],0))}, +$7$removeBottomPadding$removeLeftPadding$removeRightPadding$removeTopPadding(a,b,c,d,e,f,g){return this.G(this,A.J("$7$removeBottomPadding$removeLeftPadding$removeRightPadding$removeTopPadding","$7$removeBottomPadding$removeLeftPadding$removeRightPadding$removeTopPadding",0,[a,b,c,d,e,f,g],["removeBottomPadding","removeLeftPadding","removeRightPadding","removeTopPadding"],0))}, +$8$maintainBottomViewPadding$removeBottomPadding$removeLeftPadding$removeRightPadding$removeTopPadding(a,b,c,d,e,f,g,h){return this.G(this,A.J("$8$maintainBottomViewPadding$removeBottomPadding$removeLeftPadding$removeRightPadding$removeTopPadding","$8$maintainBottomViewPadding$removeBottomPadding$removeLeftPadding$removeRightPadding$removeTopPadding",0,[a,b,c,d,e,f,g,h],["maintainBottomViewPadding","removeBottomPadding","removeLeftPadding","removeRightPadding","removeTopPadding"],0))}, +$1$floatingActionButtonScale(a){return this.G(this,A.J("$1$floatingActionButtonScale","$1$floatingActionButtonScale",0,[a],["floatingActionButtonScale"],0))}, +$1$padding(a){return this.G(this,A.J("$1$padding","$1$padding",0,[a],["padding"],0))}, +$2$viewInsets$viewPadding(a,b){return this.G(this,A.J("$2$viewInsets$viewPadding","$2$viewInsets$viewPadding",0,[a,b],["viewInsets","viewPadding"],0))}, +$3$foregroundColor$iconSize$overlayColor(a,b,c){return this.G(this,A.J("$3$foregroundColor$iconSize$overlayColor","$3$foregroundColor$iconSize$overlayColor",0,[a,b,c],["foregroundColor","iconSize","overlayColor"],0))}, +$1$path(a){return this.G(this,A.J("$1$path","$1$path",0,[a],["path"],0))}, +$2$bottom$top(a,b){return this.G(this,A.J("$2$bottom$top","$2$bottom$top",0,[a,b],["bottom","top"],0))}, +$2$left$right(a,b){return this.G(this,A.J("$2$left$right","$2$left$right",0,[a,b],["left","right"],0))}, +$3$rect(a,b,c){return this.G(this,A.J("$3$rect","$3$rect",0,[a,b,c],["rect"],0))}, +$2$hitTest$paintTransform(a,b){return this.G(this,A.J("$2$hitTest$paintTransform","$2$hitTest$paintTransform",0,[a,b],["hitTest","paintTransform"],0))}, +$3$crossAxisPosition$mainAxisPosition(a,b,c){return this.G(this,A.J("$3$crossAxisPosition$mainAxisPosition","$3$crossAxisPosition$mainAxisPosition",0,[a,b,c],["crossAxisPosition","mainAxisPosition"],0))}, +$2$hitTest$paintOffset(a,b){return this.G(this,A.J("$2$hitTest$paintOffset","$2$hitTest$paintOffset",0,[a,b],["hitTest","paintOffset"],0))}, +$8$enableDomStorage$enableJavaScript$headers$universalLinksOnly$useSafariVC$useWebView$webOnlyWindowName(a,b,c,d,e,f,g,h){return this.G(this,A.J("$8$enableDomStorage$enableJavaScript$headers$universalLinksOnly$useSafariVC$useWebView$webOnlyWindowName","$8$enableDomStorage$enableJavaScript$headers$universalLinksOnly$useSafariVC$useWebView$webOnlyWindowName",0,[a,b,c,d,e,f,g,h],["enableDomStorage","enableJavaScript","headers","universalLinksOnly","useSafariVC","useWebView","webOnlyWindowName"],0))}, +$5$colors$indices$textureCoordinates(a,b,c,d,e){return this.G(this,A.J("$5$colors$indices$textureCoordinates","$5$colors$indices$textureCoordinates",0,[a,b,c,d,e],["colors","indices","textureCoordinates"],0))}, +$3$context$exception$stack(a,b,c){return this.G(this,A.J("$3$context$exception$stack","$3$context$exception$stack",0,[a,b,c],["context","exception","stack"],0))}, +$4$allowUpscaling$targetHeight$targetWidth(a,b,c,d){return this.G(this,A.J("$4$allowUpscaling$targetHeight$targetWidth","$4$allowUpscaling$targetHeight$targetWidth",0,[a,b,c,d],["allowUpscaling","targetHeight","targetWidth"],0))}, +$6(a,b,c,d,e,f){return this.G(this,A.J("$6","$6",0,[a,b,c,d,e,f],[],0))}, +$8(a,b,c,d,e,f,g,h){return this.G(this,A.J("$8","$8",0,[a,b,c,d,e,f,g,h],[],0))}, +$2$replace(a,b){return this.G(this,A.J("$2$replace","$2$replace",0,[a,b],["replace"],0))}, +$4$clipResolver$maskResolver$patternResolver(a,b,c,d){return this.G(this,A.J("$4$clipResolver$maskResolver$patternResolver","$4$clipResolver$maskResolver$patternResolver",0,[a,b,c,d],["clipResolver","maskResolver","patternResolver"],0))}, +$5$autofocus$focusNode$mouseCursor$painter$size(a,b,c,d,e){return this.G(this,A.J("$5$autofocus$focusNode$mouseCursor$painter$size","$5$autofocus$focusNode$mouseCursor$painter$size",0,[a,b,c,d,e],["autofocus","focusNode","mouseCursor","painter","size"],0))}, +$1$task(a){return this.G(this,A.J("$1$task","$1$task",0,[a],["task"],0))}, +$1$oldWidget(a){return this.G(this,A.J("$1$oldWidget","$1$oldWidget",0,[a],["oldWidget"],0))}, +$1$maxScaleFactor(a){return this.G(this,A.J("$1$maxScaleFactor","$1$maxScaleFactor",0,[a],["maxScaleFactor"],0))}, +$3$isDiscrete$parentBox$sliderTheme(a,b,c){return this.G(this,A.J("$3$isDiscrete$parentBox$sliderTheme","$3$isDiscrete$parentBox$sliderTheme",0,[a,b,c],["isDiscrete","parentBox","sliderTheme"],0))}, +$1$scatterTouchData(a){return this.G(this,A.J("$1$scatterTouchData","$1$scatterTouchData",0,[a],["scatterTouchData"],0))}, +$4$baseLine$interval$max$min(a,b,c,d){return this.G(this,A.J("$4$baseLine$interval$max$min","$4$baseLine$interval$max$min",0,[a,b,c,d],["baseLine","interval","max","min"],0))}, +$1$showingTooltipIndicators(a){return this.G(this,A.J("$1$showingTooltipIndicators","$1$showingTooltipIndicators",0,[a],["showingTooltipIndicators"],0))}, +$1$barGroups(a){return this.G(this,A.J("$1$barGroups","$1$barGroups",0,[a],["barGroups"],0))}, +$1$barTouchData(a){return this.G(this,A.J("$1$barTouchData","$1$barTouchData",0,[a],["barTouchData"],0))}, +$1$barRods(a){return this.G(this,A.J("$1$barRods","$1$barRods",0,[a],["barRods"],0))}, +$3$isTouched(a,b,c){return this.G(this,A.J("$3$isTouched","$3$isTouched",0,[a,b,c],["isTouched"],0))}, +$3$barColor(a,b,c){return this.G(this,A.J("$3$barColor","$3$barColor",0,[a,b,c],["barColor"],0))}, +$1$lineTouchData(a){return this.G(this,A.J("$1$lineTouchData","$1$lineTouchData",0,[a],["lineTouchData"],0))}, +$2$lineBarsData$showingTooltipIndicators(a,b){return this.G(this,A.J("$2$lineBarsData$showingTooltipIndicators","$2$lineBarsData$showingTooltipIndicators",0,[a,b],["lineBarsData","showingTooltipIndicators"],0))}, +$1$showingIndicators(a){return this.G(this,A.J("$1$showingIndicators","$1$showingIndicators",0,[a],["showingIndicators"],0))}, +$1$y(a){return this.G(this,A.J("$1$y","$1$y",0,[a],["y"],0))}, +$3$bodyColor$decorationColor$displayColor(a,b,c){return this.G(this,A.J("$3$bodyColor$decorationColor$displayColor","$3$bodyColor$decorationColor$displayColor",0,[a,b,c],["bodyColor","decorationColor","displayColor"],0))}, +$18$background$backgroundColor$color$decoration$decorationColor$decorationStyle$decorationThickness$fontFeatures$fontSize$fontStyle$fontWeight$foreground$height$letterSpacing$locale$shadows$textBaseline$wordSpacing(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r){return this.G(this,A.J("$18$background$backgroundColor$color$decoration$decorationColor$decorationStyle$decorationThickness$fontFeatures$fontSize$fontStyle$fontWeight$foreground$height$letterSpacing$locale$shadows$textBaseline$wordSpacing","$18$background$backgroundColor$color$decoration$decorationColor$decorationStyle$decorationThickness$fontFeatures$fontSize$fontStyle$fontWeight$foreground$height$letterSpacing$locale$shadows$textBaseline$wordSpacing",0,[a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r],["background","backgroundColor","color","decoration","decorationColor","decorationStyle","decorationThickness","fontFeatures","fontSize","fontStyle","fontWeight","foreground","height","letterSpacing","locale","shadows","textBaseline","wordSpacing"],0))}, +$2$fontFamily$fontFamilyFallback(a,b){return this.G(this,A.J("$2$fontFamily$fontFamilyFallback","$2$fontFamily$fontFamilyFallback",0,[a,b],["fontFamily","fontFamilyFallback"],0))}, +$3$async(a,b,c){return this.G(this,A.J("$3$async","$3$async",0,[a,b,c],["async"],0))}, +$2$fontFamily(a,b){return this.G(this,A.J("$2$fontFamily","$2$fontFamily",0,[a,b],["fontFamily"],0))}, +$1$includeChildren(a){return this.G(this,A.J("$1$includeChildren","$1$includeChildren",0,[a],["includeChildren"],0))}, +$1$direction(a){return this.G(this,A.J("$1$direction","$1$direction",0,[a],["direction"],0))}, +$1$spellCheckService(a){return this.G(this,A.J("$1$spellCheckService","$1$spellCheckService",0,[a],["spellCheckService"],0))}, +$5$elevationAdjustment$parentPaintClipRect$parentSemanticsClipRect$result$siblingNodes(a,b,c,d,e){return this.G(this,A.J("$5$elevationAdjustment$parentPaintClipRect$parentSemanticsClipRect$result$siblingNodes","$5$elevationAdjustment$parentPaintClipRect$parentSemanticsClipRect$result$siblingNodes",0,[a,b,c,d,e],["elevationAdjustment","parentPaintClipRect","parentSemanticsClipRect","result","siblingNodes"],0))}, +$1$config(a){return this.G(this,A.J("$1$config","$1$config",0,[a],["config"],0))}, +$2$descendant$rect(a,b){return this.G(this,A.J("$2$descendant$rect","$2$descendant$rect",0,[a,b],["descendant","rect"],0))}, +$2$ignoreRasterCache(a,b){return this.G(this,A.J("$2$ignoreRasterCache","$2$ignoreRasterCache",0,[a,b],["ignoreRasterCache"],0))}, +$1$3$onlyFirst(a,b,c,d){return this.G(this,A.J("$1$3$onlyFirst","$1$3$onlyFirst",0,[a,b,c,d],["onlyFirst"],1))}, +$3$oldLayer(a,b,c){return this.G(this,A.J("$3$oldLayer","$3$oldLayer",0,[a,b,c],["oldLayer"],0))}, +$2$oldLayer(a,b){return this.G(this,A.J("$2$oldLayer","$2$oldLayer",0,[a,b],["oldLayer"],0))}, +$1$oldLayer(a){return this.G(this,A.J("$1$oldLayer","$1$oldLayer",0,[a],["oldLayer"],0))}, +$3$offset$oldLayer(a,b,c){return this.G(this,A.J("$3$offset$oldLayer","$3$offset$oldLayer",0,[a,b,c],["offset","oldLayer"],0))}, +$4$isComplexHint$willChangeHint(a,b,c,d){return this.G(this,A.J("$4$isComplexHint$willChangeHint","$4$isComplexHint$willChangeHint",0,[a,b,c,d],["isComplexHint","willChangeHint"],0))}, +$4$in1$in2$operator$result(a,b,c,d){return this.G(this,A.J("$4$in1$in2$operator$result","$4$in1$in2$operator$result",0,[a,b,c,d],["in1","in2","operator","result"],0))}, +$1$maxWidth(a){return this.G(this,A.J("$1$maxWidth","$1$maxWidth",0,[a],["maxWidth"],0))}, +$4$angle$drawCallback$drawOffset$size(a,b,c,d){return this.G(this,A.J("$4$angle$drawCallback$drawOffset$size","$4$angle$drawCallback$drawOffset$size",0,[a,b,c,d],["angle","drawCallback","drawOffset","size"],0))}, +$1$spots(a){return this.G(this,A.J("$1$spots","$1$spots",0,[a],["spots"],0))}, +$3$clipOp$doAntiAlias(a,b,c){return this.G(this,A.J("$3$clipOp$doAntiAlias","$3$clipOp$doAntiAlias",0,[a,b,c],["clipOp","doAntiAlias"],0))}, +$3$clipBehavior$oldLayer(a,b,c){return this.G(this,A.J("$3$clipBehavior$oldLayer","$3$clipBehavior$oldLayer",0,[a,b,c],["clipBehavior","oldLayer"],0))}, +$2$doAntiAlias(a,b){return this.G(this,A.J("$2$doAntiAlias","$2$doAntiAlias",0,[a,b],["doAntiAlias"],0))}, +$4$isDiscrete$offset$parentBox$sliderTheme(a,b,c,d){return this.G(this,A.J("$4$isDiscrete$offset$parentBox$sliderTheme","$4$isDiscrete$offset$parentBox$sliderTheme",0,[a,b,c,d],["isDiscrete","offset","parentBox","sliderTheme"],0))}, +$2$nextTo(a,b){return this.G(this,A.J("$2$nextTo","$2$nextTo",0,[a,b],["nextTo"],0))}, +$3$blendMode$oldLayer(a,b,c){return this.G(this,A.J("$3$blendMode$oldLayer","$3$blendMode$oldLayer",0,[a,b,c],["blendMode","oldLayer"],0))}, +$2$filterQuality(a,b){return this.G(this,A.J("$2$filterQuality","$2$filterQuality",0,[a,b],["filterQuality"],0))}, +$6$oldLayer(a,b,c,d,e,f){return this.G(this,A.J("$6$oldLayer","$6$oldLayer",0,[a,b,c,d,e,f],["oldLayer"],0))}, +$4$textDirection(a,b,c,d){return this.G(this,A.J("$4$textDirection","$4$textDirection",0,[a,b,c,d],["textDirection"],0))}, +$6$blend$blendMode(a,b,c,d,e,f){return this.G(this,A.J("$6$blend$blendMode","$6$blend$blendMode",0,[a,b,c,d,e,f],["blend","blendMode"],0))}, +$2$radius(a,b){return this.G(this,A.J("$2$radius","$2$radius",0,[a,b],["radius"],0))}, +$5$borderRadius$shape$textDirection(a,b,c,d,e){return this.G(this,A.J("$5$borderRadius$shape$textDirection","$5$borderRadius$shape$textDirection",0,[a,b,c,d,e],["borderRadius","shape","textDirection"],0))}, +$2$parentUsesSize(a,b){return this.G(this,A.J("$2$parentUsesSize","$2$parentUsesSize",0,[a,b],["parentUsesSize"],0))}, +$1$maxHeight(a){return this.G(this,A.J("$1$maxHeight","$1$maxHeight",0,[a],["maxHeight"],0))}, +$4$isScrolling$newPosition$oldPosition$velocity(a,b,c,d){return this.G(this,A.J("$4$isScrolling$newPosition$oldPosition$velocity","$4$isScrolling$newPosition$oldPosition$velocity",0,[a,b,c,d],["isScrolling","newPosition","oldPosition","velocity"],0))}, +$1$crossAxisExtent(a){return this.G(this,A.J("$1$crossAxisExtent","$1$crossAxisExtent",0,[a],["crossAxisExtent"],0))}, +$1$height(a){return this.G(this,A.J("$1$height","$1$height",0,[a],["height"],0))}, +$1$width(a){return this.G(this,A.J("$1$width","$1$width",0,[a],["width"],0))}, +$2$bottomNavigationBarTop$floatingActionButtonArea(a,b){return this.G(this,A.J("$2$bottomNavigationBarTop$floatingActionButtonArea","$2$bottomNavigationBarTop$floatingActionButtonArea",0,[a,b],["bottomNavigationBarTop","floatingActionButtonArea"],0))}, +$1$end(a){return this.G(this,A.J("$1$end","$1$end",0,[a],["end"],0))}, +$1$line(a){return this.G(this,A.J("$1$line","$1$line",0,[a],["line"],0))}, +$2$color(a,b){return this.G(this,A.J("$2$color","$2$color",0,[a,b],["color"],0))}, +$2$withDrive(a,b){return this.G(this,A.J("$2$withDrive","$2$withDrive",0,[a,b],["withDrive"],0))}, +i(a,b){return this.G(a,A.J("i","i",0,[b],[],0))}, +m0(){return this.G(this,A.J("m0","m0",0,[],[],0))}, +H1(a){return this.G(this,A.J("H1","H1",0,[a],[],0))}, +yT(a){return this.G(this,A.J("yT","yT",0,[a],[],0))}, +by(){return this.G(this,A.J("by","by",0,[],[],0))}, +lu(){return this.G(this,A.J("lu","lu",0,[],[],0))}, +Y(a,b){return this.G(a,A.J("Y","Y",0,[b],[],0))}, +S(a,b){return this.G(a,A.J("S","S",0,[b],[],0))}, +R(a,b){return this.G(a,A.J("R","R",0,[b],[],0))}, +q6(a){return this.G(a,A.J("q6","q6",0,[],[],0))}, +gab(a){return this.G(a,A.J("gab","gab",1,[],[],0))}, +gu(a){return this.G(a,A.J("gu","gu",1,[],[],0))}, +gdt(a){return this.G(a,A.J("gdt","gdt",1,[],[],0))}, +ghX(){return this.G(this,A.J("ghX","ghX",1,[],[],0))}, +gcG(){return this.G(this,A.J("gcG","gcG",1,[],[],0))}, +giH(){return this.G(this,A.J("giH","giH",1,[],[],0))}, +ghf(a){return this.G(a,A.J("ghf","ghf",1,[],[],0))}, +gjN(a){return this.G(a,A.J("gjN","gjN",1,[],[],0))}, +shX(a){return this.G(this,A.J("shX","shX",2,[a],[],0))}, +scG(a){return this.G(this,A.J("scG","scG",2,[a],[],0))}, +siH(a){return this.G(this,A.J("siH","siH",2,[a],[],0))}, +sdt(a,b){return this.G(a,A.J("sdt","sdt",2,[b],[],0))}} +A.a2F.prototype={ +k(a){return""}, +$idw:1} +A.lT.prototype={ +gWo(){var s=this.gWp() +if($.mp()===1e6)return s +return s*1000}, +gIr(){var s=this.gWp() +if($.mp()===1000)return s +return B.f.d4(s,1000)}, +nC(a){var s=this,r=s.b +if(r!=null){s.a=s.a+($.RQ.$0()-r) +s.b=null}}, +it(a){var s=this.b +this.a=s==null?$.RQ.$0():s}, +gWp(){var s=this.b +if(s==null)s=$.RQ.$0() +return s-this.a}} +A.EY.prototype={ +gab(a){return new A.SY(this.a)}, +gO(a){var s,r,q=this.a,p=q.length +if(p===0)throw A.c(A.Q("No elements.")) +s=q.charCodeAt(p-1) +if((s&64512)===56320&&p>1){r=q.charCodeAt(p-2) +if((r&64512)===55296)return A.aPb(r,s)}return s}} +A.SY.prototype={ +gJ(a){return this.d}, +q(){var s,r,q,p=this,o=p.b=p.c,n=p.a,m=n.length +if(o===m){p.d=-1 +return!1}s=n.charCodeAt(o) +r=o+1 +if((s&64512)===55296&&r4)this.a.$2("an IPv6 part can only contain a maximum of 4 hex digits",a) +s=A.ir(B.d.P(this.b,a,b),16) +if(s<0||s>65535)this.a.$2("each part must be in the range of `0x0..0xFFFF`",a) +return s}, +$S:474} +A.Km.prototype={ +gq3(){var s,r,q,p,o=this,n=o.w +if(n===$){s=o.a +r=s.length!==0?""+s+":":"" +q=o.c +p=q==null +if(!p||s==="file"){s=r+"//" +r=o.b +if(r.length!==0)s=s+r+"@" +if(!p)s+=q +r=o.d +if(r!=null)s=s+":"+A.h(r)}else s=r +s+=o.e +r=o.f +if(r!=null)s=s+"?"+r +r=o.r +if(r!=null)s=s+"#"+r +n!==$&&A.ay() +n=o.w=s.charCodeAt(0)==0?s:s}return n}, +grB(){var s,r,q=this,p=q.x +if(p===$){s=q.e +if(s.length!==0&&s.charCodeAt(0)===47)s=B.d.bL(s,1) +r=s.length===0?B.hA:A.Q0(new A.R(A.a(s.split("/"),t.s),A.b5u(),t.cj),t.N) +q.x!==$&&A.ay() +p=q.x=r}return p}, +gt(a){var s,r=this,q=r.y +if(q===$){s=B.d.gt(r.gq3()) +r.y!==$&&A.ay() +r.y=s +q=s}return q}, +gYS(){var s,r=this,q=r.z +if(q===$){s=r.f +s=A.aNT(s==null?"":s) +r.z!==$&&A.ay() +q=r.z=new A.kH(s,t.G5)}return q}, +glU(){var s,r,q=this,p=q.Q +if(p===$){s=q.f +r=A.b2r(s==null?"":s) +q.Q!==$&&A.ay() +q.Q=r +p=r}return p}, +gwS(){return this.b}, +gjP(a){var s=this.c +if(s==null)return"" +if(B.d.bz(s,"["))return B.d.P(s,1,s.length-1) +return s}, +goY(a){var s=this.d +return s==null?A.aOP(this.a):s}, +glT(a){var s=this.f +return s==null?"":s}, +gj6(){var s=this.r +return s==null?"":s}, +Jh(a){var s=this.a +if(a.length!==s.length)return!1 +return A.aPa(a,s,0)>=0}, +Kk(a,b,c){var s,r,q,p,o=this,n=o.a,m=n==="file",l=o.b,k=o.d,j=o.c +if(!(j!=null))j=l.length!==0||k!=null||m?"":null +s=j!=null +r=b==null +if(!r||!1)b=A.aBL(b,0,r?0:b.length,null,n,s) +else{q=o.e +if(!m)r=s&&q.length!==0 +else r=!0 +if(r&&!B.d.bz(q,"/"))q="/"+q +b=q}if(c!=null)p=A.aBM(null,0,0,c) +else p=o.f +return A.Kn(n,l,j,k,b,p,o.r)}, +Zi(a,b){return this.Kk(a,b,null)}, +Qv(a,b){var s,r,q,p,o,n +for(s=0,r=0;B.d.df(b,"../",r);){r+=3;++s}q=B.d.rq(a,"/") +while(!0){if(!(q>0&&s>0))break +p=B.d.Bj(a,"/",q-1) +if(p<0)break +o=q-p +n=o!==2 +if(!n||o===3)if(a.charCodeAt(p+1)===46)n=!n||a.charCodeAt(p+2)===46 +else n=!1 +else n=!1 +if(n)break;--s +q=p}return B.d.kX(a,q+1,null,B.d.bL(b,r-3*s))}, +U(a){return this.wB(A.eW(a,0,null))}, +wB(a){var s,r,q,p,o,n,m,l,k,j,i=this,h=null +if(a.ge5().length!==0){s=a.ge5() +if(a.gvI()){r=a.gwS() +q=a.gjP(a) +p=a.grg()?a.goY(a):h}else{p=h +q=p +r=""}o=A.o0(a.gcU(a)) +n=a.grh()?a.glT(a):h}else{s=i.a +if(a.gvI()){r=a.gwS() +q=a.gjP(a) +p=A.aHH(a.grg()?a.goY(a):h,s) +o=A.o0(a.gcU(a)) +n=a.grh()?a.glT(a):h}else{r=i.b +q=i.c +p=i.d +o=i.e +if(a.gcU(a)==="")n=a.grh()?a.glT(a):i.f +else{m=A.b2x(i,o) +if(m>0){l=B.d.P(o,0,m) +o=a.gB1()?l+A.o0(a.gcU(a)):l+A.o0(i.Qv(B.d.bL(o,l.length),a.gcU(a)))}else if(a.gB1())o=A.o0(a.gcU(a)) +else if(o.length===0)if(q==null)o=s.length===0?a.gcU(a):A.o0(a.gcU(a)) +else o=A.o0("/"+a.gcU(a)) +else{k=i.Qv(o,a.gcU(a)) +j=s.length===0 +if(!j||q!=null||B.d.bz(o,"/"))o=A.o0(k) +else o=A.aHJ(k,!j||q!=null)}n=a.grh()?a.glT(a):h}}}return A.Kn(s,r,q,p,o,n,a.gJ0()?a.gj6():h)}, +gXb(){return this.a.length!==0}, +gvI(){return this.c!=null}, +grg(){return this.d!=null}, +grh(){return this.f!=null}, +gJ0(){return this.r!=null}, +gB1(){return B.d.bz(this.e,"/")}, +gwk(a){var s,r,q=this,p=q.a +if(p==="")throw A.c(A.Q("Cannot use origin without a scheme: "+q.k(0))) +if(p!=="http"&&p!=="https")throw A.c(A.Q("Origin is only applicable schemes http and https: "+q.k(0))) +s=q.c +if(s==null||s==="")throw A.c(A.Q("A "+p+u.L+q.k(0))) +r=q.d +if(r==null)return p+"://"+A.h(s) +return p+"://"+A.h(s)+":"+A.h(r)}, +Kw(){var s,r=this,q=r.a +if(q!==""&&q!=="file")throw A.c(A.a3("Cannot extract a file path from a "+q+" URI")) +q=r.f +if((q==null?"":q)!=="")throw A.c(A.a3(u.B)) +q=r.r +if((q==null?"":q)!=="")throw A.c(A.a3(u.A)) +q=$.aIY() +if(q)q=A.aOZ(r) +else{if(r.c!=null&&r.gjP(r)!=="")A.T(A.a3(u.Q)) +s=r.grB() +A.b2o(s,!1) +q=A.Ua(B.d.bz(r.e,"/")?""+"/":"",s,"/") +q=q.charCodeAt(0)==0?q:q}return q}, +k(a){return this.gq3()}, +j(a,b){var s,r,q=this +if(b==null)return!1 +if(q===b)return!0 +if(t.Xu.b(b))if(q.a===b.ge5())if(q.c!=null===b.gvI())if(q.b===b.gwS())if(q.gjP(q)===b.gjP(b))if(q.goY(q)===b.goY(b))if(q.e===b.gcU(b)){s=q.f +r=s==null +if(!r===b.grh()){if(r)s="" +if(s===b.glT(b)){s=q.r +r=s==null +if(!r===b.gJ0()){if(r)s="" +s=s===b.gj6()}else s=!1}else s=!1}else s=!1}else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +return s}, +$iV4:1, +ge5(){return this.a}, +gcU(a){return this.e}} +A.aBO.prototype={ +$2(a,b){var s=this.b,r=this.a +s.a+=r.a +r.a="&" +r=s.a+=A.a3U(B.hz,a,B.a2,!0) +if(b!=null&&b.length!==0){s.a=r+"=" +s.a+=A.a3U(B.hz,b,B.a2,!0)}}, +$S:483} +A.aBN.prototype={ +$2(a,b){var s,r +if(b==null||typeof b=="string")this.a.$2(a,b) +else for(s=J.ap(b),r=this.a;s.q();)r.$2(a,s.gJ(s))}, +$S:23} +A.aBP.prototype={ +$3(a,b,c){var s,r,q,p +if(a===c)return +s=this.a +r=this.b +if(b<0){q=A.j6(s,a,c,r,!0) +p=""}else{q=A.j6(s,a,b,r,!0) +p=A.j6(s,b+1,c,r,!0)}J.eo(this.c.bm(0,q,A.b5v()),p)}, +$S:489} +A.arG.prototype={ +gjl(){var s,r,q,p,o=this,n=null,m=o.c +if(m==null){m=o.a +s=o.b[0]+1 +r=B.d.fu(m,"?",s) +q=m.length +if(r>=0){p=A.Ko(m,r+1,q,B.hD,!1,!1) +q=r}else p=n +m=o.c=new A.Xp("data","",n,n,A.Ko(m,s,q,B.pl,!1,!1),p,n)}return m}, +k(a){var s=this.a +return this.b[0]===-1?"data:"+s:s}} +A.aCz.prototype={ +$2(a,b){var s=this.a[a] +B.O.AJ(s,0,96,b) +return s}, +$S:493} +A.aCA.prototype={ +$3(a,b,c){var s,r +for(s=b.length,r=0;r>>0]=c}, +$S:186} +A.jS.prototype={ +gXb(){return this.b>0}, +gvI(){return this.c>0}, +grg(){return this.c>0&&this.d+1=0}, +ge5(){var s=this.w +return s==null?this.w=this.a8v():s}, +a8v(){var s,r=this,q=r.b +if(q<=0)return"" +s=q===4 +if(s&&B.d.bz(r.a,"http"))return"http" +if(q===5&&B.d.bz(r.a,"https"))return"https" +if(s&&B.d.bz(r.a,"file"))return"file" +if(q===7&&B.d.bz(r.a,"package"))return"package" +return B.d.P(r.a,0,q)}, +gwS(){var s=this.c,r=this.b+3 +return s>r?B.d.P(this.a,r,s-1):""}, +gjP(a){var s=this.c +return s>0?B.d.P(this.a,s,this.d):""}, +goY(a){var s,r=this +if(r.grg())return A.ir(B.d.P(r.a,r.d+1,r.e),null) +s=r.b +if(s===4&&B.d.bz(r.a,"http"))return 80 +if(s===5&&B.d.bz(r.a,"https"))return 443 +return 0}, +gcU(a){return B.d.P(this.a,this.e,this.f)}, +glT(a){var s=this.f,r=this.r +return s=s.r)return B.d5 +return new A.kH(A.aNT(s.glT(s)),t.G5)}, +glU(){var s,r=this +if(r.f>=r.r)return B.vr +s=A.aOY(r.glT(r)) +s.a_1(s,A.aQj()) +return A.aFs(s,t.N,t.yp)}, +Q7(a){var s=this.d+1 +return s+a.length===this.e&&B.d.df(this.a,a,s)}, +auR(){var s=this,r=s.r,q=s.a +if(r>=q.length)return s +return new A.jS(B.d.P(q,0,r),s.b,s.c,s.d,s.e,s.f,r,s.w)}, +Kk(a,b,c){var s,r,q,p,o,n=this,m=null,l=n.ge5(),k=l==="file",j=n.c,i=j>0?B.d.P(n.a,n.b+3,j):"",h=n.grg()?n.goY(n):m +j=n.c +if(j>0)s=B.d.P(n.a,j,n.d) +else s=i.length!==0||h!=null||k?"":m +r=s!=null +j=b==null +if(!j||!1)b=A.aBL(b,0,j?0:b.length,m,l,r) +else{b=B.d.P(n.a,n.e,n.f) +if(!k)j=r&&b.length!==0 +else j=!0 +if(j&&!B.d.bz(b,"/"))b="/"+b}if(c!=null)q=A.aBM(m,0,0,c) +else{j=n.f +p=n.r +q=j0)return b +s=b.c +if(s>0){r=a.b +if(r<=0)return b +q=r===4 +if(q&&B.d.bz(a.a,"file"))p=b.e!==b.f +else if(q&&B.d.bz(a.a,"http"))p=!b.Q7("80") +else p=!(r===5&&B.d.bz(a.a,"https"))||!b.Q7("443") +if(p){o=r+1 +return new A.jS(B.d.P(a.a,0,o)+B.d.bL(b.a,c+1),r,s+o,b.d+o,b.e+o,b.f+o,b.r+o,a.w)}else return this.SV().wB(b)}n=b.e +c=b.f +if(n===c){s=b.r +if(c0?l:m +o=k-n +return new A.jS(B.d.P(a.a,0,k)+B.d.bL(s,n),a.b,a.c,a.d,m,c+o,b.r+o,a.w)}j=a.e +i=a.f +if(j===i&&a.c>0){for(;B.d.df(s,"../",n);)n+=3 +o=j-n+1 +return new A.jS(B.d.P(a.a,0,j)+"/"+B.d.bL(s,n),a.b,a.c,a.d,j,c+o,b.r+o,a.w)}h=a.a +l=A.aOE(this) +if(l>=0)g=l +else for(g=j;B.d.df(h,"../",g);)g+=3 +f=0 +while(!0){e=n+3 +if(!(e<=c&&B.d.df(s,"../",n)))break;++f +n=e}for(d="";i>g;){--i +if(h.charCodeAt(i)===47){if(f===0){d="/" +break}--f +d="/"}}if(i===g&&a.b<=0&&!B.d.df(h,"/",j)){n-=f*3 +d=""}o=i-n+d.length +return new A.jS(B.d.P(h,0,i)+d+B.d.bL(s,n),a.b,a.c,a.d,j,c+o,b.r+o,a.w)}, +Kw(){var s,r,q=this,p=q.b +if(p>=0){s=!(p===4&&B.d.bz(q.a,"file")) +p=s}else p=!1 +if(p)throw A.c(A.a3("Cannot extract a file path from a "+q.ge5()+" URI")) +p=q.f +s=q.a +if(p0?s.gjP(s):r,n=s.grg()?s.goY(s):r,m=s.a,l=s.f,k=B.d.P(m,s.e,l),j=s.r +l=l>>0!==b||b>=s +r.toString +if(r)throw A.c(A.dB(b,s,a,null,null)) +s=a[b] +s.toString +return s}, +n(a,b,c){throw A.c(A.a3("Cannot assign element of immutable List."))}, +su(a,b){throw A.c(A.a3("Cannot resize immutable List."))}, +gL(a){var s +if(a.length>0){s=a[0] +s.toString +return s}throw A.c(A.Q("No elements"))}, +gO(a){var s,r=a.length +if(r>0){s=a[r-1] +s.toString +return s}throw A.c(A.Q("No elements"))}, +bl(a,b){return a[b]}, +$ia8:1, +$ibD:1, +$in:1, +$iv:1} +A.BA.prototype={ +k(a){var s,r=a.left +r.toString +s=a.top +s.toString +return"Rectangle ("+A.h(r)+", "+A.h(s)+") "+A.h(this.gbB(a))+" x "+A.h(this.gbh(a))}, +j(a,b){var s,r +if(b==null)return!1 +if(t.Bb.b(b)){s=a.left +s.toString +r=J.dW(b) +if(s===r.gjb(b)){s=a.top +s.toString +s=s===r.grN(b)&&this.gbB(a)===r.gbB(b)&&this.gbh(a)===r.gbh(b)}else s=!1}else s=!1 +return s}, +gt(a){var s,r=a.left +r.toString +s=a.top +s.toString +return A.N(r,s,this.gbB(a),this.gbh(a),B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +gPP(a){return a.height}, +gbh(a){var s=this.gPP(a) +s.toString +return s}, +gjb(a){var s=a.left +s.toString +return s}, +grN(a){var s=a.top +s.toString +return s}, +gTR(a){return a.width}, +gbB(a){var s=this.gTR(a) +s.toString +return s}, +$ijw:1} +A.NZ.prototype={ +gu(a){var s=a.length +s.toString +return s}, +i(a,b){var s=a.length,r=b>>>0!==b||b>=s +r.toString +if(r)throw A.c(A.dB(b,s,a,null,null)) +s=a[b] +s.toString +return s}, +n(a,b,c){throw A.c(A.a3("Cannot assign element of immutable List."))}, +su(a,b){throw A.c(A.a3("Cannot resize immutable List."))}, +gL(a){var s +if(a.length>0){s=a[0] +s.toString +return s}throw A.c(A.Q("No elements"))}, +gO(a){var s,r=a.length +if(r>0){s=a[r-1] +s.toString +return s}throw A.c(A.Q("No elements"))}, +bl(a,b){return a[b]}, +$ia8:1, +$ibD:1, +$in:1, +$iv:1} +A.O0.prototype={ +gu(a){var s=a.length +s.toString +return s}} +A.aN.prototype={ +k(a){var s=a.localName +s.toString +return s}} +A.aB.prototype={$iaB:1} +A.ab.prototype={ +H6(a,b,c,d){if(c!=null)this.adR(a,b,c,!1)}, +adR(a,b,c,d){return a.addEventListener(b,A.o8(c,1),!1)}, +ah2(a,b,c,d){return a.removeEventListener(b,A.o8(c,1),!1)}} +A.hR.prototype={$ihR:1} +A.Ov.prototype={ +gu(a){var s=a.length +s.toString +return s}, +i(a,b){var s=a.length,r=b>>>0!==b||b>=s +r.toString +if(r)throw A.c(A.dB(b,s,a,null,null)) +s=a[b] +s.toString +return s}, +n(a,b,c){throw A.c(A.a3("Cannot assign element of immutable List."))}, +su(a,b){throw A.c(A.a3("Cannot resize immutable List."))}, +gL(a){var s +if(a.length>0){s=a[0] +s.toString +return s}throw A.c(A.Q("No elements"))}, +gO(a){var s,r=a.length +if(r>0){s=a[r-1] +s.toString +return s}throw A.c(A.Q("No elements"))}, +bl(a,b){return a[b]}, +$ia8:1, +$ibD:1, +$in:1, +$iv:1} +A.Ox.prototype={ +gu(a){return a.length}} +A.OY.prototype={ +gu(a){return a.length}} +A.hS.prototype={$ihS:1} +A.Pd.prototype={ +gu(a){var s=a.length +s.toString +return s}} +A.rI.prototype={ +gu(a){var s=a.length +s.toString +return s}, +i(a,b){var s=a.length,r=b>>>0!==b||b>=s +r.toString +if(r)throw A.c(A.dB(b,s,a,null,null)) +s=a[b] +s.toString +return s}, +n(a,b,c){throw A.c(A.a3("Cannot assign element of immutable List."))}, +su(a,b){throw A.c(A.a3("Cannot resize immutable List."))}, +gL(a){var s +if(a.length>0){s=a[0] +s.toString +return s}throw A.c(A.Q("No elements"))}, +gO(a){var s,r=a.length +if(r>0){s=a[r-1] +s.toString +return s}throw A.c(A.Q("No elements"))}, +bl(a,b){return a[b]}, +$ia8:1, +$ibD:1, +$in:1, +$iv:1} +A.oM.prototype={ +gav3(a){var s,r,q,p,o,n,m=t.N,l=A.A(m,m),k=a.getAllResponseHeaders(),j=k.split("\r\n") +for(m=j.length,s=0;s>>0!==b||b>=s +r.toString +if(r)throw A.c(A.dB(b,s,a,null,null)) +s=a[b] +s.toString +return s}, +n(a,b,c){throw A.c(A.a3("Cannot assign element of immutable List."))}, +su(a,b){throw A.c(A.a3("Cannot resize immutable List."))}, +gL(a){var s +if(a.length>0){s=a[0] +s.toString +return s}throw A.c(A.Q("No elements"))}, +gO(a){var s,r=a.length +if(r>0){s=a[r-1] +s.toString +return s}throw A.c(A.Q("No elements"))}, +bl(a,b){return a[b]}, +$ia8:1, +$ibD:1, +$in:1, +$iv:1} +A.bE.prototype={ +k(a){var s=a.nodeValue +return s==null?this.a2x(a):s}, +$ibE:1} +A.DB.prototype={ +gu(a){var s=a.length +s.toString +return s}, +i(a,b){var s=a.length,r=b>>>0!==b||b>=s +r.toString +if(r)throw A.c(A.dB(b,s,a,null,null)) +s=a[b] +s.toString +return s}, +n(a,b,c){throw A.c(A.a3("Cannot assign element of immutable List."))}, +su(a,b){throw A.c(A.a3("Cannot resize immutable List."))}, +gL(a){var s +if(a.length>0){s=a[0] +s.toString +return s}throw A.c(A.Q("No elements"))}, +gO(a){var s,r=a.length +if(r>0){s=a[r-1] +s.toString +return s}throw A.c(A.Q("No elements"))}, +bl(a,b){return a[b]}, +$ia8:1, +$ibD:1, +$in:1, +$iv:1} +A.i4.prototype={ +gu(a){return a.length}, +$ii4:1} +A.RF.prototype={ +gu(a){var s=a.length +s.toString +return s}, +i(a,b){var s=a.length,r=b>>>0!==b||b>=s +r.toString +if(r)throw A.c(A.dB(b,s,a,null,null)) +s=a[b] +s.toString +return s}, +n(a,b,c){throw A.c(A.a3("Cannot assign element of immutable List."))}, +su(a,b){throw A.c(A.a3("Cannot resize immutable List."))}, +gL(a){var s +if(a.length>0){s=a[0] +s.toString +return s}throw A.c(A.Q("No elements"))}, +gO(a){var s,r=a.length +if(r>0){s=a[r-1] +s.toString +return s}throw A.c(A.Q("No elements"))}, +bl(a,b){return a[b]}, +$ia8:1, +$ibD:1, +$in:1, +$iv:1} +A.lG.prototype={$ilG:1} +A.SW.prototype={ +E(a,b){throw A.c(A.a3("Not supported"))}, +ai(a,b){return A.jT(a.get(b))!=null}, +i(a,b){return A.jT(a.get(b))}, +aa(a,b){var s,r,q=a.entries() +for(;!0;){s=q.next() +r=s.done +r.toString +if(r)return +r=s.value[0] +r.toString +b.$2(r,A.jT(s.value[1]))}}, +gc2(a){var s=A.a([],t.s) +this.aa(a,new A.amP(s)) +return s}, +gaT(a){var s=A.a([],t.n4) +this.aa(a,new A.amQ(s)) +return s}, +gu(a){var s=a.size +s.toString +return s}, +ga7(a){var s=a.size +s.toString +return s===0}, +gc8(a){var s=a.size +s.toString +return s!==0}, +n(a,b,c){throw A.c(A.a3("Not supported"))}, +bm(a,b,c){throw A.c(A.a3("Not supported"))}, +C(a,b){throw A.c(A.a3("Not supported"))}, +$iaJ:1} +A.amP.prototype={ +$2(a,b){return this.a.push(a)}, +$S:23} +A.amQ.prototype={ +$2(a,b){return this.a.push(b)}, +$S:23} +A.Tm.prototype={ +gu(a){return a.length}} +A.i9.prototype={$ii9:1} +A.TX.prototype={ +gu(a){var s=a.length +s.toString +return s}, +i(a,b){var s=a.length,r=b>>>0!==b||b>=s +r.toString +if(r)throw A.c(A.dB(b,s,a,null,null)) +s=a[b] +s.toString +return s}, +n(a,b,c){throw A.c(A.a3("Cannot assign element of immutable List."))}, +su(a,b){throw A.c(A.a3("Cannot resize immutable List."))}, +gL(a){var s +if(a.length>0){s=a[0] +s.toString +return s}throw A.c(A.Q("No elements"))}, +gO(a){var s,r=a.length +if(r>0){s=a[r-1] +s.toString +return s}throw A.c(A.Q("No elements"))}, +bl(a,b){return a[b]}, +$ia8:1, +$ibD:1, +$in:1, +$iv:1} +A.ia.prototype={$iia:1} +A.U3.prototype={ +gu(a){var s=a.length +s.toString +return s}, +i(a,b){var s=a.length,r=b>>>0!==b||b>=s +r.toString +if(r)throw A.c(A.dB(b,s,a,null,null)) +s=a[b] +s.toString +return s}, +n(a,b,c){throw A.c(A.a3("Cannot assign element of immutable List."))}, +su(a,b){throw A.c(A.a3("Cannot resize immutable List."))}, +gL(a){var s +if(a.length>0){s=a[0] +s.toString +return s}throw A.c(A.Q("No elements"))}, +gO(a){var s,r=a.length +if(r>0){s=a[r-1] +s.toString +return s}throw A.c(A.Q("No elements"))}, +bl(a,b){return a[b]}, +$ia8:1, +$ibD:1, +$in:1, +$iv:1} +A.ib.prototype={ +gu(a){return a.length}, +$iib:1} +A.U9.prototype={ +E(a,b){J.h7(b,new A.apg(a))}, +ai(a,b){return a.getItem(A.bQ(b))!=null}, +i(a,b){return a.getItem(A.bQ(b))}, +n(a,b,c){a.setItem(b,c)}, +bm(a,b,c){var s +if(a.getItem(b)==null)a.setItem(b,c.$0()) +s=a.getItem(b) +return s==null?A.bQ(s):s}, +C(a,b){var s +A.bQ(b) +s=a.getItem(b) +a.removeItem(b) +return s}, +aa(a,b){var s,r,q +for(s=0;!0;++s){r=a.key(s) +if(r==null)return +q=a.getItem(r) +q.toString +b.$2(r,q)}}, +gc2(a){var s=A.a([],t.s) +this.aa(a,new A.aph(s)) +return s}, +gaT(a){var s=A.a([],t.s) +this.aa(a,new A.api(s)) +return s}, +gu(a){var s=a.length +s.toString +return s}, +ga7(a){return a.key(0)==null}, +gc8(a){return a.key(0)!=null}, +$iaJ:1} +A.apg.prototype={ +$2(a,b){this.a.setItem(a,b)}, +$S:63} +A.aph.prototype={ +$2(a,b){return this.a.push(a)}, +$S:63} +A.api.prototype={ +$2(a,b){return this.a.push(b)}, +$S:63} +A.fY.prototype={$ifY:1} +A.id.prototype={$iid:1} +A.fZ.prototype={$ifZ:1} +A.UH.prototype={ +gu(a){var s=a.length +s.toString +return s}, +i(a,b){var s=a.length,r=b>>>0!==b||b>=s +r.toString +if(r)throw A.c(A.dB(b,s,a,null,null)) +s=a[b] +s.toString +return s}, +n(a,b,c){throw A.c(A.a3("Cannot assign element of immutable List."))}, +su(a,b){throw A.c(A.a3("Cannot resize immutable List."))}, +gL(a){var s +if(a.length>0){s=a[0] +s.toString +return s}throw A.c(A.Q("No elements"))}, +gO(a){var s,r=a.length +if(r>0){s=a[r-1] +s.toString +return s}throw A.c(A.Q("No elements"))}, +bl(a,b){return a[b]}, +$ia8:1, +$ibD:1, +$in:1, +$iv:1} +A.UI.prototype={ +gu(a){var s=a.length +s.toString +return s}, +i(a,b){var s=a.length,r=b>>>0!==b||b>=s +r.toString +if(r)throw A.c(A.dB(b,s,a,null,null)) +s=a[b] +s.toString +return s}, +n(a,b,c){throw A.c(A.a3("Cannot assign element of immutable List."))}, +su(a,b){throw A.c(A.a3("Cannot resize immutable List."))}, +gL(a){var s +if(a.length>0){s=a[0] +s.toString +return s}throw A.c(A.Q("No elements"))}, +gO(a){var s,r=a.length +if(r>0){s=a[r-1] +s.toString +return s}throw A.c(A.Q("No elements"))}, +bl(a,b){return a[b]}, +$ia8:1, +$ibD:1, +$in:1, +$iv:1} +A.UK.prototype={ +gu(a){var s=a.length +s.toString +return s}} +A.ie.prototype={$iie:1} +A.UQ.prototype={ +gu(a){var s=a.length +s.toString +return s}, +i(a,b){var s=a.length,r=b>>>0!==b||b>=s +r.toString +if(r)throw A.c(A.dB(b,s,a,null,null)) +s=a[b] +s.toString +return s}, +n(a,b,c){throw A.c(A.a3("Cannot assign element of immutable List."))}, +su(a,b){throw A.c(A.a3("Cannot resize immutable List."))}, +gL(a){var s +if(a.length>0){s=a[0] +s.toString +return s}throw A.c(A.Q("No elements"))}, +gO(a){var s,r=a.length +if(r>0){s=a[r-1] +s.toString +return s}throw A.c(A.Q("No elements"))}, +bl(a,b){return a[b]}, +$ia8:1, +$ibD:1, +$in:1, +$iv:1} +A.US.prototype={ +gu(a){return a.length}} +A.V5.prototype={ +k(a){var s=String(a) +s.toString +return s}} +A.Ve.prototype={ +gu(a){return a.length}} +A.X7.prototype={ +gu(a){var s=a.length +s.toString +return s}, +i(a,b){var s=a.length,r=b>>>0!==b||b>=s +r.toString +if(r)throw A.c(A.dB(b,s,a,null,null)) +s=a[b] +s.toString +return s}, +n(a,b,c){throw A.c(A.a3("Cannot assign element of immutable List."))}, +su(a,b){throw A.c(A.a3("Cannot resize immutable List."))}, +gL(a){var s +if(a.length>0){s=a[0] +s.toString +return s}throw A.c(A.Q("No elements"))}, +gO(a){var s,r=a.length +if(r>0){s=a[r-1] +s.toString +return s}throw A.c(A.Q("No elements"))}, +bl(a,b){return a[b]}, +$ia8:1, +$ibD:1, +$in:1, +$iv:1} +A.HA.prototype={ +k(a){var s,r,q,p=a.left +p.toString +s=a.top +s.toString +r=a.width +r.toString +q=a.height +q.toString +return"Rectangle ("+A.h(p)+", "+A.h(s)+") "+A.h(r)+" x "+A.h(q)}, +j(a,b){var s,r +if(b==null)return!1 +if(t.Bb.b(b)){s=a.left +s.toString +r=J.dW(b) +if(s===r.gjb(b)){s=a.top +s.toString +if(s===r.grN(b)){s=a.width +s.toString +if(s===r.gbB(b)){s=a.height +s.toString +r=s===r.gbh(b) +s=r}else s=!1}else s=!1}else s=!1}else s=!1 +return s}, +gt(a){var s,r,q,p=a.left +p.toString +s=a.top +s.toString +r=a.width +r.toString +q=a.height +q.toString +return A.N(p,s,r,q,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +gPP(a){return a.height}, +gbh(a){var s=a.height +s.toString +return s}, +gTR(a){return a.width}, +gbB(a){var s=a.width +s.toString +return s}} +A.YD.prototype={ +gu(a){var s=a.length +s.toString +return s}, +i(a,b){var s=a.length,r=b>>>0!==b||b>=s +r.toString +if(r)throw A.c(A.dB(b,s,a,null,null)) +return a[b]}, +n(a,b,c){throw A.c(A.a3("Cannot assign element of immutable List."))}, +su(a,b){throw A.c(A.a3("Cannot resize immutable List."))}, +gL(a){if(a.length>0)return a[0] +throw A.c(A.Q("No elements"))}, +gO(a){var s=a.length +if(s>0)return a[s-1] +throw A.c(A.Q("No elements"))}, +bl(a,b){return a[b]}, +$ia8:1, +$ibD:1, +$in:1, +$iv:1} +A.Iy.prototype={ +gu(a){var s=a.length +s.toString +return s}, +i(a,b){var s=a.length,r=b>>>0!==b||b>=s +r.toString +if(r)throw A.c(A.dB(b,s,a,null,null)) +s=a[b] +s.toString +return s}, +n(a,b,c){throw A.c(A.a3("Cannot assign element of immutable List."))}, +su(a,b){throw A.c(A.a3("Cannot resize immutable List."))}, +gL(a){var s +if(a.length>0){s=a[0] +s.toString +return s}throw A.c(A.Q("No elements"))}, +gO(a){var s,r=a.length +if(r>0){s=a[r-1] +s.toString +return s}throw A.c(A.Q("No elements"))}, +bl(a,b){return a[b]}, +$ia8:1, +$ibD:1, +$in:1, +$iv:1} +A.a2u.prototype={ +gu(a){var s=a.length +s.toString +return s}, +i(a,b){var s=a.length,r=b>>>0!==b||b>=s +r.toString +if(r)throw A.c(A.dB(b,s,a,null,null)) +s=a[b] +s.toString +return s}, +n(a,b,c){throw A.c(A.a3("Cannot assign element of immutable List."))}, +su(a,b){throw A.c(A.a3("Cannot resize immutable List."))}, +gL(a){var s +if(a.length>0){s=a[0] +s.toString +return s}throw A.c(A.Q("No elements"))}, +gO(a){var s,r=a.length +if(r>0){s=a[r-1] +s.toString +return s}throw A.c(A.Q("No elements"))}, +bl(a,b){return a[b]}, +$ia8:1, +$ibD:1, +$in:1, +$iv:1} +A.a2H.prototype={ +gu(a){var s=a.length +s.toString +return s}, +i(a,b){var s=a.length,r=b>>>0!==b||b>=s +r.toString +if(r)throw A.c(A.dB(b,s,a,null,null)) +s=a[b] +s.toString +return s}, +n(a,b,c){throw A.c(A.a3("Cannot assign element of immutable List."))}, +su(a,b){throw A.c(A.a3("Cannot resize immutable List."))}, +gL(a){var s +if(a.length>0){s=a[0] +s.toString +return s}throw A.c(A.Q("No elements"))}, +gO(a){var s,r=a.length +if(r>0){s=a[r-1] +s.toString +return s}throw A.c(A.Q("No elements"))}, +bl(a,b){return a[b]}, +$ia8:1, +$ibD:1, +$in:1, +$iv:1} +A.aFM.prototype={} +A.yT.prototype={ +nd(a,b,c,d){return A.b1h(this.a,this.b,a,!1,this.$ti.c)}} +A.Y1.prototype={ +b3(a){var s=this +if(s.b==null)return $.aET() +s.T6() +s.d=s.b=null +return $.aET()}, +JL(a){var s,r=this +if(r.b==null)throw A.c(A.Q("Subscription has been canceled.")) +r.T6() +s=A.aQ2(new A.avb(a),t.I3) +r.d=s +r.T1()}, +T1(){var s,r=this.d +if(r!=null&&!0){s=this.b +s.toString +J.aUC(s,this.c,r,!1)}}, +T6(){var s,r=this.d +if(r!=null){s=this.b +s.toString +J.aUB(s,this.c,r,!1)}}} +A.ava.prototype={ +$1(a){return this.a.$1(a)}, +$S:168} +A.avb.prototype={ +$1(a){return this.a.$1(a)}, +$S:168} +A.b0.prototype={ +gab(a){return new A.OC(a,this.gu(a),A.as(a).h("OC"))}, +D(a,b){throw A.c(A.a3("Cannot add to immutable List."))}, +dK(a,b){throw A.c(A.a3("Cannot sort immutable List."))}, +eu(a,b,c){throw A.c(A.a3("Cannot add to immutable List."))}, +eF(a){throw A.c(A.a3("Cannot remove from immutable List."))}, +C(a,b){throw A.c(A.a3("Cannot remove from immutable List."))}, +bC(a,b,c,d,e){throw A.c(A.a3("Cannot setRange on immutable List."))}, +dW(a,b,c,d){return this.bC(a,b,c,d,0)}} +A.OC.prototype={ +q(){var s=this,r=s.c+1,q=s.b +if(r4294967296)throw A.c(A.ef("max must be in range 0 < max \u2264 2^32, was "+a)) +return Math.random()*a>>>0}, +JH(){return Math.random()}} +A.iL.prototype={$iiL:1} +A.PU.prototype={ +gu(a){var s=a.length +s.toString +return s}, +i(a,b){var s=a.length +s.toString +s=b>>>0!==b||b>=s +s.toString +if(s)throw A.c(A.dB(b,this.gu(a),a,null,null)) +s=a.getItem(b) +s.toString +return s}, +n(a,b,c){throw A.c(A.a3("Cannot assign element of immutable List."))}, +su(a,b){throw A.c(A.a3("Cannot resize immutable List."))}, +gL(a){var s=a.length +s.toString +if(s>0){s=a[0] +s.toString +return s}throw A.c(A.Q("No elements"))}, +gO(a){var s=a.length +s.toString +if(s>0){s=a[s-1] +s.toString +return s}throw A.c(A.Q("No elements"))}, +bl(a,b){return this.i(a,b)}, +$ia8:1, +$in:1, +$iv:1} +A.iS.prototype={$iiS:1} +A.QN.prototype={ +gu(a){var s=a.length +s.toString +return s}, +i(a,b){var s=a.length +s.toString +s=b>>>0!==b||b>=s +s.toString +if(s)throw A.c(A.dB(b,this.gu(a),a,null,null)) +s=a.getItem(b) +s.toString +return s}, +n(a,b,c){throw A.c(A.a3("Cannot assign element of immutable List."))}, +su(a,b){throw A.c(A.a3("Cannot resize immutable List."))}, +gL(a){var s=a.length +s.toString +if(s>0){s=a[0] +s.toString +return s}throw A.c(A.Q("No elements"))}, +gO(a){var s=a.length +s.toString +if(s>0){s=a[s-1] +s.toString +return s}throw A.c(A.Q("No elements"))}, +bl(a,b){return this.i(a,b)}, +$ia8:1, +$in:1, +$iv:1} +A.RG.prototype={ +gu(a){return a.length}} +A.Uc.prototype={ +gu(a){var s=a.length +s.toString +return s}, +i(a,b){var s=a.length +s.toString +s=b>>>0!==b||b>=s +s.toString +if(s)throw A.c(A.dB(b,this.gu(a),a,null,null)) +s=a.getItem(b) +s.toString +return s}, +n(a,b,c){throw A.c(A.a3("Cannot assign element of immutable List."))}, +su(a,b){throw A.c(A.a3("Cannot resize immutable List."))}, +gL(a){var s=a.length +s.toString +if(s>0){s=a[0] +s.toString +return s}throw A.c(A.Q("No elements"))}, +gO(a){var s=a.length +s.toString +if(s>0){s=a[s-1] +s.toString +return s}throw A.c(A.Q("No elements"))}, +bl(a,b){return this.i(a,b)}, +$ia8:1, +$in:1, +$iv:1} +A.j4.prototype={$ij4:1} +A.UU.prototype={ +gu(a){var s=a.length +s.toString +return s}, +i(a,b){var s=a.length +s.toString +s=b>>>0!==b||b>=s +s.toString +if(s)throw A.c(A.dB(b,this.gu(a),a,null,null)) +s=a.getItem(b) +s.toString +return s}, +n(a,b,c){throw A.c(A.a3("Cannot assign element of immutable List."))}, +su(a,b){throw A.c(A.a3("Cannot resize immutable List."))}, +gL(a){var s=a.length +s.toString +if(s>0){s=a[0] +s.toString +return s}throw A.c(A.Q("No elements"))}, +gO(a){var s=a.length +s.toString +if(s>0){s=a[s-1] +s.toString +return s}throw A.c(A.Q("No elements"))}, +bl(a,b){return this.i(a,b)}, +$ia8:1, +$in:1, +$iv:1} +A.Zm.prototype={} +A.Zn.prototype={} +A.a_n.prototype={} +A.a_o.prototype={} +A.a2D.prototype={} +A.a2E.prototype={} +A.a3t.prototype={} +A.a3u.prototype={} +A.Od.prototype={} +A.N1.prototype={ +I(){return"ClipOp."+this.b}} +A.Vb.prototype={ +I(){return"VertexMode."+this.b}} +A.DS.prototype={ +I(){return"PathFillType."+this.b}} +A.ajb.prototype={ +I(){return"PathOperation."+this.b}} +A.au7.prototype={ +ec(a,b){A.b6F(this.a,this.b,a,b)}} +A.JO.prototype={ +eb(a){A.Lg(this.b,this.c,a,t.CD)}} +A.nK.prototype={ +gu(a){var s=this.a +return s.gu(s)}, +p_(a){var s,r,q=this +if(!q.d&&q.e!=null){q.e.ec(a.a,a.gXA()) +return!1}s=q.c +if(s<=0)return!0 +r=q.Ot(s-1) +q.a.f_(0,a) +return r}, +Ot(a){var s,r,q,p +for(s=this.a,r=t.CD,q=!1;(s.c-s.b&s.a.length-1)>>>0>a;q=!0){p=s.wx() +A.Lg(p.b,p.c,null,r)}return q}, +a9s(){var s=this,r=s.a +if(!r.ga7(r)&&s.e!=null){r=r.wx() +s.e.ec(r.a,r.gXA()) +A.fq(s.gOp())}else s.d=!1}} +A.a8A.prototype={ +auB(a,b,c){this.a.bm(0,a,new A.a8B()).p_(new A.JO(b,c,$.aw))}, +a1_(a,b){var s=this.a.bm(0,a,new A.a8C()),r=s.e +s.e=new A.au7(b,$.aw) +if(r==null&&!s.d){s.d=!0 +A.fq(s.gOp())}}, +aqj(a){var s,r,q,p,o,n,m,l="Invalid arguments for 'resize' method sent to dev.flutter/channel-buffers (arguments must be a two-element list, channel name and new capacity)",k="Invalid arguments for 'overflow' method sent to dev.flutter/channel-buffers (arguments must be a two-element list, channel name and flag state)",j=A.dD(a.buffer,a.byteOffset,a.byteLength) +if(j[0]===7){s=j[1] +if(s>=254)throw A.c(A.cj("Unrecognized message sent to dev.flutter/channel-buffers (method name too long)")) +r=2+s +q=B.a2.eA(0,B.O.cf(j,2,r)) +switch(q){case"resize":if(j[r]!==12)throw A.c(A.cj(l)) +p=r+1 +if(j[p]<2)throw A.c(A.cj(l));++p +if(j[p]!==7)throw A.c(A.cj("Invalid arguments for 'resize' method sent to dev.flutter/channel-buffers (first argument must be a string)"));++p +o=j[p] +if(o>=254)throw A.c(A.cj("Invalid arguments for 'resize' method sent to dev.flutter/channel-buffers (channel name must be less than 254 characters long)"));++p +r=p+o +n=B.a2.eA(0,B.O.cf(j,p,r)) +if(j[r]!==3)throw A.c(A.cj("Invalid arguments for 'resize' method sent to dev.flutter/channel-buffers (second argument must be an integer in the range 0 to 2147483647)")) +this.Zp(0,n,a.getUint32(r+1,B.av===$.e5())) +break +case"overflow":if(j[r]!==12)throw A.c(A.cj(k)) +p=r+1 +if(j[p]<2)throw A.c(A.cj(k));++p +if(j[p]!==7)throw A.c(A.cj("Invalid arguments for 'overflow' method sent to dev.flutter/channel-buffers (first argument must be a string)"));++p +o=j[p] +if(o>=254)throw A.c(A.cj("Invalid arguments for 'overflow' method sent to dev.flutter/channel-buffers (channel name must be less than 254 characters long)"));++p +r=p+o +B.a2.eA(0,B.O.cf(j,p,r)) +r=j[r] +if(r!==1&&r!==2)throw A.c(A.cj("Invalid arguments for 'overflow' method sent to dev.flutter/channel-buffers (second argument must be a boolean)")) +break +default:throw A.c(A.cj("Unrecognized method '"+q+"' sent to dev.flutter/channel-buffers"))}}else{m=A.a(B.a2.eA(0,j).split("\r"),t.s) +if(m.length===3&&J.d(m[0],"resize"))this.Zp(0,m[1],A.ir(m[2],null)) +else throw A.c(A.cj("Unrecognized message "+A.h(m)+" sent to dev.flutter/channel-buffers."))}}, +Zp(a,b,c){var s=this.a,r=s.i(0,b) +if(r==null)s.n(0,b,new A.nK(A.n3(c,t.S8),c)) +else{r.c=c +r.Ot(c)}}} +A.a8B.prototype={ +$0(){return new A.nK(A.n3(1,t.S8),1)}, +$S:166} +A.a8C.prototype={ +$0(){return new A.nK(A.n3(1,t.S8),1)}, +$S:166} +A.QP.prototype={ +j(a,b){if(b==null)return!1 +return b instanceof A.QP&&b.a===this.a&&b.b===this.b}, +gt(a){return A.N(this.a,this.b,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a){return"OffsetBase("+B.c.af(this.a,1)+", "+B.c.af(this.b,1)+")"}} +A.k.prototype={ +gdC(){var s=this.a,r=this.b +return Math.sqrt(s*s+r*r)}, +gAr(){var s=this.a,r=this.b +return s*s+r*r}, +Y(a,b){return new A.k(this.a-b.a,this.b-b.b)}, +R(a,b){return new A.k(this.a+b.a,this.b+b.b)}, +S(a,b){return new A.k(this.a*b,this.b*b)}, +eH(a,b){return new A.k(this.a/b,this.b/b)}, +j(a,b){if(b==null)return!1 +return b instanceof A.k&&b.a===this.a&&b.b===this.b}, +gt(a){return A.N(this.a,this.b,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a){return"Offset("+B.c.af(this.a,1)+", "+B.c.af(this.b,1)+")"}} +A.G.prototype={ +ga7(a){return this.a<=0||this.b<=0}, +Y(a,b){var s=this +if(b instanceof A.G)return new A.k(s.a-b.a,s.b-b.b) +if(b instanceof A.k)return new A.G(s.a-b.a,s.b-b.b) +throw A.c(A.bC(b,null))}, +R(a,b){return new A.G(this.a+b.a,this.b+b.b)}, +S(a,b){return new A.G(this.a*b,this.b*b)}, +eH(a,b){return new A.G(this.a/b,this.b/b)}, +iP(a){return new A.k(a.a+this.a/2,a.b+this.b/2)}, +zS(a,b){return new A.k(b.a+this.a,b.b+this.b)}, +p(a,b){var s=b.a +if(s>=0)if(s=0&&s=s.c||s.b>=s.d}, +cm(a){var s=this,r=a.a,q=a.b +return new A.w(s.a+r,s.b+q,s.c+r,s.d+q)}, +au(a,b,c){var s=this +return new A.w(s.a+b,s.b+c,s.c+b,s.d+c)}, +dz(a){var s=this +return new A.w(s.a-a,s.b-a,s.c+a,s.d+a)}, +ea(a){var s=this +return new A.w(Math.max(s.a,a.a),Math.max(s.b,a.b),Math.min(s.c,a.c),Math.min(s.d,a.d))}, +j0(a){var s=this +return new A.w(Math.min(s.a,a.a),Math.min(s.b,a.b),Math.max(s.c,a.c),Math.max(s.d,a.d))}, +BU(a){var s=this +if(s.c<=a.a||a.c<=s.a)return!1 +if(s.d<=a.b||a.d<=s.b)return!1 +return!0}, +gh_(){var s=this +return Math.min(Math.abs(s.c-s.a),Math.abs(s.d-s.b))}, +gKB(){var s=this.a +return new A.k(s+(this.c-s)/2,this.b)}, +gam9(){var s=this.b +return new A.k(this.a,s+(this.d-s)/2)}, +gaK(){var s=this,r=s.a,q=s.b +return new A.k(r+(s.c-r)/2,q+(s.d-q)/2)}, +galP(){var s=this.a +return new A.k(s+(this.c-s)/2,this.d)}, +p(a,b){var s=this,r=b.a +if(r>=s.a)if(r=s.b&&rd&&s!==0)return Math.min(a,d/s) +return a}, +t4(){var s=this,r=s.c,q=s.a,p=Math.abs(r-q),o=s.d,n=s.b,m=Math.abs(o-n),l=s.Q,k=s.f,j=s.e,i=s.r,h=s.w,g=s.y,f=s.x,e=s.z,d=s.yj(s.yj(s.yj(s.yj(1,l,k,m),j,i,p),h,g,m),f,e,p) +if(d<1)return new A.ju(q,n,r,o,j*d,k*d,i*d,h*d,f*d,g*d,e*d,l*d,!1) +return new A.ju(q,n,r,o,j,k,i,h,f,g,e,l,!1)}, +p(a,b){var s,r,q,p,o,n,m=this,l=b.a,k=m.a +if(!(l=m.c)){s=b.b +s=s=m.d}else s=!0 +else s=!0 +if(s)return!1 +r=m.t4() +q=r.e +if(ls-q&&b.bs-q&&b.b>m.d-r.y){p=l-s+q +o=r.y +n=b.b-m.d+o}else{q=r.z +if(lm.d-r.Q){p=l-k-q +o=r.Q +n=b.b-m.d+o}else return!0}}}p/=q +n/=o +if(p*p+n*n>1)return!1 +return!0}, +j(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +if(A.t(s)!==J.U(b))return!1 +return b instanceof A.ju&&b.a===s.a&&b.b===s.b&&b.c===s.c&&b.d===s.d&&b.e===s.e&&b.f===s.f&&b.r===s.r&&b.w===s.w&&b.z===s.z&&b.Q===s.Q&&b.x===s.x&&b.y===s.y}, +gt(a){var s=this +return A.N(s.a,s.b,s.c,s.d,s.e,s.f,s.r,s.w,s.z,s.Q,s.x,s.y,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a){var s,r,q=this,p=B.c.af(q.a,1)+", "+B.c.af(q.b,1)+", "+B.c.af(q.c,1)+", "+B.c.af(q.d,1),o=q.e,n=q.f,m=q.r,l=q.w +if(new A.aC(o,n).j(0,new A.aC(m,l))){s=q.x +r=q.y +s=new A.aC(m,l).j(0,new A.aC(s,r))&&new A.aC(s,r).j(0,new A.aC(q.z,q.Q))}else s=!1 +if(s){if(o===n)return"RRect.fromLTRBR("+p+", "+B.c.af(o,1)+")" +return"RRect.fromLTRBXY("+p+", "+B.c.af(o,1)+", "+B.c.af(n,1)+")"}return"RRect.fromLTRBAndCorners("+p+", topLeft: "+new A.aC(o,n).k(0)+", topRight: "+new A.aC(m,l).k(0)+", bottomRight: "+new A.aC(q.x,q.y).k(0)+", bottomLeft: "+new A.aC(q.z,q.Q).k(0)+")"}} +A.CP.prototype={ +I(){return"KeyEventType."+this.b}} +A.hX.prototype={ +aeA(){var s=this.d +return"0x"+B.f.iv(s,16)+new A.agc(B.c.dP(s/4294967296)).$0()}, +a9Q(){var s=this.e +if(s==null)return"" +switch(s){case"\n":return'"\\n"' +case"\t":return'"\\t"' +case"\r":return'"\\r"' +case"\b":return'"\\b"' +case"\f":return'"\\f"' +default:return'"'+s+'"'}}, +agQ(){var s=this.e +if(s==null)return"" +return" (0x"+new A.R(new A.fu(s),new A.agd(),t.Hz.h("R")).c_(0," ")+")"}, +k(a){var s=this,r=A.aY0(s.b),q=B.f.iv(s.c,16),p=s.aeA(),o=s.a9Q(),n=s.agQ(),m=s.f?", synthesized":"" +return"KeyData(type: "+r+", physical: 0x"+q+", logical: "+p+", character: "+o+n+m+")"}} +A.agc.prototype={ +$0(){switch(this.a){case 0:return" (Unicode)" +case 1:return" (Unprintable)" +case 2:return" (Flutter)" +case 23:return" (Web)"}return""}, +$S:41} +A.agd.prototype={ +$1(a){return B.d.lO(B.f.iv(a,16),2,"0")}, +$S:82} +A.m.prototype={ +V7(){var s=this +return 0.2126*A.aFp((s.gl(s)>>>16&255)/255)+0.7152*A.aFp((s.gl(s)>>>8&255)/255)+0.0722*A.aFp((s.gl(s)&255)/255)}, +j(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +if(J.U(b)!==A.t(s))return!1 +return b instanceof A.m&&b.gl(b)===s.gl(s)}, +gt(a){return B.f.gt(this.gl(this))}, +k(a){return"Color(0x"+B.d.lO(B.f.iv(this.gl(this),16),8,"0")+")"}, +gl(a){return this.a}} +A.y4.prototype={ +I(){return"StrokeCap."+this.b}} +A.y5.prototype={ +I(){return"StrokeJoin."+this.b}} +A.Rf.prototype={ +I(){return"PaintingStyle."+this.b}} +A.cB.prototype={ +I(){return"BlendMode."+this.b}} +A.vC.prototype={ +I(){return"Clip."+this.b}} +A.a7O.prototype={ +I(){return"BlurStyle."+this.b}} +A.tg.prototype={ +j(a,b){if(b==null)return!1 +return b instanceof A.tg&&b.a===this.a&&b.b===this.b}, +gt(a){return A.N(this.a,this.b,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a){return"MaskFilter.blur("+this.a.k(0)+", "+B.c.af(this.b,1)+")"}} +A.rv.prototype={ +I(){return"FilterQuality."+this.b}} +A.aG7.prototype={} +A.jC.prototype={ +aV(a,b){return new A.jC(this.a,this.b.S(0,b),this.c*b)}, +j(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +return b instanceof A.jC&&b.a.j(0,s.a)&&b.b.j(0,s.b)&&b.c===s.c}, +gt(a){return A.N(this.a,this.b,this.c,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a){return"TextShadow("+this.a.k(0)+", "+this.b.k(0)+", "+A.h(this.c)+")"}} +A.lp.prototype={ +gu(a){return this.b}} +A.Pq.prototype={ +Jb(){var s=0,r=A.a1(t.hP),q,p=this,o +var $async$Jb=A.a2(function(a,b){if(a===1)return A.Z(b,r) +while(true)switch(s){case 0:o=p.a +if(o==null)throw A.c(A.Q("Object is disposed")) +o=$.W().kG(o,!1,null,null) +q=o +s=1 +break +case 1:return A.a_(q,r)}}) +return A.a0($async$Jb,r)}} +A.apV.prototype={} +A.ajI.prototype={} +A.mR.prototype={ +k(a){var s,r=A.t(this).k(0),q=this.a,p=A.dp(q[2],0),o=q[1],n=A.dp(o,0),m=q[4],l=A.dp(m,0),k=A.dp(q[3],0) +o=A.dp(o,0) +s=q[0] +return r+"(buildDuration: "+(A.h((p.a-n.a)*0.001)+"ms")+", rasterDuration: "+(A.h((l.a-k.a)*0.001)+"ms")+", vsyncOverhead: "+(A.h((o.a-A.dp(s,0).a)*0.001)+"ms")+", totalSpan: "+(A.h((A.dp(m,0).a-A.dp(s,0).a)*0.001)+"ms")+", layerCacheCount: "+q[6]+", layerCacheBytes: "+q[7]+", pictureCacheCount: "+q[8]+", pictureCacheBytes: "+q[9]+", frameNumber: "+B.b.gO(q)+")"}} +A.l5.prototype={ +I(){return"AppLifecycleState."+this.b}} +A.Al.prototype={ +I(){return"AppExitResponse."+this.b}} +A.n6.prototype={ +grp(a){var s=this.a,r=B.bX.i(0,s) +return r==null?s:r}, +gAa(){var s=this.c,r=B.ch.i(0,s) +return r==null?s:r}, +j(a,b){var s,r=this +if(b==null)return!1 +if(r===b)return!0 +if(b instanceof A.n6)if(b.grp(b)===r.grp(r))s=b.gAa()==r.gAa() +else s=!1 +else s=!1 +return s}, +gt(a){return A.N(this.grp(this),null,this.gAa(),B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a){return this.Ra("_")}, +Ra(a){var s=this,r=s.grp(s) +if(s.c!=null)r+=a+A.h(s.gAa()) +return r.charCodeAt(0)==0?r:r}} +A.aa8.prototype={ +I(){return"DartPerformanceMode."+this.b}} +A.ub.prototype={} +A.nh.prototype={ +I(){return"PointerChange."+this.b}} +A.lF.prototype={ +I(){return"PointerDeviceKind."+this.b}} +A.xh.prototype={ +I(){return"PointerSignalKind."+this.b}} +A.lE.prototype={ +k(a){return"PointerData(x: "+A.h(this.x)+", y: "+A.h(this.y)+")"}} +A.xf.prototype={} +A.dv.prototype={ +k(a){return"SemanticsAction."+this.b}} +A.cV.prototype={ +k(a){return"SemanticsFlag."+this.b}} +A.aog.prototype={} +A.OX.prototype={ +I(){return"FontStyle."+this.b}} +A.pn.prototype={ +I(){return"PlaceholderAlignment."+this.b}} +A.iG.prototype={ +k(a){var s=B.SS.i(0,this.a) +s.toString +return s}} +A.oI.prototype={ +j(a,b){if(b==null)return!1 +if(J.U(b)!==A.t(this))return!1 +return b instanceof A.oI&&b.a===this.a&&b.b===this.b}, +gt(a){return A.N(this.a,this.b,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a){return"FontVariation('"+this.a+"', "+A.h(this.b)+")"}} +A.kD.prototype={ +I(){return"TextAlign."+this.b}} +A.G5.prototype={ +I(){return"TextBaseline."+this.b}} +A.nz.prototype={ +j(a,b){if(b==null)return!1 +return b instanceof A.nz&&b.a===this.a}, +gt(a){return B.f.gt(this.a)}, +k(a){var s,r=this.a +if(r===0)return"TextDecoration.none" +s=A.a([],t.s) +if((r&1)!==0)s.push("underline") +if((r&2)!==0)s.push("overline") +if((r&4)!==0)s.push("lineThrough") +if(s.length===1)return"TextDecoration."+s[0] +return"TextDecoration.combine(["+B.b.c_(s,", ")+"])"}} +A.pN.prototype={ +I(){return"TextDecorationStyle."+this.b}} +A.UA.prototype={ +I(){return"TextLeadingDistribution."+this.b}} +A.Ga.prototype={ +j(a,b){var s +if(b==null)return!1 +if(J.U(b)!==A.t(this))return!1 +if(b instanceof A.Ga)s=b.c===this.c +else s=!1 +return s}, +gt(a){return A.N(!0,!0,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a){return"TextHeightBehavior(applyHeightToFirstAscent: true, applyHeightToLastDescent: true, leadingDistribution: "+this.c.k(0)+")"}} +A.m_.prototype={ +I(){return"TextDirection."+this.b}} +A.eE.prototype={ +j(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +if(J.U(b)!==A.t(s))return!1 +return b instanceof A.eE&&b.a===s.a&&b.b===s.b&&b.c===s.c&&b.d===s.d&&b.e===s.e}, +gt(a){var s=this +return A.N(s.a,s.b,s.c,s.d,s.e,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a){var s=this +return"TextBox.fromLTRBD("+B.c.af(s.a,1)+", "+B.c.af(s.b,1)+", "+B.c.af(s.c,1)+", "+B.c.af(s.d,1)+", "+s.e.k(0)+")"}} +A.G4.prototype={ +I(){return"TextAffinity."+this.b}} +A.b9.prototype={ +j(a,b){if(b==null)return!1 +if(J.U(b)!==A.t(this))return!1 +return b instanceof A.b9&&b.a===this.a&&b.b===this.b}, +gt(a){return A.N(this.a,this.b,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a){return A.t(this).k(0)+"(offset: "+this.a+", affinity: "+this.b.k(0)+")"}} +A.ce.prototype={ +gck(){return this.a>=0&&this.b>=0}, +j(a,b){if(b==null)return!1 +if(this===b)return!0 +return b instanceof A.ce&&b.a===this.a&&b.b===this.b}, +gt(a){return A.N(B.f.gt(this.a),B.f.gt(this.b),B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a){return"TextRange(start: "+this.a+", end: "+this.b+")"}} +A.pi.prototype={ +j(a,b){if(b==null)return!1 +if(J.U(b)!==A.t(this))return!1 +return b instanceof A.pi&&b.a===this.a}, +gt(a){return B.c.gt(this.a)}, +k(a){return A.t(this).k(0)+"(width: "+A.h(this.a)+")"}} +A.Mr.prototype={ +I(){return"BoxHeightStyle."+this.b}} +A.a7T.prototype={ +I(){return"BoxWidthStyle."+this.b}} +A.uw.prototype={ +I(){return"TileMode."+this.b}} +A.aaI.prototype={} +A.wd.prototype={} +A.TE.prototype={} +A.vr.prototype={ +I(){return"Brightness."+this.b}} +A.a8h.prototype={ +j(a,b){if(b==null)return!1 +return this===b}, +gt(a){return A.I.prototype.gt.call(this,this)}} +A.P2.prototype={ +j(a,b){var s +if(b==null)return!1 +if(J.U(b)!==A.t(this))return!1 +if(b instanceof A.P2)s=!0 +else s=!1 +return s}, +gt(a){return A.N(null,null,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a){return"GestureSettings(physicalTouchSlop: null, physicalDoubleTapSlop: null)"}} +A.a6C.prototype={ +wY(a){var s,r,q +if(A.eW(a,0,null).gXb())return A.a3U(B.kC,a,B.a2,!1) +s=this.b +if(s==null){s=self.window.document.querySelector("meta[name=assetBase]") +r=s==null?null:s.content +s=r==null +if(!s)self.window.console.warn("The `assetBase` meta tag is now deprecated.\nUse engineInitializer.initializeEngine(config) instead.\nSee: https://docs.flutter.dev/development/platform-integration/web/initialization") +q=this.b=s?"":r +s=q}return A.a3U(B.kC,s+"assets/"+a,B.a2,!1)}} +A.aDq.prototype={ +$1(a){return this.a_J(a)}, +$0(){return this.$1(null)}, +$C:"$1", +$R:0, +$D(){return[null]}, +a_J(a){var s=0,r=A.a1(t.H) +var $async$$1=A.a2(function(b,c){if(b===1)return A.Z(c,r) +while(true)switch(s){case 0:s=2 +return A.a7(A.aE1(a),$async$$1) +case 2:return A.a_(null,r)}}) +return A.a0($async$$1,r)}, +$S:568} +A.aDr.prototype={ +$0(){var s=0,r=A.a1(t.P),q=this +var $async$$0=A.a2(function(a,b){if(a===1)return A.Z(b,r) +while(true)switch(s){case 0:q.a.$0() +s=2 +return A.a7(A.aIr(),$async$$0) +case 2:q.b.$0() +return A.a_(null,r)}}) +return A.a0($async$$0,r)}, +$S:112} +A.a80.prototype={ +L9(a){return $.aPL.bm(0,a,new A.a81(a))}} +A.a81.prototype={ +$0(){return t.e.a(A.bM(this.a))}, +$S:107} +A.aet.prototype={ +H9(a){var s=new A.aew(a) +A.cE(self.window,"popstate",B.mZ.L9(s),null) +return new A.aev(this,s)}, +a0b(){var s=self.window.location.hash +if(s.length===0||s==="#")return"/" +return B.d.bL(s,1)}, +Lf(a){return A.aKy(self.window.history)}, +Yz(a){var s,r=a.length===0||a==="/"?"":"#"+a,q=self.window.location.pathname +if(q==null)q=null +q.toString +s=self.window.location.search +if(s==null)s=null +s.toString +return q+s+r}, +YQ(a,b,c,d){var s=this.Yz(d),r=self.window.history,q=A.aA(b) +if(q==null)q=t.K.a(q) +r.pushState(q,c,s)}, +p8(a,b,c,d){var s,r=this.Yz(d),q=self.window.history +if(b==null)s=null +else{s=A.aA(b) +if(s==null)s=t.K.a(s)}q.replaceState(s,c,r)}, +xd(a,b){var s=self.window.history +s.go(b) +return this.akq()}, +akq(){var s=new A.aD($.aw,t.d),r=A.bc("unsubscribe") +r.b=this.H9(new A.aeu(r,new A.bI(s,t.gR))) +return s}} +A.aew.prototype={ +$1(a){var s=t.e.a(a).state +if(s==null)s=null +else{s=A.aIj(s) +s.toString}this.a.$1(s)}, +$S:569} +A.aev.prototype={ +$0(){var s=this.b +A.f7(self.window,"popstate",B.mZ.L9(s),null) +$.aPL.C(0,s) +return null}, +$S:0} +A.aeu.prototype={ +$1(a){this.a.aI().$0() +this.b.iV(0)}, +$S:12} +A.ajO.prototype={} +A.LT.prototype={ +gu(a){return a.length}} +A.LU.prototype={ +E(a,b){throw A.c(A.a3("Not supported"))}, +ai(a,b){return A.jT(a.get(b))!=null}, +i(a,b){return A.jT(a.get(b))}, +aa(a,b){var s,r,q=a.entries() +for(;!0;){s=q.next() +r=s.done +r.toString +if(r)return +r=s.value[0] +r.toString +b.$2(r,A.jT(s.value[1]))}}, +gc2(a){var s=A.a([],t.s) +this.aa(a,new A.a6H(s)) +return s}, +gaT(a){var s=A.a([],t.n4) +this.aa(a,new A.a6I(s)) +return s}, +gu(a){var s=a.size +s.toString +return s}, +ga7(a){var s=a.size +s.toString +return s===0}, +gc8(a){var s=a.size +s.toString +return s!==0}, +n(a,b,c){throw A.c(A.a3("Not supported"))}, +bm(a,b,c){throw A.c(A.a3("Not supported"))}, +C(a,b){throw A.c(A.a3("Not supported"))}, +$iaJ:1} +A.a6H.prototype={ +$2(a,b){return this.a.push(a)}, +$S:23} +A.a6I.prototype={ +$2(a,b){return this.a.push(b)}, +$S:23} +A.LV.prototype={ +gu(a){return a.length}} +A.ol.prototype={} +A.QO.prototype={ +gu(a){return a.length}} +A.W_.prototype={} +A.auQ.prototype={} +A.on.prototype={ +gum(){var s,r=this.b +if(r===$){s=A.aH2(!1,A.o(this).h("on.0")) +r!==$&&A.ay() +this.b=s +r=s}return r}, +aoZ(a){var s,r,q,p,o=this +try{if((o.gum().c&4)!==0){q=A.Q("Cannot emit new states after calling close") +throw A.c(q)}if(a.j(0,o.c)&&o.d)return +o.c=a +o.gum().D(0,o.c) +o.d=!0}catch(p){s=A.ax(p) +r=A.aZ(p) +throw p}}, +aA(a){var s=0,r=A.a1(t.H),q=this +var $async$aA=A.a2(function(b,c){if(b===1)return A.Z(c,r) +while(true)switch(s){case 0:s=2 +return A.a7(q.gum().aA(0),$async$aA) +case 2:return A.a_(null,r)}}) +return A.a0($async$aA,r)}, +$ium:1} +A.a7L.prototype={} +A.Be.prototype={} +A.hz.prototype={ +gab(a){return new A.FN(this.a,0,0)}, +gL(a){var s=this.a,r=s.length +return r===0?A.T(A.Q("No element")):B.d.P(s,0,new A.my(s,r,0,176).k7())}, +gO(a){var s=this.a,r=s.length +return r===0?A.T(A.Q("No element")):B.d.bL(s,new A.As(s,0,r,176).k7())}, +ga7(a){return this.a.length===0}, +gc8(a){return this.a.length!==0}, +gu(a){var s,r,q=this.a,p=q.length +if(p===0)return 0 +s=new A.my(q,p,0,176) +for(r=0;s.k7()>=0;)++r +return r}, +bl(a,b){var s,r,q,p,o,n +A.eA(b,"index") +s=this.a +r=s.length +if(r!==0){q=new A.my(s,r,0,176) +for(p=0,o=0;n=q.k7(),n>=0;o=n){if(p===b)return B.d.P(s,o,n);++p}}else p=0 +throw A.c(A.Pv(b,this,"index",null,p))}, +p(a,b){var s +if(typeof b!="string")return!1 +s=b.length +if(s===0)return!1 +if(new A.my(b,s,0,176).k7()!==s)return!1 +s=this.a +return A.b3H(s,b,0,s.length)>=0}, +aiA(a,b,c){var s,r +if(a===0||b===this.a.length)return b +s=this.a +c=new A.my(s,s.length,b,176) +do{r=c.k7() +if(r<0)break +if(--a,a>0){b=r +continue}else{b=r +break}}while(!0) +return b}, +iA(a,b){A.eA(b,"count") +return this.aiz(b)}, +aiz(a){var s=this.aiA(a,0,null),r=this.a +if(s===r.length)return B.dc +return new A.hz(B.d.bL(r,s))}, +hJ(a,b){var s=this.DD(0,b).nc(0) +if(s.length===0)return B.dc +return new A.hz(s)}, +R(a,b){return new A.hz(this.a+b.a)}, +j(a,b){if(b==null)return!1 +return b instanceof A.hz&&this.a===b.a}, +gt(a){return B.d.gt(this.a)}, +k(a){return this.a}} +A.FN.prototype={ +gJ(a){var s=this,r=s.d +return r==null?s.d=B.d.P(s.a,s.b,s.c):r}, +q(){return this.DZ(1,this.c)}, +DZ(a,b){var s,r,q,p,o,n,m,l,k,j=this +if(a>0){s=j.c +for(r=j.a,q=r.length,p=176;s0;s=q){q=r.k7() +if(q<0)break;--a}p.b=s +p.c=b +p.d=null +return a===0}} +A.my.prototype={ +k7(){var s,r,q,p,o,n,m,l=this,k=u.S +for(s=l.b,r=l.a;q=l.c,qs;){p=k.c=q-1 +o=r.charCodeAt(p) +if((o&64512)!==56320){p=k.d=j.charCodeAt(k.d&240|A.v6(o)) +if(((p>=208?k.d=A.aEd(r,s,k.c,p):p)&1)===0)return q +continue}if(p>=s){n=r.charCodeAt(p-1) +if((n&64512)===55296){m=A.mn(n,o) +p=--k.c}else m=2}else m=2 +l=k.d=j.charCodeAt(k.d&240|m) +if(((l>=208?k.d=A.aEd(r,s,p,l):l)&1)===0)return q}p=k.d=j.charCodeAt(k.d&240|15) +if(((p>=208?k.d=A.aEd(r,s,q,p):p)&1)===0)return k.c +return-1}} +A.bO.prototype={ +i(a,b){var s,r=this +if(!r.ys(b))return null +s=r.c.i(0,r.a.$1(r.$ti.h("bO.K").a(b))) +return s==null?null:s.b}, +n(a,b,c){var s,r=this +if(!r.ys(b))return +s=r.$ti +r.c.n(0,r.a.$1(b),new A.aH(b,c,s.h("@").N(s.h("bO.V")).h("aH<1,2>")))}, +E(a,b){J.h7(b,new A.a8i(this))}, +o1(a,b,c){var s=this.c +return s.o1(s,b,c)}, +ai(a,b){var s=this +if(!s.ys(b))return!1 +return s.c.ai(0,s.a.$1(s.$ti.h("bO.K").a(b)))}, +gd5(a){var s=this.c +return s.gd5(s).eQ(0,new A.a8j(this),this.$ti.h("aH"))}, +aa(a,b){this.c.aa(0,new A.a8k(this,b))}, +ga7(a){return this.c.a===0}, +gc8(a){return this.c.a!==0}, +gc2(a){var s=this.c +s=s.gaT(s) +return A.n8(s,new A.a8l(this),A.o(s).h("n.E"),this.$ti.h("bO.K"))}, +gu(a){return this.c.a}, +oS(a,b,c,d){var s=this.c +return s.oS(s,new A.a8m(this,b,c,d),c,d)}, +bm(a,b,c){return this.c.bm(0,this.a.$1(b),new A.a8n(this,b,c)).b}, +C(a,b){var s,r=this +if(!r.ys(b))return null +s=r.c.C(0,r.a.$1(r.$ti.h("bO.K").a(b))) +return s==null?null:s.b}, +gaT(a){var s=this.c +s=s.gaT(s) +return A.n8(s,new A.a8o(this),A.o(s).h("n.E"),this.$ti.h("bO.V"))}, +k(a){return A.ahp(this)}, +ys(a){var s +if(this.$ti.h("bO.K").b(a))s=!0 +else s=!1 +return s}, +$iaJ:1} +A.a8i.prototype={ +$2(a,b){this.a.n(0,a,b) +return b}, +$S(){return this.a.$ti.h("~(bO.K,bO.V)")}} +A.a8j.prototype={ +$1(a){var s=a.b,r=this.a.$ti +return new A.aH(s.a,s.b,r.h("@").N(r.h("bO.V")).h("aH<1,2>"))}, +$S(){return this.a.$ti.h("aH(aH>)")}} +A.a8k.prototype={ +$2(a,b){return this.b.$2(b.a,b.b)}, +$S(){return this.a.$ti.h("~(bO.C,aH)")}} +A.a8l.prototype={ +$1(a){return a.a}, +$S(){return this.a.$ti.h("bO.K(aH)")}} +A.a8m.prototype={ +$2(a,b){return this.b.$2(b.a,b.b)}, +$S(){return this.a.$ti.N(this.c).N(this.d).h("aH<1,2>(bO.C,aH)")}} +A.a8n.prototype={ +$0(){var s=this.a.$ti +return new A.aH(this.b,this.c.$0(),s.h("@").N(s.h("bO.V")).h("aH<1,2>"))}, +$S(){return this.a.$ti.h("aH()")}} +A.a8o.prototype={ +$1(a){return a.b}, +$S(){return this.a.$ti.h("bO.V(aH)")}} +A.NF.prototype={ +e8(a,b){return J.d(a,b)}, +eD(a,b){return J.D(b)}} +A.CH.prototype={ +e8(a,b){var s,r,q,p +if(a===b)return!0 +s=J.ap(a) +r=J.ap(b) +for(q=this.a;!0;){p=s.q() +if(p!==r.q())return!1 +if(!p)return!0 +if(!q.e8(s.gJ(s),r.gJ(r)))return!1}}, +eD(a,b){var s,r,q +for(s=J.ap(b),r=this.a,q=0;s.q();){q=q+r.eD(0,s.gJ(s))&2147483647 +q=q+(q<<10>>>0)&2147483647 +q^=q>>>6}q=q+(q<<3>>>0)&2147483647 +q^=q>>>11 +return q+(q<<15>>>0)&2147483647}} +A.n2.prototype={ +e8(a,b){var s,r,q,p,o +if(a===b)return!0 +s=J.aF(a) +r=s.gu(a) +q=J.aF(b) +if(r!==q.gu(b))return!1 +for(p=this.a,o=0;o>>0)&2147483647 +q^=q>>>6}q=q+(q<<3>>>0)&2147483647 +q^=q>>>11 +return q+(q<<15>>>0)&2147483647}} +A.qj.prototype={ +e8(a,b){var s,r,q,p,o +if(a===b)return!0 +s=this.a +r=A.jk(s.gaph(),s.gar0(s),s.gas_(),A.o(this).h("qj.E"),t.S) +for(s=J.ap(a),q=0;s.q();){p=s.gJ(s) +o=r.i(0,p) +r.n(0,p,(o==null?0:o)+1);++q}for(s=J.ap(b);s.q();){p=s.gJ(s) +o=r.i(0,p) +if(o==null||o===0)return!1 +r.n(0,p,o-1);--q}return q===0}, +eD(a,b){var s,r,q +for(s=J.ap(b),r=this.a,q=0;s.q();)q=q+r.eD(0,s.gJ(s))&2147483647 +q=q+(q<<3>>>0)&2147483647 +q^=q>>>11 +return q+(q<<15>>>0)&2147483647}} +A.yA.prototype={} +A.xR.prototype={} +A.za.prototype={ +gt(a){var s=this.a +return 3*s.a.eD(0,this.b)+7*s.b.eD(0,this.c)&2147483647}, +j(a,b){var s +if(b==null)return!1 +if(b instanceof A.za){s=this.a +s=s.a.e8(this.b,b.b)&&s.b.e8(this.c,b.c)}else s=!1 +return s}} +A.tf.prototype={ +e8(a,b){var s,r,q,p,o,n,m +if(a===b)return!0 +s=J.aF(a) +r=J.aF(b) +if(s.gu(a)!==r.gu(b))return!1 +q=A.jk(null,null,null,t.PJ,t.S) +for(p=J.ap(s.gc2(a));p.q();){o=p.gJ(p) +n=new A.za(this,o,s.i(a,o)) +m=q.i(0,n) +q.n(0,n,(m==null?0:m)+1)}for(s=J.ap(r.gc2(b));s.q();){o=s.gJ(s) +n=new A.za(this,o,r.i(b,o)) +m=q.i(0,n) +if(m==null||m===0)return!1 +q.n(0,n,m-1)}return!0}, +eD(a,b){var s,r,q,p,o,n,m,l,k +for(s=J.dW(b),r=J.ap(s.gc2(b)),q=this.a,p=this.b,o=this.$ti.z[1],n=0;r.q();){m=r.gJ(r) +l=q.eD(0,m) +k=s.i(b,m) +n=n+3*l+7*p.eD(0,k==null?o.a(k):k)&2147483647}n=n+(n<<3>>>0)&2147483647 +n^=n>>>11 +return n+(n<<15>>>0)&2147483647}} +A.ND.prototype={ +e8(a,b){var s,r=this,q=t.Ro +if(q.b(a))return q.b(b)&&new A.xR(r,t.n5).e8(a,b) +q=t.f +if(q.b(a))return q.b(b)&&new A.tf(r,r,t.Dx).e8(a,b) +if(!r.b){q=t.j +if(q.b(a))return q.b(b)&&new A.n2(r,t.wO).e8(a,b) +q=t.JY +if(q.b(a))return q.b(b)&&new A.CH(r,t.K9).e8(a,b)}else{q=t.JY +if(q.b(a)){s=t.j +if(s.b(a)!==s.b(b))return!1 +return q.b(b)&&new A.yA(r,t.N2).e8(a,b)}}return J.d(a,b)}, +eD(a,b){var s=this +if(t.Ro.b(b))return new A.xR(s,t.n5).eD(0,b) +if(t.f.b(b))return new A.tf(s,s,t.Dx).eD(0,b) +if(!s.b){if(t.j.b(b))return new A.n2(s,t.wO).eD(0,b) +if(t.JY.b(b))return new A.CH(s,t.K9).eD(0,b)}else if(t.JY.b(b))return new A.yA(s,t.N2).eD(0,b) +return J.D(b)}, +as0(a){!t.JY.b(a) +return!0}} +A.Pb.prototype={ +y9(a){var s=this.b[a] +if(s==null){this.$ti.c.a(null) +s=null}return s}, +gu(a){return this.c}, +k(a){var s=this.b +return A.aLu(A.eD(s,0,A.fK(this.c,"count",t.S),A.S(s).c),"(",")")}, +a7j(a,b){var s,r,q,p,o,n,m,l,k,j=this,i=b*2+2 +for(s=j.a,r=j.$ti.c;q=j.c,i0){j.b[b]=k +b=p}}j.b[b]=a}} +A.rh.prototype={ +j(a,b){var s,r,q,p,o +if(b==null)return!1 +if(b instanceof A.rh){s=this.a +r=b.a +q=s.length +if(q!==r.length)return!1 +for(p=0,o=0;o>>0)-s,q=0;q1125899906842623)throw A.c(A.a3("Hashing is unsupported for messages with more than 2^53 bits.")) +p=r*8 +o=l.b +l.E(0,new Uint8Array(8)) +n=A.fC(l.a.buffer,0,null) +n.setUint32(o,B.f.d4(p,4294967296),!1) +n.setUint32(o+4,p>>>0,!1)}} +A.a22.prototype={ +hr(a){var s=new Uint32Array(A.em(A.a([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225],t.t))),r=new Uint32Array(64),q=new Uint8Array(0) +return new A.H5(new A.a23(s,r,a,new Uint32Array(16),new A.GB(q,0)))}} +A.aAB.prototype={ +avT(a){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c +for(s=this.x,r=0;r<16;++r)s[r]=a[r] +for(r=16;r<64;++r){q=s[r-2] +p=s[r-7] +o=s[r-15] +s[r]=((((q>>>17|q<<15)^(q>>>19|q<<13)^q>>>10)>>>0)+p>>>0)+((((o>>>7|o<<25)^(o>>>18|o<<14)^o>>>3)>>>0)+s[r-16]>>>0)>>>0}q=this.w +n=q[0] +m=q[1] +l=q[2] +k=q[3] +j=q[4] +i=q[5] +h=q[6] +g=q[7] +for(f=n,r=0;r<64;++r,g=h,h=i,i=j,j=d,k=l,l=m,m=f,f=c){e=(g+(((j>>>6|j<<26)^(j>>>11|j<<21)^(j>>>25|j<<7))>>>0)>>>0)+(((j&i^~j&h)>>>0)+(B.PL[r]+s[r]>>>0)>>>0)>>>0 +d=k+e>>>0 +c=e+((((f>>>2|f<<30)^(f>>>13|f<<19)^(f>>>22|f<<10))>>>0)+((f&m^f&l^m&l)>>>0)>>>0)>>>0}q[0]=f+n>>>0 +q[1]=m+q[1]>>>0 +q[2]=l+q[2]>>>0 +q[3]=k+q[3]>>>0 +q[4]=j+q[4]>>>0 +q[5]=i+q[5]>>>0 +q[6]=h+q[6]>>>0 +q[7]=g+q[7]>>>0}} +A.a23.prototype={} +A.acu.prototype={ +j(a,b){var s,r=this +if(b==null)return!1 +if(r!==b)s=b instanceof A.iv&&A.t(r)===A.t(b)&&A.Lc([r.a,r.b,r.c],[b.a,b.b,b.c]) +else s=!0 +return s}, +gt(a){var s=this +return(A.fE(A.t(s))^A.aR0([s.a,s.b,s.c]))>>>0}, +k(a){var s,r=this +switch(null){case!0:return A.aR1(A.t(r),[r.a,r.b,r.c]) +case!1:return A.t(r).k(0) +default:A.aKU() +s=A.t(r).k(0) +return s}}} +A.a5.prototype={ +j(a,b){var s +if(b==null)return!1 +if(this!==b)s=t.T4.b(b)&&A.t(this)===A.t(b)&&A.Lc(this.gaC(),b.gaC()) +else s=!0 +return s}, +gt(a){return(A.fE(A.t(this))^A.aR0(this.gaC()))>>>0}, +k(a){var s,r=this +switch(null){case!0:return A.aR1(A.t(r),r.gaC()) +case!1:return A.t(r).k(0) +default:A.aKU() +s=A.t(r).k(0) +return s}}} +A.aCr.prototype={ +$2(a,b){return J.D(a)-J.D(b)}, +$S:67} +A.aCs.prototype={ +$1(a){var s=this.a,r=s.a +s.a=(r^A.aHO(r,[a,J.bq(s.b,a)]))>>>0}, +$S:24} +A.aCt.prototype={ +$2(a,b){return J.D(a)-J.D(b)}, +$S:67} +A.aEj.prototype={ +$1(a){return J.f0(a)}, +$S:226} +A.qC.prototype={ +ac(){return new A.GY(A.A(t.S,t.Cm),null,null,B.j)}} +A.GY.prototype={ +H(a){var s,r=this,q=r.a7b(),p=r.CW +p.toString +s=r.gds() +s=r.Nb(p.a2(0,s.gl(s))) +p=r.Nb(q) +r.a.toString +return new A.vk(new A.M7(s,p,null),q,null)}, +Nb(a){var s,r,q,p=a.cy +if(!p.a||!p.w)return a +s=A.a([],t.hn) +for(p=a.ch,r=this.cy,q=0;q") +if(this.b)return new A.R(r,new A.a7_(),s).is(0,B.e9) +else return new A.R(r,new A.a70(),s).is(0,new A.a71())+(r.length-1)*this.d}, +Vo(a,b){var s=this,r=a==null?s.c:a,q=b==null?s.e:b +return A.f1(r,s.d,s.b,q,s.a)}, +HO(a){return this.Vo(null,a)}, +an_(a){return this.Vo(a,null)}, +gaC(){var s=this +return[s.a,s.b,s.c,s.d,s.e]}} +A.a7_.prototype={ +$1(a){return a.e}, +$S:162} +A.a70.prototype={ +$1(a){return a.e}, +$S:162} +A.a71.prototype={ +$2(a,b){return a+b}, +$S:120} +A.db.prototype={ +gaC(){var s=this +return[s.a,s.b,s.e,s.f,s.r,s.w,s.x,s.y,s.c,s.d]}} +A.aL.prototype={ +gaC(){var s=this +return[s.a,s.b,s.c,s.d]}} +A.M4.prototype={ +gaC(){var s=this +return[s.a,s.b,s.c,s.d,s.e]}} +A.Ma.prototype={ +gaC(){var s=this +return[s.a,s.b,s.c,s.d,s.e,s.f,!1,s.w]}} +A.UP.prototype={ +I(){return"TooltipDirection."+this.b}} +A.Mb.prototype={ +gaC(){var s=this +return[s.a,s.b,s.c,s.d,s.e,s.f,s.r,s.w,!1,!1,s.Q,s.as]}} +A.k1.prototype={ +gaC(){return[this.a,this.b,B.aH,B.q,this.e]}} +A.AA.prototype={} +A.Md.prototype={ +gaC(){var s=this +return[s.c,s.d,s.e,s.f,s.r,s.w,s.a,s.b]}} +A.qE.prototype={ +d_(a){var s,r=this.a +r.toString +s=this.b +s.toString +return r.lI(r,s,a)}} +A.W8.prototype={} +A.Wc.prototype={} +A.Wd.prototype={} +A.Wf.prototype={} +A.Wg.prototype={} +A.Wi.prototype={} +A.Wj.prototype={} +A.Wk.prototype={} +A.Wl.prototype={} +A.a72.prototype={ +$1(a){return a.c.length!==0}, +$S:687} +A.ok.prototype={ +gaC(){return[this.a,this.b,this.c]}} +A.We.prototype={} +A.a73.prototype={ +ee(a,b,c){var s,r,q,p,o,n,m,l,k,j,i,h=this +h.Dy(a,b,c) +s=c.a +r=c.b +q=s.ch +if(q.length===0)return +p=b.b +q=h.UQ(p,A.aFf(s,p.a),q) +h.y=q +h.aoz(b,q,c) +h.a1Y(a,b,c,p) +for(q=r.ch,p=r.cy.e,o=0;o")).aa(0,new A.a74(p,j,n,o)) +s.push(new A.Cm(j))}return s}, +aoz(b6,b7,b8){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,b0,b1,b2,b3=this,b4=b8.a,b5=b6.b +for(s=b4.ch,r=b6.a,q=b4.y,p=b4.x,o=0;oa3){a4=b3.aQ(Math.max(p,a3),b5,b8) +a5=A.ku(e,Math.min(b3.aQ(a2,b5,b8),a4-a0),d,a4,b,a,h,c)}else{a6=b3.aQ(Math.min(q,a3),b5,b8) +a5=A.ku(e,a6,d,Math.max(b3.aQ(a2,b5,b8),a6+a0),b,a,h,c)}a2=b3.f +a2===$&&A.b() +a1=a1.d +a2.sM(0,a1==null?B.n:a1) +a2.sbU(null) +r.bQ(a5,b3.f)}a1=l.b +a2=l.a +if(a1!==a2){if(a1>a2){a4=b3.aQ(Math.max(p,a2),b5,b8) +a5=A.ku(e,Math.min(b3.aQ(a1,b5,b8),a4-a0),d,a4,b,a,h,c)}else{a6=b3.aQ(Math.min(q,a2),b5,b8) +a5=A.ku(e,a6,d,Math.max(b3.aQ(a1,b5,b8),a6+a0),b,a,h,c)}h=b3.f +h===$&&A.b() +c=l.c +b=l.d +if(b!=null){h.sM(0,B.k) +h.sbU(b.iX(0,new A.w(a5.a,a5.b,a5.c,a5.d)))}else{h.sM(0,c==null?B.n:c) +h.sbU(null)}r.bQ(a5,b3.f) +h=l.y +if(h.length!==0)for(a7=0;a70){h=g.a +h=(h.gl(h)>>>24&255)/255>0}else h=!1 +if(h){h=b3.r +h===$&&A.b() +h.sM(0,g.a) +h.sbs(k) +b2=$.W().bD() +b2.ex(a5) +r.bP(A.aa9(b2,l.r),b3.r)}}}}, +aoT(a9,b0,b1,b2,b3,b4,b5,b6,b7){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,a2,a3,a4,a5=this,a6=null,a7=b0.b,a8=b2.w.$4(b3,b4,b5,b6) +if(a8==null)return +s=$.cY().ma(a9,a8.b) +r=a8.a +q=A.nB(a6,a6,a6,a6,A.c0(a8.e,a6,s,r),B.aH,B.q,a6,b7.c,B.a_) +q.Bk(b2.r) +r=q.b +p=r.b +r=r.a.a +r=r.gbh(r) +s=b1[b4].b[b6] +o=b5.b +n=a5.aQ(o,a7,b7) +m=b2.c +l=p+m.gdw() +k=r+4+(m.gbO(m)+m.gbX(m)) +j=a5.aQ(0,a7,b7) +i=Math.min(j,n) +h=Math.max(j,n) +r=b2.z +if(r!==B.a3Q)g=r===B.Bg&&o>=b5.a +else g=!0 +r=b2.d +f=g?i-k-r:h+r +e=a5.CY(s,l,b2.e,b2.f) +s=e+l +r=f+k +d=new A.w(e,f,s,r) +o=b2.b +c=new A.aC(o,o) +b=A.xn(d,c,c,c,c) +o=a5.w +o===$&&A.b() +o.sM(0,b2.a) +a=b2.Q +s-=e +r-=f +o=$.cY().qs(new A.G(s,r),a).b +n=$.cY() +a0=q.b +a1=a0.b +a0=a0.a.a +a2=n.qs(new A.G(a1,a0.gbh(a0)),a) +a0=d.gaK() +a1=q.b.b +n=d.gKB() +a3=b2.as +if(!a3.j(0,B.r)){a4=a5.x +a4===$&&A.b() +a4.sM(0,a3.a) +a4.sbs(a3.b)}b0.qQ(a,new A.a75(a5,b0,b,q,new A.k(a0.a-a1/2,n.b+m.b-a2.b+o)),new A.k(b.a,b.b),new A.k(0,o),new A.G(s,r))}, +aoM(a,b,c,d,e,f,g,a0){var s,r,q,p,o,n,m,l,k,j=this,i=b.d,h=i.b +if(h!==0){s=i.a +s=(s.gl(s)>>>24&255)/255===0}else s=!0 +if(s)return +if(c===0){s=b.b +r=j.aQ(s,g,a0) +q=b.a +p=j.aQ(q,g,a0) +s=q=f +if(e){d=a8.aQ(g,b3,b4) +i=b1[m].c[k] +c=a8.aQ(i.a+i.x.b,b3,b4)}else{d=a8.aQ(f+i.x.b,b3,b4) +c=a8.aQ(b1[m].c[k].b,b3,b4)}a8.aQ(b1[m].c[k].x.c,b3,b4) +b=r<=j+h+q.c&&r>=j-h-p +if(e)a=s<=c+o&&s>=d-n +else a=s>=d-n&&s<=c+o +e +if(b&&a){a0=b1[m] +a1=a0.c[k] +r=a0.a +p=a1.b +o=a8.aQ(p,b3,b4) +b1=a1.y +a4=0 +while(!0){if(!(a4=a7){a3=a5 +a2=a4 +break}++a4}return new A.Md(a0,m,a1,k,a3,a2,new A.ad(r,p),new A.k(j,o))}}return null}} +A.a74.prototype={ +$2(a,b){var s=this,r=b.e,q=s.d,p=s.a +s.b.push(s.c-q.gbB(q)/2+p.a+r/2) +p.a=p.a+(r+q.d)}, +$S:762} +A.a75.prototype={ +$0(){var s,r=this,q=r.b,p=r.c,o=r.a,n=o.w +n===$&&A.b() +s=q.a +s.bQ(p,n) +o=o.x +o===$&&A.b() +s.bQ(p,o) +q.og(r.d,r.e)}, +$S:0} +A.Cm.prototype={} +A.M7.prototype={ +az(a){var s,r,q=this.e,p=A.bt(a,null,t.w).w.gbK(),o=new A.a73() +o.DN() +s=$.W() +r=s.aj() +r.saG(0,B.a4) +o.f=r +r=s.aj() +r.saG(0,B.D) +o.r=r +r=s.aj() +r.saG(0,B.a4) +r.sM(0,B.i) +o.w=r +s=s.aj() +s.saG(0,B.D) +s.sM(0,B.n) +s.sbs(1) +o.x=s +o=new A.S8(this.d,q,p,o,a,B.aP,A.ag(t.T)) +o.aw() +o.rP(q.cy) +o.vP() +return o}, +aF(a,b){b.sic(0,this.d) +b.slZ(this.e) +b.sbK(A.bt(a,null,t.w).w.gbK()) +b.B=a +b.ag()}} +A.S8.prototype={ +sic(a,b){if(this.c1.j(0,b))return +this.c1=b +this.ag()}, +slZ(a){var s=this +if(s.cw.j(0,a))return +s.cw=a +s.tu(a.cy) +s.ag()}, +sbK(a){if(this.ce.j(0,a))return +this.ce=a +this.ag()}, +am(a,b){var s,r,q=this,p=a.gbe(a) +p.bH(0) +p.au(0,b.a,b.b) +s=q.B +r=q.gv(q) +q.dE.ee(s,new A.qX(p,r),new A.ff(q.c1,q.cw,q.ce,t.xo)) +p.b_(0)}, +t0(a){var s=this,r=s.gv(s) +return new A.AA(s.dE.lC(a,r,new A.ff(s.c1,s.cw,s.ce,t.xo)))}} +A.LY.prototype={ +gaC(){var s=this +return[s.c,s.d,s.e,s.f,s.r,s.w,s.x,s.y,s.z,s.Q,s.as,s.a,s.b,s.at]}} +A.vm.prototype={ +I(){return"AxisSide."+this.b}} +A.kG.prototype={} +A.bw.prototype={ +gaC(){var s=this +return[s.a,s.b,s.c,s.d]}} +A.Ft.prototype={ +gaC(){var s=this +return[s.a,s.b,s.c,s.d]}} +A.br.prototype={ +gaC(){return[this.b,this.a,this.c,!0]}} +A.df.prototype={ +gaC(){var s=this +return[s.a,s.b,s.c,s.d,s.e]}} +A.ad.prototype={ +Vl(a){return new A.ad(this.a,a)}, +k(a){return"("+A.h(this.a)+", "+A.h(this.b)+")"}, +gaC(){return[this.a,this.b]}} +A.ew.prototype={ +gaC(){var s=this +return[s.a,s.b,s.c,s.d,s.e,s.f,s.r,s.w,s.x]}} +A.f9.prototype={ +gaC(){var s=this +return[s.a,s.b,s.c,s.d]}} +A.UR.prototype={ +gaC(){return[this.a,this.b]}} +A.xo.prototype={ +gaC(){return[this.a,this.b]}} +A.jl.prototype={ +gaC(){var s=this +return[s.a,s.b,s.c,s.d]}} +A.jM.prototype={ +gaC(){var s=this +return[s.a,s.b,s.c,s.d]}} +A.hU.prototype={ +gaC(){var s=this +return[s.e,s.w,s.a,s.c,s.d,s.f,s.r,s.x]}} +A.ii.prototype={ +gaC(){var s=this +return[s.e,s.w,s.a,s.c,s.d,s.f,s.r,s.x]}} +A.Pf.prototype={ +gaC(){var s=this +return[s.e,s.a,s.b,s.c,s.d]}} +A.Vd.prototype={ +gaC(){var s=this +return[s.e,s.a,s.b,s.c,s.d]}} +A.pI.prototype={ +gaC(){return[this.a,this.b,this.c]}} +A.oE.prototype={ +gaC(){return[this.a,this.b,!0]}} +A.W2.prototype={} +A.W6.prototype={} +A.Y5.prototype={} +A.Yj.prototype={} +A.Yl.prototype={} +A.Ym.prototype={} +A.Yn.prototype={} +A.YP.prototype={} +A.YO.prototype={} +A.YQ.prototype={} +A.a0t.prototype={} +A.a2d.prototype={} +A.a2e.prototype={} +A.a2k.prototype={} +A.a3o.prototype={} +A.a4_.prototype={} +A.a3Z.prototype={} +A.a40.prototype={} +A.a6K.prototype={ +Bd(a,b,c,d,e,f){return new A.fn(this.as2(a,b,c,d,e,f),t.fa)}, +as1(a,b,c,d){return this.Bd(a,b,c,!0,d,!0)}, +as2(a,b,c,d,e,f){return function(){var s=a,r=b,q=c,p=d,o=e,n=f +var m=0,l=1,k,j,i,h,g,a0,a1 +return function $async$Bd(a2,a3,a4){if(a3===1){k=a4 +m=l}while(true)switch(m){case 0:i=$.cY().a_S(o,q,r,s) +h=i===o +g=!n&&h?i+r:i +a0=i+B.c.hS(q-o,r)*r===q +a1=!p&&a0?q-r:q +m=n&&!h?2:3 +break +case 2:m=4 +return a2.b=o,1 +case 4:case 3:j=a1+r/1e5 +case 5:if(!(g<=j)){m=6 +break}m=7 +return a2.b=g,1 +case 7:g+=r +m=5 +break +case 6:m=p&&!a0?8:9 +break +case 8:m=10 +return a2.b=q,1 +case 10:case 9:return 0 +case 1:return a2.c=k,3}}}}, +am3(a,b,c,d,e){var s,r,q,p,o +if(c==null)return B.e +s=B.c.goI(a-e/2)?B.U:B.vm +r=A.bc("isOverflowed") +q=s===B.U +p=c/2 +if(q)r.b=B.c.goI(a-p) +else r.b=a+p>e +if(J.d(r.aI(),!1))return B.e +o=A.bc("offset") +if(q)o.b=p-a+d +else o.b=-p+(e-a)-d +switch(b.a){case 0:case 2:return new A.k(0,o.aI()) +case 1:case 3:return new A.k(o.aI(),0)}}} +A.Ar.prototype={ +DN(){var s=this,r=$.W(),q=r.aj() +q.saG(0,B.D) +s.a=q +q=r.aj() +q.saG(0,B.a4) +s.b=q +q=r.aj() +q.saG(0,B.a4) +s.e=q +q=r.aj() +q.saG(0,B.D) +s.c=q +s.d=r.aj()}, +ee(a,b,c){var s=this +s.xC(a,b,c) +s.aov(b,c) +s.aoI(b,c) +s.aoF(b,c)}, +aoF(a4,a5){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0=this,a1=null,a2=a5.a,a3=a2.c +if(!a3.a)return +s=a4.b +if(a3.f){r=a3.r +if(r==null)r=$.cY().CN(s.a,a2.r-a2.f) +q=$.a5S().Bd(a2.w,r,a2.r,!1,a2.f,!1) +for(p=new A.e4(q.a(),q.$ti.h("e4<1>")),o=s.b,n=a3.w,m=a3.x;p.q();){l=p.b +if(!m.$1(l))continue +k=a0.bT(l,s,a5) +j=new A.k(k,0) +i=new A.k(k,o) +h=n.$1(l) +l=a0.a +l===$&&A.b() +g=h.a +f=h.b +e=A.fX(j,i) +if(f!=null){l.sM(0,B.k) +l.sbU(f.iX(0,e))}else{l.sM(0,g==null?B.n:g) +l.sbU(a1)}l.sbs(h.c) +if(l.gbs()===0){l.sbU(a1) +g=l.gM(l).a +l.sM(0,A.C(0,g>>>16&255,g>>>8&255,g&255))}a4.oe(j,i,a0.a,h.d)}}if(a3.b){d=a3.c +if(d==null)d=$.cY().CN(s.b,a2.y-a2.x) +q=$.a5S().Bd(a2.z,d,a2.y,!1,a2.x,!1) +for(p=new A.e4(q.a(),q.$ti.h("e4<1>")),n=a3.d,c=s.a,a3=a3.e;p.q();){m=p.b +if(!a3.$1(m))continue +b=n.$1(m) +a=a0.aQ(m,s,a5) +j=new A.k(0,a) +i=new A.k(c,a) +m=a0.a +m===$&&A.b() +l=b.a +g=b.b +e=A.fX(j,i) +if(g!=null){m.sM(0,B.k) +m.sbU(g.iX(0,e))}else{m.sM(0,l==null?B.n:l) +m.sbU(a1)}m.sbs(b.c) +if(m.gbs()===0){m.sbU(a1) +l=m.gM(m).a +m.sM(0,A.C(0,l>>>16&255,l>>>8&255,l&255))}a4.oe(j,i,a0.a,b.d)}}}, +aov(a,b){var s,r,q=b.a.as +if((q.a>>>24&255)/255===0)return +s=a.b +r=this.b +r===$&&A.b() +r.sM(0,q) +a.a.cB(new A.w(0,0,0+s.a,0+s.b),this.b)}, +aoI(a,b){var s,r,q,p,o,n,m,l,k=this,j=a.b,i=b.a.e,h=i.b,g=h.length +if(g!==0)for(s=a.a,r=j.b,q=0;qp||m>p)){i=a.c +i===$&&A.b() +h=n.a +g=n.b +f=A.fX(k,j) +if(g!=null){i.sM(0,B.k) +i.sbU(g.iX(0,f))}else{i.sM(0,h==null?B.n:h) +i.sbU(a0)}i.sbs(n.c) +if(i.gbs()===0){i.sbU(a0) +g=i.gM(i).a +i.sM(0,A.C(0,g>>>16&255,g>>>8&255,g&255))}i.sla(n.x) +a2.oe(k,j,a.c,n.d) +i=n.w +if(i.a){e=new A.p(!0,h,a0,a0,a0,a0,11,a0,a0,a0,a0,a0,a0,a0,a0,a0,a0,a0,a0,a0,a0,a0,a0,a0,a0,a0).cl(i.c) +d=i.b +h=i.e.$1(n) +c=A.c0(a0,a0,$.cY().ma(a1,e),h) +b=new A.nA(c,B.az,B.q,B.ab.j(0,B.ab)?new A.fl(1):B.ab,a0,a0,a0,a0,B.a_,a0) +b.w0() +h=b.b.a.a +a2.og(b,i.d.CE(new A.w(0+d.a,l-d.d-h.gbh(h),q-d.c-b.b.b,m+d.b)))}}}}, +aoW(a3,a4,a5,a6){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1=this,a2=null +for(s=a5.a.at.b,r=s.length,q=a6.b,p=a6.a,o=a4.a,n=0;np||l>p)){h=a1.c +h===$&&A.b() +g=m.a +f=m.b +e=A.fX(j,i) +if(f!=null){h.sM(0,B.k) +h.sbU(f.iX(0,e))}else{h.sM(0,g==null?B.n:g) +h.sbU(a2)}h.sbs(m.c) +if(h.gbs()===0){h.sbU(a2) +f=h.gM(h).a +h.sM(0,A.C(0,f>>>16&255,f>>>8&255,f&255))}h.sla(m.x) +a4.oe(j,i,a1.c,m.d) +h=m.r +if(h!=null){f=h.b +d=h.c +o.bH(0) +o.au(0,l-f/2,q-d/2) +o.mQ(h.a) +o.b_(0)}h=m.w +if(h.a){c=new A.p(!0,g,a2,a2,a2,a2,11,a2,a2,a2,a2,a2,a2,a2,a2,a2,a2,a2,a2,a2,a2,a2,a2,a2,a2,a2).cl(h.c) +b=h.b +g=h.e.$1(m) +a=A.c0(a2,a2,$.cY().ma(a3,c),g) +a0=new A.nA(a,B.az,B.q,B.ab.j(0,B.ab)?new A.fl(1):B.ab,a2,a2,a2,a2,B.a_,a2) +a0.w0() +a4.og(a0,h.d.CE(new A.w(l-b.c-a0.b.b,0+b.b,k+b.a,q-b.d)))}}}}, +bT(a,b,c){var s=c.a,r=s.f,q=s.r-r +if(q===0)return 0 +return(a-r)/q*b.a}, +aQ(a,b,c){var s,r=c.a,q=r.x,p=r.y-q +if(p===0)return b.b +s=b.b +return s-(a-q)/p*s}, +CY(a,b,c,d){switch(c.a){case 0:return a-b/2+d +case 2:return a+d +case 1:return a-b+d}}} +A.vk.prototype={ +ga1l(){var s,r,q=this.d.d +if(!q.a)return!1 +q=q.b +s=q.b!=null&&q.a!==0 +q=q.c +r=q.a&&q.c!==0 +return s||r}, +ga1m(){var s,r,q=this.d.d +if(!q.a)return!1 +q=q.d +s=q.b!=null&&q.a!==0 +q=q.c +r=q.a&&q.c!==0 +return s||r}, +ga1n(){var s,r,q=this.d.d +if(!q.a)return!1 +q=q.c +s=q.b!=null&&q.a!==0 +q=q.c +r=q.a&&q.c!==0 +return s||r}, +ga1i(){var s,r,q=this.d.d +if(!q.a)return!1 +q=q.e +s=q.b!=null&&q.a!==0 +q=q.c +r=q.a&&q.c!==0 +return s||r}, +a1G(a){var s,r=this,q=null,p=r.d,o=A.aFQ(p.d),n=p.a +n=n.a&&A.aVp(n.b)?n.b:q +s=A.a([A.bP(q,r.c,B.o,q,q,new A.d3(q,q,n,q,q,q,B.aO),q,q,q,o,q,q,q,q)],t.p) +o=new A.a6M(s) +if(r.ga1l())B.b.eu(s,o.$1(!0),new A.ui(B.j8,p,new A.G(A.O(1/0,a.a,a.b),A.O(1/0,a.c,a.d)),q)) +if(r.ga1n())B.b.eu(s,o.$1(!0),new A.ui(B.dv,p,new A.G(A.O(1/0,a.a,a.b),A.O(1/0,a.c,a.d)),q)) +if(r.ga1m())B.b.eu(s,o.$1(!0),new A.ui(B.j9,p,new A.G(A.O(1/0,a.a,a.b),A.O(1/0,a.c,a.d)),q)) +if(r.ga1i())B.b.eu(s,o.$1(!0),new A.ui(B.aY,p,new A.G(A.O(1/0,a.a,a.b),A.O(1/0,a.c,a.d)),q)) +return s}, +H(a){return new A.n0(new A.a6L(this),null)}} +A.a6M.prototype={ +$1(a){return 0}, +$S:763} +A.a6L.prototype={ +$2(a,b){return A.kA(B.bM,this.a.a1G(b),B.a9,B.bJ)}, +$S:556} +A.ct.prototype={ +ac(){return new A.JC(new A.bp(null,t.B),B.j)}} +A.JC.prototype={ +aat(){switch(this.a.c.a){case 0:return B.aV +case 1:return B.bv +case 2:return B.aM +case 3:return B.bw}}, +aaK(){var s=this.a +switch(s.c.a){case 0:return new A.aG(0,0,s.d,0) +case 1:return new A.aG(0,0,0,s.d) +case 2:return new A.aG(s.d,0,0,0) +case 3:return new A.aG(0,s.d,0,0)}}, +aax(a){var s,r,q,p=this +if(!p.a.r.a)return +if(p.e!=null)return +s=$.aa.F$.z.i(0,p.d) +if(s==null)return +r=p.a.c +$label0$0:{if(B.j8===r||B.j9===r){q=s.gv(s) +q=q==null?null:q.b +if(q==null)q=0 +break $label0$0}if(B.dv===r||B.aY===r){q=s.gv(s) +q=q==null?null:q.a +if(q==null)q=0 +break $label0$0}q=null}if(p.e===q)return +p.a3(new A.aAF(p,q))}, +aB(){this.aR() +$.c_.rx$.push(this.gOX())}, +aO(a){this.bb(a) +$.c_.rx$.push(this.gOX())}, +H(a){var s,r=this,q=null,p=r.a,o=p.r +p=!o.a?B.e:$.a5S().am3(o.d,p.c,r.e,o.b,o.c) +o=r.a.f +s=r.aaK() +return A.aNJ(A.aHe(o,A.bP(r.aat(),r.a.e,B.o,q,q,q,q,q,r.d,s,q,q,q,q)),p)}} +A.aAF.prototype={ +$0(){return this.a.e=this.b}, +$S:0} +A.TB.prototype={ +az(a){var s=null,r=new A.LZ(this.e,this.f,this.r,A.ag(t.O5),A.bf(4,A.nB(s,s,s,s,s,B.az,B.q,s,B.ab,B.a_),!1,t.mi),!0,0,s,s,A.ag(t.T)) +r.aw() +return r}, +aF(a,b){var s=this.e +if(b.B!==s){b.B=s +b.a8()}s=this.f +if(b.F!==s){b.F=s +b.a8()}s=this.r +if(b.a9!==s){b.a9=s +b.a8()}}} +A.aov.prototype={ +$1(a){return a.a}, +$S:344} +A.aow.prototype={ +$1(a){return a.b}, +$S:764} +A.LZ.prototype={ +ew(a){if(!(a.b instanceof A.ex))a.b=new A.ex(null,null,B.e)}, +h6(a){if(this.B===B.aI)return this.Aj(a) +return this.VU(a)}, +aaz(a){switch(this.B.a){case 0:return a.b +case 1:return a.a}}, +P3(a){switch(this.B.a){case 0:return a.a +case 1:return a.b}}, +c5(a){var s=this.NW(a,A.qr()) +switch(this.B.a){case 0:return a.bf(new A.G(s.a,s.b)) +case 1:return a.bf(new A.G(s.b,s.a))}}, +NW(a,b){var s,r,q,p,o,n,m,l,k=this,j=k.B===B.aI?a.b:a.d,i=k.a4$ +for(s=t.US,r=a.b,q=a.d,p=0,o=0;i!=null;){n=i.b +n.toString +s.a(n) +switch(k.B.a){case 0:m=A.mw(q,null) +break +case 1:m=A.mw(null,r) +break +default:m=null}l=b.$2(i,m) +o+=k.P3(l) +p=Math.max(p,k.aaz(l)) +i=n.ak$}return new A.awC(j<1/0?j:o,p)}, +bA(){var s,r,q,p,o,n,m,l=this,k=t.k.a(A.r.prototype.gW.call(l)),j=l.NW(k,A.v4()),i=j.a,h=j.b +switch(l.B.a){case 0:l.id=k.bf(new A.G(i,h)) +l.gv(l) +l.gv(l) +break +case 1:l.id=k.bf(new A.G(h,i)) +l.gv(l) +l.gv(l) +break}s=l.a4$ +for(r=t.US,q=0;s!=null;){p=s.b +p.toString +r.a(p) +o=l.a9[q].b +n=s.id +m=o-l.P3(n==null?A.T(A.Q("RenderBox was not laid out: "+A.t(s).k(0)+"#"+A.bh(s))):n)/2 +switch(l.B.a){case 0:o=new A.k(m,0) +break +case 1:o=new A.k(0,m) +break +default:o=null}p.a=o +s=p.ak$;++q}}, +cE(a,b){return this.qE(a,b)}, +am(a,b){var s=this,r=s.gv(s) +if(r.ga7(r))return +s.X.sar(0,null) +s.mL(a,b)}, +m(){this.X.sar(0,null) +this.a4j()}} +A.awC.prototype={} +A.a6N.prototype={} +A.h9.prototype={ +gaC(){return[this.a,this.b]}} +A.k_.prototype={} +A.W3.prototype={} +A.W4.prototype={ +ah(a){var s,r,q +this.dg(a) +s=this.a4$ +for(r=t.US;s!=null;){s.ah(a) +q=s.b +q.toString +s=r.a(q).ak$}}, +ad(a){var s,r,q +this.dh(0) +s=this.a4$ +for(r=t.US;s!=null;){s.ad(0) +q=s.b +q.toString +s=r.a(q).ak$}}} +A.W5.prototype={} +A.GU.prototype={ +m(){var s,r,q +for(s=this.IE$,r=s.length,q=0;q")) +o=s.gd5(s).eQ(0,new A.aox(q),t.sE).dI(0)}else{n=$.a5S() +s=!r||s===B.aY +r=l.d +m=n.as1(s?r.w:r.z,k,c,b) +r=A.n8(m,new A.aoy(l,c,b,a),m.$ti.h("n.E"),t.sE) +o=A.V(r,!0,A.o(r).h("n.E"))}s=A.S(o).h("R<1,k_>") +return A.V(new A.R(o,new A.aoz(l,b,c,k,d,a),s),!0,s.h("af.E"))}, +H(a){var s,r,q,p,o,n,m,l,k,j,i,h,g=this,f=null,e=g.giL() +if(!(e.b!=null&&e.a!==0)){e=g.giL().c +e=!(e.a&&e.c!==0)}else e=!1 +if(e)return A.bP(f,f,B.o,f,f,f,f,f,f,f,f,f,f,f) +e=g.c +s=e===B.dv +r=!s +q=!r||e===B.aY +p=g.e +o=q?p.a:p.b +q=g.gfo() +p=!r||e===B.aY?B.b2:B.aI +n=A.a([],t.p) +if((e===B.j8||s)&&g.giL().b!=null)n.push(new A.GV(g.giL(),e,o,f)) +if(g.giL().c.a){s=!r||e===B.aY?o:g.giL().c.c +m=!r||e===B.aY?g.giL().c.c:o +l=g.gavn() +k=!r||e===B.aY?B.aI:B.b2 +g.gZD() +j=g.gZD() +i=!r||e===B.aY +h=g.d +i=i?h.f:h.x +r=!r||e===B.aY?h.r:h.y +n.push(A.bP(f,A.b_C(new A.a6N(),k,g.asH(o-j,i,r,e)),B.o,f,f,f,f,m,f,l,f,f,f,s))}if((e===B.j9||e===B.aY)&&g.giL().b!=null)n.push(new A.GV(g.giL(),e,o,f)) +return new A.h8(q,f,f,A.aXk(n,B.T,p,f,B.U,B.bf,f,f,B.cL),f)}} +A.aox.prototype={ +$1(a){return new A.h9(this.a.ch[a.a].a,a.b)}, +$S:757} +A.aoy.prototype={ +$1(a){var s=this,r=s.c,q=s.b-r,p=q>0?(a-r)/q:0 +r=s.a.c +if(!(r===B.dv||r===B.aY))p=1-p +return new A.h9(a,p*s.d)}, +$S:712} +A.aoz.prototype={ +$1(a){var s,r,q,p,o=this,n=o.a,m=n.giL(),l=a.a,k=o.c +n.giL() +n=$.cY() +s=l<0 +r=s?Math.abs(l):l +if(r>=1e9){q=B.c.af(r/1e9,1) +p="B"}else if(r>=1e6){q=B.c.af(r/1e6,1) +p="M"}else if(r>=1000){q=B.c.af(r/1000,1) +p="K"}else{q=B.c.af(r,n.a_Y(Math.abs(o.b-k))) +p=""}if(B.d.fs(q,".0"))q=B.d.P(q,0,q.length-2) +if(s)q="-"+q +if(q==="-0")q="0" +return new A.k_(a,m.c.b.$2(l,new A.kG(k,o.f,a.b,q+p,o.e)))}, +$S:698} +A.GV.prototype={ +galG(){switch(this.d.a){case 2:return 3 +case 0:return 3 +case 1:return 0 +case 3:return 0}}, +H(a){var s=this,r=s.d,q=r!==B.dv,p=!q||r===B.aY?s.e:s.c.a +r=!q||r===B.aY?s.c.a:s.e +return A.eC(A.jh(new A.EW(s.galG(),s.c.b,null),null,null),r,p)}} +A.Mg.prototype={ +gaC(){return[this.a,this.b]}} +A.OD.prototype={ +gaC(){return[this.a,this.b]}} +A.C4.prototype={ +gaC(){var s=this +return[s.a,s.b,s.c,s.d]}} +A.BY.prototype={ +gzP(a){var s=this +return s.a||s.b||s.c||s.d}, +gaC(){var s=this +return[s.a,s.b,s.c,s.d]}} +A.a7F.prototype={} +A.Os.prototype={ +I(){return"FLHorizontalAlignment."+this.b}} +A.Wn.prototype={} +A.Yf.prototype={} +A.Yg.prototype={} +A.Yo.prototype={} +A.AB.prototype={ +ee(a,b,c){}} +A.ff.prototype={} +A.cL.prototype={ +gbR(){return null}, +gja(){var s,r=this +A.by() +A.by() +A.by() +s=r instanceof A.rw +if(s)return!0 +return!(r instanceof A.C1)&&!(r instanceof A.C0)&&!(r instanceof A.C2)&&!(r instanceof A.C_)&&!s&&!(r instanceof A.C3)}} +A.OI.prototype={ +gbR(){return this.a.b}} +A.OJ.prototype={ +gbR(){return this.a.c}} +A.OK.prototype={ +gbR(){return this.a.e}} +A.C0.prototype={} +A.C1.prototype={} +A.ON.prototype={ +gbR(){return this.a.c}} +A.C3.prototype={} +A.rw.prototype={ +gbR(){return this.a.b}} +A.OH.prototype={ +gbR(){return this.a.b}} +A.OG.prototype={ +gbR(){return this.a.b}} +A.C_.prototype={ +gbR(){return this.a.b}} +A.OL.prototype={ +gbR(){return this.a.gbR()}} +A.OM.prototype={ +gbR(){return this.a.gbR()}} +A.C2.prototype={ +gbR(){return this.a.gbR()}} +A.xv.prototype={ +rP(a){this.F=a.b +this.a9=a.c +this.X=a.d}, +vP(){var s=this,r=null,q=s.aD=A.aGy(r,r) +q.ax=new A.akT(s) +q.ay=new A.akU(s) +q.ch=new A.akV(s) +q.cx=new A.akW(s) +q.CW=new A.akX(s) +q=s.aE=A.yf(r,r) +q.aM=new A.akY(s) +q.bZ=new A.akZ(s) +q.aJ=new A.al_(s) +q=s.bj=A.Q5(r,s.X,r) +q.p3=new A.al0(s) +q.p4=new A.al1(s) +q.RG=new A.al2(s)}, +bA(){var s=t.k.a(A.r.prototype.gW.call(this)) +this.id=new A.G(s.b,s.d)}, +c5(a){return new A.G(a.b,a.d)}, +hF(a){return!0}, +j7(a,b){var s,r=this +if(r.F==null)return +if(t.pY.b(a)){s=r.bj +s===$&&A.b() +s.mC(a) +s=r.aE +s===$&&A.b() +s.mC(a) +s=r.aD +s===$&&A.b() +s.mC(a)}else if(t.XA.b(a))r.hx(new A.OM(a))}, +gBF(a){return new A.al3(this)}, +gBG(a){return new A.al4(this)}, +hx(a){var s,r,q,p=this +if(p.F==null)return +s=a.gbR() +r=s!=null?p.t0(s):null +p.F.$2(a,r) +q=p.a9 +if(q==null)p.aq=B.aP +else p.aq=q.$2(a,r)}, +gHY(a){return this.aq}, +gCB(){var s=this.aH +s===$&&A.b() +return s}, +ah(a){this.dg(a) +this.aH=!0}, +ad(a){this.aH=!1 +this.dh(0)}, +$ifB:1} +A.akT.prototype={ +$1(a){this.a.hx(new A.OI(a))}, +$S:118} +A.akU.prototype={ +$1(a){this.a.hx(new A.OJ(a))}, +$S:31} +A.akV.prototype={ +$1(a){this.a.hx(new A.OK(a))}, +$S:13} +A.akW.prototype={ +$0(){this.a.hx(B.DE)}, +$S:0} +A.akX.prototype={ +$1(a){this.a.hx(new A.C1())}, +$S:28} +A.akY.prototype={ +$1(a){this.a.hx(new A.ON(a))}, +$S:27} +A.akZ.prototype={ +$0(){this.a.hx(B.DF)}, +$S:0} +A.al_.prototype={ +$1(a){this.a.hx(new A.rw(a))}, +$S:49} +A.al0.prototype={ +$1(a){this.a.hx(new A.OH(a))}, +$S:88} +A.al1.prototype={ +$1(a){this.a.hx(new A.OG(a))}, +$S:90} +A.al2.prototype={ +$1(a){return this.a.hx(new A.C_(a))}, +$S:83} +A.al3.prototype={ +$1(a){return this.a.hx(new A.OL(a))}, +$S:54} +A.al4.prototype={ +$1(a){return this.a.hx(new A.C2(a))}, +$S:46} +A.PW.prototype={} +A.rX.prototype={ +ac(){return new A.Ig(A.a([],t.Xv),A.A(t.S,t.Cm),null,null,B.j)}} +A.Ig.prototype={ +H(a){var s,r=this,q=r.Qh(),p=r.CW +p.toString +s=r.gds() +s=r.Qi(p.a2(0,s.gl(s))) +p=r.Qi(q) +r.a.toString +return new A.vk(new A.PX(s,p,null),q,null)}, +Qi(a){var s,r=a.cx +if(!r.a||!r.x)return a +r=a.ch +s=A.S(r).h("R<1,cq>") +return a.anl(A.V(new A.R(r,new A.axw(this,a),s),!0,s.h("af.E")),this.cy)}, +Qh(){var s=this.a.r,r=s.cx,q=r.a +if(q&&r.x){this.cx=r.b +return s.an3(new A.kn(r.e,r.f,r.r,r.w,r.x,r.y,r.z,q,this.gaen(),r.c,r.d))}return s}, +aeo(a,b){var s,r=this +if(r.c==null)return +s=r.cx +if(s!=null)s.$2(a,b) +if(a.gja())s=(b==null?null:b.a)==null||b.a.length===0 +else s=!0 +if(s){r.a3(new A.axu(r)) +return}r.a3(new A.axv(r,b))}, +ij(a){var s=this +s.CW=t.i4.a(a.$3(s.CW,s.Qh(),new A.axx(s)))}} +A.axw.prototype={ +$1(a){var s=this.a.db.i(0,B.b.cS(this.b.ch,a)) +return a.an8(s==null?A.a([],t.t):s)}, +$S:624} +A.axu.prototype={ +$0(){var s=this.a +B.b.a0(s.cy) +s.db.a0(0)}, +$S:0} +A.axv.prototype={ +$0(){var s,r,q,p,o,n,m=this.b.a +m.toString +s=A.V(m,!0,t.f5) +B.b.dK(s,new A.axt()) +r=this.a +q=r.db +q.a0(0) +for(p=t.t,o=0;oo.a)o=k +if(n==null||k.b>n.b)n=k +if(p==null||k.b>>24&255)/255!==0){s=$.W().aj() +s.sM(0,r.c) +s.sbs(q) +s.saG(0,B.D) +a.du(c,r.b+q/2,s)}q=$.W().aj() +q.sM(0,r.a) +q.saG(0,B.a4) +a.du(c,r.b,q)}, +m9(a){var s=this.b*2 +return new A.G(s,s)}, +gaC(){var s=this +return[s.a,s.b,s.c,s.d]}} +A.BZ.prototype={ +Im(a,b,c){var s,r,q=this,p=q.d +if(p!==0&&(q.c.a>>>24&255)/255!==0){s=A.hv(c,q.b/2+p/2) +r=$.W().aj() +r.sM(0,q.c) +r.sbs(p) +r.saG(0,B.D) +a.cB(s,r)}p=A.hv(c,q.b/2) +s=$.W().aj() +s.sM(0,q.a) +s.saG(0,B.a4) +a.cB(p,s)}, +m9(a){var s=this.b +return new A.G(s,s)}, +gaC(){var s=this +return[s.a,s.b,s.c,s.d]}} +A.OF.prototype={ +gaC(){var s=this +return[s.a,s.b,s.c,s.d]}} +A.kn.prototype={ +gaC(){var s=this +return[s.a,s.b,s.c,s.d,s.e,s.f,s.r,s.w,s.x,s.y,s.z]}} +A.aDF.prototype={ +$1(a){var s,r={},q=this.a,p=q.w,o=p==null?null:B.b.gL(p.a) +if(o==null)o=q.r +p=q.CW.a +s=A.mO(p?A.aHQ(q.a[a],0,q):o,null,null,4) +r.a=10 +if(p)r.a=7.2 +return new A.fG(s,new A.iF(!0,A.v5(),new A.aDE(r)))}, +$S:115} +A.aDE.prototype={ +$4(a,b,c,d){var s=this.a.a,r=A.aHQ(a,b,c),q=A.b37(a,b,c) +return new A.iE(r,s,q,1)}, +$C:"$4", +$R:4, +$S:114} +A.wI.prototype={ +gaC(){var s=this +return[s.a,s.b,B.cv,16,B.hb,0,s.r,s.w,!1,!1,!1,0,B.r]}} +A.aDD.prototype={ +$1(a){var s,r=null,q=a.c,p=q.w +p=p==null?r:B.b.gL(p.a) +q=p==null?q.r:p +s=A.bL(r,r,q==null?B.bY:q,r,r,r,r,r,r,r,r,14,r,r,B.x,r,r,!0,r,r,r,r,r,r,r,r) +return new A.fA(B.c.k(a.b),s,B.aH,r)}, +$S:113} +A.fT.prototype={ +gaC(){var s=this +return[s.c,s.d,s.e,s.a,s.b]}} +A.m2.prototype={} +A.fA.prototype={ +gaC(){var s=this +return[s.a,s.b,s.c,B.q,s.e]}} +A.fG.prototype={ +gaC(){return[this.a,this.b]}} +A.lS.prototype={ +gaC(){return[this.a]}} +A.t9.prototype={} +A.rY.prototype={ +d_(a){var s,r=this.a +r.toString +s=this.b +s.toString +return r.lI(r,s,a)}} +A.Wa.prototype={} +A.Wb.prototype={} +A.Wo.prototype={} +A.Yh.prototype={} +A.Yi.prototype={} +A.Yk.prototype={} +A.Zr.prototype={} +A.Zs.prototype={} +A.Zt.prototype={} +A.Zy.prototype={} +A.Zz.prototype={} +A.ZA.prototype={} +A.ZB.prototype={} +A.a2c.prototype={} +A.a3n.prototype={} +A.agH.prototype={ +$1(a){return a.a.length!==0}, +$S:595} +A.agI.prototype={ +$1(a){return!a.j(0,B.aJ)}, +$S:91} +A.rZ.prototype={ +gaC(){var s=this +return[s.a,s.b,s.c,s.d,s.e]}} +A.Zu.prototype={} +A.agJ.prototype={ +ee(b0,b1,b2){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,a2,a3,a4,a5,a6=this,a7=null,a8=b2.a,a9=a8.ch +if(a9.length===0)return +s=a8.Q +if(s.gzP(s)){r=b1.b +q=r.a +p=r.b +b1.a.e4(new A.w(0,-40,0+(q+40),-40+(p+40)),$.W().aj()) +r=a8.a +o=r.a?r.b:a7 +if(s.c){n=o==null?a7:o.d.b +m=(n==null?0:n)/2}else m=0 +if(s.a){n=o==null?a7:o.a.b +l=(n==null?0:n)/2}else l=0 +if(s.d){n=o==null?a7:o.b.b +q-=(n==null?0:n)/2}if(s.b){n=o==null?a7:o.c.b +p-=(n==null?0:n)/2}b1.ia(new A.w(m,l,q,p))}a6.Dy(b0,b1,b2) +for(r=a8.CW,k=r.length,j=0;j=c.length)continue +a1=c[a0] +if(a==null)continue +i.push(new A.p3(g,a1,a0,a))}}a6.aoV(b1,i,b2) +if(s.gzP(s))b1.a.b_(0) +for(a9=a8.cy,r=r.e,s=t.FX,h=0;ha4.b)a4=a5}a6.aoS(b0,b1,r,a4,new A.lS(a3),b2)}}, +aox(a,b,c){var s,r,q,p,o,n,m,l=this,k=a.b,j=A.aFP(b.a) +for(s=j.length,r=0;r") +m=A.V(new A.cO(o,n),!0,n.h("af.E")) +l=c.KW(b,a0,p,a7) +k=c.KX(b,a1.an9(m),m,a7,l) +n=a0.b +n===$&&A.b() +o=a1.b +o===$&&A.b() +j=Math.min(n.a,o.a) +o=a0.c +o===$&&A.b() +n=a1.c +n===$&&A.b() +i=Math.max(o.b,n.b) +n=a0.d +n===$&&A.b() +o=a1.d +o===$&&A.b() +h=Math.max(n.a,o.a) +o=a0.e +o===$&&A.b() +n=a1.e +n===$&&A.b() +g=Math.min(o.b,n.b) +n=c.bT(j,b,a7) +o=c.aQ(i,b,a7) +f=c.bT(h,b,a7) +e=c.aQ(g,b,a7) +d=c.r +d===$&&A.b() +if(r!=null){d.sM(0,B.k) +d.sbU(r.iX(0,new A.w(n,o,f,e)))}else{d.sM(0,s==null?B.n:s) +d.sbU(null)}a.e4(new A.w(0,0,0+b.a,0+b.b),$.W().aj()) +a.bP(k,c.r) +a.b_(0)}}, +aoD(a,b,c){var s,r,q,p,o,n,m,l,k,j,i=b.CW +if(!i.a||b.a.length===0)return +s=a.b +r=this.KZ(b,s,c) +for(q=b.a,p=i.b,i=i.c,o=a.a,n=0;na4&&b>>16&255,b>>>8&255,b&255))}a9.oe(a2,a3,a8.y,a6.d) +if(e){f=d.b +if(f===d)A.T(A.fy(d.a)) +f.Im(p,j,new A.k(h,g))}}}, +KX(a,b,c,d,e){if(b.dx)return this.a_O(a,b,c,d,e) +else return this.a_M(a,b,c,d,e)}, +KW(a,b,c,d){return this.KX(a,b,c,d,null)}, +a_M(a1,a2,a3,a4,a5){var s,r,q,p,o,n,m,l,k,j,i,h,g,f=this,e=a5==null,d=e?$.W().bD():a5,c=J.aF(a3),b=c.gu(a3),a=f.bT(c.i(a3,0).a,a1,a4),a0=f.aQ(c.i(a3,0).b,a1,a4) +if(e){d.d0(0,a,a0) +if(b===1)d.b5(0,a,a0)}else d.b5(0,a,a0) +for(e=a2.y,s=a2.z,r=B.e,q=1;q>>16&255,d>>>8&255,d&255))}a.oe(g,f,c.w,l.d)}}}, +aou(a,b,a0,a1,a2){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d=this,c=a2.ch +if(!c.a)return +s=a.b +r=a2.b +r===$&&A.b() +r=d.bT(r.a,s,a1) +q=a2.d +q===$&&A.b() +q=d.bT(q.a,s,a1) +p=a2.e +p===$&&A.b() +p=d.aQ(p.b,s,a1) +o=d.r +o===$&&A.b() +A.aGx(o,c.b,c.c,new A.w(r,0,q,p)) +r=c.f +if(r)a.a.e4(new A.w(0,0,0+s.a,0+s.b),$.W().aj()) +q=a.a +q.bP(b,d.r) +if(r){p=d.x +p===$&&A.b() +q.bP(a0,p) +q.b_(0)}q=c.d +if(q.a)for(p=a2.a,o=p.length,n=q.c,m=q.b,q=m.a,l=m.b,c=c.e,k=0;k>>16&255,e>>>8&255,e&255))}a.oe(h,g,d.w,m.d)}}}, +aoy(a,b,c){var s,r=c.db,q=r.a +if((q.a>>>24&255)/255===0)return +s=b.HG() +if(!s.gab(s).q())return +s=this.f +s===$&&A.b() +s.sla(c.at?B.fq:B.aG) +s.spr(B.dd) +s.sM(0,q) +s.sbU(null) +s.sbs(c.x) +s.sM(0,q) +$.cY() +s.sw8(new A.tg(B.cn,r.c*0.57735+0.5)) +a.a.bP(A.aa9(b,c.cy).cm(r.b),this.f)}, +aow(a,b,c,d){var s,r,q,p,o=this,n=a.b,m=o.f +m===$&&A.b() +m.sla(c.at?B.fq:B.aG) +m.spr(B.dd) +m=c.b +m===$&&A.b() +m=o.bT(m.a,n,d) +s=c.c +s===$&&A.b() +s=o.aQ(s.b,n,d) +r=c.d +r===$&&A.b() +r=o.bT(r.a,n,d) +q=c.e +q===$&&A.b() +q=o.aQ(q.b,n,d) +p=o.f +A.aGx(p,c.r,c.w,new A.w(m,s,r,q)) +p.sw8(null) +p.sbs(c.x) +A.aYR(p) +a.a.bP(A.aa9(b,c.cy),o.f)}, +aoS(b4,b5,b6,b7,b8,b9){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,a2,a3,a4,a5,a6,a7=this,a8=null,a9=b5.b,b0=A.a([],t.Ap),b1=b8.a,b2=b6.w.$1(b1),b3=J.aF(b2) +if(b3.gu(b2)!==b1.length)throw A.c(A.cj("tooltipItems and touchedSpots size should be same")) +for(s=b6.r,r=b9.c,q=0;qk)k=h +b3=b3.a.a +j+=b3.gbh(b3)}b1=a7.bT(b7.a,a9,b9) +s=a7.aQ(b7.b,a9,b9) +g=k+B.cv.gdw() +f=j+(b3-1)*4+(B.cv.gbO(B.cv)+B.cv.gbX(B.cv)) +e=s-f-16 +d=a7.CY(b1,g,B.hb,0) +b1=d+g +b3=e+f +s=b6.b +c=new A.aC(s,s) +b=A.xn(new A.w(d,e,b1,b3),c,c,c,c) +s=a7.z +s===$&&A.b() +s.sM(0,b6.a) +s=b1-d +b3-=e +r=$.cY().qs(new A.G(s,b3),0).b +a=new A.k(0,r) +a0=new A.k(b.a,b.b) +a1=$.cY().qs(new A.G(s,b3),0) +if(!B.r.j(0,B.r)){o=a7.Q +o===$&&A.b() +o.sM(0,B.k) +o.sbs(0)}b5.qQ(0,new A.agK(a7,b5,b),a0,a,new A.G(s,b3)) +for(o=b0.length,n=d+s/2,a2=a1.b,b1-=16,a3=d+16,a4=8,i=0;i")).is(0,new A.ajp())}, +lI(a,b,c){var s,r,q,p,o=b.a +o=A.cK(A.op(a.a.b,o.b,c),o.a) +s=A.y(a.e,b.e,c) +r=A.b6P(a.d,b.d,c) +q=A.P(a.f,b.f,c) +p=A.P(a.r,b.r,c) +p=A.ajm(o,s,r,b.w,A.eK(a.c,b.c,c,A.b7y(),t.Ka),q,p) +return p}, +gaC(){var s=this +return[s.c,s.d,s.e,s.w,s.f,s.r,s.a]}} +A.ajn.prototype={ +$1(a){return a.a!==0}, +$S:574} +A.ajo.prototype={ +$1(a){return a.a}, +$S:140} +A.ajp.prototype={ +$2(a,b){return a+b}, +$S:120} +A.dE.prototype={} +A.RA.prototype={ +gaC(){var s=this +return[s.a,s.b,s.c,s.d]}} +A.RB.prototype={ +gaC(){var s=this +return[s.a,s.b,s.c,s.d]}} +A.E4.prototype={} +A.tB.prototype={ +d_(a){var s,r=this.a +r.toString +s=this.b +s.toString +return r.lI(r,s,a)}} +A.a_D.prototype={} +A.a_F.prototype={} +A.a_G.prototype={} +A.ajB.prototype={ +$1(a){var s=a.b.w +if(s!=null){this.b[a.a]=s +this.a.a=!1}}, +$S:573} +A.ajq.prototype={ +ee(a,b,c){var s,r,q,p,o,n=this +n.xC(a,b,c) +s=c.a +r=s.c +if(r.length===0)return +q=n.Hw(r,s.gxB()) +r=b.b +p=n.Hu(r,c) +o=n.c +o===$&&A.b() +o.sM(0,s.e) +b.a.du(new A.k(r.a/2,r.b/2),p,n.c) +n.aoK(b,q,p,c) +n.aoO(a,b,c,p)}, +Hw(a,b){var s=A.S(a).h("R<1,z>") +return A.V(new A.R(a,new A.ajs(b),s),!0,s.h("af.E"))}, +aoK(a,b,a0,a1){var s,r,q,p,o,n,m,l,k,j,i=this,h=a1.a,g=a.b,f=g.a,e=g.b,d=new A.k(f/2,e/2),c=h.r +for(s=h.c,r=h.f,q=a.a,f=0+f,e=0+e,p=0;p>>24&255)/255!==0}else r=!1 +if(r){r=i.b +r===$&&A.b() +r.sbs(s) +r.sM(0,f.a) +s/=2 +q.du(d,a0+e-s,i.b) +q.du(d,a0+s,i.b)}return}m=i.a_N(o,r,c,n,d,a0) +l=i.a +l===$&&A.b() +l.sM(0,o.b) +l.saG(0,B.a4) +q.bP(m,i.a) +l=o.r +k=l.b +if(k!==0){j=l.a +j=(j.gl(j)>>>24&255)/255!==0}else j=!1 +if(j){q.e4(new A.w(0,0,f,e),$.W().aj()) +q.uP(0,m,!0) +j=i.b +j===$&&A.b() +j.sbs(k*2) +j.sM(0,l.a) +q.bP(m,i.b) +q.b_(0)}c+=n}}, +a_N(a0,a1,a2,a3,a4,a5){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c=a0.c,b=A.hv(a4,a5+c),a=A.hv(a4,a5) +$.cY() +p=a2*0.017453292519943295 +o=a3*0.017453292519943295 +n=p+o +m=new A.k(Math.cos(p),Math.sin(p)) +l=a4.R(0,m.S(0,a5)) +k=l.R(0,m.S(0,c)) +j=new A.k(Math.cos(n),Math.sin(n)) +i=a4.R(0,j.S(0,a5)) +h=i.R(0,j.S(0,c)) +c=$.W() +g=c.bD() +f=l.a +e=l.b +g.d0(0,f,e) +g.b5(0,k.a,k.b) +g.ks(0,b,p,o,!1) +g.b5(0,i.a,i.b) +g.ks(0,a,n,-o,!1) +g.d0(0,f,e) +g.aA(0) +s=g +if(a1!==0){r=this.VE(new A.PW(l,k),a1) +try{s=c.HE(B.vO,s,r)}catch(d){}q=this.VE(new A.PW(i,h),a1) +try{c=s +s=$.W().HE(B.vO,c,q)}catch(d){}}return s}, +VE(a,b){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d +b/=2 +s=a.b +r=a.a +q=s.Y(0,r) +p=s.Y(0,r) +o=p.a +n=p.b +m=q.S(0,1/Math.sqrt(o*o+n*n)) +p=s.Y(0,r) +l=Math.atan(p.b/p.a)+1.5707963267948966 +k=new A.k(Math.cos(l),Math.sin(l)) +j=b/2 +i=r.a-m.S(0,j).a-k.S(0,b).a +r=r.b-m.S(0,j).b-k.S(0,b).b +h=s.a+m.S(0,j).a-k.S(0,b).a +j=s.b+m.S(0,j).b-k.S(0,b).b +s=b*2 +g=k.S(0,s) +f=k.S(0,s) +e=k.S(0,s) +s=k.S(0,s) +d=$.W().bD() +d.d0(0,i,r) +d.b5(0,h,j) +d.b5(0,h+g.a,j+f.b) +d.b5(0,i+e.a,r+s.b) +d.b5(0,i,r) +return d}, +aoO(a,b,c,d){var s,r,q,p,o,n,m,l,k,j,i=null,h=c.a,g=b.b,f=new A.k(g.a/2,g.b/2),e=h.r +for(s=h.c,r=c.c,q=0;q=n+o&&r<=j+n-o +h=this.Hu(a2,a3) +l=k.c +g=a0>h&&a0<=h+l +if(i&&g){p=m +q=k +break}n+=j;++m}return new A.RB(q,p,s,a0)}, +a_R(a,b){var s,r,q,p,o,n=b.a,m=a.iP(B.e),l=A.A(t.S,t.EP),k=n.c +if(k.length===0)return l +s=n.r +r=this.Hw(k,n.gxB()) +for(q=0;qb.c?a:b}, +$S:567} +A.aju.prototype={ +$1(a){var s,r,q,p=this +$.cY() +s=p.b*0.017453292519943295 +r=Math.cos(s) +q=p.c+p.d.c*a +$.cY() +return p.a.R(0,new A.k(r*q,Math.sin(s)*q))}, +$S:141} +A.Rw.prototype={ +az(a){var s=this.f,r=A.bt(a,null,t.w).w.gbK(),q=new A.ajq(),p=$.W(),o=p.aj() +o.saG(0,B.D) +q.a=o +o=p.aj() +o.saG(0,B.D) +q.b=o +p=p.aj() +p.saG(0,B.a4) +q.c=p +q=new A.Sq(this.e,s,r,q,0,null,null,a,B.aP,A.ag(t.T)) +q.aw() +q.rP(s.w) +q.vP() +return q}, +aF(a,b){b.sic(0,this.e) +b.slZ(this.f) +b.sbK(A.bt(a,null,t.w).w.gbK()) +b.B=a +b.ag()}} +A.Sq.prototype={ +sic(a,b){if(this.c1.j(0,b))return +this.c1=b +this.a8()}, +slZ(a){var s=this +if(s.cw.j(0,a))return +s.cw=a +s.tu(a.w) +s.a8()}, +sbK(a){if(this.ce.j(0,a))return +this.ce=a +this.ag()}, +ew(a){if(!(a.b instanceof A.fd))a.b=new A.fd(null,null,B.e)}, +bA(){var s,r,q,p,o,n,m=this,l=m.a4$,k=t.k,j=k.a(A.r.prototype.gW.call(m)) +m.id=new A.G(j.b,j.d) +k=k.a(A.r.prototype.gW.call(m)) +s=new A.az(0,k.b,0,k.d) +k=m.gv(m) +r=m.dE.a_R(k,new A.ff(m.c1,m.cw,m.ce,t.wy)) +for(k=t.Wz,q=0;l!=null;){if(q>=r.a)break +l.bJ(s,!0) +j=l.b +j.toString +k.a(j) +p=l.id +o=p==null?A.T(A.Q("RenderBox was not laid out: "+A.t(l).k(0)+"#"+A.bh(l))):p +n=r.i(0,q) +j.a=new A.k(n.a-o.a/2,n.b-p.b/2) +l=j.ak$;++q}}, +cE(a,b){return this.qE(a,b)}, +am(a,b){var s,r,q=this,p=a.gbe(a) +p.bH(0) +p.au(0,b.a,b.b) +s=q.B +r=q.gv(q) +q.dE.ee(s,new A.qX(p,r),new A.ff(q.c1,q.cw,q.ce,t.wy)) +p.b_(0) +q.mL(a,b)}, +t0(a){var s=this,r=s.gv(s) +return new A.E4(s.dE.lC(a,r,new A.ff(s.c1,s.cw,s.ce,t.wy)))}, +fX(a){}} +A.a10.prototype={ +ah(a){var s,r,q +this.a3c(a) +s=this.a4$ +for(r=t.Wz;s!=null;){s.ah(a) +q=s.b +q.toString +s=r.a(q).ak$}}, +ad(a){var s,r,q +this.a3d(0) +s=this.a4$ +for(r=t.Wz;s!=null;){s.ad(0) +q=s.b +q.toString +s=r.a(q).ak$}}} +A.a11.prototype={} +A.Ed.prototype={ +ac(){return new A.a0n(null,null,B.j)}} +A.a0n.prototype={ +H(a){var s,r=this.a.r,q=this.CW +q.toString +s=this.gds() +return new A.RU(q.a2(0,s.gl(s)),r,null)}, +ij(a){var s=this +s.CW=t.zQ.a(a.$3(s.CW,s.a.r,new A.az4(s)))}} +A.az4.prototype={ +$1(a){return new A.tO(t.hp.a(a),this.a.a.r)}, +$S:560} +A.akj.prototype={ +I(){return"RadarShape."+this.b}} +A.pt.prototype={} +A.lI.prototype={ +gBu(){var s,r,q,p,o,n,m=this.c,l=B.b.gL(B.b.gL(m).a) +for(s=m.length,r=0;rl.a)l=n}return l}, +gJC(){var s,r,q,p,o,n,m=this.c,l=B.b.gL(B.b.gL(m).a) +for(s=m.length,r=0;r")).aa(0,new A.akh(j,d/c,i,b,e,g,f,a,h))}, +OS(a,b,c,d){var s,r,q,p=$.W().bD(),o=b-c +p.d0(0,a,o) +s=6.283185307179586/d +for(r=0;r")).aa(0,new A.akg(s,b.a,a))}, +lC(a,b,c){var s,r,q,p,o,n,m,l,k,j,i=c.b,h=this.y +if(h==null)h=this.y=this.Hv(b,c) +for(s=h.length,r=a.a,q=i.at.e,p=a.b,o=0;o")).aa(0,new A.akf(m,r,p,n)) +r.aA(0) +o.bP(r,m.e) +o.bP(r,m.f)}, +$S:547} +A.akf.prototype={ +$2(a,b){var s,r=this +if(a===0)return +r.b.b5(0,b.a,b.b) +s=r.a.r +s===$&&A.b() +r.c.a.du(b,r.d.e,s)}, +$S:542} +A.tQ.prototype={} +A.RU.prototype={ +az(a){var s=null,r=this.e,q=A.bt(a,s,t.w).w.gbK(),p=new A.ake(),o=$.W(),n=o.aj() +n.saG(0,B.a4) +n.svU(!0) +p.b=n +n=o.aj() +n.saG(0,B.D) +p.a=n +n=o.aj() +n.saG(0,B.D) +p.c=n +n=o.aj() +n.saG(0,B.D) +p.d=n +p.e=o.aj() +p.f=o.aj() +p.r=o.aj() +p.w=A.nB(s,s,s,s,s,B.az,s,s,B.ab,B.a_) +p.x=A.nB(s,s,s,s,s,B.az,s,s,B.ab,B.a_) +p=new A.Su(this.d,r,q,p,a,B.aP,A.ag(t.T)) +p.aw() +p.rP(r.at) +p.vP() +return p}, +aF(a,b){b.sic(0,this.d) +b.slZ(this.e) +b.sbK(A.bt(a,null,t.w).w.gbK()) +b.B=a +b.ag()}} +A.Su.prototype={ +sic(a,b){if(this.c1.j(0,b))return +this.c1=b +this.ag()}, +slZ(a){var s=this +if(s.cw.j(0,a))return +s.cw=a +s.tu(a.at) +s.ag()}, +sbK(a){if(this.ce.j(0,a))return +this.ce=a +this.ag()}, +am(a,b){var s,r,q=this,p=a.gbe(a) +p.bH(0) +p.au(0,b.a,b.b) +s=q.B +r=q.gv(q) +q.dE.ee(s,new A.qX(p,r),new A.ff(q.c1,q.cw,q.ce,t.rl)) +p.b_(0)}, +t0(a){var s=this,r=s.gv(s) +return new A.Ee(s.dE.lC(a,r,new A.ff(s.c1,s.cw,s.ce,t.rl)))}} +A.F1.prototype={ +ac(){return new A.Ji(A.a([],t.t),null,null,B.j)}} +A.Ji.prototype={ +H(a){var s,r=this,q=r.OY(),p=r.CW +p.toString +s=r.gds() +s=r.TT(p.a2(0,s.gl(s))) +p=r.TT(q) +r.a.toString +return new A.vk(new A.T6(s,p,null),q,null)}, +TT(a){var s=a.CW +if(!s.a||!s.r)return a +return a.HO(this.cy)}, +OY(){var s=this.a.r,r=s.CW,q=r.a +if(q&&r.r){this.cx=r.b +return s.an6(A.aGU(q,r.r,r.d,r.c,this.gabe(),r.f,r.e))}return s}, +abf(a,b){var s,r=this +if(r.c==null)return +s=r.cx +if(s!=null)s.$2(a,b) +if(!a.gja()||b==null||b.a==null){r.a3(new A.aAg(r)) +return}r.a3(new A.aAh(r,b))}, +ij(a){var s=this +s.CW=t.O0.a(a.$3(s.CW,s.OY(),new A.aAi(s)))}} +A.aAg.prototype={ +$0(){this.a.cy=A.a([],t.t)}, +$S:0} +A.aAh.prototype={ +$0(){this.a.cy=A.a([this.b.a.b],t.t)}, +$S:0} +A.aAi.prototype={ +$1(a){return new A.u1(t.VX.a(a),this.a.a.r)}, +$S:532} +A.lP.prototype={ +lI(a,b,c){var s,r,q,p,o,n,m,l=A.eK(a.ch,b.ch,c,A.b7I(),t.zi),k=A.aFR(a.d,b.d,c),j=A.eK(a.cx,b.cx,c,A.zT(),t.S),i=A.aFO(a.c,b.c,c),h=b.a +h=A.cK(A.op(a.a.b,h.b,c),h.a) +s=A.P(a.f,b.f,c) +r=A.P(a.r,b.r,c) +q=A.P(a.w,b.w,c) +p=A.P(a.x,b.x,c) +o=A.P(a.y,b.y,c) +n=A.P(a.z,b.z,c) +m=b.cy +k=A.an4(A.y(a.as,b.as,c),q,n,h,b.Q,i,r,o,s,p,A.aMT(m.c,m.b,!1,m.d),l,b.CW,j,k) +return k}, +Vq(a,b){var s=this,r=a==null?s.CW:a,q=b==null?s.cx:b +return A.an4(s.as,s.w,s.z,s.a,s.Q,s.c,s.r,s.y,s.f,s.x,s.cy,s.ch,r,q,s.d)}, +an6(a){return this.Vq(a,null)}, +HO(a){return this.Vq(null,a)}, +gaC(){var s=this,r=s.e +return[s.ch,s.CW,s.cx,s.c,s.d,r,s.f,s.r,s.w,s.x,s.y,s.z,r,s.cy,s.Q,s.as,s.a,s.b]}} +A.dh.prototype={ +Vl(a){return A.aE(this.a,a,this.e,this.d,!0)}, +gaC(){var s=this +return[s.a,s.b,!0,s.d,s.e]}} +A.Ta.prototype={ +gaC(){var s=this +return[s.a,s.b,s.c,s.d,s.e,s.f,s.r]}} +A.u4.prototype={} +A.Tc.prototype={ +gaC(){return[this.a,this.b]}} +A.Tb.prototype={ +gaC(){var s=this +return[s.a,s.b,s.c,s.d,s.e,s.f,s.r,!1,!1,s.y,s.z]}} +A.pB.prototype={ +gaC(){var s=this +return[s.a,s.b,s.c,s.d,s.e,s.f]}} +A.u1.prototype={ +d_(a){var s,r=this.a +r.toString +s=this.b +s.toString +return r.lI(r,s,a)}} +A.T9.prototype={ +gaC(){return[!1,this.b,this.c,this.d]}} +A.a1C.prototype={} +A.a1F.prototype={} +A.a1G.prototype={} +A.a1H.prototype={} +A.a1I.prototype={} +A.a1J.prototype={} +A.a1K.prototype={} +A.u2.prototype={ +gaC(){var s=this +return[s.a,s.b,s.c,s.d,s.e]}} +A.a1D.prototype={} +A.an6.prototype={ +aoL(a0,a1,a2){var s,r,q,p,o,n,m,l,k,j,i,h,g=this,f=null,e=a2.a,d=a1.b,c=e.Q,b=e.a,a=b.a?b.b:f +if(c.gzP(c)){s=d.a +r=d.b +a1.a.e4(new A.w(0,0,s,r),$.W().aj()) +if(c.c){q=a==null?f:a.d.b +p=(q==null?0:q)/2}else p=0 +if(c.a){q=a==null?f:a.a.b +o=(q==null?0:q)/2}else o=0 +if(c.d){q=a==null?f:a.b.b +s-=(q==null?0:q)/2}if(c.b){q=a==null?f:a.c.b +r-=(q==null?0:q)/2}a1.ia(new A.w(p,o,s,r))}b=e.ch +n=A.a(b.slice(0),A.S(b)) +B.b.dK(n,new A.an7()) +for(b=n.length,m=a1.a,l=0;l")).aa(0,new A.a6Z(s,this.a/(q+1),this.c))}, +$S:0} +A.a6Z.prototype={ +$2(a,b){var s=this.a,r=s.a+this.b +s.a=r +r=s.a=r+b.gbB(b)/2 +this.c[a]=r +s.a=r+b.gbB(b)/2}, +$S:110} +A.a6W.prototype={ +$2(a,b){var s=this.a,r=s.a=s.a+b.gbB(b)/2,q=a!==0?s.a=r+this.b:r +this.c[a]=q +s.a=q+b.gbB(b)/2}, +$S:110} +A.a6X.prototype={ +$2(a,b){var s=this.a,r=this.b,q=s.b+r +s.b=q +q=s.b=q+b.gbB(b)/2 +this.c[a]=q +q+=b.gbB(b)/2 +s.b=q +s.b=q+r}, +$S:110} +A.ael.prototype={ +$2(a,b){var s=this.b.a.length +B.b.D(this.a.a,1/(s-1)*a)}, +$S:143} +A.aaa.prototype={ +$1(a){return a}, +$S:156} +A.Cq.prototype={ +I(){return"HorizontalAlignment."+this.b}} +A.qX.prototype={ +ia(a){return this.a.o6(a,B.cr,!0)}, +Wk(a,b,c){var s,r +if(c==null)a.am(this.a,b) +else{s=a.b +r=s.b +s=s.a.a +this.aoJ(c,new A.a8u(this,a,b),b,new A.G(r,s.gbh(s)))}}, +og(a,b){return this.Wk(a,b,null)}, +qQ(a,b,c,d,e){var s,r,q,p,o=this.a +o.bH(0) +s=c.a +r=e.a/2 +q=c.b +p=e.b/2 +o.au(0,d.a+s+r,d.b+q+p) +$.cY() +o.lY(0,a*0.017453292519943295) +o.au(0,-s-r,-q-p) +b.$0() +o.b_(0)}, +aoJ(a,b,c,d){return this.qQ(a,b,c,B.e,d)}, +oe(a,b,c,d){var s=$.W().bD() +s.d0(0,a.a,a.b) +s.b5(0,b.a,b.b) +this.a.bP(A.aa9(s,d),c)}} +A.a8u.prototype={ +$0(){this.b.am(this.a.a,this.c)}, +$S:0} +A.n4.prototype={ +gaC(){return[this.a]}} +A.ZF.prototype={} +A.MG.prototype={} +A.arR.prototype={ +qs(a,b){var s=a.a,r=b*0.017453292519943295,q=Math.sin(r),p=a.b,o=Math.cos(r) +return new A.k((s-(Math.abs(s*Math.cos(r))+Math.abs(p*Math.sin(r))))/2,(p-(Math.abs(s*q)+Math.abs(p*o)))/2)}, +at8(a,b){var s,r,q,p,o +if(a==null)return null +s=a.a +r=b/2 +if(s.a>r||s.b>r)s=new A.aC(r,r) +q=a.b +if(q.a>r||q.b>r)q=new A.aC(r,r) +p=a.c +if(p.a>r||p.b>r)p=new A.aC(r,r) +o=a.d +return new A.cl(s,q,p,o.a>r||o.b>r?new A.aC(r,r):o)}, +at9(a,b){var s,r,q,p,o +if(a==null)return B.u +s=a.b +r=b/2 +if(s>r)s=r +q=a.a +p=a.c +o=a.d +return new A.b_(q,s,p,o)}, +CN(a,b){var s,r=Math.max(B.c.d4(a,40),1) +if(b===0)return 1 +s=b/r +if(r<=2)return s +return this.avh(s)}, +avh(a){if(a<1)return this.aho(a) +return this.RA(a)}, +aho(a){var s,r,q,p,o,n,m +if(a<0.000001)return a +s=B.c.k(a) +r=s.length +q=r-2 +for(p=0,o=2;o<=r;++o){if(s[o]!=="0")break;++p}n=q-p +if(n>2)q-=n-2 +m=Math.pow(10,q) +return this.RA(a*m)/m}, +RA(a){var s,r=B.f.k(B.c.V(a)).length-1 +a/=Math.pow(10,r) +s=a>=10?B.c.an(a)/10:a +if(s>=7.6)return 10*B.c.V(Math.pow(10,r)) +else if(s>=2.6)return 5*B.c.V(Math.pow(10,r)) +else if(s>=1.6)return 2*B.c.V(Math.pow(10,r)) +else return B.c.V(Math.pow(10,r))}, +a_Y(a){if(a>=1)return 1 +else if(a>=0.1)return 2 +else if(a>=0.01)return 3 +else if(a>=0.001)return 4 +else if(a>=0.0001)return 5 +else if(a>=0.00001)return 6 +else if(a>=0.000001)return 7 +else if(a>=1e-7)return 8 +else if(a>=1e-8)return 9 +else if(a>=1e-9)return 10 +return 1}, +ma(a,b){var s,r=a.ap(t.yS) +if(r==null)r=B.en +s=b==null||b.a?r.w.cl(b):b +r=A.d_(a,B.iP) +r=r==null?null:r.ay +if(r===!0)s=s.cl(B.dk) +s.toString +return s}, +a_S(a,b,c,d){var s=B.c.bF(d-a,c) +if(Math.abs(b-a)<=s)return a +if(s===0)return a +return a+s}} +A.l4.prototype={ +jQ(a){var s=0,r=A.a1(t.z),q=this,p +var $async$jQ=A.a2(function(b,c){if(b===1)return A.Z(c,r) +while(true)switch(s){case 0:s=2 +return A.a7(A.aj_(),$async$jQ) +case 2:p=c +q.aoZ(new A.iv(p,"","0.65.0")) +return A.a_(null,r)}}) +return A.a0($async$jQ,r)}, +au0(){$.zZ().no("https://github.com/imaNNeo/fl_chart/releases/tag/"+this.c.c)}} +A.iv.prototype={} +A.QA.prototype={ +H(a){var s=A.a([new A.AG(new A.aiq(),null,null,t.Vt)],t.Ds),r=A.Gn(B.ao,B.fY,A.aYT(A.ak(a).p3.ale(B.cR)),!0) +return A.aYy(new A.wR($.aUg(),"FL Chart App",r,null),s)}} +A.aiq.prototype={ +$1(a){var s +t.r2.a($.aw.i(0,$.aRN())) +s=new A.l4(B.En,B.BS) +s.jQ(0) +return s}, +$S:528} +A.Am.prototype={ +ac(){return new A.LJ(B.j)}, +atx(a,b){return this.e.$2(a,b)}} +A.LJ.prototype={ +H(a){var s,r=null,q=this.a,p=A.amX(!0,new A.cA(3,A.jh(A.afT(!1,!0,B.Ma,r,!0,r,r,r,r,r,r,r,r,r,q.f,r,r,r,r),r,r),r),!0) +q=q.c.length +s=!0 +s=s?B.mI:r +return A.bP(r,A.f5(A.a([p,A.jj(new A.Q_(new A.TM(new A.a6x(this),q,!0,!0,!0,r),r,B.b2,!1,r,r,s,!1,r,q,B.af,B.zH,r,B.a9,r)),B.a5z],t.p),B.T,B.U,B.a3),B.o,B.nu,r,r,r,r,r,r,r,r,r,r)}} +A.a6x.prototype={ +$2(a,b){var s=this.a,r=s.a,q=r.c[b] +return new A.to(q.b,q.c,r.d===b,new A.a6v(s,b,q),new A.a6w(q),null)}, +$S:524} +A.a6v.prototype={ +$0(){this.a.a.atx(this.b,this.c)}, +$S:0} +A.a6w.prototype={ +$0(){var s=0,r=A.a1(t.H),q=this,p +var $async$$0=A.a2(function(a,b){if(a===1)return A.Z(b,r) +while(true)switch(s){case 0:p=A.eW("https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/"+q.a.a.b.toLowerCase()+"_chart.md",0,null) +s=4 +return A.a7(A.aDt(p),$async$$0) +case 4:s=b?2:3 +break +case 2:s=5 +return A.a7(A.aE9(p),$async$$0) +case 5:case 3:return A.a_(null,r)}}) +return A.a0($async$$0,r)}, +$S:43} +A.VW.prototype={ +H(a){return new A.AE(new A.at1(),null,null,null,t.HE)}} +A.at1.prototype={ +$2(a,b){var s,r,q,p,o=null,n=b.a,m=n==null,l=m?o:n.c +l=l==null?o:B.d.Cv(l).length===0 +if(l!==!1)return A.bP(o,o,B.o,o,o,o,o,o,o,o,o,o,o,o) +l=a.ap(t.yS) +if(l==null)l=B.en +n=m?o:n.c +n.toString +m=t.Ne +n=A.a([B.ZL,A.c0(o,o,B.dk,"v"+n)],m) +s=b.c +if(B.d.Cv(s).length!==0){r=A.yf(o,o) +q=t.o2 +r.bq=A.aJL(a,q).gYl() +r=A.c0(o,r,o,"\nfl_chart: ") +p=A.yf(o,o) +p.bq=A.aJL(a,q).gYl() +B.b.E(n,A.a([r,A.c0(o,p,B.dk,"v"+s)],m))}n=A.jj(new A.bH(B.Lx,A.aGQ(o,o,B.aK,o,o,!0,o,A.c0(n,o,l.w,""),B.az,o,o,B.ab,B.a_),o)) +m=b.b +return A.bP(o,A.eQ(A.a([n,B.d.Cv(m).length!==0?A.G6(A.bj("Update to "+m,o,o,B.B1,o),new A.at_(),o):A.G6(B.a3v,new A.at0(),o)],t.p),B.T,B.U,B.a3),B.o,o,o,o,o,o,o,B.LB,o,o,o,o)}, +$S:518} +A.at_.prototype={ +$0(){}, +$S:0} +A.at0.prototype={ +$0(){return $.zZ().no("https://flchart.dev/about")}, +$S:0} +A.or.prototype={} +A.OE.prototype={ +H(a){return new A.n0(new A.acL(),null)}} +A.acL.prototype={ +$2(a,b){var s=null,r=b.b,q=r/5.14,p=A.eC(s,s,q) +return A.eQ(A.a([p,new A.wt(A.aZX(s,s,new A.Ap("assets/icons/fl_chart_logo_icon.png",s,s)),q,q,s),A.eC(s,s,r/16),A.aH4("assets/icons/fl_chart_logo_text.svg",s,s,r/2.8)],t.p),B.T,B.U,B.a3)}, +$S:517} +A.to.prototype={ +ac(){return new A.ZU(B.j)}} +A.ZU.prototype={ +H(a){var s=null,r=this.a,q=r.f,p=A.aH4(r.d,B.LX,32,32),o=r.c +return A.p9(B.am,s,A.afT(!1,!0,A.eC(A.eQ(A.a([B.Y3,p,B.Ay,A.bj(o,s,s,A.bL(s,s,r.e?B.E:B.i,s,s,s,s,s,s,s,s,20,s,s,s,s,s,!0,s,s,s,s,s,s,s,s),s),A.jj(A.bP(s,s,B.o,s,s,s,s,s,s,s,s,s,s,s)),new A.XI(this.a.r,s),B.Ay],t.p),B.T,B.U,B.a3),74,s),s,!0,s,s,s,s,s,s,s,new A.ay0(this),s,q,s,s,s,s),B.o,B.n,0,s,s,s,s,s,B.dK)}} +A.ay0.prototype={ +$1(a){var s=this.a +s.a3(new A.ay_(s,a))}, +$S:8} +A.ay_.prototype={ +$0(){}, +$S:0} +A.XI.prototype={ +H(a){return A.eC(A.Cu(null,B.O_,this.c,null,"Documentation"),44,44)}} +A.MD.prototype={ +H(a){var s=null,r=this.c,q=this.d.i(0,r).length,p=!0 +p=p?B.mI:s +return A.aGS(s,B.n,new A.Qb(B.E7,32,32,new A.TM(new A.a8E(this),q,!0,!0,!0,s),B.LL,B.b2,!1,s,s,p,!1,s,q,B.af,B.zH,s,B.a9,new A.dN(r,t.Cv)),s)}} +A.a8E.prototype={ +$2(a,b){var s=this.a +return new A.vw(s.d.i(0,s.c)[b],null)}, +$S:516} +A.Pe.prototype={ +adV(){var s=this,r=t.bv +s.d!==$&&A.bS() +s.d=A.A(r,t.S) +r=A.aLt(B.kD,new A.af_(s),r,t.sL) +r=A.V(r,!0,r.$ti.h("n.E")) +s.e!==$&&A.bS() +s.e=r}, +H(a){var s=this.d +s===$&&A.b() +s=s.i(0,this.c) +s.toString +return new A.n0(new A.af2(this,s),null)}} +A.af_.prototype={ +$2(a,b){var s=this.a.d +s===$&&A.b() +s.n(0,b,a) +return new A.or(b,A.aFk(b)+" Chart",A.aVb(b))}, +$S:515} +A.af2.prototype={ +$2(a,b){var s,r,q,p=null,o=b.b<=654,n=this.a,m=n.e +m===$&&A.b() +s=new A.Am(m,this.b,new A.af0(a,o),new A.af1(),p) +n=n.c +r=new A.MD(n,$.aRQ(),p) +q=o?r:A.eQ(A.a([A.eC(s,p,304),A.jj(r)],t.p),B.T,B.U,B.a3) +m=o?new A.O3(s,p):p +return A.aGS(o?A.aJD(B.n,0,A.bj(A.aFk(n)+" Chart",p,p,p,p)):p,p,q,m)}, +$S:514} +A.af0.prototype={ +$2(a,b){var s=this.a +A.aeh(s).xe(0,"/"+b.a.b,null) +if(this.b)A.QE(s).ev()}, +$S:513} +A.af1.prototype={ +$0(){return $.zZ().no("https://flchart.dev")}, +$S:0} +A.aDj.prototype={ +$2(a,b){var s=null +return A.bP(s,s,B.o,B.fY,s,s,s,s,s,s,s,s,s,s)}, +$S:144} +A.aDk.prototype={ +$2(a,b){return"/"+B.b.gL(B.kD).b}, +$S:145} +A.aDl.prototype={ +$1(a){return A.ae7(null,new A.aDi(a),"/"+a.b,null)}, +$S:512} +A.aDi.prototype={ +$2(a,b){var s=null,r=new A.Pe(this.a,s) +r.adV() +return A.aLP(s,r,B.a5l,s,s,t.H)}, +$S:511} +A.aDm.prototype={ +$2(a,b){var s=null +return A.bP(s,s,B.o,B.fY,s,s,s,s,s,s,s,s,s,s)}, +$S:144} +A.aDn.prototype={ +$2(a,b){return"/"}, +$S:145} +A.qG.prototype={ +ac(){return new A.Aw(B.j)}} +A.Aw.prototype={ +H(a){var s=this,r=null,q=A.bj("Grafik konsumsi kalori",r,r,A.bL(r,r,A.hb(B.aq,40),r,r,r,r,r,r,r,r,18,r,r,B.x,r,r,!0,r,r,r,r,r,r,r,r),r),p=t.p +q=A.f5(A.a([B.a3H,B.fp,q,B.AE,A.jj(new A.bH(B.ol,A.qD(s.f?s.wt():s.asD(),B.jX),r)),B.iv],p),B.dC,B.U,B.a3) +return new A.cA(1,A.kA(B.bM,A.a([new A.bH(B.er,q,r),new A.bH(B.k_,new A.h8(B.j3,r,r,A.Cu(r,A.Ct(s.f?B.NM:B.NN,B.aq,r,r),new A.a77(s),r,r),r),r)],p),B.a9,B.bJ),r)}, +Y2(a,b,c,d){var s,r,q,p=this,o=null +if(c==null){p.a.toString +c=B.i}s=d?b+1:b +if(d){p.a.toString +r=B.aq}else r=c +if(d){p.a.toString +q=new A.b_(A.hb(B.aq,80),1,B.y,-1)}else q=B.CV +return A.f1(A.a([A.c6(A.aFe(p.a.c,o,o,!0,20),o,o,q,r,o,o,o,s,22)],t.UA),o,o,B.aa,a)}, +oR(a,b,c){return this.Y2(a,b,null,c)}, +oQ(a,b,c){return this.Y2(a,b,c,!1)}, +a1r(){return A.D_(7,new A.a7d(this),t.DK)}, +asD(){var s=this,r=null,q=A.mt(r,r,r,r,r,new A.a79(s),r,A.Mc(new A.a7a(s),B.bY,B.M6,-10,r)),p=A.cK(r,!1) +return A.l7(r,r,s.a1r(),q,r,p,r,B.bT,r,r,r,r,new A.df(!0,B.J,B.J,B.J,new A.br(16,r,new A.bw(!0,s.gpi(),38,r),!0)))}, +t2(a,b){var s +switch(B.c.V(a)){case 0:s=B.a3q +break +case 1:s=B.Bb +break +case 2:s=B.a3x +break +case 3:s=B.Bb +break +case 4:s=B.a3u +break +case 5:s=B.B9 +break +case 6:s=B.B9 +break +default:s=B.a3z +break}return new A.ct(b.w,16,s,0,B.a6,null)}, +wt(){var s=null,r=A.mt(s,!1,s,s,s,s,s,s),q=A.cK(s,!1) +return A.l7(s,s,A.D_(7,new A.a7b(this),t.DK),r,s,q,s,B.bT,s,s,s,s,new A.df(!0,B.J,B.J,B.J,new A.br(16,s,new A.bw(!0,this.gpi(),38,s),!0)))}, +rE(){var s=0,r=A.a1(t.z),q=this +var $async$rE=A.a2(function(a,b){if(a===1)return A.Z(b,r) +while(true)switch(s){case 0:q.a3(new A.a7c()) +s=2 +return A.a7(A.Ch(new A.b1(3e5),null,t.z),$async$rE) +case 2:s=q.f?3:4 +break +case 3:s=5 +return A.a7(q.rE(),$async$rE) +case 5:case 4:return A.a_(null,r)}}) +return A.a0($async$rE,r)}} +A.a77.prototype={ +$0(){var s=this.a +s.a3(new A.a76(s))}, +$S:0} +A.a76.prototype={ +$0(){var s=this.a,r=!s.f +s.f=r +if(r)s.rE()}, +$S:0} +A.a7d.prototype={ +$1(a){var s,r=this +switch(a){case 0:s=r.a +return s.oR(0,5,a===s.e) +case 1:s=r.a +return s.oR(1,6.5,a===s.e) +case 2:s=r.a +return s.oR(2,5,a===s.e) +case 3:s=r.a +return s.oR(3,7.5,a===s.e) +case 4:s=r.a +return s.oR(4,9,a===s.e) +case 5:s=r.a +return s.oR(5,11.5,a===s.e) +case 6:s=r.a +return s.oR(6,6.5,a===s.e) +default:return A.T(new A.bX())}}, +$S:146} +A.a7a.prototype={ +$4(a,b,c,d){var s,r,q=null +switch(a.a){case 0:s="Monday" +break +case 1:s="Tuesday" +break +case 2:s="Wednesday" +break +case 3:s="Thursday" +break +case 4:s="Friday" +break +case 5:s="Saturday" +break +case 6:s="Sunday" +break +default:throw A.c(new A.bX())}r=B.c.k(c.b-1) +this.a.a.toString +return new A.k1(s+"\n",B.m3,A.a([A.c0(q,q,A.bL(q,q,B.aq,q,q,q,q,q,q,q,q,16,q,q,B.a5,q,q,!0,q,q,q,q,q,q,q,q),r)],t.Ne))}, +$C:"$4", +$R:4, +$S:106} +A.a79.prototype={ +$2(a,b){var s=this.a +s.a3(new A.a78(s,a,b))}, +$S:68} +A.a78.prototype={ +$0(){var s,r=this +if(r.b.gja()){s=r.c +s=s==null||s.a==null}else s=!0 +if(s){r.a.e=-1 +return}r.a.e=r.c.a.d}, +$S:0} +A.a7b.prototype={ +$1(a){var s,r,q=this +switch(a){case 0:s=q.a +r=B.aw.fS(15) +s.a.toString +return s.oQ(0,r+6,B.d1[B.aw.fS(6)]) +case 1:s=q.a +r=B.aw.fS(15) +s.a.toString +return s.oQ(1,r+6,B.d1[B.aw.fS(6)]) +case 2:s=q.a +r=B.aw.fS(15) +s.a.toString +return s.oQ(2,r+6,B.d1[B.aw.fS(6)]) +case 3:s=q.a +r=B.aw.fS(15) +s.a.toString +return s.oQ(3,r+6,B.d1[B.aw.fS(6)]) +case 4:s=q.a +r=B.aw.fS(15) +s.a.toString +return s.oQ(4,r+6,B.d1[B.aw.fS(6)]) +case 5:s=q.a +r=B.aw.fS(15) +s.a.toString +return s.oQ(5,r+6,B.d1[B.aw.fS(6)]) +case 6:s=q.a +r=B.aw.fS(15) +s.a.toString +return s.oQ(6,r+6,B.d1[B.aw.fS(6)]) +default:return A.T(new A.bX())}}, +$S:146} +A.a7c.prototype={ +$0(){}, +$S:0} +A.qH.prototype={ +ac(){return new A.Ax(B.j)}} +A.Ax.prototype={ +aB(){var s=this +s.aR() +s.f=s.e=A.a([s.oP(0,5,12),s.oP(1,16,12),s.oP(2,18,5),s.oP(3,20,16),s.oP(4,17,6),s.oP(5,19,1.5),s.oP(6,10,1.5)],t.hn)}, +H(a){var s=this,r=null,q=t.p,p=A.eQ(A.a([A.eQ(A.a([A.bP(r,r,B.o,A.C(102,255,255,255),r,r,r,10,r,r,r,r,r,4.5),B.iu,A.bP(r,r,B.o,A.C(204,255,255,255),r,r,r,28,r,r,r,r,r,4.5),B.iu,A.bP(r,r,B.o,A.C(255,255,255,255),r,r,r,42,r,r,r,r,r,4.5),B.iu,A.bP(r,r,B.o,A.C(204,255,255,255),r,r,r,28,r,r,r,r,r,4.5),B.iu,A.bP(r,r,B.o,A.C(102,255,255,255),r,r,r,10,r,r,r,r,r,4.5)],q),B.T,B.U,B.bf),B.Y4,B.a3p,B.Az,B.a3f],q),B.T,B.U,B.bf),o=A.mt(r,r,r,r,r,new A.a7h(s),r,A.Mc(new A.a7i(),B.TO,r,r,r)),n=A.cK(r,!1),m=s.f +m===$&&A.b() +return new A.cA(1,new A.bH(B.er,A.f5(A.a([p,B.AE,A.jj(A.qD(A.l7(r,r,m,o,r,n,r,B.bT,r,20,r,r,new A.df(!0,new A.br(16,r,new A.bw(!0,s.gw2(),28,1),!0),B.J,B.J,new A.br(16,r,new A.bw(!0,s.go_(),42,r),!0))),B.aj)),B.iv],q),B.dC,B.U,B.a3),r),r)}, +w3(a,b){var s,r=null +if(a===0)s="1K" +else if(a===10)s="5K" +else{if(a!==19)return A.bP(r,r,B.o,r,r,r,r,r,r,r,r,r,r,r) +s="10K"}return new A.ct(b.w,0,A.bj(s,r,r,B.B2,r),0,B.a6,r)}, +o0(a,b){var s=null +return new A.ct(b.w,16,A.bj(["Mn","Te","Wd","Tu","Fr","St","Su"][B.c.V(a)],s,s,B.B2,s),0,B.a6,s)}, +oP(a,b,c){var s=null +this.a.toString +return A.f1(A.a([A.c6(s,s,s,s,B.aQ,s,s,s,b,7),A.c6(s,s,s,s,B.bQ,s,s,s,c,7)],t.UA),4,s,s,a)}} +A.a7i.prototype={ +$4(a,b,c,d){return null}, +$C:"$4", +$R:4, +$S:506} +A.a7h.prototype={ +$2(a,b){var s +if(b==null||b.a==null){s=this.a +s.a3(new A.a7f(s)) +return}s=this.a +s.r=b.a.d +s.a3(new A.a7g(s,a))}, +$S:68} +A.a7f.prototype={ +$0(){var s,r=this.a +r.r=-1 +s=r.e +s===$&&A.b() +r.f=A.V(s,!0,t.DK)}, +$S:0} +A.a7g.prototype={ +$0(){var s,r,q,p,o,n,m,l,k +if(!this.b.gja()){s=this.a +s.r=-1 +r=s.e +r===$&&A.b() +s.f=A.V(r,!0,t.DK) +return}s=this.a +r=s.e +r===$&&A.b() +r=s.f=A.V(r,!0,t.DK) +q=s.r +if(q!==-1){for(p=r[q],o=p.c,n=o.length,m=0,l=0;l") +r[q]=p.an_(A.V(new A.R(o,new A.a7e(s,m/n),k),!0,k.h("af.E")))}}, +$S:0} +A.a7e.prototype={ +$1(a){var s=this.a.a.e +return A.c6(a.x,a.r,a.f,a.w,s,a.a,a.d,a.y,this.b,a.e)}, +$S:505} +A.GX.prototype={ +H(a){var s=null,r=this.galH(),q=A.cK(s,!1),p=t.W,o=t.UA,n=t.t +return A.qD(A.l7(B.C3,s,A.a([A.f1(A.a([A.c6(s,s,s,s,s,s,new A.dO(B.bv,B.bw,B.V,A.a([A.hb(B.l,20),B.E],p),s,s),s,8,s)],o),s,s,A.a([0],n),0),A.f1(A.a([A.c6(s,s,s,s,s,s,new A.dO(B.bv,B.bw,B.V,A.a([A.hb(B.l,20),B.E],p),s,s),s,10,s)],o),s,s,A.a([0],n),1),A.f1(A.a([A.c6(s,s,s,s,s,s,new A.dO(B.bv,B.bw,B.V,A.a([A.hb(B.l,20),B.E],p),s,s),s,14,s)],o),s,s,A.a([0],n),2),A.f1(A.a([A.c6(s,s,s,s,s,s,new A.dO(B.bv,B.bw,B.V,A.a([A.hb(B.l,20),B.E],p),s,s),s,15,s)],o),s,s,A.a([0],n),3),A.f1(A.a([A.c6(s,s,s,s,s,s,new A.dO(B.bv,B.bw,B.V,A.a([A.hb(B.l,20),B.E],p),s,s),s,13,s)],o),s,s,A.a([0],n),4),A.f1(A.a([A.c6(s,s,s,s,s,s,new A.dO(B.bv,B.bw,B.V,A.a([A.hb(B.l,20),B.E],p),s,s),s,10,s)],o),s,s,A.a([0],n),5),A.f1(A.a([A.c6(s,s,s,s,s,s,new A.dO(B.bv,B.bw,B.V,A.a([A.hb(B.l,20),B.E],p),s,s),s,16,s)],o),s,s,A.a([0],n),6)],t.hn),r,s,q,s,B.bT,s,20,s,s,new A.df(!0,B.J,B.J,B.J,new A.br(16,s,new A.bw(!0,this.gpi(),30,s),!0))),B.aj)}, +galH(){var s=null +return A.mt(s,!1,s,s,s,s,s,A.Mc(new A.atn(),B.n,s,8,B.bB))}, +t2(a,b){var s,r=null,q=A.bL(r,r,A.hb(B.l,20),r,r,r,r,r,r,r,r,14,r,r,B.x,r,r,!0,r,r,r,r,r,r,r,r) +switch(B.c.V(a)){case 0:s="Mn" +break +case 1:s="Te" +break +case 2:s="Wd" +break +case 3:s="Tu" +break +case 4:s="Fr" +break +case 5:s="St" +break +case 6:s="Sn" +break +default:s="" +break}return new A.ct(b.w,4,A.bj(s,r,r,q,r),0,B.a6,r)}} +A.atn.prototype={ +$4(a,b,c,d){return new A.k1(B.f.k(B.c.an(c.b)),B.a0h,null)}, +$C:"$4", +$R:4, +$S:106} +A.qI.prototype={ +ac(){return new A.M9(B.j)}} +A.M9.prototype={ +H(a){return B.BV}} +A.qJ.prototype={ +ac(){return new A.Ay(B.j)}} +A.Ay.prototype={ +o0(a,b){var s,r=null +switch(B.c.V(a)){case 0:s="Apr" +break +case 1:s="May" +break +case 2:s="Jun" +break +case 3:s="Jul" +break +case 4:s="Aug" +break +default:s="" +break}return new A.ct(b.w,8,A.bj(s,r,r,B.iB,r),0,B.a6,r)}, +w3(a,b){var s=null +if(a===b.b)return A.bP(s,s,B.o,s,s,s,s,s,s,s,s,s,s,s) +return new A.ct(b.w,8,A.bj(b.r,s,s,B.iB,s),0,B.a6,s)}, +H(a){return new A.cA(1.66,new A.bH(B.oi,new A.n0(new A.a7l(this),null),null),null)}} +A.a7l.prototype={ +$2(c0,c1){var s,r,q,p,o,n,m,l,k,j,i,h,g=null,f=17e9,e=2e9,d=12e9,c=24e9,b=13e9,a=14e9,a0=18e9,a1=29e9,a2=9e9,a3=15e9,a4=32e9,a5=31e9,a6=11e9,a7=35e9,a8=27e9,a9=8e9,b0=34e9,b1=6e9,b2=23e9,b3=7e9,b4=2e10,b5=4e9,b6=25e9,b7=c1.b,b8=4*b7/400,b9=8*b7/400 +b7=A.mt(g,!1,g,g,g,g,g,g) +s=this.a +r=A.cK(g,!1) +q=s.a +p=t.Wo +q=A.c6(g,g,B.H,g,g,g,g,A.a([new A.aL(0,e,q.c,B.u),new A.aL(e,d,q.d,B.u),new A.aL(d,f,B.E,B.u)],p),f,b9) +o=s.a +o=A.c6(g,g,B.H,g,g,g,g,A.a([new A.aL(0,b,o.c,B.u),new A.aL(b,a,o.d,B.u),new A.aL(a,c,B.E,B.u)],p),c,b9) +n=s.a +n=A.c6(g,g,B.H,g,g,g,g,A.a([new A.aL(0,6000000000.5,n.c,B.u),new A.aL(6000000000.5,a0,n.d,B.u),new A.aL(a0,23000000000.5,B.E,B.u)],p),23000000000.5,b9) +m=s.a +m=A.c6(g,g,B.H,g,g,g,g,A.a([new A.aL(0,a2,m.c,B.u),new A.aL(a2,a3,m.d,B.u),new A.aL(a3,a1,B.E,B.u)],p),a1,b9) +l=s.a +k=t.UA +l=A.f1(A.a([q,o,n,m,A.c6(g,g,B.H,g,g,g,g,A.a([new A.aL(0,2000000000.5,l.c,B.u),new A.aL(2000000000.5,17000000000.5,l.d,B.u),new A.aL(17000000000.5,a4,B.E,B.u)],p),a4,b9)],k),b8,g,g,0) +m=s.a +m=A.c6(g,g,B.H,g,g,g,g,A.a([new A.aL(0,a6,m.c,B.u),new A.aL(a6,a0,m.d,B.u),new A.aL(a0,a5,B.E,B.u)],p),a5,b9) +n=s.a +n=A.c6(g,g,B.H,g,g,g,g,A.a([new A.aL(0,a,n.c,B.u),new A.aL(a,a8,n.d,B.u),new A.aL(a8,a7,B.E,B.u)],p),a7,b9) +o=s.a +o=A.c6(g,g,B.H,g,g,g,g,A.a([new A.aL(0,a9,o.c,B.u),new A.aL(a9,c,o.d,B.u),new A.aL(c,a5,B.E,B.u)],p),a5,b9) +q=s.a +q=A.c6(g,g,B.H,g,g,g,g,A.a([new A.aL(0,6000000000.5,q.c,B.u),new A.aL(6000000000.5,12000000000.5,q.d,B.u),new A.aL(12000000000.5,a3,B.E,B.u)],p),a3,b9) +j=s.a +j=A.f1(A.a([m,n,o,q,A.c6(g,g,B.H,g,g,g,g,A.a([new A.aL(0,a2,j.c,B.u),new A.aL(a2,a3,j.d,B.u),new A.aL(a3,f,B.E,B.u)],p),f,b9)],k),b8,g,g,1) +q=s.a +q=A.c6(g,g,B.H,g,g,g,g,A.a([new A.aL(0,b1,q.c,B.u),new A.aL(b1,b2,q.d,B.u),new A.aL(b2,b0,B.E,B.u)],p),b0,b9) +o=s.a +o=A.c6(g,g,B.H,g,g,g,g,A.a([new A.aL(0,b3,o.c,B.u),new A.aL(b3,c,o.d,B.u),new A.aL(c,a4,B.E,B.u)],p),a4,b9) +n=s.a +n=A.c6(g,g,B.H,g,g,g,g,A.a([new A.aL(0,1000000000.5,n.c,B.u),new A.aL(1000000000.5,d,n.d,B.u),new A.aL(d,14000000000.5,B.E,B.u)],p),14000000000.5,b9) +m=s.a +m=A.c6(g,g,B.H,g,g,g,g,A.a([new A.aL(0,b5,m.c,B.u),new A.aL(b5,a3,m.d,B.u),new A.aL(a3,b4,B.E,B.u)],p),b4,b9) +i=s.a +i=A.f1(A.a([q,o,n,m,A.c6(g,g,B.H,g,g,g,g,A.a([new A.aL(0,b5,i.c,B.u),new A.aL(b5,a3,i.d,B.u),new A.aL(a3,c,B.E,B.u)],p),c,b9)],k),b8,g,g,2) +m=s.a +m=A.c6(g,g,B.H,g,g,g,g,A.a([new A.aL(0,1000000000.5,m.c,B.u),new A.aL(1000000000.5,d,m.d,B.u),new A.aL(d,a,B.E,B.u)],p),a,b9) +n=s.a +n=A.c6(g,g,B.H,g,g,g,g,A.a([new A.aL(0,b3,n.c,B.u),new A.aL(b3,b6,n.d,B.u),new A.aL(b6,a8,B.E,B.u)],p),a8,b9) +o=s.a +o=A.c6(g,g,B.H,g,g,g,g,A.a([new A.aL(0,b1,o.c,B.u),new A.aL(b1,b2,o.d,B.u),new A.aL(b2,a1,B.E,B.u)],p),a1,b9) +q=s.a +q=A.c6(g,g,B.H,g,g,g,g,A.a([new A.aL(0,a2,q.c,B.u),new A.aL(a2,a3,q.d,B.u),new A.aL(a3,16000000000.5,B.E,B.u)],p),16000000000.5,b9) +h=s.a +return A.qD(A.l7(B.mL,g,A.a([l,j,i,A.f1(A.a([m,n,o,q,A.c6(g,g,B.H,g,g,g,g,A.a([new A.aL(0,b3,h.c,B.u),new A.aL(b3,12000000000.5,h.d,B.u),new A.aL(12000000000.5,a3,B.E,B.u)],p),a3,b9)],k),b8,g,g,3)],t.hn),b7,g,r,g,new A.ew(!0,!0,g,new A.a7j(),new A.a7k(),!1,g,A.h6(),A.eJ()),b8,g,g,g,new A.df(!0,new A.br(16,g,new A.bw(!0,s.gw2(),40,g),!0),B.J,B.J,new A.br(16,g,new A.bw(!0,s.go_(),28,g),!0))),B.aj)}, +$S:496} +A.a7k.prototype={ +$1(a){return B.c.bF(a,10)===0}, +$S:9} +A.a7j.prototype={ +$1(a){return A.mO(A.C(B.c.an(25.5),255,255,255),null,null,1)}, +$S:14} +A.qK.prototype={ +ac(){return new A.Az(B.j)}} +A.Az.prototype={ +aB(){this.aR()}, +o0(a,b){var s,r=null +switch(B.c.V(a)){case 0:s="Mon" +break +case 1:s="Tue" +break +case 2:s="Wed" +break +case 3:s="Thu" +break +case 4:s="Fri" +break +case 5:s="Sat" +break +case 6:s="Sun" +break +default:s="" +break}return new A.ct(b.w,8,A.bj(s,r,r,B.fu,r),0,B.a6,r)}, +avG(a,b){var s,r=null +switch(B.c.V(a)){case 0:s="Mon" +break +case 1:s="Tue" +break +case 2:s="Wed" +break +case 3:s="Thu" +break +case 4:s="Fri" +break +case 5:s="Sat" +break +case 6:s="Sun" +break +default:return A.bP(r,r,B.o,r,r,r,r,r,r,r,r,r,r,r)}return new A.ct(b.w,8,A.bj(s,r,r,B.fu,r),0,B.a6,r)}, +w3(a,b){var s,r=a===0?"0":""+B.c.V(a)+"0k" +$.zZ() +s=a<0?-45:45 +return new A.ct(b.w,4,A.bj(r,null,null,B.fu,B.aH),s*3.141592653589793/180,B.a6,null)}, +avd(a,b){var s=a===0?"0":""+B.c.V(a)+"0k" +$.zZ() +return new A.ct(b.w,0,A.bj(s,null,null,B.fu,B.aH),1.5707963267948966,B.a6,null)}, +H(a){var s=this,r=null,q=A.mt(r,r,!1,r,r,new A.a7p(s),r,r),p=A.cK(r,!1),o=B.vo.gd5(B.vo) +return new A.cA(0.8,new A.bH(B.oi,A.qD(A.l7(B.mL,r,o.eQ(o,new A.a7q(s),t.DK).dI(0),q,r,p,r,new A.ew(!0,!0,r,new A.a7r(),new A.a7s(),!0,r,A.h6(),A.eJ()),12,20,-20,r,new A.df(!0,new A.br(16,r,new A.bw(!0,s.gw2(),42,5),!0),new A.br(16,r,new A.bw(!0,s.gavF(),32,r),!0),new A.br(16,r,new A.bw(!0,s.gavc(),42,5),!0),new A.br(16,r,new A.bw(!0,s.go_(),32,r),!0))),B.aj),r),r)}} +A.a7p.prototype={ +$2(a,b){var s +if(!a.gja()||b==null||b.a==null){s=this.a +s.a3(new A.a7m(s)) +return}if(b.a.f===1){s=this.a +s.a3(new A.a7n(s)) +return}s=this.a +s.a3(new A.a7o(s,b))}, +$S:68} +A.a7m.prototype={ +$0(){this.a.d=-1}, +$S:0} +A.a7n.prototype={ +$0(){this.a.d=-1}, +$S:0} +A.a7o.prototype={ +$0(){this.a.d=this.b.a.d}, +$S:0} +A.a7s.prototype={ +$1(a){return B.c.bF(a,5)===0}, +$S:9} +A.a7r.prototype={ +$1(a){var s=null +if(a===0)return A.mO(A.C(B.c.an(25.5),255,255,255),s,s,3) +return A.mO(A.C(13,255,255,255),s,s,0.8)}, +$S:14} +A.a7q.prototype={ +$1(a){var s,r,q,p,o,n,m=null,l=a.a,k=a.b,j=J.aF(k),i=j.i(k,0),h=i>0,g=i+j.i(k,1),f=g+j.i(k,2),e=f+j.i(k,3),d=this.a.d===l +k=t.t +k=d?A.a([0],k):A.a([],k) +j=h?B.mR:B.mS +s=d?2:0 +r=d?2:0 +q=d?2:0 +p=d?2:0 +o=t.Wo +p=A.c6(m,m,j,m,m,m,m,A.a([new A.aL(0,i,B.aq,new A.b_(B.i,s,B.y,-1)),new A.aL(i,g,B.aQ,new A.b_(B.i,r,B.y,-1)),new A.aL(g,f,B.bm,new A.b_(B.i,q,B.y,-1)),new A.aL(f,e,B.l,new A.b_(B.i,p,B.y,-1))],o),e,22) +q=-e +j=h?B.mS:B.mR +i=-i +s=A.C(B.c.an(255*(d?0.4:0.2)),59,255,73) +g=-g +r=A.C(B.c.an(255*(d?0.4:0.2)),255,195,0) +f=-f +n=A.C(B.c.an(255*(d?0.4:0.2)),255,58,242) +return A.f1(A.a([p,A.c6(m,m,j,m,B.n,m,m,A.a([new A.aL(0,i,s,B.bx),new A.aL(i,g,r,B.bx),new A.aL(g,f,n,B.bx),new A.aL(f,q,A.C(B.c.an(255*(d?0.4:0.2)),33,150,243),B.bx)],o),q,22)],t.UA),m,!0,k,l)}, +$S:462} +A.qL.prototype={ +iy(a,b,c,d){var s=null,r=b+0.2,q=r+c,p=q+0.2 +return A.f1(A.a([A.c6(s,s,s,s,B.bP,0,s,s,b,5),A.c6(s,s,s,s,B.l,r,s,s,q,5),A.c6(s,s,s,s,B.E,p,s,s,p+d,5)],t.UA),s,!0,s,a)}, +o0(a,b){var s,r=null +switch(B.c.V(a)){case 0:s="JAN" +break +case 1:s="FEB" +break +case 2:s="MAR" +break +case 3:s="APR" +break +case 4:s="MAY" +break +case 5:s="JUN" +break +case 6:s="JUL" +break +case 7:s="AUG" +break +case 8:s="SEP" +break +case 9:s="OCT" +break +case 10:s="NOV" +break +case 11:s="DEC" +break +default:s=""}return new A.ct(b.w,8,A.bj(s,r,r,B.iB,r),0,B.a6,r)}, +H(a){var s=this,r=null,q=A.a([new A.p0("Pilates",B.bP),new A.p0("Quick workouts",B.l),new A.p0("Cycling",B.E)],t._I),p=A.mt(r,!1,r,r,r,r,r,r),o=A.cK(r,!1),n=t.t +return new A.bH(B.ok,A.f5(A.a([B.a3A,B.Ya,new A.PT(q,r),B.Y6,new A.cA(2,A.qD(A.l7(B.mM,r,A.a([s.iy(0,2,3,2),s.iy(1,2,5,1.7),s.iy(2,1.3,3.1,2.8),s.iy(3,3.1,4,3.1),s.iy(4,0.8,3.3,3.4),s.iy(5,2,5.6,1.8),s.iy(6,1.3,3.2,2),s.iy(7,2.3,3.2,3),s.iy(8,2,4.8,2.5),s.iy(9,1.2,3.2,2.5),s.iy(10,1,4.8,3),s.iy(11,2,4.4,2.8)],t.hn),p,r,o,new A.oE(A.a([A.Cr(B.bP,A.a([20,4],n),r,r,r,B.aG,1,3.3),A.Cr(B.l,A.a([20,4],n),r,r,r,B.aG,1,8),A.Cr(B.E,A.a([20,4],n),r,r,r,B.aG,1,11)],t.rx),B.kF,!0),B.bT,r,11.6,r,r,new A.df(!0,B.J,B.J,B.J,new A.br(16,r,new A.bw(!0,s.go_(),20,r),!0))),B.aj),r)],t.p),B.cT,B.U,B.bf),r)}} +A.qM.prototype={ +ac(){return new A.Wh(B.j)}} +A.Wh.prototype={ +H(a){var s,r=this,q=null,p=new A.b_(A.C(51,255,255,255),1,B.y,-1) +p=A.cK(new A.d2(p,B.r,p,B.r),!0) +s=r.a.d +s=new A.cw(s,A.S(s).h("cw<1>")) +return new A.bH(B.ok,new A.cA(1.4,A.qD(A.l7(B.mM,q,s.gd5(s).eQ(0,new A.atf(r),t.DK).dI(0),A.mt(q,!0,!1,q,q,new A.atg(r),q,A.Mc(new A.ath(),B.n,q,0,q)),q,p,q,new A.ew(!0,!0,q,new A.ati(),A.eJ(),!1,q,A.h6(),A.eJ()),q,20,q,q,new A.df(!0,new A.br(16,q,new A.bw(!0,new A.atj(),30,q),!0),B.J,B.J,new A.br(16,q,new A.bw(!0,new A.atk(r),36,q),!0))),B.aj),q),q)}} +A.atj.prototype={ +$2(a,b){return A.bj(B.f.k(B.c.V(a)),null,null,null,B.ci)}, +$S:452} +A.atk.prototype={ +$2(a,b){var s=B.c.V(a),r=this.a +return new A.ct(b.w,8,new A.I1(r.a.d[s].a,r.d===s,B.ae,B.bS,null,null),0,B.a6,null)}, +$S:451} +A.ati.prototype={ +$1(a){return A.mO(A.C(51,255,255,255),null,null,1)}, +$S:14} +A.atf.prototype={ +$1(a){var s=null,r=a.a,q=a.b,p=this.a,o=q.a,n=q.b,m=q.c +n=A.c6(s,s,s,s,o,s,s,s,n,6) +p.a.toString +m=A.a([n,A.c6(s,s,s,s,B.HY,s,s,s,m,6)],t.UA) +o=t.t +return A.f1(m,s,s,p.d===r?A.a([0],o):A.a([],o),r)}, +$S:448} +A.ath.prototype={ +$4(a,b,c,d){var s=null +return new A.k1(B.c.k(c.b),A.bL(s,s,c.c,s,s,s,s,s,s,s,s,18,s,s,B.x,s,s,!0,s,s,s,s,s,B.R8,s,s),s)}, +$C:"$4", +$R:4, +$S:106} +A.atg.prototype={ +$2(a,b){var s=a.gja()&&b!=null&&b.a!=null,r=this.a +if(s)r.a3(new A.atd(r,b)) +else r.a3(new A.ate(r))}, +$S:68} +A.atd.prototype={ +$0(){this.a.d=this.b.a.d}, +$S:0} +A.ate.prototype={ +$0(){this.a.d=-1}, +$S:0} +A.kR.prototype={} +A.I1.prototype={ +ac(){return new A.Z_(null,null,B.j)}} +A.Z_.prototype={ +H(a){var s,r,q,p=this,o=p.CW +o.toString +s=p.gds() +s=o.a2(0,s.gl(s)) +o=p.CW +o.toString +r=p.gds() +q=1+o.a2(0,r.gl(r))*0.5 +s=A.aLQ(12.566370614359172*s).t5(q,q) +o=p.a +r=o.w?B.NJ:B.NI +return A.ys(null,A.Ct(r,o.r,null,28),null,B.UE,s,!0)}, +ij(a){var s=this,r=s.CW,q=s.a.w?1:0 +s.CW=t.ir.a(a.$3(r,q,new A.aw7(s)))}} +A.aw7.prototype={ +$1(a){var s +A.mk(a) +s=this.a.a.w?1:0 +return new A.ar(a,s,t.Y)}, +$S:32} +A.qN.prototype={ +ac(){return new A.Av(B.j)}} +A.Av.prototype={ +H(a){var s,r=null +this.a.toString +s=t.p +return new A.cA(1,new A.bH(B.er,A.f5(A.a([A.eQ(A.a([B.NZ,B.Y2,A.bj("Sales forecasting chart",r,r,A.bL(r,r,B.i,r,r,r,r,r,r,r,r,18,r,r,B.x,r,r,!0,r,r,r,r,r,r,r,r),r)],s),B.T,B.cD,B.a3),B.Y9,A.jj(A.qD(this.wt(),B.aj))],s),B.cT,B.vn,B.a3),r),r)}, +t2(a,b){var s=null +return new A.ct(b.w,16,A.bj(["M","T","W","T","F","S","S"][B.c.V(a)],s,s,B.dj,s),0,B.a6,s)}, +wt(){var s,r,q,p,o,n,m=null,l=A.mt(m,!1,m,m,m,m,m,m),k=A.cK(m,!1),j=J.rP(7,t.DK) +for(s=t.UA,r=t.t,q=0;q<7;++q){p=B.aw.fS(290) +o=q>=4 +if(o)n=B.n +else{this.a.toString +n=B.i}o=o?A.a([4,4],r):m +this.a.toString +j[q]=A.f1(A.a([A.c6(m,o,B.H,new A.b_(B.i,2,B.y,-1),n,m,m,m,p+10,22)],s),m,m,m,q)}return A.l7(m,m,j,l,m,k,m,B.bT,m,300,m,m,new A.df(!0,B.e6,B.J,B.J,new A.br(16,m,new A.bw(!0,this.gpi(),38,m),!0)))}} +A.lb.prototype={} +A.PY.prototype={ +gkd(a){return B.jn}} +A.M8.prototype={ +gkd(a){return B.jo}} +A.Rx.prototype={ +gkd(a){return B.jp}} +A.T7.prototype={ +gkd(a){return B.jq}} +A.RV.prototype={ +gkd(a){return B.jr}} +A.a8F.prototype={ +$1(a){return B.OG}, +$S:430} +A.a8G.prototype={ +$1(a){return B.OH}, +$S:429} +A.a8H.prototype={ +$1(a){var s=A.C(51,255,195,0),r=A.C(B.c.an(127.5),255,195,0),q=A.C(51,255,195,0),p=A.C(204,59,255,73) +return new A.t3(B.bQ,s,B.aQ,r,B.aQ,q,B.aQ,p,B.aq,B.k,null)}, +$S:423} +A.a8S.prototype={ +$1(a){var s=A.C(255,255,195,0),r=A.C(255,255,58,242),q=A.C(B.c.an(178.5),110,27,255) +return new A.t4(s,r,q,null)}, +$S:419} +A.a8X.prototype={ +$1(a){return B.OI}, +$S:418} +A.a8Y.prototype={ +$1(a){var s=null,r=A.hb(B.cc,60),q=A.hb(B.l,60) +r=new A.t6(B.cc,r,q,B.l,s) +r.a6h(s,s,s,s,s) +return r}, +$S:411} +A.a8Z.prototype={ +$1(a){var s=A.C(B.c.an(127.5),232,0,84) +return new A.t7(B.aq,B.bQ,s,null)}, +$S:410} +A.a9_.prototype={ +$1(a){return B.OJ}, +$S:408} +A.a90.prototype={ +$1(a){return A.aY8()}, +$S:404} +A.a91.prototype={ +$1(a){return B.OE}, +$S:397} +A.a92.prototype={ +$1(a){return B.OF}, +$S:394} +A.a8I.prototype={ +$1(a){var s=A.hb(B.i,40).a +return new A.qG(A.C(B.c.an(76.5),s>>>16&255,s>>>8&255,s&255),null)}, +$S:383} +A.a8J.prototype={ +$1(a){return new A.qH(A.C(255,243,52,71),null)}, +$S:381} +A.a8K.prototype={ +$1(a){return B.C4}, +$S:359} +A.a8L.prototype={ +$1(a){return new A.qJ(A.hb(B.E,60),A.hb(B.E,30),null)}, +$S:357} +A.a8M.prototype={ +$1(a){return B.C5}, +$S:356} +A.a8N.prototype={ +$1(a){return B.C6}, +$S:353} +A.a8O.prototype={ +$1(a){return new A.qM(A.a([B.a5G,B.a5D,B.a5F,B.a5H,B.a5C,B.a5E],t.LN),null)}, +$S:346} +A.a8P.prototype={ +$1(a){var s=A.hb(B.i,40).a +return new A.qN(A.C(B.c.an(76.5),s>>>16&255,s>>>8&255,s&255),null)}, +$S:345} +A.a8Q.prototype={ +$1(a){return B.W0}, +$S:337} +A.a8R.prototype={ +$1(a){return B.W1}, +$S:336} +A.a8T.prototype={ +$1(a){return B.W2}, +$S:332} +A.a8U.prototype={ +$1(a){return new A.u3(A.C(B.c.an(127.5),33,150,243),null)}, +$S:326} +A.a8V.prototype={ +$1(a){return B.Wv}, +$S:313} +A.a8W.prototype={ +$1(a){return new A.tP(A.aK2(B.bP,80),A.aK2(B.bP,80),null)}, +$S:309} +A.Ic.prototype={ +H(a){var s,r,q,p,o=this,n=null,m=o.giN(),l=o.ghG(),k=t.F +if(o.c){s=A.ah6(A.aIv(),120,A.C(204,96,125,139),4) +m=A.hZ(n,n,n,B.br,o.gUD(),B.b4,B.bd,B.bT,A.a([A.ec(n,8,A.fs(!1,n,0,n,!1,B.aN),B.aq,0.35,n,B.aZ,n,!0,!1,!0,!1,B.as,!1,10,B.ay,!0,B.aa,B.R1),A.ec(n,8,A.fs(!1,A.C(0,255,58,242),0,n,!1,B.aN),B.bm,0.35,n,B.aZ,n,!0,!1,!0,!1,B.as,!1,10,B.ay,!0,B.aa,B.pp),A.ec(n,8,A.fs(!1,n,0,n,!1,B.aN),B.E,0.35,n,B.aZ,n,!0,!1,!0,!1,B.as,!1,10,B.ay,!0,B.aa,B.Q0)],k),new A.kn(s,A.aEb(),10,A.zU(),!0,A.Lj(),A.Li(),!0,n,n,n),14,4,0,0,B.b7,B.bs,new A.df(!0,new A.br(16,n,new A.bw(!0,l,40,1),!0),B.J,B.J,new A.br(16,n,new A.bw(!0,m,32,1),!0)))}else{s=o.gUD() +r=B.c.an(127.5) +q=A.C(r,59,255,73) +q=A.ec(n,4,A.fs(!1,n,0,n,!1,B.aN),q,0,n,B.aZ,n,!0,!1,!0,!1,B.as,!1,10,B.ay,!0,B.aa,B.R0) +p=A.C(r,255,58,242) +p=A.ec(n,4,A.fs(!1,A.C(51,255,58,242),0,n,!0,B.aN),p,0.35,n,B.aZ,n,!0,!1,!0,!1,B.as,!1,10,B.ay,!0,B.aa,B.pp) +r=A.C(r,80,228,255) +m=A.hZ(n,n,n,B.br,s,B.b4,B.bd,B.bT,A.a([q,p,A.ec(n,2,A.fs(!1,n,0,n,!1,B.aN),r,0,n,B.oA,n,!0,!1,!0,!1,B.as,!1,10,B.ay,!0,B.aa,B.R9)],k),B.dI,14,6,0,0,B.b7,B.bs,new A.df(!0,new A.br(16,n,new A.bw(!0,l,40,1),!0),B.J,B.J,new A.br(16,n,new A.bw(!0,m,32,1),!0)))}return A.lt(m,B.jX)}, +io(a,b){var s,r=null +switch(B.c.V(a)){case 1:s="1m" +break +case 2:s="2m" +break +case 3:s="3m" +break +case 4:s="5m" +break +case 5:s="6m" +break +default:return A.bP(r,r,B.o,r,r,r,r,r,r,r,r,r,r,r)}return A.bj(s,r,r,B.a1S,B.aH)}, +jF(a,b){var s +switch(B.c.V(a)){case 2:s=B.a3m +break +case 7:s=B.a3E +break +case 12:s=B.a3r +break +default:s=B.a3y +break}return new A.ct(b.w,10,s,0,B.a6,null)}, +gUD(){return A.cK(new A.d2(B.bx,B.bx,new A.b_(A.C(51,80,228,255),4,B.y,-1),B.bx),!0)}} +A.t_.prototype={ +ac(){return new A.PZ(B.j)}} +A.PZ.prototype={ +aB(){this.aR() +this.d=!0}, +H(a){var s,r=null,q=this.d +q===$&&A.b() +s=t.p +q=A.f5(A.a([B.AD,B.a3i,B.AD,A.jj(new A.bH(B.LO,new A.Ic(q,r),r)),B.AB],s),B.dC,B.U,B.a3) +return new A.cA(1.23,A.kA(B.bM,A.a([q,A.Cu(r,A.Ct(B.NO,A.C(B.c.an(255*(this.d?1:0.5)),255,255,255),r,r),new A.agP(this),r,r)],s),B.a9,B.bJ),r)}} +A.agP.prototype={ +$0(){var s=this.a +s.a3(new A.agO(s))}, +$S:0} +A.agO.prototype={ +$0(){var s=this.a,r=s.d +r===$&&A.b() +s.d=!r}, +$S:0} +A.t0.prototype={ +ac(){var s=t.A +return new A.Zv(A.a([],s),A.a([],s),B.j)}} +A.Zv.prototype={ +aB(){this.aR() +this.x=A.aHc(B.og,new A.awF(this))}, +H(a){var s,r,q,p,o,n,m,l,k=this,j=null,i=k.f +if(i.length!==0){s=A.bj("x: "+B.c.af(k.r,1),j,j,B.a_0,j) +r=k.e +q=B.c.af(B.b.gO(r).b,1) +k.a.toString +q=A.bj("sin: "+q,j,j,A.bL(j,j,B.l,j,j,j,j,j,j,j,j,18,j,j,B.x,j,j,!0,j,j,j,j,j,j,j,j),j) +p=B.c.af(B.b.gO(i).b,1) +k.a.toString +p=A.bj("cos: "+p,j,j,A.bL(j,j,B.bm,j,j,j,j,j,j,j,j,18,j,j,B.x,j,j,!0,j,j,j,j,j,j,j,j),j) +o=B.b.gL(r).a +n=B.b.gO(r).a +m=A.cK(j,!1) +k.a.toString +l=t.W +r=A.ec(j,4,j,j,0.35,j,B.aZ,new A.dO(B.aM,B.aV,B.V,A.a([A.C(0,33,150,243),B.l],l),B.ps,j),!1,!1,!1,!1,B.as,!1,10,B.ay,!0,B.aa,r) +k.a.toString +o=A.f5(A.a([B.iv,s,q,p,B.iv,new A.cA(1.5,new A.bH(B.Lr,A.lt(A.hZ(j,j,j,B.br,m,B.Mb,B.bd,B.Mc,A.a([r,A.ec(j,4,j,j,0.35,j,B.aZ,new A.dO(B.aM,B.aV,B.V,A.a([A.C(0,255,58,242),B.bm],l),B.ps,j),!1,!1,!1,!1,B.as,!1,10,B.ay,!0,B.aa,i)],t.F),B.dI,n,1,o,-1,B.b7,B.bs,B.kf),B.aj),j),j)],t.p),B.T,B.cD,B.a3) +i=o}else i=A.bP(j,j,B.o,j,j,j,j,j,j,j,j,j,j,j) +return i}, +m(){var s=this.x +s===$&&A.b() +s.b3(0) +this.aN()}} +A.awF.prototype={ +$1(a){var s,r,q +for(s=this.a,r=s.e,q=s.f;r.length>100;){B.b.fz(r,0) +B.b.fz(q,0)}s.a3(new A.awE(s)) +s.r+=0.05}, +$S:102} +A.awE.prototype={ +$0(){var s=this.a,r=s.r +s.e.push(new A.ad(r,Math.sin(r))) +r=s.r +s.f.push(new A.ad(r,Math.cos(r)))}, +$S:0} +A.t1.prototype={ +ac(){return new A.Zw(B.j)}} +A.Zw.prototype={ +H(a){var s=this,r=null,q=s.e,p=t.p +return new A.cA(1.5,new A.bH(B.Lv,A.f5(A.a([A.jj(A.eQ(A.a([new A.EW(1,A.aH_(10,-10,new A.awI(s),q),r),A.jj(new A.Ha(s.d,20-(q+10)-10,r))],p),B.T,B.U,B.a3)),A.aH_(10,-10,new A.awJ(s),s.d)],p),B.T,B.cD,B.a3),r),r)}} +A.awI.prototype={ +$1(a){var s=this.a +s.a3(new A.awH(s,a))}, +$S:38} +A.awH.prototype={ +$0(){this.a.e=this.b}, +$S:0} +A.awJ.prototype={ +$1(a){var s=this.a +s.a3(new A.awG(s,a))}, +$S:38} +A.awG.prototype={ +$0(){this.a.d=this.b}, +$S:0} +A.Ha.prototype={ +a0_(a,b){var s=null,r=J.aJh(J.aJi(J.aEV(a,this.c)),0.1)?B.m3:B.B3 +return new A.bH(B.jY,A.bj(b.r,s,s,r,s),s)}, +a0q(a,b){var s=null,r=J.aJh(J.aJi(J.aEV(a,this.d)),0.1)?B.m3:B.B3 +return new A.bH(B.jY,A.bj(b.r,s,s,r,s),s)}, +a01(a){if(Math.abs(a-this.d)<=0.1)return B.oF +else return B.ka}, +a0s(a){if(Math.abs(a-this.c)<=0.1)return B.oF +else return B.ka}, +H(a){var s=this,r=null,q=s.ga0p(),p=s.ga_Z() +return A.lt(A.hZ(r,s.c,s.d,B.br,r,B.b4,B.bd,new A.ew(!0,!0,r,s.ga00(),A.eJ(),!0,r,s.ga0r(),A.eJ()),A.a([A.ec(r,2,r,r,0.35,r,B.oA,r,!1,!1,!1,!1,B.as,!1,10,B.ay,!0,B.aa,A.a([],t.A))],t.F),B.pa,10,10,-10,-10,B.b7,B.bs,new A.df(!0,new A.br(16,r,new A.bw(!0,q,36,r),!0),new A.br(16,r,new A.bw(!0,p,32,r),!0),new A.br(16,r,new A.bw(!0,q,36,r),!0),new A.br(16,r,new A.bw(!0,p,32,r),!0))),B.z)}} +A.t2.prototype={ +ac(){return new A.Id(A.a([B.E,B.l],t.W),B.j)}} +A.Id.prototype={ +H(a){var s=this,r=null,q=A.lt(s.e?s.alF():s.asE(),B.aj) +return A.kA(B.bM,A.a([new A.cA(1.7,new A.bH(B.oj,q,r),r),A.eC(A.G6(A.bj("avg",r,r,A.bL(r,r,s.e?A.C(B.c.an(127.5),255,255,255):B.i,r,r,r,r,r,r,r,r,12,r,r,r,r,r,!0,r,r,r,r,r,r,r,r),r),new A.awN(s),r),34,60)],t.p),B.a9,B.bJ)}, +jF(a,b){var s +switch(B.c.V(a)){case 2:s=B.a3h +break +case 5:s=B.a3n +break +case 8:s=B.a3C +break +default:s=B.a3t +break}return new A.ct(b.w,8,s,0,B.a6,null)}, +io(a,b){var s,r=null +switch(B.c.V(a)){case 1:s="10K" +break +case 3:s="30k" +break +case 5:s="50k" +break +default:return A.bP(r,r,B.o,r,r,r,r,r,r,r,r,r,r,r)}return A.bj(s,r,r,B.a1R,B.ci)}, +asE(){var s=null,r=this.d,q=A.S(r).h("R<1,m>") +return A.hZ(s,s,s,B.br,A.cK(A.oo(B.jz,1),!0),B.b4,B.bd,new A.ew(!0,!0,1,new A.awO(),A.eJ(),!0,1,new A.awP(),A.eJ()),A.a([A.ec(s,5,A.fs(!1,s,0,new A.dO(B.aM,B.aV,B.V,A.V(new A.R(r,new A.awQ(),q),!0,q.h("af.E")),s,s),!0,B.aN),s,0.35,s,B.aZ,new A.dO(B.aM,B.aV,B.V,r,s,s),!0,!1,!0,!1,B.as,!1,10,B.ay,!0,B.aa,B.Pe)],t.F),B.pa,11,6,0,0,B.b7,B.bs,new A.df(!0,new A.br(16,s,new A.bw(!0,this.ghG(),42,1),!0),B.J,B.J,new A.br(16,s,new A.bw(!0,this.giN(),30,1),!0)))}, +alF(){var s,r,q,p=null,o=A.cK(A.oo(B.jz,1),!0),n=this.d,m=A.y(n[0],n[1],0.2) +m.toString +s=A.y(n[0],n[1],0.2) +s.toString +r=t.W +s=A.a([m,s],r) +m=A.y(n[0],n[1],0.2) +m.toString +q=B.c.an(25.5) +m=m.a +m=A.C(q,m>>>16&255,m>>>8&255,m&255) +n=A.y(n[0],n[1],0.2).a +return A.hZ(p,p,p,B.br,o,B.b4,B.bd,new A.ew(!0,!0,1,new A.awK(),A.eJ(),!0,1,new A.awL(),A.eJ()),A.a([A.ec(p,5,A.fs(!1,p,0,new A.dO(B.aM,B.aV,B.V,A.a([m,A.C(q,n>>>16&255,n>>>8&255,n&255)],r),p,p),!0,B.aN),p,0.35,p,B.aZ,new A.dO(B.aM,B.aV,B.V,s,p,p),!0,!1,!0,!1,B.as,!1,10,B.ay,!0,B.aa,B.Qb)],t.F),B.dI,11,6,0,0,B.b7,B.bs,new A.df(!0,new A.br(16,p,new A.bw(!0,this.ghG(),42,1),!0),B.J,B.J,new A.br(16,p,new A.bw(!0,this.giN(),30,1),!0)))}} +A.awN.prototype={ +$0(){var s=this.a +s.a3(new A.awM(s))}, +$S:0} +A.awM.prototype={ +$0(){var s=this.a +s.e=!s.e}, +$S:0} +A.awO.prototype={ +$1(a){return B.oC}, +$S:14} +A.awP.prototype={ +$1(a){return B.oC}, +$S:14} +A.awQ.prototype={ +$1(a){return A.C(B.c.an(76.5),a.gl(a)>>>16&255,a.gl(a)>>>8&255,a.gl(a)&255)}, +$S:62} +A.awL.prototype={ +$1(a){return B.oE}, +$S:14} +A.awK.prototype={ +$1(a){return B.oE}, +$S:14} +A.t3.prototype={ +ac(){return new A.Ie(B.j)}} +A.Ie.prototype={ +aB(){this.d=-1 +this.aR()}, +io(a,b){var s,r,q,p=null +if(B.c.bF(a,1)!==0)return A.bP(p,p,B.o,p,p,p,p,p,p,p,p,p,p,p) +s=A.bL(p,p,A.C(B.c.an(127.5),255,255,255),p,p,p,p,p,p,p,p,10,p,p,p,p,p,!0,p,p,p,p,p,p,p,p) +switch(B.c.V(a)){case 0:r="" +break +case 1:r="1k calories" +break +case 2:r="2k calories" +break +case 3:r="3k calories" +break +default:return A.bP(p,p,B.o,p,p,p,p,p,p,p,p,p,p,p)}q=this.f?A.aN4(b,6):B.a6 +return new A.ct(b.w,6,A.bj(r,p,p,s,B.aH),0,q,p)}, +jF(a,b){var s,r,q=this,p=null,o=q.d +o===$&&A.b() +s=q.a +r=A.bL(p,p,a===o?s.x:s.w,p,p,p,p,p,p,p,p,p,p,p,B.x,p,p,!0,p,p,p,p,p,p,p,p) +if(B.c.bF(a,1)!==0)return A.bP(p,p,B.o,p,p,p,p,p,p,p,p,p,p,p) +o=q.e?A.aN4(b,0):B.a6 +q.a.toString +return new A.ct(b.w,4,A.bj(B.pu[B.c.V(a)],p,p,r,p),0,o,p)}, +H(a){var s,r,q,p,o,n,m,l,k=this,j=null,i=k.a.y.a +i=A.bj("Average Line",j,j,A.bL(j,j,A.C(255,i>>>16&255,i>>>8&255,i&255),j,j,j,j,j,j,j,j,16,j,j,B.x,j,j,!0,j,j,j,j,j,j,j,j),j) +s=k.a.d.a +r=t.p +s=A.eQ(A.a([i,B.a3D,A.bj("Indicators",j,j,A.bL(j,j,A.C(255,s>>>16&255,s>>>8&255,s&255),j,j,j,j,j,j,j,j,16,j,j,B.x,j,j,!0,j,j,j,j,j,j,j,j),j)],r),B.T,B.U,B.bf) +i=A.ah6(new A.awZ(k),120,k.a.z,4) +q=A.a([A.Cr(k.a.y,A.a([20,10],t.t),j,j,j,B.aG,3,1.8)],t.rx) +k.a.toString +p=new A.cw(B.Qd,t.SH) +p=p.gd5(p).eQ(0,new A.ax_(),t.fw).dI(0) +o=k.a.c +n=o.a +m=n>>>16&255 +l=n>>>8&255 +n&=255 +p=A.a([A.ec(j,4,A.fs(!1,j,0,new A.dO(B.bw,B.bv,B.V,A.a([A.C(B.c.an(127.5),m,l,n),A.C(0,m,l,n)],t.W),B.R3,j),!0,new A.vn(!0,A.mO(k.a.d,j,j,2),new A.ax0(),!0)),o,0.35,j,new A.iF(!0,new A.ax3(),new A.ax4(k)),j,!1,!0,!1,!1,B.as,!1,10,B.ay,!0,B.aa,p)],t.F) +return A.f5(A.a([B.AB,s,B.iw,new A.cA(2,new A.bH(B.LA,A.lt(A.hZ(j,j,j,B.br,A.cK(A.oo(B.ee,1),!0),B.b4,new A.oE(q,B.kF,!0),new A.ew(!0,!0,j,new A.ax5(),new A.ax6(),!0,j,new A.ax7(),new A.ax8()),p,new A.kn(i,new A.ax9(k),10,A.zU(),!0,A.Lj(),A.Li(),!0,new A.axa(k),j,j),j,j,j,0,B.b7,B.bs,new A.df(!0,new A.br(16,j,new A.bw(!0,k.ghG(),46,j),!0),B.J,B.J,new A.br(16,j,new A.bw(!0,k.giN(),40,j),!0))),B.aj),j),j),A.f5(A.a([B.a3F,B.KY,A.eQ(A.a([B.a3k,A.aNp(new A.ax1(k),k.f),B.a3l,A.aNp(new A.ax2(k),k.e)],r),B.T,B.cD,B.a3)],r),B.T,B.U,B.a3)],r),B.T,B.U,B.bf)}} +A.ax9.prototype={ +$2(a,b){var s=J.hI(b,new A.awX(this.a,a),t.Si) +return A.V(s,!0,A.o(s).h("af.E"))}, +$S:302} +A.awX.prototype={ +$1(a){var s=this.b.a[a].a +if(s===0||s===6)return null +s=this.a +return new A.fG(A.mO(s.a.e,null,null,4),new A.iF(!0,A.v5(),new A.awR(s)))}, +$S:295} +A.awR.prototype={ +$4(a,b,c,d){var s=this.a.a +if((d&1)===0){s=s.r +return new A.iE(B.i,8,s,5)}else return new A.BZ(B.i,16,s.r,5)}, +$C:"$4", +$R:4, +$S:114} +A.awZ.prototype={ +$1(a){var s=J.hI(a,new A.awY(this.a),t.mh) +return A.V(s,!0,A.o(s).h("af.E"))}, +$S:294} +A.awY.prototype={ +$1(a){var s,r,q,p,o=null,n=a.a +if(n===0||n===6)return o +n=B.c.V(n) +switch(n){case 1:s=B.ci +break +case 5:s=B.dZ +break +default:s=B.aH}r=this.a +q=r.a +n=B.pu[n] +q=A.bL(o,o,q.Q,o,o,o,o,o,o,o,o,o,o,o,B.x,o,o,!0,o,o,o,o,o,o,o,o) +p=B.c.k(a.b) +return new A.fA(n+" \n",q,s,A.a([A.c0(o,o,A.bL(o,o,r.a.Q,o,o,o,o,o,o,o,o,o,o,o,B.ev,o,o,!0,o,o,o,o,o,o,o,o),p),B.ZK,B.ZJ],t.Ne))}, +$S:279} +A.axa.prototype={ +$2(a,b){var s,r +if(!a.gja()||b==null||b.a==null){s=this.a +s.a3(new A.awU(s)) +return}r=b.a[0].a +if(r===0||r===6){s=this.a +s.a3(new A.awV(s)) +return}s=this.a +s.a3(new A.awW(s,r))}, +$S:116} +A.awU.prototype={ +$0(){this.a.d=-1}, +$S:0} +A.awV.prototype={ +$0(){this.a.d=-1}, +$S:0} +A.awW.prototype={ +$0(){this.a.d=this.b}, +$S:0} +A.ax_.prototype={ +$1(a){return new A.ad(a.a,a.b)}, +$S:277} +A.ax0.prototype={ +$1(a){var s=a.a +if(s===0||s===6)return!1 +return!0}, +$S:91} +A.ax4.prototype={ +$4(a,b,c,d){var s=this.a.a +if((d&1)===0){s=s.f +return new A.iE(B.i,6,s,3)}else return new A.BZ(B.i,12,s.f,3)}, +$C:"$4", +$R:4, +$S:114} +A.ax3.prototype={ +$2(a,b){var s=a.a +return s!==0&&s!==6}, +$S:150} +A.ax6.prototype={ +$1(a){return B.c.bF(a,1)===0}, +$S:9} +A.ax8.prototype={ +$1(a){return B.c.bF(a,1)===0}, +$S:9} +A.ax5.prototype={ +$1(a){if(a===0)return B.Mg +else return B.oB}, +$S:14} +A.ax7.prototype={ +$1(a){if(a===0)return B.Me +else return B.oB}, +$S:14} +A.ax1.prototype={ +$1(a){var s=this.a +return s.a3(new A.awT(s,a))}, +$S:8} +A.awT.prototype={ +$0(){this.a.f=this.b}, +$S:0} +A.ax2.prototype={ +$1(a){var s=this.a +return s.a3(new A.awS(s,a))}, +$S:8} +A.awS.prototype={ +$0(){this.a.e=this.b}, +$S:0} +A.t4.prototype={ +jF(a,b){var s,r=null +switch(B.c.V(a)){case 0:s="Jan" +break +case 1:s="Feb" +break +case 2:s="Mar" +break +case 3:s="Apr" +break +case 4:s="May" +break +case 5:s="Jun" +break +case 6:s="Jul" +break +case 7:s="Aug" +break +case 8:s="Sep" +break +case 9:s="Oct" +break +case 10:s="Nov" +break +case 11:s="Dec" +break +default:return A.bP(r,r,B.o,r,r,r,r,r,r,r,r,r,r,r)}return new A.ct(b.w,4,A.bj(s,r,r,A.bL(r,r,this.c,r,r,r,r,r,r,r,r,10,r,r,B.x,r,r,!0,r,r,r,r,r,r,r,r),r),0,B.a6,r)}, +io(a,b){var s=null +return new A.ct(b.w,8,A.bj("$ "+A.h(a+0.5),s,s,B.a2z,s),0,B.a6,s)}, +H(a){var s=this,r=null,q=s.c,p=A.fs(!0,s.d,5,r,!0,B.aN) +p=A.a([A.ec(A.fs(!0,s.e,5,r,!0,B.aN),8,p,q,0.35,r,B.aZ,r,!0,!1,!1,!1,B.as,!1,10,B.ay,!0,B.aa,B.pc)],t.F) +q=A.bj("2019",r,r,A.bL(r,r,q,r,r,r,r,r,r,r,r,10,r,r,B.x,r,r,!0,r,r,r,r,r,r,r,r),r) +return new A.cA(2,new A.bH(B.LD,A.lt(A.hZ(r,r,r,B.br,A.cK(A.oo(B.ee,1),!0),B.b4,B.bd,new A.ew(!0,!0,1,A.h6(),new A.agQ(),!1,r,A.h6(),A.eJ()),p,B.dI,r,r,r,0,B.b7,B.bs,new A.df(!0,new A.br(20,B.a3g,new A.bw(!0,s.ghG(),40,1),!0),B.J,B.J,new A.br(16,q,new A.bw(!0,s.giN(),18,1),!0))),B.aj),r),r)}} +A.agQ.prototype={ +$1(a){return a===1||a===6||a===4||a===5}, +$S:9} +A.t5.prototype={ +ac(){return new A.Zx(A.a([1,3,5],t.t),B.j)}} +A.Zx.prototype={ +Hq(a,b,c){var s,r=null,q=A.bL(r,r,B.bm,r,r,r,r,r,"Digital",r,r,18*c/500,r,r,B.x,r,r,!0,r,r,r,r,r,r,r,r) +switch(B.c.V(a)){case 0:s="00:00" +break +case 1:s="04:00" +break +case 2:s="08:00" +break +case 3:s="12:00" +break +case 4:s="16:00" +break +case 5:s="20:00" +break +case 6:s="23:59" +break +default:return A.bP(r,r,B.o,r,r,r,r,r,r,r,r,r,r,r)}return new A.ct(b.w,8,A.bj(s,r,r,q,r),0,B.a6,r)}, +H(a){var s,r,q,p=this,o=null +p.a.toString +s=t.W +r=A.fs(!1,o,0,new A.dO(B.aM,B.aV,B.V,A.a([A.C(102,33,150,243),A.C(102,255,58,242),A.C(102,232,0,84)],s),o,o),!0,B.aN) +p.a.toString +q=A.a([A.ec(o,4,r,o,0.35,o,B.aZ,new A.dO(B.aM,B.aV,B.V,A.a([B.l,B.bm,B.bQ],s),B.Px,o),!0,!1,!1,!1,B.as,!1,10,B.Xo,!0,p.d,B.QS)],t.F) +return new A.cA(2.5,new A.bH(B.LK,new A.n0(new A.axl(p,q[0],q),o),o),o)}} +A.axl.prototype={ +$2(a,b){var s=null,r=this.a,q=r.d,p=this.c,o=A.S(q).h("R<1,lS>") +o=A.V(new A.R(q,new A.axf(this.b,p),o),!0,o.h("af.E")) +q=A.ah6(new A.axg(),120,B.l2,8) +return A.lt(A.hZ(s,s,s,B.br,A.cK(A.oo(B.ee,1),!0),B.b4,B.bd,B.bT,p,new A.kn(q,new A.axh(r),10,A.zU(),!1,A.Lj(),A.Li(),!0,new A.axi(r),new A.axj(),s),s,s,s,0,B.b7,o,new A.df(!0,B.BX,B.BZ,B.BY,new A.br(16,s,new A.bw(!0,new A.axk(r,b),30,1),!0))),B.aj)}, +$S:151} +A.axf.prototype={ +$1(a){var s=this.a +return new A.lS(A.a([A.aY5(s,B.b.cS(this.b,s),s.a[a])],t.V3))}, +$S:275} +A.axi.prototype={ +$2(a,b){var s,r +if(b==null||b.a==null)return +if(a instanceof A.rw){s=b.a +s.toString +r=this.a +r.a3(new A.axc(r,B.b.gL(s).e))}}, +$S:116} +A.axc.prototype={ +$0(){var s=this.a.d,r=this.b +if(B.b.p(s,r))B.b.C(s,r) +else s.push(r)}, +$S:0} +A.axj.prototype={ +$2(a,b){if(b==null||b.a==null)return B.bK +return B.c0}, +$S:269} +A.axh.prototype={ +$2(a,b){var s=J.hI(b,new A.axd(this.a),t.Cx) +return A.V(s,!0,A.o(s).h("af.E"))}, +$S:131} +A.axd.prototype={ +$1(a){return new A.fG(B.Mh,new A.iF(!0,A.v5(),new A.axb(this.a)))}, +$S:115} +A.axb.prototype={ +$4(a,b,c,d){var s=c.w,r=s.a +s=s.b +s.toString +s=A.b6Q(r,s,b/100) +this.a.a.toString +return new A.iE(s,8,B.i,2)}, +$C:"$4", +$R:4, +$S:77} +A.axg.prototype={ +$1(a){var s=J.hI(a,new A.axe(),t.iK) +return A.V(s,!0,A.o(s).h("af.E"))}, +$S:100} +A.axe.prototype={ +$1(a){return new A.fA(B.c.k(a.b),B.a0_,B.aH,null)}, +$S:113} +A.axk.prototype={ +$2(a,b){return this.a.Hq(a,b,this.b.b)}, +$S:4} +A.aEa.prototype={ +$2(a,b){var s=this.b.length +B.b.D(this.a.a,1/(s-1)*a)}, +$S:143} +A.t6.prototype={ +a6h(a,b,c,d,e){var s,r,q,p,o=this +o.x=B.b.gL(B.dJ).a +o.y=B.b.gL(B.dJ).a +o.z=B.b.gL(B.dJ).b +s=B.b.gL(B.dJ).b +o.Q=s +for(r=0;r<4;++r){q=B.dJ[r] +p=q.a +if(p>o.y)o.y=p +if(ps){o.Q=p +s=p}if(p") +return A.V(new A.R(a,new A.agU(c,b),s),!0,s.h("af.E"))}} +A.agR.prototype={ +$4(a,b,c,d){return new A.iE(B.n,12,B.M,1)}, +$C:"$4", +$R:4, +$S:77} +A.agS.prototype={ +$4(a,b,c,d){return new A.iE(B.n,12,B.M,1)}, +$C:"$4", +$R:4, +$S:77} +A.agT.prototype={ +$1(a){var s=this.a,r=s.z +r===$&&A.b() +s=s.Q +s===$&&A.b() +r=s+r +if(B.c.V(r-a)===B.c.V(r))return!1 +return!0}, +$S:9} +A.agU.prototype={ +$1(a){return a.Vl(this.a+this.b-a.b)}, +$S:249} +A.t7.prototype={ +jF(a,b){var s,r=null +switch(B.c.V(a)){case 0:s="Jan" +break +case 1:s="Feb" +break +case 2:s="Mar" +break +case 3:s="Apr" +break +case 4:s="May" +break +case 5:s="Jun" +break +case 6:s="Jul" +break +case 7:s="Aug" +break +case 8:s="Sep" +break +case 9:s="Oct" +break +case 10:s="Nov" +break +case 11:s="Dec" +break +default:return A.bP(r,r,B.o,r,r,r,r,r,r,r,r,r,r,r)}return new A.ct(b.w,4,A.bj(s,r,r,B.a1Q,r),0,B.a6,r)}, +io(a,b){var s=null +return new A.ct(b.w,8,A.bj("$ "+A.h(a+0.5),s,s,B.iB,s),0,B.a6,s)}, +H(a){var s=this,r=null,q=A.a([A.ec(r,2,r,s.c,0.35,r,B.aZ,r,!0,!1,!1,!1,B.as,!1,10,B.ay,!0,B.aa,B.pc),A.ec(r,2,r,s.d,0.35,r,B.aZ,r,!1,!1,!1,!1,B.as,!1,10,B.ay,!0,B.aa,B.PO)],t.F) +return new A.cA(2,new A.bH(B.Ly,A.lt(A.hZ(r,r,r,A.a([A.aJK(s.e,0,r,1)],t.MS),A.cK(r,!1),B.b4,B.bd,new A.ew(!0,!0,1,A.h6(),new A.agV(),!1,r,A.h6(),A.eJ()),q,B.dI,r,r,r,0,B.b7,B.bs,new A.df(!0,new A.br(16,r,new A.bw(!0,s.ghG(),36,1),!0),B.J,B.J,new A.br(16,r,new A.bw(!0,s.giN(),22,1),!0))),B.aj),r),r)}} +A.agV.prototype={ +$1(a){return a===1||a===6||a===4||a===5}, +$S:9} +A.t8.prototype={ +ac(){return new A.If(B.j)}} +A.If.prototype={ +Bq(){var s=0,r=A.a1(t.yx),q,p +var $async$Bq=A.a2(function(a,b){if(a===1)return A.Z(b,r) +while(true)switch(s){case 0:p=A +s=3 +return A.a7(B.Ej.Js(B.Z4,null),$async$Bq) +case 3:q=new p.pI(b.a,14,14) +s=1 +break +case 1:return A.a_(q,r)}}) +return A.a0($async$Bq,r)}, +H(a){return new A.wj(this.Bq(),new A.axm(this),null,t.xu)}, +jF(a,b){var s=null +return new A.ct(b.w,8,A.bj(b.r,s,s,B.fu,s),0,B.a6,s)}, +io(a,b){var s,r +switch(B.c.V(a)){case 0:s=B.NR +r=B.aQ +break +case 2:s=B.NT +r=B.bQ +break +case 4:s=B.NQ +r=B.aq +break +case 6:s=B.NS +r=B.cc +break +default:throw A.c(A.Q("Invalid"))}return new A.ct(b.w,8,A.Ct(s,r,null,32),0,B.a6,null)}, +asF(a){var s=null,r=A.a([A.aHj(A.C(51,33,150,243),s,2,5),A.aHj(A.C(51,33,150,243),s,8,9)],t.zO),q=A.a([A.aLf(A.C(B.c.an(76.5),59,255,73),s,2,3)],t.i1),p=t.t,o=A.a([A.Cr(B.aq,A.a([5,10],p),s,A.aG3(B.j3,new A.axp(),B.Lt,!0,B.B8),s,B.aG,2,5)],t.rx),n=A.a([A.arZ(B.l,A.a([5,10],p),s,A.aHi(B.j3,new A.axq(),B.Lz,!0,B.B8),s,B.aG,2,5.7),A.arZ(B.n,s,s,s,a,B.aG,s,8.5),A.arZ(B.n,s,s,s,a,B.aG,s,3.5)],t.uM) +return A.hZ(s,s,s,B.br,A.cK(A.oo(B.ee,1),!0),B.b4,new A.oE(o,n,!0),B.Md,A.a([A.ec(s,4,s,B.bQ,0.35,A.a([10,6],p),B.aZ,s,!0,!1,!0,!1,B.as,!1,10,B.ay,!0,B.aa,B.QK)],t.F),new A.kn(B.OK,new A.axr(),10,A.zU(),!0,A.Lj(),new A.axs(),!0,s,s,s),11,6,0,0,new A.xo(q,r),B.bs,new A.df(!0,new A.br(16,s,new A.bw(!0,this.ghG(),40,2),!0),B.J,B.J,new A.br(16,s,new A.bw(!0,this.giN(),30,4),!0)))}} +A.axm.prototype={ +$2(a,b){var s +if(b.a===B.h1){s=b.b +s.toString +return A.kA(B.bM,A.a([new A.cA(1.7,new A.bH(B.oj,A.lt(this.a.asF(s),B.aj),null),null)],t.p),B.a9,B.bJ)}else return B.EF}, +$S:244} +A.axp.prototype={ +$1(a){return"H: "+A.h(a.e)}, +$S:154} +A.axq.prototype={ +$1(a){return"V: "+A.h(a.e)}, +$S:242} +A.axs.prototype={ +$2(a,b){return 1/0}, +$S:79} +A.axr.prototype={ +$2(a,b){var s=J.hI(b,new A.axo(),t.Cx) +return A.V(s,!0,A.o(s).h("af.E"))}, +$S:131} +A.axo.prototype={ +$1(a){return new A.fG(B.Mf,new A.iF(!0,A.v5(),new A.axn()))}, +$S:115} +A.axn.prototype={ +$4(a,b,c,d){return new A.iE(B.cc,8,B.nz,1)}, +$C:"$4", +$R:4, +$S:77} +A.wH.prototype={ +Hq(a,b,c){var s=null +if(B.c.bF(a,1)!==0)return A.bP(s,s,B.o,s,s,s,s,s,s,s,s,s,s,s) +return new A.ct(b.w,16,A.bj(b.r,s,s,A.bL(s,s,B.l,s,s,s,s,s,s,s,s,Math.min(18,18*c/300),s,s,B.x,s,s,!0,s,s,s,s,s,s,s,s),s),0,B.a6,s)}, +H(a){return new A.bH(B.LC,new A.cA(1,new A.n0(new A.ah4(this),null),null),null)}} +A.ah5.prototype={ +$1(a){return new A.ad(a,Math.cos(a))}, +$S:246} +A.ah4.prototype={ +$2(a,b){var s=null,r=A.ah6(new A.agX(),100,B.k,4),q=this.a,p=A.a([A.ec(s,3,A.fs(!1,s,0,s,!1,B.aN),B.bm,0.35,s,B.aZ,s,!0,!1,!0,!1,B.as,!1,10,B.ay,!0,B.aa,q.c)],t.F) +return A.lt(A.hZ(s,s,s,B.br,A.cK(s,!1),B.b4,B.bd,new A.ew(!0,!0,1.5,new A.agY(),new A.agZ(),!0,5,new A.ah_(),new A.ah0()),p,new A.kn(r,A.aEb(),10,A.zU(),!0,new A.ah1(),A.Li(),!0,s,s,s),s,1.5,s,-1.5,B.b7,B.bs,new A.df(!0,new A.br(16,s,new A.bw(!0,new A.ah2(q,b),56,s),!0),B.J,B.J,new A.br(16,s,new A.bw(!0,new A.ah3(q,b),36,1),!0))),B.aj)}, +$S:151} +A.agX.prototype={ +$1(a){var s=J.hI(a,new A.agW(),t.iK) +return A.V(s,!0,A.o(s).h("af.E"))}, +$S:100} +A.agW.prototype={ +$1(a){var s,r=null,q=a.c,p=q.w +p=p==null?r:p.a[0] +s=A.bL(r,r,p==null?q.r:p,r,r,r,r,r,r,r,r,14,r,r,B.x,r,r,!0,r,r,r,r,r,r,r,r) +return new A.fA(A.h(a.a)+", "+B.c.af(a.b,2),s,B.aH,r)}, +$S:113} +A.ah1.prototype={ +$2(a,b){return 0}, +$S:79} +A.ah2.prototype={ +$2(a,b){var s=null +return new A.ct(b.w,16,A.bj(b.r,s,s,A.bL(s,s,B.aQ,s,s,s,s,s,s,s,s,Math.min(18,18*this.b.b/300),s,s,B.x,s,s,!0,s,s,s,s,s,s,s,s),s),0,B.a6,s)}, +$S:4} +A.ah3.prototype={ +$2(a,b){return this.a.Hq(a,b,this.b.b)}, +$S:4} +A.agZ.prototype={ +$1(a){return B.c.V(a)===0}, +$S:9} +A.agY.prototype={ +$1(a){return A.mO(A.C(255,33,150,243),A.a([8,2],t.t),null,0.8)}, +$S:14} +A.ah_.prototype={ +$1(a){return A.mO(A.C(255,255,195,0),A.a([8,2],t.t),null,0.8)}, +$S:14} +A.ah0.prototype={ +$1(a){return B.c.V(a)===0}, +$S:9} +A.xa.prototype={ +ac(){return new A.Ry(B.j)}} +A.Ry.prototype={ +H(a){var s,r,q,p,o,n,m=null,l=this.d,k=l===0,j=k?18:16 +k=k?B.i:B.cR +s=l===1 +r=s?18:16 +s=s?B.i:B.cR +q=l===2 +p=q?18:16 +q=q?B.i:B.cR +l=l===3 +o=l?18:16 +l=l?B.i:B.cR +n=t.p +l=A.eQ(A.a([new A.kj(B.l,"One",!1,j,k,m),new A.kj(B.aQ,"Two",!1,r,s,m),new A.kj(B.bm,"Three",!1,p,q,m),new A.kj(B.aq,"Four",!1,o,l,m)],n),B.T,B.vn,B.a3) +o=A.aGE(new A.ajw(this)) +return new A.cA(1.3,A.f5(A.a([B.Y7,l,B.iw,A.jj(new A.cA(1,A.aGC(A.ajm(A.cK(m,!1),m,0,o,this.tg(),1,180)),m))],n),B.T,B.U,B.a3),m)}, +tg(){return A.D_(4,new A.ajx(this),t.Ka)}} +A.ajw.prototype={ +$2(a,b){var s=this.a +s.a3(new A.ajv(s,a,b))}, +$S:99} +A.ajv.prototype={ +$0(){var s=this +if(!s.b.gja()||s.c==null||!1){s.a.d=-1 +return}s.a.d=s.c.a.b}, +$S:0} +A.ajx.prototype={ +$1(a){var s=null,r=a===this.a.d +switch(a){case 0:return A.jt(s,s,r?B.fM:new A.b_(A.C(0,255,255,255),1,B.y,-1),B.l,80,s,"",0.55,s,25) +case 1:return A.jt(s,s,r?B.fM:new A.b_(A.C(0,255,255,255),1,B.y,-1),B.aQ,65,s,"",0.55,s,25) +case 2:return A.jt(s,s,r?B.fM:new A.b_(A.C(0,255,255,255),1,B.y,-1),B.bm,60,s,"",0.6,s,25) +case 3:return A.jt(s,s,r?B.fM:new A.b_(A.C(0,255,255,255),1,B.y,-1),B.aq,70,s,"",0.55,s,25) +default:throw A.c(new A.bX())}}, +$S:97} +A.xb.prototype={ +ac(){return new A.Rv(B.j)}} +A.Rv.prototype={ +H(a){var s=null,r=A.aGE(new A.ajk(this)) +return new A.cA(1.3,A.eQ(A.a([B.iw,A.jj(new A.cA(1,A.aGC(A.ajm(A.cK(s,!1),s,40,r,this.tg(),0,s)),s)),B.Kn,B.Y1],t.p),B.T,B.U,B.a3),s)}, +tg(){return A.D_(4,new A.ajl(this),t.Ka)}} +A.ajk.prototype={ +$2(a,b){var s=this.a +s.a3(new A.ajj(s,a,b))}, +$S:99} +A.ajj.prototype={ +$0(){var s=this +if(!s.b.gja()||s.c==null||!1){s.a.d=-1 +return}s.a.d=s.c.a.b}, +$S:0} +A.ajl.prototype={ +$1(a){var s=null,r=a===this.a.d,q=r?25:16,p=r?60:50 +switch(a){case 0:return A.jt(s,s,s,B.l,p,s,"40%",s,A.bL(s,s,B.i,s,s,s,s,s,s,s,s,q,s,s,B.x,s,s,!0,s,s,s,s,s,B.cB,s,s),40) +case 1:return A.jt(s,s,s,B.aQ,p,s,"30%",s,A.bL(s,s,B.i,s,s,s,s,s,s,s,s,q,s,s,B.x,s,s,!0,s,s,s,s,s,B.cB,s,s),30) +case 2:return A.jt(s,s,s,B.bP,p,s,"15%",s,A.bL(s,s,B.i,s,s,s,s,s,s,s,s,q,s,s,B.x,s,s,!0,s,s,s,s,s,B.cB,s,s),15) +case 3:return A.jt(s,s,s,B.aq,p,s,"15%",s,A.bL(s,s,B.i,s,s,s,s,s,s,s,s,q,s,s,B.x,s,s,!0,s,s,s,s,s,B.cB,s,s),15) +default:throw A.c(new A.bX())}}, +$S:97} +A.xc.prototype={ +ac(){return new A.Rz(B.j)}} +A.Rz.prototype={ +H(a){var s=null,r=A.aGE(new A.ajz(this)) +return new A.cA(1.3,new A.cA(1,A.aGC(A.ajm(A.cK(s,!1),s,0,r,this.tg(),0,s)),s),s)}, +tg(){return A.D_(4,new A.ajA(this),t.Ka)}} +A.ajz.prototype={ +$2(a,b){var s=this.a +s.a3(new A.ajy(s,a,b))}, +$S:99} +A.ajy.prototype={ +$0(){var s=this +if(!s.b.gja()||s.c==null||!1){s.a.d=-1 +return}s.a.d=s.c.a.b}, +$S:0} +A.ajA.prototype={ +$1(a){var s=null,r=a===this.a.d,q=r?20:16,p=r?110:100,o=r?55:40 +switch(a){case 0:return A.jt(0.98,new A.uF("assets/icons/ophthalmology-svgrepo-com.svg",o,B.k,s),s,B.l,p,s,"40%",s,A.bL(s,s,B.i,s,s,s,s,s,s,s,s,q,s,s,B.x,s,s,!0,s,s,s,s,s,B.cB,s,s),40) +case 1:return A.jt(0.98,new A.uF("assets/icons/librarian-svgrepo-com.svg",o,B.k,s),s,B.aQ,p,s,"30%",s,A.bL(s,s,B.i,s,s,s,s,s,s,s,s,q,s,s,B.x,s,s,!0,s,s,s,s,s,B.cB,s,s),30) +case 2:return A.jt(0.98,new A.uF("assets/icons/fitness-svgrepo-com.svg",o,B.k,s),s,B.bP,p,s,"16%",s,A.bL(s,s,B.i,s,s,s,s,s,s,s,s,q,s,s,B.x,s,s,!0,s,s,s,s,s,B.cB,s,s),16) +case 3:return A.jt(0.98,new A.uF("assets/icons/worker-svgrepo-com.svg",o,B.k,s),s,B.aq,p,s,"15%",s,A.bL(s,s,B.i,s,s,s,s,s,s,s,s,q,s,s,B.x,s,s,!0,s,s,s,s,s,B.cB,s,s),15) +default:throw A.c(A.cj("Oh no"))}}, +$S:97} +A.uF.prototype={ +H(a){var s=null,r=this.d,q=A.oo(this.e,2),p=A.a([new A.ep(0,B.cn,A.C(B.c.an(127.5),0,0,0),B.UK,3)],t.sq),o=r*0.15 +return A.aFc(A.jh(A.aH4(this.c,s,s,s),s,s),B.ae,new A.d3(B.i,s,q,s,p,s,B.dw),B.aj,r,s,new A.aG(o,o,o,o),r)}} +A.tP.prototype={ +ac(){return new A.a0m(B.j)}} +A.a0m.prototype={ +H(a){var s,r,q,p,o=this,n=null,m=t.p,l=A.eQ(A.a([B.a3w,A.aH_(360,0,new A.ayX(o),o.e)],m),B.T,B.U,B.a3),k=A.eQ(A.a([new A.AT(o.f,new A.ayY(o),n),B.a3B],m),B.T,B.U,B.a3),j=A.hn(n,A.bj("Categories".toUpperCase(),n,n,B.a_Z,n),B.af,!1,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,new A.ayZ(o),n,n,n),i=o.YU() +i=new A.cw(i,A.S(i).h("cw<1>")) +i=i.oS(i,new A.az_(o),t.S,t.tL) +i=i.gaT(i) +i=A.f5(A.V(i,!0,A.o(i).h("n.E")),B.cT,B.U,B.a3) +s=A.aZE(new A.az0(o)) +r=o.a1q() +q=A.cK(n,!1) +p=A.bL(n,n,o.a.d,n,n,n,n,n,n,n,n,14,n,n,n,n,n,!0,n,n,n,n,n,n,n,n) +return new A.bH(B.er,A.f5(A.a([B.a3e,l,k,j,B.fp,i,new A.cA(1.3,new A.Ed(A.aMC(q,r,new A.az1(o),new A.b_(o.a.c,2,B.y,-1),B.n,B.bx,n,s,B.bx,1,B.a1k,0.2,p),B.ae,B.ep,n,n),n)],m),B.cT,B.cD,B.a3),n)}, +a1q(){var s=this.YU() +s=new A.cw(s,A.S(s).h("cw<1>")) +return s.gd5(s).eQ(0,new A.az3(this),t.Gc).dI(0)}, +YU(){var s,r,q,p,o,n=this +n.a.toString +s=t.n +r=A.a([300,50,250],s) +n.a.toString +q=A.a([250,100,200],s) +n.a.toString +p=A.a([200,150,50],s) +n.a.toString +o=A.a([150,200,150],s) +n.a.toString +return A.a([new A.jv("Fashion",B.bQ,r),new A.jv("Art & Tech",B.E,q),new A.jv("Entertainment",B.i,p),new A.jv("Off-road Vehicle",B.aQ,o),new A.jv("Boxing",B.aq,A.a([100,250,100],s))],t.kb)}} +A.ayX.prototype={ +$1(a){var s=this.a +return s.a3(new A.ayW(s,a))}, +$S:38} +A.ayW.prototype={ +$0(){return this.a.e=this.b}, +$S:0} +A.ayY.prototype={ +$1(a){var s=this.a +return s.a3(new A.ayV(s,a))}, +$S:241} +A.ayV.prototype={ +$0(){var s=this.b +s.toString +return this.a.f=s}, +$S:0} +A.ayZ.prototype={ +$0(){var s=this.a +s.a3(new A.ayU(s))}, +$S:0} +A.ayU.prototype={ +$0(){this.a.d=-1}, +$S:0} +A.az_.prototype={ +$2(a,b){var s=null,r=this.a,q=a===r.d,p=q?B.fY:B.n,o=A.aFi(46),n=q?8:6,m=b.b +n=A.aFc(s,B.jI,new A.d3(m,s,s,s,s,s,B.dw),B.ep,s,s,new A.aG(n,n,n,n),s) +m=A.bL(s,s,q?m:r.a.c,s,s,s,s,s,s,s,s,s,s,s,s,s,s,!0,s,s,s,s,s,s,s,s) +return new A.aH(a,A.hn(s,A.aFc(A.eQ(A.a([n,B.Y5,A.aJx(A.bj(b.a,s,s,s,s),B.jI,B.bS,m)],t.p),B.T,B.U,B.bf),B.ae,new A.d3(p,s,s,o,s,s,B.aO),B.bS,26,B.Lw,B.LP,s),B.af,!1,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,new A.ayT(r,a),s,s,s),t.tK)}, +$S:250} +A.ayT.prototype={ +$0(){var s=this.a +s.a3(new A.ayQ(s,this.b))}, +$S:0} +A.ayQ.prototype={ +$0(){this.a.d=this.b}, +$S:0} +A.az0.prototype={ +$2(a,b){var s +if(!a.gja()){s=this.a +s.a3(new A.ayR(s)) +return}s=this.a +s.a3(new A.ayS(s,b))}, +$S:251} +A.ayR.prototype={ +$0(){this.a.d=-1}, +$S:0} +A.ayS.prototype={ +$0(){var s=this.b +if(s==null)s=null +else{s=s.a +s=s==null?null:s.d}if(s==null)s=-1 +this.a.d=s}, +$S:0} +A.az1.prototype={ +$2(a,b){var s=this.a,r=s.f,q=s.e +if(r)q=b+q +switch(a){case 0:return new A.pt("Mobile or Tablet",q) +case 2:return new A.pt("Desktop",q) +case 1:return new A.pt("TV",q) +default:return B.Wb}}, +$S:252} +A.az3.prototype={ +$1(a){var s,r,q,p,o,n=a.b,m=this.a.d +if(a.a===m)s=!0 +else s=m===-1&&!0 +m=n.b +r=m.a +q=s?A.C(51,r>>>16&255,r>>>8&255,r&255):A.C(13,r>>>16&255,r>>>8&255,r&255) +m=s?m:A.C(64,r>>>16&255,r>>>8&255,r&255) +r=s?3:2 +p=n.c +o=A.S(p).h("R<1,fW>") +o=A.V(new A.R(p,new A.az2(),o),!0,o.h("af.E")) +return A.aMD(m,s?2.3:2,o,r,q)}, +$S:253} +A.az2.prototype={ +$1(a){return new A.fW(a)}, +$S:254} +A.jv.prototype={} +A.u3.prototype={ +ac(){return new A.T8(B.j)}} +A.T8.prototype={ +H(g0){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,b0,b1,b2,b3,b4,b5,b6,b7,b8,b9,c0,c1,c2,c3,c4,c5,c6,c7,c8,c9,d0,d1,d2,d3,d4,d5,d6,d7,d8,d9,e0,e1,e2,e3,e4,e5,e6,e7,e8,e9,f0,f1,f2,f3,f4,f5,f6,f7,f8=this,f9=null +if(f8.r){s=A.aE(20,14.5,f8.a.c,8,f9) +r=A.aE(22,16.5,f8.a.c,8,f9) +q=A.aE(24,18.5,f8.a.c,8,f9) +p=A.aE(22,12.5,f8.a.c,8,f9) +o=A.aE(24,14.5,f8.a.c,8,f9) +n=A.aE(26,16.5,f8.a.c,8,f9) +m=A.aE(24,10.5,f8.a.c,8,f9) +l=A.aE(26,12.5,f8.a.c,8,f9) +k=A.aE(28,14.5,f8.a.c,8,f9) +j=A.aE(26,8.5,f8.a.c,8,f9) +i=A.aE(28,10.5,f8.a.c,8,f9) +h=A.aE(30,12.5,f8.a.c,8,f9) +g=A.aE(28,6.5,f8.a.c,8,f9) +f=A.aE(30,8.5,f8.a.c,8,f9) +e=A.aE(32,10.5,f8.a.c,8,f9) +d=A.aE(30,4.5,f8.a.c,8,f9) +c=A.aE(32,6.5,f8.a.c,8,f9) +b=A.aE(34,8.5,f8.a.c,8,f9) +a=A.aE(34,4.5,f8.a.c,8,f9) +a0=A.aE(36,6.5,f8.a.c,8,f9) +a1=A.aE(38,4.5,f8.a.c,8,f9) +f8.a.toString +a2=A.aE(20,14.5,B.l,8,f9) +f8.a.toString +a3=A.aE(22,12.5,B.l,8,f9) +f8.a.toString +a4=A.aE(24,10.5,B.l,8,f9) +f8.a.toString +a5=A.aE(22,16.5,B.l,8,f9) +f8.a.toString +a6=A.aE(24,14.5,B.l,8,f9) +f8.a.toString +a7=A.aE(26,12.5,B.l,8,f9) +f8.a.toString +a8=A.aE(24,18.5,B.l,8,f9) +f8.a.toString +a9=A.aE(26,16.5,B.l,8,f9) +f8.a.toString +b0=A.aE(28,14.5,B.l,8,f9) +f8.a.toString +b1=A.aE(26,20.5,B.l,8,f9) +f8.a.toString +b2=A.aE(28,18.5,B.l,8,f9) +f8.a.toString +b3=A.aE(30,16.5,B.l,8,f9) +f8.a.toString +b4=A.aE(28,22.5,B.l,8,f9) +f8.a.toString +b5=A.aE(30,20.5,B.l,8,f9) +f8.a.toString +b6=A.aE(32,18.5,B.l,8,f9) +f8.a.toString +b7=A.aE(30,24.5,B.l,8,f9) +f8.a.toString +b8=A.aE(32,22.5,B.l,8,f9) +f8.a.toString +b9=A.aE(34,20.5,B.l,8,f9) +f8.a.toString +c0=A.aE(34,24.5,B.l,8,f9) +f8.a.toString +c1=A.aE(36,22.5,B.l,8,f9) +f8.a.toString +c2=A.aE(38,24.5,B.l,8,f9) +f8.a.toString +c3=A.aE(10,25,B.l,8,f9) +f8.a.toString +c4=A.aE(12,23,B.l,8,f9) +f8.a.toString +c5=A.aE(14,21,B.l,8,f9) +f8.a.toString +c6=A.aE(12,27,B.l,8,f9) +f8.a.toString +c7=A.aE(14,25,B.l,8,f9) +f8.a.toString +c8=A.aE(16,23,B.l,8,f9) +f8.a.toString +c9=A.aE(14,29,B.l,8,f9) +f8.a.toString +d0=A.aE(16,27,B.l,8,f9) +f8.a.toString +d1=A.aE(18,25,B.l,8,f9) +f8.a.toString +d2=A.aE(16,31,B.l,8,f9) +f8.a.toString +d3=A.aE(18,29,B.l,8,f9) +f8.a.toString +d4=A.aE(20,27,B.l,8,f9) +f8.a.toString +d5=A.aE(18,33,B.l,8,f9) +f8.a.toString +d6=A.aE(20,31,B.l,8,f9) +f8.a.toString +d7=A.aE(22,29,B.l,8,f9) +f8.a.toString +d8=A.aE(20,35,B.l,8,f9) +f8.a.toString +d9=A.aE(22,33,B.l,8,f9) +f8.a.toString +e0=A.aE(24,31,B.l,8,f9) +f8.a.toString +e1=A.aE(22,37,B.l,8,f9) +f8.a.toString +e2=A.aE(24,35,B.l,8,f9) +f8.a.toString +e3=A.aE(26,33,B.l,8,f9) +f8.a.toString +e4=A.aE(24,39,B.l,8,f9) +f8.a.toString +e5=A.aE(26,37,B.l,8,f9) +f8.a.toString +e6=A.aE(28,35,B.l,8,f9) +f8.a.toString +e7=A.aE(26,41,B.l,8,f9) +f8.a.toString +e8=A.aE(28,39,B.l,8,f9) +f8.a.toString +e9=A.aE(30,37,B.l,8,f9) +f8.a.toString +f0=A.aE(28,43,B.l,8,f9) +f8.a.toString +f1=A.aE(30,41,B.l,8,f9) +f8.a.toString +f2=A.aE(32,39,B.l,8,f9) +f8.a.toString +f3=A.aE(30,45,B.l,8,f9) +f8.a.toString +f4=A.aE(32,43,B.l,8,f9) +f8.a.toString +f5=A.aE(34,41,B.l,8,f9) +f8.a.toString +f6=A.aE(34,45,B.l,8,f9) +f8.a.toString +f7=A.aE(36,43,B.l,8,f9) +f8.a.toString +f7=A.a([s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,b0,b1,b2,b3,b4,b5,b6,b7,b8,b9,c0,c1,c2,c3,c4,c5,c6,c7,c8,c9,d0,d1,d2,d3,d4,d5,d6,d7,d8,d9,e0,e1,e2,e3,e4,e5,e6,e7,e8,e9,f0,f1,f2,f3,f4,f5,f6,f7,A.aE(38,45,B.l,8,f9)],t._F) +s=f7}else s=f8.wt() +return A.hn(f9,new A.cA(1,A.aMR(A.an4(f9,f9,f9,A.cK(f9,!1),f9,B.bT,50,50,0,0,f9,s,A.aGU(!1,f9,f9,f9,f9,f9,f9),f9,B.kf),B.ar,B.dF),f9),B.af,!1,f9,f9,f9,f9,f9,f9,f9,f9,f9,f9,f9,f9,f9,f9,f9,new A.ana(f8),f9,f9,f9)}, +wt(){return A.D_(78,new A.anb(this),t.zi)}} +A.ana.prototype={ +$0(){var s=this.a +s.a3(new A.an9(s))}, +$S:0} +A.an9.prototype={ +$0(){var s=this.a +s.r=!s.r}, +$S:0} +A.anb.prototype={ +$1(a){var s,r,q=this.a.a +if(a<21)s=q.c +else{q.toString +s=B.l}q=B.aw.JH() +r=B.aw.JH() +return A.aE(q*42+4,r*42+4,s,B.aw.JH()*16+4,null)}, +$S:255} +A.xJ.prototype={ +ac(){return new A.a1E(A.a([],t.t),B.j)}} +A.a1E.prototype={ +H(a){var s=null,r=this.f,q=A.aE(4,4,B.b.p(r,0)?B.aq:A.C(B.c.an(127.5),255,255,255),s,s),p=A.aE(2,5,B.b.p(r,1)?B.aQ:A.C(B.c.an(127.5),255,255,255),12,s),o=A.aE(4,5,B.b.p(r,2)?B.bm:A.C(B.c.an(127.5),255,255,255),8,s),n=A.aE(8,6,B.b.p(r,3)?B.cc:A.C(B.c.an(127.5),255,255,255),20,s),m=A.aE(5,7,B.b.p(r,4)?B.bP:A.C(B.c.an(127.5),255,255,255),14,s),l=A.aE(7,2,B.b.p(r,5)?B.l:A.C(B.c.an(127.5),255,255,255),18,s),k=A.aE(3,2,B.b.p(r,6)?B.bQ:A.C(B.c.an(127.5),255,255,255),36,s) +q=A.a([q,p,o,n,m,l,k,A.aE(2,8,B.b.p(r,7)?B.E:A.C(B.c.an(127.5),255,255,255),22,s)],t._F) +return new A.cA(1,A.aMR(A.an4(s,s,s,A.cK(s,!1),s,new A.ew(!0,!0,s,new A.aA9(),new A.aAa(),!0,s,new A.aAb(),new A.aAc()),10,10,0,0,s,q,A.aGU(!0,!1,s,new A.aAd(),new A.aAe(this),s,A.aMV(new A.aAf(),B.k)),r,B.kf),B.ae,B.aj),s)}} +A.aAa.prototype={ +$1(a){return!0}, +$S:9} +A.aA9.prototype={ +$1(a){return B.oD}, +$S:14} +A.aAc.prototype={ +$1(a){return!0}, +$S:9} +A.aAb.prototype={ +$1(a){return B.oD}, +$S:14} +A.aAd.prototype={ +$2(a,b){return b==null||b.a==null?B.aP:B.c0}, +$S:384} +A.aAf.prototype={ +$1(a){var s=null,r=A.bL(s,s,B.h0,s,s,s,s,s,s,s,s,s,B.hf,s,s,s,1.2,!0,s,s,s,s,s,s,s,s) +return A.aMU("X: ",10,A.a([A.c0(s,s,B.B0,""+B.c.V(a.a)+" \n"),A.c0(s,s,A.bL(s,s,B.h0,s,s,s,s,s,s,s,s,s,B.hf,s,s,s,1.2,!0,s,s,s,s,s,s,s,s),"Y: "),A.c0(s,s,B.B0,B.f.k(B.c.V(a.b)))],t.Ne),r)}, +$S:257} +A.aAe.prototype={ +$2(a,b){var s +if(b==null||b.a==null)return +if(a instanceof A.rw){s=this.a +s.a3(new A.aA8(s,b.a.b))}}, +$S:142} +A.aA8.prototype={ +$0(){var s=this.a.f,r=this.b +if(B.b.p(s,r))B.b.C(s,r) +else s.push(r)}, +$S:0} +A.vw.prototype={ +H(a){var s=null,r=this.c,q=t.p +return A.f5(A.a([A.eQ(A.a([B.AA,A.bj(A.aFk(r.gkd(r))+" Chart Sample "+r.a,s,s,B.a0g,s),A.jj(A.bP(s,s,B.o,s,s,s,s,s,s,s,s,s,s,s)),A.Cu(s,B.NY,new A.a8D(this),s,"Source code")],q),B.T,B.U,B.a3),B.Y8,A.bP(s,r.b.$1(a),B.o,s,s,B.Dc,s,s,s,s,s,s,s,s)],q),B.dC,B.U,B.bf)}} +A.a8D.prototype={ +$0(){var s=$.zZ(),r=this.a.c,q=r.gkd(r).b.toLowerCase() +return s.no("https://github.com/imaNNeo/fl_chart/blob/master/example/lib/presentation/samples/"+q+"/"+q+"_chart_sample"+r.a+".dart")}, +$S:0} +A.kj.prototype={ +H(a){var s=this,r=null,q=s.f,p=s.e?B.aO:B.dw +return A.eQ(A.a([A.bP(r,r,B.o,r,r,new A.d3(s.c,r,r,r,r,r,p),r,q,r,r,r,r,r,q),B.Az,A.bj(s.d,r,r,A.bL(r,r,s.r,r,r,r,r,r,r,r,r,16,r,r,B.x,r,r,!0,r,r,r,r,r,r,r,r),r)],t.p),B.T,B.U,B.a3)}} +A.rW.prototype={ +H(a){var s=null +return A.eQ(A.a([A.bP(s,s,B.o,s,s,new A.d3(this.d,s,s,s,s,s,B.dw),s,10,s,s,s,s,s,10),B.AA,A.bj(this.c,s,s,B.a_u,s)],t.p),B.T,B.U,B.bf)}} +A.PT.prototype={ +H(a){var s=this.c,r=A.S(s).h("R<1,rW>") +return new A.Vp(16,A.V(new A.R(s,new A.agD(),r),!0,r.h("af.E")),null)}} +A.agD.prototype={ +$1(a){return new A.rW(a.a,a.b,null)}, +$S:258} +A.p0.prototype={} +A.hM.prototype={ +I(){return"ChartType."+this.b}} +A.a6y.prototype={ +no(a){return this.avN(a)}, +avN(a){var s=0,r=A.a1(t.y),q,p +var $async$no=A.a2(function(b,c){if(b===1)return A.Z(c,r) +while(true)switch(s){case 0:p=A.eW(a,0,null) +s=5 +return A.a7(A.aDt(p),$async$no) +case 5:s=c?3:4 +break +case 3:s=6 +return A.a7(A.aE9(p),$async$no) +case 6:q=c +s=1 +break +case 4:q=!1 +s=1 +break +case 1:return A.a_(q,r)}}) +return A.a0($async$no,r)}} +A.l3.prototype={ +I(){return"AnimationStatus."+this.b}} +A.cv.prototype={ +k(a){return"#"+A.bh(this)+"("+this.Cr()+")"}, +Cr(){switch(this.gb6(this).a){case 1:return"\u25b6" +case 2:return"\u25c0" +case 3:return"\u23ed" +case 0:return"\u23ee"}}} +A.yH.prototype={ +I(){return"_AnimationDirection."+this.b}} +A.LH.prototype={ +I(){return"AnimationBehavior."+this.b}} +A.vi.prototype={ +gl(a){var s=this.x +s===$&&A.b() +return s}, +sl(a,b){var s=this +s.ff(0) +s.Fy(b) +s.a6() +s.tG()}, +ghm(){var s=this.r +if(!(s!=null&&s.a!=null))return 0 +s=this.w +s.toString +return s.fp(0,this.y.a/1e6)}, +Fy(a){var s=this,r=s.a,q=s.b,p=s.x=A.O(a,r,q) +if(p===r)s.Q=B.K +else if(p===q)s.Q=B.a7 +else s.Q=s.z===B.aA?B.aW:B.aX}, +gb6(a){var s=this.Q +s===$&&A.b() +return s}, +kE(a,b){var s=this +s.z=B.aA +if(b!=null)s.sl(0,b) +return s.N0(s.b)}, +c7(a){return this.kE(a,null)}, +Zt(a,b){var s=this +s.z=B.iI +if(b!=null)s.sl(0,b) +return s.N0(s.a)}, +dc(a){return this.Zt(a,null)}, +kj(a,b,c){var s,r,q,p,o,n,m=this,l=$.Tt.AB$ +l===$&&A.b() +if((l.a&4)!==0)switch(m.d.a){case 0:s=0.05 +break +case 1:s=1 +break +default:s=1}else s=1 +if(c==null){r=m.b-m.a +if(isFinite(r)){l=m.x +l===$&&A.b() +q=Math.abs(a-l)/r}else q=1 +if(m.z===B.iI&&m.f!=null){l=m.f +l.toString +p=l}else{l=m.e +l.toString +p=l}o=new A.b1(B.c.an(p.a*q))}else{l=m.x +l===$&&A.b() +o=a===l?B.z:c}m.ff(0) +l=o.a +if(l===B.z.a){l=m.x +l===$&&A.b() +if(l!==a){m.x=A.O(a,m.a,m.b) +m.a6()}m.Q=m.z===B.aA?B.a7:B.K +m.tG() +return A.aHa()}n=m.x +n===$&&A.b() +return m.za(new A.awp(l*s/1e6,n,a,b,B.c3))}, +N0(a){return this.kj(a,B.ae,null)}, +Zh(a){var s,r,q=this,p=q.a,o=q.b,n=q.e +q.ff(0) +s=q.x +s===$&&A.b() +r=n.a/1e6 +s=o===p?0:s/(o-p)*r +return q.za(new A.azE(p,o,!1,q.ga9f(),r,s,B.c3))}, +a9g(a){this.z=a +this.Q=a===B.aA?B.aW:B.aX +this.tG()}, +AP(a){var s,r,q,p=this,o=$.aTq(),n=a<0 +p.z=n?B.iI:B.aA +s=n?p.a-0.01:p.b+0.01 +n=$.Tt.AB$ +n===$&&A.b() +if((n.a&4)!==0)switch(p.d.a){case 0:r=200 +break +case 1:r=1 +break +default:r=1}else r=1 +n=p.x +n===$&&A.b() +q=new A.FI(s,A.JL(o,n-s,a*r),B.c3) +q.a=B.a3O +p.ff(0) +return p.za(q)}, +apM(){return this.AP(1)}, +Hd(a){this.ff(0) +this.z=B.aA +return this.za(a)}, +za(a){var s,r=this +r.w=a +r.y=B.z +r.x=A.O(a.eG(0,0),r.a,r.b) +s=r.r.nC(0) +r.Q=r.z===B.aA?B.aW:B.aX +r.tG() +return s}, +tm(a,b){this.y=this.w=null +this.r.tm(0,b)}, +ff(a){return this.tm(a,!0)}, +m(){var s=this +s.r.m() +s.r=null +s.cM$.a0(0) +s.cC$.a0(0) +s.Dw()}, +tG(){var s=this,r=s.Q +r===$&&A.b() +if(s.as!==r){s.as=r +s.wh(r)}}, +a71(a){var s,r=this +r.y=a +s=a.a/1e6 +r.x=A.O(r.w.eG(0,s),r.a,r.b) +if(r.w.lD(s)){r.Q=r.z===B.aA?B.a7:B.K +r.tm(0,!1)}r.a6() +r.tG()}, +Cr(){var s,r=this.r,q=r==null,p=!q&&r.a!=null?"":"; paused" +if(q)s="; DISPOSED" +else s=r.b?"; silenced":"" +r=this.Dv() +q=this.x +q===$&&A.b() +return r+" "+B.c.af(q,3)+p+s}} +A.awp.prototype={ +eG(a,b){var s,r,q=this,p=A.O(b/q.b,0,1) +if(p===0)return q.c +else{s=q.d +if(p===1)return s +else{r=q.c +return r+(s-r)*q.e.a2(0,p)}}}, +fp(a,b){return(this.eG(0,b+0.001)-this.eG(0,b-0.001))/0.002}, +lD(a){return a>this.b}} +A.azE.prototype={ +eG(a,b){var s=this,r=b+s.r,q=s.f,p=B.c.bF(r/q,1) +B.c.hS(r,q) +s.e.$1(B.aA) +q=A.P(s.b,s.c,p) +q.toString +return q}, +fp(a,b){return(this.c-this.b)/this.f}, +lD(a){return!1}} +A.VQ.prototype={} +A.VR.prototype={} +A.VS.prototype={} +A.VH.prototype={ +Z(a,b){}, +K(a,b){}, +h3(a){}, +dR(a){}, +gb6(a){return B.a7}, +gl(a){return 1}, +k(a){return"kAlwaysCompleteAnimation"}} +A.VI.prototype={ +Z(a,b){}, +K(a,b){}, +h3(a){}, +dR(a){}, +gb6(a){return B.K}, +gl(a){return 0}, +k(a){return"kAlwaysDismissedAnimation"}} +A.Ag.prototype={ +Z(a,b){return this.gaU(this).Z(0,b)}, +K(a,b){return this.gaU(this).K(0,b)}, +h3(a){return this.gaU(this).h3(a)}, +dR(a){return this.gaU(this).dR(a)}, +gb6(a){var s=this.gaU(this) +return s.gb6(s)}} +A.Eb.prototype={ +saU(a,b){var s,r=this,q=r.c +if(b==q)return +if(q!=null){r.a=q.gb6(q) +q=r.c +r.b=q.gl(q) +if(r.mT$>0)r.Ao()}r.c=b +if(b!=null){if(r.mT$>0)r.An() +q=r.b +s=r.c +s=s.gl(s) +if(q==null?s!=null:q!==s)r.a6() +q=r.a +s=r.c +if(q!==s.gb6(s)){q=r.c +r.wh(q.gb6(q))}r.b=r.a=null}}, +An(){var s=this,r=s.c +if(r!=null){r.Z(0,s.gdm()) +s.c.h3(s.gYf())}}, +Ao(){var s=this,r=s.c +if(r!=null){r.K(0,s.gdm()) +s.c.dR(s.gYf())}}, +gb6(a){var s=this.c +if(s!=null)s=s.gb6(s) +else{s=this.a +s.toString}return s}, +gl(a){var s=this.c +if(s!=null)s=s.gl(s) +else{s=this.b +s.toString}return s}, +k(a){var s=this,r=s.c +if(r==null)return"ProxyAnimation(null; "+s.Dv()+" "+B.c.af(s.gl(s),3)+")" +return r.k(0)+"\u27a9ProxyAnimation"}} +A.kw.prototype={ +Z(a,b){this.by() +this.a.Z(0,b)}, +K(a,b){this.a.K(0,b) +this.lu()}, +An(){this.a.h3(this.gq2())}, +Ao(){this.a.dR(this.gq2())}, +zb(a){this.wh(this.Rz(a))}, +gb6(a){var s=this.a +return this.Rz(s.gb6(s))}, +gl(a){var s=this.a +return 1-s.gl(s)}, +Rz(a){switch(a.a){case 1:return B.aX +case 2:return B.aW +case 3:return B.K +case 0:return B.a7}}, +k(a){return this.a.k(0)+"\u27aaReverseAnimation"}} +A.Bl.prototype={ +Th(a){var s=this +switch(a.a){case 0:case 3:s.d=null +break +case 1:if(s.d==null)s.d=B.aW +break +case 2:if(s.d==null)s.d=B.aX +break}}, +gTK(){if(this.c!=null){var s=this.d +if(s==null){s=this.a +s=s.gb6(s)}s=s!==B.aX}else s=!0 +return s}, +m(){this.a.dR(this.gTg())}, +gl(a){var s=this,r=s.gTK()?s.b:s.c,q=s.a,p=q.gl(q) +if(r==null)return p +if(p===0||p===1)return p +return r.a2(0,p)}, +k(a){var s=this +if(s.c==null)return s.a.k(0)+"\u27a9"+s.b.k(0) +if(s.gTK())return s.a.k(0)+"\u27a9"+s.b.k(0)+"\u2092\u2099/"+A.h(s.c) +return s.a.k(0)+"\u27a9"+s.b.k(0)+"/"+A.h(s.c)+"\u2092\u2099"}, +gaU(a){return this.a}} +A.a3s.prototype={ +I(){return"_TrainHoppingMode."+this.b}} +A.uy.prototype={ +zb(a){if(a!==this.e){this.a6() +this.e=a}}, +gb6(a){var s=this.a +return s.gb6(s)}, +akn(){var s,r,q=this,p=q.b +if(p!=null){switch(q.c.a){case 0:p=p.gl(p) +s=q.a +r=p<=s.gl(s) +break +case 1:p=p.gl(p) +s=q.a +r=p>=s.gl(s) +break +default:r=!1}if(r){p=q.a +s=q.gq2() +p.dR(s) +p.K(0,q.gGV()) +p=q.b +q.a=p +q.b=null +p.h3(s) +s=q.a +q.zb(s.gb6(s))}}else r=!1 +p=q.a +p=p.gl(p) +if(p!==q.f){q.a6() +q.f=p}if(r&&q.d!=null)q.d.$0()}, +gl(a){var s=this.a +return s.gl(s)}, +m(){var s,r,q=this +q.a.dR(q.gq2()) +s=q.gGV() +q.a.K(0,s) +q.a=null +r=q.b +if(r!=null)r.K(0,s) +q.b=null +q.cC$.a0(0) +q.cM$.a0(0) +q.Dw()}, +k(a){var s=this +if(s.b!=null)return A.h(s.a)+"\u27a9TrainHoppingAnimation(next: "+A.h(s.b)+")" +return A.h(s.a)+"\u27a9TrainHoppingAnimation(no next)"}} +A.vK.prototype={ +An(){var s,r=this,q=r.a,p=r.gQt() +q.Z(0,p) +s=r.gQu() +q.h3(s) +q=r.b +q.Z(0,p) +q.h3(s)}, +Ao(){var s,r=this,q=r.a,p=r.gQt() +q.K(0,p) +s=r.gQu() +q.dR(s) +q=r.b +q.K(0,p) +q.dR(s)}, +gb6(a){var s=this.b +if(s.gb6(s)===B.aW||s.gb6(s)===B.aX)return s.gb6(s) +s=this.a +return s.gb6(s)}, +k(a){return"CompoundAnimation("+this.a.k(0)+", "+this.b.k(0)+")"}, +aeP(a){var s=this +if(s.gb6(s)!==s.c){s.c=s.gb6(s) +s.wh(s.gb6(s))}}, +aeO(){var s=this +if(!J.d(s.gl(s),s.d)){s.d=s.gl(s) +s.a6()}}} +A.Af.prototype={ +gl(a){var s,r=this.a +r=r.gl(r) +s=this.b +s=s.gl(s) +return Math.min(A.fL(r),A.fL(s))}} +A.Hf.prototype={} +A.Hg.prototype={} +A.Hh.prototype={} +A.Xm.prototype={} +A.a0i.prototype={} +A.a0j.prototype={} +A.a0k.prototype={} +A.a1l.prototype={} +A.a1m.prototype={} +A.a3p.prototype={} +A.a3q.prototype={} +A.a3r.prototype={} +A.DR.prototype={ +a2(a,b){return this.m2(b)}, +m2(a){throw A.c(A.co(null))}, +k(a){return"ParametricCurve"}} +A.hf.prototype={ +a2(a,b){if(b===0||b===1)return b +return this.a30(0,b)}} +A.Ih.prototype={ +m2(a){return a}} +A.EZ.prototype={ +m2(a){a*=this.a +return a-(a<0?Math.ceil(a):Math.floor(a))}, +k(a){return"SawTooth("+this.a+")"}} +A.hW.prototype={ +m2(a){var s=this.a +a=A.O((a-s)/(this.b-s),0,1) +if(a===0||a===1)return a +return this.c.a2(0,a)}, +k(a){var s=this,r=s.c +if(!(r instanceof A.Ih))return"Interval("+A.h(s.a)+"\u22ef"+A.h(s.b)+")\u27a9"+r.k(0) +return"Interval("+A.h(s.a)+"\u22ef"+A.h(s.b)+")"}} +A.UJ.prototype={ +m2(a){return a<0.5?0:1}} +A.et.prototype={ +OB(a,b,c){var s=1-c +return 3*a*s*s*c+3*b*s*c*c+c*c*c}, +m2(a){var s,r,q,p,o,n,m=this +for(s=m.a,r=m.c,q=0,p=1;!0;){o=(q+p)/2 +n=m.OB(s,r,o) +if(Math.abs(a-n)<0.001)return m.OB(m.b,m.d,o) +if(n"))}} +A.aP.prototype={ +gl(a){var s=this.a +return this.b.a2(0,s.gl(s))}, +k(a){var s=this.a,r=this.b +return s.k(0)+"\u27a9"+r.k(0)+"\u27a9"+A.h(r.a2(0,s.gl(s)))}, +Cr(){return this.Dv()+" "+this.b.k(0)}, +gaU(a){return this.a}} +A.e3.prototype={ +a2(a,b){return this.b.a2(0,this.a.a2(0,b))}, +k(a){return this.a.k(0)+"\u27a9"+this.b.k(0)}} +A.ar.prototype={ +d_(a){var s=this.a +return A.o(this).h("ar.T").a(J.aUz(s,J.aUA(J.aEV(this.b,s),a)))}, +a2(a,b){var s,r=this +if(b===0){s=r.a +return s==null?A.o(r).h("ar.T").a(s):s}if(b===1){s=r.b +return s==null?A.o(r).h("ar.T").a(s):s}return r.d_(b)}, +k(a){return"Animatable("+A.h(this.a)+" \u2192 "+A.h(this.b)+")"}, +sHo(a){return this.a=a}, +sbi(a,b){return this.b=b}} +A.ES.prototype={ +d_(a){return this.c.d_(1-a)}} +A.f4.prototype={ +d_(a){return A.y(this.a,this.b,a)}} +A.TF.prototype={ +d_(a){return A.aoE(this.a,this.b,a)}} +A.pv.prototype={ +d_(a){return A.aZL(this.a,this.b,a)}} +A.oT.prototype={ +d_(a){var s,r=this.a +r.toString +s=this.b +s.toString +return B.c.an(r+(s-r)*a)}} +A.vM.prototype={ +d_(a){var s=this.a +return s==null?this.$ti.c.a(s):s}, +k(a){return"ConstantTween(value: "+A.h(this.a)+")"}} +A.fv.prototype={ +a2(a,b){if(b===0||b===1)return b +return this.a.a2(0,b)}, +k(a){return"CurveTween(curve: "+this.a.k(0)+")"}} +A.KA.prototype={} +A.GA.prototype={ +a6t(a,b){var s,r,q,p,o,n,m,l=this.a +B.b.E(l,a) +for(s=l.length,r=0,q=0;q=n&&b"}} +A.Bf.prototype={ +ac(){return new A.Hn(new A.ar(1,null,t.Y),null,null,B.j)}} +A.Hn.prototype={ +aB(){var s,r,q,p=this +p.aR() +s=A.c5(null,B.am,null,0,p) +p.e=s +r=t.m +q=p.d +p.f=new A.aP(r.a(new A.aP(r.a(s),new A.fv(B.eb),t.HY.h("aP"))),q,q.$ti.h("aP")) +p.Sa()}, +aO(a){this.bb(a) +this.Sa()}, +Sa(){var s=this.a.x +this.d.b=s}, +m(){var s=this.e +s===$&&A.b() +s.m() +this.a5G()}, +adw(a){if(!this.r){this.r=!0 +this.xS(0)}}, +adD(a){if(this.r){this.r=!1 +this.xS(0)}}, +adu(){if(this.r){this.r=!1 +this.xS(0)}}, +xS(a){var s,r,q,p=this.e +p===$&&A.b() +s=p.r +if(s!=null&&s.a!=null)return +r=this.r +if(r){p.z=B.aA +q=p.kj(1,B.a3I,B.Lc)}else{p.z=B.aA +q=p.kj(0,B.Kw,B.Lh)}q.ba(new A.aut(this,r),t.H)}, +H(a){var s,r,q,p,o,n,m,l,k,j,i,h,g=this,f=null +g.a.toString +s=A.iy(a) +r=s.ghk() +q=g.a.e +if(q==null)p=f +else p=A.r9(q,a) +q=p!=null +if(q)o=s.gnm() +else o=r +n=s.gkc().gjj().ey(o) +m=g.a +l=m.r +k=m.w +j=g.f +j===$&&A.b() +i=m.y +h=m.d +if(h==null)q=q?B.LN:B.er +else q=h +return A.tr(A.hn(B.b_,A.cH(!0,f,new A.hN(new A.az(k,1/0,k,1/0),A.fQ(!1,A.rc(new A.bH(q,new A.h8(m.z,1,1,A.hh(A.Pn(m.c,new A.dt(f,f,f,f,f,o,f,f),f),f,B.aK,!0,n,f,f,B.a_),f),f),new A.d3(p,f,f,i,f,f,B.aO),B.cu),j),f),!1,f,!1,!1,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f),B.af,!1,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,l,g.gadt(),g.gadv(),g.gadC()),B.c0,f,f,f,f)}} +A.aut.prototype={ +$1(a){var s=this.a +if(s.c!=null&&this.b!==s.r)s.xS(0)}, +$S:29} +A.KG.prototype={ +m(){var s=this,r=s.c0$ +if(r!=null)r.K(0,s.gjy()) +s.c0$=null +s.aN()}, +bY(){this.dq() +this.cW() +this.jz()}} +A.dH.prototype={ +gl(a){return this.b.a}, +gu2(){var s=this +return!s.e.j(0,s.f)||!s.x.j(0,s.y)||!s.r.j(0,s.w)||!s.z.j(0,s.Q)}, +gu0(){var s=this +return!s.e.j(0,s.r)||!s.f.j(0,s.w)||!s.x.j(0,s.z)||!s.y.j(0,s.Q)}, +gu1(){var s=this +return!s.e.j(0,s.x)||!s.f.j(0,s.y)||!s.r.j(0,s.z)||!s.w.j(0,s.Q)}, +dS(a){var s,r,q,p,o,n=this,m=null +if(n.gu2()){s=a.ap(t.WD) +r=s==null?m:s.f.c.gmE() +if(r==null){r=A.d_(a,B.ms) +r=r==null?m:r.e +q=r}else q=r +if(q==null)q=B.ad}else q=B.ad +if(n.gu0()){r=A.d_(a,B.BG) +r=r==null?m:r.as +p=r===!0}else p=!1 +if(n.gu1())A.aWc(a) +switch(q.a){case 1:switch(0){case 0:o=p?n.r:n.e +break}break +case 0:switch(0){case 0:o=p?n.w:n.f +break}break +default:o=m}return new A.dH(o,n.c,m,n.e,n.f,n.r,n.w,n.x,n.y,n.z,n.Q,0)}, +j(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +if(J.U(b)!==A.t(s))return!1 +return b instanceof A.dH&&b.b.a===s.b.a&&b.e.j(0,s.e)&&b.f.j(0,s.f)&&b.r.j(0,s.r)&&b.w.j(0,s.w)&&b.x.j(0,s.x)&&b.y.j(0,s.y)&&b.z.j(0,s.z)&&b.Q.j(0,s.Q)}, +gt(a){var s=this +return A.N(s.b.a,s.e,s.f,s.r,s.x,s.y,s.w,s.Q,s.z,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a){var s=this,r=new A.a9Y(s),q=A.a([r.$2("color",s.e)],t.s) +if(s.gu2())q.push(r.$2("darkColor",s.f)) +if(s.gu0())q.push(r.$2("highContrastColor",s.r)) +if(s.gu2()&&s.gu0())q.push(r.$2("darkHighContrastColor",s.w)) +if(s.gu1())q.push(r.$2("elevatedColor",s.x)) +if(s.gu2()&&s.gu1())q.push(r.$2("darkElevatedColor",s.y)) +if(s.gu0()&&s.gu1())q.push(r.$2("highContrastElevatedColor",s.z)) +if(s.gu2()&&s.gu0()&&s.gu1())q.push(r.$2("darkHighContrastElevatedColor",s.Q)) +r=s.c +if(r==null)r="CupertinoDynamicColor" +q=B.b.c_(q,", ") +return r+"("+q+", resolved by: UNRESOLVED)"}} +A.a9Y.prototype={ +$2(a,b){var s=b.j(0,this.a.b)?"*":"" +return s+a+" = "+b.k(0)+s}, +$S:262} +A.Xb.prototype={} +A.Xa.prototype={} +A.a9X.prototype={ +rX(a){return B.Q}, +zW(a,b,c,d){return B.aF}, +rW(a,b){return B.e}} +A.a4t.prototype={} +A.Nl.prototype={ +H(a){var s=null,r=A.bt(a,B.b1,t.w).w.r.b+8,q=this.c.Y(0,new A.k(8,r)),p=A.f5(this.d,B.T,B.U,B.bf),o=$.W().HP(20,20,B.V) +return new A.bH(new A.aG(8,r,8,8),new A.mF(new A.NN(q),A.bP(s,A.aJF(A.rc(new A.bH(B.jZ,p,s),new A.d3(B.KD.dS(a),s,A.oo(B.KB.dS(a),1),B.e7,s,s,B.aO),B.cu),o),B.a9,s,s,B.Db,s,s,s,s,s,s,s,222),s),s)}} +A.r8.prototype={ +ac(){return new A.Ho(B.j)}} +A.Ho.prototype={ +afj(a){this.a3(new A.auu(this))}, +afl(a){this.a3(new A.auv(this))}, +H(a){var s=this,r=null,q=s.a.f,p=A.bj(q,r,B.cj,B.B5.ey(s.d?A.iy(a).gnm():B.h3.dS(a)),r) +q=s.d?A.iy(a).ghk():r +return A.eC(A.tr(A.a9W(B.aM,B.je,p,q,B.jL,0,s.a.c,B.LQ,0.7),B.aP,r,s.gafi(),s.gafk(),r),r,1/0)}} +A.auu.prototype={ +$0(){this.a.d=!0}, +$S:0} +A.auv.prototype={ +$0(){this.a.d=!1}, +$S:0} +A.Nm.prototype={ +U(a){var s=this.f,r=A.r9(s,a) +return J.d(r,s)?this:this.ey(r)}, +v_(a,b,c,d,e,f,g,h){var s=this,r=g==null?s.a:g,q=b==null?s.b:b,p=h==null?s.c:h,o=c==null?s.d:c,n=e==null?s.e:e,m=a==null?s.f:a,l=d==null?s.gdH(s):d +return A.aK5(m,q,o,l,n,f==null?s.w:f,r,p)}, +ey(a){return this.v_(a,null,null,null,null,null,null,null)}} +A.Xc.prototype={} +A.Xd.prototype={ +Jj(a){return a.grp(a)==="en"}, +jX(a,b){return new A.bK(B.Dt,t.Vr)}, +Dm(a){return!1}, +k(a){return"DefaultCupertinoLocalizations.delegate(en_US)"}} +A.NE.prototype={$iBg:1} +A.Bk.prototype={ +ac(){return new A.Hr(B.e,null,null,B.j)}} +A.Hr.prototype={ +aB(){var s,r,q=this +q.aR() +s=A.c5(null,B.aj,null,0,q) +s.by() +r=s.cC$ +r.b=!0 +r.a.push(new A.auF(q)) +q.f=s +r=q.a +r.d.a=s +r.w.Z(0,q.gFF()) +r=t.Y +s=q.f +q.a.toString +q.r=new A.aP(A.dc(B.dD,s,null),new A.ar(0,1,r),r.h("aP"))}, +m(){var s,r=this +r.a.d.a=null +s=r.f +s===$&&A.b() +s.m() +r.a.w.K(0,r.gFF()) +r.a5H()}, +aO(a){var s,r=this,q=a.w +if(q!==r.a.w){s=r.gFF() +q.K(0,s) +r.a.w.Z(0,s)}r.bb(a)}, +bx(){this.Qk() +this.dr()}, +Qk(){var s,r,q,p=this,o=p.a.w,n=o.gl(o),m=n.c.gaK().b +o=n.a +s=m-o.b +r=p.a +r.toString +if(s<-48){if(r.d.gxw())p.a.d.vJ(!1) +return}if(!r.d.gxw()){r=p.f +r===$&&A.b() +r.c7(0)}p.a.toString +q=Math.max(m,m-s/10) +o=o.a-40 +s=q-73.5 +r=p.c +r.toString +r=A.bt(r,B.fE,t.w).w.a +p.a.toString +s=A.aLM(new A.w(10,-21.5,0+r.a-10,0+r.b+21.5),new A.w(o,s,o+80,s+47.5)) +p.a3(new A.auD(p,new A.k(s.a,s.b),m,q))}, +H(a){var s,r,q=this +q.a.toString +s=q.d +r=q.r +r===$&&A.b() +return A.aJy(new A.Nn(r,new A.k(0,q.e),null),B.dD,B.Lm,s.a,s.b)}} +A.auF.prototype={ +$0(){return this.a.a3(new A.auE())}, +$S:0} +A.auE.prototype={ +$0(){}, +$S:0} +A.auD.prototype={ +$0(){var s=this,r=s.a +r.d=s.b +r.e=s.c-s.d}, +$S:0} +A.Nn.prototype={ +H(a){var s,r,q=this.r,p=q.b +q=q.a +p.a2(0,q.gl(q)) +s=new A.k(0,49.75).R(0,this.w) +r=p.a2(0,q.gl(q)) +r=A.lz(B.UA,B.e,r==null?1:r) +r.toString +q=p.a2(0,q.gl(q)) +if(q==null)q=1 +return A.aNJ(new A.Ej(null,A.aLN(q,B.Qf,new A.d8(B.CS,B.CU)),s,1,B.XZ,null),r)}} +A.KH.prototype={ +m(){var s=this,r=s.c0$ +if(r!=null)r.K(0,s.gjy()) +s.c0$=null +s.aN()}, +bY(){this.dq() +this.cW() +this.jz()}} +A.I0.prototype={ +k(a){return"Default Hero tag for Cupertino navigation bars with navigator "+A.h(this.a)}, +j(a,b){if(b==null)return!1 +if(this===b)return!0 +if(J.U(b)!==A.t(this))return!1 +return b instanceof A.I0&&b.a==this.a}, +gt(a){return A.mo(this.a)}} +A.Ye.prototype={ +H(a){var s,r,q,p=this,o=null,n=p.r,m=n.b +n=n.a +s=m.a2(0,n.gl(n)).b +r=p.e +q=r?m.a2(0,n.gl(n)).a:o +n=r?o:m.a2(0,n.gl(n)).a +m=p.f +return A.E7(o,p.w,m.b,o,q,n,s,m.a)}} +A.Bh.prototype={ +ac(){return new A.Xe(B.j)}} +A.Xe.prototype={ +aB(){this.aR() +var s=t.B +this.d=new A.ayg(new A.bp("Navigation bar render box",s),new A.bp("Leading",s),new A.bp("Back chevron",s),new A.bp("Back label",s),new A.bp("Middle",s),new A.bp("Trailing",s),new A.bp("Large title",s))}, +H(a){var s,r,q,p,o,n,m,l,k,j,i,h=this,g=null +h.a.toString +s=A.r9(g,a) +if(s==null)s=A.iy(a).gnZ() +r=h.d +r===$&&A.b() +q=t.X +p=A.tq(a,q) +h.a.toString +o=A.b1y(!0,r.b,g,p,g) +n=A.b1v(!0,r.c,p,g) +m=A.b1w(!0,r.d,g,p,g) +l=A.b1z(!0,!1,r.e,p,g,B.Ba) +k=A.b1A(g,r.f,g) +A.b1x(!0,!1,r.r,p,g) +h.a.toString +p=A.iy(a).gkc().gjj() +h.a.toString +j=A.aQ1(s,B.mU,g,A.hh(new A.a_C(new A.ayf(o,n,m,l,k),g,g),g,B.aK,!0,p,g,g,B.a_),!0) +h.a.toString +i=A.tq(a,q) +if(i instanceof A.js){i.gjO() +r=!0}else r=!1 +r=!r +if(r)return j +return new A.f2(new A.auA(h,s,j),g)}} +A.auA.prototype={ +$1(a){var s,r,q,p,o=this.a +o.a.toString +if(B.mr.j(0,B.mr))s=new A.I0(A.QE(a)) +else{o.a.toString +s=B.mr}r=o.d +r===$&&A.b() +q=A.iy(a).gkc().gYd() +p=A.iy(a).gkc().gBy() +o.a.toString +return A.aLc(new A.Kb(r,this.b,q,p,null,B.mU,!0,!1,this.c,r.a),A.b73(),A.b74(),A.b75(),s,!0)}, +$S:263} +A.a_C.prototype={ +H(a){var s,r,q,p,o=null,n=this.c,m=n.d +if(m!=null){s=A.iy(a).gkc().gBy() +m=A.hh(A.cH(o,o,m,!1,o,!1,!1,o,o,!0,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o),o,B.aK,!0,s,o,o,B.a_)}r=n.a +q=n.b +p=n.c +if(r==null&&q!=null&&p!=null)r=new A.No(q,p,o) +s=A.bt(a,B.b1,t.w).w +return A.eC(A.amX(!1,new A.Dx(r,m,n.e,!0,6,o),!0),44+s.r.b,o)}} +A.ayg.prototype={} +A.ayf.prototype={} +A.No.prototype={ +H(a){var s,r=null +A.tq(a,t.X) +s=A.iy(a).gkc().gYd() +return A.a9W(B.ah,B.e7,A.cH(!0,r,A.hh(new A.hN(B.D9,A.eQ(A.a([B.Vg,this.f,B.Vh,new A.C6(1,B.Ni,this.r,r)],t.p),B.T,B.U,B.bf),r),r,B.aK,!0,s,r,r,B.a_),!0,r,!0,!1,r,r,r,r,"Back",r,r,r,r,r,r,r,r,r,r,r,r,r,r,r,r,r,r,r),r,B.jL,44,new A.aa_(this,a),B.bB,0.4)}} +A.aa_.prototype={ +$0(){A.aM7(this.b)}, +$S:0} +A.W7.prototype={ +H(a){var s,r,q,p=null,o=a.ap(t.I) +o.toString +s=a.ap(t.yS) +if(s==null)s=B.en +r=A.dK(62415) +q=new A.bH(B.Lp,A.aNu(A.c0(p,p,A.bL(p,p,s.w.b,p,p,p,p,p,"CupertinoIcons",p,p,30,p,p,p,p,p,!1,p,p,p,p,"cupertino_icons",p,p,p),r),p,p),p) +switch(o.w.a){case 0:o=new A.bd(new Float64Array(16)) +o.de() +o.hN(0,-1,1,1) +q=A.ys(B.ah,q,p,p,o,!1) +break +case 1:break}return q}} +A.GW.prototype={ +a7z(a,b,c){var s,r=null +if(b==null)return B.aF +s=A.bj(b,1,B.cj,r,r) +return new A.h8(B.fH,1,r,b.length>12?B.a3j:s,r)}, +H(a){var s=this.d +if(s instanceof A.nU&&!s.gBb()){s.toString +s=t.My.a(s).AD$ +s.toString +return new A.yB(s,this.ga7y(),null,t.Sj)}else return B.aF}} +A.Kb.prototype={ +grH(){var s=$.aa.F$.z.i(0,this.c.a).ga_() +s.toString +return t.x.a(s)}, +H(a){return this.z}} +A.a_9.prototype={ +H(a){var s,r,q,p,o,n=this,m=n.c,l=n.e,k=n.d,j=a.ap(t.I) +j.toString +s=l.grH() +r=k.grH() +q=l.grH() +q=q.gv(q) +p=k.grH() +p=p.gv(p) +p=new A.w(0,0,0+q.a,0+q.b).j0(new A.w(0,0,0+p.a,0+p.b)) +j=j.w===B.q?1:-1 +o=new A.aye(m,l.c,k.c,s,r,l.e,k.e,l.f,k.f,l.r,k.r,l.x,k.x,!1,!1,p,j) +m=A.a([A.oh(m,new A.ayh(n),null)],t.p) +if(o.gUE()!=null){l=o.gUE() +l.toString +m.push(l)}if(o.gUF()!=null){l=o.gUF() +l.toString +m.push(l)}if(o.gUH()!=null){l=o.gUH() +l.toString +m.push(l)}if(o.gUI()!=null){l=o.gUI() +l.toString +m.push(l)}if(o.gUG()!=null){l=o.gUG() +l.toString +m.push(l)}if(o.gUJ()!=null){l=o.gUJ() +l.toString +m.push(l)}if(o.gZU()!=null){l=o.gZU() +l.toString +m.push(l)}if(o.gZR()!=null){l=o.gZR() +l.toString +m.push(l)}if(o.gZS()!=null){l=o.gZS() +l.toString +m.push(l)}if(o.gZV()!=null){l=o.gZV() +l.toString +m.push(l)}if(o.gZT()!=null){l=o.gZT() +l.toString +m.push(l)}if(o.gZW()!=null){l=o.gZW() +l.toString +m.push(l)}l=n.f +k=l.a +k.toString +l=l.b +l.toString +l=Math.max(A.fL(k),A.fL(l)) +k=A.bt(a,B.b1,t.w).w +return A.aLY(A.eC(A.kA(B.bM,m,B.a9,B.bJ),l+k.r.b,1/0))}} +A.ayh.prototype={ +$2(a,b){var s=this.a,r=s.c,q=s.r.a2(0,r.gl(r)) +q.toString +return A.aQ1(q,s.w.a2(0,r.gl(r)),null,A.eC(null,s.f.a2(0,r.gl(r)),1/0),!1)}, +$S:87} +A.aye.prototype={ +kR(a,b){var s,r,q=$.aa.F$.z.i(0,a).ga_() +q.toString +t.x.a(q) +s=A.c7(q.br(0,b),B.e) +q=q.gv(q) +r=s.a +s=s.b +return A.aZM(new A.w(r,s,r+q.a,s+q.b),this.ay)}, +LN(a,b,c,d,e){var s,r,q,p,o,n,m,l,k,j,i,h=$.aa.F$.z.i(0,b).ga_() +h.toString +s=t.x +s.a(h) +r=$.aa.F$.z.i(0,d).ga_() +r.toString +s.a(r) +q=this.ch>0 +s=q?0:h.gv(h).a +p=h.gv(h) +o=q?0:r.gv(r).a +n=r.gv(r) +m=A.c7(h.br(0,c),new A.k(s,p.b/2)) +l=A.c7(r.br(0,e),new A.k(o,n.b/2)) +k=q?l.Y(0,m):new A.k(e.gv(e).a-l.a,l.b).Y(0,new A.k(c.gv(c).a-m.a,m.b)) +j=this.kR(b,c) +s=q?j.a:j.c +i=new A.k(s,j.b) +s=i.R(0,k) +r=t.Ni +return A.aOf(a,q,new A.aP(t.m.a(this.a),new A.ar(i,s,r),r.h("aP")),h.gv(h))}, +vv(a){var s=$.aSY(),r=s.$ti.h("e3") +return new A.aP(t.m.a(this.a),new A.e3(new A.fv(new A.hW(a,1,B.cs)),s,r),r.h("aP"))}, +qY(a){var s=$.aSZ(),r=s.$ti.h("e3") +return new A.aP(t.m.a(this.a),new A.e3(new A.fv(new A.hW(0,a,B.dD)),s,r),r.h("aP"))}, +gUH(){var s,r=this,q=r.b.b,p=$.aa.F$.z.i(0,q) +p=p==null?null:p.gao() +t.SC.a(p) +if(p==null)return null +q=r.kR(q,r.d) +s=r.qY(0.4) +return A.xi(A.fQ(!1,p.c,s),q)}, +gUE(){var s,r=this,q=null,p=r.b.c,o=$.aa.F$.z.i(0,p) +o=o==null?q:o.gao() +t.SC.a(o) +if(o==null)return q +p=r.kR(p,r.d) +s=r.qY(0.6) +return A.xi(A.fQ(!1,A.hh(o.c,q,B.aK,!0,r.f,q,q,B.a_),s),p)}, +gUF(){var s,r,q,p=this,o=null,n=p.b.d,m=$.aa.F$.z.i(0,n) +m=m==null?o:m.gao() +t.SC.a(m) +if(m==null)return o +s=p.d +r=p.kR(n,s) +s=r.cm(new A.k(p.ch*(-s.gv(s).a/2),0)) +n=t.m.a(p.a) +q=p.qY(0.2) +return new A.E8(A.fQ(!1,A.hh(m.c,o,B.aK,!0,p.f,o,o,B.a_),q),new A.aP(n,new A.xt(r,s),t.MD.h("aP")),o)}, +gUI(){var s,r,q,p,o,n,m=this,l=null,k=m.b.e,j=$.aa.F$.z.i(0,k) +j=j==null?l:j.gao() +s=t.SC +s.a(j) +r=m.c +q=r.d +p=$.aa.F$.z.i(0,q) +o=s.a(p==null?l:p.gao()) +r=$.aa.F$.z.i(0,r.b) +n=s.a(r==null?l:r.gao()) +s=j!=null +if(s&&o!=null){s=m.qY(m.Q?0.4:0.7) +r=t.m.a(m.a) +return m.LN(A.fQ(!1,new A.h8(B.fH,l,l,A.aKf(j.c,l,B.aK,new A.aP(r,new A.m0(m.w,m.r),t.ta.h("aP"))),l),s),k,m.d,q,m.e)}if(s&&n!=null){k=m.kR(k,m.d) +s=m.qY(m.Q?0.4:0.7) +return A.xi(A.fQ(!1,A.hh(j.c,l,B.aK,!0,m.w,l,l,B.a_),s),k)}return l}, +gUG(){var s,r,q=null,p=$.aa.F$.z.i(0,this.b.r) +p=p==null?q:p.gao() +s=t.SC +s.a(p) +p=this.c +r=$.aa.F$.z.i(0,p.d) +s.a(r==null?q:r.gao()) +p=$.aa.F$.z.i(0,p.b) +s.a(p==null?q:p.gao()) +return q}, +gUJ(){var s,r=this,q=r.b.f,p=$.aa.F$.z.i(0,q) +p=p==null?null:p.gao() +t.SC.a(p) +if(p==null)return null +q=r.kR(q,r.d) +s=r.qY(0.6) +return A.xi(A.fQ(!1,p.c,s),q)}, +gZU(){var s,r=this,q=r.c.b,p=$.aa.F$.z.i(0,q) +p=p==null?null:p.gao() +t.SC.a(p) +if(p==null)return null +q=r.kR(q,r.e) +s=r.vv(0.6) +return A.xi(A.fQ(!1,p.c,s),q)}, +gZR(){var s,r,q,p,o,n=this,m=null,l=n.c.c,k=$.aa.F$.z.i(0,l) +k=k==null?m:k.gao() +s=t.SC +s.a(k) +r=$.aa.F$.z.i(0,n.b.c) +q=s.a(r==null?m:r.gao()) +if(k==null)return m +p=n.kR(l,n.e) +s=q==null +if(s){l=$.aa.F$.z.i(0,l).ga_() +l.toString +t.x.a(l) +o=p.cm(new A.k(n.ch*l.gv(l).a*2,0))}else o=p +l=t.m.a(n.a) +r=n.vv(s?0.7:0.4) +return new A.E8(A.fQ(!1,A.hh(k.c,m,B.aK,!0,n.r,m,m,B.a_),r),new A.aP(l,new A.xt(o,p),t.MD.h("aP")),m)}, +gZS(){var s,r,q,p,o,n=this,m=null,l=n.b,k=l.e,j=$.aa.F$.z.i(0,k) +j=j==null?m:j.gao() +s=t.SC +s.a(j) +l=$.aa.F$.z.i(0,l.r) +s.a(l==null?m:l.gao()) +l=n.c.d +r=$.aa.F$.z.i(0,l) +q=s.a(r==null?m:r.gao()) +if(q==null)return m +s=$.aa.F$.z.i(0,l) +p=s==null?m:s.oy(t.re) +if(p!=null){s=p.mU$ +s=s.gl(s)<1}else s=!1 +if(s){s=p.mU$ +s=s.gl(s) +r=t.Y +o=new A.aP(t.m.a(n.a),new A.ar(0,s,r),r.h("aP"))}else o=m +if(j!=null){j=o==null?n.vv(0.3):o +s=t.m.a(n.a) +return n.LN(A.fQ(!1,A.aKf(q.c,m,B.aK,new A.aP(s,new A.m0(n.w,n.r),t.ta.h("aP"))),j),k,n.d,l,n.e)}return m}, +gZV(){var s,r,q,p,o,n,m,l,k,j=this,i=null,h=j.c.e,g=$.aa.F$.z.i(0,h) +g=g==null?i:g.gao() +t.SC.a(g) +if(g==null)return i +s=j.e +r=j.kR(h,s) +h=$.aa.F$.z.i(0,h).ga_() +h.toString +t.x.a(h) +q=j.ch>0 +p=q?r.a:r.c +o=r.b +s=s.gv(s) +n=h.gv(h) +m=t.Ni +l=t.m.a(j.a) +h=h.gv(h) +k=j.vv(0.25) +return A.aOf(A.fQ(!1,A.hh(g.c,i,B.aK,!0,j.x,i,i,B.a_),k),q,new A.aP(l,new A.ar(new A.k(s.a-n.a/2,o),new A.k(p,o),m),m.h("aP")),h)}, +gZW(){var s,r=this,q=r.c.f,p=$.aa.F$.z.i(0,q) +p=p==null?null:p.gao() +t.SC.a(p) +if(p==null)return null +q=r.kR(q,r.e) +s=r.vv(0.4) +return A.xi(A.fQ(!1,p.c,s),q)}, +gZT(){var s=$.aa.F$.z.i(0,this.c.r) +s=s==null?null:s.gao() +t.SC.a(s) +return null}} +A.Bi.prototype={ +ac(){return new A.Hp(B.j)}} +A.Hp.prototype={ +adp(){var s,r=this.c +r.toString +s=A.RO(r) +if(s!=null&&s.f.length!==0)s.jD(0,B.jJ,B.cU)}, +H(a){var s,r,q,p,o,n,m,l=this,k=null,j=l.a.d,i=A.bt(a,k,t.w).w +l.a.toString +s=i.r +r=s.b +q=44+r +p=i.f +o=p.d +n=p.uW(0) +l.a.toString +m=A.r9(k,a) +if(m==null)m=A.iy(a).gnZ() +j=(m.gl(m)>>>24&255)===255?A.pb(new A.bH(new A.aG(0,q,0,o),j,k),i.auT(!0).and(n),k):A.pb(new A.bH(new A.aG(0,0,0,o),j,k),i.anq(s.anc(q),n),k) +l.a.toString +s=A.r9(k,a) +if(s==null)s=A.iy(a).gnx() +p=A.a([j],t.p) +p.push(A.E7(k,A.aLY(l.a.c),k,k,0,0,0,k)) +p.push(A.E7(k,A.hn(k,k,B.af,!0,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,l.gado(),k,k,k),r,k,0,0,0,k)) +return A.rc(A.kA(B.bM,p,B.a9,B.bJ),new A.d3(s,k,k,k,k,k,B.aO),B.cu)}} +A.Bj.prototype={ +gCu(a){return B.cU}, +gqm(){this.$ti.h("he<1>").a(this.b) +return B.EZ}, +gzR(){return null}, +Hx(a){var s +if(a instanceof A.nU){a.$ti.h("he<1>").a(a.b) +s=!0}else s=!1 +return s}, +qo(a,b,c){var s=null +return A.cH(s,s,this.$ti.h("he<1>").a(this.b).r,!1,s,!1,!0,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,!0,s,s,s,s,s,s,s,s)}, +zZ(a,b,c,d){return A.aK6(this,a,b,c,d,this.$ti.c)}} +A.aa0.prototype={ +$0(){return A.aW7(this.a)}, +$S:5} +A.aa1.prototype={ +$0(){var s=this.a,r=s.a +r.toString +s=s.at +s.toString +r.ao0() +return new A.Hm(s,r,this.b.h("Hm<0>"))}, +$S(){return this.b.h("Hm<0>()")}} +A.nU.prototype={ +goO(){this.$ti.h("he<1>").a(this.b) +return!0}, +gjO(){this.$ti.h("he<1>").a(this.b) +return!1}, +gmJ(){return A.fH.prototype.gmJ.call(this)+"("+A.h(this.$ti.h("he<1>").a(this.b).a)+")"}} +A.he.prototype={ +o9(a){var s=null,r=this.$ti,q=A.a([],t.Zt),p=$.aw,o=r.h("aD<1?>"),n=r.h("bI<1?>"),m=A.xm(B.cQ),l=A.a([],t.wi),k=$.aO(),j=$.aw +return new A.nU(s,!1,!0,!1,q,A.aS(t.kj),new A.bp(s,r.h("bp>")),new A.bp(s,t.B),new A.DN(),s,0,new A.bI(new A.aD(p,o),n),m,l,this,new A.ca(s,k,t.XR),new A.bI(new A.aD(j,o),n),r.h("nU<1>"))}} +A.Np.prototype={ +H(a){var s,r=this,q=a.ap(t.I) +q.toString +s=q.w +q=r.e +return A.aNe(A.aNe(new A.NB(q,r.f,q,null),r.c,s,!0),r.d,s,!1)}} +A.yP.prototype={ +ac(){return new A.yQ(B.j,this.$ti.h("yQ<1>"))}, +ap2(){return this.d.$0()}, +atR(){return this.e.$0()}} +A.yQ.prototype={ +aB(){var s,r=this +r.aR() +s=A.af3(r,null) +s.ay=r.gaht() +s.ch=r.gahv() +s.CW=r.gahr() +s.cx=r.gahp() +r.e=s}, +m(){var s=this.e +s===$&&A.b() +s.ok.a0(0) +s.mi() +this.aN()}, +ahu(a){this.d=this.a.atR()}, +ahw(a){var s,r,q=this.d +q.toString +s=a.c +s.toString +r=this.c +r=this.O0(s/r.gv(r).a) +q=q.a +s=q.x +s===$&&A.b() +q.sl(0,s-r)}, +ahs(a){var s,r=this,q=r.d +q.toString +s=r.c +q.Wf(r.O0(a.a.a.a/s.gv(s).a)) +r.d=null}, +ahq(){var s=this.d +if(s!=null)s.Wf(0) +this.d=null}, +ahy(a){var s +if(this.a.ap2()){s=this.e +s===$&&A.b() +s.mC(a)}}, +O0(a){var s=this.c.ap(t.I) +s.toString +switch(s.w.a){case 0:return-a +case 1:return a}}, +H(a){var s,r,q=null,p=a.ap(t.I) +p.toString +s=t.w +r=p.w===B.q?A.bt(a,B.b1,s).w.r.a:A.bt(a,B.b1,s).w.r.c +r=Math.max(r,20) +return A.kA(B.bM,A.a([this.a.c,new A.RK(0,0,0,r,A.D1(B.cf,q,q,this.gahx(),q,q,q),q)],t.p),B.a9,B.Ym)}} +A.Hm.prototype={ +Wf(a){var s,r,q,p,o=this +if(Math.abs(a)>=1)s=a<=0 +else{r=o.a.x +r===$&&A.b() +s=r>0.5}if(s){r=o.a +q=r.x +q===$&&A.b() +q=A.P(800,0,q) +q.toString +q=A.dp(0,Math.min(B.c.dP(q),300)) +r.z=B.aA +r.kj(1,B.o3,q)}else{o.b.ev() +r=o.a +q=r.r +if(q!=null&&q.a!=null){q=r.x +q===$&&A.b() +q=A.P(0,800,q) +q.toString +q=A.dp(0,B.c.dP(q)) +r.z=B.iI +r.kj(0,B.o3,q)}}q=r.r +if(q!=null&&q.a!=null){p=A.bc("animationStatusCallback") +p.b=new A.aus(o,p) +q=p.aI() +r.by() +r=r.cM$ +r.b=!0 +r.a.push(q)}else o.b.Ap()}} +A.aus.prototype={ +$1(a){var s=this.a +s.b.Ap() +s.a.dR(this.b.aI())}, +$S:6} +A.kT.prototype={ +dF(a,b){var s +if(a instanceof A.kT){s=A.auw(a,this,b) +s.toString +return s}s=A.auw(null,this,b) +s.toString +return s}, +dA(a,b){var s +if(a instanceof A.kT){s=A.auw(this,a,b) +s.toString +return s}s=A.auw(this,null,b) +s.toString +return s}, +HQ(a){return new A.auz(this,a)}, +j(a,b){var s,r +if(b==null)return!1 +if(J.U(b)!==A.t(this))return!1 +if(b instanceof A.kT){s=b.a +r=this.a +r=s==null?r==null:s===r +s=r}else s=!1 +return s}, +gt(a){return J.D(this.a)}} +A.aux.prototype={ +$1(a){var s=A.y(null,a,this.a) +s.toString +return s}, +$S:62} +A.auy.prototype={ +$1(a){var s=A.y(null,a,1-this.a) +s.toString +return s}, +$S:62} +A.auz.prototype={ +ee(a,b,c){var s,r,q,p,o,n,m,l,k,j,i,h=this.b.a +if(h==null)return +s=c.e +r=s.a +q=0.05*r +p=s.b +o=q/(h.length-1) +switch(c.d.a){case 0:n=b.a+r +m=1 +break +case 1:n=b.a +m=-1 +break +default:n=null +m=null}for(s=b.b,r=s+p,l=0,k=0;k").a(a.b) +s=this.AD$ +if(s==null)this.AD$=new A.ca(null,$.aO(),t.XR) +else s.sl(0,null) +this.a2J(a)}} +A.vR.prototype={ +ac(){return new A.Hq(new A.bp(null,t.B),null,null,B.j)}} +A.Hq.prototype={ +aB(){var s,r=this +r.Mo() +s=r.cy=A.c5(null,B.aD,null,null,r) +s.by() +s=s.cC$ +s.b=!0 +s.a.push(new A.auC(r))}, +wP(){var s,r,q,p=this,o=p.at +o===$&&A.b() +s=p.c +s.toString +s=B.KG.dS(s) +o.sM(0,s) +s=p.c.ap(t.I) +s.toString +o.sbS(s.w) +s=p.a +r=s.w +r.toString +q=p.cy +q===$&&A.b() +q=q.x +q===$&&A.b() +o.sKp(r+q*(s.fy-r)) +o.sJv(3) +o.sHW(3) +r=p.a +s=r.r +r=r.go +q=p.cy.x +q===$&&A.b() +q=A.Eg(s,r,q) +q.toString +o.sws(q) +q=p.c +q.toString +o.sdn(0,A.bt(q,B.b1,t.w).w.r) +o.sJE(0,36) +o.sY9(8) +o.sD5(p.a.db)}, +B_(a){var s,r=this +r.Mn(a) +s=r.nu() +if(s==null)return +switch(s.a){case 1:r.db=a.b +break +case 0:r.db=a.a +break}}, +AY(){if(this.nu()==null)return +this.a3b() +var s=this.cy +s===$&&A.b() +s.c7(0).ba(new A.auB(),t.H)}, +AZ(a,b){var s,r=this,q=r.nu() +if(q==null)return +s=r.cy +s===$&&A.b() +s.dc(0) +r.Mm(a,b) +switch(q.a){case 1:if(Math.abs(b.a.b)<10&&Math.abs(a.b-r.db)>0)A.Cn() +break +case 0:if(Math.abs(b.a.a)<10&&Math.abs(a.a-r.db)>0)A.Cn() +break}}, +m(){var s=this.cy +s===$&&A.b() +s.m() +this.Ml()}} +A.auC.prototype={ +$0(){this.a.wP()}, +$S:0} +A.auB.prototype={ +$1(a){return A.Cn()}, +$S:268} +A.a30.prototype={ +am(a,b){var s,r,q,p=$.W(),o=p.aj() +o.sM(0,this.b) +s=A.hv(B.UM,6) +r=A.fX(B.UN,new A.k(7,b.b)) +q=p.bD() +q.kr(s) +q.jA(r) +a.bP(q,o)}, +eX(a){return!this.b.j(0,a.b)}} +A.Nr.prototype={} +A.aa2.prototype={ +rX(a){return new A.G(12,a+12-1.5)}, +zW(a,b,c,d){var s,r,q,p=null,o=A.mE(p,p,p,new A.a30(A.iy(a).ghk(),p),B.Q) +switch(b.a){case 0:return A.TG(o,new A.G(12,c+12-1.5)) +case 1:s=c+12-1.5 +r=A.TG(o,new A.G(12,s)) +q=new A.bd(new Float64Array(16)) +q.de() +q.au(0,6,s/2) +q.pa(3.141592653589793) +q.au(0,-6,-s/2) +return A.ys(p,r,p,p,q,!0) +case 2:return B.aF}}, +rW(a,b){switch(a.a){case 0:return new A.k(6,b+12-1.5) +case 1:return new A.k(6,b+12-1.5-12+1.5) +case 2:return new A.k(6,b+(b+12-1.5-b)/2)}}} +A.Xf.prototype={} +A.Ns.prototype={ +H(a){var s,r,q=null,p=t.w,o=A.bt(a,B.b1,p).w.r,n=o.b+8,m=26+o.a,l=A.bt(a,B.fE,p).w.a.a-o.c-26 +p=this.c +s=new A.k(A.O(p.a,m,l),p.b-8-n) +p=this.d +r=new A.k(A.O(p.a,m,l),p.b+8-n) +return new A.bH(new A.aG(8,n,8,8),new A.mF(new A.UF(s,r,q),new A.Ht(s,r,this.e,A.b86(),q),q),q)}} +A.Xh.prototype={ +az(a){var s=new A.a0Q(this.e,this.f,this.r,A.ag(t.xG),null,A.ag(t.T)) +s.aw() +s.saP(null) +return s}, +aF(a,b){b.sal9(this.e) +b.sala(this.f) +b.scF(0,this.r)}} +A.a0Q.prototype={ +gf8(){return!0}, +sal9(a){if(a.j(0,this.A))return +this.A=a +this.a8()}, +sala(a){if(a.j(0,this.a1))return +this.a1=a +this.a8()}, +scF(a,b){if(J.d(b,this.al))return +this.al=b +this.ag()}, +grl(){var s=this.A,r=this.fr$ +r=r==null?null:r.gv(r).b +if(r==null)r=0 +return s.b>=r-14}, +bA(){var s,r=this,q=r.fr$ +if(q==null)return +s=t.k.a(A.r.prototype.gW.call(r)) +q.bJ(new A.az(30,1/0,0,1/0).qV(new A.az(0,s.b,0,s.d)),!0) +s=q.b +s.toString +t.r.a(s) +s.a=new A.k(0,r.grl()?-7:0) +r.id=new A.G(q.gv(q).a,q.gv(q).b-7)}, +a8d(a,b){var s,r,q,p,o,n=this,m=$.W().bD() +if(30>n.gv(n).a){m.ex(b) +return m}s=A.O(n.fZ(n.grl()?n.A:n.a1).a,15,n.gv(n).a-7-8) +r=s-7 +q=s+7 +if(n.grl()){p=a.gv(a).b-7 +o=a.gv(a) +m.d0(0,q,p) +m.b5(0,s,o.b) +m.b5(0,r,p)}else{m.d0(0,r,7) +m.b5(0,s,0) +m.b5(0,q,7)}r=A.b1T(m,b,n.grl()?1.5707963267948966:-1.5707963267948966) +r.aA(0) +return r}, +am(a,b){var s,r,q,p,o,n,m,l=this,k=l.fr$ +if(k==null)return +s=k.b +s.toString +t.r.a(s) +r=A.lH(new A.w(0,7,0+k.gv(k).a,7+(k.gv(k).b-14)),B.d9).t4() +q=l.a8d(k,r) +p=l.al +if(p!=null){o=A.aMB(r.a,r.b,r.c,r.d+7,B.d9).cm(b.R(0,s.a).R(0,B.e)) +a.gbe(a).bQ(o,new A.ep(0,B.cn,p,B.e,15).jk())}p=l.bg +n=l.cx +n===$&&A.b() +s=b.R(0,s.a) +m=k.gv(k) +p.sar(0,a.auC(n,s,new A.w(0,0,0+m.a,0+m.b),q,new A.azl(k),p.a))}, +m(){this.bg.sar(0,null) +this.eK()}, +cE(a,b){var s,r,q=this.fr$ +if(q==null)return!1 +s=q.b +s.toString +s=t.r.a(s).a +r=s.a +s=s.b+7 +if(!new A.w(r,s,r+q.gv(q).a,s+(q.gv(q).b-14)).p(0,b))return!1 +return this.a3t(a,b)}} +A.azj.prototype={ +$0(){return this.a.a}, +$S:237} +A.azk.prototype={ +$0(){return this.a.b}, +$S:270} +A.azl.prototype={ +$2(a,b){return a.ef(this.a,b)}, +$S:10} +A.Ht.prototype={ +ac(){return new A.Hu(new A.bp(null,t.B),null,null,B.j)}, +avB(a,b,c,d){return this.f.$4(a,b,c,d)}} +A.Hu.prototype={ +afs(a){var s=a.b +if(s!=null&&s!==0)if(s>0)this.PG() +else this.PE()}, +PE(){var s=this,r=$.aa.F$.z.i(0,s.r) +r=r==null?null:r.ga_() +t.aA.a(r) +if(r instanceof A.uS){r=r.F +r===$&&A.b()}else r=!1 +if(r){r=s.d +r===$&&A.b() +r.dc(0) +r=s.d +r.by() +r=r.cM$ +r.b=!0 +r.a.push(s.gzc()) +s.e=s.f+1}}, +PG(){var s=this,r=$.aa.F$.z.i(0,s.r) +r=r==null?null:r.ga_() +t.aA.a(r) +if(r instanceof A.uS){r=r.a9 +r===$&&A.b()}else r=!1 +if(r){r=s.d +r===$&&A.b() +r.dc(0) +r=s.d +r.by() +r=r.cM$ +r.b=!0 +r.a.push(s.gzc()) +s.e=s.f-1}}, +aiZ(a){var s,r=this +if(a!==B.K)return +r.a3(new A.auJ(r)) +s=r.d +s===$&&A.b() +s.c7(0) +r.d.dR(r.gzc())}, +aB(){this.aR() +this.d=A.c5(null,B.jV,null,1,this)}, +aO(a){var s,r=this +r.bb(a) +if(r.a.e!==a.e){r.f=0 +r.e=null +s=r.d +s===$&&A.b() +s.c7(0) +r.d.dR(r.gzc())}}, +m(){var s=this.d +s===$&&A.b() +s.m() +this.a5I()}, +H(a){var s,r,q,p=this,o=null,n=B.h3.dS(a),m=A.jh(A.aK7(A.ws(A.mE(o,o,o,new A.Zl(n,!0,o),B.Av),!0,o),p.gacN()),1,1),l=A.jh(A.aK7(A.ws(A.mE(o,o,o,new A.a1n(n,!1,o),B.Av),!0,o),p.gacp()),1,1),k=p.a.e,j=A.S(k).h("R<1,qZ>"),i=A.V(new A.R(k,new A.auK(),j),!0,j.h("af.E")) +j=p.a +k=j.c +s=j.d +r=p.d +r===$&&A.b() +q=p.f +return j.avB(a,k,s,A.fQ(!1,A.aJz(A.hn(o,new A.Hv(m,i,B.KE.dS(a),1/A.bt(a,B.cM,t.w).w.b,l,q,p.r),B.af,!1,o,o,o,o,p.gafr(),o,o,o,o,o,o,o,o,o,o,o,o,o,o),B.eb,B.jV),r))}} +A.auJ.prototype={ +$0(){var s=this.a,r=s.e +r.toString +s.f=r +s.e=null}, +$S:0} +A.auK.prototype={ +$1(a){return A.jh(a,1,1)}, +$S:272} +A.Zl.prototype={} +A.a1n.prototype={} +A.X9.prototype={ +am(a,b){var s,r,q,p,o=b.b,n=this.c,m=n?1:-1,l=new A.k(o/4*m,0) +m=o/2 +s=new A.k(m,0).R(0,l) +r=new A.k(n?0:o,m).R(0,l) +q=new A.k(m,o).R(0,l) +p=$.W().aj() +p.sM(0,this.b) +p.saG(0,B.D) +p.sbs(2) +p.sla(B.fq) +p.spr(B.lM) +a.ig(s,r,p) +a.ig(r,q,p)}, +eX(a){return!a.b.j(0,this.b)||a.c!==this.c}} +A.Hv.prototype={ +az(a){var s=new A.uS(A.A(t.TC,t.x),this.w,this.e,this.f,0,null,null,A.ag(t.T)) +s.aw() +return s}, +aF(a,b){b.sau6(0,this.w) +b.sao5(this.e) +b.sao6(this.f)}, +bI(a){var s=t.h +return new A.Xg(A.A(t.TC,s),A.ds(s),this,B.a0)}} +A.Xg.prototype={ +ga_(){return t.l0.a(A.bi.prototype.ga_.call(this))}, +Tx(a,b){var s +switch(b.a){case 0:s=t.l0.a(A.bi.prototype.ga_.call(this)) +s.aD=s.Te(s.aD,a,B.mm) +break +case 1:s=t.l0.a(A.bi.prototype.ga_.call(this)) +s.aE=s.Te(s.aE,a,B.mn) +break}}, +jR(a,b){var s,r +if(b instanceof A.uK){this.Tx(t.x.a(a),b) +return}if(b instanceof A.oQ){s=t.l0.a(A.bi.prototype.ga_.call(this)) +t.x.a(a) +r=b.a +r=r==null?null:r.ga_() +t.aA.a(r) +s.iJ(a) +s.Fw(a,r) +return}}, +k0(a,b,c){t.l0.a(A.bi.prototype.ga_.call(this)).wc(t.x.a(a),t.aA.a(c.a.ga_()))}, +kW(a,b){var s +if(b instanceof A.uK){this.Tx(null,b) +return}s=t.l0.a(A.bi.prototype.ga_.call(this)) +t.x.a(a) +s.G7(a) +s.oh(a)}, +b1(a){var s,r,q,p,o=this.ok +o.gaT(o).aa(0,a) +o=this.k4 +o===$&&A.b() +s=o.length +r=this.p1 +q=0 +for(;q0){q=k.aE.b +q.toString +m=t.U +m.a(q) +l=k.aD.b +l.toString +m.a(l) +if(k.X!==r){q.a=new A.k(o.aI(),0) +q.e=!0 +r=o.aI() +q=k.aE +o.b=r+q.gv(q).a}if(k.X>0){l.a=B.e +l.e=!0}}else o.b=o.aI()-k.aH +r=k.X +k.F=r!==j.c +k.a9=r>0 +k.id=s.a(A.r.prototype.gW.call(k)).bf(new A.G(o.aI(),j.a))}, +am(a,b){this.b1(new A.aze(this,b,a))}, +ew(a){if(!(a.b instanceof A.h_))a.b=new A.h_(null,null,B.e)}, +cE(a,b){var s,r,q=this.d8$ +for(s=t.U;q!=null;){r=q.b +r.toString +s.a(r) +if(!r.e){q=r.ci$ +continue}if(A.aHy(q,a,b))return!0 +q=r.ci$}if(A.aHy(this.aD,a,b))return!0 +if(A.aHy(this.aE,a,b))return!0 +return!1}, +ah(a){var s,r,q +this.a5P(a) +for(s=this.B,s=s.gaT(s),r=A.o(s),r=r.h("@<1>").N(r.z[1]),s=new A.bN(J.ap(s.a),s.b,r.h("bN<1,2>")),r=r.z[1];s.q();){q=s.a;(q==null?r.a(q):q).ah(a)}}, +ad(a){var s,r,q +this.a5Q(0) +for(s=this.B,s=s.gaT(s),r=A.o(s),r=r.h("@<1>").N(r.z[1]),s=new A.bN(J.ap(s.a),s.b,r.h("bN<1,2>")),r=r.z[1];s.q();){q=s.a;(q==null?r.a(q):q).ad(0)}}, +fT(){this.b1(new A.azh(this))}, +b1(a){var s=this.aD +if(s!=null)a.$1(s) +s=this.aE +if(s!=null)a.$1(s) +this.xF(a)}, +fX(a){this.b1(new A.azi(a))}} +A.azf.prototype={ +$1(a){var s,r +t.x.a(a) +s=this.b +r=a.d2(B.bc,t.k.a(A.r.prototype.gW.call(s)).b,a.gcb()) +s=this.a +if(r>s.a)s.a=r}, +$S:15} +A.azg.prototype={ +$1(a){var s,r,q,p,o,n,m,l=this,k=l.a,j=++k.d +t.x.a(a) +s=a.b +s.toString +t.U.a(s) +s.e=!1 +r=l.b +if(a===r.aD||a===r.aE||k.c>r.X)return +if(k.c===0)if(j===r.e_$+1)q=0 +else{j=r.aE +j=j.gv(j).a +q=j}else q=l.c +j=k.c===0?t.k.a(A.r.prototype.gW.call(r)).b:l.d.aI() +p=k.a +a.bJ(new A.az(0,j-q,p,p),!0) +if(k.b+q+a.gv(a).a>t.k.a(A.r.prototype.gW.call(r)).b){++k.c +j=r.aD +k.b=j.gv(j).a+r.aH +j=r.aD +j=j.gv(j) +p=r.aE +p=p.gv(p) +o=l.d.aI() +n=k.a +a.bJ(new A.az(0,o-(j.a+p.a),n,n),!0)}j=k.b +s.a=new A.k(j,0) +m=j+(a.gv(a).a+r.aH) +k.b=m +j=k.c +s.e=j===r.X +if(j===0){j=r.aE +l.d.b=m+j.gv(j).a}if(k.c===r.X)l.e.b=k.b}, +$S:15} +A.aze.prototype={ +$1(a){var s,r,q,p,o,n=this +t.x.a(a) +s=a.b +s.toString +t.U.a(s) +if(s.e){r=s.a.R(0,n.b) +q=n.c +q.ef(a,r) +if(s.ak$!=null||a===n.a.aD){s=q.gbe(q) +q=new A.k(a.gv(a).a,0).R(0,r) +p=new A.k(a.gv(a).a,a.gv(a).b).R(0,r) +o=$.W().aj() +o.sM(0,n.a.aq) +s.ig(q,p,o)}}}, +$S:15} +A.azd.prototype={ +$2(a,b){return this.c.cD(a,b)}, +$S:17} +A.azh.prototype={ +$1(a){this.a.kV(t.x.a(a))}, +$S:15} +A.azi.prototype={ +$1(a){var s +t.x.a(a) +s=a.b +s.toString +if(t.U.a(s).e)this.a.$1(a)}, +$S:15} +A.uK.prototype={ +I(){return"_CupertinoTextSelectionToolbarItemsSlot."+this.b}} +A.a_h.prototype={} +A.a_i.prototype={ +bI(a){return A.T(A.co(null))}} +A.KI.prototype={ +bY(){this.dq() +this.cW() +this.f2()}, +m(){var s=this,r=s.b9$ +if(r!=null)r.K(0,s.geM()) +s.b9$=null +s.aN()}} +A.KS.prototype={ +ah(a){var s,r,q +this.dg(a) +s=this.a4$ +for(r=t.U;s!=null;){s.ah(a) +q=s.b +q.toString +s=r.a(q).ak$}}, +ad(a){var s,r,q +this.dh(0) +s=this.a4$ +for(r=t.U;s!=null;){s.ad(0) +q=s.b +q.toString +s=r.a(q).ak$}}} +A.a4P.prototype={} +A.ox.prototype={ +ac(){return new A.Hs(B.j)}} +A.Hs.prototype={ +afE(a){this.a3(new A.auH(this))}, +afG(a){this.a3(new A.auI(this)) +this.a.d.$0()}, +afC(){this.a3(new A.auG(this))}, +H(a){var s=this,r=null,q=s.aay(a),p=s.d?B.KA.dS(a):B.n,o=A.a9W(B.ah,r,q,p,B.n,44,s.a.d,B.LG,1) +p=A.hn(r,o,B.af,!1,r,r,r,r,r,r,r,r,r,r,r,r,r,r,r,r,s.gafB(),s.gafD(),s.gafF()) +return p}, +aay(a){var s,r=null,q=this.a,p=q.c +if(p!=null)return p +p=q.f +if(p==null){q=q.e +q.toString +q=A.aK8(a,q)}else q=p +this.a.toString +p=B.h3.dS(a) +s=A.bj(q,r,B.cj,B.a16.ey(p),r) +q=this.a.e +if(q==null)return s +switch(q.b.a){case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:case 9:return s +case 8:q=B.h3.dS(a) +p=$.W().aj() +p.sla(B.fq) +p.spr(B.lM) +p.sbs(1) +p.saG(0,B.D) +return A.eC(A.mE(r,r,r,new A.ZG(q,p,r),B.Q),13,13)}}} +A.auH.prototype={ +$0(){return this.a.d=!0}, +$S:0} +A.auI.prototype={ +$0(){return this.a.d=!1}, +$S:0} +A.auG.prototype={ +$0(){return this.a.d=!1}, +$S:0} +A.ZG.prototype={ +am(a,b){var s,r,q,p,o,n=this.c +n.sM(0,this.b) +a.bH(0) +s=b.a +r=b.b +a.au(0,s/2,r/2) +s=-s/2 +r=-r/2 +q=$.W().bD() +q.d0(0,s,r+3.5) +q.b5(0,s,r+1) +q.Up(new A.k(s+1,r),B.zq) +q.b5(0,s+3.5,r) +s=new Float64Array(16) +p=new A.bd(s) +p.de() +p.pa(1.5707963267948966) +for(o=0;o<4;++o){a.bP(q,n) +a.a2(0,s)}a.ig(B.V6,B.UL,n) +a.ig(B.V4,B.UJ,n) +a.ig(B.V5,B.UG,n) +a.b_(0)}, +eX(a){return!a.b.j(0,this.b)}} +A.ra.prototype={ +gjj(){var s=this.c,r=this.a.a +s=B.dE.j(0,r)?B.B6:B.B6.ey(r) +return s}, +gBy(){var s=this.f,r=this.a.a +s=B.dE.j(0,r)?B.B_:B.B_.ey(r) +return s}, +gYd(){var s=B.a_D.ey(this.b) +return s}, +dS(a){var s=this,r=s.a,q=r.a,p=q instanceof A.dH?q.dS(a):q,o=r.b +if(o instanceof A.dH)o=o.dS(a) +r=p.j(0,q)&&o.j(0,B.h2)?r:new A.K4(p,o) +return new A.ra(r,A.r9(s.b,a),A.v3(s.c,a),A.v3(s.d,a),A.v3(s.e,a),A.v3(s.f,a),A.v3(s.r,a),A.v3(s.w,a),A.v3(s.x,a),A.v3(s.y,a))}, +j(a,b){var s,r=this +if(b==null)return!1 +if(r===b)return!0 +if(J.U(b)!==A.t(r))return!1 +if(b instanceof A.ra)if(b.a.j(0,r.a))if(J.d(b.b,r.b))s=!0 +else s=!1 +else s=!1 +else s=!1 +return s}, +gt(a){var s=this +return A.N(s.a,s.b,s.c,s.d,s.e,s.f,s.r,s.w,s.x,s.y,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}} +A.K4.prototype={ +j(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +if(J.U(b)!==A.t(s))return!1 +return b instanceof A.K4&&b.a.j(0,s.a)&&b.b.j(0,s.b)}, +gt(a){return A.N(this.a,this.b,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}} +A.Xi.prototype={} +A.Nt.prototype={ +H(a){var s=null +return new A.I4(this,A.Pn(this.d,A.aK5(this.c.ghk(),s,s,s,s,s,s,s),s),s)}} +A.I4.prototype={ +cs(a){return!this.f.c.j(0,a.f.c)}} +A.vS.prototype={ +ghk(){var s=this.b +return s==null?this.w.b:s}, +gnm(){var s=this.c +return s==null?this.w.c:s}, +gkc(){var s=null,r=this.d +if(r==null){r=this.w.r +r=new A.auR(r.a,r.b,B.a75,this.ghk(),s,s,s,s,s,s,s,s)}return r}, +gnZ(){var s=this.e +return s==null?this.w.d:s}, +gnx(){var s=this.f +return s==null?this.w.e:s}, +gqh(){var s=this.r +return s==null?!1:s}, +dS(a){var s,r=this,q=new A.aa3(a),p=r.gmE(),o=q.$1(r.b),n=q.$1(r.c),m=r.d +m=m==null?null:m.dS(a) +s=q.$1(r.e) +q=q.$1(r.f) +r.gqh() +return A.aWa(p,o,n,m,s,q,!1,r.w.av2(a,r.d==null))}, +j(a,b){var s,r=this +if(b==null)return!1 +if(r===b)return!0 +if(J.U(b)!==A.t(r))return!1 +if(b instanceof A.vS)if(b.gmE()==r.gmE())if(b.ghk().j(0,r.ghk()))if(b.gnm().j(0,r.gnm()))if(b.gkc().j(0,r.gkc()))if(b.gnZ().j(0,r.gnZ()))if(b.gnx().j(0,r.gnx())){b.gqh() +r.gqh() +s=!0}else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +return s}, +gt(a){var s=this,r=s.gmE(),q=s.ghk(),p=s.gnm(),o=s.gkc(),n=s.gnZ(),m=s.gnx() +s.gqh() +return A.N(r,q,p,o,n,m,!1,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}} +A.aa3.prototype={ +$1(a){return A.r9(a,this.a)}, +$S:236} +A.Dz.prototype={ +dS(a){var s=this,r=new A.aiF(a),q=s.gmE(),p=r.$1(s.ghk()),o=r.$1(s.gnm()),n=s.gkc() +n=n==null?null:n.dS(a) +return new A.Dz(q,p,o,n,r.$1(s.gnZ()),r.$1(s.gnx()),s.gqh())}, +gmE(){return this.a}, +ghk(){return this.b}, +gnm(){return this.c}, +gkc(){return this.d}, +gnZ(){return this.e}, +gnx(){return this.f}, +gqh(){return this.r}} +A.aiF.prototype={ +$1(a){return A.r9(a,this.a)}, +$S:236} +A.Xl.prototype={ +av2(a,b){var s,r,q=this,p=new A.auL(a),o=p.$1(q.b),n=p.$1(q.c),m=p.$1(q.d) +p=p.$1(q.e) +s=q.r +if(b){r=s.a +if(r instanceof A.dH)r=r.dS(a) +s=s.b +s=new A.Xj(r,s instanceof A.dH?s.dS(a):s)}return new A.Xl(q.a,o,n,m,p,!1,s)}} +A.auL.prototype={ +$1(a){return a instanceof A.dH?a.dS(this.a):a}, +$S:62} +A.Xj.prototype={} +A.auR.prototype={ +gjj(){return A.ra.prototype.gjj.call(this).ey(this.z)}, +gBy(){return A.ra.prototype.gBy.call(this).ey(this.z)}} +A.Xk.prototype={} +A.aDb.prototype={ +$0(){return null}, +$S:276} +A.aCk.prototype={ +$0(){var s=self,r=s.window.navigator.platform.toLowerCase() +if(B.d.bz(r,"mac"))return B.c1 +if(B.d.bz(r,"win"))return B.di +if(B.d.p(r,"iphone")||B.d.p(r,"ipad")||B.d.p(r,"ipod"))return B.au +if(B.d.p(r,"android"))return B.ba +if(s.window.matchMedia("only screen and (pointer: fine)").matches)return B.dh +return B.ba}, +$S:233} +A.q3.prototype={ +wI(a,b){var s=A.hP.prototype.gl.call(this,this) +s.toString +return J.aJo(s)}, +k(a){return this.wI(a,B.aR)}} +A.w6.prototype={} +A.Oo.prototype={} +A.Ol.prototype={} +A.bG.prototype={ +apn(){var s,r,q,p,o,n,m,l=this.a +if(t.vp.b(l)){s=l.gjZ(l) +r=l.k(0) +if(typeof s=="string"&&s!==r){q=r.length +p=J.aF(s) +if(q>p.gu(s)){o=B.d.rq(r,s) +if(o===q-p.gu(s)&&o>2&&B.d.P(r,o-2,o)===": "){n=B.d.P(r,0,o-2) +m=B.d.cS(n," Failed assertion:") +if(m>=0)n=B.d.P(n,0,m)+"\n"+B.d.bL(n,m+1) +l=p.KF(s)+"\n"+n}else l=null}else l=null}else l=null +if(l==null)l=r}else if(!(typeof l=="string"))l=t.Lt.b(l)||t.VI.b(l)?J.f0(l):" "+A.h(l) +l=B.d.KF(l) +return l.length===0?" ":l}, +ga1S(){return A.aWs(new A.acV(this).$0(),!0,B.jU)}, +dd(){return"Exception caught by "+this.c}, +k(a){A.b1i(null,B.KU,this) +return""}} +A.acV.prototype={ +$0(){return J.aV4(this.a.apn().split("\n")[0])}, +$S:41} +A.rx.prototype={ +gjZ(a){return this.k(0)}, +dd(){return"FlutterError"}, +k(a){var s,r,q=new A.dG(this.a,t.ow) +if(!q.ga7(q)){s=q.gL(q) +r=J.fo(s) +s=A.hP.prototype.gl.call(r,s) +s.toString +s=J.aJo(s)}else s="FlutterError" +return s}, +$iqA:1} +A.acW.prototype={ +$1(a){return A.bo(a)}, +$S:278} +A.acX.prototype={ +$1(a){return a+1}, +$S:42} +A.acY.prototype={ +$1(a){return a+1}, +$S:42} +A.aDA.prototype={ +$1(a){return B.d.p(a,"StackTrace.current")||B.d.p(a,"dart-sdk/lib/_internal")||B.d.p(a,"dart:sdk_internal")}, +$S:36} +A.Yr.prototype={} +A.Yt.prototype={} +A.Ys.prototype={} +A.Mk.prototype={ +hg(){}, +oF(){}, +asu(a){var s;++this.c +s=a.$0() +s.ix(new A.a7I(this)) +return s}, +KI(){}, +k(a){return""}} +A.a7I.prototype={ +$0(){var s,r,q,p=this.a +if(--p.c<=0)try{p.a5r() +if(p.p1$.c!==0)p.Oy()}catch(q){s=A.ax(q) +r=A.aZ(q) +p=A.bo("while handling pending events") +A.d4(new A.bG(s,r,"foundation",p,null,!1))}}, +$S:19} +A.aj.prototype={} +A.GE.prototype={} +A.f3.prototype={ +Z(a,b){var s,r,q,p,o=this +if(o.gdt(o)===o.gcG().length){s=t.Nw +if(o.gdt(o)===0)o.scG(A.bf(1,null,!1,s)) +else{r=A.bf(o.gcG().length*2,null,!1,s) +for(q=0;q0){r.gcG()[s]=null +r.siH(r.giH()+1)}else r.yT(s) +break}}, +m(){this.scG($.aO()) +this.sdt(0,0)}, +a6(){var s,r,q,p,o,n,m,l,k,j,i,h,g,f=this +if(f.gdt(f)===0)return +f.shX(f.ghX()+1) +p=f.gdt(f) +for(s=0;s0){l=f.gdt(f)-f.giH() +if(l*2<=f.gcG().length){k=A.bf(l,null,!1,t.Nw) +for(j=0,s=0;s#"+A.bh(this)+"("+A.h(this.gl(this))+")"}} +A.Bs.prototype={ +I(){return"DiagnosticLevel."+this.b}} +A.lf.prototype={ +I(){return"DiagnosticsTreeStyle."+this.b}} +A.ayl.prototype={} +A.f6.prototype={ +wI(a,b){return this.c4(0)}, +k(a){return this.wI(a,B.aR)}} +A.hP.prototype={ +gl(a){this.aeL() +return this.at}, +aeL(){return}} +A.rg.prototype={} +A.NQ.prototype={} +A.aq.prototype={ +dd(){return"#"+A.bh(this)}, +wI(a,b){var s=this.dd() +return s}, +k(a){return this.wI(a,B.aR)}} +A.NP.prototype={ +dd(){return"#"+A.bh(this)}} +A.k5.prototype={ +k(a){return this.ZH(B.jU).c4(0)}, +dd(){return"#"+A.bh(this)}, +avo(a,b){return A.aFy(a,b,this)}, +ZH(a){return this.avo(null,a)}} +A.NR.prototype={} +A.XC.prototype={} +A.ho.prototype={} +A.hq.prototype={} +A.pU.prototype={ +k(a){return"[#"+A.bh(this)+"]"}} +A.dN.prototype={ +j(a,b){if(b==null)return!1 +if(J.U(b)!==A.t(this))return!1 +return A.o(this).h("dN").b(b)&&J.d(b.a,this.a)}, +gt(a){return A.N(A.t(this),this.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a){var s=A.o(this),r=s.h("dN.T"),q=this.a,p=A.cf(r)===B.a4w?"<'"+A.h(q)+"'>":"<"+A.h(q)+">" +if(A.t(this)===A.cf(s.h("dN")))return"["+p+"]" +return"["+A.cf(r).k(0)+" "+p+"]"}} +A.aHC.prototype={} +A.jp.prototype={} +A.CV.prototype={} +A.b5.prototype={ +gyM(){var s,r=this,q=r.c +if(q===$){s=A.ds(r.$ti.c) +r.c!==$&&A.ay() +r.c=s +q=s}return q}, +C(a,b){this.b=!0 +this.gyM().a0(0) +return B.b.C(this.a,b)}, +a0(a){this.b=!1 +B.b.a0(this.a) +this.gyM().a0(0)}, +p(a,b){var s=this,r=s.a +if(r.length<3)return B.b.p(r,b) +if(s.b){s.gyM().E(0,r) +s.b=!1}return s.gyM().p(0,b)}, +gab(a){var s=this.a +return new J.cp(s,s.length,A.S(s).h("cp<1>"))}, +ga7(a){return this.a.length===0}, +gc8(a){return this.a.length!==0}, +eU(a,b){var s=this.a,r=A.S(s) +return b?A.a(s.slice(0),r):J.rQ(s.slice(0),r.c)}, +dI(a){return this.eU(a,!0)}} +A.Co.prototype={ +D(a,b){var s=this.a,r=s.i(0,b) +s.n(0,b,(r==null?0:r)+1)}, +C(a,b){var s=this.a,r=s.i(0,b) +if(r==null)return!1 +if(r===1)s.C(0,b) +else s.n(0,b,r-1) +return!0}, +p(a,b){return this.a.ai(0,b)}, +gab(a){var s=this.a +return A.lw(s,s.r,A.o(s).c)}, +ga7(a){return this.a.a===0}, +gc8(a){return this.a.a!==0}} +A.x9.prototype={ +auF(a,b,c){var s=this.a,r=s==null?$.Lu():s,q=r.kU(0,0,b,A.fE(b),c) +if(q===s)return this +s=this.$ti +return new A.x9(q,s.h("@<1>").N(s.z[1]).h("x9<1,2>"))}, +i(a,b){var s=this.a +if(s==null)return null +return s.rU(0,0,b,J.D(b))}} +A.aBG.prototype={} +A.YB.prototype={ +kU(a,b,c,d,e){var s,r,q,p,o=B.f.q1(d,b)&31,n=this.a,m=n[o] +if(m==null)m=$.Lu() +s=m.kU(0,b+5,c,d,e) +if(s===m)n=this +else{r=n.length +q=A.bf(r,null,!1,t.X) +for(p=0;p>>0,a1=c.a,a2=(a1&a0-1)>>>0,a3=a2-(a2>>>1&1431655765) +a3=(a3&858993459)+(a3>>>2&858993459) +a3=a3+(a3>>>4)&252645135 +a3+=a3>>>8 +s=a3+(a3>>>16)&63 +if((a1&a0)>>>0!==0){a=c.b +a2=2*s +r=a[a2] +q=a2+1 +p=a[q] +if(r==null){o=J.aUU(p,a5+5,a6,a7,a8) +if(o===p)return c +a2=a.length +n=A.bf(a2,b,!1,t.X) +for(m=0;m>>1&1431655765) +a3=(a3&858993459)+(a3>>>2&858993459) +a3=a3+(a3>>>4)&252645135 +a3+=a3>>>8 +i=a3+(a3>>>16)&63 +if(i>=16){a1=c.adT(a5) +a1.a[a]=$.Lu().kU(0,a5+5,a6,a7,a8) +return a1}else{h=2*s +g=2*i +f=A.bf(g+2,b,!1,t.X) +for(a=c.b,e=0;e>>0,f)}}}, +rU(a,b,c,d){var s,r,q,p,o=1<<(B.f.q1(d,b)&31)>>>0,n=this.a +if((n&o)>>>0===0)return null +n=(n&o-1)>>>0 +s=n-(n>>>1&1431655765) +s=(s&858993459)+(s>>>2&858993459) +s=s+(s>>>4)&252645135 +s+=s>>>8 +n=this.b +r=2*(s+(s>>>16)&63) +q=n[r] +p=n[r+1] +if(q==null)return p.rU(0,b+5,c,d) +if(J.d(c,q))return p +return null}, +adT(a){var s,r,q,p,o,n,m,l=A.bf(32,null,!1,t.X) +for(s=this.a,r=a+5,q=this.b,p=0,o=0;o<32;++o)if((B.f.q1(s,o)&1)!==0){n=q[p] +m=p+1 +if(n==null)l[o]=q[m] +else l[o]=$.Lu().kU(0,r,n,J.D(n),q[m]) +p+=2}return new A.YB(l)}} +A.I_.prototype={ +kU(a,b,c,d,e){var s,r,q,p,o,n,m,l,k,j=this,i=j.a +if(d===i){s=j.PU(c) +if(s!==-1){i=j.b +r=s+1 +q=i[r] +if(q==null?e==null:q===e)i=j +else{q=i.length +p=A.bf(q,null,!1,t.X) +for(o=0;o>>0,k).kU(0,b,c,d,e)}, +rU(a,b,c,d){var s=this.PU(c) +return s<0?null:this.b[s+1]}, +PU(a){var s,r,q=this.b,p=q.length +for(s=J.ja(a),r=0;r=s.a.length)s.Gd(q) +B.O.dW(s.a,s.b,q,a) +s.b+=r}, +ui(a,b,c){var s=this,r=c==null?s.e.length:c,q=s.b+(r-b) +if(q>=s.a.length)s.Gd(q) +B.O.dW(s.a,s.b,q,a) +s.b=q}, +ai9(a){return this.ui(a,0,null)}, +Gd(a){var s=this.a,r=s.length,q=a==null?0:a,p=Math.max(q,r*2),o=new Uint8Array(p) +B.O.dW(o,0,r,s) +this.a=o}, +ahf(){return this.Gd(null)}, +km(a){var s=B.f.bF(this.b,a) +if(s!==0)this.ui($.aSN(),0,a-s)}, +mP(){var s,r=this +if(r.c)throw A.c(A.Q("done() must not be called more than once on the same "+A.t(r).k(0)+".")) +s=A.fC(r.a.buffer,0,r.b) +r.a=new Uint8Array(0) +r.c=!0 +return s}} +A.El.prototype={ +kf(a){return this.a.getUint8(this.b++)}, +CQ(a){var s=this.b,r=$.e5() +B.f_.L3(this.a,s,r)}, +mb(a){var s=this.a,r=A.dD(s.buffer,s.byteOffset+this.b,a) +this.b+=a +return r}, +CR(a){var s +this.km(8) +s=this.a +B.vD.Ur(s.buffer,s.byteOffset+this.b,a)}, +km(a){var s=this.b,r=B.f.bF(s,a) +if(r!==0)this.b=s+(a-r)}} +A.kB.prototype={ +gt(a){var s=this +return A.N(s.b,s.d,s.f,s.r,s.w,s.x,s.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a,b){var s=this +if(b==null)return!1 +if(J.U(b)!==A.t(s))return!1 +return b instanceof A.kB&&b.b===s.b&&b.d===s.d&&b.f===s.f&&b.r===s.r&&b.w===s.w&&b.x===s.x&&b.a===s.a}, +k(a){var s=this +return"StackFrame(#"+s.b+", "+s.c+":"+s.d+"/"+s.e+":"+s.f+":"+s.r+", className: "+s.w+", method: "+s.x+")"}} +A.ap8.prototype={ +$1(a){return a.length!==0}, +$S:36} +A.bK.prototype={ +qt(a,b){return new A.aD($.aw,this.$ti.h("aD<1>"))}, +o2(a){return this.qt(a,null)}, +fV(a,b,c){var s=a.$1(this.a) +if(c.h("ae<0>").b(s))return s +return new A.bK(s,c.h("bK<0>"))}, +ba(a,b){return this.fV(a,null,b)}, +ix(a){var s,r,q,p,o,n=this +try{s=a.$0() +if(t.L0.b(s)){p=s.ba(new A.apR(n),n.$ti.c) +return p}return n}catch(o){r=A.ax(o) +q=A.aZ(o) +p=A.aFY(r,q,n.$ti.c) +return p}}, +$iae:1} +A.apR.prototype={ +$1(a){return this.a.a}, +$S(){return this.a.$ti.h("1(@)")}} +A.P1.prototype={ +I(){return"GestureDisposition."+this.b}} +A.dA.prototype={} +A.wk.prototype={ +U(a){this.a.pU(this.b,this.c,a)}} +A.yZ.prototype={ +k(a){var s=this,r=s.a +r=r.length===0?""+"":""+new A.R(r,new A.avS(s),A.S(r).h("R<1,f>")).c_(0,", ") +if(s.b)r+=" [open]" +if(s.c)r+=" [held]" +if(s.d)r+=" [hasPendingSweep]" +return r.charCodeAt(0)==0?r:r}} +A.avS.prototype={ +$1(a){if(a===this.a.e)return a.k(0)+" (eager winner)" +return a.k(0)}, +$S:282} +A.adJ.prototype={ +uz(a,b,c){this.a.bm(0,b,new A.adL(this,b)).a.push(c) +return new A.wk(this,b,c)}, +amu(a,b){var s=this.a.i(0,b) +if(s==null)return +s.b=!1 +this.T2(b,s)}, +ME(a){var s,r=this.a,q=r.i(0,a) +if(q==null)return +if(q.c){q.d=!0 +return}r.C(0,a) +r=q.a +if(r.length!==0){B.b.gL(r).i3(a) +for(s=1;s").N(q.z[1]),r=new A.bN(J.ap(r.a),r.b,q.h("bN<1,2>")),p=n.r,q=q.z[1];r.q();){o=r.a;(o==null?q.a(o):o).awk(0,p)}s.a0(0) +n.c=B.z +s=n.y +if(s!=null)s.b3(0)}} +A.wl.prototype={ +acx(a){var s,r,q,p,o=this +try{o.bM$.E(0,A.aZ6(a.a,o.ga9b())) +if(o.c<=0)o.F2()}catch(q){s=A.ax(q) +r=A.aZ(q) +p=A.bo("while handling a pointer data packet") +A.d4(new A.bG(s,r,"gestures library",p,null,!1))}}, +a9c(a){var s +if($.b8().e.i(0,a)==null)s=null +else{s=$.c4().d +if(s==null){s=self.window.devicePixelRatio +if(s===0)s=1}}return s}, +am6(a){var s=this.bM$ +if(s.b===s.c&&this.c<=0)A.fq(this.gaag()) +s.zC(A.aMq(0,0,0,0,0,B.aE,!1,0,a,B.e,1,1,0,0,0,0,0,0,B.z,0))}, +F2(){for(var s=this.bM$;!s.ga7(s);)this.IV(s.wx())}, +IV(a){this.gRs().ff(0) +this.PF(a)}, +PF(a){var s,r,q=this,p=!t.pY.b(a) +if(!p||t.ks.b(a)||t.XA.b(a)||t.w5.b(a)){s=A.aeY() +q.vM(s,a.gbv(a),a.grR()) +if(!p||t.w5.b(a))q.d9$.n(0,a.gbN(),s) +p=s}else if(t.oN.b(a)||t.Ko.b(a)||t.WQ.b(a)){s=q.d9$.C(0,a.gbN()) +p=s}else p=a.gAs()||t.DB.b(a)?q.d9$.i(0,a.gbN()):null +if(p!=null||t.ge.b(a)||t.PB.b(a)){r=q.ay$ +r.toString +r.avY(a,t.n2.b(a)?null:p) +q.a2n(0,a,p)}}, +vM(a,b,c){a.D(0,new A.iI(this,t.AL))}, +ao3(a,b,c){var s,r,q,p,o,n,m,l,k,j,i="gesture library" +if(c==null){try{this.bc$.Zy(b)}catch(p){s=A.ax(p) +r=A.aZ(p) +A.d4(A.aXq(A.bo("while dispatching a non-hit-tested pointer event"),b,s,null,new A.adO(b),i,r))}return}for(n=c.a,m=n.length,l=0;l0.4){r.dy=B.iM +r.U(B.cd)}else if(a.gqF().gAr()>A.qq(a.gcN(a),r.b))r.U(B.an) +if(s>0.4&&r.dy===B.BC){r.dy=B.iM +if(r.at!=null)r.cT("onStart",new A.adu(r,s))}}r.Dt(a)}, +i3(a){var s=this,r=s.dy +if(r===B.iL)r=s.dy=B.BC +if(s.at!=null&&r===B.iM)s.cT("onStart",new A.ads(s))}, +ve(a){var s=this,r=s.dy,q=r===B.iM||r===B.a6a +if(r===B.iL){s.U(B.an) +return}if(q&&s.ch!=null)if(s.ch!=null)s.cT("onEnd",new A.adt(s)) +s.dy=B.mq}, +fU(a){this.jt(a) +this.ve(a)}} +A.adu.prototype={ +$0(){var s=this.a,r=s.at +r.toString +s=s.db +s===$&&A.b() +return r.$1(new A.rC(s.b))}, +$S:0} +A.ads.prototype={ +$0(){var s=this.a,r=s.at +r.toString +s.dx===$&&A.b() +s=s.db +s===$&&A.b() +return r.$1(new A.rC(s.b))}, +$S:0} +A.adt.prototype={ +$0(){var s=this.a,r=s.ch +r.toString +s=s.db +s===$&&A.b() +return r.$1(new A.rC(s.b))}, +$S:0} +A.NO.prototype={ +gt(a){return A.N(this.a,23,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a,b){if(b==null)return!1 +if(J.U(b)!==A.t(this))return!1 +return b instanceof A.NO&&b.a==this.a}, +k(a){return"DeviceGestureSettings(touchSlop: "+A.h(this.a)+")"}} +A.iI.prototype={ +k(a){return"#"+A.bh(this)+"("+this.a.k(0)+")"}} +A.zD.prototype={} +A.Is.prototype={ +cP(a,b){return this.a.eS(b)}} +A.zg.prototype={ +cP(a,b){var s,r,q,p,o=new Float64Array(16),n=new A.bd(o) +n.aW(b) +s=this.a +r=s.a +q=s.b +s=o[0] +p=o[3] +o[0]=s+r*p +o[1]=o[1]+q*p +o[2]=o[2]+0*p +o[3]=p +p=o[4] +s=o[7] +o[4]=p+r*s +o[5]=o[5]+q*s +o[6]=o[6]+0*s +o[7]=s +s=o[8] +p=o[11] +o[8]=s+r*p +o[9]=o[9]+q*p +o[10]=o[10]+0*p +o[11]=p +p=o[12] +s=o[15] +o[12]=p+r*s +o[13]=o[13]+q*s +o[14]=o[14]+0*s +o[15]=s +return n}} +A.mT.prototype={ +aaY(){var s,r,q,p,o=this.c +if(o.length===0)return +s=this.b +r=B.b.gO(s) +for(q=o.length,p=0;p":B.b.c_(s,", "))+")"}} +A.wN.prototype={} +A.D4.prototype={} +A.wM.prototype={} +A.i0.prototype={ +il(a){var s,r=this +switch(a.gdY(a)){case 1:if(r.p1==null&&r.p3==null&&r.p2==null&&r.p4==null&&r.RG==null&&r.R8==null)return!1 +break +case 2:s=!0 +if(s)return!1 +break +case 4:s=!0 +if(s)return!1 +break +default:return!1}return r.pw(a)}, +Ia(){var s,r=this +r.U(B.cd) +r.k2=!0 +s=r.CW +s.toString +r.Mi(s) +r.a81()}, +X2(a){var s,r=this +if(!a.gtB()){if(t.pY.b(a)){s=a.gcN(a) +$.mp() +s=new A.kJ(s,new A.lT(),A.bf(20,null,!1,t.av)) +r.bt=s +s.qb(a.giu(a),a.gbR())}if(t.n2.b(a)){s=r.bt +s.toString +s.qb(a.giu(a),a.gbR())}}if(t.oN.b(a)){if(r.k2)r.a8_(a) +else r.U(B.an) +r.Gc()}else if(t.Ko.b(a)){r.Nt() +r.Gc()}else if(t.pY.b(a)){r.k3=new A.fU(a.gbR(),a.gbv(a)) +r.k4=a.gdY(a) +r.a7Z(a)}else if(t.n2.b(a))if(a.gdY(a)!==r.k4&&!r.k2){r.U(B.an) +s=r.CW +s.toString +r.jt(s)}else if(r.k2)r.a80(a)}, +a7Z(a){this.k3.toString +this.e.i(0,a.gbN()).toString +switch(this.k4){case 1:break +case 2:break +case 4:break}}, +Nt(){var s,r=this +if(r.ch===B.hk)switch(r.k4){case 1:s=r.p1 +if(s!=null)r.cT("onLongPressCancel",s) +break +case 2:break +case 4:break}}, +a81(){var s,r,q=this +switch(q.k4){case 1:if(q.p3!=null){s=q.k3 +r=s.b +s=s.a +q.cT("onLongPressStart",new A.ahf(q,new A.wN(r,s)))}s=q.p2 +if(s!=null)q.cT("onLongPress",s) +break +case 2:break +case 4:break}}, +a80(a){var s=this,r=a.gbv(a),q=a.gbR(),p=a.gbv(a).Y(0,s.k3.b) +a.gbR().Y(0,s.k3.a) +switch(s.k4){case 1:if(s.p4!=null)s.cT("onLongPressMoveUpdate",new A.ahe(s,new A.D4(r,q,p))) +break +case 2:break +case 4:break}}, +a8_(a){var s,r=this,q=r.bt.xc(),p=q==null?B.dn:new A.jL(q.a) +a.gbv(a) +s=a.gbR() +r.bt=null +switch(r.k4){case 1:if(r.RG!=null)r.cT("onLongPressEnd",new A.ahd(r,new A.wM(s,p))) +s=r.R8 +if(s!=null)r.cT("onLongPressUp",s) +break +case 2:break +case 4:break}}, +Gc(){var s=this +s.k2=!1 +s.bt=s.k4=s.k3=null}, +U(a){var s=this +if(a===B.an)if(s.k2)s.Gc() +else s.Nt() +s.Mc(a)}, +i3(a){}} +A.ahf.prototype={ +$0(){return this.a.p3.$1(this.b)}, +$S:0} +A.ahe.prototype={ +$0(){return this.a.p4.$1(this.b)}, +$S:0} +A.ahd.prototype={ +$0(){return this.a.RG.$1(this.b)}, +$S:0} +A.o1.prototype={ +i(a,b){return this.c[b+this.a]}, +S(a,b){var s,r,q,p,o,n,m +for(s=this.b,r=this.c,q=this.a,p=b.c,o=b.a,n=0,m=0;m"),q=A.rO(A.V(new A.R(s,new A.ak2(),r),!0,r.h("af.E")),"[","]") +r=this.b +r===$&&A.b() +return"PolynomialFit("+q+", confidence: "+B.c.af(r,3)+")"}} +A.ak2.prototype={ +$1(a){return B.c.ZN(a,3)}, +$S:289} +A.PS.prototype={ +LO(a6){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,a2,a3,a4=this.a,a5=a4.length +if(a6>a5)return null +s=a6+1 +r=new A.ak1(new Float64Array(s)) +q=s*a5 +p=new Float64Array(q) +for(o=this.c,n=0*a5,m=0;m=0;--c){p[c]=new A.o1(c*a5,a5,q).S(0,d) +for(i=c*s,k=l;k>c;--k)p[c]=p[c]-n[i+k]*p[k] +p[c]=p[c]/n[i+c]}for(b=0,m=0;mn&&Math.abs(a.d.b)>s))return null +q=o.dx +if(q==null)q=8000 +p=A.O(r,-q,q) +return new A.iB(new A.jL(new A.k(0,p)),p)}, +Fs(a,b){var s=this.k3 +s===$&&A.b() +return Math.abs(s)>A.qq(a,this.b)}, +tV(a){return new A.k(0,a.b)}, +tW(a){return a.b}} +A.kh.prototype={ +Ew(a,b){var s,r,q,p,o=this,n=o.db +if(n==null)n=50 +s=o.cy +if(s==null)s=A.qq(b,o.b) +r=a.a.a +if(!(Math.abs(r)>n&&Math.abs(a.d.a)>s))return null +q=o.dx +if(q==null)q=8000 +p=A.O(r,-q,q) +return new A.iB(new A.jL(new A.k(p,0)),p)}, +Fs(a,b){var s=this.k3 +s===$&&A.b() +return Math.abs(s)>A.qq(a,this.b)}, +tV(a){return new A.k(a.a,0)}, +tW(a){return a.a}} +A.ks.prototype={ +Ew(a,b){var s,r,q,p,o=this,n=o.db +if(n==null)n=50 +s=o.cy +if(s==null)s=A.qq(b,o.b) +r=a.a +if(!(r.gAr()>n*n&&a.d.gAr()>s*s))return null +q=o.db +if(q==null)q=50 +p=o.dx +if(p==null)p=8000 +return new A.iB(new A.jL(r).amm(q,p),null)}, +Fs(a,b){var s=this.k3 +s===$&&A.b() +return Math.abs(s)>A.aIg(a,this.b)}, +tV(a){return a}, +tW(a){return null}} +A.X6.prototype={ +afI(){this.a=!0}} +A.zz.prototype={ +jt(a){if(this.r){this.r=!1 +$.hm.bc$.Za(this.b,a)}}, +XQ(a,b){return a.gbv(a).Y(0,this.d).gdC()<=b}} +A.k9.prototype={ +il(a){var s,r=this +if(r.y==null)if(r.r==null&&!0)return!1 +s=r.pw(a) +if(!s)r.nN() +return s}, +i4(a){var s=this,r=s.y +if(r!=null)if(!r.XQ(a,100))return +else{r=s.y +if(!r.f.a||a.gdY(a)!==r.e){s.nN() +return s.T_(a)}}s.T_(a)}, +T_(a){var s,r,q,p,o,n,m=this +m.Su() +s=$.hm.cY$.uz(0,a.gbN(),m) +r=a.gbN() +q=a.gbv(a) +p=a.gdY(a) +o=new A.X6() +A.cy(B.og,o.gafH()) +n=new A.zz(r,s,q,p,o) +m.z.n(0,a.gbN(),n) +o=a.gc9(a) +if(!n.r){n.r=!0 +$.hm.bc$.Uc(r,m.gyL(),o)}}, +af3(a){var s,r=this,q=r.z,p=q.i(0,a.gbN()) +p.toString +if(t.oN.b(a)){s=r.y +if(s==null){if(r.x==null)r.x=A.cy(B.bS,r.gaf4()) +s=p.b +$.hm.cY$.arg(s) +p.jt(r.gyL()) +q.C(0,s) +r.NF() +r.y=p}else{s=s.c +s.a.pU(s.b,s.c,B.cd) +s=p.c +s.a.pU(s.b,s.c,B.cd) +p.jt(r.gyL()) +q.C(0,p.b) +q=r.r +if(q!=null)r.cT("onDoubleTap",q) +r.nN()}}else if(t.n2.b(a)){if(!p.XQ(a,18))r.ud(p)}else if(t.Ko.b(a))r.ud(p)}, +i3(a){}, +fU(a){var s,r=this,q=r.z.i(0,a) +if(q==null){s=r.y +s=s!=null&&s.b===a}else s=!1 +if(s)q=r.y +if(q!=null)r.ud(q)}, +ud(a){var s,r=this,q=r.z +q.C(0,a.b) +s=a.c +s.a.pU(s.b,s.c,B.an) +a.jt(r.gyL()) +s=r.y +if(s!=null)if(a===s)r.nN() +else{r.No() +if(q.a===0)r.nN()}}, +m(){this.nN() +this.M4()}, +nN(){var s,r=this +r.Su() +if(r.y!=null){if(r.z.a!==0)r.No() +s=r.y +s.toString +r.y=null +r.ud(s) +$.hm.cY$.auP(0,s.b)}r.NF()}, +NF(){var s=this.z +s=s.gaT(s) +B.b.aa(A.V(s,!0,A.o(s).h("n.E")),this.gagZ())}, +Su(){var s=this.x +if(s!=null){s.b3(0) +this.x=null}}, +No(){}} +A.ajX.prototype={ +Uc(a,b,c){J.hH(this.a.bm(0,a,new A.ajZ()),b,c)}, +Za(a,b){var s,r=this.a,q=r.i(0,a) +q.toString +s=J.cb(q) +s.C(q,b) +if(s.ga7(q))r.C(0,a)}, +a9h(a,b,c){var s,r,q,p +try{b.$1(a.b0(c))}catch(q){s=A.ax(q) +r=A.aZ(q) +p=A.bo("while routing a pointer event") +A.d4(new A.bG(s,r,"gesture library",p,null,!1))}}, +Zy(a){var s=this,r=s.a.i(0,a.gbN()),q=s.b,p=t.Ld,o=t.iD,n=A.p6(q,p,o) +if(r!=null)s.Ol(a,r,A.p6(r,p,o)) +s.Ol(a,q,n)}, +Ol(a,b,c){c.aa(0,new A.ajY(this,b,a))}} +A.ajZ.prototype={ +$0(){return A.A(t.Ld,t.iD)}, +$S:291} +A.ajY.prototype={ +$2(a,b){if(J.vc(this.b,a))this.a.a9h(this.c,a,b)}, +$S:292} +A.ak_.prototype={ +Z5(a,b,c){if(this.a!=null)return +this.b=b +this.a=c}, +U(a){var s,r,q,p,o=this,n=o.a +if(n==null)return +try{q=o.b +q.toString +n.$1(q)}catch(p){s=A.ax(p) +r=A.aZ(p) +n=A.bo("while resolving a PointerSignalEvent") +A.d4(new A.bG(s,r,"gesture library",n,null,!1))}o.b=o.a=null}} +A.O1.prototype={ +I(){return"DragStartBehavior."+this.b}} +A.dq.prototype={ +H4(a){}, +mC(a){var s=this +s.e.n(0,a.gbN(),a.gcN(a)) +if(s.il(a))s.i4(a) +else s.re(a)}, +i4(a){}, +re(a){}, +il(a){var s=this.c +return(s==null||s.p(0,a.gcN(a)))&&this.d.$1(a.gdY(a))}, +arX(a){var s=this.c +return s==null||s.p(0,a.gcN(a))}, +m(){}, +XC(a,b,c){var s,r,q,p,o=null +try{o=b.$0()}catch(q){s=A.ax(q) +r=A.aZ(q) +p=A.bo("while handling a gesture") +A.d4(new A.bG(s,r,"gesture",p,null,!1))}return o}, +cT(a,b){return this.XC(a,b,null,t.z)}, +arK(a,b,c){return this.XC(a,b,c,t.z)}} +A.DG.prototype={ +i4(a){this.xy(a.gbN(),a.gc9(a))}, +re(a){this.U(B.an)}, +i3(a){}, +fU(a){}, +U(a){var s,r=this.f,q=A.V(r.gaT(r),!0,t.SP) +r.a0(0) +for(r=q.length,s=0;s")),r=r.c;q.q();){p=q.d +if(p==null)p=r.a(p) +o=$.hm.bc$ +n=k.goA() +o=o.a +m=o.i(0,p) +m.toString +l=J.cb(m) +l.C(m,n) +if(l.ga7(m))o.C(0,p)}s.a0(0) +k.M4()}, +a6R(a){var s=this.w +if(s!=null)return s.uz(0,a,this) +return $.hm.cY$.uz(0,a,this)}, +xy(a,b){var s=this +$.hm.bc$.Uc(a,s.goA(),b) +s.r.D(0,a) +s.f.n(0,a,s.a6R(a))}, +jt(a){var s=this.r +if(s.p(0,a)){$.hm.bc$.Za(a,this.goA()) +s.C(0,a) +if(s.a===0)this.ve(a)}}, +Dt(a){if(t.oN.b(a)||t.Ko.b(a)||t.WQ.b(a))this.jt(a.gbN())}} +A.Ci.prototype={ +I(){return"GestureRecognizerState."+this.b}} +A.xj.prototype={ +i4(a){var s=this +s.xH(a) +if(s.ch===B.cw){s.ch=B.hk +s.CW=a.gbN() +s.cx=new A.fU(a.gbR(),a.gbv(a)) +s.db=A.cy(s.at,new A.ak7(s,a))}}, +re(a){if(!this.cy)this.Mb(a)}, +ik(a){var s,r,q,p=this +if(p.ch===B.hk&&a.gbN()===p.CW){if(!p.cy)s=p.OZ(a)>18 +else s=!1 +if(p.cy){r=p.ay +q=r!=null&&p.OZ(a)>r}else q=!1 +if(t.n2.b(a))r=s||q +else r=!1 +if(r){p.U(B.an) +r=p.CW +r.toString +p.jt(r)}else p.X2(a)}p.Dt(a)}, +Ia(){}, +i3(a){if(a===this.CW){this.mv() +this.cy=!0}}, +fU(a){var s=this +if(a===s.CW&&s.ch===B.hk){s.mv() +s.ch=B.Nu}}, +ve(a){var s=this +s.mv() +s.ch=B.cw +s.cx=null +s.cy=!1}, +m(){this.mv() +this.mi()}, +mv(){var s=this.db +if(s!=null){s.b3(0) +this.db=null}}, +OZ(a){return a.gbv(a).Y(0,this.cx.b).gdC()}} +A.ak7.prototype={ +$0(){this.a.Ia() +return null}, +$S:0} +A.fU.prototype={ +R(a,b){return new A.fU(this.a.R(0,b.a),this.b.R(0,b.b))}, +Y(a,b){return new A.fU(this.a.Y(0,b.a),this.b.Y(0,b.b))}, +k(a){return"OffsetPair(local: "+this.a.k(0)+", global: "+this.b.k(0)+")"}} +A.YE.prototype={} +A.ye.prototype={} +A.pM.prototype={} +A.Mj.prototype={ +i4(a){var s=this +if(s.ch===B.cw){if(s.k4!=null&&s.ok!=null)s.uq() +s.k4=a}if(s.k4!=null)s.a35(a)}, +xy(a,b){this.a2X(a,b)}, +X2(a){var s,r,q=this +if(t.oN.b(a)){q.ok=a +q.Ny()}else if(t.Ko.b(a)){q.U(B.an) +if(q.k2){s=q.k4 +s.toString +q.AX(a,s,"")}q.uq()}else{s=a.gdY(a) +r=q.k4 +if(s!==r.gdY(r)){q.U(B.an) +s=q.CW +s.toString +q.jt(s)}}}, +U(a){var s,r=this +if(r.k3&&a===B.an){s=r.k4 +s.toString +r.AX(null,s,"spontaneous") +r.uq()}r.Mc(a)}, +Ia(){this.SB()}, +i3(a){var s=this +s.Mi(a) +if(a===s.CW){s.SB() +s.k3=!0 +s.Ny()}}, +fU(a){var s,r=this +r.a36(a) +if(a===r.CW){if(r.k2){s=r.k4 +s.toString +r.AX(null,s,"forced")}r.uq()}}, +SB(){var s,r=this +if(r.k2)return +s=r.k4 +s.toString +r.X4(s) +r.k2=!0}, +Ny(){var s,r,q=this +if(!q.k3||q.ok==null)return +s=q.k4 +s.toString +r=q.ok +r.toString +q.X5(s,r) +q.uq()}, +uq(){var s=this +s.k3=s.k2=!1 +s.k4=s.ok=null}} +A.ic.prototype={ +il(a){var s=this +switch(a.gdY(a)){case 1:if(s.aM==null&&s.bq==null&&s.aJ==null&&s.bZ==null)return!1 +break +case 2:if(s.bt==null&&s.B==null&&s.F==null&&s.a9==null)return!1 +break +case 4:return!1 +break +default:return!1}return s.pw(a)}, +X4(a){var s,r=this,q=a.gbv(a),p=a.gbR() +r.e.i(0,a.gbN()).toString +s=new A.ye(q,p) +switch(a.gdY(a)){case 1:if(r.aM!=null)r.cT("onTapDown",new A.apW(r,s)) +break +case 2:if(r.B!=null)r.cT("onSecondaryTapDown",new A.apX(r,s)) +break +case 4:break}}, +X5(a,b){var s,r,q=this +b.gcN(b) +b.gbv(b) +s=b.gbR() +r=new A.pM(s) +switch(a.gdY(a)){case 1:if(q.aJ!=null)q.cT("onTapUp",new A.apY(q,r)) +s=q.bq +if(s!=null)q.cT("onTap",s) +break +case 2:if(q.F!=null)q.cT("onSecondaryTapUp",new A.apZ(q,r)) +if(q.bt!=null)q.cT("onSecondaryTap",new A.aq_(q)) +break +case 4:break}}, +AX(a,b,c){var s,r=this,q=c===""?c:c+" " +switch(b.gdY(b)){case 1:s=r.bZ +if(s!=null)r.cT(q+"onTapCancel",s) +break +case 2:s=r.a9 +if(s!=null)r.cT(q+"onSecondaryTapCancel",s) +break +case 4:break}}} +A.apW.prototype={ +$0(){return this.a.aM.$1(this.b)}, +$S:0} +A.apX.prototype={ +$0(){return this.a.B.$1(this.b)}, +$S:0} +A.apY.prototype={ +$0(){return this.a.aJ.$1(this.b)}, +$S:0} +A.apZ.prototype={ +$0(){return this.a.F.$1(this.b)}, +$S:0} +A.aq_.prototype={ +$0(){return this.a.bt.$0()}, +$S:0} +A.HG.prototype={ +I(){return"_DragState."+this.b}} +A.FZ.prototype={} +A.G1.prototype={} +A.G0.prototype={} +A.G2.prototype={} +A.G_.prototype={} +A.JX.prototype={ +ik(a){var s,r,q=this +if(t.n2.b(a)){s=A.qq(a.gcN(a),q.b) +r=q.AE$ +if(a.gbv(a).Y(0,r.b).gdC()>s){q.xZ() +q.vx$=q.vw$=null}}else if(t.oN.b(a)){q.r4$=a +if(q.lz$!=null){q.xZ() +if(q.or$==null)q.or$=A.cy(B.bS,q.ga8z())}}else if(t.Ko.b(a))q.zg()}, +fU(a){this.zg()}, +adN(a){var s=this.vw$ +s.toString +if(a===s)return!0 +else return!1}, +aee(a){var s=this.vx$ +if(s==null)return!1 +return a.Y(0,s).gdC()<=100}, +xZ(){var s=this.or$ +if(s!=null){s.b3(0) +this.or$=null}}, +a8A(){}, +zg(){var s,r=this +r.xZ() +r.vx$=r.AE$=r.vw$=null +r.kA$=0 +r.r4$=r.lz$=null +s=r.AG$ +if(s!=null)s.$0()}} +A.AC.prototype={ +abB(){var s=this +if(s.cy!=null)s.cT("onDragUpdate",new A.a7D(s)) +s.p2=s.p3=null}, +il(a){var s=this +if(s.fy==null)switch(a.gdY(a)){case 1:if(s.ch==null&&s.cx==null&&s.cy==null&&s.db==null&&s.CW==null&&s.dx==null)return!1 +break +default:return!1}else if(a.gbN()!==s.fy)return!1 +return s.pw(a)}, +i4(a){var s,r=this +if(r.k1===B.fD){r.a4k(a) +r.fy=a.gbN() +r.ok=r.k4=0 +r.k1=B.mp +s=a.gbv(a) +r.k3=new A.fU(a.gbR(),s) +r.go=A.cy(B.aD,new A.a7E(r,a))}}, +re(a){if(a.gdY(a)!==1)if(!this.fx)this.Mb(a)}, +i3(a){var s,r=this +if(a!==r.fy)return +r.ze() +r.p4.D(0,a) +s=r.lz$ +if(s!=null)r.Nw(s) +r.fx=!0 +s=r.k2 +if(s!=null)r.DQ(s) +s=r.r4$ +if(s!=null)r.Nx(s)}, +ve(a){var s,r=this +switch(r.k1.a){case 0:r.SC() +r.U(B.an) +break +case 1:if(r.dy)if(r.fx){if(r.lz$!=null){if(!r.p4.C(0,a))r.Ch(a,B.an) +r.k1=B.iK +s=r.lz$ +s.toString +r.DQ(s) +r.Nq()}}else{r.SC() +r.U(B.an)}else{s=r.r4$ +if(s!=null)r.Nx(s)}break +case 2:r.Nq() +break}r.ze() +r.k1=B.fD +r.dy=!1}, +ik(a){var s,r,q,p,o,n,m=this +if(a.gbN()!==m.fy)return +m.a5m(a) +if(t.n2.b(a)){s=A.qq(a.gcN(a),m.b) +if(!m.dy){r=m.k3 +r===$&&A.b() +r=a.gbv(a).Y(0,r.b).gdC()>s}else r=!0 +m.dy=r +r=m.k1 +if(r===B.iK)m.Nr(a) +else if(r===B.mp){if(m.k2==null){if(a.gc9(a)==null)q=null +else{r=a.gc9(a) +r.toString +q=A.tn(r)}p=m.SD(a.gkI()) +r=m.k4 +r===$&&A.b() +o=A.xg(q,null,p,a.gbR()).gdC() +n=m.SE(p) +m.k4=r+o*J.iu(n==null?1:n) +r=m.ok +r===$&&A.b() +m.ok=r+A.xg(q,null,a.gkI(),a.gbR()).gdC()*B.f.gDo(1) +if(!m.SF(a.gcN(a)))r=m.fx&&Math.abs(m.ok)>A.aIg(a.gcN(a),m.b) +else r=!0 +if(r){m.k2=a +m.k1=B.iK +if(!m.fx)m.U(B.cd)}}r=m.k2 +if(r!=null)m.DQ(r)}}else if(t.oN.b(a)){r=m.k1 +if(r===B.mp)m.Dt(a) +else if(r===B.iK)m.Gy(a.gbN())}else if(t.Ko.b(a)){m.k1=B.fD +m.Gy(a.gbN())}}, +fU(a){var s=this +if(a!==s.fy)return +s.a5n(a) +s.ze() +s.Gy(a) +s.yY() +s.yX()}, +m(){this.ze() +this.yX() +this.a4l()}, +DQ(a){var s,r,q,p,o,n=this +if(!n.fx)return +if(n.at===B.af){s=n.k3 +s===$&&A.b() +r=a.gqF() +n.k3=s.R(0,new A.fU(a.gkI(),r))}n.a7X(a) +if(!a.gkI().j(0,B.e)){if(a.gc9(a)!=null){s=a.gc9(a) +s.toString +q=A.tn(s)}else q=null +s=n.k3 +s===$&&A.b() +p=s.a.R(0,a.gkI()) +o=A.xg(q,null,a.gkI(),p) +s=a.gkI() +n.p1=n.k3.R(0,new A.fU(s,o)) +n.Nr(a) +n.p1=null}}, +Nw(a){var s,r,q,p,o=this +if(o.fr)return +s=a.gbv(a) +r=a.gbR() +q=o.e.i(0,a.gbN()) +q.toString +p=o.kA$ +if(o.ch!=null)o.cT("onTapDown",new A.a7B(o,new A.FZ(s,r,q,p))) +o.fr=!0}, +Nx(a){var s,r,q,p,o=this +if(!o.fx)return +s=a.gcN(a) +r=a.gbv(a) +q=a.gbR() +p=o.kA$ +if(o.CW!=null)o.cT("onTapUp",new A.a7C(o,new A.G1(r,q,s,p))) +o.yY() +if(!o.p4.C(0,a.gbN()))o.Ch(a.gbN(),B.an)}, +a7X(a){var s,r,q,p=this +if(p.cx!=null){s=a.giu(a) +r=p.k3 +r===$&&A.b() +q=p.e.i(0,a.gbN()) +q.toString +p.cT("onDragStart",new A.a7z(p,new A.G0(s,r.b,r.a,q,p.kA$)))}p.k2=null}, +Nr(a){var s,r,q,p,o,n,m=this,l=m.p1,k=l!=null?l.b:a.gbv(a) +l=m.p1 +s=l!=null?l.a:a.gbR() +l=a.giu(a) +r=a.gkI() +q=m.e.i(0,a.gbN()) +q.toString +p=m.k3 +p===$&&A.b() +p=k.Y(0,p.b) +o=s.Y(0,m.k3.a) +n=m.kA$ +if(m.cy!=null)m.cT("onDragUpdate",new A.a7A(m,new A.G2(l,r,k,s,q,p,o,n)))}, +Nq(){var s=this,r=s.p3 +if(r!=null){r.b3(0) +s.abB()}r=s.kA$ +if(s.db!=null)s.cT("onDragEnd",new A.a7y(s,new A.G_(0,r))) +s.yY() +s.yX()}, +SC(){var s,r=this +if(!r.fr)return +s=r.dx +if(s!=null)r.cT("onCancel",s) +r.yX() +r.yY()}, +Gy(a){this.jt(a) +if(!this.p4.C(0,a))this.Ch(a,B.an)}, +yY(){this.fx=this.fr=!1 +this.fy=null}, +yX(){return}, +ze(){var s=this.go +if(s!=null){s.b3(0) +this.go=null}}} +A.a7D.prototype={ +$0(){var s=this.a,r=s.cy +r.toString +s=s.p2 +s.toString +return r.$1(s)}, +$S:0} +A.a7E.prototype={ +$0(){var s=this.a,r=s.lz$ +if(r!=null){s.Nw(r) +if(s.kA$>1)s.U(B.cd)}return null}, +$S:0} +A.a7B.prototype={ +$0(){return this.a.ch.$1(this.b)}, +$S:0} +A.a7C.prototype={ +$0(){return this.a.CW.$1(this.b)}, +$S:0} +A.a7z.prototype={ +$0(){return this.a.cx.$1(this.b)}, +$S:0} +A.a7A.prototype={ +$0(){return this.a.cy.$1(this.b)}, +$S:0} +A.a7y.prototype={ +$0(){return this.a.db.$1(this.b)}, +$S:0} +A.lY.prototype={ +SF(a){var s=this.k4 +s===$&&A.b() +return Math.abs(s)>A.qq(a,this.b)}, +SD(a){return new A.k(a.a,0)}, +SE(a){return a.a}} +A.lZ.prototype={ +SF(a){var s=this.k4 +s===$&&A.b() +return Math.abs(s)>A.aIg(a,this.b)}, +SD(a){return a}, +SE(a){return null}} +A.GZ.prototype={ +i4(a){var s,r=this +r.xH(a) +s=r.or$ +if(s!=null&&s.b==null)r.zg() +r.r4$=null +if(r.lz$!=null)s=!(r.or$!=null&&r.aee(a.gbv(a))&&r.adN(a.gdY(a))) +else s=!1 +if(s)r.kA$=1 +else ++r.kA$ +r.xZ() +r.lz$=a +r.vw$=a.gdY(a) +r.vx$=a.gbv(a) +r.AE$=new A.fU(a.gbR(),a.gbv(a)) +s=r.AF$ +if(s!=null)s.$0()}, +m(){this.zg() +this.mi()}} +A.a2O.prototype={} +A.a2P.prototype={} +A.a2Q.prototype={} +A.a2R.prototype={} +A.a2S.prototype={} +A.WM.prototype={ +U(a){this.a.ajb(this.b,a)}, +$iwk:1} +A.uI.prototype={ +i3(a){var s,r,q,p,o=this +o.SI() +if(o.e==null){s=o.b[0] +o.e=s}for(s=o.b,r=s.length,q=0;qb*b)return new A.jL(s.eH(0,s.gdC()).S(0,b)) +if(r40)return B.md +s=t.n +r=A.a([],s) +q=A.a([],s) +p=A.a([],s) +o=A.a([],s) +n=this.d +s=this.c +m=s[n] +if(m==null)return null +l=m.a.a +k=m +j=k +i=0 +do{h=s[n] +if(h==null)break +g=h.a.a +f=(l-g)/1000 +if(f>100||Math.abs(g-j.a.a)/1000>40)break +e=h.b +r.push(e.a) +q.push(e.b) +p.push(1) +o.push(-f) +n=(n===0?20:n)-1;++i +if(i<20){k=h +j=k +continue}else{k=h +break}}while(!0) +if(i>=3){d=new A.PS(o,r,p).LO(2) +if(d!=null){c=new A.PS(o,q,p).LO(2) +if(c!=null){s=d.a[1] +g=c.a[1] +b=d.b +b===$&&A.b() +a=c.b +a===$&&A.b() +return new A.pW(new A.k(s*1000,g*1000),b*a,new A.b1(l-k.a.a),m.b.Y(0,k.b))}}}return new A.pW(B.e,1,new A.b1(l-k.a.a),m.b.Y(0,k.b))}} +A.rK.prototype={ +qb(a,b){var s=this,r=s.b +r.nC(0) +r.it(0) +r=(s.d+1)%20 +s.d=r +s.e[r]=new A.IO(a,b)}, +pS(a){var s,r,q=this.d+a,p=B.f.bF(q,20),o=B.f.bF(q-1,20) +q=this.e +s=q[p] +r=q[o] +if(s==null||r==null)return B.e +q=s.a.a-r.a.a +return q>0?s.b.Y(0,r.b).S(0,1000).eH(0,q/1000):B.e}, +xc(){var s,r,q,p,o,n,m=this +if(m.b.gIr()>40)return B.md +s=m.pS(-2).S(0,0.6).R(0,m.pS(-1).S(0,0.35)).R(0,m.pS(0).S(0,0.05)) +r=m.e +q=m.d +p=r[q] +for(o=null,n=1;n<=20;++n){o=r[B.f.bF(q+n,20)] +if(o!=null)break}if(o==null||p==null)return B.Bn +else return new A.pW(s,1,new A.b1(p.a.a-o.a.a),p.b.Y(0,o.b))}} +A.wO.prototype={ +xc(){var s,r,q,p,o,n,m=this +if(m.b.gIr()>40)return B.md +s=m.pS(-2).S(0,0.15).R(0,m.pS(-1).S(0,0.65)).R(0,m.pS(0).S(0,0.2)) +r=m.e +q=m.d +p=r[q] +for(o=null,n=1;n<=20;++n){o=r[B.f.bF(q+n,20)] +if(o!=null)break}if(o==null||p==null)return B.Bn +else return new A.pW(s,1,new A.b1(p.a.a-o.a.a),p.b.Y(0,o.b))}} +A.VC.prototype={ +H(a){var s=this +return A.Cu(null,s.c,new A.asA(s,a),s.f,s.Fc(a))}} +A.asA.prototype={ +$0(){this.a.FU(this.b)}, +$S:0} +A.yG.prototype={ +H(a){var s,r,q,p,o=null +a.ap(t.vH) +s=A.ak(a) +r=this.c.$1(s.R8) +if(r!=null)return r.$1(a) +q=this.d.$1(a) +switch(A.by().a){case 0:s=A.n7(a,B.ck,t.c4) +s.toString +p=this.e.$1(s) +break +case 1:case 3:case 5:case 2:case 4:p=o +break +default:p=o}return A.Ct(q,o,p,o)}} +A.M1.prototype={ +H(a){return new A.yG(new A.a6Q(),new A.a6R(),new A.a6S(),null)}} +A.a6Q.prototype={ +$1(a){return a==null?null:a.a}, +$S:96} +A.a6R.prototype={ +$1(a){return B.p0}, +$S:95} +A.a6S.prototype={ +$1(a){return"Back"}, +$S:94} +A.M_.prototype={ +FU(a){return A.aM7(a)}, +Fc(a){A.n7(a,B.ck,t.c4).toString +return"Back"}} +A.O6.prototype={ +H(a){return new A.yG(new A.ab3(),new A.ab4(),new A.ab5(),null)}} +A.ab3.prototype={ +$1(a){return a==null?null:a.c}, +$S:96} +A.ab4.prototype={ +$1(a){return B.p1}, +$S:95} +A.ab5.prototype={ +$1(a){return"Open navigation menu"}, +$S:94} +A.O5.prototype={ +FU(a){var s,r,q=A.F0(a),p=q.e +if(p.ga5()!=null){s=q.x +r=s.y +s=r==null?A.o(s).h("cN.T").a(r):r}else s=!1 +if(s)p.ga5().aA(0) +q=q.d.ga5() +if(q!=null)q.BT(0) +return null}, +Fc(a){A.n7(a,B.ck,t.c4).toString +return"Open navigation menu"}} +A.Oc.prototype={ +H(a){return new A.yG(new A.ac2(),new A.ac3(),new A.ac4(),null)}} +A.ac2.prototype={ +$1(a){return a==null?null:a.d}, +$S:96} +A.ac3.prototype={ +$1(a){return B.p1}, +$S:95} +A.ac4.prototype={ +$1(a){return"Open navigation menu"}, +$S:94} +A.Ob.prototype={ +FU(a){var s,r,q=A.F0(a),p=q.d +if(p.ga5()!=null){s=q.w +r=s.y +s=r==null?A.o(s).h("cN.T").a(r):r}else s=!1 +if(s)p.ga5().aA(0) +q=q.e.ga5() +if(q!=null)q.BT(0) +return null}, +Fc(a){A.n7(a,B.ck,t.c4).toString +return"Open navigation menu"}} +A.vf.prototype={ +gt(a){var s=this +return A.bv([s.a,s.b,s.c,s.d])}, +j(a,b){var s +if(b==null)return!1 +if(this===b)return!0 +if(J.U(b)!==A.t(this))return!1 +if(b instanceof A.vf)s=!0 +else s=!1 +return s}} +A.VE.prototype={} +A.LD.prototype={ +H(a){var s,r,q=this,p=q.c.length===0 +if(p)return B.aF +s=J.Ly(A.aV9(a,q.c)) +switch(A.ak(a).r.a){case 2:p=q.e +r=p.a +p=p.b +return A.aW8(r,p==null?r:p,s) +case 0:p=q.e +r=p.a +p=p.b +return A.b0i(r,p==null?r:p,s) +case 1:case 3:case 5:return new A.NM(q.e.a,s,null) +case 4:return new A.Nl(q.e.a,s,null)}}} +A.a6k.prototype={ +$1(a){return new A.ox(null,a.a,a,null,null)}, +$S:297} +A.a6l.prototype={ +$1(a){var s=this.a +return A.aWq(s,a.a,A.aF8(s,a))}, +$S:298} +A.a6m.prototype={ +$1(a){return A.aW6(a.a,A.aF8(this.a,a))}, +$S:299} +A.ar9.prototype={ +I(){return"ThemeMode."+this.b}} +A.wR.prototype={ +ac(){return new A.Im(B.j)}} +A.ahr.prototype={ +$2(a,b){return new A.wT(a,b)}, +$S:300} +A.ahv.prototype={ +nt(a){return A.ak(a).r}, +zY(a,b,c){switch(A.bR(c.a).a){case 0:return b +case 1:switch(A.ak(a).r.a){case 3:case 4:case 5:return new A.Tl(b,c.b,null) +case 0:case 1:case 2:return b}break}}, +zX(a,b,c){A.ak(a) +switch(A.ak(a).r.a){case 2:case 3:case 4:case 5:return b +case 0:switch(0){case 0:return new A.FM(c.a,c.d,b,null)}case 1:break}return A.aL9(c.a,b,A.ak(a).ax.f)}} +A.Im.prototype={ +aB(){this.aR() +this.d=A.aYj()}, +m(){var s=this.d +s===$&&A.b() +s.m() +this.aN()}, +gaez(){var s=A.a([],t.a9) +this.a.toString +s.push(B.Et) +s.push(B.El) +return s}, +ae7(a,b){return new A.OP(B.NX,b,B.a68,null)}, +aeI(a,b){var s,r,q,p,o,n,m,l,k=this,j=null +k.a.toString +s=A.d_(a,B.ms) +r=s==null?j:s.e +if(r==null)r=B.ad +q=r===B.ao +s=A.d_(a,B.BG) +s=s==null?j:s.as +p=s===!0 +if(q)if(p)k.a.toString +if(q)k.a.toString +if(p)k.a.toString +o=k.a.db +s=o.dO +n=s.b +if(n==null){m=o.ax.b +n=A.C(102,m.gl(m)>>>16&255,m.gl(m)>>>8&255,m.gl(m)&255)}l=s.a +if(l==null)l=o.ax.b +k.a.toString +s=b==null?B.aF:b +return new A.F_(A.aae(new A.Ab(o,s,B.ae,B.am,j,j),l,j,j,n),j)}, +a7I(a){var s,r,q=this,p=null,o=q.a,n=o.db +n=n.fr +s=n +if(s==null)s=B.eS +n=o.ch +o=o.cx +r=q.gaez() +q.a.toString +return new A.yD(p,p,p,p,p,p,p,p,n,p,p,p,p,p,p,q.gaeH(),o,p,B.a_n,s,p,r,p,p,B.ph,!1,!1,!1,!1,q.gae6(),!0,p,p,p,new A.rF(q,t.bT))}, +H(a){var s,r=null,q=A.we(!1,!1,this.a7I(a),r,r,r,r,!0,r,r,new A.axE(),r,r,r) +this.a.toString +s=this.d +s===$&&A.b() +return new A.F4(B.DP,A.aLd(q,s),r)}} +A.axE.prototype={ +$2(a,b){if(!(b instanceof A.lK)||!b.c.gw5().j(0,B.eK))return B.ey +return A.b0B()?B.ex:B.ey}, +$S:229} +A.aBx.prototype={ +x0(a){return a.Co(this.b)}, +m9(a){return new A.G(a.b,this.b)}, +x8(a,b){return new A.k(0,a.b-b.b)}, +nB(a){return this.b!==a.b}} +A.a0g.prototype={} +A.Ak.prototype={ +aaD(a){var s=new A.a6q(this,a).$0() +return s}, +ac(){return new A.GQ(B.j)}, +ng(a){return A.Ln().$1(a)}} +A.a6q.prototype={ +$0(){switch(this.b.r.a){case 0:case 1:case 3:case 5:return!1 +case 2:case 4:return!0}}, +$S:5} +A.GQ.prototype={ +bx(){var s,r=this +r.dr() +s=r.d +if(s!=null)s.K(0,r.gE2()) +s=r.c.ap(t.yd) +s=s==null?null:s.f +r.d=s +if(s!=null){s=s.d +s.Fv(s.c,new A.q8(r.gE2()),!1)}}, +m(){var s=this,r=s.d +if(r!=null){r.K(0,s.gE2()) +s.d=null}s.aN()}, +a73(a){var s,r,q,p=this +if(a instanceof A.kx&&p.a.ng(a)){s=p.e +r=a.a +switch(r.e.a){case 0:q=p.e=Math.max(r.gip()-r.gdQ(),0)>0 +break +case 2:q=p.e=Math.max(r.gdQ()-r.giq(),0)>0 +break +case 1:case 3:q=s +break +default:q=s}if(q!==s)p.a3(new A.asZ())}}, +H(b6){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,a2,a3,a4,a5,a6,a7,a8=this,a9=null,b0=A.ak(b6),b1=A.aLi(b6),b2=A.ak(b6).RG,b3=new A.asY(b6,a9,a9,0,3,a9,a9,a9,a9,a9,a9,16,64,a9,a9,a9),b4=b6.vC(t.Np),b5=A.tq(b6,t.X) +b6.ap(t.N8) +s=A.aS(t.ui) +r=a8.e +if(r)s.D(0,B.vx) +r=b4==null +q=r?a9:b4.a.Q!=null +if(r)b4=a9 +else{b4.a.toString +b4=!1}if(b5 instanceof A.js)b5.gjO() +r=a8.a +r.toString +p=b2.Q +if(p==null)p=56 +o=b3.gcA(b3) +n=t._ +r=A.i1(r.ax,s,n) +if(r==null)r=A.i1(b2.a,s,n) +if(r==null)r=A.i1(o,s,t.n8) +a8.a.toString +m=b2.b +l=m==null?b3.ge2():m +o=a8.a.x +k=o==null?b2.c:o +if(k==null){o=b3.c +o.toString +k=o}if(s.p(0,B.vx)){a8.a.toString +s=b2.d +if(s==null)s=b3.d +j=s==null?k:s}else j=k +a8.a.toString +i=b2.w +h=i==null?b3.gn9().ey(l):i +a8.a.toString +s=b2.x +if(s==null)s=a9 +if(s==null)s=i +if(s==null){s=b3.gq8().ey(m) +g=s}else g=s +if(g==null)g=h +a8.a.toString +f=b2.as +if(f==null){s=b3.gwJ() +f=s==null?a9:s.ey(l)}a8.a.toString +e=b2.at +if(e==null){s=b3.gwF() +e=s==null?a9:s.ey(l)}a8.a.toString +if(q===!0){s=h.a +d=new A.O5(B.L9,a9,A.Cw(a9,a9,a9,a9,a9,a9,a9,a9,a9,s==null?24:s,a9,a9,a9,a9),a9)}else{if(b5==null)s=a9 +else s=b5.grf()||b5.mS$>0 +if(s===!0)d=B.C0 +else d=a9}if(d!=null){if(h.j(0,b3.gn9()))c=b1 +else{b=A.Cw(a9,a9,a9,a9,a9,a9,h.f,a9,a9,h.a,a9,a9,a9,a9) +s=b1.a +c=new A.rL(s==null?a9:s.Vt(b.c,b.as,b.d))}d=A.aG4(d,c) +a8.a.toString +d=new A.hN(A.mw(a9,56),d,a9)}a=a8.a.e +a0=new A.VV(a,a9) +a1=b0.r +$label0$0:{if(B.ba===a1||B.dg===a1||B.dh===a1||B.di===a1){s=!0 +break $label0$0}if(B.au===a1||B.c1===a1){s=a9 +break $label0$0}s=a9}a=A.cH(a9,a9,a0,!1,a9,!1,!1,a9,a9,!0,a9,a9,a9,s,a9,a9,a9,a9,a9,a9,a9,a9,a9,a9,a9,a9,a9,a9,a9,a9,a9) +e.toString +a=A.aYr(A.hh(a,a9,B.cj,!1,e,a9,a9,B.a_),1.34) +if(b4===!0){b4=h.a +a2=new A.Ob(B.LV,a9,A.Cw(a9,a9,a9,a9,a9,a9,a9,a9,a9,b4==null?24:b4,a9,a9,a9,a9),a9)}else a2=a9 +if(a2!=null){if(g.j(0,b3.gq8()))a3=b1 +else{a4=A.Cw(a9,a9,a9,a9,a9,a9,g.f,a9,a9,g.a,a9,a9,a9,a9) +b4=b1.a +a3=new A.rL(b4==null?a9:b4.Vt(a4.c,a4.as,a4.d))}a2=A.aG4(A.Cx(a2,g),a3)}b4=a8.a.aaD(b0) +a8.a.toString +s=b2.z +if(s==null)s=16 +f.toString +a5=A.aFm(new A.mF(new A.aBx(p),A.Cx(A.hh(new A.Dx(d,a,a2,b4,s,a9),a9,B.aK,!0,f,a9,a9,B.a_),h),a9),B.a9) +a5=A.amX(!1,a5,!0) +b4=A.ar7(r) +a6=b4===B.ao?B.AM:B.AN +a7=new A.lX(a9,a9,a9,a9,B.n,a6.f,a6.r,a6.w) +a8.a.toString +b4=b2.e +if(b4==null)b4=b3.gcF(b3) +a8.a.toString +s=b2.f +if(s==null)s=b3.gdi() +a8.a.toString +q=b2.r +if(q==null)q=b3.r +return A.cH(a9,a9,A.aJC(A.p9(B.am,a9,A.cH(a9,a9,new A.h8(B.bw,a9,a9,a5,a9),!1,a9,!1,!0,a9,a9,a9,a9,a9,a9,a9,a9,a9,a9,a9,a9,a9,a9,a9,a9,a9,a9,a9,a9,a9,a9,a9,a9),B.o,r,j,a9,b4,q,s,a9,B.dK),a7,t.lu),!0,a9,!1,!1,a9,a9,a9,a9,a9,a9,a9,a9,a9,a9,a9,a9,a9,a9,a9,a9,a9,a9,a9,a9,a9,a9,a9,a9)}} +A.asZ.prototype={ +$0(){}, +$S:0} +A.VV.prototype={ +az(a){var s=a.ap(t.I) +s.toString +s=new A.a0N(B.ah,s.w,null,A.ag(t.T)) +s.aw() +s.saP(null) +return s}, +aF(a,b){var s=a.ap(t.I) +s.toString +b.sbS(s.w)}} +A.a0N.prototype={ +c5(a){var s=a.Vi(1/0) +return a.bf(this.fr$.ke(s))}, +bA(){var s,r=this,q=t.k,p=q.a(A.r.prototype.gW.call(r)).Vi(1/0) +r.fr$.bJ(p,!0) +q=q.a(A.r.prototype.gW.call(r)) +s=r.fr$ +r.id=q.bf(s.gv(s)) +r.zJ()}} +A.asY.prototype={ +gSQ(){var s,r=this,q=r.ch +if(q===$){s=A.ak(r.ay) +r.ch!==$&&A.ay() +r.ch=s +q=s}return q}, +gtE(){var s,r=this,q=r.CW +if(q===$){s=r.gSQ() +r.CW!==$&&A.ay() +q=r.CW=s.ax}return q}, +gSL(){var s,r=this,q=r.cx +if(q===$){s=r.gSQ() +r.cx!==$&&A.ay() +q=r.cx=s.p3}return q}, +gcA(a){return this.gtE().cy}, +ge2(){return this.gtE().db}, +gcF(a){return B.n}, +gdi(){var s=this.gtE(),r=s.k3 +return r==null?s.b:r}, +gn9(){var s=null +return new A.dt(24,s,s,s,s,this.gtE().db,s,s)}, +gq8(){var s=null,r=this.gtE(),q=r.dy +return new A.dt(24,s,s,s,s,q==null?r.db:q,s,s)}, +gwJ(){return this.gSL().z}, +gwF(){return this.gSL().r}} +A.vj.prototype={ +gt(a){var s=this +return A.N(s.gcA(s),s.ge2(),s.c,s.d,s.gcF(s),s.gdi(),s.r,s.gn9(),s.gq8(),s.y,s.z,s.Q,s.gwJ(),s.gwF(),s.ax,B.a,B.a,B.a,B.a,B.a)}, +j(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +if(J.U(b)!==A.t(s))return!1 +return b instanceof A.vj&&J.d(b.gcA(b),s.gcA(s))&&J.d(b.ge2(),s.ge2())&&b.c==s.c&&b.d==s.d&&J.d(b.gcF(b),s.gcF(s))&&J.d(b.gdi(),s.gdi())&&J.d(b.r,s.r)&&J.d(b.gn9(),s.gn9())&&J.d(b.gq8(),s.gq8())&&b.z==s.z&&b.Q==s.Q&&J.d(b.gwJ(),s.gwJ())&&J.d(b.gwF(),s.gwF())&&!0}, +gcA(a){return this.a}, +ge2(){return this.b}, +gcF(a){return this.e}, +gdi(){return this.f}, +gn9(){return this.w}, +gq8(){return this.x}, +gwJ(){return this.as}, +gwF(){return this.at}} +A.VU.prototype={} +A.Db.prototype={ +lh(){var s,r,q,p,o,n,m,l,k,j,i,h,g=this,f=g.a +f.toString +s=g.b +s.toString +r=s.Y(0,f) +q=Math.abs(r.a) +p=Math.abs(r.b) +o=r.gdC() +n=s.a +m=f.b +l=new A.k(n,m) +k=new A.aht(g,o) +if(q>2&&p>2){j=o*o +i=f.a +h=s.b +if(q>>16&255,q.gl(q)>>>8&255,q.gl(q)&255),0,B.y,-1),s,r.c)}if(s==null){q=p.a +return A.aQ(p,new A.b_(A.C(0,q.gl(q)>>>16&255,q.gl(q)>>>8&255,q.gl(q)&255),0,B.y,-1),r.c)}return A.aQ(p,s,r.c)}, +$ibA:1} +A.Wy.prototype={} +A.AQ.prototype={ +ac(){return new A.H4(null,null,B.j)}} +A.H4.prototype={ +IY(){this.a3(new A.au2())}, +geI(){var s=this.a.z +if(s==null){s=this.r +s.toString}return s}, +vQ(){var s,r=this +if(r.a.z==null)r.r=A.aGl(null) +s=r.geI() +r.a.toString +s.fW(0,B.P,!1) +r.geI().Z(0,r.goB())}, +aB(){this.aR() +this.vQ()}, +aO(a){var s,r=this +r.bb(a) +s=a.z +if(r.a.z!=s){if(s!=null)s.K(0,r.goB()) +if(r.a.z!=null){s=r.r +if(s!=null){s.fy$=$.aO() +s.fx$=0}r.r=null}r.vQ()}r.a.toString}, +m(){var s,r=this +r.geI().K(0,r.goB()) +s=r.r +if(s!=null){s.fy$=$.aO() +s.fx$=0}s=r.d +if(s!=null)s.m() +r.a5B()}, +H(c5){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,b0,b1,b2,b3,b4,b5,b6,b7,b8,b9,c0=this,c1=null,c2=c0.a,c3=new A.au_(c2.r,c2.ZC(c5),c0.a.VW(c5)),c4=new A.au0(c0,c3) +c2=t.PM +s=c4.$1$1(new A.atD(),c2) +r=c4.$1$1(new A.atE(),t.p8) +q=t._ +p=c4.$1$1(new A.atF(),q) +o=c4.$1$1(new A.atQ(),q) +n=c4.$1$1(new A.atT(),q) +m=c4.$1$1(new A.atU(),q) +l=c4.$1$1(new A.atV(),t.pc) +k=t.tW +j=c4.$1$1(new A.atW(),k) +i=c4.$1$1(new A.atX(),k) +h=c4.$1$1(new A.atY(),k) +g=c4.$1$1(new A.atZ(),q) +f=c4.$1$1(new A.atG(),c2) +e=c4.$1$1(new A.atH(),t.oI) +d=c4.$1$1(new A.atI(),t.KX) +c=c3.$1$1(new A.atJ(),t.X3) +b=c3.$1$1(new A.atK(),t.Od) +a=c3.$1$1(new A.atL(),t.Tu) +a0=c3.$1$1(new A.atM(),t.y) +a1=c3.$1$1(new A.atN(),t.pC) +a2=new A.k(c.a,c.b).S(0,4) +a3=c3.$1$1(new A.atO(),t.Ya) +c2=j.a +q=j.b +a4=c.Wm(new A.az(c2,h.a,q,h.b)) +if(i!=null){a5=a4.bf(i) +c2=a5.a +if(isFinite(c2))a4=a4.ann(c2,c2) +c2=a5.b +if(isFinite(c2))a4=a4.anm(c2,c2)}a6=a2.b +c2=a2.a +a7=Math.max(0,c2) +a8=l.D(0,new A.aG(a7,a6,a7,a6)).i9(0,B.bB,B.BH) +if(a.a>0){q=c0.e +if(q!=null){k=c0.f +if(k!=null)if(q!==s)if(k.gl(k)!==p.gl(p)){q=c0.f +q=(q.gl(q)>>>24&255)/255===1&&(p.gl(p)>>>24&255)/255<1&&s===0}else q=!1 +else q=!1 +else q=!1}else q=!1}else q=!1 +if(q){q=c0.d +if(!J.d(q==null?c1:q.e,a)){q=c0.d +if(q!=null)q.m() +q=A.c5(c1,a,c1,c1,c0) +q.by() +k=q.cM$ +k.b=!0 +k.a.push(new A.atP(c0)) +c0.d=q}p=c0.f +c0.d.sl(0,0) +c0.d.c7(0)}c0.e=s +c0.f=p +s.toString +q=r==null?c1:r.ey(o) +k=d.mH(e) +a9=p==null?B.hU:B.l3 +b0=c0.a +b1=b0.w +b2=b0.c +b3=b0.d +b4=b0.e +b5=b0.x +b0=b0.f +b6=d.mH(e) +b7=c0.geI() +b8=g==null?o:g +a1.toString +a9=A.p9(a,c1,A.afT(!1,!0,A.Cx(new A.bH(a8,new A.h8(a1,1,1,c0.a.as,c1),c1),new A.dt(f,c1,c1,c1,c1,b8,c1,c1)),b6,a0,c1,b5,B.n,c1,new A.a_1(new A.atR(c3)),b0,c1,b4,b3,b2,new A.bB(new A.atS(c3),t.V),c1,a3,b7),b1,p,s,c1,n,k,m,q,a9) +switch(b.a){case 0:b9=new A.G(48+c2,48+a6) +break +case 1:b9=B.Q +break +default:b9=c1}return A.cH(!0,c1,new A.Z6(b9,new A.hN(a4,a9,c1),c1),!0,!0,!1,!1,c1,c1,c1,c1,c1,c1,c1,c1,c1,c1,c1,c1,c1,c1,c1,c1,c1,c1,c1,c1,c1,c1,c1,c1)}} +A.au2.prototype={ +$0(){}, +$S:0} +A.au_.prototype={ +$1$1(a,b){var s=a.$1(this.a),r=a.$1(this.b),q=a.$1(this.c),p=s==null?r:s +return p==null?q:p}, +$1(a){return this.$1$1(a,t.z)}, +$S:307} +A.au0.prototype={ +$1$1(a,b){return this.b.$1$1(new A.au1(this.a,a,b),b)}, +$1(a){return this.$1$1(a,t.z)}, +$S:308} +A.au1.prototype={ +$1(a){var s=this.b.$1(a) +return s==null?null:s.U(this.a.geI().a)}, +$S(){return this.c.h("0?(bJ?)")}} +A.atD.prototype={ +$1(a){return a==null?null:a.gfq(a)}, +$S:225} +A.atE.prototype={ +$1(a){return a==null?null:a.gjj()}, +$S:310} +A.atF.prototype={ +$1(a){return a==null?null:a.gcA(a)}, +$S:74} +A.atQ.prototype={ +$1(a){return a==null?null:a.ge2()}, +$S:74} +A.atT.prototype={ +$1(a){return a==null?null:a.gcF(a)}, +$S:74} +A.atU.prototype={ +$1(a){return a==null?null:a.gdi()}, +$S:74} +A.atV.prototype={ +$1(a){return a==null?null:a.gdn(a)}, +$S:312} +A.atW.prototype={ +$1(a){return a==null?null:a.gk_()}, +$S:93} +A.atX.prototype={ +$1(a){return a==null?null:a.y}, +$S:93} +A.atY.prototype={ +$1(a){return a==null?null:a.gjY()}, +$S:93} +A.atZ.prototype={ +$1(a){return a==null?null:a.Q}, +$S:74} +A.atG.prototype={ +$1(a){return a==null?null:a.gfO()}, +$S:225} +A.atH.prototype={ +$1(a){return a==null?null:a.gfe()}, +$S:314} +A.atI.prototype={ +$1(a){return a==null?null:a.gbV(a)}, +$S:315} +A.atR.prototype={ +$1(a){return this.a.$1$1(new A.atB(a),t.Pb)}, +$S:316} +A.atB.prototype={ +$1(a){var s +if(a==null)s=null +else{s=a.ghh() +s=s==null?null:s.U(this.a)}return s}, +$S:317} +A.atS.prototype={ +$1(a){return this.a.$1$1(new A.atA(a),t.n8)}, +$S:45} +A.atA.prototype={ +$1(a){var s +if(a==null)s=null +else{s=a.gcr() +s=s==null?null:s.U(this.a)}return s}, +$S:319} +A.atJ.prototype={ +$1(a){return a==null?null:a.gfB()}, +$S:320} +A.atK.prototype={ +$1(a){return a==null?null:a.gkb()}, +$S:321} +A.atL.prototype={ +$1(a){return a==null?null:a.cx}, +$S:322} +A.atM.prototype={ +$1(a){return a==null?null:a.cy}, +$S:323} +A.atN.prototype={ +$1(a){return a==null?null:a.db}, +$S:324} +A.atO.prototype={ +$1(a){return a==null?null:a.gjs()}, +$S:325} +A.atP.prototype={ +$1(a){if(a===B.a7)this.a.a3(new A.atC())}, +$S:6} +A.atC.prototype={ +$0(){}, +$S:0} +A.a_1.prototype={ +U(a){var s=this.a.$1(a) +s.toString +return s}, +gv7(){return"ButtonStyleButton_MouseCursor"}} +A.Z6.prototype={ +az(a){var s=new A.J_(this.e,null,A.ag(t.T)) +s.aw() +s.saP(null) +return s}, +aF(a,b){b.sJF(this.e)}} +A.J_.prototype={ +sJF(a){if(this.A.j(0,a))return +this.A=a +this.a8()}, +bp(a){var s=this.fr$ +if(s!=null)return Math.max(s.d2(B.bb,a,s.gcc()),this.A.a) +return 0}, +bo(a){var s=this.fr$ +if(s!=null)return Math.max(s.d2(B.bc,a,s.gcb()),this.A.b) +return 0}, +NV(a,b){var s,r,q=this.fr$ +if(q!=null){s=b.$2(q,a) +q=s.a +r=this.A +return a.bf(new A.G(Math.max(q,r.a),Math.max(s.b,r.b)))}return B.Q}, +c5(a){return this.NV(a,A.qr())}, +bA(){var s,r,q,p=this +p.id=p.NV(t.k.a(A.r.prototype.gW.call(p)),A.v4()) +s=p.fr$ +if(s!=null){s=s.b +s.toString +t.r.a(s) +r=p.gv(p) +q=p.fr$ +s.a=B.ah.nX(t.EP.a(r.Y(0,q.gv(q))))}}, +cD(a,b){var s,r +if(this.le(a,b))return!0 +s=this.fr$ +r=s.gv(s).iP(B.e) +return a.Hb(new A.azp(this,r),r,A.aLW(r))}} +A.azp.prototype={ +$2(a,b){return this.a.fr$.cD(a,this.b)}, +$S:17} +A.KB.prototype={ +bY(){this.dq() +this.cW() +this.f2()}, +m(){var s=this,r=s.b9$ +if(r!=null)r.K(0,s.geM()) +s.b9$=null +s.aN()}} +A.a86.prototype={ +I(){return"ButtonTextTheme."+this.b}} +A.Mw.prototype={ +gdn(a){switch(0){case 0:case 1:return B.LF}}, +gbV(a){switch(0){case 0:case 1:return B.zz}}, +j(a,b){var s=this +if(b==null)return!1 +if(J.U(b)!==A.t(s))return!1 +return b instanceof A.Mw&&b.gdn(b).j(0,s.gdn(s))&&b.gbV(b).j(0,s.gbV(s))&&J.d(b.w,s.w)&&J.d(b.y,s.y)&&J.d(b.z,s.z)&&J.d(b.at,s.at)&&b.ax==s.ax}, +gt(a){var s=this +return A.N(B.Dj,88,36,s.gdn(s),s.gbV(s),!1,s.w,s.x,s.y,s.z,s.Q,s.as,s.at,s.ax,B.a,B.a,B.a,B.a,B.a,B.a)}} +A.Wz.prototype={} +A.AR.prototype={ +gt(a){var s=this +return A.N(s.a,s.b,s.c,s.d,s.e,s.f,s.r,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +if(J.U(b)!==A.t(s))return!1 +return b instanceof A.AR&&J.d(b.b,s.b)&&J.d(b.c,s.c)&&J.d(b.d,s.d)&&b.e==s.e&&J.d(b.f,s.f)&&J.d(b.r,s.r)}} +A.WC.prototype={} +A.auf.prototype={ +I(){return"_CheckboxType."+this.b}} +A.AT.prototype={ +ac(){return new A.WE(new A.WD($.aO()),$,$,$,$,$,$,$,$,$,null,!1,!1,null,null,B.j)}} +A.WE.prototype={ +aB(){this.a5E() +this.e=this.a.c}, +aO(a){var s,r=this +r.bb(a) +s=a.c +if(s!==r.a.c){r.e=s +r.zO()}}, +m(){this.d.m() +this.a5D()}, +geT(){return this.a.d}, +gKG(){this.a.toString +return!1}, +gl(a){return this.a.c}, +gTP(){return new A.bB(new A.aud(this),t.V)}, +pV(a,b){if(a instanceof A.Io)return A.i1(a,b,t.oI) +if(!b.p(0,B.G))return a +return null}, +H(a9){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,a2,a3,a4,a5,a6,a7=this,a8=null +a7.a.toString +switch(0){case 0:break}a9.ap(t.ES) +s=A.ak(a9).aL +A.ak(a9) +r=new A.au8(A.ak(a9),A.ak(a9).ax,a8,a8,a8,a8,a8,a8,a8,a8,a8) +a7.a.toString +q=r.glL() +a7.a.toString +p=r.gfB() +switch(q.a){case 0:o=B.Ax +break +case 1:o=B.Aw +break +default:o=a8}o=o.R(0,new A.k(p.a,p.b).S(0,4)) +n=a7.gfF() +n.D(0,B.G) +m=a7.gfF() +m.C(0,B.G) +a7.a.toString +l=a7.gTP().a.$1(n) +if(l==null){k=s.b +l=k==null?a8:k.U(n)}k=l==null +if(k){j=r.gr8().a.$1(n) +j.toString +i=j}else i=l +a7.a.toString +h=a7.gTP().a.$1(m) +if(h==null){j=s.b +h=j==null?a8:j.U(m)}j=h==null +if(j){g=r.gr8().a.$1(m) +g.toString +f=g}else f=h +a7.a.toString +g=a7.pV(a8,n) +e=g==null?a7.pV(s.x,n):g +if(e==null){g=a7.pV(r.gfe(),n) +g.toString +e=g}a7.a.toString +g=a7.pV(a8,m) +d=g==null?a7.pV(s.x,m):g +if(d==null){g=a7.pV(r.gfe(),m) +g.toString +d=g}c=a7.gfF() +c.D(0,B.N) +a7.a.toString +g=s.d +b=g==null?a8:g.U(c) +a=b +if(a==null){b=r.gcr().a.$1(c) +b.toString +a=b}a0=a7.gfF() +a0.D(0,B.I) +a7.a.toString +b=g==null?a8:g.U(a0) +a1=b +if(a1==null){b=r.gcr().a.$1(a0) +b.toString +a1=b}n.D(0,B.L) +a7.a.toString +b=g==null?a8:g.U(n) +if(b==null){k=k?a8:A.C(31,l.gl(l)>>>16&255,l.gl(l)>>>8&255,l.gl(l)&255) +a2=k}else a2=b +if(a2==null){k=r.gcr().a.$1(n) +k.toString +a2=k}m.D(0,B.L) +a7.a.toString +k=g==null?a8:g.U(m) +if(k==null){k=j?a8:A.C(31,h.gl(h)>>>16&255,h.gl(h)>>>8&255,h.gl(h)&255) +a3=k}else a3=k +if(a3==null){k=r.gcr().a.$1(m) +k.toString +a3=k}if(a7.ov$!=null){a1=a7.gfF().p(0,B.G)?a2:a3 +a=a7.gfF().p(0,B.G)?a2:a3}a7.a.toString +a4=a7.gfF() +a7.a.toString +k=s.c +k=k==null?a8:k.U(a4) +a5=k +if(a5==null){k=r.go3().U(a4) +k.toString +a5=k}a7.a.toString +a6=s.e +if(a6==null)a6=r.ghq() +k=a7.a.c +j=a7.d +g=a7.kC$ +g===$&&A.b() +j.sbv(0,g) +g=a7.vy$ +g===$&&A.b() +j.sYV(g) +g=a7.vA$ +g===$&&A.b() +j.sYX(g) +g=a7.vz$ +g===$&&A.b() +j.sYY(g) +j.sXm(a3) +j.sYW(a2) +j.sn8(a1) +j.sn5(a) +j.shq(a6) +j.sWe(a7.ov$) +j.sXH(a7.gfF().p(0,B.N)) +j.sXI(a7.gfF().p(0,B.I)) +j.sU0(i) +j.sXl(f) +j.so3(a5) +j.sl(0,a7.a.c) +j.sauy(a7.e) +a7.a.toString +g=s.w +j.sbV(0,g==null?r.gbV(r):g) +j.sakJ(e) +j.sarp(d) +return A.cH(a8,k,a7.alW(!1,a8,new A.bB(new A.aue(a7,s),t.bN),j,o),!1,a8,!1,!1,a8,a8,a8,a8,a8,a8,a8,a8,a8,a8,a8,a8,a8,a8,a8,a8,a8,a8,a8,a8,a8,a8,a8,a8)}} +A.aud.prototype={ +$1(a){if(a.p(0,B.P))return null +if(a.p(0,B.G)){this.a.a.toString +return null}return null}, +$S:45} +A.aue.prototype={ +$1(a){var s +this.a.a.toString +s=A.i1(null,a,t.WV) +if(s==null)s=null +return s==null?B.ec.U(a):s}, +$S:223} +A.WD.prototype={ +so3(a){if(J.d(this.db,a))return +this.db=a +this.a6()}, +sl(a,b){if(this.dx===b)return +this.dx=b +this.a6()}, +sauy(a){if(this.dy==a)return +this.dy=a +this.a6()}, +sbV(a,b){if(J.d(this.fr,b))return +this.fr=b +this.a6()}, +sakJ(a){if(J.d(this.fx,a))return +this.fx=a +this.a6()}, +sarp(a){if(J.d(this.fy,a))return +this.fy=a +this.a6()}, +QM(a,b){var s=1-Math.abs(b-0.5)*2,r=18-s*2,q=a.a+s,p=a.b+s +return new A.w(q,p,q+r,p+r)}, +NN(a){var s,r=this.e +if(a>=0.25)r.toString +else{s=this.f +s.toString +r.toString +r=A.y(s,r,a*4) +r.toString}return r}, +EO(a,b,c,d){a.bP(this.fr.l2(b),c) +this.fr.mH(d).am(a,b)}, +EP(a,b,c,d){var s,r=$.W().bD(),q=b.a,p=b.b,o=q+2.6999999999999997,n=p+8.1 +if(c<0.5){s=A.lz(B.UV,B.vI,c*2) +s.toString +r.d0(0,o,n) +r.b5(0,q+s.a,p+s.b)}else{s=A.lz(B.vI,B.V8,(c-0.5)*2) +s.toString +r.d0(0,o,n) +r.b5(0,q+7.2,p+12.6) +r.b5(0,q+s.a,p+s.b)}a.bP(r,d)}, +EQ(a,b,c,d){var s,r=A.lz(B.UX,B.vH,1-c) +r.toString +s=A.lz(B.vH,B.UP,c) +s.toString +a.ig(b.R(0,r),b.R(0,s),d)}, +am(a,b){var s,r,q,p,o,n,m,l,k,j,i,h,g=this +g.Yp(a,b.iP(B.e)) +s=$.W() +r=s.aj() +q=g.db +q.toString +r.sM(0,q) +r.saG(0,B.D) +r.sbs(2) +p=t.EP.a(b.eH(0,2).Y(0,B.XU.eH(0,2))) +q=g.a.a +o=q.gb6(q) +q=o===B.aW||o===B.a7 +n=g.a +m=q?n.gl(n):1-n.gl(n) +if(g.dy===!1||g.dx===!1){l=g.dx===!1?1-m:m +k=g.QM(p,l) +j=s.aj() +j.sM(0,g.NN(l)) +s=g.fx +if(l<=0.5){q=g.fy +q.toString +s.toString +g.EO(a,k,j,A.aQ(q,s,l))}else{s.toString +g.EO(a,k,j,s) +i=(l-0.5)*2 +if(g.dy==null||g.dx==null)g.EQ(a,p,i,r) +else g.EP(a,p,i,r)}}else{k=g.QM(p,1) +j=s.aj() +j.sM(0,g.NN(1)) +s=g.fx +s.toString +g.EO(a,k,j,s) +if(m<=0.5){i=1-m*2 +s=g.dy +if(s===!0)g.EP(a,p,i,r) +else g.EQ(a,p,i,r)}else{h=(m-0.5)*2 +s=g.dx +if(s===!0)g.EP(a,p,h,r) +else g.EQ(a,p,h,r)}}}} +A.au8.prototype={ +gfe(){return A.b1u(new A.auc(this))}, +gr8(){return new A.bB(new A.aua(this),t.h2)}, +go3(){return new A.bB(new A.au9(this),t.h2)}, +gcr(){return new A.bB(new A.aub(this),t.h2)}, +ghq(){return 20}, +glL(){return this.y.e}, +gfB(){return this.y.z}, +gbV(a){return B.zz}} +A.auc.prototype={ +$1(a){var s,r,q=this +if(a.p(0,B.P)){if(a.p(0,B.G))return B.CW +s=q.a.z.db.a +return new A.b_(A.C(97,s>>>16&255,s>>>8&255,s&255),2,B.y,-1)}if(a.p(0,B.G))return B.CX +if(a.p(0,B.hS))return new A.b_(q.a.z.at,2,B.y,-1) +if(a.p(0,B.L))return new A.b_(q.a.z.db,2,B.y,-1) +if(a.p(0,B.I))return new A.b_(q.a.z.db,2,B.y,-1) +if(a.p(0,B.N))return new A.b_(q.a.z.db,2,B.y,-1) +s=q.a.z +r=s.dy +return new A.b_(r==null?s.db:r,2,B.y,-1)}, +$S:327} +A.aua.prototype={ +$1(a){var s +if(a.p(0,B.P)){if(a.p(0,B.G)){s=this.a.z.db.a +return A.C(97,s>>>16&255,s>>>8&255,s&255)}return B.n}if(a.p(0,B.G)){if(a.p(0,B.hS))return this.a.z.at +return this.a.z.b}return B.n}, +$S:7} +A.au9.prototype={ +$1(a){if(a.p(0,B.P)){if(a.p(0,B.G))return this.a.z.cy +return B.n}if(a.p(0,B.G)){if(a.p(0,B.hS))return this.a.z.ax +return this.a.z.c}return B.n}, +$S:7} +A.aub.prototype={ +$1(a){var s,r=this +if(a.p(0,B.hS)){if(a.p(0,B.L)){s=r.a.z.at.a +return A.C(31,s>>>16&255,s>>>8&255,s&255)}if(a.p(0,B.I)){s=r.a.z.at.a +return A.C(20,s>>>16&255,s>>>8&255,s&255)}if(a.p(0,B.N)){s=r.a.z.at.a +return A.C(31,s>>>16&255,s>>>8&255,s&255)}}if(a.p(0,B.G)){if(a.p(0,B.L)){s=r.a.z.db.a +return A.C(31,s>>>16&255,s>>>8&255,s&255)}if(a.p(0,B.I)){s=r.a.z.b +return A.C(20,s.gl(s)>>>16&255,s.gl(s)>>>8&255,s.gl(s)&255)}if(a.p(0,B.N)){s=r.a.z.b +return A.C(31,s.gl(s)>>>16&255,s.gl(s)>>>8&255,s.gl(s)&255)}return B.n}if(a.p(0,B.L)){s=r.a.z.b +return A.C(31,s.gl(s)>>>16&255,s.gl(s)>>>8&255,s.gl(s)&255)}if(a.p(0,B.I)){s=r.a.z.db.a +return A.C(20,s>>>16&255,s>>>8&255,s&255)}if(a.p(0,B.N)){s=r.a.z.db.a +return A.C(31,s>>>16&255,s>>>8&255,s&255)}return B.n}, +$S:7} +A.KD.prototype={ +bY(){this.dq() +this.cW() +this.f2()}, +m(){var s=this,r=s.b9$ +if(r!=null)r.K(0,s.geM()) +s.b9$=null +s.aN()}} +A.KE.prototype={ +aB(){var s,r=this,q=null +r.aR() +s=A.c5(q,B.am,q,!r.a.c?0:1,r) +r.kB$=s +r.kC$=A.dc(B.cs,s,B.dD) +s=A.c5(q,B.aD,q,q,r) +r.lA$=s +r.vy$=A.dc(B.ar,s,q) +s=A.c5(q,B.eq,q,r.n1$||r.n0$?1:0,r) +r.r6$=s +r.vz$=A.dc(B.ar,s,q) +s=A.c5(q,B.eq,q,r.n1$||r.n0$?1:0,r) +r.r7$=s +r.vA$=A.dc(B.ar,s,q)}, +m(){var s=this,r=s.kB$ +r===$&&A.b() +r.m() +r=s.lA$ +r===$&&A.b() +r.m() +r=s.r6$ +r===$&&A.b() +r.m() +r=s.r7$ +r===$&&A.b() +r.m() +s.a5C()}} +A.vx.prototype={ +gt(a){var s=this +return A.N(s.a,s.gr8(),s.go3(),s.gcr(),s.ghq(),s.glL(),s.gfB(),s.gbV(s),s.gfe(),B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +if(J.U(b)!==A.t(s))return!1 +return b instanceof A.vx&&b.gr8()==s.gr8()&&b.go3()==s.go3()&&b.gcr()==s.gcr()&&b.ghq()==s.ghq()&&b.glL()==s.glL()&&J.d(b.gfB(),s.gfB())&&J.d(b.gbV(b),s.gbV(s))&&J.d(b.gfe(),s.gfe())}, +gr8(){return this.b}, +go3(){return this.c}, +gcr(){return this.d}, +ghq(){return this.e}, +glL(){return this.f}, +gfB(){return this.r}, +gbV(a){return this.w}, +gfe(){return this.x}} +A.WF.prototype={} +A.AV.prototype={ +gt(a){var s=this +return A.bv([s.a,s.b,s.c,s.d,s.e,s.f,s.r,s.w,s.x,s.y,s.z,s.Q,s.as,s.at,s.ax,s.ay,s.ch,s.CW,s.cx,s.cy,s.db])}, +j(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +if(J.U(b)!==A.t(s))return!1 +return b instanceof A.AV&&b.a==s.a&&J.d(b.b,s.b)&&J.d(b.c,s.c)&&J.d(b.d,s.d)&&J.d(b.e,s.e)&&J.d(b.f,s.f)&&J.d(b.r,s.r)&&J.d(b.w,s.w)&&J.d(b.x,s.x)&&b.y==s.y&&J.d(b.z,s.z)&&J.d(b.Q,s.Q)&&J.d(b.as,s.as)&&J.d(b.at,s.at)&&J.d(b.ax,s.ax)&&J.d(b.ay,s.ay)&&J.d(b.ch,s.ch)&&b.CW==s.CW&&b.cx==s.cx&&b.cy==s.cy&&J.d(b.db,s.db)}} +A.WH.prototype={} +A.vI.prototype={ +j(a,a0){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b=this +if(a0==null)return!1 +if(b===a0)return!0 +if(J.U(a0)!==A.t(b))return!1 +if(a0 instanceof A.vI)if(a0.a===b.a){s=a0.b +r=b.b +if(s.j(0,r)){q=a0.c +p=b.c +if(q.j(0,p)){o=a0.d +if(o==null)o=s +n=b.d +if(o.j(0,n==null?r:n)){o=a0.e +if(o==null)o=q +n=b.e +if(o.j(0,n==null?p:n)){o=a0.f +n=b.f +if(o.j(0,n)){m=a0.r +l=b.r +if(m.j(0,l)){k=a0.w +if(k==null)k=o +j=b.w +if(k.j(0,j==null?n:j)){k=a0.x +if(k==null)k=m +j=b.x +if(k.j(0,j==null?l:j)){k=a0.y +j=k==null +i=j?o:k +h=b.y +g=h==null +if(i.j(0,g?n:h)){i=a0.z +f=i==null +e=f?m:i +d=b.z +c=d==null +if(e.j(0,c?l:d)){e=a0.Q +if(e==null)o=j?o:k +else o=e +k=b.Q +if(k==null)n=g?n:h +else n=k +if(o.j(0,n)){o=a0.as +if(o==null)o=f?m:i +n=b.as +if(n==null)n=c?l:d +if(o.j(0,n)){o=a0.at +n=b.at +if(o.j(0,n)){m=a0.ax +l=b.ax +if(m.j(0,l)){k=a0.ay +o=k==null?o:k +k=b.ay +if(o.j(0,k==null?n:k)){o=a0.ch +if(o==null)o=m +n=b.ch +if(o.j(0,n==null?l:n))if(a0.CW.j(0,b.CW)){o=a0.cx +n=b.cx +if(o.j(0,n)){m=a0.cy +l=b.cy +if(m.j(0,l)){k=a0.db +j=b.db +if(k.j(0,j)){i=a0.dx +if(i==null)i=m +h=b.dx +if(i.j(0,h==null?l:h)){i=a0.dy +if(i==null)i=k +h=b.dy +if(i.j(0,h==null?j:h)){i=a0.fr +if(i==null)i=o +h=b.fr +if(i.j(0,h==null?n:h)){i=a0.fx +o=i==null?o:i +i=b.fx +if(o.j(0,i==null?n:i)){o=a0.fy +if(o==null)o=B.k +n=b.fy +if(o.j(0,n==null?B.k:n)){o=a0.go +if(o==null)o=B.k +n=b.go +if(o.j(0,n==null?B.k:n)){o=a0.id +if(o==null)o=k +n=b.id +if(o.j(0,n==null?j:n)){o=a0.k1 +if(o==null)o=m +n=b.k1 +if(o.j(0,n==null?l:n)){o=a0.k2 +q=o==null?q:o +o=b.k2 +if(q.j(0,o==null?p:o)){q=a0.k3 +s=q==null?s:q +q=b.k3 +s=s.j(0,q==null?r:q)}else s=!1}else s=!1}else s=!1}else s=!1}else s=!1}else s=!1}else s=!1}else s=!1}else s=!1}else s=!1}else s=!1}else s=!1}else s=!1 +else s=!1}else s=!1}else s=!1}else s=!1}else s=!1}else s=!1}else s=!1}else s=!1}else s=!1}else s=!1}else s=!1}else s=!1}else s=!1}else s=!1}else s=!1}else s=!1}else s=!1 +else s=!1 +return s}, +gt(b1){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,a2,a3,a4,a5,a6,a7=this,a8=a7.b,a9=a7.c,b0=a7.d +if(b0==null)b0=a8 +s=a7.e +if(s==null)s=a9 +r=a7.f +q=a7.r +p=a7.w +if(p==null)p=r +o=a7.x +if(o==null)o=q +n=a7.y +m=n==null +l=m?r:n +k=a7.z +j=k==null +i=j?q:k +h=a7.Q +if(h==null){if(m)n=r}else n=h +m=a7.as +if(m==null)m=j?q:k +k=a7.at +j=a7.ax +h=a7.ay +if(h==null)h=k +g=a7.ch +if(g==null)g=j +f=a7.cx +e=a7.cy +d=a7.db +c=a7.dx +if(c==null)c=e +b=a7.dy +if(b==null)b=d +a=a7.fr +if(a==null)a=f +a0=a7.fx +if(a0==null)a0=f +a1=a7.fy +if(a1==null)a1=B.k +a2=a7.go +if(a2==null)a2=B.k +a3=a7.id +if(a3==null)a3=d +a4=a7.k1 +if(a4==null)a4=e +a5=a7.k2 +if(a5==null)a5=a9 +a6=a7.k3 +return A.N(a7.a,a8,a9,b0,s,r,q,p,o,l,i,n,m,k,j,h,g,a7.CW,f,A.N(e,d,c,b,a,a0,a1,a2,a3,a4,a5,a6==null?a8:a6,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a))}} +A.WL.prototype={} +A.dP.prototype={} +A.Qd.prototype={} +A.Bp.prototype={ +gt(a){var s=this +return A.N(s.a,s.b,s.c,s.d,s.e,s.f,s.r,s.w,s.x,s.y,s.z,s.Q,s.as,s.at,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a,b){var s,r=this +if(b==null)return!1 +if(r===b)return!0 +if(J.U(b)!==A.t(r))return!1 +if(b instanceof A.Bp)if(J.d(b.a,r.a))if(b.b==r.b)if(b.c==r.c)if(b.d==r.d)if(J.d(b.e,r.e))if(b.f==r.f)if(b.r==r.r)if(J.d(b.w,r.w))if(b.x==r.x)if(b.y==r.y)if(b.z==r.z)if(b.Q==r.Q)s=!0 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +return s}} +A.Xo.prototype={} +A.Bq.prototype={ +gt(a){var s=this +return A.bv([s.a,s.b,s.c,s.d,s.e,s.f,s.r,s.w,s.x,s.y,s.z,s.Q,s.as,s.at,s.ax,s.ay,s.ch,s.CW,s.cx,s.cy,s.db,s.dx,s.dy,s.fr,s.fx,s.fy,s.go,s.id,s.k1,s.k2,s.k3,s.k4,s.ok,s.p1,s.p2,s.p3])}, +j(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +return b instanceof A.Bq&&J.d(b.a,s.a)&&b.b==s.b&&J.d(b.c,s.c)&&J.d(b.d,s.d)&&J.d(b.e,s.e)&&J.d(b.f,s.f)&&J.d(b.r,s.r)&&J.d(b.w,s.w)&&J.d(b.x,s.x)&&J.d(b.y,s.y)&&J.d(b.z,s.z)&&b.Q==s.Q&&b.as==s.as&&b.at==s.at&&b.ax==s.ax&&b.ay==s.ay&&J.d(b.ch,s.ch)&&J.d(b.CW,s.CW)&&b.cx==s.cx&&b.cy==s.cy&&b.db==s.db&&J.d(b.dx,s.dx)&&b.dy==s.dy&&J.d(b.fr,s.fr)&&J.d(b.fx,s.fx)&&J.d(b.fy,s.fy)&&J.d(b.go,s.go)&&J.d(b.id,s.id)&&J.d(b.k1,s.k1)&&J.d(b.k2,s.k2)&&J.d(b.k3,s.k3)&&b.k4==s.k4&&J.d(b.ok,s.ok)&&J.d(b.p2,s.p2)&&J.d(b.p3,s.p3)}} +A.Xq.prototype={} +A.XB.prototype={} +A.aao.prototype={ +rX(a){return B.Q}, +zW(a,b,c,d){return B.aF}, +rW(a,b){return B.e}} +A.a4u.prototype={} +A.NM.prototype={ +H(a){var s=null,r=A.bt(a,B.b1,t.w).w.r.b+8 +return new A.bH(new A.aG(8,r,8,8),new A.mF(new A.NN(this.c.Y(0,new A.k(8,r))),A.eC(A.p9(B.am,B.CN,A.f5(this.d,B.T,B.U,B.bf),B.dz,s,1,s,s,s,s,s,B.hT),s,222),s),s)}} +A.vV.prototype={ +H(a){var s=null +return A.eC(A.G6(this.d,this.c,A.aNv(B.aM,s,s,s,s,B.bK,s,s,B.bK,A.ak(a).ax.a===B.ao?B.i:B.S,s,B.XX,B.LI,s,B.lp,s,s,s,s)),s,1/0)}} +A.Bt.prototype={ +gt(a){return J.D(this.e)}, +j(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +if(J.U(b)!==A.t(s))return!1 +return b instanceof A.Bt&&J.d(b.a,s.a)&&b.b==s.b&&J.d(b.c,s.c)&&J.d(b.d,s.d)&&J.d(b.e,s.e)&&J.d(b.f,s.f)&&J.d(b.y,s.y)&&J.d(b.r,s.r)&&J.d(b.w,s.w)&&J.d(b.x,s.x)}} +A.XD.prototype={} +A.NW.prototype={ +H(a){var s,r,q,p,o,n,m,l=null +A.ak(a) +s=A.aKi(a) +r=A.aOa(a) +q=s.b +if(q==null){p=r.b +p.toString +q=p}o=s.c +if(o==null){p=r.c +p.toString +o=p}n=s.d +if(n==null){p=r.d +p.toString +n=p}m=s.e +if(m==null){p=r.e +p.toString +m=p}return A.eC(A.jh(A.bP(l,l,B.o,l,l,new A.d3(l,l,new A.d2(B.r,B.r,A.aWB(a,l,o),B.r),l,l,l,B.aO),l,o,l,new A.f8(n,0,m,0),l,l,l,l),l,l),q,l)}} +A.av4.prototype={ +gM(a){var s=A.ak(this.f).ax,r=s.fx +return r==null?s.cx:r}} +A.vW.prototype={ +gt(a){var s=this +return A.N(s.gM(s),s.b,s.c,s.d,s.e,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +if(J.U(b)!==A.t(s))return!1 +return b instanceof A.vW&&J.d(b.gM(b),s.gM(s))&&b.b==s.b&&b.c==s.c&&b.d==s.d&&b.e==s.e}, +gM(a){return this.a}} +A.XH.prototype={} +A.O4.prototype={ +I(){return"DrawerAlignment."+this.b}} +A.O3.prototype={ +H(a){var s,r,q,p,o,n,m,l,k,j=null,i=A.aKM(a) +switch(A.ak(a).r.a){case 2:case 4:s=j +break +case 0:case 1:case 3:case 5:A.n7(a,B.ck,t.c4).toString +s="Navigation menu" +break +default:s=j}A.ak(a) +r=a.ap(t.Vo) +r=r==null?j:r.f +r=r==null?j:r.d +q=new A.av5(a,j,j,1,j,j,j,j,j) +if(r!==B.L8){r=i.f +if(r==null)r=q.gbV(q) +p=r}else{r=i.r +if(r==null)r=q.gvq() +p=r}r=i.w +if(r==null)r=304 +o=i.a +if(o==null)o=q.gcA(q) +n=i.c +if(n==null){n=q.c +n.toString}m=i.d +if(m==null)m=q.gcF(q) +l=i.e +if(l==null)l=q.gdi() +if(p!=null)k=B.a9 +else k=B.o +return A.cH(j,j,new A.hN(new A.az(r,r,1/0,1/0),A.p9(B.am,j,this.x,k,o,n,j,m,p,l,j,B.dK),j),!1,j,!1,!0,j,j,j,j,s,j,!0,j,j,j,j,j,j,j,j,!0,j,j,j,j,j,j,j,j)}} +A.HH.prototype={ +cs(a){return!this.f.xG(0,a.f)}} +A.BG.prototype={ +ac(){var s=null,r=t.B +return new A.vZ(A.ad8(!0,s,!1),new A.bp(s,r),new A.bp(s,r),s,s,B.j)}} +A.vZ.prototype={ +aB(){var s,r,q=this +q.aR() +s=q.f=A.c5(null,B.Lj,null,q.a.y?1:0,q) +s.by() +r=s.cC$ +r.b=!0 +r.a.push(q.ga6Y()) +s.by() +s=s.cM$ +s.b=!0 +s.a.push(q.ga7_())}, +m(){var s=this,r=s.d +if(r!=null)r.eg(0) +r=s.f +r===$&&A.b() +r.m() +s.e.m() +s.a4r()}, +bx(){this.dr() +this.x=this.a7A()}, +aO(a){var s,r,q +this.bb(a) +s=this.a +s=s.y +if(s!==a.y){r=this.f +r===$&&A.b() +q=r.Q +q===$&&A.b() +switch(q.a){case 3:case 0:r.sl(0,s?1:0) +break +case 1:case 2:break}}}, +a6Z(){this.a3(new A.ab6())}, +Oz(){var s,r,q=this +if(q.d==null){s=q.c +s.toString +r=A.tq(s,t.X) +if(r!=null){s=new A.Q2(q.gabY(),!1) +q.d=s +r.akU(s) +s=q.c +s.toString +A.aFU(s).ta(q.e)}}}, +a70(a){var s +switch(a.a){case 1:this.Oz() +break +case 2:s=this.d +if(s!=null)s.eg(0) +this.d=null +break +case 0:break +case 3:break}}, +abZ(){this.d=null +this.aA(0)}, +abx(a){var s=this.f +s===$&&A.b() +s.ff(0) +this.Oz()}, +abv(){var s=this,r=s.f +r===$&&A.b() +if(r.gb6(r)!==B.K){r=s.f.r +r=r!=null&&r.a!=null}else r=!0 +if(r)return +r=s.f.x +r===$&&A.b() +if(r<0.5)s.aA(0) +else s.BT(0)}, +gOr(a){var s=$.aa.F$.z.i(0,this.r) +s=s==null?null:s.ga_() +t.aA.a(s) +if(s!=null)return s.gv(s).a +return 304}, +aeY(a){var s,r,q,p=this,o=a.c +o.toString +s=o/p.gOr(p) +switch(p.a.d.a){case 0:break +case 1:s=-s +break}o=p.c.ap(t.I) +o.toString +switch(o.w.a){case 0:o=p.f +o===$&&A.b() +r=o.x +r===$&&A.b() +o.sl(0,r-s) +break +case 1:o=p.f +o===$&&A.b() +r=o.x +r===$&&A.b() +o.sl(0,r+s) +break}o=p.f +o===$&&A.b() +o=o.x +o===$&&A.b() +q=o>0.5 +if(q!==p.w){p.a.toString +o=!0}else o=!1 +if(o)p.a.e.$1(q) +p.w=q}, +aik(a){var s,r=this,q=r.f +q===$&&A.b() +if(q.gb6(q)===B.K)return +q=a.a.a.a +if(Math.abs(q)>=365){s=q/r.gOr(r) +switch(r.a.d.a){case 0:break +case 1:s=-s +break}q=r.c.ap(t.I) +q.toString +switch(q.w.a){case 0:r.f.AP(-s) +r.a.e.$1(s<0) +break +case 1:r.f.AP(s) +r.a.e.$1(s>0) +break}}else{q=r.f.x +q===$&&A.b() +if(q<0.5)r.aA(0) +else r.BT(0)}}, +BT(a){var s=this.f +s===$&&A.b() +s.apM() +this.a.e.$1(!0)}, +aA(a){var s=this.f +s===$&&A.b() +s.AP(-1) +this.a.e.$1(!1)}, +a7A(){this.a.toString +var s=this.c +s.toString +s=A.aKM(s).b +return new A.f4(B.n,s==null?B.R:s)}, +gOs(){switch(this.a.d.a){case 0:return B.fH +case 1:return B.mH}}, +ga9v(){switch(this.a.d.a){case 0:return B.mH +case 1:return B.fH}}, +a9u(a){var s,r,q,p,o,n,m,l,k,j=this,i=null,h=j.a.d===B.od,g=a.ap(t.I) +g.toString +switch(A.ak(a).r.a){case 0:case 2:case 1:s=!1 +break +case 4:case 3:case 5:s=!0 +break +default:s=i}r=j.a.x +q=A.bt(a,B.b1,t.w).w.r +switch(g.w.a){case 1:r=20+(h?q.a:q.c) +break +case 0:r=20+(h?q.c:q.a) +break}g=j.f +g===$&&A.b() +g=g.Q +g===$&&A.b() +if(g===B.K){j.a.toString +if(!s){g=j.gOs() +p=j.a.f +return new A.h8(g,i,i,A.hn(B.cf,A.bP(i,i,B.o,i,i,i,i,i,i,i,i,i,i,r),p,!0,j.y,i,i,i,j.gSb(),i,j.gQx(),i,i,i,i,i,i,i,i,i,i,i,i),i)}else return B.aF}else{switch(A.ak(a).r.a){case 0:o=!0 +break +case 2:case 4:case 1:case 3:case 5:o=!1 +break +default:o=i}g=j.a +g.toString +A.n7(a,B.ck,t.c4).toString +p=j.x +p===$&&A.b() +n=j.f +n=A.aJM(new A.oC(o,A.hn(i,A.cH(i,i,A.bP(i,i,B.o,p.a2(0,n.gl(n)),i,i,i,i,i,i,i,i,i,i),!1,i,!1,!1,i,i,i,i,"Dismiss",i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i),B.af,!1,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,j.guR(j),i,i,i),i)) +p=j.gOs() +m=j.ga9v() +l=j.f.x +l===$&&A.b() +k=new A.HH(g,new A.iZ(A.kA(B.bM,A.a([n,new A.h8(p,i,i,new A.h8(m,l,i,new A.iZ(A.aFT(!1,j.a.c,i,j.r,j.e),i),i),i)],t.p),B.a9,B.bJ),i),i) +if(s)return k +return A.hn(i,k,j.a.f,!0,j.y,i,j.gabu(),j.gabw(),j.gSb(),i,j.gQx(),i,i,i,i,i,i,i,i,i,i,i,i)}}, +H(a){return A.aYf(this.a9u(a),B.OM)}} +A.ab6.prototype={ +$0(){}, +$S:0} +A.av5.prototype={ +goc(a){var s,r=this,q=r.y +if(q===$){s=r.x.ap(t.I) +s.toString +r.y!==$&&A.ay() +q=r.y=s.w}return q}, +gcA(a){return A.ak(this.x).ax.cy}, +gdi(){var s=A.ak(this.x).ax,r=s.k3 +return r==null?s.b:r}, +gcF(a){return B.n}, +gbV(a){return new A.d8(B.CM.U(this.goc(this)),B.r)}, +gvq(){return new A.d8(B.CL.U(this.goc(this)),B.r)}} +A.HI.prototype={ +m(){var s=this,r=s.c0$ +if(r!=null)r.K(0,s.gjy()) +s.c0$=null +s.aN()}, +bY(){this.dq() +this.cW() +this.jz()}} +A.w_.prototype={ +gt(a){var s=this +return A.N(s.gcA(s),s.b,s.c,s.gcF(s),s.gdi(),s.gbV(s),s.gvq(),s.w,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +if(J.U(b)!==A.t(s))return!1 +return b instanceof A.w_&&J.d(b.gcA(b),s.gcA(s))&&J.d(b.b,s.b)&&b.c==s.c&&J.d(b.gcF(b),s.gcF(s))&&J.d(b.gdi(),s.gdi())&&J.d(b.gbV(b),s.gbV(s))&&J.d(b.gvq(),s.gvq())&&b.w==s.w}, +gcA(a){return this.a}, +gcF(a){return this.d}, +gdi(){return this.e}, +gbV(a){return this.f}, +gvq(){return this.r}} +A.XS.prototype={} +A.BH.prototype={ +gt(a){return A.N(this.a,this.b,this.c,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a,b){var s,r=this +if(b==null)return!1 +if(r===b)return!0 +if(J.U(b)!==A.t(r))return!1 +if(b instanceof A.BH)if(J.d(b.a,r.a))s=J.d(b.c,r.c) +else s=!1 +else s=!1 +return s}} +A.XT.prototype={} +A.BN.prototype={ +gt(a){return J.D(this.a)}, +j(a,b){if(b==null)return!1 +if(this===b)return!0 +if(J.U(b)!==A.t(this))return!1 +return b instanceof A.BN&&J.d(b.a,this.a)}} +A.XY.prototype={} +A.nO.prototype={} +A.BU.prototype={ +gt(a){var s=this +return A.N(s.a,s.b,s.c,s.d,s.e,s.f,s.r,s.w,s.x,s.y,s.z,null,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +if(J.U(b)!==A.t(s))return!1 +return b instanceof A.BU&&J.d(b.a,s.a)&&J.d(b.b,s.b)&&J.d(b.c,s.c)&&J.d(b.d,s.d)&&J.d(b.e,s.e)&&J.d(b.f,s.f)&&J.d(b.r,s.r)&&J.d(b.w,s.w)&&J.d(b.x,s.x)&&J.d(b.y,s.y)&&J.d(b.z,s.z)&&!0}} +A.Y4.prototype={} +A.BW.prototype={ +gt(a){return J.D(this.a)}, +j(a,b){if(b==null)return!1 +if(this===b)return!0 +if(J.U(b)!==A.t(this))return!1 +return b instanceof A.BW&&J.d(b.a,this.a)}} +A.Y9.prototype={} +A.C7.prototype={ +cs(a){var s,r=this +if(r.f===a.f)if(r.r===a.r)if(r.w===a.w)if(r.x===a.x)s=!1 +else s=!0 +else s=!0 +else s=!0 +else s=!0 +return s}} +A.auS.prototype={ +k(a){return""}} +A.Yq.prototype={ +I(){return"_FloatingActionButtonType."+this.b}} +A.OP.prototype={ +H(a5){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a=null,a0=A.ak(a5),a1=a0.aq,a2=this.k1,a3=new A.avc(a5,a2,!0,a,a,a,a,a,6,6,8,a,6,a,!0,a,B.D6,B.D5,B.D7,B.D8,8,a,a,a),a4=a1.a +if(a4==null)a4=a3.ge2() +s=a1.b +if(s==null)s=a3.gcA(a3) +r=a1.c +if(r==null)r=a3.gn5() +q=a1.d +if(q==null)q=a3.gn8() +p=a1.e +if(p==null)p=a3.gtk() +o=a1.f +if(o==null){n=a3.f +n.toString +o=n}m=a1.r +if(m==null){n=a3.r +n.toString +m=n}l=a1.w +if(l==null){n=a3.w +n.toString +l=n}n=a1.x +k=n==null?a3.x:n +if(k==null)k=o +j=a1.y +if(j==null){n=a3.y +n.toString +j=n}i=a1.Q +if(i==null){n=a3.Q +n.toString +i=n}h=a1.as +if(h==null){n=a3.gfO() +n.toString +h=n}n=a1.cy +if(n==null){n=a3.gvu() +n.toString}g=n.ey(a4) +f=a1.z +if(f==null){n=a3.gbV(a3) +n.toString +f=n}n=this.c +e=A.Cx(n,new A.dt(h,a,a,a,a,a,a,a)) +switch(a2.a){case 0:d=a1.at +if(d==null){a2=a3.at +a2.toString +d=a2}break +case 1:d=a1.ax +if(d==null){a2=a3.ax +a2.toString +d=a2}break +case 2:d=a1.ay +if(d==null){a2=a3.ay +a2.toString +d=a2}break +case 3:d=a1.ch +if(d==null){a2=a3.ch +a2.toString +d=a2}c=a1.cx +if(c==null)c=a3.gvt() +a2=A.a([],t.p) +a2.push(n) +e=new A.WG(new A.bH(c,A.eQ(a2,B.T,B.U,B.bf),a),a) +break +default:d=a}b=A.aLc(new A.Ek(this.z,new A.XX(a,a1.db),g,s,r,q,p,o,l,m,j,k,d,f,e,a0.e,a,!1,B.o,i,a),a,a,a,B.Eo,!1) +return new A.Qq(b,a)}} +A.XX.prototype={ +U(a){var s=A.i1(this.a,a,t.WV) +if(s==null)s=null +return s==null?B.ec.U(a):s}, +gv7(){return"MaterialStateMouseCursor(FloatActionButton)"}} +A.WG.prototype={ +az(a){var s=a.ap(t.I) +s.toString +s=new A.a0O(B.ah,s.w,null,A.ag(t.T)) +s.aw() +s.saP(null) +return s}, +aF(a,b){var s=a.ap(t.I) +s.toString +b.sbS(s.w)}} +A.a0O.prototype={ +c5(a){var s,r=this.fr$,q=a.a,p=a.b,o=a.c,n=a.d +if(r!=null){s=r.ke(B.cN) +return new A.G(Math.max(q,Math.min(p,s.a)),Math.max(o,Math.min(n,s.b)))}else return new A.G(A.O(1/0,q,p),A.O(1/0,o,n))}, +bA(){var s=this,r=t.k.a(A.r.prototype.gW.call(s)),q=s.fr$,p=r.a,o=r.b,n=r.c,m=r.d +if(q!=null){q.bJ(B.cN,!0) +q=s.fr$ +q=Math.max(p,Math.min(o,q.gv(q).a)) +o=s.fr$ +s.id=new A.G(q,Math.max(n,Math.min(m,o.gv(o).b))) +s.zJ()}else s.id=new A.G(A.O(1/0,p,o),A.O(1/0,n,m))}} +A.avc.prototype={ +gtJ(){var s,r=this,q=r.fx +if(q===$){s=A.ak(r.dx) +r.fx!==$&&A.ay() +q=r.fx=s.ax}return q}, +ge2(){var s=this.gtJ(),r=s.e +return r==null?s.c:r}, +gcA(a){var s=this.gtJ(),r=s.d +return r==null?s.b:r}, +gtk(){var s=this.gtJ(),r=s.e +s=(r==null?s.c:r).a +return A.C(31,s>>>16&255,s>>>8&255,s&255)}, +gn5(){var s=this.gtJ(),r=s.e +s=(r==null?s.c:r).a +return A.C(31,s>>>16&255,s>>>8&255,s&255)}, +gn8(){var s=this.gtJ(),r=s.e +s=(r==null?s.c:r).a +return A.C(20,s>>>16&255,s>>>8&255,s&255)}, +gbV(a){switch(this.dy.a){case 0:return B.zy +case 1:return B.Wq +case 2:return B.Wr +case 3:return B.zy}}, +gfO(){switch(this.dy.a){case 0:return 24 +case 1:return 24 +case 2:return 36 +case 3:return 24}}, +gvt(){return new A.f8(this.fr&&this.dy===B.a69?16:20,0,20,0)}, +gvu(){var s,r=this,q=r.fy +if(q===$){s=A.ak(r.dx) +r.fy!==$&&A.ay() +q=r.fy=s.p3}return q.as}} +A.acP.prototype={ +k(a){return"FloatingActionButtonLocation"}} +A.ap9.prototype={ +arU(){return!1}, +ns(a){var s=this.arU()?4:0 +return new A.k(this.a06(a,s),this.a07(a,s))}} +A.acB.prototype={ +a07(a,b){var s=a.c,r=a.b.b,q=a.a.b,p=a.w.b,o=s-q-Math.max(16,a.f.d-(a.r.b-s)+16) +if(p>0)o=Math.min(o,s-p-q-16) +return(r>0?Math.min(o,s-r-q/2):o)+b}} +A.acA.prototype={ +a06(a,b){switch(a.y.a){case 0:return 16+a.e.a-b +case 1:return A.b_V(a,b)}}} +A.av6.prototype={ +k(a){return"FloatingActionButtonLocation.endFloat"}} +A.acO.prototype={ +k(a){return"FloatingActionButtonAnimator"}} +A.aA7.prototype={ +a05(a,b,c){if(c<0.5)return a +else return b}} +A.GP.prototype={ +gl(a){var s=this,r=s.w.x +r===$&&A.b() +if(r>>16&255,r.gl(r)>>>8&255,r.gl(r)&255) +return s}if(a.p(0,B.I)){s=q.c +r=q.a +s=r==null?p:A.C(20,r.gl(r)>>>16&255,r.gl(r)>>>8&255,r.gl(r)&255) +return s}if(a.p(0,B.N)){s=q.b +r=q.a +s=r==null?p:A.C(31,r.gl(r)>>>16&255,r.gl(r)>>>8&255,r.gl(r)&255) +return s}}if(a.p(0,B.L)){s=q.d +r=q.a +s=r==null?p:A.C(31,r.gl(r)>>>16&255,r.gl(r)>>>8&255,r.gl(r)&255) +return s}if(a.p(0,B.I)){s=q.c +r=q.a +s=r==null?p:A.C(20,r.gl(r)>>>16&255,r.gl(r)>>>8&255,r.gl(r)&255) +return s}if(a.p(0,B.N)){s=q.b +r=q.a +s=r==null?p:A.C(20,r.gl(r)>>>16&255,r.gl(r)>>>8&255,r.gl(r)&255) +return s}return p}, +k(a){return"{hovered: "+A.h(this.c)+", focused: "+A.h(this.b)+", pressed: "+A.h(this.d)+", otherwise: null}"}} +A.YU.prototype={ +U(a){if(a.p(0,B.P))return this.b +return this.a}} +A.YW.prototype={ +gaX(){var s,r=this,q=r.fx +if(q===$){s=A.ak(r.dy) +r.fx!==$&&A.ay() +q=r.fx=s.ax}return q}, +gcA(a){return B.TQ}, +ge2(){return new A.bB(new A.aw2(this),t.V)}, +gcr(){return new A.bB(new A.aw4(this),t.V)}, +gfq(a){return B.eT}, +gcF(a){return B.bF}, +gdi(){return B.bF}, +gdn(a){return B.hQ}, +gk_(){return B.hP}, +gjY(){return B.eV}, +gfO(){return B.hO}, +gfe(){return null}, +gbV(a){return B.eU}, +ghh(){return new A.bB(new A.aw3(),t.Y6)}, +gfB(){return B.e_}, +gkb(){return A.ak(this.dy).e}, +gjs(){return A.ak(this.dy).x}} +A.aw2.prototype={ +$1(a){var s,r +if(a.p(0,B.P)){s=this.a.gaX().db.a +return A.C(97,s>>>16&255,s>>>8&255,s&255)}if(a.p(0,B.G))return this.a.gaX().b +s=this.a.gaX() +r=s.dy +return r==null?s.db:r}, +$S:7} +A.aw4.prototype={ +$1(a){var s,r,q=this +if(a.p(0,B.G)){if(a.p(0,B.L)){s=q.a.gaX().b +return A.C(31,s.gl(s)>>>16&255,s.gl(s)>>>8&255,s.gl(s)&255)}if(a.p(0,B.I)){s=q.a.gaX().b +return A.C(20,s.gl(s)>>>16&255,s.gl(s)>>>8&255,s.gl(s)&255)}if(a.p(0,B.N)){s=q.a.gaX().b +return A.C(31,s.gl(s)>>>16&255,s.gl(s)>>>8&255,s.gl(s)&255)}}if(a.p(0,B.L)){s=q.a.gaX() +r=s.dy +s=(r==null?s.db:r).a +return A.C(31,s>>>16&255,s>>>8&255,s&255)}if(a.p(0,B.I)){s=q.a.gaX() +r=s.dy +s=(r==null?s.db:r).a +return A.C(20,s>>>16&255,s>>>8&255,s&255)}if(a.p(0,B.N)){s=q.a.gaX() +r=s.dy +s=(r==null?s.db:r).a +return A.C(31,s>>>16&255,s>>>8&255,s&255)}return B.n}, +$S:7} +A.aw3.prototype={ +$1(a){if(a.p(0,B.P))return B.bK +return B.c0}, +$S:64} +A.Ya.prototype={ +gaX(){var s,r=this,q=r.fx +if(q===$){s=A.ak(r.dy) +r.fx!==$&&A.ay() +q=r.fx=s.ax}return q}, +gcA(a){return new A.bB(new A.avd(this),t.V)}, +ge2(){return new A.bB(new A.ave(this),t.V)}, +gcr(){return new A.bB(new A.avg(this),t.V)}, +gfq(a){return B.eT}, +gcF(a){return B.bF}, +gdi(){return B.bF}, +gdn(a){return B.hQ}, +gk_(){return B.hP}, +gjY(){return B.eV}, +gfO(){return B.hO}, +gfe(){return null}, +gbV(a){return B.eU}, +ghh(){return new A.bB(new A.avf(),t.Y6)}, +gfB(){return B.e_}, +gkb(){return A.ak(this.dy).e}, +gjs(){return A.ak(this.dy).x}} +A.avd.prototype={ +$1(a){var s,r +if(a.p(0,B.P)){s=this.a.gaX().db.a +return A.C(31,s>>>16&255,s>>>8&255,s&255)}if(a.p(0,B.G))return this.a.gaX().b +s=this.a +if(s.fr){s=s.gaX() +r=s.dx +return r==null?s.cy:r}return s.gaX().b}, +$S:7} +A.ave.prototype={ +$1(a){var s +if(a.p(0,B.P)){s=this.a.gaX().db.a +return A.C(97,s>>>16&255,s>>>8&255,s&255)}if(a.p(0,B.G))return this.a.gaX().c +s=this.a +if(s.fr)return s.gaX().b +return s.gaX().c}, +$S:7} +A.avg.prototype={ +$1(a){var s,r=this +if(a.p(0,B.G)){if(a.p(0,B.L)){s=r.a.gaX().c.a +return A.C(31,s>>>16&255,s>>>8&255,s&255)}if(a.p(0,B.I)){s=r.a.gaX().c.a +return A.C(20,s>>>16&255,s>>>8&255,s&255)}if(a.p(0,B.N)){s=r.a.gaX().c.a +return A.C(31,s>>>16&255,s>>>8&255,s&255)}}s=r.a +if(s.fr){if(a.p(0,B.L)){s=s.gaX().b +return A.C(31,s.gl(s)>>>16&255,s.gl(s)>>>8&255,s.gl(s)&255)}if(a.p(0,B.I)){s=s.gaX().b +return A.C(20,s.gl(s)>>>16&255,s.gl(s)>>>8&255,s.gl(s)&255)}if(a.p(0,B.N)){s=s.gaX().b +return A.C(31,s.gl(s)>>>16&255,s.gl(s)>>>8&255,s.gl(s)&255)}}if(a.p(0,B.L)){s=s.gaX().c.a +return A.C(31,s>>>16&255,s>>>8&255,s&255)}if(a.p(0,B.I)){s=s.gaX().c.a +return A.C(20,s>>>16&255,s>>>8&255,s&255)}if(a.p(0,B.N)){s=s.gaX().c.a +return A.C(31,s>>>16&255,s>>>8&255,s&255)}return B.n}, +$S:7} +A.avf.prototype={ +$1(a){if(a.p(0,B.P))return B.bK +return B.c0}, +$S:64} +A.Yb.prototype={ +gaX(){var s,r=this,q=r.fx +if(q===$){s=A.ak(r.dy) +r.fx!==$&&A.ay() +q=r.fx=s.ax}return q}, +gcA(a){return new A.bB(new A.avh(this),t.V)}, +ge2(){return new A.bB(new A.avi(this),t.V)}, +gcr(){return new A.bB(new A.avk(this),t.V)}, +gfq(a){return B.eT}, +gcF(a){return B.bF}, +gdi(){return B.bF}, +gdn(a){return B.hQ}, +gk_(){return B.hP}, +gjY(){return B.eV}, +gfO(){return B.hO}, +gfe(){return null}, +gbV(a){return B.eU}, +ghh(){return new A.bB(new A.avj(),t.Y6)}, +gfB(){return B.e_}, +gkb(){return A.ak(this.dy).e}, +gjs(){return A.ak(this.dy).x}} +A.avh.prototype={ +$1(a){var s,r +if(a.p(0,B.P)){s=this.a.gaX().db.a +return A.C(31,s>>>16&255,s>>>8&255,s&255)}if(a.p(0,B.G)){s=this.a.gaX() +r=s.w +return r==null?s.f:r}s=this.a +if(s.fr){s=s.gaX() +r=s.dx +return r==null?s.cy:r}s=s.gaX() +r=s.w +return r==null?s.f:r}, +$S:7} +A.avi.prototype={ +$1(a){var s,r +if(a.p(0,B.P)){s=this.a.gaX().db.a +return A.C(97,s>>>16&255,s>>>8&255,s&255)}if(a.p(0,B.G)){s=this.a.gaX() +r=s.x +return r==null?s.r:r}s=this.a +if(s.fr){s=s.gaX() +r=s.dy +return r==null?s.db:r}s=s.gaX() +r=s.x +return r==null?s.r:r}, +$S:7} +A.avk.prototype={ +$1(a){var s,r,q=this +if(a.p(0,B.G)){if(a.p(0,B.L)){s=q.a.gaX() +r=s.x +s=(r==null?s.r:r).a +return A.C(31,s>>>16&255,s>>>8&255,s&255)}if(a.p(0,B.I)){s=q.a.gaX() +r=s.x +s=(r==null?s.r:r).a +return A.C(20,s>>>16&255,s>>>8&255,s&255)}if(a.p(0,B.N)){s=q.a.gaX() +r=s.x +s=(r==null?s.r:r).a +return A.C(31,s>>>16&255,s>>>8&255,s&255)}}s=q.a +if(s.fr){if(a.p(0,B.L)){s=s.gaX() +r=s.dy +s=(r==null?s.db:r).a +return A.C(31,s>>>16&255,s>>>8&255,s&255)}if(a.p(0,B.I)){s=s.gaX() +r=s.dy +s=(r==null?s.db:r).a +return A.C(20,s>>>16&255,s>>>8&255,s&255)}if(a.p(0,B.N)){s=s.gaX() +r=s.dy +s=(r==null?s.db:r).a +return A.C(31,s>>>16&255,s>>>8&255,s&255)}}if(a.p(0,B.L)){s=s.gaX() +r=s.x +s=(r==null?s.r:r).a +return A.C(31,s>>>16&255,s>>>8&255,s&255)}if(a.p(0,B.I)){s=s.gaX() +r=s.x +s=(r==null?s.r:r).a +return A.C(20,s>>>16&255,s>>>8&255,s&255)}if(a.p(0,B.N)){s=s.gaX() +r=s.x +s=(r==null?s.r:r).a +return A.C(31,s>>>16&255,s>>>8&255,s&255)}return B.n}, +$S:7} +A.avj.prototype={ +$1(a){if(a.p(0,B.P))return B.bK +return B.c0}, +$S:64} +A.a_r.prototype={ +gaX(){var s,r=this,q=r.fx +if(q===$){s=A.ak(r.dy) +r.fx!==$&&A.ay() +q=r.fx=s.ax}return q}, +gcA(a){return new A.bB(new A.ayn(this),t.V)}, +ge2(){return new A.bB(new A.ayo(this),t.V)}, +gcr(){return new A.bB(new A.ayq(this),t.V)}, +gfq(a){return B.eT}, +gcF(a){return B.bF}, +gdi(){return B.bF}, +gdn(a){return B.hQ}, +gk_(){return B.hP}, +gjY(){return B.eV}, +gfO(){return B.hO}, +gfe(){return new A.bB(new A.ayr(this),t.Sq)}, +gbV(a){return B.eU}, +ghh(){return new A.bB(new A.ayp(),t.Y6)}, +gfB(){return B.e_}, +gkb(){return A.ak(this.dy).e}, +gjs(){return A.ak(this.dy).x}} +A.ayn.prototype={ +$1(a){var s,r +if(a.p(0,B.P)){if(a.p(0,B.G)){s=this.a.gaX().db.a +return A.C(31,s>>>16&255,s>>>8&255,s&255)}return B.n}if(a.p(0,B.G)){s=this.a.gaX() +r=s.id +return r==null?s.db:r}return B.n}, +$S:7} +A.ayo.prototype={ +$1(a){var s,r +if(a.p(0,B.P)){s=this.a.gaX().db.a +return A.C(97,s>>>16&255,s>>>8&255,s&255)}if(a.p(0,B.G)){s=this.a.gaX() +r=s.k1 +return r==null?s.cy:r}s=this.a.gaX() +r=s.dy +return r==null?s.db:r}, +$S:7} +A.ayq.prototype={ +$1(a){var s,r,q=this +if(a.p(0,B.G)){if(a.p(0,B.L)){s=q.a.gaX() +r=s.k1 +s=(r==null?s.cy:r).a +return A.C(31,s>>>16&255,s>>>8&255,s&255)}if(a.p(0,B.I)){s=q.a.gaX() +r=s.k1 +s=(r==null?s.cy:r).a +return A.C(20,s>>>16&255,s>>>8&255,s&255)}if(a.p(0,B.N)){s=q.a.gaX() +r=s.k1 +s=(r==null?s.cy:r).a +return A.C(20,s>>>16&255,s>>>8&255,s&255)}}if(a.p(0,B.L)){s=q.a.gaX().db.a +return A.C(31,s>>>16&255,s>>>8&255,s&255)}if(a.p(0,B.I)){s=q.a.gaX() +r=s.dy +s=(r==null?s.db:r).a +return A.C(20,s>>>16&255,s>>>8&255,s&255)}if(a.p(0,B.N)){s=q.a.gaX() +r=s.dy +s=(r==null?s.db:r).a +return A.C(20,s>>>16&255,s>>>8&255,s&255)}return B.n}, +$S:7} +A.ayr.prototype={ +$1(a){var s,r +if(a.p(0,B.G))return null +else{if(a.p(0,B.P)){s=this.a.gaX().db.a +return new A.b_(A.C(31,s>>>16&255,s>>>8&255,s&255),1,B.y,-1)}s=this.a.gaX() +r=s.fr +return new A.b_(r==null?s.cx:r,1,B.y,-1)}}, +$S:331} +A.ayp.prototype={ +$1(a){if(a.p(0,B.P))return B.bK +return B.c0}, +$S:64} +A.a4A.prototype={} +A.rL.prototype={ +gt(a){return J.D(this.a)}, +j(a,b){if(b==null)return!1 +if(this===b)return!0 +if(J.U(b)!==A.t(this))return!1 +return b instanceof A.rL&&J.d(b.a,this.a)}} +A.Cv.prototype={ +rS(a,b,c){return A.aG4(c,this.w)}, +cs(a){return!this.w.j(0,a.w)}} +A.YY.prototype={} +A.oS.prototype={ +ab1(a){var s +if(a===B.K&&!this.CW){s=this.ch +s===$&&A.b() +s.m() +this.mh()}}, +m(){var s=this.ch +s===$&&A.b() +s.m() +this.mh()}, +QQ(a,b,c){var s,r,q=this +a.bH(0) +s=q.f +if(s!=null)a.iS(0,s.dV(b,q.ax)) +switch(q.z.a){case 1:s=b.gaK() +r=q.Q +a.du(s,r==null?35:r,c) +break +case 0:s=q.as +if(!s.j(0,B.H))a.bQ(A.xn(b,s.c,s.d,s.a,s.b),c) +else a.cB(b,c) +break}a.b_(0)}, +JY(a,b){var s,r,q,p=this,o=$.W().aj(),n=p.e,m=p.ay +m===$&&A.b() +s=m.a +o.sM(0,A.C(m.b.a2(0,s.gl(s)),n.gl(n)>>>16&255,n.gl(n)>>>8&255,n.gl(n)&255)) +r=A.ahB(b) +n=p.at +if(n!=null)q=n.$0() +else{n=p.b +n=n.gv(n) +q=new A.w(0,0,0+n.a,0+n.b)}if(r==null){a.bH(0) +a.a2(0,b.a) +p.QQ(a,q,o) +a.b_(0)}else p.QQ(a,q.cm(r),o)}} +A.aCL.prototype={ +$0(){var s=this.a +s=s.gv(s) +return new A.w(0,0,0+s.a,0+s.b)}, +$S:222} +A.awn.prototype={ +Vv(a,b,c,d,e,f,g,a0,a1,a2,a3,a4){var s,r,q,p,o,n,m,l,k,j,i,h=null +if(a1==null){if(a2!=null){s=a2.$0() +r=new A.G(s.c-s.a,s.d-s.b)}else r=a3.gv(a3) +s=Math.max(r.zS(0,B.e).gdC(),new A.k(0+r.a,0).Y(0,new A.k(0,0+r.b)).gdC())/2}else s=a1 +q=new A.CE(a0,B.H,s,A.b3A(a3,d,a2),a4,c,f,e,a3,g) +p=e.A +o=A.c5(h,B.h5,h,h,p) +n=e.gdB() +o.by() +m=o.cC$ +m.b=!0 +m.a.push(n) +o.c7(0) +q.cx=o +m=c.gl(c) +l=t.m +k=t.gD +q.CW=new A.aP(l.a(o),new A.oT(0,m>>>24&255),k.h("aP")) +m=A.c5(h,B.h4,h,h,p) +m.by() +o=m.cC$ +o.b=!0 +o.a.push(n) +m.c7(0) +q.ch=m +o=t.Y +j=$.aSa() +i=o.h("e3") +q.ay=new A.aP(l.a(m),new A.e3(j,new A.ar(s*0.3,s+5,o),i),i.h("aP")) +p=A.c5(h,B.of,h,h,p) +p.by() +i=p.cC$ +i.b=!0 +i.a.push(n) +p.by() +n=p.cM$ +n.b=!0 +n.a.push(q.gae_()) +q.db=p +n=c.gl(c) +i=$.aSb() +k=k.h("e3") +q.cy=new A.aP(l.a(p),new A.e3(i,new A.oT(n>>>24&255,0),k),k.h("aP")) +e.H8(q) +return q}} +A.CE.prototype={ +uT(a){var s=this.ch +s===$&&A.b() +s.e=B.Li +s.c7(0) +s=this.cx +s===$&&A.b() +s.c7(0) +s=this.db +s===$&&A.b() +s.z=B.aA +s.kj(1,B.ae,B.of)}, +b3(a){var s,r=this,q=r.cx +q===$&&A.b() +q.ff(0) +q=r.cx.x +q===$&&A.b() +s=1-q +q=r.db +q===$&&A.b() +q.sl(0,s) +if(s<1){q=r.db +q.z=B.aA +q.kj(1,B.ae,B.h5)}}, +ae0(a){if(a===B.a7)this.m()}, +m(){var s=this,r=s.ch +r===$&&A.b() +r.m() +r=s.cx +r===$&&A.b() +r.m() +r=s.db +r===$&&A.b() +r.m() +s.mh()}, +JY(a,b){var s,r,q,p,o,n,m=this,l=m.cx +l===$&&A.b() +l=l.r +if(l!=null&&l.a!=null){l=m.CW +l===$&&A.b() +s=l.a +r=l.b.a2(0,s.gl(s))}else{l=m.cy +l===$&&A.b() +s=l.a +r=l.b.a2(0,s.gl(s))}q=$.W().aj() +l=m.e +q.sM(0,A.C(r,l.gl(l)>>>16&255,l.gl(l)>>>8&255,l.gl(l)&255)) +l=m.at +if(l!=null)p=l.$0() +else p=null +if(p!=null)s=p.gaK() +else{s=m.b +s=s.gv(s).iP(B.e)}o=m.ch +o===$&&A.b() +o=o.x +o===$&&A.b() +o=A.lz(m.z,s,B.bA.a2(0,o)) +o.toString +s=m.ay +s===$&&A.b() +n=s.a +n=s.b.a2(0,n.gl(n)) +m.Yn(m.Q,a,o,l,m.f,q,n,m.ax,b)}} +A.aCK.prototype={ +$0(){var s=this.a +s=s.gv(s) +return new A.w(0,0,0+s.a,0+s.b)}, +$S:222} +A.awo.prototype={ +Vv(a,b,c,d,e,f,g,h,i,j,k,a0){var s,r,q=null,p=i==null?A.b3D(k,d,j,h):i,o=new A.CF(h,B.H,p,A.b3z(k,d,j),!d,a0,c,f,e,k,g),n=e.A,m=A.c5(q,B.h4,q,q,n),l=e.gdB() +m.by() +s=m.cC$ +s.b=!0 +s.a.push(l) +m.c7(0) +o.CW=m +s=t.Y +r=t.m +o.ch=new A.aP(r.a(m),new A.ar(0,p,s),s.h("aP")) +n=A.c5(q,B.am,q,q,n) +n.by() +s=n.cC$ +s.b=!0 +s.a.push(l) +n.by() +l=n.cM$ +l.b=!0 +l.a.push(o.gae1()) +o.cy=n +l=c.gl(c) +o.cx=new A.aP(r.a(n),new A.oT(l>>>24&255,0),t.gD.h("aP")) +e.H8(o) +return o}} +A.CF.prototype={ +uT(a){var s=B.c.dP(this.as/1),r=this.CW +r===$&&A.b() +r.e=A.dp(0,s) +r.c7(0) +this.cy.c7(0)}, +b3(a){var s=this.cy +if(s!=null)s.c7(0)}, +ae2(a){if(a===B.a7)this.m()}, +m(){var s=this,r=s.CW +r===$&&A.b() +r.m() +s.cy.m() +s.cy=null +s.mh()}, +JY(a,b){var s,r,q=this,p=$.W().aj(),o=q.e,n=q.cx +n===$&&A.b() +s=n.a +p.sM(0,A.C(n.b.a2(0,s.gl(s)),o.gl(o)>>>16&255,o.gl(o)>>>8&255,o.gl(o)&255)) +r=q.z +if(q.ax){o=q.b +o=o.gv(o).iP(B.e) +n=q.CW +n===$&&A.b() +n=n.x +n===$&&A.b() +r=A.lz(r,o,n)}r.toString +o=q.ch +o===$&&A.b() +n=o.a +n=o.b.a2(0,n.gl(n)) +q.Yn(q.Q,a,r,q.at,q.f,p,n,q.ay,b)}} +A.oU.prototype={ +uT(a){}, +b3(a){}, +sM(a,b){if(b.j(0,this.e))return +this.e=b +this.a.ag()}, +sHZ(a){if(J.d(a,this.f))return +this.f=a +this.a.ag()}, +Yn(a,b,c,d,e,f,g,h,i){var s,r=A.ahB(i) +b.bH(0) +if(r==null)b.a2(0,i.a) +else b.au(0,r.a,r.b) +if(d!=null){s=d.$0() +if(e!=null)b.iS(0,e.dV(s,h)) +else if(!a.j(0,B.H))b.o5(A.xn(s,a.c,a.d,a.a,a.b)) +else b.ia(s)}b.du(c,g,f) +b.b_(0)}} +A.wy.prototype={} +A.IM.prototype={ +cs(a){return this.f!==a.f}} +A.CD.prototype={ +a0h(a){return null}, +H(a){var s=this,r=a.ap(t.sZ),q=r==null?null:r.f +return new A.I8(s.c,s.d,s.e,s.f,s.r,s.w,s.x,s.y,s.Q,s.z,s.as,s.at,s.ax,s.ay,s.ch,s.CW,s.cx,s.cy,s.db,s.dx,s.dy,s.fr,s.fx,s.fy,s.go,s.id,!1,s.k2,!1,s.k4,s.ok,q,s.ga0g(),s.ganK(),s.p1,s.p2,null)}, +anL(a){return!0}} +A.I8.prototype={ +ac(){return new A.I7(A.A(t.R9,t.Pr),new A.b5(A.a([],t.ML),t.yw),null,B.j)}} +A.q4.prototype={ +I(){return"_HighlightType."+this.b}} +A.I7.prototype={ +gara(){var s=this.r +s=s.gaT(s) +s=new A.ba(s,new A.awl(),A.o(s).h("ba")) +return!s.ga7(s)}, +Jx(a,b){var s,r=this.y,q=r.a,p=q.length +if(b){r.b=!0 +q.push(a)}else r.C(0,a) +s=q.length!==0 +if(s!==(p!==0)){r=this.a.p1 +if(r!=null)r.Jx(this,s)}}, +akF(a){var s=this,r=s.z +if(r!=null)r.b3(0) +s.z=null +r=s.c +r.toString +s.Sq(r) +r=s.e +if(r!=null)r.uT(0) +s.e=null +r=s.a +if(r.id){r=s.c +r.toString +A.acF(r)}s.a.d.$0() +s.z=A.cy(B.aD,new A.awh(s))}, +LK(a){var s=this.c +s.toString +this.Sq(s) +this.X3()}, +a1t(){return this.LK(null)}, +IY(){this.a3(new A.awk())}, +geI(){var s=this.a.p4 +if(s==null){s=this.x +s.toString}return s}, +vQ(){var s,r,q=this +if(q.a.p4==null)q.x=A.aGl(null) +s=q.geI() +r=q.a +r.toString +s.fW(0,B.P,!(q.hY(r)||q.hZ(r))) +q.geI().Z(0,q.goB())}, +aB(){this.a5M() +this.vQ() +$.aa.F$.f.a.d.D(0,this.gX0())}, +aO(a){var s,r,q,p,o=this +o.bb(a) +s=a.p4 +if(o.a.p4!=s){if(s!=null)s.K(0,o.goB()) +if(o.a.p4!=null){s=o.x +if(s!=null){s.fy$=$.aO() +s.fx$=0}o.x=null}o.vQ()}s=o.a +if(s.cx!=a.cx||s.CW!==a.CW||!1){s=o.r +r=s.i(0,B.e1) +if(r!=null){q=r.ch +q===$&&A.b() +q.m() +r.mh() +o.KO(B.e1,!1,o.f)}p=s.i(0,B.BE) +if(p!=null){s=p.ch +s===$&&A.b() +s.m() +p.mh()}}if(!J.d(o.a.db,a.db))o.ajS() +s=o.a +s.toString +s=o.hY(s)||o.hZ(s) +if(s!==(o.hY(a)||o.hZ(a))){s=o.geI() +q=o.a +q.toString +s.fW(0,B.P,!(o.hY(q)||o.hZ(q))) +s=o.a +s.toString +if(!(o.hY(s)||o.hZ(s))){o.geI().fW(0,B.L,!1) +r=o.r.i(0,B.e1) +if(r!=null){s=r.ch +s===$&&A.b() +s.m() +r.mh()}}o.KO(B.e1,!1,o.f)}o.KN()}, +m(){var s,r=this +$.aa.F$.f.a.d.C(0,r.gX0()) +r.geI().K(0,r.goB()) +s=r.x +if(s!=null){s.fy$=$.aO() +s.fx$=0}s=r.z +if(s!=null)s.b3(0) +r.z=null +r.aN()}, +gwW(){if(!this.gara()){var s=this.d +s=s!=null&&s.a!==0}else s=!0 +return s}, +a_X(a){switch(a.a){case 0:return B.am +case 1:case 2:this.a.toString +return B.eq}}, +KO(a,b,c){var s,r,q,p,o,n,m,l,k,j,i,h=this,g=null,f=h.r,e=f.i(0,a),d=a.a +switch(d){case 0:h.geI().fW(0,B.L,c) +break +case 1:if(b)h.geI().fW(0,B.I,c) +break +case 2:break}if(a===B.dr){s=h.a.p1 +if(s!=null)s.Jx(h,c)}s=e==null +if(c===(!s&&e.CW))return +if(c)if(s){s=h.a.fx +if(s==null)r=g +else{q=h.geI().a +r=s.a.$1(q)}if(r==null){s=h.c +s.toString +p=A.ak(s) +switch(d){case 0:r=h.a.fr +if(r==null)r=p.cy +break +case 2:r=h.a.dx +if(r==null)r=p.cx +break +case 1:r=h.a.dy +if(r==null)r=p.dx +break}}s=h.c.ga_() +s.toString +t.x.a(s) +q=h.c +q.toString +q=A.aLK(q,t.zd) +q.toString +o=h.a +o.toString +o=h.hY(o)||h.hZ(o)?r:A.C(0,r.gl(r)>>>16&255,r.gl(r)>>>8&255,r.gl(r)&255) +n=h.a +m=n.CW +l=n.cx +k=n.db +n=n.p2.$1(s) +j=h.c.ap(t.I) +j.toString +i=h.a_X(a) +s=new A.oS(m,l,B.H,n,j.w,o,k,q,s,new A.awm(h,a)) +i=A.c5(g,i,g,g,q.A) +i.by() +o=i.cC$ +o.b=!0 +o.a.push(q.gdB()) +i.by() +o=i.cM$ +o.b=!0 +o.a.push(s.gab0()) +i.c7(0) +s.ch=i +o=s.e +o=o.gl(o) +s.ay=new A.aP(t.m.a(i),new A.oT(0,o>>>24&255),t.gD.h("aP")) +q.H8(s) +f.n(0,a,s) +h.pe()}else{e.CW=!0 +f=e.ch +f===$&&A.b() +f.c7(0)}else{e.CW=!1 +f=e.ch +f===$&&A.b() +f.dc(0)}switch(d){case 0:f=h.a.at +if(f!=null)f.$1(c) +break +case 1:if(b){f=h.a.ax +if(f!=null)f.$1(c)}break +case 2:break}}, +m4(a,b){return this.KO(a,!0,b)}, +ajS(){var s,r,q,p=this +for(s=p.r,s=s.gaT(s),r=A.o(s),r=r.h("@<1>").N(r.z[1]),s=new A.bN(J.ap(s.a),s.b,r.h("bN<1,2>")),r=r.z[1];s.q();){q=s.a +if(q==null)q=r.a(q) +if(q!=null)q.sHZ(p.a.db)}s=p.e +if(s!=null)s.sHZ(p.a.db) +s=p.d +if(s!=null&&s.a!==0)for(r=A.o(s),s=new A.jR(s,s.tL(),r.h("jR<1>")),r=r.c;s.q();){q=s.d +if(q==null)q=r.a(q) +q.sHZ(p.a.db)}}, +a8X(a){var s,r,q,p,o,n,m,l,k,j,i=this,h={},g=i.c +g.toString +g=A.aLK(g,t.zd) +g.toString +s=i.c.ga_() +s.toString +t.x.a(s) +r=s.fZ(a) +q=i.a.fx +if(q==null)q=null +else{p=i.geI().a +p=q.a.$1(p) +q=p}o=q==null?i.a.fy:q +if(o==null){q=i.c +q.toString +o=A.ak(q).k3}q=i.a +n=q.ch?q.p2.$1(s):null +q=i.a +m=q.cy +l=q.db +h.a=null +q=q.go +if(q==null){q=i.c +q.toString +q=A.ak(q).x}p=i.a +k=p.ch +p=p.cx +j=i.c.ap(t.I) +j.toString +return h.a=q.Vv(0,m,o,k,g,l,new A.awg(h,i),r,p,n,s,j.w)}, +aq6(a){if(this.c==null)return +this.a3(new A.awj(this))}, +gair(){var s,r=this,q=r.c +q.toString +q=A.d_(q,B.fF) +s=q==null?null:q.ch +switch((s==null?B.f2:s).a){case 0:q=r.a +q.toString +return(r.hY(q)||r.hZ(q))&&r.Q +case 1:return r.Q}}, +KN(){var s,r=$.aa.F$.f.a.b +switch((r==null?A.z2():r).a){case 0:s=!1 +break +case 1:s=this.gair() +break +default:s=null}this.m4(B.BE,s)}, +aq8(a){var s,r=this +r.Q=a +r.geI().fW(0,B.N,a) +r.KN() +s=r.a.k2 +if(s!=null)s.$1(a)}, +WX(a){if(this.y.a.length!==0)return +this.aiY(a)}, +aqR(a){this.WX(a) +this.a.toString}, +aqT(a){this.a.toString}, +aqG(a){this.WX(a) +this.a.toString}, +aqI(a){this.a.toString}, +Sr(a,b){var s,r,q,p,o=this +if(a!=null){s=a.ga_() +s.toString +t.x.a(s) +r=s.gv(s) +r=new A.w(0,0,0+r.a,0+r.b).gaK() +q=A.c7(s.br(0,null),r)}else q=b.a +o.geI().fW(0,B.L,!0) +p=o.a8X(q) +s=o.d;(s==null?o.d=A.ds(t.nQ):s).D(0,p) +s=o.e +if(s!=null)s.b3(0) +o.e=p +o.pe() +o.m4(B.dr,!0)}, +Sq(a){return this.Sr(a,null)}, +aiY(a){return this.Sr(null,a)}, +X3(){var s=this,r=s.e +if(r!=null)r.uT(0) +s.e=null +s.m4(B.dr,!1) +r=s.a +if(r.id){r=s.c +r.toString +A.acF(r)}s.a.d.$0()}, +aqP(){var s=this,r=s.e +if(r!=null)r.b3(0) +s.e=null +s.a.toString +s.m4(B.dr,!1)}, +aqC(){var s=this,r=s.e +if(r!=null)r.uT(0) +s.e=null +s.m4(B.dr,!1) +s.a.toString}, +aqE(){var s=this,r=s.e +if(r!=null)r.b3(0) +s.e=null +s.a.toString +s.m4(B.dr,!1)}, +ez(){var s,r,q,p,o,n,m,l=this,k=l.d +if(k!=null){l.d=null +for(s=A.o(k),k=new A.jR(k,k.tL(),s.h("jR<1>")),s=s.c;k.q();){r=k.d;(r==null?s.a(r):r).m()}l.e=null}for(k=l.r,s=A.lw(k,k.r,A.o(k).c);s.q();){r=s.d +q=k.i(0,r) +if(q!=null){p=q.ch +p===$&&A.b() +p.r.m() +p.r=null +o=p.cM$ +o.b=!1 +B.b.a0(o.a) +n=o.c +if(n===$){m=A.ds(o.$ti.c) +o.c!==$&&A.ay() +o.c=m +n=m}if(n.a>0){n.b=n.c=n.d=n.e=null +n.a=0}o=p.cC$ +o.b=!1 +B.b.a0(o.a) +n=o.c +if(n===$){m=A.ds(o.$ti.c) +o.c!==$&&A.ay() +o.c=m +n=m}if(n.a>0){n.b=n.c=n.d=n.e=null +n.a=0}p.Dw() +q.mh()}k.n(0,r,null)}k=l.a.p1 +if(k!=null)k.Jx(l,!1) +l.a5L()}, +hY(a){return!0}, +hZ(a){return!1}, +aqm(a){var s=this,r=s.f=!0,q=s.a +q.toString +if(!s.hY(q)?s.hZ(q):r)s.m4(B.e1,s.f)}, +aqo(a){this.f=!1 +this.m4(B.e1,!1)}, +ga7S(){var s,r=this,q=r.c +q.toString +q=A.d_(q,B.fF) +s=q==null?null:q.ch +switch((s==null?B.f2:s).a){case 0:q=r.a +q.toString +return(r.hY(q)||r.hZ(q))&&r.a.ok +case 1:return!0}}, +H(a){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e=this,d=null +e.Dx(a) +s=new A.awi(e,a) +for(r=e.r,q=A.lw(r,r.r,A.o(r).c);q.q();){p=q.d +o=r.i(0,p) +if(o!=null)o.sM(0,s.$1(p))}r=e.e +if(r!=null){q=e.a.fx +if(q==null)q=d +else{p=e.geI().a +p=q.a.$1(p) +q=p}if(q==null)q=e.a.fy +r.sM(0,q==null?A.ak(a).k3:q)}r=e.a.ay +if(r==null)r=B.ec +n=A.i1(r,e.geI().a,t.Pb) +m=e.w +if(m===$){r=e.gakE() +q=t.g +p=t.c +l=A.aY([B.Bj,new A.cT(r,new A.b5(A.a([],q),p),t.wY),B.a4_,new A.cT(r,new A.b5(A.a([],q),p),t.nz)],t.u,t.od) +e.w!==$&&A.ay() +e.w=l +m=l}r=e.a.k4 +q=e.ga7S() +p=e.a +p.toString +p=e.hY(p)?e.gaqQ():d +o=e.a +o.toString +o=e.hY(o)?e.gaqS():d +k=e.a +k.toString +k=e.hY(k)?e.gaqN():d +j=e.a +j.toString +j=e.hY(j)?e.gaqO():d +i=e.a +i.toString +i=e.hZ(i)?e.gaqF():d +h=e.a +h.toString +h=e.hZ(h)?e.gaqH():d +g=e.a +g.toString +g=e.hZ(g)?e.gaqB():d +f=e.a +f.toString +f=e.hZ(f)?e.gaqD():d +return new A.IM(e,A.vg(m,A.we(!1,q,A.tr(A.aWm(A.cH(d,d,A.hn(B.b_,e.a.c,B.af,!0,d,d,d,d,d,d,d,d,d,d,d,g,f,i,h,k,j,p,o),!1,d,!1,!1,d,d,d,d,d,d,d,d,d,d,d,d,d,e.ga1s(),d,d,d,d,d,d,d,d,d,d),n),n,d,e.gaql(),e.gaqn(),d),d,d,d,r,!0,d,e.gaq7(),d,d,d,d)),d)}, +$iaHw:1} +A.awl.prototype={ +$1(a){return a!=null}, +$S:338} +A.awh.prototype={ +$0(){this.a.m4(B.dr,!1)}, +$S:0} +A.awk.prototype={ +$0(){}, +$S:0} +A.awm.prototype={ +$0(){var s=this.a +s.r.n(0,this.b,null) +s.pe()}, +$S:0} +A.awg.prototype={ +$0(){var s,r=this.b,q=r.d +if(q!=null){s=this.a +q.C(0,s.a) +if(r.e==s.a)r.e=null +r.pe()}}, +$S:0} +A.awj.prototype={ +$0(){this.a.KN()}, +$S:0} +A.awi.prototype={ +$1(a){var s,r,q=this,p=A.ak(q.b) +switch(a.a){case 0:s=q.a +r=s.a.fx +r=r==null?null:r.a.$1(B.Xm) +s=r==null?s.a.fr:r +return s==null?p.cy:s +case 2:s=q.a +r=s.a.fx +r=r==null?null:r.a.$1(B.Xh) +s=r==null?s.a.dx:r +return s==null?p.cx:s +case 1:s=q.a +r=s.a.fx +r=r==null?null:r.a.$1(B.Xa) +s=r==null?s.a.dy:r +return s==null?p.dx:s}}, +$S:339} +A.Py.prototype={} +A.KL.prototype={ +aB(){this.aR() +if(this.gwW())this.tS()}, +ez(){var s=this.ii$ +if(s!=null){s.a6() +s.eJ() +this.ii$=null}this.tz()}} +A.acQ.prototype={ +I(){return"FloatingLabelBehavior."+this.b}} +A.OQ.prototype={ +gt(a){return B.f.gt(-1)}, +j(a,b){if(b==null)return!1 +if(this===b)return!0 +if(J.U(b)!==A.t(this))return!1 +return b instanceof A.OQ&&!0}, +k(a){return A.aXn(-1)}} +A.Pz.prototype={ +gt(a){var s=null +return A.N(s,s,s,s,s,s,s,B.Nk,B.jh,!1,s,!1,s,s,s,s,s,s,!1,A.N(s,s,s,s,s,s,s,s,s,s,s,!1,s,s,B.a,B.a,B.a,B.a,B.a,B.a))}, +j(a,b){var s +if(b==null)return!1 +if(this===b)return!0 +if(J.U(b)!==A.t(this))return!1 +if(b instanceof A.Pz)if(B.jh.j(0,B.jh))s=!0 +else s=!1 +else s=!1 +return s}} +A.Z4.prototype={} +A.aha.prototype={ +I(){return"ListTileStyle."+this.b}} +A.CZ.prototype={ +gt(a){var s=this +return A.N(s.a,s.b,s.c,s.d,s.e,s.f,s.r,s.w,s.x,s.y,s.z,s.Q,s.as,s.at,s.ax,s.ay,s.ch,s.CW,s.cx,B.a)}, +j(a,b){var s,r=this +if(b==null)return!1 +if(r===b)return!0 +if(J.U(b)!==A.t(r))return!1 +if(b instanceof A.CZ)if(J.d(b.b,r.b))if(b.c==r.c)if(J.d(b.d,r.d))if(J.d(b.e,r.e))if(J.d(b.r,r.r))if(J.d(b.w,r.w))if(J.d(b.x,r.x))if(J.d(b.f,r.f))if(J.d(b.y,r.y))if(J.d(b.z,r.z))if(J.d(b.Q,r.Q))if(b.as==r.as)if(b.at==r.at)if(b.ax==r.ax)s=!0 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +return s}} +A.tc.prototype={ +gic(a){return this.w}, +rS(a,b,c){var s=null,r=this.w,q=r.a,p=r.b,o=r.c,n=r.d,m=r.e,l=r.f,k=r.y,j=r.z,i=r.Q,h=r.ay,g=r.as,f=r.at +r=r.ax +return A.aLH(c,A.aGi(k,q,h,g,m,s,r,f,s,n,i,p,o,s,l,j,s,s,s),s)}, +cs(a){return!this.gic(this).j(0,a.gic(a))}} +A.ahb.prototype={ +$1(a){var s=a.ap(t.NJ),r=s==null?null:s.gic(s) +if(r==null)r=A.ak(a).aD +return A.aLH(this.db,A.aGi(r.y,r.a,r.ay,r.as,r.e,r.x,r.ax,r.at,r.ch,r.d,r.Q,r.b,this.d,r.w,r.f,r.z,r.cx,r.r,r.CW),this.a)}, +$S:340} +A.ZE.prototype={} +A.Gd.prototype={ +ac(){return new A.K0(B.e,B.j)}} +A.aqG.prototype={ +$3(a,b,c){switch(A.by().a){case 2:return new A.Bk(b,c,null) +case 0:return new A.Gd(c,null) +case 1:case 3:case 4:case 5:return null}}, +$C:"$3", +$R:3, +$S:341} +A.K0.prototype={ +aB(){this.aR() +this.a.c.Z(0,this.gEM())}, +m(){var s,r=this +r.a.c.K(0,r.gEM()) +s=r.e +if(s!=null)s.b3(0) +r.aN()}, +bx(){this.Of() +this.dr()}, +aO(a){var s,r=this,q=a.c +if(q!==r.a.c){s=r.gEM() +q.K(0,s) +r.a.c.Z(0,s)}r.bb(a)}, +Of(){var s,r,q,p,o,n,m,l=this,k={},j=l.a.c,i=j.gl(j) +j=l.c +j.toString +j=A.bt(j,B.fE,t.w).w.a +s=i.a +r=i.b +r=new A.k(A.O(s.a,r.a,r.c),i.c.gaK().b).Y(0,new A.k(38.685,59.9)) +s=r.a +r=r.b +q=A.aLM(new A.w(0,0,0+j.a,0+j.b),new A.w(s,r,s+77.37,r+37.9)) +s=q.b +j=i.d +p=j.c +o=j.a +n=p-o<61.896?j.gaK().a:A.O(q.gaK().a,o+30.948,p-30.948) +j=q.gaK() +m=k.a=l.e +p=l.d +if(p!=null&&s!==p.b){if(m!=null&&m.b!=null)m.b3(0) +k.a=A.cy(B.oh,new A.aBf(l))}l.a3(new A.aBg(k,l,new A.k(q.a,s),new A.k(n-j.a,r-s)))}, +H(a){var s,r=this.d,q=r.b +r=r.a +s=this.e!=null?B.oh:B.z +return A.aJy(new A.Q8(this.f,null),B.ae,s,r,q)}} +A.aBf.prototype={ +$0(){var s=this.a +return s.a3(new A.aBe(s))}, +$S:0} +A.aBe.prototype={ +$0(){this.a.e=null}, +$S:0} +A.aBg.prototype={ +$0(){var s=this,r=s.b +r.d=s.c +r.e=s.a.a +r.f=s.d}, +$S:0} +A.Q8.prototype={ +H(a){return new A.Ej(new A.r2(B.ES,null,null),A.aLN(1,B.QM,new A.d8(B.CR,B.r)),this.c.R(0,new A.k(0,40.95)),1.25,B.Y_,null)}} +A.pa.prototype={ +I(){return"MaterialType."+this.b}} +A.D9.prototype={ +ac(){return new A.ZP(new A.bp("ink renderer",t.B),null,null,B.j)}} +A.ZP.prototype={ +aav(a){var s=A.ak(a),r=this.a,q=r.f +if(q==null)switch(r.d.a){case 0:q=s.as +break +case 1:q=s.at +break +case 3:case 2:case 4:break}return q}, +H(a){var s,r,q,p,o,n,m,l=this,k=null,j=A.ak(a),i=l.aav(a),h=l.a,g=h.r +if(g==null){s=j.ax.fy +if(s==null)s=B.k +g=s}r=h.e +q=h.c +s=h.x +if(s==null){h=A.ak(a).p3.z +h.toString}else h=s +s=l.a +q=A.aJx(q,B.ae,s.as,h) +h=s +s=h.d +q=new A.e1(new A.axU(l),new A.Z3(i,l,s!==B.hU,q,l.d),k,t.Tm) +if(s===B.dK&&h.y==null&&h.at==null){A.ak(a) +i.toString +h=l.a +p=A.aKP(i,h.w,h.e) +h=l.a +s=h.as +return new A.A8(q,B.aO,h.Q,r,p,!1,g,B.ar,s,k,k)}o=l.aaT() +h=l.a +if(h.d===B.hU)return A.a9k(new A.Jz(q,o,!0,k),h.Q,new A.pG(o,A.e0(a))) +s=h.as +n=h.Q +m=h.e +i.toString +return new A.In(q,o,!0,n,m,i,g,h.w,B.ar,s,k,k)}, +aaT(){var s=this.a,r=s.y +if(r!=null)return r +r=s.at +if(r!=null)return new A.d8(r,B.r) +s=s.d +switch(s.a){case 0:case 4:return B.lp +case 1:case 3:s=B.Tn.i(0,s) +s.toString +return new A.d8(s,B.r) +case 2:return B.nj}}} +A.axU.prototype={ +$1(a){var s,r=$.aa.F$.z.i(0,this.a.d).ga_() +r.toString +t.zd.a(r) +s=r.bg +s=s==null?null:s.length!==0 +if(s===!0)r.ag() +return!1}, +$S:342} +A.IY.prototype={ +H8(a){var s=this.bg;(s==null?this.bg=A.a([],t.VB):s).push(a) +this.ag()}, +hF(a){return this.al}, +am(a,b){var s,r,q,p,o,n=this,m=n.bg +if(m!=null&&m.length!==0){s=a.gbe(a) +s.bH(0) +s.au(0,b.a,b.b) +r=n.gv(n) +s.ia(new A.w(0,0,0+r.a,0+r.b)) +for(r=m.length,q=0;q#"+A.bh(this)}} +A.ug.prototype={ +d_(a){return A.dS(this.a,this.b,a)}} +A.In.prototype={ +ac(){return new A.ZM(null,null,B.j)}} +A.ZM.prototype={ +ij(a){var s,r,q=this +q.CW=t.ir.a(a.$3(q.CW,q.a.z,new A.axF())) +s=q.a +r=t.YJ +s=r.a(a.$3(q.cy,s.as,new A.axG())) +q.cy=s +s=q.a.at +q.cx=s!=null?r.a(a.$3(q.cx,s,new A.axH())):null +q.db=t.TZ.a(a.$3(q.db,q.a.w,new A.axI()))}, +H(a){var s,r,q,p,o,n,m=this,l=null,k=m.db +k.toString +s=m.gds() +s=k.a2(0,s.gl(s)) +s.toString +k=m.CW +k.toString +r=m.gds() +q=k.a2(0,r.gl(r)) +A.ak(a) +k=m.a.Q +r=m.cx +if(r==null)r=l +else{p=m.gds() +p=r.a2(0,p.gl(p)) +r=p}o=A.aKP(k,r,q) +m.a.toString +k=m.cy +if(k==null)n=l +else{r=m.gds() +r=k.a2(0,r.gl(r)) +n=r}if(n==null)n=B.n +k=A.e0(a) +r=m.a +return new A.Rs(new A.pG(s,k),r.y,q,o,n,new A.Jz(r.r,s,!0,l),l)}} +A.axF.prototype={ +$1(a){return new A.ar(A.mk(a),null,t.Y)}, +$S:32} +A.axG.prototype={ +$1(a){return new A.f4(t.n8.a(a),null)}, +$S:89} +A.axH.prototype={ +$1(a){return new A.f4(t.n8.a(a),null)}, +$S:89} +A.axI.prototype={ +$1(a){return new A.ug(t.RY.a(a),null)}, +$S:450} +A.Jz.prototype={ +H(a){var s=A.e0(a) +return A.mE(this.c,new A.a24(this.d,s,null),null,null,B.Q)}} +A.a24.prototype={ +am(a,b){this.b.fv(a,new A.w(0,0,0+b.a,0+b.b),this.c)}, +eX(a){return!a.b.j(0,this.b)}} +A.a4C.prototype={ +bY(){this.dq() +this.cW() +this.f2()}, +m(){var s=this,r=s.b9$ +if(r!=null)r.K(0,s.geM()) +s.b9$=null +s.aN()}} +A.ZN.prototype={ +Jj(a){return a.grp(a)==="en"}, +jX(a,b){return new A.bK(B.Du,t.az)}, +Dm(a){return!1}, +k(a){return"DefaultMaterialLocalizations.delegate(en_US)"}} +A.NG.prototype={$iti:1} +A.cF.prototype={ +I(){return"MaterialState."+this.b}} +A.Qg.prototype={$ibA:1} +A.ZQ.prototype={ +U(a){return this.c.$1(a)}} +A.Qi.prototype={ +Ae(a){return this.U(A.aS(t.ui)).Ae(a)}, +$ibA:1} +A.Y_.prototype={ +U(a){if(a.p(0,B.P))return B.bK +return B.c0}, +gv7(){return"MaterialStateMouseCursor(clickable)"}} +A.Qf.prototype={$ibA:1} +A.Io.prototype={ +U(a){return this.x.$1(a)}} +A.bA.prototype={} +A.Ib.prototype={ +U(a){var s,r=this,q=r.a,p=q==null?null:q.U(a) +q=r.b +s=q==null?null:q.U(a) +return r.d.$3(p,s,r.c)}, +$ibA:1} +A.bB.prototype={ +U(a){return this.a.$1(a)}, +$ibA:1} +A.cr.prototype={ +U(a){return this.a}, +k(a){var s="MaterialStatePropertyAll(",r=this.a +if(typeof r=="number")return s+A.jU(r)+")" +else return s+A.h(r)+")"}, +$ibA:1} +A.Qj.prototype={ +fW(a,b,c){var s=this.a +if(c?J.eo(s,b):J.of(s,b))this.a6()}} +A.Qh.prototype={ +a_5(a,b){return new A.ahy(this,a,b)}, +a_4(a){return this.a_5(a,null)}, +akV(a){if(this.r2$.D(0,a))this.a3(new A.ahw())}, +Ce(a){if(this.r2$.C(0,a))this.a3(new A.ahx())}} +A.ahy.prototype={ +$1(a){var s=this.a,r=this.b +if(s.r2$.p(0,r)===a)return +if(a)s.akV(r) +else s.Ce(r)}, +$S:8} +A.ahw.prototype={ +$0(){}, +$S:0} +A.ahx.prototype={ +$0(){}, +$S:0} +A.Qo.prototype={} +A.Df.prototype={ +gt(a){return J.D(this.a)}, +j(a,b){if(b==null)return!1 +if(this===b)return!0 +if(J.U(b)!==A.t(this))return!1 +return b instanceof A.Df&&J.d(b.a,this.a)}} +A.ZT.prototype={} +A.Qp.prototype={ +gt(a){var s=this +return A.bv([s.a,s.b,s.c,s.d,s.e,s.f,s.r,s.w,s.x,s.y,s.z,s.Q,s.as])}, +j(a,b){var s,r=this +if(b==null)return!1 +if(r===b)return!0 +if(J.U(b)!==A.t(r))return!1 +if(b instanceof A.Qp)if(b.a==r.a)if(b.b==r.b)if(b.c==r.c)if(b.d==r.d)if(b.e==r.e)if(b.f==r.f)if(b.r==r.r)if(b.w==r.w)if(b.x===r.x)if(b.y==r.y)s=J.d(b.as,r.as) +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +return s}} +A.Zq.prototype={ +U(a){var s,r=this,q=r.a,p=q==null?null:q.U(a) +q=r.b +s=q==null?null:q.U(a) +q=p==null +if(q&&s==null)return null +if(q){q=s.a +return A.aQ(new A.b_(A.C(0,q.gl(q)>>>16&255,q.gl(q)>>>8&255,q.gl(q)&255),0,B.y,-1),s,r.c)}if(s==null){q=p.a +return A.aQ(p,new A.b_(A.C(0,q.gl(q)>>>16&255,q.gl(q)>>>8&255,q.gl(q)&255),0,B.y,-1),r.c)}return A.aQ(p,s,r.c)}, +$ibA:1} +A.ZV.prototype={} +A.wW.prototype={ +gt(a){return J.D(this.a)}, +j(a,b){if(b==null)return!1 +if(this===b)return!0 +if(J.U(b)!==A.t(this))return!1 +return b instanceof A.wW&&J.d(b.a,this.a)}} +A.ZW.prototype={} +A.Du.prototype={ +gt(a){var s=this +return A.N(s.a,s.b,s.c,s.d,s.e,s.f,s.r,s.w,s.x,s.y,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +if(J.U(b)!==A.t(s))return!1 +return b instanceof A.Du&&b.a==s.a&&J.d(b.b,s.b)&&b.c==s.c&&J.d(b.d,s.d)&&J.d(b.e,s.e)&&J.d(b.f,s.f)&&J.d(b.r,s.r)&&b.w==s.w&&b.x==s.x&&!0}} +A.a_8.prototype={} +A.Dv.prototype={ +gt(a){var s=this +return A.N(s.a,s.b,s.c,s.d,s.e,s.f,s.r,s.w,s.x,s.y,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +if(J.U(b)!==A.t(s))return!1 +return b instanceof A.Dv&&b.a==s.a&&J.d(b.b,s.b)&&b.c==s.c&&J.d(b.d,s.d)&&J.d(b.e,s.e)&&J.d(b.f,s.f)&&J.d(b.r,s.r)&&J.d(b.w,s.w)&&b.x==s.x&&b.y==s.y}} +A.a_a.prototype={} +A.Dw.prototype={ +gt(a){var s=this +return A.N(s.a,s.b,s.c,s.d,s.e,s.f,s.r,s.w,s.x,s.y,s.z,s.Q,s.as,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +if(J.U(b)!==A.t(s))return!1 +return b instanceof A.Dw&&J.d(b.a,s.a)&&b.b==s.b&&J.d(b.c,s.c)&&J.d(b.d,s.d)&&J.d(b.e,s.e)&&J.d(b.f,s.f)&&b.r==s.r&&J.d(b.y,s.y)&&J.d(b.z,s.z)&&b.Q==s.Q&&b.as==s.as}} +A.a_b.prototype={} +A.DI.prototype={ +gt(a){return J.D(this.a)}, +j(a,b){if(b==null)return!1 +if(this===b)return!0 +if(J.U(b)!==A.t(this))return!1 +return b instanceof A.DI&&J.d(b.a,this.a)}} +A.a_q.prototype={} +A.Dc.prototype={ +gCu(a){return B.bS}, +gqm(){return null}, +gzR(){return null}, +Hx(a){var s +if(t.Le.b(a)){a.gjO() +s=!0}else s=!1 +if(!s)if(a instanceof A.nU){a.$ti.h("he<1>").a(a.b) +s=!0}else s=!1 +else s=!0 +return s}, +qo(a,b,c){var s=null +return A.cH(s,s,this.alS(a),!1,s,!1,!0,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,!0,s,s,s,s,s,s,s,s)}, +zZ(a,b,c,d){var s,r +A.ak(a) +s=A.ak(a).r +r=B.hM.i(0,this.a.cx.a?B.au:s) +if(r==null)r=B.ng +return r.UP(this,a,b,c,d,A.o(this).c)}} +A.iN.prototype={ +o9(a){var s=null,r=this.$ti,q=A.a([],t.Zt),p=$.aw,o=r.h("aD<1?>"),n=r.h("bI<1?>"),m=A.xm(B.cQ),l=A.a([],t.wi),k=$.aO(),j=$.aw +return new A.IL(!1,!0,!1,q,A.aS(t.kj),new A.bp(s,r.h("bp>")),new A.bp(s,t.B),new A.DN(),s,0,new A.bI(new A.aD(p,o),n),m,l,this,new A.ca(s,k,t.XR),new A.bI(new A.aD(j,o),n),r.h("IL<1>"))}} +A.IL.prototype={ +alS(a){return this.$ti.h("iN<1>").a(this.b).r}, +goO(){this.$ti.h("iN<1>").a(this.b) +return!0}, +gjO(){this.$ti.h("iN<1>").a(this.b) +return!1}, +gmJ(){return A.fH.prototype.gmJ.call(this)+"("+A.h(this.$ti.h("iN<1>").a(this.b).a)+")"}} +A.KR.prototype={} +A.a4o.prototype={ +H(a){var s=this +return new A.w0(s.c,new A.aCa(s),new A.aCb(s),new A.w0(new A.kw(s.d,new A.b5(A.a([],t.x8),t.jc),0),new A.aCc(s),new A.aCd(s),s.f,null),null)}} +A.aCa.prototype={ +$3(a,b,c){return new A.ql(b,c,this.a.e&&!0,!1,null)}, +$C:"$3", +$R:3, +$S:219} +A.aCb.prototype={ +$3(a,b,c){return new A.qm(b,this.a.e,!0,c,null)}, +$C:"$3", +$R:3, +$S:218} +A.aCc.prototype={ +$3(a,b,c){return new A.ql(b,c,this.a.e&&!0,!0,null)}, +$C:"$3", +$R:3, +$S:219} +A.aCd.prototype={ +$3(a,b,c){return new A.qm(b,this.a.e,!1,c,null)}, +$C:"$3", +$R:3, +$S:218} +A.ql.prototype={ +ac(){return new A.a4m(new A.FG($.aO()),$,$,B.j)}} +A.a4m.prototype={ +gKQ(){return!1}, +u9(){var s,r=this,q=r.a,p=q.f +if(p)s=B.ea +else{s=$.aT5() +s=new A.aP(q.c,s,s.$ti.h("aP"))}r.ly$=s +p=p?$.aT6():$.aT7() +q=q.c +r.mZ$=new A.aP(q,p,p.$ti.h("aP")) +q.Z(0,r.grw()) +r.a.c.h3(r.grv())}, +aB(){var s,r,q,p,o=this +o.u9() +s=o.a +r=s.f +q=o.ly$ +q===$&&A.b() +p=o.mZ$ +p===$&&A.b() +o.d=A.aP2(s.c,q,r,p) +o.aR()}, +aO(a){var s,r,q,p=this,o=p.a +if(a.f!==o.f||a.c!==o.c){o=a.c +o.K(0,p.grw()) +o.dR(p.grv()) +p.u9() +o=p.d +o===$&&A.b() +o.m() +o=p.a +s=o.f +r=p.ly$ +r===$&&A.b() +q=p.mZ$ +q===$&&A.b() +p.d=A.aP2(o.c,r,s,q)}p.bb(a)}, +m(){var s,r=this +r.a.c.K(0,r.grw()) +r.a.c.dR(r.grv()) +s=r.d +s===$&&A.b() +s.m() +r.a64()}, +H(a){var s=this.d +s===$&&A.b() +return A.aNh(!0,this.a.d,this.mY$,B.AF,s)}} +A.qm.prototype={ +ac(){return new A.a4n(new A.FG($.aO()),$,$,B.j)}} +A.a4n.prototype={ +gKQ(){return!1}, +u9(){var s,r=this,q=r.a,p=q.e +if(p){s=$.aT9() +s=new A.aP(q.c,s,s.$ti.h("aP"))}else s=B.ea +r.ly$=s +p=p?$.aTa():$.aTb() +q=q.c +r.mZ$=new A.aP(q,p,p.$ti.h("aP")) +q.Z(0,r.grw()) +r.a.c.h3(r.grv())}, +aB(){var s,r,q,p,o=this +o.u9() +s=o.a +r=s.e +q=o.ly$ +q===$&&A.b() +p=o.mZ$ +p===$&&A.b() +o.d=A.aP3(s.c,q,r,p) +o.aR()}, +aO(a){var s,r,q,p=this,o=p.a +if(a.e!==o.e||a.c!==o.c){o=a.c +o.K(0,p.grw()) +o.dR(p.grv()) +p.u9() +o=p.d +o===$&&A.b() +o.m() +o=p.a +s=o.e +r=p.ly$ +r===$&&A.b() +q=p.mZ$ +q===$&&A.b() +p.d=A.aP3(o.c,r,s,q)}p.bb(a)}, +m(){var s,r=this +r.a.c.K(0,r.grw()) +r.a.c.dR(r.grv()) +s=r.d +s===$&&A.b() +s.m() +r.a65()}, +H(a){var s=this.d +s===$&&A.b() +return A.aNh(!0,this.a.f,this.mY$,B.AF,s)}} +A.nd.prototype={} +A.Vz.prototype={ +UP(a,b,c,d,e){return new A.a4o(c,d,!0,e,!0,null)}} +A.Nq.prototype={ +UP(a,b,c,d,e,f){return A.aK6(a,b,c,d,e,f)}} +A.QV.prototype={ +E_(a){var s=t.Tr +return A.V(new A.R(B.R4,new A.aj1(a),s),!0,s.h("af.E"))}, +j(a,b){var s,r=this +if(b==null)return!1 +if(r===b)return!0 +if(J.U(b)!==A.t(r))return!1 +s=b instanceof A.QV +if(s&&!0)return!0 +return s&&A.dn(r.E_(B.hM),r.E_(B.hM))}, +gt(a){return A.bv(this.E_(B.hM))}} +A.aj1.prototype={ +$1(a){return this.a.i(0,a)}, +$S:347} +A.zH.prototype={ +atf(){var s,r=this,q=r.mZ$ +q===$&&A.b() +s=q.a +if(J.d(q.b.a2(0,s.gl(s)),1)){q=r.ly$ +q===$&&A.b() +if(!J.d(q.gl(q),0)){q=r.ly$ +q=J.d(q.gl(q),1)}else q=!0}else q=!1 +s=r.mY$ +if(q)s.szL(!1) +else{r.gKQ() +s.szL(!1)}}, +ate(a){switch(a.a){case 0:case 3:this.mY$.szL(!1) +break +case 1:case 2:this.gKQ() +this.mY$.szL(!1) +break}}} +A.Ky.prototype={ +FW(a){this.a6()}, +a9t(a,b,c){var s,r,q,p,o +if(!this.r){s=this.w +s=s.gb6(s)!==B.a7}else s=!1 +if(s){s=this.w +s=$.aT8().a2(0,s.gl(s)) +s.toString +r=s}else r=0 +if(r>0){s=a.gbe(a) +q=b.a +p=b.b +o=$.W().aj() +o.sM(0,A.C(B.c.an(255*r),0,0,0)) +s.cB(new A.w(q,p,q+c.a,p+c.b),o)}}, +wl(a,b,c,d){var s,r,q=this,p=q.w +switch(p.gb6(p).a){case 3:case 0:return d.$2(a,b) +case 1:case 2:break}q.a9t(a,b,c) +p=q.z +s=q.x +r=s.a +A.aQ_(p,s.b.a2(0,r.gl(r)),c) +r=q.as +r.sar(0,a.p5(!0,b,p,new A.aC8(q,d),r.a))}, +m(){var s=this,r=s.w,q=s.gdm() +r.K(0,q) +r.dR(s.gu8()) +s.x.a.K(0,q) +s.y.K(0,q) +s.Q.sar(0,null) +s.as.sar(0,null) +s.eJ()}, +eX(a){var s,r,q,p,o=this +if(a.r===o.r){s=a.w +r=o.w +if(J.d(s.gl(s),r.gl(r))){s=a.x +r=s.a +q=o.x +p=q.a +if(J.d(s.b.a2(0,r.gl(r)),q.b.a2(0,p.gl(p)))){s=a.y +r=o.y +r=!J.d(s.gl(s),r.gl(r)) +s=r}else s=!0}else s=!0}else s=!0 +return s}} +A.aC8.prototype={ +$2(a,b){var s=this.a,r=s.Q +s=s.y +r.sar(0,a.K6(b,B.c.an(s.gl(s)*255),this.b,r.a))}, +$S:10} +A.Kz.prototype={ +FW(a){this.a6()}, +wl(a,b,c,d){var s,r,q=this,p=q.y +switch(p.gb6(p).a){case 3:case 0:return d.$2(a,b) +case 1:case 2:break}p=q.z +s=q.w +r=s.a +A.aQ_(p,s.b.a2(0,r.gl(r)),c) +r=q.as +r.sar(0,a.p5(!0,b,p,new A.aC9(q,d),r.a))}, +eX(a){var s,r,q,p +if(a.r===this.r){s=a.x +r=this.x +if(J.d(s.gl(s),r.gl(r))){s=a.w +r=s.a +q=this.w +p=q.a +p=!J.d(s.b.a2(0,r.gl(r)),q.b.a2(0,p.gl(p))) +s=p}else s=!0}else s=!0 +return s}, +m(){var s,r=this +r.Q.sar(0,null) +r.as.sar(0,null) +s=r.gdm() +r.w.a.K(0,s) +r.x.K(0,s) +r.y.dR(r.gu8()) +r.eJ()}} +A.aC9.prototype={ +$2(a,b){var s=this.a,r=s.Q +s=s.x +r.sar(0,a.K6(b,B.c.an(s.gl(s)*255),this.b,r.a))}, +$S:10} +A.a_w.prototype={} +A.L0.prototype={ +m(){var s=this.mY$ +s.fy$=$.aO() +s.fx$=0 +this.aN()}} +A.L1.prototype={ +m(){var s=this.mY$ +s.fy$=$.aO() +s.fx$=0 +this.aN()}} +A.E6.prototype={ +gt(a){var s=this +return A.N(s.a,s.b,s.c,s.d,s.e,s.f,s.r,s.w,s.x,s.y,s.z,s.Q,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +if(J.U(b)!==A.t(s))return!1 +return b instanceof A.E6&&J.d(b.a,s.a)&&J.d(b.b,s.b)&&b.c==s.c&&J.d(b.d,s.d)&&J.d(b.e,s.e)&&J.d(b.f,s.f)&&b.r==s.r&&J.d(b.z,s.z)&&b.Q==s.Q}} +A.a0f.prototype={} +A.asC.prototype={ +I(){return"_ActivityIndicatorType."+this.b}} +A.RS.prototype={} +A.WI.prototype={ +am(a,b){var s,r,q,p,o,n,m=this,l=$.W(),k=l.aj() +k.sM(0,m.c) +s=m.x +k.sbs(s) +k.saG(0,B.D) +r=s/2*-m.y +q=r*2 +p=b.a-q +q=b.b-q +o=m.b +if(o!=null){n=l.aj() +n.sM(0,o) +n.sbs(s) +n.saG(0,B.D) +a.In(new A.w(r,r,r+p,r+q),0,6.282185307179586,!1,n)}k.sla(B.AH) +a.In(new A.w(r,r,r+p,r+q),m.z,m.Q,!1,k)}, +eX(a){var s=this +return!J.d(a.b,s.b)||!a.c.j(0,s.c)||a.e!==s.e||a.f!==s.f||a.r!==s.r||a.w!==s.w||a.x!==s.x||a.y!==s.y||!1}} +A.AW.prototype={ +ac(){return new A.WJ(null,null,B.j)}} +A.WJ.prototype={ +aB(){var s,r=this +r.aR() +s=A.c5(null,B.Lk,null,null,r) +r.d=s +r.a.toString +s.Zh(0)}, +aO(a){var s,r +this.bb(a) +this.a.toString +s=this.d +s===$&&A.b() +r=s.r +r=!(r!=null&&r.a!=null) +if(r)s.Zh(0)}, +m(){var s=this.d +s===$&&A.b() +s.m() +this.a5F()}, +a7n(a,b,c,d,e){var s,r,q,p,o,n=null +A.ak(a) +s=new A.auh(a,n,n,n,n,n) +this.a.toString +r=A.aMy(a) +this.a.toString +q=s.gM(s) +p=A.aMy(a).a +q=p==null?q:p +this.a.toString +p=c*3/2*3.141592653589793 +o=Math.max(b*3/2*3.141592653589793-p,0.001) +r=A.bP(n,A.mE(n,n,n,new A.WI(r.d,q,n,b,c,d,e,4,0,-1.5707963267948966+p+e*3.141592653589793*2+d*0.5*3.141592653589793,o,n,n),B.Q),B.o,n,B.Da,n,n,n,n,n,n,n,n,n) +return A.cH(n,n,r,!1,n,!1,!1,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n)}, +a7k(){var s=this.d +s===$&&A.b() +return A.oh(s,new A.aui(this),null)}, +H(a){this.a.toString +switch(0){case 0:return this.a7k()}}} +A.aui.prototype={ +$2(a,b){var s,r,q,p=this.a,o=$.aSR(),n=p.d +n===$&&A.b() +n=o.a2(0,n.gl(n)) +o=$.aSS() +s=p.d +s=o.a2(0,s.gl(s)) +o=$.aSP() +r=p.d +r=o.a2(0,r.gl(r)) +o=$.aSQ() +q=p.d +return p.a7n(a,n,s,r,o.a2(0,q.gl(q)))}, +$S:87} +A.auh.prototype={ +gM(a){var s,r=this,q=r.r +if(q===$){s=A.ak(r.f) +r.r!==$&&A.ay() +q=r.r=s.ax}return q.b}} +A.KF.prototype={ +m(){var s=this,r=s.c0$ +if(r!=null)r.K(0,s.gjy()) +s.c0$=null +s.aN()}, +bY(){this.dq() +this.cW() +this.jz()}} +A.xl.prototype={ +gt(a){var s=this +return A.N(s.gM(s),s.b,s.c,s.d,s.e,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +if(J.U(b)!==A.t(s))return!1 +return b instanceof A.xl&&J.d(b.gM(b),s.gM(s))&&J.d(b.b,s.b)&&b.c==s.c&&J.d(b.d,s.d)&&J.d(b.e,s.e)}, +gM(a){return this.a}} +A.a0h.prototype={} +A.Ef.prototype={ +gt(a){var s=this +return A.N(s.a,s.b,s.c,s.d,s.e,s.f,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a,b){var s,r=this +if(b==null)return!1 +if(r===b)return!0 +if(J.U(b)!==A.t(r))return!1 +if(b instanceof A.Ef)if(b.b==r.b)if(b.c==r.c)if(b.d==r.d)s=!0 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +return s}} +A.a0s.prototype={} +A.ip.prototype={ +I(){return"_ScaffoldSlot."+this.b}} +A.F_.prototype={ +ac(){var s=null +return new A.T4(A.p7(t.Np),A.n3(s,t.nY),A.n3(s,t.BL),s,s,B.j)}} +A.T4.prototype={ +bx(){var s,r=this,q=r.c +q.toString +s=A.bt(q,B.BF,t.w).w.z +q=r.y +if(q===!0)if(!s){q=r.x +q=q!=null&&q.b==null}else q=!1 +else q=!1 +if(q)r.ar6(B.Yg) +r.y=s +r.dr()}, +ar6(a){var s,r,q=this,p=null,o=q.r +if(o.b!==o.c){p.gb6(p) +s=!1}else s=!0 +if(s)return +r=o.gL(o).b +o=q.y +o.toString +if(o){p.sl(0,0) +r.e7(0,a)}else p.dc(0).ba(new A.amZ(q,r,a),t.H) +o=q.x +if(o!=null)o.b3(0) +q.x=null}, +H(a){var s,r,q=this +q.y=A.bt(a,B.BF,t.w).w.z +s=q.r +if(!s.ga7(s)){r=A.tq(a,t.X) +if(r==null||r.grm())null.gaww()}return new A.Je(q,q.a.c,null)}, +m(){var s=this.x +if(s!=null)s.b3(0) +this.x=null +this.a5a()}} +A.amZ.prototype={ +$1(a){var s=this.b +if((s.a.a&30)===0)s.e7(0,this.c)}, +$S:29} +A.Je.prototype={ +cs(a){return this.f!==a.f}} +A.an_.prototype={} +A.T3.prototype={ +anh(a,b){var s=a==null?this.a:a +return new A.T3(s,b==null?this.b:b)}} +A.a1A.prototype={ +TI(a,b,c){var s=this +s.b=c==null?s.b:c +s.c=s.c.anh(a,b) +s.a6()}, +TH(a){return this.TI(null,null,a)}, +akj(a,b){return this.TI(a,b,null)}} +A.H2.prototype={ +j(a,b){var s=this +if(b==null)return!1 +if(!s.a24(0,b))return!1 +return b instanceof A.H2&&b.r===s.r&&b.e===s.e&&b.f===s.f}, +gt(a){var s=this +return A.N(A.az.prototype.gt.call(s,s),s.r,s.e,s.f,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}} +A.Wr.prototype={ +H(a){return this.c}} +A.aA5.prototype={ +BY(a8){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,a2,a3=this,a4=A.a7R(a8),a5=a8.a,a6=a4.Ks(a5),a7=a8.b +if(a3.b.i(0,B.iU)!=null){s=a3.fR(B.iU,a6).b +a3.hj(B.iU,B.e) +r=s}else{r=0 +s=0}if(a3.b.i(0,B.mA)!=null){q=0+a3.fR(B.mA,a6).b +p=Math.max(0,a7-q) +a3.hj(B.mA,new A.k(0,p))}else{q=0 +p=null}if(a3.b.i(0,B.mz)!=null){q+=a3.fR(B.mz,new A.az(0,a6.b,0,Math.max(0,a7-q-r))).b +a3.hj(B.mz,new A.k(0,Math.max(0,a7-q)))}if(a3.b.i(0,B.iY)!=null){o=a3.fR(B.iY,a6) +a3.hj(B.iY,new A.k(0,s)) +if(!a3.ay)r+=o.b}else o=B.Q +n=a3.f +m=Math.max(0,a7-Math.max(n.d,q)) +if(a3.b.i(0,B.iT)!=null){l=Math.max(0,m-r) +k=a3.d +if(k)l=A.O(l+q,0,a4.d-r) +k=k?q:0 +a3.fR(B.iT,new A.H2(k,s,o.b,0,a6.b,0,l)) +a3.hj(B.iT,new A.k(0,r))}if(a3.b.i(0,B.iW)!=null){a3.fR(B.iW,new A.az(0,a6.b,0,m)) +a3.hj(B.iW,B.e)}k=a3.b.i(0,B.e4)!=null&&!a3.at?a3.fR(B.e4,a6):B.Q +if(a3.b.i(0,B.iX)!=null){j=a3.fR(B.iX,new A.az(0,a6.b,0,Math.max(0,m-r))) +a3.hj(B.iX,new A.k((a5-j.a)/2,m-j.b))}else j=B.Q +i=A.bc("floatingActionButtonRect") +if(a3.b.i(0,B.iZ)!=null){h=a3.fR(B.iZ,a4) +g=new A.an_(h,j,m,s,n,a3.r,a8,k,a3.w) +f=a3.z.ns(g) +e=a3.as.a05(a3.y.ns(g),f,a3.Q) +a3.hj(B.iZ,e) +d=e.a +c=e.b +i.b=new A.w(d,c,d+h.a,c+h.b)}if(a3.b.i(0,B.e4)!=null){d=a3.ax +b=d!=null&&d") +k=t.x8 +j=t.jc +i=t.i +h=A.aO6(new A.kw(new A.aP(p,new A.fv(new A.mP(B.p3)),l),new A.b5(A.a([],k),j),0),new A.aP(p,new A.fv(B.p3),l),p,0.5,i) +p=d.a.d +g=$.aT0() +m.a(p) +f=$.aT1() +e=A.aO6(new A.aP(p,g,g.$ti.h("aP")),new A.kw(new A.aP(p,f,A.o(f).h("aP")),new A.b5(A.a([],k),j),0),p,0.5,i) +d.e=A.aJB(h,s,i) +i=A.aJB(h,q,i) +d.r=i +d.w=new A.aP(m.a(i),new A.fv(B.Ol),l) +d.f=A.aHd(new A.aP(r,new A.ar(1,1,b),b.h("aP")),e,c) +d.x=A.aHd(new A.aP(o,n,n.$ti.h("aP")),e,c) +n=d.r +o=d.gafy() +n.by() +n=n.cC$ +n.b=!0 +n.a.push(o) +n=d.e +n.by() +n=n.cC$ +n.b=!0 +n.a.push(o)}, +acM(a){this.a3(new A.avl(this,a))}, +H(a){var s,r,q=this,p=A.a([],t.p),o=q.d +o===$&&A.b() +o=o.Q +o===$&&A.b() +if(o!==B.K){o=q.e +s=q.y +o===$&&A.b() +r=q.f +r===$&&A.b() +p.push(A.aMQ(A.aMN(s,r),o))}o=q.a +s=q.r +o=o.c +s===$&&A.b() +r=q.x +r===$&&A.b() +p.push(A.aMQ(A.aMN(o,r),s)) +return A.kA(B.aV,p,B.a9,B.bJ)}, +afz(){var s,r,q=this.e +q===$&&A.b() +s=q.a +s=s.gl(s) +q=q.b +q=q.gl(q) +q=Math.min(A.fL(s),A.fL(q)) +s=this.r +s===$&&A.b() +r=s.a +r=r.gl(r) +s=s.b +s=s.gl(s) +s=Math.max(q,Math.min(A.fL(r),A.fL(s))) +this.a.f.TH(s)}} +A.avl.prototype={ +$0(){this.a.a.toString}, +$S:0} +A.u0.prototype={ +ac(){var s=null,r=t.bR,q=t.B,p=$.aO() +return new A.xI(new A.bp(s,r),new A.bp(s,r),new A.bp(s,q),new A.EO(!1,p),new A.EO(!1,p),A.a([],t.Z5),new A.bp(s,q),B.k,s,A.A(t.yb,t.M),s,!0,s,s,s,B.j)}} +A.xI.prototype={ +gfa(){this.a.toString +return null}, +lX(a,b){var s=this +s.rF(s.w,"drawer_open") +s.rF(s.x,"end_drawer_open")}, +a9x(a){var s=this,r=s.w,q=r.y +if(!J.d(q==null?A.o(r).h("cN.T").a(q):q,a)&&s.d.ga5()!=null){s.a3(new A.an0(s,a)) +s.a.toString}}, +akf(){var s,r=this,q=r.y.r +if(!q.ga7(q)){q=r.y.r +s=q.gL(q)}else s=null +if(r.z!=s)r.a3(new A.an2(r,s))}, +ajY(){var s,r=this,q=r.y.e +if(!q.ga7(q)){q=r.y.e +s=q.gL(q)}else s=null +if(r.Q!=s)r.a3(new A.an1(r,s))}, +aeK(){this.a.toString}, +ahF(){var s,r=this.c +r.toString +s=A.RO(r) +if(s!=null&&s.f.length!==0)s.jD(0,B.Ky,B.h4)}, +gpT(){this.a.toString +return!0}, +aB(){var s,r=this,q=null +r.aR() +s=r.c +s.toString +r.dx=new A.a1A(s,B.Wu,$.aO()) +r.a.toString +r.cy=B.jm +r.CW=B.Ev +r.cx=B.jm +r.ch=A.c5(q,new A.b1(4e5),q,1,r) +r.db=A.c5(q,B.am,q,q,r)}, +aO(a){this.a5d(a) +this.a.toString}, +bx(){var s,r,q=this,p=q.c.ap(t.Wv),o=p==null?null:p.f,n=q.y,m=n==null +if(!m)s=o==null||n!==o +else s=!1 +if(s)if(!m)n.d.C(0,q) +q.y=o +if(o!=null){n=o.d +n.D(0,q) +r=q.c.vC(t.Np) +if(r==null||!n.p(0,r)){n=o.r +if(!n.ga7(n))q.akf() +n=o.e +if(!n.ga7(n))q.ajY()}}q.aeK() +q.a5c()}, +m(){var s=this,r=s.dx +r===$&&A.b() +r.fy$=$.aO() +r.fx$=0 +r=s.ch +r===$&&A.b() +r.m() +r=s.db +r===$&&A.b() +r.m() +r=s.y +if(r!=null)r.d.C(0,s) +s.w.m() +s.x.m() +s.a5e()}, +DT(a,b,c,d,e,f,g,h,i){var s,r=this.c +r.toString +s=A.bt(r,null,t.w).w.Ki(f,g,h,i) +if(e)s=s.auU(!0) +if(d&&s.f.d!==0)s=s.HN(s.r.uW(s.w.d)) +if(b!=null)a.push(A.agC(A.pb(b,s,null),c))}, +a6M(a,b,c,d,e,f,g,h){return this.DT(a,b,c,!1,d,e,f,g,h)}, +pC(a,b,c,d,e,f,g){return this.DT(a,b,c,!1,!1,d,e,f,g)}, +MN(a,b,c,d,e,f,g,h){return this.DT(a,b,c,d,!1,e,f,g,h)}, +Ne(a,b){this.a.toString}, +Nd(a,b){var s,r,q=this,p=q.a.Q +if(p!=null){s=q.w +r=s.y +s=r==null?A.o(s).h("cN.T").a(r):r +q.pC(a,new A.BG(p,B.od,q.ga9w(),B.af,null,!0,null,s,q.d),B.j_,!1,b===B.Z,b===B.q,!1)}}, +H(a){var s,r,q,p,o,n,m,l,k,j=this,i=null,h={},g=A.ak(a),f=a.ap(t.I) +f.toString +s=f.w +r=A.a([],t.s9) +f=j.a +q=f.f +f=f.e +j.gpT() +j.a6M(r,new A.Wr(new A.kl(q,j.f),!1,!1,i),B.iT,!0,!1,!1,!1,f!=null) +if(j.dy)j.pC(r,A.aGp(!0,i,j.fr,!1,i,i,i),B.iW,!0,!0,!0,!0) +if(j.a.e!=null){f=A.bt(a,B.b1,t.w).w +f=j.r=A.aVe(a,j.a.e.fx)+f.r.b +q=j.a.e +q.toString +j.pC(r,new A.hN(new A.az(0,1/0,0,f),new A.C7(1,f,f,f,i,i,q,i),i),B.iU,!0,!1,!1,!1)}h.a=!1 +h.b=null +if(j.at!=null||j.as.length!==0){f=A.V(j.as,!0,t.l7) +q=j.at +if(q!=null)f.push(q.a) +p=A.kA(B.bv,f,B.a9,B.bJ) +j.gpT() +j.pC(r,p,B.iX,!0,!1,!1,!0)}f=j.z +if(f!=null){f.a.gawp() +h.a=!1 +f=j.z +if(f!=null){f=f.a +f.gbB(f)}h.b=g.bE.w +f=j.z +f=f==null?i:f.a +j.a.toString +j.gpT() +j.MN(r,f,B.e4,!1,!1,!1,!1,!0)}h.c=!1 +if(j.Q!=null){a.ap(t.iB) +f=A.ak(a) +o=f.ry.f +h.c=(o==null?0:o)!==0 +f=j.Q +f=f==null?i:f.a +q=j.a.e +j.gpT() +j.MN(r,f,B.iY,!1,!0,!1,!1,q!=null)}j.a.toString +f=j.ch +f===$&&A.b() +q=j.CW +q===$&&A.b() +n=j.dx +n===$&&A.b() +m=j.db +m===$&&A.b() +j.pC(r,new A.HQ(i,f,q,n,m,i),B.iZ,!0,!0,!0,!0) +switch(g.r.a){case 2:case 4:j.pC(r,A.hn(B.b_,i,B.af,!0,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,j.gahE(),i,i,i),B.iV,!0,!1,!1,!0) +break +case 0:case 1:case 3:case 5:break}f=j.x +q=f.y +if(q==null?A.o(f).h("cN.T").a(q):q){j.Nd(r,s) +j.Ne(r,s)}else{j.Ne(r,s) +j.Nd(r,s)}f=t.w +q=A.bt(a,B.b1,f).w +j.gpT() +n=A.bt(a,B.mt,f).w +l=q.r.uW(n.f.d) +q=A.bt(a,B.a6q,f).w +j.gpT() +f=A.bt(a,B.mt,f).w +f=f.f.d!==0?0:i +k=q.w.uW(f) +if(l.d<=0)j.a.toString +f=j.a +q=f.Q +f=f.ch +if(f==null)f=g.go +return new A.a1B(q!=null,new A.F6(A.p9(B.am,i,A.oh(j.ch,new A.an3(h,j,!1,l,k,s,r),i),B.o,f,0,i,i,i,i,i,B.dK),i),i)}} +A.an0.prototype={ +$0(){this.a.w.Mu(0,this.b)}, +$S:0} +A.an2.prototype={ +$0(){this.a.z=this.b}, +$S:0} +A.an1.prototype={ +$0(){this.a.Q=this.b}, +$S:0} +A.an3.prototype={ +$2(a,b){var s,r,q,p,o,n,m,l=this,k=A.aY([B.m5,new A.XF(a,new A.b5(A.a([],t.g),t.c))],t.u,t.od),j=l.b +j.a.toString +s=j.cy +s.toString +r=j.ch +r===$&&A.b() +r=r.x +r===$&&A.b() +q=j.CW +q===$&&A.b() +p=j.dx +p===$&&A.b() +j=j.cx +j.toString +o=l.a +n=o.a +m=o.c +return A.vg(k,new A.Bn(new A.aA5(l.c,!1,l.d,l.e,l.f,p,j,s,r,q,n,o.b,m),l.r,null))}, +$S:348} +A.XF.prototype={ +lE(a,b){var s=this.e,r=A.F0(s).w,q=r.y +if(!(q==null?A.o(r).h("cN.T").a(q):q)){s=A.F0(s).x +r=s.y +s=r==null?A.o(s).h("cN.T").a(r):r}else s=!0 +return s}, +eb(a){var s,r,q=this.e,p=A.F0(q) +if(p.a.Q!=null){s=p.w +r=s.y +s=r==null?A.o(s).h("cN.T").a(r):r}else s=!1 +if(s)p.d.ga5().aA(0) +A.F0(q).a.toString}} +A.a1B.prototype={ +cs(a){return this.f!==a.f}} +A.aA6.prototype={ +$2(a,b){if(!a.a)a.K(0,b)}, +$S:71} +A.Jf.prototype={ +bY(){this.dq() +this.cW() +this.f2()}, +m(){var s=this,r=s.b9$ +if(r!=null)r.K(0,s.geM()) +s.b9$=null +s.aN()}} +A.Jg.prototype={ +bY(){this.dq() +this.cW() +this.f2()}, +m(){var s=this,r=s.b9$ +if(r!=null)r.K(0,s.geM()) +s.b9$=null +s.aN()}} +A.Jh.prototype={ +aO(a){this.bb(a) +this.vg()}, +bx(){var s,r,q,p,o=this +o.dr() +s=o.c6$ +r=o.gp9() +q=o.c +q.toString +q=A.xB(q) +o.j1$=q +p=o.q4(q,r) +if(r){o.lX(s,o.hb$) +o.hb$=!1}if(p)if(s!=null)s.m()}, +m(){var s,r=this +r.ha$.aa(0,new A.aA6()) +s=r.c6$ +if(s!=null)s.m() +r.c6$=null +r.a5b()}} +A.KJ.prototype={ +bY(){this.dq() +this.cW() +this.f2()}, +m(){var s=this,r=s.b9$ +if(r!=null)r.K(0,s.geM()) +s.b9$=null +s.aN()}} +A.Tl.prototype={ +H(a){var s=this,r=null +if(A.ak(a).r===B.au)return new A.vR(8,B.f9,s.c,s.d,!1,B.We,3,r,B.jX,B.Ld,B.aD,A.Ln(),r,r,r) +return new A.zc(r,s.c,s.d,r,r,r,r,B.bS,B.dF,B.z,A.Ln(),r,r,r)}} +A.zc.prototype={ +ac(){return new A.ZO(new A.bp(null,t.B),null,null,B.j)}} +A.ZO.prototype={ +gpo(){var s=this.a.e +if(s==null){s=this.fr +s===$&&A.b() +s=s.a +s=s==null?null:s.U(this.gun())}return s==null?!1:s}, +goi(){this.a.toString +var s=this.fr +s===$&&A.b() +s=s.e +if(s==null){s=this.fx +s===$&&A.b() +s=!s}return s}, +gzj(){return new A.bB(new A.axN(this),t.Lf)}, +gun(){var s=A.aS(t.ui) +if(this.db)s.D(0,B.hR) +if(this.dx)s.D(0,B.I) +return s}, +gaji(){var s,r,q,p,o,n,m,l=this,k=l.dy +k===$&&A.b() +s=k.db +r=A.bc("dragColor") +q=A.bc("hoverColor") +p=A.bc("idleColor") +switch(k.a.a){case 1:k=s.a +o=k>>>16&255 +n=k>>>8&255 +k&=255 +r.b=A.C(153,o,n,k) +q.b=A.C(B.c.an(127.5),o,n,k) +m=l.fx +m===$&&A.b() +if(m){k=l.c +k.toString +k=A.ak(k).cy.a +k=A.C(255,k>>>16&255,k>>>8&255,k&255)}else k=A.C(B.c.an(25.5),o,n,k) +p.b=k +break +case 0:k=s.a +o=k>>>16&255 +n=k>>>8&255 +k&=255 +r.b=A.C(191,o,n,k) +q.b=A.C(166,o,n,k) +m=l.fx +m===$&&A.b() +if(m){k=l.c +k.toString +k=A.ak(k).cy.a +k=A.C(255,k>>>16&255,k>>>8&255,k&255)}else k=A.C(B.c.an(76.5),o,n,k) +p.b=k +break}return new A.bB(new A.axK(l,r,q,p),t.h2)}, +gajw(){var s=this.dy +s===$&&A.b() +return new A.bB(new A.axM(this,s.a,s.db),t.h2)}, +gajv(){var s=this.dy +s===$&&A.b() +return new A.bB(new A.axL(this,s.a,s.db),t.h2)}, +gajf(){return new A.bB(new A.axJ(this),t.pj)}, +aB(){var s,r=this +r.Mo() +s=r.cy=A.c5(null,B.am,null,null,r) +s.by() +s=s.cC$ +s.b=!0 +s.a.push(new A.axT(r))}, +bx(){var s,r=this,q=r.c +q.toString +s=A.ak(q) +r.dy=s.ax +q=r.c +q.ap(t.NF) +q=A.ak(q) +r.fr=q.w +switch(s.r.a){case 0:r.fx=!0 +break +case 2:case 3:case 1:case 4:case 5:r.fx=!1 +break}r.a38()}, +wP(){var s,r=this,q=r.at +q===$&&A.b() +q.sM(0,r.gaji().a.$1(r.gun())) +q.sm1(r.gajw().a.$1(r.gun())) +q.sZX(r.gajv().a.$1(r.gun())) +s=r.c.ap(t.I) +s.toString +q.sbS(s.w) +q.sKp(r.gajf().a.$1(r.gun())) +s=r.a.r +if(s==null){s=r.fr +s===$&&A.b() +s=s.f}if(s==null){s=r.fx +s===$&&A.b() +s=s?null:B.d9}q.sws(s) +s=r.fr +s===$&&A.b() +s=s.y +if(s==null){s=r.fx +s===$&&A.b() +s=s?0:2}q.sHW(s) +s=r.fr.z +q.sJv(s==null?0:s) +s=r.fr.Q +q.sJE(0,s==null?48:s) +s=r.c +s.toString +q.sdn(0,A.bt(s,B.b1,t.w).w.r) +q.sD5(r.a.db) +q.sXj(!r.goi())}, +B_(a){this.Mn(a) +this.a3(new A.axS(this))}, +AZ(a,b){this.Mm(a,b) +this.a3(new A.axR(this))}, +IP(a){var s,r=this +r.a39(a) +if(r.XJ(a.gbv(a),a.gcN(a),!0)){r.a3(new A.axP(r)) +s=r.cy +s===$&&A.b() +s.c7(0)}else if(r.dx){r.a3(new A.axQ(r)) +s=r.cy +s===$&&A.b() +s.dc(0)}}, +IQ(a){var s,r=this +r.a3a(a) +r.a3(new A.axO(r)) +s=r.cy +s===$&&A.b() +s.dc(0)}, +m(){var s=this.cy +s===$&&A.b() +s.m() +this.Ml()}} +A.axN.prototype={ +$1(a){var s,r +if(a.p(0,B.I)){s=this.a +s.a.toString +s=s.fr +s===$&&A.b() +s=s.d===!0}else s=!1 +if(s)return!0 +s=this.a +r=s.a.Q +s=s.fr +s===$&&A.b() +s=s.c +s=s==null?null:s.U(a) +return s==null?!1:s}, +$S:350} +A.axK.prototype={ +$1(a){var s,r,q,p=this,o=null +if(a.p(0,B.hR)){s=p.a.fr +s===$&&A.b() +s=s.r +s=s==null?o:s.U(a) +return s==null?p.b.aI():s}s=p.a +if(s.gzj().a.$1(a)){s=s.fr +s===$&&A.b() +s=s.r +s=s==null?o:s.U(a) +return s==null?p.c.aI():s}r=s.fr +r===$&&A.b() +r=r.r +r=r==null?o:r.U(a) +if(r==null)r=p.d.aI() +q=s.fr.r +q=q==null?o:q.U(a) +if(q==null)q=p.c.aI() +s=s.cy +s===$&&A.b() +s=s.x +s===$&&A.b() +s=A.y(r,q,s) +s.toString +return s}, +$S:7} +A.axM.prototype={ +$1(a){var s=this.a +if(s.gpo()&&s.gzj().a.$1(a)){s=s.fr +s===$&&A.b() +s=s.w +s=s==null?null:s.U(a) +if(s==null){s=this.c.a +s=this.b===B.ad?A.C(8,s>>>16&255,s>>>8&255,s&255):A.C(13,s>>>16&255,s>>>8&255,s&255)}return s}return B.n}, +$S:7} +A.axL.prototype={ +$1(a){var s=this.a +if(s.gpo()&&s.gzj().a.$1(a)){s=s.fr +s===$&&A.b() +s=s.x +s=s==null?null:s.U(a) +if(s==null){s=this.c.a +s=this.b===B.ad?A.C(B.c.an(25.5),s>>>16&255,s>>>8&255,s&255):A.C(64,s>>>16&255,s>>>8&255,s&255)}return s}return B.n}, +$S:7} +A.axJ.prototype={ +$1(a){var s,r +if(a.p(0,B.I)&&this.a.gzj().a.$1(a)){s=this.a.fr +s===$&&A.b() +s=s.b +s=s==null?null:s.U(a) +return s==null?12:s}s=this.a +r=s.a.w +if(r==null){r=s.fr +r===$&&A.b() +r=r.b +r=r==null?null:r.U(a)}if(r==null){s=s.fx +s===$&&A.b() +r=8/(s?2:1) +s=r}else s=r +return s}, +$S:351} +A.axT.prototype={ +$0(){this.a.wP()}, +$S:0} +A.axS.prototype={ +$0(){this.a.db=!0}, +$S:0} +A.axR.prototype={ +$0(){this.a.db=!1}, +$S:0} +A.axP.prototype={ +$0(){this.a.dx=!0}, +$S:0} +A.axQ.prototype={ +$0(){this.a.dx=!1}, +$S:0} +A.axO.prototype={ +$0(){this.a.dx=!1}, +$S:0} +A.Fd.prototype={ +gt(a){var s=this +return A.N(s.a,s.b,s.c,s.d,s.e,s.f,s.r,s.w,s.x,s.y,s.z,s.Q,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +if(J.U(b)!==A.t(s))return!1 +return b instanceof A.Fd&&b.a==s.a&&b.b==s.b&&b.c==s.c&&b.d==s.d&&b.e==s.e&&J.d(b.f,s.f)&&b.r==s.r&&b.w==s.w&&b.x==s.x&&b.y==s.y&&b.z==s.z&&b.Q==s.Q}} +A.a1P.prototype={} +A.Fe.prototype={ +gt(a){var s=this +return A.N(s.a,s.b,s.c,s.d,s.e,s.f,s.r,s.w,s.x,s.y,s.z,s.Q,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +if(J.U(b)!==A.t(s))return!1 +return b instanceof A.Fe&&b.a==s.a&&b.b==s.b&&b.c==s.c&&b.d==s.d&&b.e==s.e&&b.f==s.f&&b.r==s.r&&b.w==s.w&&b.x==s.x&&b.y==s.y&&J.d(b.z,s.z)&&!0}} +A.Zp.prototype={ +U(a){var s,r=this,q=r.a,p=q==null?null:q.U(a) +q=r.b +s=q==null?null:q.U(a) +if(p==s)return p +if(p==null){q=s.a +return A.aQ(new A.b_(A.C(0,q.gl(q)>>>16&255,q.gl(q)>>>8&255,q.gl(q)&255),0,B.y,-1),s,r.c)}if(s==null){q=p.a +return A.aQ(p,new A.b_(A.C(0,q.gl(q)>>>16&255,q.gl(q)>>>8&255,q.gl(q)&255),0,B.y,-1),r.c)}return A.aQ(p,s,r.c)}, +$ibA:1} +A.a1Q.prototype={} +A.Ff.prototype={ +gt(a){var s=this +return A.N(s.a,s.b,s.c,s.d,s.e,s.f,s.r,s.w,s.x,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +if(J.U(b)!==A.t(s))return!1 +return b instanceof A.Ff&&J.d(b.a,s.a)&&b.b==s.b&&J.d(b.c,s.c)&&J.d(b.d,s.d)&&J.d(b.e,s.e)&&J.d(b.f,s.f)&&J.d(b.r,s.r)&&J.d(b.w,s.w)&&J.d(b.x,s.x)}} +A.a1R.prototype={} +A.Fg.prototype={ +gt(a){return A.N(this.a,this.b,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a,b){if(b==null)return!1 +if(this===b)return!0 +if(J.U(b)!==A.t(this))return!1 +return b instanceof A.Fg&&J.d(b.a,this.a)&&!0}} +A.a1S.prototype={} +A.a39.prototype={} +A.a1V.prototype={ +JP(a){var s,r +this.a49(a) +s=this.a +s.a.toString +r=this.b +if(r){s=s.x.ga5() +s.toString +s.kh()}}, +atr(a){}, +atK(a){var s,r=this.a +r.a.toString +r=r.x.ga5() +r.toString +s=a.a +r.gae().D7(B.cJ,s.Y(0,a.c),s)}, +atQ(a){var s=this.a,r=s.x,q=r.ga5() +q.toString +q.j8() +s.a.toString +s=this.x.c +s.toString +switch(A.ak(s).r.a){case 2:case 4:s=r.ga5() +s.toString +s.gae().a0H(B.bk) +break +case 0:case 1:case 3:case 5:s=r.ga5() +s.toString +s=s.gae() +r=s.ih +r.toString +s.hO(B.bk,r) +break}this.x.a.toString}, +atM(a){var s,r=this.a +r.a.toString +r=r.x.ga5() +r.toString +r=r.gae() +s=r.ih +s.toString +r.t8(B.cJ,s) +s=this.x.c +s.toString +A.aKX(s)}} +A.Fh.prototype={ +ac(){return new A.Jt(new A.bp(null,t.NE),B.j)}} +A.Jt.prototype={ +gy8(){var s,r=null +this.a.toString +s=this.e +if(s==null){s=A.ad6(!0,r,!0,!0,r,r,!0) +this.e=s}return s}, +aB(){var s,r=this +r.aR() +r.r=new A.a1V(r,r) +s=A.c0(null,null,null,r.a.c) +s=A.aOI(s) +r.d=s +s.Z(0,r.gQH())}, +aO(a){var s,r,q=this +q.bb(a) +if(q.a.c!==a.c||!1){s=q.d +s===$&&A.b() +r=q.gQH() +s.K(0,r) +s=q.d +s.fy$=$.aO() +s.fx$=0 +s=A.c0(null,null,null,q.a.c) +s=A.aOI(s) +q.d=s +s.Z(0,r)}if(q.gy8().gcK()){s=q.d +s===$&&A.b() +s=s.a.b +s=s.a===s.b}else s=!1 +if(s)q.f=!1 +else q.f=!0}, +m(){var s=this.e +if(s!=null)s.m() +s=this.d +s===$&&A.b() +s.fy$=$.aO() +s.fx$=0 +this.aN()}, +afd(){var s,r,q=this +if(q.gy8().gcK()){s=q.d +s===$&&A.b() +s=s.a.b +r=s.a!==s.b}else r=!0 +if(r===q.f)return +q.a3(new A.aAq(q,r))}, +ad_(a,b){var s,r=this,q=r.ais(b) +if(q!==r.f)r.a3(new A.aAp(r,q)) +r.a.toString +s=r.c +s.toString +switch(A.ak(s).r.a){case 2:case 4:if(b===B.cJ){s=r.x.ga5() +if(s!=null)s.ku(a.gln())}return +case 0:case 1:case 3:case 5:break}}, +ad5(){var s=this.d +s===$&&A.b() +s=s.a.b +if(s.a===s.b)this.x.ga5().ZQ()}, +ais(a){var s,r=this.r +r===$&&A.b() +if(!r.b)return!1 +r=this.d +r===$&&A.b() +r=r.a +s=r.b +if(s.a===s.b)return!1 +if(a===B.ak)return!1 +if(a===B.cJ)return!0 +if(r.a.length!==0)return!0 +return!1}, +H(a5){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1=this,a2=null,a3=A.ak(a5),a4=a5.ap(t.Uf) +if(a4==null)a4=B.em +s=a1.gy8() +a1.a.toString +switch(a3.r.a){case 2:r=A.iy(a5) +a1.w=!0 +q=$.aUl() +a1.a.toString +p=a4.w +if(p==null)p=r.ghk() +o=a4.x +if(o==null){a4=r.ghk() +o=A.C(102,a4.gl(a4)>>>16&255,a4.gl(a4)>>>8&255,a4.gl(a4)&255)}n=new A.k(-2/A.bt(a5,B.cM,t.w).w.b,0) +m=!0 +l=!0 +k=B.dT +break +case 4:r=A.iy(a5) +a1.w=!1 +q=$.aUk() +a1.a.toString +p=a4.w +if(p==null)p=r.ghk() +o=a4.x +if(o==null){a4=r.ghk() +o=A.C(102,a4.gl(a4)>>>16&255,a4.gl(a4)>>>8&255,a4.gl(a4)&255)}n=new A.k(-2/A.bt(a5,B.cM,t.w).w.b,0) +m=!0 +l=!0 +k=B.dT +break +case 0:case 1:a1.w=!1 +q=$.aUp() +p=a4.w +if(p==null)p=a3.ax.b +o=a4.x +if(o==null){a4=a3.ax.b +o=A.C(102,a4.gl(a4)>>>16&255,a4.gl(a4)>>>8&255,a4.gl(a4)&255)}k=a2 +n=k +m=!1 +l=!1 +break +case 3:case 5:a1.w=!1 +q=$.aUm() +p=a4.w +if(p==null)p=a3.ax.b +o=a4.x +if(o==null){a4=a3.ax.b +o=A.C(102,a4.gl(a4)>>>16&255,a4.gl(a4)>>>8&255,a4.gl(a4)&255)}k=a2 +n=k +m=!1 +l=!1 +break +default:k=a2 +o=k +p=o +n=p +l=n +m=l +q=m}a4=a5.ap(t.yS) +if(a4==null)a4=B.en +a1.a.toString +j=a1.d +j===$&&A.b() +i=a4.w.cl(j.ax.a) +a1.a.toString +;j=a1.f +h=a1.d +h===$&&A.b() +g=a4.Q +f=$.aSu() +if(t.qY.b(q)&&!0)e=B.Bf +else e=B.a3P +d=A.aX1(a2,g) +if(g===1){c=A.a([$.aS4()],t.VS) +B.b.E(c,B.DB)}else c=a2 +a1.a.toString +b=a1.r +b===$&&A.b() +a=b.a.w +a===$&&A.b() +a0=a?b.gats():a2 +a=a?b.gatq():a2 +return A.cH(a2,a2,new A.Gh(b.gatW(),b.gatU(),b.gatS(),a0,a,b.gatC(),b.gatE(),b.gatP(),b.gatN(),b.gatL(),b.gatJ(),b.gatH(),b.gatg(),b.gatZ(),b.gatk(),b.gatm(),b.gati(),B.cf,new A.iZ(new A.w1(h,s,a4.at,a4.as,!0,!1,e,j,!1,B.Ye,B.Yf,i,B.Yw,B.az,a2,a2,p,B.h2,g,a2,!1,o,q,d,a1.gacZ(),a1.gad4(),c,!0,2,a2,k,l,n,m,B.e8,B.cO,!0,B.af,a2,a2,A.b7P(),f,a1.x),a2),a2),!1,a2,!1,!1,a2,a2,a2,a2,a2,a2,a2,a2,a2,a2,a2,new A.aAr(a1),a2,a2,a2,a2,a2,a2,a2,a2,a2,a2,a2,a2)}} +A.aAq.prototype={ +$0(){this.a.f=this.b}, +$S:0} +A.aAp.prototype={ +$0(){this.a.f=this.b}, +$S:0} +A.aAr.prototype={ +$0(){this.a.gy8().lW()}, +$S:0} +A.aAR.prototype={ +I(){return"_SliderType."+this.b}} +A.TL.prototype={ +I(){return"SliderInteraction."+this.b}} +A.FC.prototype={ +ac(){return new A.JD(new A.bp(null,t.B),new A.wF(),null,null,B.j)}} +A.JD.prototype={ +gco(a){var s +this.a.toString +s=this.as +s.toString +return s}, +aB(){var s,r=this,q=null +r.aR() +r.d=A.c5(q,B.aD,q,q,r) +r.e=A.c5(q,B.aD,q,q,r) +r.f=A.c5(q,B.h5,q,q,r) +r.r=A.c5(q,B.z,q,q,r) +s=r.f +r.a.toString +s.sl(0,1) +r.r.sl(0,r.NZ(r.a.c)) +r.y=A.aY([B.a4H,new A.cT(r.ga6y(),new A.b5(A.a([],t.g),t.c),t.f6)],t.u,t.od) +r.a.toString +if(r.as==null)r.as=A.ad6(!0,q,!0,!0,q,q,!1)}, +m(){var s=this,r=s.w +if(r!=null)r.b3(0) +r=s.d +r===$&&A.b() +r.m() +r=s.e +r===$&&A.b() +r.m() +r=s.f +r===$&&A.b() +r.m() +r=s.r +r===$&&A.b() +r.m() +r=s.ch +if(r!=null)r.eg(0) +r=s.ch +if(r!=null)r.m() +s.ch=null +r=s.as +if(r!=null)r.m() +s.a62()}, +abi(a){var s=this.ael(a),r=this.a +if(s!==r.c){r.e.$1(s) +r=this.as +if(r!=null)r.lW()}}, +Gv(a){this.Q=!0 +this.a.toString}, +Gt(a){this.Q=!1 +this.a.toString}, +a6z(a){var s,r=this.x,q=$.aa.F$.z.i(0,r).ga_() +q.toString +t.kd.a(q) +r=$.aa.F$.z.i(0,r).ap(t.I) +r.toString +s=r.w +switch(a.a.a){case 0:switch(s.a){case 0:q.Ai() +break +case 1:q.B5() +break}break +case 1:switch(s.a){case 0:q.B5() +break +case 1:q.Ai() +break}break +case 2:q.B5() +break +case 3:q.Ai() +break}}, +aiH(a){if(a!==this.at)this.a3(new A.aAO(this,a))}, +aiJ(a){if(a!==this.ax)this.a3(new A.aAP(this,a))}, +ael(a){var s=this.a,r=s.x +s=s.w +return a*(r-s)+s}, +NZ(a){var s,r=this.a,q=r.x +r=r.w +s=q>r?(a-r)/(q-r):0 +return s}, +H(a){this.a.toString +switch(0){case 0:return this.a7o(a)}}, +a7o(b6){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,b0,b1,b2=this,b3=null,b4={},b5=A.ak(b6) +b6.ap(t.Dj) +s=A.ak(b6) +r=b4.a=s.e0 +q=new A.aAJ(b6,4,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3) +p=q.gwT() +s=A.aS(t.ui) +b2.a.toString +if(b2.ax)s.D(0,B.I) +if(b2.at)s.D(0,B.N) +if(b2.Q)s.D(0,B.hR) +o=r.db +if(o==null)o=p +if(o instanceof A.akQ){n=r.ay +if(n==null){m=b5.ax +l=m.db.a +m=m.cy.a +n=A.a9D(A.C(153,l>>>16&255,l>>>8&255,l&255),A.C(B.c.an(229.5),m>>>16&255,m>>>8&255,m&255))}}else{b2.a.toString +n=r.ay +if(n==null)n=b5.ax.b}m=r.a +l=m==null?q.a:m +b2.a.toString +k=r.b +if(k==null)k=q.gnV() +b2.a.toString +j=b4.a.c +if(j==null)j=q.goE() +b2.a.toString +i=b4.a.d +if(i==null)i=q.gt7() +h=b4.a.e +if(h==null)h=q.gvi() +g=b4.a.r +if(g==null)g=q.gvk() +f=b4.a.f +if(f==null)f=q.gvl() +b2.a.toString +e=b4.a.w +if(e==null)e=q.guy() +b2.a.toString +d=b4.a.x +if(d==null)d=q.gvN() +c=b4.a.y +if(c==null)c=q.gvh() +b=b4.a.z +if(b==null)b=q.gvj() +b2.a.toString +a=b4.a.Q +if(a==null)a=q.ghI() +a0=b4.a.at +if(a0==null)a0=q.gvm() +a1=new A.aAM(b4,b2,s,q).$0() +a2=b4.a +a3=a2.cy +if(a3==null)a3=B.E2 +a4=a2.CW +if(a4==null)a4=B.E1 +a5=a2.cx +if(a5==null)a5=B.E0 +a6=a2.ch +if(a6==null)a6=B.E_ +a7=a2.fy +if(a7==null)a7=B.Xr +a2=a2.go +if(a2==null)a2=q.gwU() +m=l==null?m:l +l=a1==null?r.ax:a1 +b4.a=A.aNf(e,k,r.k3,c,h,b,g,f,a0,d,j,r.id,r.k2,r.as,l,a6,r.dy,r.dx,r.fr,r.fx,i,a7,a,r.k1,a5,a4,m,a3,n,o,a2) +b2.a.toString +m=A.i1(b3,s,t.WV) +if(m==null)a8=b3 +else a8=m +if(a8==null)a8=B.ec.U(s) +b2.a.toString +switch(b5.r.a){case 0:case 1:case 2:case 3:case 4:a9=b3 +break +case 5:a9=new A.aAL(b2) +break +default:a9=b3}switch(A.bt(b6,B.fF,t.w).w.ch.a){case 1:b0=B.Th +break +case 0:b0=B.Ts +break +default:b0=b3}s=A.d_(b6,B.fG) +s=s==null?b3:s.gbK() +b1=(s==null?B.ab:s).aml(0,1.3).a +s=b2.y +s===$&&A.b() +m=b2.gco(b2) +l=b2.NZ(b2.a.c) +b2.a.toString +k=b4.a +j=new A.aAN(b6).$0() +i=b2.a +h=i.x +i=i.w +i=h>i?b2.gabh():b3 +return A.cH(b3,b3,A.aL2(s,!1,new A.r3(b2.ay,new A.a2l(l,b3,b3,b3,k,b1,j,i,b2.gGu(),b2.gGs(),b3,b2,b2.at,b2.ax,B.Yb,b2.x),b3),!0,m,a8,b3,b2.gaiG(),b2.gaiI(),b0),!0,b3,!1,!1,b3,b3,b3,b3,b3,b3,b3,b3,b3,a9,b3,b3,b3,b3,b3,b3,b3,!0,b3,b3,b3,b3,b3,b3)}, +a1o(){var s,r,q=this +if(q.ch==null){q.ch=A.pe(new A.aAQ(q),!1) +s=q.c +s.toString +q.a.toString +s=A.aLL(s,t.N1) +s.toString +r=q.ch +r.toString +s.B7(0,r)}}} +A.aAO.prototype={ +$0(){this.a.at=this.b}, +$S:0} +A.aAP.prototype={ +$0(){this.a.ax=this.b}, +$S:0} +A.aAM.prototype={ +$0(){var s,r,q,p=this +p.b.a.toString +s=p.c +r=t._ +q=A.i1(p.a.a.ax,s,r) +return q==null?A.i1(p.d.gcr(),s,r):q}, +$S:216} +A.aAN.prototype={ +$0(){return A.bt(this.a,B.fE,t.w).w.a}, +$S:215} +A.aAL.prototype={ +$0(){var s=this.a +if(!s.gco(s).gcK()&&s.gco(s).gdM())s.gco(s).lW()}, +$S:0} +A.aAQ.prototype={ +$1(a){var s=this.a +return A.aFq(new A.a3X(s,null),s.ay,B.e,!0)}, +$S:358} +A.a2l.prototype={ +az(a){var s,r=this,q=a.ap(t.I) +q.toString +s=A.ak(a) +return A.b1U(r.CW,r.f,A.bt(a,B.iQ,t.w).w.CW,r.ay,r.ch,r.r,r.as,r.Q,r.z,s.r,r.y,r.e,r.at,r.w,r.ax,q.w,r.x,r.d)}, +aF(a,b){var s,r,q=this +b.sao7(q.f) +b.sl(0,q.d) +b.sa0G(q.e) +b.sJo(0,q.r) +b.sa1x(q.w) +b.sCn(q.x) +b.sa0A(q.y) +b.seT(q.z) +b.e0=q.Q +b.bE=q.as +s=a.ap(t.I) +s.toString +b.sbS(s.w) +b.sa0M(q.at) +b.saut(0,A.ak(a).r) +b.scK(q.ay) +b.sarh(q.ch) +s=A.bt(a,B.iQ,t.w).w.CW +r=b.aH +r===$&&A.b() +r.b=s +r=b.aD +r===$&&A.b() +r.b=s +b.sal6(q.CW)}} +A.zs.prototype={ +a6v(a,b,c,d,e,f,g,h,i,j,k,l,m,n,a0,a1,a2,a3){var s,r,q,p=this,o=null +p.ut() +s=new A.adM(A.A(t.S,t.EG)) +r=A.af3(o,o) +r.w=s +r.ay=p.gGu() +r.ch=p.gaiE() +r.CW=p.gGs() +r.cx=p.ga9N() +r.b=c +p.aH=r +r=A.yf(o,o) +r.w=s +r.aM=p.gaiK() +r.aJ=p.gaiM() +r.b=c +p.aD=r +r=p.B +q=r.d +q===$&&A.b() +p.F=A.dc(B.ar,q,o) +q=r.e +q===$&&A.b() +q=A.dc(B.ar,q,o) +q.a.h3(new A.azv(p)) +p.a9=q +r=r.f +r===$&&A.b() +p.X=A.dc(B.jK,r,o)}, +gQr(){var s=this.gSk() +return new A.R(s,new A.azt(),A.S(s).h("R<1,z>")).is(0,B.e9)}, +gQq(){var s=this.gSk() +return new A.R(s,new A.azs(),A.S(s).h("R<1,z>")).is(0,B.e9)}, +gSk(){var s,r=this.cv +r.ch.toString +r.cx.toString +s=this.cj!=null +s +return A.a([new A.G(48,48),new A.G(20,20),r.CW.a0f(s,r)],t.X4)}, +gGG(){var s=this.cv +return s.cy.a0d(!1,this,s)}, +sl(a,b){var s,r=this +if(b===r.bc)return +r.bc=b +s=r.B.r +s===$&&A.b() +s.sl(0,b) +r.aY()}, +sa0G(a){if(a==this.cY)return +this.cY=a +this.aY()}, +saut(a,b){if(this.cZ===b)return +this.cZ=b +this.aY()}, +sa0M(a){return}, +sao7(a){return}, +sJo(a,b){return}, +sa1x(a){if(a.j(0,this.cv))return +this.cv=a +this.ut()}, +sCn(a){if(a===this.dv)return +this.dv=a +this.ut()}, +sa0A(a){if(a.j(0,this.av))return +this.av=a +this.ag()}, +seT(a){var s,r,q=this +if(J.d(a,q.cj))return +s=q.cj +q.cj=a +r=a!=null +if(s!=null!==r){s=q.B.f +if(r){s===$&&A.b() +s.c7(0)}else{s===$&&A.b() +s.dc(0)}q.ag() +q.aY()}}, +sbS(a){if(a===this.cI)return +this.cI=a +this.ut()}, +scK(a){var s,r,q=this +if(a===q.hD)return +q.hD=a +s=q.B +r=s.d +if(a){r===$&&A.b() +r.c7(0) +if(q.gxv()){s=s.e +s===$&&A.b() +s.c7(0)}}else{r===$&&A.b() +r.dc(0) +if(q.gxv()){s=s.e +s===$&&A.b() +s.dc(0)}}q.aY()}, +sarh(a){if(a===this.f6)return +this.f6=a +this.Tn(a)}, +sari(a){var s=this +if(a===s.dO)return +s.dO=a +s.Tn(s.f6)}, +sal6(a){if(a===this.hd)return +this.hd=a +this.aY()}, +Tn(a){var s,r=this +if(a&&r.dO){s=r.B.d +s===$&&A.b() +s.c7(0)}else if(!r.hD){s=r.B.d +s===$&&A.b() +s.dc(0)}}, +gxv(){switch(this.cv.fy.a){case 0:return!1 +case 1:return!0 +case 2:return!0 +case 3:return!1}}, +ga6X(){switch(this.cZ.a){case 2:case 4:return 0.1 +case 0:case 1:case 3:case 5:return 0.05}}, +ut(){this.aq.scV(0,null) +this.a8()}, +tC(){this.DF() +this.aq.a8() +this.ut()}, +ah(a){var s,r,q=this +q.a5R(a) +s=q.F +s===$&&A.b() +r=q.gdB() +s.a.Z(0,r) +s=q.a9 +s===$&&A.b() +s.a.Z(0,r) +s=q.X +s===$&&A.b() +s.a.Z(0,r) +s=q.B.r +s===$&&A.b() +s.by() +s=s.cC$ +s.b=!0 +s.a.push(r)}, +ad(a){var s,r=this,q=r.F +q===$&&A.b() +s=r.gdB() +q.a.K(0,s) +q=r.a9 +q===$&&A.b() +q.a.K(0,s) +q=r.X +q===$&&A.b() +q.a.K(0,s) +q=r.B.r +q===$&&A.b() +q.K(0,s) +r.a5S(0)}, +m(){this.aq.m() +this.eK()}, +aaV(a){switch(this.cI.a){case 0:return 1-a +case 1:return a}}, +y6(a){var s=A.O(a,0,1) +return s}, +Sp(a){var s,r,q,p=this,o=p.B +if(o.c==null)return +o.a1o() +if(!p.aE&&p.cj!=null){switch(p.hd.a){case 0:case 1:p.aE=!0 +s=p.fZ(a) +r=p.gGG() +q=p.gGG() +q=p.aaV((s.a-r.a)/(q.c-q.a)) +p.bj=q +r=p.cj +r.toString +r.$1(p.y6(q)) +break +case 3:s=p.bM +s.toString +if(s.p(0,p.fZ(a))){p.aE=!0 +p.bj=p.bc}break +case 2:break}if(p.aE){p.e0.$1(p.y6(p.bc)) +s=o.d +s===$&&A.b() +s.c7(0) +if(p.gxv()){s=o.e +s===$&&A.b() +s.c7(0) +s=o.w +if(s!=null)s.b3(0) +o.w=A.cy(new A.b1(5e5),new A.azu(p))}}}}, +EV(){var s,r,q=this,p=q.B +if(p.c==null)return +if(q.aE&&!0){q.bE.$1(q.y6(q.bj)) +s=q.aE=!1 +q.bj=0 +r=p.d +r===$&&A.b() +r.dc(0) +if(q.gxv()?p.w==null:s){p=p.e +p===$&&A.b() +p.dc(0)}}}, +Gv(a){this.Sp(a.b)}, +aiF(a){var s,r,q,p=this +if(p.B.c==null)return +s=p.aE +if(!s&&p.hd===B.Yc){s=p.aE=!0 +p.bj=p.bc}switch(p.hd.a){case 0:case 2:case 3:if(s&&p.cj!=null){s=a.c +s.toString +r=p.gGG() +q=s/(r.c-r.a) +switch(p.cI.a){case 0:p.bj-=q +break +case 1:p.bj+=q +break}s=p.cj +s.toString +s.$1(p.y6(p.bj))}break +case 1:break}}, +Gt(a){this.EV()}, +aiL(a){this.Sp(a.a)}, +aiN(a){this.EV()}, +hF(a){return!0}, +j7(a,b){var s,r=this +if(r.B.c==null)return +if(t.pY.b(a)&&r.cj!=null){s=r.aH +s===$&&A.b() +s.mC(a) +s=r.aD +s===$&&A.b() +s.mC(a)}if(r.cj!=null&&r.bM!=null){s=r.bM +s.toString +r.sari(s.p(0,a.gbR()))}}, +bp(a){return 144+this.gQr()}, +bo(a){var s=this.cv.a +s.toString +return Math.max(s,this.gQq())}, +giz(){return!0}, +c5(a){var s,r=a.b +r=r<1/0?r:144+this.gQr() +s=a.d +if(!(s<1/0)){s=this.cv.a +s.toString +s=Math.max(s,this.gQq())}return new A.G(r,s)}, +am(a,b){var s,r,q,p,o,n,m,l,k,j,i,h,g,f=this,e=null,d=f.B.r +d===$&&A.b() +d=d.x +d===$&&A.b() +s=f.cY +switch(f.cI.a){case 0:r=1-d +q=s!=null?1-s:e +break +case 1:q=s!=null?s:e +r=d +break +default:q=e +r=q}d=f.cv +p=d.cy.a0e(!1,b,f,d) +d=p.a +o=p.c-d +n=new A.k(d+r*o,p.gaK().b) +if(f.cj!=null){f.cv.ch.toString +f.bM=A.hv(n,24)}m=q!=null?new A.k(d+q*o,p.gaK().b):e +d=f.cv +o=d.cy +o.toString +l=f.X +l===$&&A.b() +k=f.cI +o.au9(a,b,l,!1,f.cj!=null,f,m,d,k,n) +d=f.F +d===$&&A.b() +if(d.gb6(d)!==B.K){d=f.cv +d.ch.toString +o=f.F +l=f.av +if(l.ga7(l))f.gv(f) +j=a.gbe(a) +o=new A.ar(0,24,t.Y).a2(0,o.gl(o)) +l=$.W().aj() +d=d.ax +d.toString +l.sM(0,d) +j.du(n,o,l)}f.cj!=null +d=f.cv +d.cx.toString +o=f.F +l=f.X +k=f.av +if(k.ga7(k))f.gv(f) +j=a.gbe(a) +k=t.Y +d=new A.f4(d.at,d.Q).a2(0,l.gl(l)) +d.toString +i=new A.ar(10,10,k).a2(0,l.gl(l)) +h=new A.ar(1,6,k).a2(0,o.gl(o)) +o=$.W() +g=o.bD() +k=2*i +g.U1(A.aGN(n,k,k),0,6.283185307179586) +j.of(g,B.k,h,!0) +o=o.aj() +o.sM(0,d) +j.du(n,i,o)}, +f3(a){var s,r=this +r.hs(a) +a.a=!1 +s=r.cj +a.b7(B.lD,!0) +a.b7(B.lA,s!=null) +a.aL=r.cI +a.e=!0 +if(r.cj!=null){a.sBH(r.gart()) +a.sBC(r.ganU())}s=r.bc +a.rx=new A.cS(""+B.c.an(s*100)+"%",B.ap) +a.e=!0 +a.ry=new A.cS(""+B.c.an(A.O(s+r.gz1(),0,1)*100)+"%",B.ap) +a.e=!0 +a.to=new A.cS(""+B.c.an(A.O(r.bc-r.gz1(),0,1)*100)+"%",B.ap) +a.e=!0}, +gz1(){var s=this.ga6X() +return s}, +B5(){var s,r=this +if(r.cj!=null){r.e0.$1(A.O(r.bc,0,1)) +s=A.O(r.bc+r.gz1(),0,1) +r.cj.$1(s) +r.bE.$1(s)}}, +Ai(){var s,r=this +if(r.cj!=null){r.e0.$1(A.O(r.bc,0,1)) +s=A.O(r.bc-r.gz1(),0,1) +r.cj.$1(s) +r.bE.$1(s)}}} +A.azv.prototype={ +$1(a){var s,r +if(a===B.K){s=this.a.B +r=s.ch +if(r!=null)r.eg(0) +r=s.ch +if(r!=null)r.m() +s.ch=null}}, +$S:6} +A.azt.prototype={ +$1(a){return a.a}, +$S:214} +A.azs.prototype={ +$1(a){return a.b}, +$S:214} +A.azu.prototype={ +$0(){var s=this.a,r=s.B +r.w=null +if(!s.aE){s=r.e +s===$&&A.b() +s=s.Q +s===$&&A.b() +s=s===B.a7}else s=!1 +if(s){s=r.e +s===$&&A.b() +s.dc(0)}}, +$S:0} +A.kQ.prototype={} +A.zw.prototype={ +I(){return"_SliderAdjustmentType."+this.b}} +A.a3X.prototype={ +az(a){var s,r=new A.a1a(this.d,!1,A.ag(t.T)) +r.aw() +s=r.F.e +s===$&&A.b() +r.B=A.dc(B.ar,s,null) +return r}, +aF(a,b){b.F=this.d}} +A.a1a.prototype={ +giz(){return!0}, +ah(a){var s,r,q=this +q.a5V(a) +s=q.B +s===$&&A.b() +r=q.gdB() +s.a.Z(0,r) +s=q.F.r +s===$&&A.b() +s.by() +s=s.cC$ +s.b=!0 +s.a.push(r)}, +ad(a){var s,r=this,q=r.B +q===$&&A.b() +s=r.gdB() +q.a.K(0,s) +q=r.F.r +q===$&&A.b() +q.K(0,s) +r.a5W(0)}, +am(a,b){var s=this.F.z +if(s!=null)s.$2(a,b)}, +c5(a){return new A.G(A.O(0,a.a,a.b),A.O(0,a.c,a.d))}} +A.aAJ.prototype={ +gfk(){var s,r=this,q=r.ok +if(q===$){s=A.ak(r.k4) +r.ok!==$&&A.ay() +q=r.ok=s.ax}return q}, +gnV(){return this.gfk().b}, +goE(){var s=this.gfk(),r=s.dx +return r==null?s.cy:r}, +gt7(){var s=this.gfk().b +return A.C(138,s.gl(s)>>>16&255,s.gl(s)>>>8&255,s.gl(s)&255)}, +gvi(){var s=this.gfk().db.a +return A.C(97,s>>>16&255,s>>>8&255,s&255)}, +gvk(){var s=this.gfk().db.a +return A.C(31,s>>>16&255,s>>>8&255,s&255)}, +gvl(){var s=this.gfk().db.a +return A.C(31,s>>>16&255,s>>>8&255,s&255)}, +guy(){var s=this.gfk().c.a +return A.C(97,s>>>16&255,s>>>8&255,s&255)}, +gvN(){var s=this.gfk(),r=s.dy +s=(r==null?s.db:r).a +return A.C(97,s>>>16&255,s>>>8&255,s&255)}, +gvh(){var s=this.gfk().db.a +return A.C(97,s>>>16&255,s>>>8&255,s&255)}, +gvj(){var s=this.gfk().db.a +return A.C(97,s>>>16&255,s>>>8&255,s&255)}, +ghI(){return this.gfk().b}, +gvm(){var s=this.gfk().db.a +return A.a9D(A.C(97,s>>>16&255,s>>>8&255,s&255),this.gfk().cy)}, +gcr(){var s=new A.aAK(this) +return new A.ZQ(s,J.jX(s.$1(B.Xl)))}, +gwU(){var s=A.ak(this.k4).p3.at +s.toString +return s.ey(this.gfk().c)}, +gwT(){return B.Dy}} +A.aAK.prototype={ +$1(a){var s +if(a.p(0,B.hR)){s=this.a.gfk().b +return A.C(31,s.gl(s)>>>16&255,s.gl(s)>>>8&255,s.gl(s)&255)}if(a.p(0,B.I)){s=this.a.gfk().b +return A.C(20,s.gl(s)>>>16&255,s.gl(s)>>>8&255,s.gl(s)&255)}if(a.p(0,B.N)){s=this.a.gfk().b +return A.C(31,s.gl(s)>>>16&255,s.gl(s)>>>8&255,s.gl(s)&255)}return B.n}, +$S:7} +A.KT.prototype={ +ah(a){this.dg(a) +$.hu.lx$.a.D(0,this.gmt())}, +ad(a){$.hu.lx$.a.C(0,this.gmt()) +this.dh(0)}} +A.KV.prototype={ +ah(a){this.dg(a) +$.hu.lx$.a.D(0,this.gmt())}, +ad(a){$.hu.lx$.a.C(0,this.gmt()) +this.dh(0)}} +A.KZ.prototype={ +bY(){this.dq() +this.cW() +this.f2()}, +m(){var s=this,r=s.b9$ +if(r!=null)r.K(0,s.geM()) +s.b9$=null +s.aN()}} +A.aot.prototype={ +I(){return"ShowValueIndicator."+this.b}} +A.xV.prototype={ +gt(a){var s=this +return A.N(s.a,s.gnV(),s.goE(),s.gt7(),s.gvi(),s.gvk(),s.gvl(),s.guy(),s.gvN(),s.gvh(),s.gvj(),s.ghI(),s.as,s.gvm(),s.gcr(),s.ay,s.ch,s.CW,s.cx,A.N(s.cy,s.gwT(),s.dx,s.dy,s.fr,s.fx,s.fy,s.gwU(),s.id,s.k1,s.k2,s.k3,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a))}, +j(a,b){var s,r=this +if(b==null)return!1 +if(r===b)return!0 +if(J.U(b)!==A.t(r))return!1 +if(b instanceof A.xV)if(b.a==r.a)if(J.d(b.gnV(),r.gnV()))if(J.d(b.goE(),r.goE()))if(J.d(b.gt7(),r.gt7()))if(J.d(b.gvi(),r.gvi()))if(J.d(b.gvk(),r.gvk()))if(J.d(b.gvl(),r.gvl()))if(J.d(b.guy(),r.guy()))if(J.d(b.gvN(),r.gvN()))if(J.d(b.gvh(),r.gvh()))if(J.d(b.gvj(),r.gvj()))if(J.d(b.ghI(),r.ghI()))if(J.d(b.as,r.as))if(J.d(b.gvm(),r.gvm()))if(J.d(b.gcr(),r.gcr()))if(J.d(b.ay,r.ay))if(b.ch==r.ch)if(b.CW==r.CW)if(b.cx==r.cx)if(b.cy==r.cy)if(b.gwT()==r.gwT())if(b.fy==r.fy)if(J.d(b.gwU(),r.gwU()))if(b.id==r.id)s=!0 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +return s}, +gnV(){return this.b}, +goE(){return this.c}, +gt7(){return this.d}, +gvi(){return this.e}, +gvl(){return this.f}, +gvk(){return this.r}, +guy(){return this.w}, +gvN(){return this.x}, +gvh(){return this.y}, +gvj(){return this.z}, +ghI(){return this.Q}, +gvm(){return this.at}, +gcr(){return this.ax}, +gwT(){return this.db}, +gwU(){return this.go}} +A.aoM.prototype={} +A.aoN.prototype={} +A.aoO.prototype={} +A.a7x.prototype={ +CT(a,b,c,d,e){var s,r,q,p +e.cx.toString +b +e.ch.toString +s=e.a +s.toString +r=c.a+Math.max(24,10) +q=c.b+(d.gv(d).b-s)/2 +p=r+d.gv(d).a-Math.max(20,48) +return new A.w(Math.min(r,p),q,Math.max(r,p),q+s)}, +a0d(a,b,c){return this.CT(a,!1,B.e,b,c)}, +a0e(a,b,c,d){return this.CT(a,!1,b,c,d)}} +A.amq.prototype={ +au9(a0,a1,a2,a3,a4,a5,a6,a7,a8,a9){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a=a7.a +if(a==null||a<=0)return +a=$.W() +s=a.aj() +r=new A.f4(a7.e,a7.b).a2(0,a2.gl(a2)) +r.toString +s.sM(0,r) +q=a.aj() +r=new A.f4(a7.r,a7.c).a2(0,a2.gl(a2)) +r.toString +q.sM(0,r) +switch(a8.a){case 1:p=q +o=s +break +case 0:p=s +o=q +break +default:o=null +p=null}n=this.CT(a3,a4,a1,a5,a7) +r=n.d +m=n.b +l=r-m +k=l/2 +j=new A.aC(k,k) +l=(l+2)/2 +i=new A.aC(l,l) +l=a0.gbe(a0) +k=a8===B.q +h=k?m-1:m +g=a9.a +f=k?r+1:r +e=k?i:j +d=k?i:j +l.bQ(A.ku(n.a,h,g,f,d,B.w,e,B.w),o) +e=a0.gbe(a0) +l=a8===B.Z +h=l?m-1:m +f=l?r+1:r +d=l?i:j +l=l?i:j +e.bQ(A.ku(g,h,n.c,f,B.w,l,B.w,d),p) +if(a6!=null){l=a6.a +c=k?l>g:l=0.5!==r){s.d.$1(!r) +q.a3(new A.axV(q))}else q.zO() +p=q.lA$ +p===$&&A.b() +p.dc(0)}, +aj3(a){var s=this.a.d +a.toString +s.$1(a)}, +H(b9){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,b0,b1,b2,b3,b4,b5,b6,b7=this,b8=null +if(b7.e){b7.e=!1 +b7.zO()}s=A.ak(b9) +r=A.aNq(b9) +q=new A.a2J(b9,A.ak(b9).ax) +p=new A.aB0(b9,b8,b8,b8,b8,b8,b8,b8,b8,b8) +o=b7.kB$ +o===$&&A.b() +o.e=A.dp(0,q.gavx()) +n=b7.gfF() +n.D(0,B.G) +m=b7.gfF() +m.C(0,B.G) +b7.a.toString +l=b7.gux().a.$1(n) +if(l==null){o=r.a +l=o==null?b8:o.U(n)}o=l==null +if(o){k=p.ghI().a.$1(n) +k.toString +j=k}else j=l +b7.a.toString +i=b7.gux().a.$1(m) +if(i==null){k=r.a +i=k==null?b8:k.U(m)}k=i==null +if(k){h=p.ghI().a.$1(m) +h.toString +g=h}else g=i +b7.a.toString +h=b7.gTQ().a.$1(n) +if(h==null){h=r.b +h=h==null?b8:h.U(n)}if(h==null){h=b7.gux().a.$1(n) +if(h==null)h=b8 +else{f=J.fo(h) +h=A.C(128,f.gl(h)>>>16&255,f.gl(h)>>>8&255,f.gl(h)&255)}e=h}else e=h +if(e==null){h=p.gm1().a.$1(n) +h.toString +e=h}b7.a.toString +h=r.c +f=h==null?b8:h.U(n) +d=f +if(d==null)d=B.n +b7.a.toString +f=r.d +c=f==null?b8:f.U(n) +b=c +if(b==null)b=p.grO().U(n) +b7.a.toString +c=b7.gTQ().a.$1(m) +if(c==null){c=r.b +c=c==null?b8:c.U(m) +a=c}else a=c +if(a==null){c=p.gm1().a.$1(m) +c.toString +a=c}b7.a.toString +h=h==null?b8:h.U(m) +a0=h +if(a0==null)a0=p.gwK().a.$1(m) +b7.a.toString +h=f==null?b8:f.U(m) +a1=h +if(a1==null)a1=p.grO().U(m) +b7.a.toString +a2=q.gXh().U(n) +a3=q.gXh().U(m) +a4=b7.gfF() +a4.D(0,B.N) +b7.a.toString +h=r.r +f=h==null?b8:h.U(a4) +a5=f +if(a5==null){f=p.gcr().a.$1(a4) +f.toString +a5=f}a6=b7.gfF() +a6.D(0,B.I) +b7.a.toString +f=h==null?b8:h.U(a6) +a7=f +if(a7==null){f=p.gcr().a.$1(a6) +f.toString +a7=f}n.D(0,B.L) +b7.a.toString +f=b7.gux().a.$1(n) +if(f==null){f=r.a +f=f==null?b8:f.U(n) +a8=f}else a8=f +if(a8==null){f=p.ghI().a.$1(n) +f.toString +a8=f}b7.a.toString +f=h==null?b8:h.U(n) +if(f==null){o=o?b8:A.C(31,l.gl(l)>>>16&255,l.gl(l)>>>8&255,l.gl(l)&255) +a9=o}else a9=f +if(a9==null){o=p.gcr().a.$1(n) +o.toString +a9=o}m.D(0,B.L) +b7.a.toString +o=b7.gux().a.$1(m) +if(o==null){o=r.a +o=o==null?b8:o.U(m) +b0=o}else b0=o +if(b0==null){o=p.ghI().a.$1(m) +o.toString +b0=o}b7.a.toString +o=h==null?b8:h.U(m) +if(o==null){o=k?b8:A.C(31,i.gl(i)>>>16&255,i.gl(i)>>>8&255,i.gl(i)&255) +b1=o}else b1=o +if(b1==null){o=p.gcr().a.$1(m) +o.toString +b1=o}b2=q.gH2() +b7.a.toString +b3=q.gJ6() +b7.a.toString +b4=r.w +if(b4==null)b4=p.ghq() +o=b7.a +k=o.c +h=o.cx +f=o.fx +c=o.fy +o=o.id +b5=b7.d +b6=b7.kC$ +b6===$&&A.b() +b5.sbv(0,b6) +b6=b7.vy$ +b6===$&&A.b() +b5.sYV(b6) +b6=b7.vA$ +b6===$&&A.b() +b5.sYX(b6) +b6=b7.vz$ +b6===$&&A.b() +b5.sYY(b6) +b5.sXm(b1) +b5.sYW(a9) +b5.sn8(a7) +b5.sn5(a5) +b5.shq(b4) +b5.sWe(b7.ov$) +b5.sXH(b7.gfF().p(0,B.N)) +b5.sXI(b7.gfF().p(0,B.I)) +b5.sU0(j) +b5.sXl(g) +b5.sakI(a8) +b5.saro(b0) +b5.sakK(b7.a.x) +b5.satd(b7.a.y) +b5.sarq(b7.a.z) +b5.satw(b7.a.Q) +b5.snV(e) +b5.sakL(d) +b5.sakM(b) +b5.soE(a) +b5.sarr(a0) +b5.sars(a1) +b5.sqy(A.aDy(b9,b8)) +b5.sarR(b7.geT()!=null) +b5.savH(b7.a.id.a-40) +b6=b9.ap(t.I) +b6.toString +b5.sbS(b6.w) +b5.sa66(s.ax.cy) +b5.sJ6(b3) +b5.sH2(b2) +b5.sK3(q.gK3()) +b5.sKq(q.gKq()) +b5.sKC(q.gKC()) +b5.sKD(q.gKD()) +b5.sakH(a2) +b5.sarn(a3) +b5.sakG(b8) +b5.sarm(b8) +b5.sn9(A.aG5(b9)) +b5.sKr(q.gKr()) +b5.sKE(q.gKE()) +b5.sauu(b7.kB$) +return A.cH(b8,b8,A.hn(b8,b7.UO(!1,f,new A.bB(new A.axY(b7,r),t.bN),c,b5,o),h,!0,b8,b8,b8,b8,b7.gaj4(),b7.gaj6(),b7.gaj8(),b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8),!1,b8,!1,!1,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,k,b8,b8)}} +A.axW.prototype={ +$1(a){if(a.p(0,B.P))return this.a.a.r +if(a.p(0,B.G))return this.a.a.e +return this.a.a.r}, +$S:45} +A.axX.prototype={ +$1(a){if(a.p(0,B.G))return this.a.a.f +return this.a.a.w}, +$S:45} +A.axV.prototype={ +$0(){this.a.e=!0}, +$S:0} +A.axY.prototype={ +$1(a){var s=A.i1(this.a.a.cy,a,t.WV) +if(s==null)s=null +return s==null?A.i1(B.ec,a,t.Pb):s}, +$S:223} +A.JV.prototype={ +sauu(a){if(a===this.db)return +this.db=a +this.a6()}, +sakG(a){return}, +sarm(a){return}, +sn9(a){if(a.j(0,this.fr))return +this.fr=a +this.a6()}, +sakH(a){if(a.j(0,this.fx))return +this.fx=a +this.a6()}, +sarn(a){if(a.j(0,this.fy))return +this.fy=a +this.a6()}, +sakI(a){if(a.j(0,this.go))return +this.go=a +this.a6()}, +saro(a){if(a.j(0,this.id))return +this.id=a +this.a6()}, +sH2(a){if(a===this.k1)return +this.k1=a +this.a6()}, +sJ6(a){if(a===this.k2)return +this.k2=a +this.a6()}, +sK3(a){if(a===this.k3)return +this.k3=a +this.a6()}, +sKq(a){if(a==this.k4)return +this.k4=a +this.a6()}, +sKE(a){if(a.j(0,this.ok))return +this.ok=a +this.a6()}, +sKC(a){if(a===this.p1)return +this.p1=a +this.a6()}, +sKD(a){if(a===this.p2)return +this.p2=a +this.a6()}, +sakK(a){return}, +satd(a){return}, +sarq(a){return}, +satw(a){return}, +snV(a){if(a.j(0,this.rx))return +this.rx=a +this.a6()}, +sakL(a){if(a.j(0,this.ry))return +this.ry=a +this.a6()}, +sarr(a){if(J.d(a,this.to))return +this.to=a +this.a6()}, +sakM(a){if(a==this.x1)return +this.x1=a +this.a6()}, +sars(a){if(a==this.x2)return +this.x2=a +this.a6()}, +soE(a){if(a.j(0,this.xr))return +this.xr=a +this.a6()}, +sqy(a){if(a.j(0,this.y1))return +this.y1=a +this.a6()}, +sbS(a){if(this.y2===a)return +this.y2=a +this.a6()}, +sa66(a){if(a.j(0,this.aL))return +this.aL=a +this.a6()}, +sarR(a){if(a===this.bG)return +this.bG=a +this.a6()}, +savH(a){if(a===this.aM)return +this.aM=a +this.a6()}, +sKr(a){var s=this.aJ +if(a==null?s==null:a===s)return +this.aJ=a +this.a6()}, +abs(){if(!this.F)this.a6()}, +am(b1,b2){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,a2,a3,a4,a5,a6,a7,a8=this,a9=a8.a,b0=a9.gl(a9) +switch(a8.y2.a){case 0:s=1-b0 +break +case 1:s=b0 +break +default:s=null}a9=a8.b.a +if(!(a9.gb6(a9)===B.aX&&!a8.a9?a8.a9=!0:a8.a9=!1)){a9=a8.b +if(a9.gb6(a9)===B.a7){a9=a8.k2 +a9.toString +r=a8.k3 +r.toString +q=a8.b +a8.X=A.P(a9,r,q.gl(q)) +q=a8.k1 +q.toString +r=a8.k3 +r.toString +a9=a8.b +a8.aq=A.P(q,r,a9.gl(a9))}if(b0===0){a9=a8.k2 +a9.toString +r=a8.k3 +r.toString +q=a8.b +a8.X=A.P(a9,r,q.gl(q)) +q=a8.k1 +q.toString +a8.aq=q}if(b0===1){a9=a8.k1 +a9.toString +r=a8.k3 +r.toString +q=a8.b +a8.aq=A.P(a9,r,q.gl(q)) +q=a8.k2 +q.toString +a8.X=q}}a9=a8.X +if(a9==null){a9=a8.k2 +a9.toString}a9*=2 +r=a8.aq +if(r==null){r=a8.k1 +r.toString}r*=2 +r=new A.aB5(a8,new A.G(a9,a9),new A.G(r,r)) +a9=a8.b +if(a9.gb6(a9)===B.a7){a9=a8.k3 +a9.toString +a9*=2 +p=new A.G(a9,a9)}else{a9=a8.a +if(a9.gb6(a9)!==B.K){a9=a8.a.a +a9=a9.gb6(a9)===B.aW}else a9=!0 +if(a9){a9=r.$1(!0) +r=a9.b +a9=a9.a +p=r.a2(0,a9.gl(a9))}else{a9=r.$1(!1) +r=a9.b +a9=a9.a +p=r.a2(0,a9.gl(a9))}}a9=a8.k4 +o=a9==null?0:1-Math.abs(b0-a9)*2 +a9=p.a-o +r=p.b-o +q=a8.db +q.toString +q=A.dc(B.dD,q,B.cs) +n=q.gl(q) +q=a8.xr +q.toString +m=a8.rx +m.toString +m=A.y(q,m,n) +m.toString +q=a8.to +l=q==null?null:A.y(q,a8.ry,n) +k=A.P(a8.x2,a8.x1,n) +q=a8.b +if(q.gb6(q)!==B.K){q=a8.id +q.toString +j=a8.go +j.toString +j=A.y(q,j,n) +j.toString +i=j}else{q=a8.db.Q +q===$&&A.b() +if(q===B.aW){q=a8.id +q.toString +j=a8.e +j.toString +j=A.y(q,j,n) +j.toString +i=j}else{j=a8.f +if(q===B.aX){j.toString +q=a8.go +q.toString +q=A.y(j,q,n) +q.toString +i=q}else{j.toString +q=a8.e +q.toString +q=A.y(j,q,n) +q.toString +i=q}}}q=a8.aL +q.toString +h=A.a9D(i,q) +q=b0<0.5 +g=q?a8.dy:a8.dx +f=q?a8.R8:a8.p3 +e=q?a8.RG:a8.p4 +q=$.W() +d=q.aj() +d.sM(0,m) +m=a8.p2 +m.toString +j=a8.p1 +j.toString +c=(b2.a-m)/2 +b=b2.b +a=(b-j)/2 +a0=j/2 +a1=r/2 +a2=a1-a0 +a3=a8.aM +a3.toString +a4=c-a2-(a9-r)/2+s*a3 +b1.bQ(A.lH(new A.w(c,a,c+m,a+j),new A.aC(a0,a0)),d) +if(l!=null){m=c+1 +j=a+1 +a3=a8.p2 +a3.toString +a5=a8.p1 +a5.toString +a6=A.lH(new A.w(m,j,m+(a3-2),j+(a5-2)),new A.aC(a0,a0)) +a7=q.aj() +a7.saG(0,B.D) +a7.sbs(k==null?2:k) +a7.sM(0,l) +b1.bQ(a6,a7)}a8.Yp(b1,new A.k(a4+a1,b/2)) +a8.afZ(new A.k(a4,a-a2),b1,n,h,f,e,g,new A.G(a9,r),o)}, +afZ(a,b,c,d,e,f,g,h,i){var s,r,q=this +try{q.F=!0 +if(q.B!=null)if(d.j(0,q.bq))r=!1 +else r=!0 +else r=!0 +if(r){q.bq=d +q.bZ=e +q.bt=f +r=q.B +if(r!=null)r.m() +q.B=A.b22(new A.i8(d,null,null,q.aJ,B.AG),q.gabr())}r=q.B +r.toString +s=r +s.ee(b,a,q.y1.Vj(h))}finally{q.F=!1}}, +m(){var s=this,r=s.B +if(r!=null)r.m() +s.bt=s.bZ=s.bq=s.B=null +s.a4a()}} +A.aB5.prototype={ +$1(a){var s,r=this.b,q=this.a,p=this.c,o=t.q6,n=t.qU,m=t.kS,l=t.Bx,k=q.ok,j=n.h("e3") +if(a){k.toString +s=A.a([new A.ig(new A.e3(new A.fv(B.o5),new A.ar(r,k,n),j),11,m),new A.ig(new A.e3(new A.fv(B.o4),new A.ar(k,p,n),j),72,m),new A.ig(new A.vM(p,p,l),17,m)],o)}else{k.toString +s=A.a([new A.ig(new A.vM(r,r,l),17,m),new A.ig(new A.e3(new A.fv(new A.mP(B.o4)),new A.ar(r,k,n),j),72,m),new A.ig(new A.e3(new A.fv(new A.mP(B.o5)),new A.ar(k,p,n),j),11,m)],o)}r=A.aNL(s,t.FW) +q=q.db +q.toString +return new A.aP(q,r,r.$ti.h("aP"))}, +$S:360} +A.aAZ.prototype={} +A.aB0.prototype={ +gd3(){var s,r=this,q=r.z +if(q===$){s=A.ak(r.y) +r.z!==$&&A.ay() +q=r.z=s.ax}return q}, +ghI(){return new A.bB(new A.aB2(this),t.h2)}, +gm1(){return new A.bB(new A.aB3(this),t.h2)}, +gwK(){return new A.bB(new A.aB4(this),t.V)}, +gcr(){return new A.bB(new A.aB1(this),t.V)}, +grO(){return B.TP}, +ghq(){return 20}} +A.aB2.prototype={ +$1(a){var s,r,q=this +if(a.p(0,B.P)){if(a.p(0,B.G)){s=q.a.gd3().cy.a +return A.C(255,s>>>16&255,s>>>8&255,s&255)}s=q.a.gd3().db.a +return A.C(97,s>>>16&255,s>>>8&255,s&255)}if(a.p(0,B.G)){if(a.p(0,B.L)){s=q.a.gd3() +r=s.d +return r==null?s.b:r}if(a.p(0,B.I)){s=q.a.gd3() +r=s.d +return r==null?s.b:r}if(a.p(0,B.N)){s=q.a.gd3() +r=s.d +return r==null?s.b:r}return q.a.gd3().c}if(a.p(0,B.L)){s=q.a.gd3() +r=s.dy +return r==null?s.db:r}if(a.p(0,B.I)){s=q.a.gd3() +r=s.dy +return r==null?s.db:r}if(a.p(0,B.N)){s=q.a.gd3() +r=s.dy +return r==null?s.db:r}s=q.a.gd3() +r=s.fr +return r==null?s.cx:r}, +$S:7} +A.aB3.prototype={ +$1(a){var s,r,q=this +if(a.p(0,B.P)){if(a.p(0,B.G)){s=q.a.gd3().db.a +return A.C(31,s>>>16&255,s>>>8&255,s&255)}s=q.a.gd3() +r=s.dx +s=(r==null?s.cy:r).a +return A.C(31,s>>>16&255,s>>>8&255,s&255)}if(a.p(0,B.G)){if(a.p(0,B.L))return q.a.gd3().b +if(a.p(0,B.I))return q.a.gd3().b +if(a.p(0,B.N))return q.a.gd3().b +return q.a.gd3().b}if(a.p(0,B.L)){s=q.a.gd3() +r=s.dx +return r==null?s.cy:r}if(a.p(0,B.I)){s=q.a.gd3() +r=s.dx +return r==null?s.cy:r}if(a.p(0,B.N)){s=q.a.gd3() +r=s.dx +return r==null?s.cy:r}s=q.a.gd3() +r=s.dx +return r==null?s.cy:r}, +$S:7} +A.aB4.prototype={ +$1(a){var s,r +if(a.p(0,B.G))return B.n +if(a.p(0,B.P)){s=this.a.gd3().db.a +return A.C(31,s>>>16&255,s>>>8&255,s&255)}s=this.a.gd3() +r=s.fr +return r==null?s.cx:r}, +$S:7} +A.aB1.prototype={ +$1(a){var s,r=this +if(a.p(0,B.G)){if(a.p(0,B.L)){s=r.a.gd3().b +return A.C(31,s.gl(s)>>>16&255,s.gl(s)>>>8&255,s.gl(s)&255)}if(a.p(0,B.I)){s=r.a.gd3().b +return A.C(20,s.gl(s)>>>16&255,s.gl(s)>>>8&255,s.gl(s)&255)}if(a.p(0,B.N)){s=r.a.gd3().b +return A.C(31,s.gl(s)>>>16&255,s.gl(s)>>>8&255,s.gl(s)&255)}return null}if(a.p(0,B.L)){s=r.a.gd3().db.a +return A.C(31,s>>>16&255,s>>>8&255,s&255)}if(a.p(0,B.I)){s=r.a.gd3().db.a +return A.C(20,s>>>16&255,s>>>8&255,s&255)}if(a.p(0,B.N)){s=r.a.gd3().db.a +return A.C(31,s>>>16&255,s>>>8&255,s&255)}return null}, +$S:45} +A.a2J.prototype={ +gH2(){return 12}, +gXh(){return new A.bB(new A.aB_(this),t.h2)}, +gJ6(){return 8}, +gK3(){return 14}, +ga67(){return 48}, +ga68(){return 40}, +gMF(){return 60}, +gKr(){return B.Qv}, +gKC(){return 32}, +gKD(){return 52}, +gKE(){return B.XW}, +gavx(){return 300}, +gKq(){return null}} +A.aB_.prototype={ +$1(a){var s,r,q=this +if(a.p(0,B.P)){if(a.p(0,B.G)){s=q.a.b.db.a +return A.C(97,s>>>16&255,s>>>8&255,s&255)}s=q.a.b +r=s.dx +s=(r==null?s.cy:r).a +return A.C(97,s>>>16&255,s>>>8&255,s&255)}if(a.p(0,B.G)){if(a.p(0,B.L)){s=q.a.b +r=s.e +return r==null?s.c:r}if(a.p(0,B.I)){s=q.a.b +r=s.e +return r==null?s.c:r}if(a.p(0,B.N)){s=q.a.b +r=s.e +return r==null?s.c:r}s=q.a.b +r=s.e +return r==null?s.c:r}if(a.p(0,B.L)){s=q.a.b +r=s.dx +return r==null?s.cy:r}if(a.p(0,B.I)){s=q.a.b +r=s.dx +return r==null?s.cy:r}if(a.p(0,B.N)){s=q.a.b +r=s.dx +return r==null?s.cy:r}s=q.a.b +r=s.dx +return r==null?s.cy:r}, +$S:7} +A.KM.prototype={ +bY(){this.dq() +this.cW() +this.f2()}, +m(){var s=this,r=s.b9$ +if(r!=null)r.K(0,s.geM()) +s.b9$=null +s.aN()}} +A.KN.prototype={ +aB(){var s,r=this,q=null +r.aR() +s=A.c5(q,B.am,q,!r.a.c?0:1,r) +r.kB$=s +r.kC$=A.dc(B.cs,s,B.dD) +s=A.c5(q,B.aD,q,q,r) +r.lA$=s +r.vy$=A.dc(B.ar,s,q) +s=A.c5(q,B.eq,q,r.n1$||r.n0$?1:0,r) +r.r6$=s +r.vz$=A.dc(B.ar,s,q) +s=A.c5(q,B.eq,q,r.n1$||r.n0$?1:0,r) +r.r7$=s +r.vA$=A.dc(B.ar,s,q)}, +m(){var s=this,r=s.kB$ +r===$&&A.b() +r.m() +r=s.lA$ +r===$&&A.b() +r.m() +r=s.r6$ +r===$&&A.b() +r.m() +r=s.r7$ +r===$&&A.b() +r.m() +s.a5N()}} +A.a55.prototype={} +A.yc.prototype={ +gt(a){var s=this +return A.N(s.ghI(),s.gm1(),s.gwK(),s.grO(),s.glL(),s.ghh(),s.gcr(),s.ghq(),s.x,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +if(J.U(b)!==A.t(s))return!1 +return b instanceof A.yc&&b.ghI()==s.ghI()&&b.gm1()==s.gm1()&&b.gwK()==s.gwK()&&b.grO()==s.grO()&&b.glL()==s.glL()&&b.ghh()==s.ghh()&&b.gcr()==s.gcr()&&b.ghq()==s.ghq()&&!0}, +ghI(){return this.a}, +gm1(){return this.b}, +gwK(){return this.c}, +grO(){return this.d}, +glL(){return this.e}, +ghh(){return this.f}, +gcr(){return this.r}, +ghq(){return this.w}} +A.a2K.prototype={} +A.FY.prototype={ +gt(a){var s=this +return A.N(s.a,s.b,s.c,s.d,s.e,s.f,s.r,s.w,s.x,s.y,s.z,s.Q,s.as,s.at,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a,b){var s,r=this +if(b==null)return!1 +if(r===b)return!0 +if(J.U(b)!==A.t(r))return!1 +if(b instanceof A.FY)if(J.d(b.a,r.a))if(J.d(b.b,r.b))if(J.d(b.d,r.d))if(J.d(b.f,r.f))if(J.d(b.r,r.r))if(J.d(b.w,r.w))if(J.d(b.x,r.x))if(J.d(b.y,r.y))if(b.z==r.z)s=!0 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +return s}} +A.a2N.prototype={} +A.Ut.prototype={ +VW(a){var s=null +A.ak(a) +A.ak(a) +return new A.a2V(a,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,B.am,!0,B.ah,s)}, +ZC(a){var s +a.ap(t.if) +s=A.ak(a) +return s.f6.a}} +A.JZ.prototype={ +U(a){if(a.p(0,B.P))return this.b +return this.a}, +k(a){return"{disabled: "+A.h(this.b)+", otherwise: "+A.h(this.a)+"}"}} +A.a2U.prototype={ +U(a){var s +if(a.p(0,B.L)){s=this.a +return A.C(31,s.gl(s)>>>16&255,s.gl(s)>>>8&255,s.gl(s)&255)}if(a.p(0,B.I)){s=this.a +return A.C(10,s.gl(s)>>>16&255,s.gl(s)>>>8&255,s.gl(s)&255)}if(a.p(0,B.N)){s=this.a +return A.C(31,s.gl(s)>>>16&255,s.gl(s)>>>8&255,s.gl(s)&255)}return null}, +k(a){var s=this.a +return"{hovered: "+A.C(10,s.gl(s)>>>16&255,s.gl(s)>>>8&255,s.gl(s)&255).k(0)+", focused,pressed: "+A.C(31,s.gl(s)>>>16&255,s.gl(s)>>>8&255,s.gl(s)&255).k(0)+", otherwise: null}"}} +A.a2T.prototype={ +U(a){if(a.p(0,B.P))return this.b +return this.a}} +A.a2V.prototype={ +gur(){var s,r=this,q=r.fr +if(q===$){s=A.ak(r.dy) +r.fr!==$&&A.ay() +q=r.fr=s.ax}return q}, +gjj(){return new A.cr(A.ak(this.dy).p3.as,t.hs)}, +gcA(a){return B.bF}, +ge2(){return new A.bB(new A.aB9(this),t.V)}, +gcr(){return new A.bB(new A.aBb(this),t.V)}, +gcF(a){return B.bF}, +gdi(){return B.bF}, +gfq(a){return B.eT}, +gdn(a){return new A.cr(A.b4m(this.dy),t.Ak)}, +gk_(){return B.TR}, +gjY(){return B.eV}, +gbV(a){return B.eU}, +ghh(){return new A.bB(new A.aBa(),t.Y6)}, +gfB(){return A.ak(this.dy).z}, +gkb(){return A.ak(this.dy).e}, +gjs(){return A.ak(this.dy).x}} +A.aB9.prototype={ +$1(a){var s +if(a.p(0,B.P)){s=this.a.gur().db.a +return A.C(97,s>>>16&255,s>>>8&255,s&255)}return this.a.gur().b}, +$S:7} +A.aBb.prototype={ +$1(a){var s +if(a.p(0,B.L)){s=this.a.gur().b +return A.C(31,s.gl(s)>>>16&255,s.gl(s)>>>8&255,s.gl(s)&255)}if(a.p(0,B.I)){s=this.a.gur().b +return A.C(20,s.gl(s)>>>16&255,s.gl(s)>>>8&255,s.gl(s)&255)}if(a.p(0,B.N)){s=this.a.gur().b +return A.C(31,s.gl(s)>>>16&255,s.gl(s)>>>8&255,s.gl(s)&255)}return null}, +$S:45} +A.aBa.prototype={ +$1(a){if(a.p(0,B.P))return B.bK +return B.c0}, +$S:64} +A.a56.prototype={} +A.G7.prototype={ +gt(a){return J.D(this.a)}, +j(a,b){if(b==null)return!1 +if(this===b)return!0 +if(J.U(b)!==A.t(this))return!1 +return b instanceof A.G7&&J.d(b.a,this.a)}} +A.a2W.prototype={} +A.Qk.prototype={} +A.ahz.prototype={ +rX(a){return B.XV}, +zW(a,b,c,d){var s,r,q,p=null,o=A.ak(a) +a.ap(t.bZ) +s=A.ak(a) +r=s.dO.c +if(r==null)r=o.ax.b +q=A.eC(A.mE(A.hn(B.cf,p,B.af,!1,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,d,p,p,p),p,p,new A.a3_(r,p),B.Q),22,22) +switch(b.a){case 0:return A.aHe(1.5707963267948966,q) +case 1:return q +case 2:return A.aHe(0.7853981633974483,q)}}, +rW(a,b){switch(a.a){case 0:return B.UI +case 1:return B.e +case 2:return B.UD}}} +A.a3_.prototype={ +am(a,b){var s,r,q,p,o=$.W(),n=o.aj() +n.sM(0,this.b) +s=b.a/2 +r=A.hv(new A.k(s,s),s) +q=0+s +p=o.bD() +p.kr(r) +p.jA(new A.w(0,0,q,q)) +a.bP(p,n)}, +eX(a){return!this.b.j(0,a.b)}} +A.ZR.prototype={} +A.Gk.prototype={ +gt(a){return A.N(this.a,this.b,this.c,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +if(J.U(b)!==A.t(s))return!1 +return b instanceof A.Gk&&J.d(b.a,s.a)&&J.d(b.b,s.b)&&J.d(b.c,s.c)}} +A.a31.prototype={} +A.UE.prototype={ +H(a){var s=this.c.Y(0,B.UC),r=this.d.R(0,B.Uz),q=A.bt(a,B.b1,t.w).w.r.b+8,p=44<=s.b-8-q,o=new A.k(8,q) +return new A.bH(new A.aG(8,q,8,8),new A.mF(new A.UF(s.Y(0,o),r.Y(0,o),p),new A.K3(this.e,p,A.b87(),null),null),null)}} +A.K3.prototype={ +ac(){return new A.a36(new A.pU(),null,null,B.j)}, +avA(a,b){return this.e.$2(a,b)}} +A.a36.prototype={ +aO(a){var s=this +s.bb(a) +if(!A.dn(s.a.c,a.c)){s.e=new A.pU() +s.d=!1}}, +H(a){var s,r,q,p,o,n,m,l,k=this,j=null +A.n7(a,B.ck,t.c4).toString +s=k.e +r=k.d +q=a.ap(t.I) +q.toString +p=k.a +o=p.d +n=k.d +m=A.Ct(n?B.p0:B.NL,j,j,j) +l=n?"Back":"More" +l=A.a([new A.a35(m,new A.aBt(k),l,j)],t.p) +B.b.E(l,k.a.c) +return new A.a37(r,q.w,A.aJz(p.avA(a,new A.a33(o,n,l,j)),B.ae,B.Le),s)}} +A.aBt.prototype={ +$0(){var s=this.a +s.a3(new A.aBs(s))}, +$S:0} +A.aBs.prototype={ +$0(){var s=this.a +s.d=!s.d}, +$S:0} +A.a37.prototype={ +az(a){var s=new A.a38(this.e,this.f,null,A.ag(t.T)) +s.aw() +s.saP(null) +return s}, +aF(a,b){b.sJW(this.e) +b.sbS(this.f)}} +A.a38.prototype={ +sJW(a){if(a===this.a1)return +this.a1=a +this.a8()}, +sbS(a){if(a===this.al)return +this.al=a +this.a8()}, +bA(){var s,r,q=this,p=q.fr$ +p.toString +s=t.k +r=s.a(A.r.prototype.gW.call(q)) +p.bJ(new A.az(0,r.b,0,r.d),!0) +if(!q.a1&&q.A==null){p=q.fr$ +q.A=p.gv(p).a}p=s.a(A.r.prototype.gW.call(q)) +s=q.A +if(s!=null){s=q.fr$ +s=s.gv(s) +r=q.A +r.toString +s=s.a>r}else{r=s +s=!0}if(s){s=q.fr$ +s=s.gv(s).a}else{r.toString +s=r}r=q.fr$ +q.id=p.bf(new A.G(s,r.gv(r).b)) +r=q.fr$.b +r.toString +t.U.a(r) +if(q.al===B.Z)p=0 +else{p=q.gv(q) +s=q.fr$ +s=p.a-s.gv(s).a +p=s}r.a=new A.k(p,0)}, +am(a,b){var s=this.fr$,r=s.b +r.toString +a.ef(s,t.U.a(r).a.R(0,b))}, +cE(a,b){var s=this.fr$.b +s.toString +t.U.a(s) +return a.mD(new A.aBu(this,b,s),s.a,b)}, +ew(a){if(!(a.b instanceof A.h_))a.b=new A.h_(null,null,B.e)}, +dj(a,b){var s=a.b +s.toString +s=t.U.a(s).a +b.au(0,s.a,s.b) +this.a3q(a,b)}} +A.aBu.prototype={ +$2(a,b){return this.a.fr$.cD(a,b)}, +$S:17} +A.a33.prototype={ +az(a){var s=new A.a19(this.e,this.f,0,null,null,A.ag(t.T)) +s.aw() +return s}, +aF(a,b){b.srl(this.e) +b.sJW(this.f)}, +bI(a){return new A.a34(A.ds(t.h),this,B.a0)}} +A.a34.prototype={} +A.a19.prototype={ +srl(a){if(a===this.F)return +this.F=a +this.a8()}, +sJW(a){if(a===this.a9)return +this.a9=a +this.a8()}, +aeh(){var s,r=this,q={},p=t.k,o=r.a9?p.a(A.r.prototype.gW.call(r)):A.a7R(new A.G(p.a(A.r.prototype.gW.call(r)).b,44)) +q.a=-1 +q.b=0 +r.b1(new A.azw(q,r,o)) +p=r.a4$ +p.toString +s=r.B +if(s!==-1&&s===r.e_$-2&&q.b-p.gv(p).a<=o.b)r.B=-1}, +Sg(a,b){var s,r=this +if(a===r.a4$)return r.B!==-1 +s=r.B +if(s===-1)return!0 +return b>s===r.a9}, +agA(){var s,r,q,p,o=this,n={} +n.a=-1 +n.b=B.Q +n.c=0 +s=o.a4$ +s.toString +n.d=o.a9&&!o.F?s.gv(s).b:0 +o.b1(new A.azx(n,o,s)) +r=s.b +r.toString +t.U.a(r) +q=o.a4$ +q.toString +if(o.Sg(q,0)){r.e=!0 +if(o.a9){q=o.F +r.a=q?new A.k(0,n.d):B.e +r=n.b +p=r.b +s=q?p+s.gv(s).b:p +n.b=new A.G(r.a,s)}else{r.a=new A.k(n.c,0) +n.b=new A.G(n.b.a+s.gv(s).a,n.b.b)}}else r.e=!1 +o.id=n.b}, +bA(){var s,r=this +r.B=-1 +if(r.a4$==null){s=t.k.a(A.r.prototype.gW.call(r)) +r.id=new A.G(A.O(0,s.a,s.b),A.O(0,s.c,s.d)) +return}r.aeh() +r.agA()}, +am(a,b){this.b1(new A.azz(a,b))}, +ew(a){if(!(a.b instanceof A.h_))a.b=new A.h_(null,null,B.e)}, +cE(a,b){var s,r,q={},p=q.a=this.d8$ +for(s=t.U;p!=null;){p=p.b +p.toString +s.a(p) +if(!p.e){r=p.ci$ +q.a=r +p=r +continue}if(a.mD(new A.azy(q,b,p),p.a,b))return!0 +r=p.ci$ +q.a=r +p=r}return!1}, +fX(a){this.b1(new A.azA(a))}} +A.azw.prototype={ +$1(a){var s,r,q,p,o=this.a;++o.a +s=this.b +if(s.B!==-1&&!s.a9)return +t.x.a(a) +r=this.c +q=r.b +a.bJ(new A.az(0,q,0,r.d),!0) +p=o.b+a.gv(a).a +o.b=p +if(p>q&&s.B===-1)s.B=o.a-1}, +$S:15} +A.azx.prototype={ +$1(a){var s,r,q,p=this.a,o=++p.a +t.x.a(a) +s=a.b +s.toString +t.U.a(s) +if(a===this.c)return +r=this.b +if(!r.Sg(a,o)){s.e=!1 +return}s.e=!0 +if(!r.a9){o=p.c +s.a=new A.k(o,0) +q=o+a.gv(a).a +p.c=q +p.b=new A.G(q,Math.max(a.gv(a).b,p.b.b))}else{o=p.d +s.a=new A.k(0,o) +p.d=o+a.gv(a).b +p.b=new A.G(Math.max(a.gv(a).a,p.b.a),p.d)}}, +$S:15} +A.azz.prototype={ +$1(a){var s +t.x.a(a) +s=a.b +s.toString +t.U.a(s) +if(!s.e)return +this.a.ef(a,s.a.R(0,this.b))}, +$S:15} +A.azy.prototype={ +$2(a,b){return this.a.a.cD(a,b)}, +$S:17} +A.azA.prototype={ +$1(a){var s +t.x.a(a) +s=a.b +s.toString +if(t.U.a(s).e)this.a.$1(a)}, +$S:15} +A.a32.prototype={ +H(a){var s=null +return A.p9(B.am,B.CQ,this.c,B.dz,A.b25(A.ak(a).ax),1,s,s,s,s,s,B.hT)}} +A.a35.prototype={ +H(a){var s=null +return A.p9(B.am,s,A.Cu(s,this.c,this.d,s,this.e),B.o,B.n,0,s,s,s,s,s,B.hT)}} +A.a4V.prototype={ +ah(a){var s,r,q +this.dg(a) +s=this.a4$ +for(r=t.U;s!=null;){s.ah(a) +q=s.b +q.toString +s=r.a(q).ak$}}, +ad(a){var s,r,q +this.dh(0) +s=this.a4$ +for(r=t.U;s!=null;){s.ad(0) +q=s.b +q.toString +s=r.a(q).ak$}}} +A.a57.prototype={ +bY(){this.dq() +this.cW() +this.f2()}, +m(){var s=this,r=s.b9$ +if(r!=null)r.K(0,s.geM()) +s.b9$=null +s.aN()}} +A.zB.prototype={ +I(){return"_TextSelectionToolbarItemPosition."+this.b}} +A.UG.prototype={ +H(a){var s=null +return A.G6(this.c,this.d,A.aNv(s,s,B.n,s,s,s,s,s,s,A.b0l(A.ak(a).ax),s,B.Ax,this.e,s,B.lp,s,s,B.B7,s))}} +A.dM.prototype={ +cl(b3){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,b0,b1=this,b2=null +if(b3==null)return b1 +s=b1.a +r=s==null?b2:s.cl(b3.a) +if(r==null)r=b3.a +q=b1.b +p=q==null?b2:q.cl(b3.b) +if(p==null)p=b3.b +o=b1.c +n=o==null?b2:o.cl(b3.c) +if(n==null)n=b3.c +m=b1.d +l=m==null?b2:m.cl(b3.d) +if(l==null)l=b3.d +k=b1.e +j=k==null?b2:k.cl(b3.e) +if(j==null)j=b3.e +i=b1.f +h=i==null?b2:i.cl(b3.f) +if(h==null)h=b3.f +g=b1.r +f=g==null?b2:g.cl(b3.r) +if(f==null)f=b3.r +e=b1.w +d=e==null?b2:e.cl(b3.w) +if(d==null)d=b3.w +c=b1.x +b=c==null?b2:c.cl(b3.x) +if(b==null)b=b3.x +a=b1.y +a0=a==null?b2:a.cl(b3.y) +if(a0==null)a0=b3.y +a1=b1.z +a2=a1==null?b2:a1.cl(b3.z) +if(a2==null)a2=b3.z +a3=b1.Q +a4=a3==null?b2:a3.cl(b3.Q) +if(a4==null)a4=b3.Q +a5=b1.as +a6=a5==null?b2:a5.cl(b3.as) +if(a6==null)a6=b3.as +a7=b1.at +a8=a7==null?b2:a7.cl(b3.at) +if(a8==null)a8=b3.at +a9=b1.ax +b0=a9==null?b2:a9.cl(b3.ax) +if(b0==null)b0=b3.ax +if(r==null)r=b2 +s=r==null?s:r +r=p==null?b2:p +if(r==null)r=q +q=n==null?b2:n +if(q==null)q=o +p=l==null?m:l +o=j==null?b2:j +if(o==null)o=k +n=h==null?b2:h +if(n==null)n=i +m=f==null?b2:f +if(m==null)m=g +l=d==null?b2:d +if(l==null)l=e +k=b==null?b2:b +if(k==null)k=c +j=a0==null?b2:a0 +if(j==null)j=a +i=a2==null?b2:a2 +if(i==null)i=a1 +h=a4==null?b2:a4 +if(h==null)h=a3 +g=a6==null?b2:a6 +if(g==null)g=a5 +f=a8==null?a7:a8 +e=b0==null?b2:b0 +return A.ar0(j,i,h,s,r,q,p,o,n,g,f,e==null?a9:e,m,l,k)}, +Um(a,b,a0,a1,a2,a3){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e=this,d=null,c=e.a +c=c==null?d:c.h4(a0,d,b,d,a1,a2,0,1,a3) +s=e.b +s=s==null?d:s.h4(a0,d,b,d,a1,a2,0,1,a3) +r=e.c +r=r==null?d:r.h4(a0,d,b,d,a1,a2,0,1,a3) +q=e.d +q=q==null?d:q.h4(a0,d,b,d,a1,a2,0,1,a3) +p=e.e +p=p==null?d:p.h4(a0,d,b,d,a1,a2,0,1,a3) +o=e.f +o=o==null?d:o.h4(a,d,b,d,a1,a2,0,1,a3) +n=e.r +n=n==null?d:n.h4(a,d,b,d,a1,a2,0,1,a3) +m=e.w +m=m==null?d:m.h4(a,d,b,d,a1,a2,0,1,a3) +l=e.x +l=l==null?d:l.h4(a,d,b,d,a1,a2,0,1,a3) +k=e.y +k=k==null?d:k.h4(a,d,b,d,a1,a2,0,1,a3) +j=e.z +j=j==null?d:j.h4(a,d,b,d,a1,a2,0,1,a3) +i=e.Q +i=i==null?d:i.h4(a0,d,b,d,a1,a2,0,1,a3) +h=e.as +h=h==null?d:h.h4(a,d,b,d,a1,a2,0,1,a3) +g=e.at +g=g==null?d:g.h4(a,d,b,d,a1,a2,0,1,a3) +f=e.ax +return A.ar0(k,j,i,c,s,r,q,p,o,h,g,f==null?d:f.h4(a,d,b,d,a1,a2,0,1,a3),n,m,l)}, +ale(a){return this.Um(a,null,null,null,null,null)}, +Ul(a,b,c){return this.Um(a,b,c,null,null,null)}, +j(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +if(J.U(b)!==A.t(s))return!1 +return b instanceof A.dM&&J.d(s.a,b.a)&&J.d(s.b,b.b)&&J.d(s.c,b.c)&&J.d(s.d,b.d)&&J.d(s.e,b.e)&&J.d(s.f,b.f)&&J.d(s.r,b.r)&&J.d(s.w,b.w)&&J.d(s.x,b.x)&&J.d(s.y,b.y)&&J.d(s.z,b.z)&&J.d(s.Q,b.Q)&&J.d(s.as,b.as)&&J.d(s.at,b.at)&&J.d(s.ax,b.ax)}, +gt(a){var s=this +return A.N(s.a,s.b,s.c,s.d,s.e,s.f,s.r,s.w,s.x,s.y,s.z,s.Q,s.as,s.at,s.ax,B.a,B.a,B.a,B.a,B.a)}} +A.a3b.prototype={} +A.Gm.prototype={ +H(a){var s,r,q=null,p=this.c,o=B.ct.a,n=B.ct.b,m=B.ct.c,l=B.ct.d,k=B.ct.e,j=B.ct.f,i=B.ct.r,h=a.ap(t.Uf) +if(h==null)h=B.em +s=p.dO +r=s.b +if(r==null)r=h.x +s=s.a +h=s==null?h.w:s +return new A.I6(this,new A.Nt(new A.Qe(p,new A.Dz(o,n,m,l,k,j,i),B.mo,o,n,m,l,k,j,i),A.Pn(A.aae(this.d,h,q,q,r),p.ok,q),q),q)}} +A.I6.prototype={ +rS(a,b,c){return new A.Gm(this.w.c,c,null)}, +cs(a){return!this.w.c.j(0,a.w.c)}} +A.uu.prototype={ +d_(a){var s,r=this.a +r.toString +s=this.b +s.toString +return A.b0t(r,s,a)}} +A.Ab.prototype={ +ac(){return new A.VP(null,null,B.j)}} +A.VP.prototype={ +ij(a){var s=a.$3(this.CW,this.a.r,new A.asX()) +s.toString +this.CW=t.ZM.a(s)}, +H(a){var s,r=this.CW +r.toString +s=this.gds() +return new A.Gm(r.a2(0,s.gl(s)),this.a.w,null)}} +A.asX.prototype={ +$1(a){return new A.uu(t.we.a(a),null)}, +$S:361} +A.tj.prototype={ +I(){return"MaterialTapTargetSize."+this.b}} +A.jJ.prototype={ +j(a,b){var s,r,q=this +if(b==null)return!1 +if(J.U(b)!==A.t(q))return!1 +if(b instanceof A.jJ)if(b.a===q.a)if(A.aEi(b.c,q.c))if(b.d.j(0,q.d))if(b.e===q.e)if(b.f.j(0,q.f))if(b.r===q.r)if(b.w.j(0,q.w))if(b.x===q.x)if(b.z.j(0,q.z))if(b.as.j(0,q.as))if(b.at.j(0,q.at))if(b.ax.j(0,q.ax))if(b.ay.j(0,q.ay))if(b.ch.j(0,q.ch))if(b.CW.j(0,q.CW))if(b.cx.j(0,q.cx))if(b.cy.j(0,q.cy))if(b.db.j(0,q.db))if(b.dx.j(0,q.dx))if(b.dy.j(0,q.dy))if(b.fr.j(0,q.fr))if(b.fx.j(0,q.fx))if(b.fy.j(0,q.fy))if(b.go.j(0,q.go))if(b.id.j(0,q.id))if(b.k2.j(0,q.k2))if(b.k3.j(0,q.k3))if(b.k4.j(0,q.k4))if(b.ok.j(0,q.ok))if(b.p1.j(0,q.p1))if(b.p2.j(0,q.p2))if(b.p3.j(0,q.p3))if(b.p4.j(0,q.p4))if(J.d(b.R8,q.R8))if(b.RG.j(0,q.RG))if(b.rx.j(0,q.rx))if(b.ry.j(0,q.ry))if(b.to.j(0,q.to))if(b.x1.j(0,q.x1))if(b.x2.j(0,q.x2))if(b.xr.j(0,q.xr))if(b.y1.j(0,q.y1))if(b.y2.j(0,q.y2))if(b.aL.j(0,q.aL))if(b.bG.j(0,q.bG))if(b.aM.j(0,q.aM))if(b.aJ.j(0,q.aJ))if(b.bq.j(0,q.bq))if(b.bZ.j(0,q.bZ))if(b.bt.j(0,q.bt))if(b.B.j(0,q.B))if(b.F.j(0,q.F))if(b.a9.j(0,q.a9))if(b.X.j(0,q.X))if(b.aq.j(0,q.aq))if(b.aH.j(0,q.aH))if(b.aD.j(0,q.aD))if(b.aE.j(0,q.aE))if(b.bj.j(0,q.bj))if(b.bM.j(0,q.bM))if(b.bc.j(0,q.bc))if(b.cY.j(0,q.cY))if(b.cZ.j(0,q.cZ))if(b.d9.j(0,q.d9))if(b.eO.j(0,q.eO))if(b.eP.j(0,q.eP))if(b.cv.j(0,q.cv))if(b.dv.j(0,q.dv))if(b.av.j(0,q.av))if(b.cj.j(0,q.cj))if(b.e0.j(0,q.e0))if(b.bE.j(0,q.bE))if(b.cI.j(0,q.cI))if(b.hD.j(0,q.hD))if(b.f6.j(0,q.f6))if(b.dO.j(0,q.dO))if(b.hd.j(0,q.hd))if(b.jM.j(0,q.jM))if(b.bu.j(0,q.bu)){s=b.A +s.toString +r=q.A +r.toString +if(s.j(0,r)){s=b.k1 +s.toString +r=q.k1 +r.toString +if(s.j(0,r)){s=b.e1 +s.toString +r=q.e1 +r.toString +if(s.j(0,r)){s=b.es +s.toString +r=q.es +r.toString +if(s.j(0,r)){s=b.Q +s.toString +r=q.Q +r.toString +r=s.j(0,r) +s=r}else s=!1}else s=!1}else s=!1}else s=!1}else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +return s}, +gt(a){var s=this,r=[s.a,s.b],q=s.c +B.b.E(r,q.gc2(q)) +B.b.E(r,q.gaT(q)) +r.push(s.d) +r.push(s.e) +r.push(s.f) +r.push(s.r) +r.push(s.w) +r.push(s.x) +r.push(!0) +r.push(s.z) +r.push(s.as) +r.push(s.at) +r.push(s.ax) +r.push(s.ay) +r.push(s.ch) +r.push(s.CW) +r.push(s.cx) +r.push(s.cy) +r.push(s.db) +r.push(s.dx) +r.push(s.dy) +r.push(s.fr) +r.push(s.fx) +r.push(s.fy) +r.push(s.go) +r.push(s.id) +r.push(s.k2) +r.push(s.k3) +r.push(s.k4) +r.push(s.ok) +r.push(s.p1) +r.push(s.p2) +r.push(s.p3) +r.push(s.p4) +r.push(s.R8) +r.push(s.RG) +r.push(s.rx) +r.push(s.ry) +r.push(s.to) +r.push(s.x1) +r.push(s.x2) +r.push(s.xr) +r.push(s.y1) +r.push(s.y2) +r.push(s.aL) +r.push(s.bG) +r.push(s.aM) +r.push(s.aJ) +r.push(s.bq) +r.push(s.bZ) +r.push(s.bt) +r.push(s.B) +r.push(s.F) +r.push(s.a9) +r.push(s.X) +r.push(s.aq) +r.push(s.aH) +r.push(s.aD) +r.push(s.aE) +r.push(s.bj) +r.push(s.bM) +r.push(s.bc) +r.push(s.cY) +r.push(s.cZ) +r.push(s.d9) +r.push(s.eO) +r.push(s.eP) +r.push(s.cv) +r.push(s.dv) +r.push(s.av) +r.push(s.cj) +r.push(s.e0) +r.push(s.bE) +r.push(s.cI) +r.push(s.hD) +r.push(s.f6) +r.push(s.dO) +r.push(s.hd) +r.push(s.jM) +r.push(s.bu) +q=s.A +q.toString +r.push(q) +q=s.k1 +q.toString +r.push(q) +q=s.e1 +q.toString +r.push(q) +q=s.es +q.toString +r.push(q) +q=s.Q +q.toString +r.push(q) +return A.bv(r)}} +A.ar8.prototype={ +$0(){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,b0,b1=null,b2=this.a,b3=this.b,b4=b3.cl(b2.p2) +b3=b3.cl(b2.p3) +s=b2.ax +r=s.b +q=s.c +p=s.d +if(p==null)p=r +o=s.e +if(o==null)o=q +n=s.f +m=s.r +l=s.w +if(l==null)l=n +k=s.x +if(k==null)k=m +j=s.y +i=j==null?n:j +h=s.z +g=h==null?m:h +f=s.Q +if(f==null){if(j==null)j=n}else j=f +f=s.as +if(f==null){if(h==null)h=m}else h=f +f=s.at +e=s.ax +d=s.ay +if(d==null)d=f +c=s.ch +if(c==null)c=e +b=s.cx +a=s.cy +a0=s.db +a1=s.dx +if(a1==null)a1=a +a2=s.dy +if(a2==null)a2=a0 +a3=s.fr +if(a3==null)a3=b +a4=s.fx +if(a4==null)a4=b +a5=s.fy +if(a5==null)a5=B.k +a6=s.go +if(a6==null)a6=B.k +a7=s.id +if(a7==null)a7=a0 +a8=s.k1 +if(a8==null)a8=a +a9=s.k2 +if(a9==null)a9=q +b0=s.k3 +if(b0==null)b0=r +j=A.aFo(s.CW,s.a,f,d,a9,a7,b,e,c,a8,q,o,m,k,a0,a2,g,h,a3,a4,r,p,a6,n,l,a5,a,b0,a1,i,j) +return A.aH9(b2.R8,b2.RG,b2.a,b2.es,b2.rx,b2.ry,b2.Q,b2.to,b2.x1,b2.x2,b2.xr,b2.y1,b2.as,b2.at,b2.y2,b2.aL,b2.bG,j,b2.b,b2.aM,b2.aJ,b2.ay,b2.bq,b2.ch,b2.CW,b2.bZ,b2.bt,b2.B,b2.F,b2.e1,b2.a9,b2.c,b2.X,b2.aq,b2.cx,b2.cy,b2.db,b2.dx,b2.aH,b2.ok,b2.dy,b2.d,b2.aD,b2.e,b2.aE,b2.bj,b2.bM,b2.bc,b2.cY,b2.cZ,b2.d9,b2.f,b2.r,b2.eO,b2.fr,b2.fx,b2.fy,b2.p1,b4,b2.eP,b2.cv,b2.go,b2.w,b2.dv,b2.av,b2.id,b2.cj,b2.k1,b2.k2,b2.e0,b2.bE,b2.k3,b2.x,b2.cI,b2.hD,b2.f6,b2.dO,b3,b2.hd,b2.jM,b2.A,b2.bu,b2.p4,b2.k4,!0,b2.z)}, +$S:362} +A.ar5.prototype={ +$2(a,b){return new A.aH(a,b.awx(this.a.c.i(0,a),this.b),t.sw)}, +$S:363} +A.ar6.prototype={ +$1(a){return!this.a.c.ai(0,a.a)}, +$S:364} +A.Qe.prototype={ +gmE(){var s=this.ch.a +return s==null?this.ay.ax.a:s}, +ghk(){var s=this.ch.b +return s==null?this.ay.ax.b:s}, +gnm(){var s=this.ch.c +return s==null?this.ay.ax.c:s}, +gnx(){var s=this.ch.f +return s==null?this.ay.go:s}, +dS(a){return A.aYm(this.ay,this.ch.dS(a))}} +A.z3.prototype={ +gt(a){return(A.mo(this.a)^A.mo(this.b))>>>0}, +j(a,b){if(b==null)return!1 +return b instanceof A.z3&&b.a===this.a&&b.b===this.b}} +A.Y6.prototype={ +bm(a,b,c){var s,r=this.a,q=r.i(0,b) +if(q!=null)return q +if(r.a===this.b){s=new A.aX(r,A.o(r).h("aX<1>")) +r.C(0,s.gL(s))}s=c.$0() +r.n(0,b,s) +return s}} +A.nH.prototype={ +Wm(a){var s=this.a,r=this.b,q=A.O(a.a+new A.k(s,r).S(0,4).a,0,a.b) +return a.ano(A.O(a.c+new A.k(s,r).S(0,4).b,0,a.d),q)}, +j(a,b){if(b==null)return!1 +if(J.U(b)!==A.t(this))return!1 +return b instanceof A.nH&&b.a===this.a&&b.b===this.b}, +gt(a){return A.N(this.a,this.b,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +dd(){return this.a2i()+"(h: "+A.jU(this.a)+", v: "+A.jU(this.b)+")"}} +A.a3f.prototype={} +A.a45.prototype={} +A.Gr.prototype={ +gt(a){var s=this +return A.bv([s.a,s.b,s.c,s.d,s.e,s.f,s.r,s.w,s.x,s.y,s.z,s.Q,s.as,s.at,s.ax,s.ay,s.ch,s.CW,s.cx,s.cy,s.db,s.dx])}, +j(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +if(J.U(b)!==A.t(s))return!1 +return b instanceof A.Gr&&J.d(b.a,s.a)&&J.d(b.b,s.b)&&J.d(b.c,s.c)&&J.d(b.d,s.d)&&J.d(b.e,s.e)&&J.d(b.f,s.f)&&J.d(b.r,s.r)&&J.d(b.w,s.w)&&J.d(b.x,s.x)&&J.d(b.y,s.y)&&J.d(b.z,s.z)&&J.d(b.Q,s.Q)&&b.as==s.as&&J.d(b.at,s.at)&&J.d(b.ax,s.ax)&&J.d(b.ay,s.ay)&&J.d(b.ch,s.ch)&&J.d(b.CW,s.CW)&&J.d(b.cx,s.cx)&&J.d(b.db,s.db)&&J.d(b.dx,s.dx)}} +A.a3h.prototype={} +A.Gs.prototype={ +gt(a){var s=this +return A.N(s.a,s.b,s.c,s.d,s.e,s.f,s.r,s.w,s.y,s.x,s.z,s.Q,s.as,s.ax,s.at,B.a,B.a,B.a,B.a,B.a)}, +j(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +if(J.U(b)!==A.t(s))return!1 +return b instanceof A.Gs&&J.d(b.a,s.a)&&J.d(b.b,s.b)&&J.d(b.c,s.c)&&J.d(b.d,s.d)&&J.d(b.e,s.e)&&J.d(b.f,s.f)&&J.d(b.r,s.r)&&J.d(b.w,s.w)&&J.d(b.y,s.y)&&J.d(b.x,s.x)&&J.d(b.z,s.z)&&J.d(b.Q,s.Q)&&J.d(b.as,s.as)&&J.d(b.ax,s.ax)&&b.at==s.at}} +A.a3i.prototype={} +A.yp.prototype={ +zO(){var s,r,q=this +q.gKG() +s=q.gl(q) +r=q.kB$ +if(s){r===$&&A.b() +r.c7(0)}else{r===$&&A.b() +r.dc(0)}}, +ajq(a){var s,r=this +if(r.geT()!=null){r.a3(new A.ard(r,a)) +s=r.lA$ +s===$&&A.b() +s.c7(0)}}, +SY(a){var s,r=this +if(r.geT()==null)return +switch(r.gl(r)){case!1:r.geT().$1(!0) +break +case!0:s=r.geT() +s.toString +r.gKG() +s.$1(!1) +break +case null:case void 0:r.geT().$1(!1) +break}r.c.ga_().xl(B.AO)}, +ajo(){return this.SY(null)}, +PL(a){var s,r=this +if(r.ov$!=null)r.a3(new A.are(r)) +s=r.lA$ +s===$&&A.b() +s.dc(0)}, +adx(){return this.PL(null)}, +abT(a){var s,r=this +if(a!==r.n0$){r.a3(new A.arb(r,a)) +s=r.r7$ +if(a){s===$&&A.b() +s.c7(0)}else{s===$&&A.b() +s.dc(0)}}}, +ac0(a){var s,r=this +if(a!==r.n1$){r.a3(new A.arc(r,a)) +s=r.r6$ +if(a){s===$&&A.b() +s.c7(0)}else{s===$&&A.b() +s.dc(0)}}}, +gfF(){var s,r=this,q=A.aS(t.ui) +if(r.geT()==null)q.D(0,B.P) +if(r.n1$)q.D(0,B.I) +if(r.n0$)q.D(0,B.N) +s=r.gl(r) +if(s)q.D(0,B.G) +return q}, +UO(a,b,c,d,e,f){var s,r,q,p,o,n,m,l,k,j=this,i=null,h=j.AI$ +if(h===$){s=A.aY([B.Bj,new A.cT(j.gSX(),new A.b5(A.a([],t.g),t.c),t.wY)],t.u,t.od) +j.AI$!==$&&A.ay() +j.AI$=s +h=s}r=j.geT() +q=c.a.$1(j.gfF()) +p=j.geT() +o=j.geT()!=null?j.gajp():i +n=j.geT()!=null?j.gSX():i +m=j.geT()!=null?j.gPK():i +l=j.geT()!=null?j.gPK():i +k=j.geT() +return A.aL2(h,!1,A.hn(i,A.cH(i,i,A.mE(i,i,i,e,f),!1,k!=null,!1,!1,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i),B.af,p==null,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,n,l,o,m),r!=null,b,q,d,j.gabS(),j.gac_(),i)}, +alW(a,b,c,d,e){return this.UO(a,b,c,null,d,e)}} +A.ard.prototype={ +$0(){this.a.ov$=this.b.c}, +$S:0} +A.are.prototype={ +$0(){this.a.ov$=null}, +$S:0} +A.arb.prototype={ +$0(){this.a.n0$=this.b}, +$S:0} +A.arc.prototype={ +$0(){this.a.n1$=this.b}, +$S:0} +A.Gt.prototype={ +sbv(a,b){var s=this,r=s.a +if(b===r)return +if(r!=null)r.a.K(0,s.gdm()) +b.a.Z(0,s.gdm()) +s.a=b +s.a6()}, +sYV(a){var s=this,r=s.b +if(a===r)return +if(r!=null)r.a.K(0,s.gdm()) +a.a.Z(0,s.gdm()) +s.b=a +s.a6()}, +sYX(a){var s=this,r=s.c +if(a===r)return +if(r!=null)r.a.K(0,s.gdm()) +a.a.Z(0,s.gdm()) +s.c=a +s.a6()}, +sYY(a){var s=this,r=s.d +if(a===r)return +if(r!=null)r.a.K(0,s.gdm()) +a.a.Z(0,s.gdm()) +s.d=a +s.a6()}, +sU0(a){if(J.d(this.e,a))return +this.e=a +this.a6()}, +sXl(a){if(J.d(this.f,a))return +this.f=a +this.a6()}, +sXm(a){if(a.j(0,this.r))return +this.r=a +this.a6()}, +sYW(a){if(a.j(0,this.w))return +this.w=a +this.a6()}, +sn8(a){if(a.j(0,this.x))return +this.x=a +this.a6()}, +sn5(a){if(a.j(0,this.y))return +this.y=a +this.a6()}, +shq(a){if(a===this.z)return +this.z=a +this.a6()}, +sWe(a){if(J.d(a,this.Q))return +this.Q=a +this.a6()}, +sXH(a){if(a===this.as)return +this.as=a +this.a6()}, +sXI(a){if(a===this.at)return +this.at=a +this.a6()}, +Yp(a,b){var s,r,q,p,o=this,n=o.b +if(n.gb6(n)===B.K){n=o.c +if(n.gb6(n)===B.K){n=o.d +n=n.gb6(n)!==B.K}else n=!0}else n=!0 +if(n){s=$.W().aj() +n=o.r +n.toString +r=o.w +r.toString +q=o.a +q=A.y(n,r,q.gl(q)) +r=o.x +r.toString +n=o.d +n=A.y(q,r,n.gl(n)) +r=o.y +r.toString +q=o.c +q=A.y(n,r,q.gl(q)) +q.toString +s.sM(0,q) +q=o.z +q.toString +n=o.as +n.toString +if(!n){n=o.at +n.toString}else n=!0 +if(n)p=q +else{n=o.b +p=new A.ar(0,q,t.Y).a2(0,n.gl(n))}if(p>0)a.du(b.R(0,B.e),p,s)}}, +m(){var s=this,r=s.a +if(r!=null)r.a.K(0,s.gdm()) +r=s.b +if(r!=null)r.a.K(0,s.gdm()) +r=s.c +if(r!=null)r.a.K(0,s.gdm()) +r=s.d +if(r!=null)r.a.K(0,s.gdm()) +s.eJ()}, +eX(a){return!0}, +vL(a){return null}, +gxk(){return null}, +Dk(a){return!1}, +k(a){return"#"+A.bh(this)}} +A.Y3.prototype={ +az(a){var s=new A.a0U(!0,this.e,null,this.r,B.aP,B.b_,null,A.ag(t.T)) +s.aw() +s.saP(null) +return s}} +A.a0U.prototype={ +cD(a,b){var s,r=this,q=$.aHA +$.aHA=!1 +if(r.gv(r).p(0,b)){s=r.cE(a,b)||r.A===B.b_ +if((s||r.A===B.cf)&&!$.aHz){$.aHz=!0 +a.D(0,new A.qV(b,r))}}else s=!1 +if(q){$.aHA=!0 +$.aHz=!1}return s}} +A.Gw.prototype={ +ac(){return new A.yq(new A.aiS(),A.aS(t.S),B.K,null,null,B.j)}} +A.yq.prototype={ +gaiu(){this.a.toString +this.f===$&&A.b() +return B.Lf}, +ga9K(){this.a.toString +this.f===$&&A.b() +return!0}, +gGE(){var s=this.a.c +return s==null?null.ZM():s}, +gmx(){var s,r=this,q=r.w +if(q==null){q=A.c5(null,B.aj,B.h5,null,r) +q.by() +s=q.cM$ +s.b=!0 +s.a.push(r.gajt()) +r.w=q}return q}, +aju(a){var s,r,q,p,o,n,m,l,k,j,i=this +$label0$0:{s=new A.dj(A.aNI(i.Q),A.aNI(a)) +r=A.bn("#0#1",new A.arl(s)) +q=A.bn("#0#3",new A.arm(r)) +p=A.bn("#0#4",new A.arn(s)) +o=A.bn("#0#6",new A.aro(p)) +n=A.bn("#0#7",new A.arp(r)) +m=A.bn("#0#8",new A.arq(p)) +if(q.T()&&o.T()){B.b.C($.ux,i) +l=i.d +k=l.a +if(k!=null)k.oC() +else l.b=null +break $label0$0}if(n.T()&&m.T()){l=i.d +k=l.a +j=$.aGw+1 +if(k!=null){$.aGw=j +k.a1e(0,j)}else l.b=$.aGw=j +$.ux.push(i) +A.aoe(i.gGE()) +break $label0$0}if(!(q.T()&&m.T()))l=n.T()&&o.T() +else l=!0 +if(l)break $label0$0}i.Q=a}, +ahN(a,b){var s,r,q=this,p=new A.ars(q,a) +$label0$0:{s=q.gmx().Q +s===$&&A.b() +r=A.bn("#0#2",new A.arr(s)) +if(r.T()&&b.a>0){if(q.r==null)q.r=A.cy(b,p) +break $label0$0}if(r.T()||B.aW===s||B.aX===s||B.a7===s)p.$0()}}, +RL(a){return this.ahN(null,a)}, +pX(a){var s=this,r=s.r +if(r!=null)r.b3(0) +s.r=null +r=s.w +if(r==null)r=null +else{r=r.Q +r===$&&A.b()}switch(r){case null:case void 0:case B.aX:case B.K:break +case B.aW:case B.a7:if(a.a>0){r=s.gmx() +s.r=A.cy(a,r.gZs(r))}else s.gmx().dc(0) +break}}, +ajs(a){var s,r=this +r.a.toString +r.f===$&&A.b() +switch(1){case 1:s=r.x +if(s==null)s=r.x=A.Q5(r,null,B.Xf) +s.p1=r.gady() +s.p2=r.gac5() +s.R8=r.gacJ() +s.mC(a) +break}}, +abV(a){var s=this,r=s.y +r=r==null?null:r.CW +if(r!==a.gbN()){r=s.x +r=r==null?null:r.CW +r=r===a.gbN()}else r=!0 +if(r)return +if(s.r==null){r=s.gmx().Q +r===$&&A.b() +r=r===B.K}else r=!1 +if(r||!t.pY.b(a))return +s.pX(B.z) +s.z.a0(0)}, +adz(){this.pX(B.z) +this.z.a0(0)}, +ac6(){var s=this,r=s.e +r===$&&A.b() +if(!r)return +r=s.gmx().Q +r===$&&A.b() +if(r===B.K){s.ga9K() +r=!0}else r=!1 +if(r){r=s.c +r.toString +A.aKX(r)}s.a.toString +s.RL(B.z)}, +acK(){if(this.z.a!==0)return +this.pX(this.gaiu())}, +acd(a){var s,r,q,p,o,n,m=this +m.z.D(0,a.giZ(a)) +s=A.a($.ux.slice(0),A.S($.ux)) +for(r=s.length,q=!1,p=0;p") +return new A.jP(A.V(new A.R(s,new A.auo(b),r),!0,r.h("af.E")))}, +dF(a,b){return A.aO9(a,this,b)}, +dA(a,b){return A.aO9(this,a,b)}, +fc(a,b){var s,r +for(s=this.a,r=0;r") +return new A.R(new A.cO(s,r),new A.aup(),r.h("R")).c_(0," + ")}} +A.aum.prototype={ +$2(a,b){return a.D(0,b.glv())}, +$S:373} +A.auo.prototype={ +$1(a){return a.aV(0,this.a)}, +$S:374} +A.aun.prototype={ +$1(a){return a.gir()}, +$S:375} +A.aup.prototype={ +$1(a){return a.k(0)}, +$S:376} +A.Ws.prototype={} +A.Mu.prototype={ +I(){return"BoxShape."+this.b}} +A.Mp.prototype={ +iI(a,b,c){return null}, +D(a,b){return this.iI(a,b,!1)}, +fc(a,b){var s=$.W().bD() +s.jA(this.glv().U(b).I2(a)) +return s}, +m8(a){return this.fc(a,null)}, +dV(a,b){var s=$.W().bD() +s.jA(a) +return s}, +l2(a){return this.dV(a,null)}, +k8(a,b,c,d){a.cB(b,c)}, +gir(){return!0}} +A.d2.prototype={ +glv(){var s,r=this +if(r.gTS()){s=r.a.gej() +return new A.aG(s,s,s,s)}return new A.aG(r.d.gej(),r.a.gej(),r.b.gej(),r.c.gej())}, +gvY(){var s,r=this,q=r.a,p=q.a,o=r.d +if(o.a.j(0,p)&&r.c.a.j(0,p)&&r.b.a.j(0,p))if(r.gTS())if(r.guo()){s=q.d +q=o.d===s&&r.c.d===s&&r.b.d===s}else q=!1 +else q=!1 +else q=!1 +return q}, +gTS(){var s=this,r=s.a.b +return s.d.b===r&&s.c.b===r&&s.b.b===r}, +guo(){var s=this,r=s.a.c +return s.d.c===r&&s.c.c===r&&s.b.c===r}, +iI(a,b,c){var s=this +if(b instanceof A.d2&&A.mv(s.a,b.a)&&A.mv(s.b,b.b)&&A.mv(s.c,b.c)&&A.mv(s.d,b.d))return new A.d2(A.k2(s.a,b.a),A.k2(s.b,b.b),A.k2(s.c,b.c),A.k2(s.d,b.d)) +return null}, +D(a,b){return this.iI(a,b,!1)}, +aV(a,b){var s=this +return new A.d2(s.a.aV(0,b),s.b.aV(0,b),s.c.aV(0,b),s.d.aV(0,b))}, +dF(a,b){if(a instanceof A.d2)return A.op(a,this,b) +return this.Mv(a,b)}, +dA(a,b){if(a instanceof A.d2)return A.op(this,a,b) +return this.Mw(a,b)}, +BW(a,b,c,d,a0){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e=this +if(e.gvY()){s=e.a +switch(s.c.a){case 0:return +case 1:switch(d.a){case 1:A.aJR(a,b,s) +break +case 0:if(c!=null&&!c.j(0,B.H)){A.aJS(a,b,s,c) +return}A.aJT(a,b,s) +break}return}}if(e.guo()&&e.a.c===B.aB)return +r=A.aS(t.n8) +s=e.a +q=s.c +p=q===B.aB +if(!p)r.D(0,s.a) +o=e.b +n=o.c +m=n===B.aB +if(!m)r.D(0,o.a) +l=e.c +k=l.c +j=k===B.aB +if(!j)r.D(0,l.a) +i=e.d +h=i.c +g=h===B.aB +if(!g)r.D(0,i.a) +if(!(q===B.y&&s.b===0))if(!(n===B.y&&o.b===0)){if(!(k===B.y&&l.b===0))q=h===B.y&&i.b===0 +else q=!0 +f=q}else f=!0 +else f=!0 +if(r.a===1)if(!f)if(d!==B.dw)q=c!=null&&!c.j(0,B.H) +else q=!0 +else q=!1 +else q=!1 +if(q){if(p)s=B.r +q=m?B.r:o +p=j?B.r:l +o=g?B.r:i +A.aJV(a,b,c,p,r.gL(r),o,q,d,a0,s) +return}A.aRa(a,b,l,i,o,s)}, +fv(a,b,c){return this.BW(a,b,null,B.aO,c)}, +j(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +if(J.U(b)!==A.t(s))return!1 +return b instanceof A.d2&&b.a.j(0,s.a)&&b.b.j(0,s.b)&&b.c.j(0,s.c)&&b.d.j(0,s.d)}, +gt(a){var s=this +return A.N(s.a,s.b,s.c,s.d,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a){var s,r,q=this +if(q.gvY())return"Border.all("+q.a.k(0)+")" +s=A.a([],t.s) +r=q.a +if(!r.j(0,B.r))s.push("top: "+r.k(0)) +r=q.b +if(!r.j(0,B.r))s.push("right: "+r.k(0)) +r=q.c +if(!r.j(0,B.r))s.push("bottom: "+r.k(0)) +r=q.d +if(!r.j(0,B.r))s.push("left: "+r.k(0)) +return"Border("+B.b.c_(s,", ")+")"}, +grN(a){return this.a}} +A.fN.prototype={ +glv(){var s,r=this +if(r.gvY()){s=r.a.gej() +return new A.f8(s,s,s,s)}return new A.f8(r.b.gej(),r.a.gej(),r.c.gej(),r.d.gej())}, +gvY(){var s,r,q=this,p=q.a,o=p.a,n=q.b +if(n.a.j(0,o)&&q.d.a.j(0,o)&&q.c.a.j(0,o)){s=p.b +if(n.b===s&&q.d.b===s&&q.c.b===s)if(q.guo()){r=p.d +p=n.d===r&&q.d.d===r&&q.c.d===r}else p=!1 +else p=!1}else p=!1 +return p}, +guo(){var s=this,r=s.a.c +return s.b.c===r&&s.d.c===r&&s.c.c===r}, +iI(a,b,c){var s,r,q,p=this,o=null +if(b instanceof A.fN){s=p.a +r=b.a +if(A.mv(s,r)&&A.mv(p.b,b.b)&&A.mv(p.c,b.c)&&A.mv(p.d,b.d))return new A.fN(A.k2(s,r),A.k2(p.b,b.b),A.k2(p.c,b.c),A.k2(p.d,b.d)) +return o}if(b instanceof A.d2){s=b.a +r=p.a +if(!A.mv(s,r)||!A.mv(b.c,p.d))return o +q=p.b +if(!q.j(0,B.r)||!p.c.j(0,B.r)){if(!b.d.j(0,B.r)||!b.b.j(0,B.r))return o +return new A.fN(A.k2(s,r),q,p.c,A.k2(b.c,p.d))}return new A.d2(A.k2(s,r),b.b,A.k2(b.c,p.d),b.d)}return o}, +D(a,b){return this.iI(a,b,!1)}, +aV(a,b){var s=this +return new A.fN(s.a.aV(0,b),s.b.aV(0,b),s.c.aV(0,b),s.d.aV(0,b))}, +dF(a,b){if(a instanceof A.fN)return A.aFh(a,this,b) +return this.Mv(a,b)}, +dA(a,b){if(a instanceof A.fN)return A.aFh(this,a,b) +return this.Mw(a,b)}, +BW(a,b,c,d,a0){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e=this +if(e.gvY()){s=e.a +switch(s.c.a){case 0:return +case 1:switch(d.a){case 1:A.aJR(a,b,s) +break +case 0:if(c!=null&&!c.j(0,B.H)){A.aJS(a,b,s,c) +return}A.aJT(a,b,s) +break}return}}if(e.guo()&&e.a.c===B.aB)return +switch(a0.a){case 0:r=e.c +q=e.b +break +case 1:r=e.b +q=e.c +break +default:r=null +q=null}p=A.aS(t.n8) +s=e.a +o=s.c +n=o===B.aB +if(!n)p.D(0,s.a) +m=e.c +l=m.c +if(l!==B.aB)p.D(0,m.a) +k=e.d +j=k.c +i=j===B.aB +if(!i)p.D(0,k.a) +h=e.b +g=h.c +if(g!==B.aB)p.D(0,h.a) +if(!(o===B.y&&s.b===0))if(!(l===B.y&&m.b===0)){if(!(j===B.y&&k.b===0))o=g===B.y&&h.b===0 +else o=!0 +f=o}else f=!0 +else f=!0 +if(p.a===1)if(!f)if(d!==B.dw)o=c!=null&&!c.j(0,B.H) +else o=!0 +else o=!1 +else o=!1 +if(o){if(n)s=B.r +o=q.c===B.aB?B.r:q +n=i?B.r:k +m=r.c===B.aB?B.r:r +A.aJV(a,b,c,n,p.gL(p),m,o,d,a0,s) +return}A.aRa(a,b,k,r,q,s)}, +fv(a,b,c){return this.BW(a,b,null,B.aO,c)}, +j(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +if(J.U(b)!==A.t(s))return!1 +return b instanceof A.fN&&b.a.j(0,s.a)&&b.b.j(0,s.b)&&b.c.j(0,s.c)&&b.d.j(0,s.d)}, +gt(a){var s=this +return A.N(s.a,s.b,s.c,s.d,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a){var s=this,r=A.a([],t.s),q=s.a +if(!q.j(0,B.r))r.push("top: "+q.k(0)) +q=s.b +if(!q.j(0,B.r))r.push("start: "+q.k(0)) +q=s.c +if(!q.j(0,B.r))r.push("end: "+q.k(0)) +q=s.d +if(!q.j(0,B.r))r.push("bottom: "+q.k(0)) +return"BorderDirectional("+B.b.c_(r,", ")+")"}, +grN(a){return this.a}} +A.d3.prototype={ +gdn(a){var s=this.c +s=s==null?null:s.glv() +return s==null?B.bB:s}, +CK(a,b){var s,r,q +switch(this.w.a){case 1:s=A.hv(a.gaK(),a.gh_()/2) +r=$.W().bD() +r.kr(s) +return r +case 0:r=this.d +if(r!=null){q=$.W().bD() +q.ex(r.U(b).dJ(a)) +return q}r=$.W().bD() +r.jA(a) +return r}}, +aV(a,b){var s=this,r=null,q=A.y(r,s.a,b),p=A.aFv(r,s.b,b),o=A.aJU(r,s.c,b),n=A.l8(r,s.d,b),m=A.aFj(r,s.e,b),l=s.f +l=l==null?r:l.aV(0,b) +return new A.d3(q,p,o,n,m,l,s.w)}, +gBa(){return this.e!=null}, +dF(a,b){if(a==null)return this.aV(0,b) +if(a instanceof A.d3)return A.aJW(a,this,b) +return this.LZ(a,b)}, +dA(a,b){if(a==null)return this.aV(0,1-b) +if(a instanceof A.d3)return A.aJW(this,a,b) +return this.M_(a,b)}, +j(a,b){var s,r=this +if(b==null)return!1 +if(r===b)return!0 +if(J.U(b)!==A.t(r))return!1 +if(b instanceof A.d3)if(J.d(b.a,r.a))if(J.d(b.b,r.b))if(J.d(b.c,r.c))if(J.d(b.d,r.d))if(A.dn(b.e,r.e))if(J.d(b.f,r.f))s=b.w===r.w +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +return s}, +gt(a){var s=this,r=s.e +r=r==null?null:A.bv(r) +return A.N(s.a,s.b,s.c,s.d,r,s.f,null,s.w,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +J2(a,b,c){var s +switch(this.w.a){case 0:s=this.d +if(s!=null)return s.U(c).dJ(new A.w(0,0,0+a.a,0+a.b)).p(0,b) +return!0 +case 1:return b.Y(0,a.iP(B.e)).gdC()<=Math.min(a.a,a.b)/2}}, +HQ(a){return new A.aty(this,a)}} +A.aty.prototype={ +QN(a,b,c,d){var s=this.b +switch(s.w.a){case 1:a.du(b.gaK(),b.gh_()/2,c) +break +case 0:s=s.d +if(s==null||s.j(0,B.H))a.cB(b,c) +else a.bQ(s.U(d).dJ(b),c) +break}}, +a7f(a,b,c){var s,r,q,p,o,n,m=this.b.e +if(m==null)return +for(s=m.length,r=0;r0?n*0.57735+0.5:0)) +o=b.cm(q.b) +n=q.d +this.QN(a,new A.w(o.a-n,o.b-n,o.c+n,o.d+n),p,c)}}, +afQ(a,b,c){var s,r,q=this,p=q.b,o=p.b +if(o==null)return +if(q.e==null)q.e=o.Ad(q.a) +switch(p.w.a){case 1:s=A.hv(b.gaK(),b.gh_()/2) +r=$.W().bD() +r.kr(s) +break +case 0:p=p.d +if(p!=null){r=$.W().bD() +r.ex(p.U(c.d).dJ(b))}else r=null +break +default:r=null}q.e.wl(a,b,r,c)}, +m(){var s=this.e +if(s!=null)s.m() +this.LV()}, +ee(a,b,c){var s,r,q=this,p=c.e,o=b.a,n=b.b,m=new A.w(o,n,o+p.a,n+p.b),l=c.d +q.a7f(a,m,l) +p=q.b +o=p.a +n=o==null +if(!n||p.f!=null){if(q.c!=null)s=p.f!=null&&!J.d(q.d,m) +else s=!0 +if(s){r=$.W().aj() +if(!n)r.sM(0,o) +o=p.f +if(o!=null){r.sbU(o.HT(0,m,l)) +q.d=m}q.c=r}o=q.c +o.toString +q.QN(a,m,o,l)}q.afQ(a,m,c) +o=p.c +if(o!=null){n=p.d +n=n==null?null:n.U(l) +o.BW(a,m,n,p.w,l)}}, +k(a){return"BoxPainter for "+this.b.k(0)}} +A.Mq.prototype={ +I(){return"BoxFit."+this.b}} +A.OA.prototype={} +A.ep.prototype={ +jk(){var s=$.W().aj() +s.sM(0,this.a) +s.sw8(new A.tg(this.e,A.b_z(this.c))) +return s}, +aV(a,b){var s=this +return new A.ep(s.d*b,s.e,s.a,s.b.S(0,b),s.c*b)}, +j(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +if(J.U(b)!==A.t(s))return!1 +return b instanceof A.ep&&b.a.j(0,s.a)&&b.b.j(0,s.b)&&b.c===s.c&&b.d===s.d&&b.e===s.e}, +gt(a){var s=this +return A.N(s.a,s.b,s.c,s.d,s.e,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a){var s=this +return"BoxShadow("+s.a.k(0)+", "+s.b.k(0)+", "+A.jU(s.c)+", "+A.jU(s.d)+", "+s.e.k(0)+")"}} +A.er.prototype={ +aV(a,b){return new A.er(this.b,this.a.aV(0,b))}, +dF(a,b){var s,r +if(a instanceof A.er){s=A.aQ(a.a,this.a,b) +r=A.P(a.b,this.b,b) +r.toString +return new A.er(A.O(r,0,1),s)}return this.px(a,b)}, +dA(a,b){var s,r +if(a instanceof A.er){s=A.aQ(this.a,a.a,b) +r=A.P(this.b,a.b,b) +r.toString +return new A.er(A.O(r,0,1),s)}return this.py(a,b)}, +fc(a,b){var s=$.W().bD() +s.kr(this.xR(a).dz(-this.a.gej())) +return s}, +m8(a){return this.fc(a,null)}, +dV(a,b){var s=$.W().bD() +s.kr(this.xR(a)) +return s}, +l2(a){return this.dV(a,null)}, +k8(a,b,c,d){if(this.b===0)a.du(b.gaK(),b.gh_()/2,c) +else a.qO(this.xR(b),c)}, +gir(){return!0}, +mH(a){var s=a==null?this.a:a +return new A.er(this.b,s)}, +fv(a,b,c){var s,r=this.a +switch(r.c.a){case 0:break +case 1:s=r.b*r.d +if(this.b===0)a.du(b.gaK(),(b.gh_()+s)/2,r.jk()) +else a.qO(this.xR(b).dz(s/2),r.jk()) +break}}, +am(a,b){return this.fv(a,b,null)}, +xR(a){var s,r,q,p,o,n,m,l=this.b +if(l===0||a.c-a.a===a.d-a.b)return A.hv(a.gaK(),a.gh_()/2) +s=a.c +r=a.a +q=s-r +p=a.d +o=a.b +n=p-o +l=1-l +if(q").b(b)&&A.aEi(b.b,s.b)}, +gt(a){return A.N(A.t(this),this.a,this.b,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a){return"ColorSwatch(primary value: "+this.a26(0)+")"}} +A.iA.prototype={ +dd(){return"Decoration"}, +gdn(a){return B.bB}, +gBa(){return!1}, +dF(a,b){return null}, +dA(a,b){return null}, +J2(a,b,c){return!0}, +CK(a,b){throw A.c(A.a3("This Decoration subclass does not expect to be used for clipping."))}} +A.Ms.prototype={ +m(){}} +A.Xt.prototype={} +A.wv.prototype={ +I(){return"ImageRepeat."+this.b}} +A.Wq.prototype={ +Ad(a){var s,r=this.a +r=r==null?null:r.Ad(a) +s=this.b +s=s==null?null:s.Ad(a) +return new A.att(r,s,this.c)}, +j(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +if(J.U(b)!==A.t(s))return!1 +return b instanceof A.Wq&&J.d(b.a,s.a)&&J.d(b.b,s.b)&&b.c===s.c}, +gt(a){return A.N(this.a,this.b,this.c,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a){return"_BlendedDecorationImage("+A.h(this.a)+", "+A.h(this.b)+", "+A.h(this.c)+")"}} +A.att.prototype={ +JX(a,b,c,d,e,f){var s,r,q=this +a.e4(null,$.W().aj()) +s=q.a +r=s==null +if(!r)s.JX(a,b,c,d,e*(1-q.c),f) +s=q.b +if(s!=null){r=!r?B.mO:f +s.JX(a,b,c,d,e*q.c,r)}a.b_(0)}, +wl(a,b,c,d){return this.JX(a,b,c,d,1,B.bN)}, +m(){var s=this.a +if(s!=null)s.m() +s=this.b +if(s!=null)s.m()}, +k(a){return"_BlendedDecorationImagePainter("+A.h(this.a)+", "+A.h(this.b)+", "+A.h(this.c)+")"}} +A.de.prototype={ +gdw(){var s=this +return s.gfg(s)+s.gfi(s)+s.ghv(s)+s.ghu()}, +al7(a){var s=this +switch(a.a){case 0:return s.gdw() +case 1:return s.gbO(s)+s.gbX(s)}}, +D(a,b){var s=this +return new A.q9(s.gfg(s)+b.gfg(b),s.gfi(s)+b.gfi(b),s.ghv(s)+b.ghv(b),s.ghu()+b.ghu(),s.gbO(s)+b.gbO(b),s.gbX(s)+b.gbX(b))}, +i9(a,b,c){var s=this +return new A.q9(A.O(s.gfg(s),b.a,c.a),A.O(s.gfi(s),b.c,c.b),A.O(s.ghv(s),0,c.c),A.O(s.ghu(),0,c.d),A.O(s.gbO(s),b.b,c.e),A.O(s.gbX(s),b.d,c.f))}, +k(a){var s=this +if(s.ghv(s)===0&&s.ghu()===0){if(s.gfg(s)===0&&s.gfi(s)===0&&s.gbO(s)===0&&s.gbX(s)===0)return"EdgeInsets.zero" +if(s.gfg(s)===s.gfi(s)&&s.gfi(s)===s.gbO(s)&&s.gbO(s)===s.gbX(s))return"EdgeInsets.all("+B.c.af(s.gfg(s),1)+")" +return"EdgeInsets("+B.c.af(s.gfg(s),1)+", "+B.c.af(s.gbO(s),1)+", "+B.c.af(s.gfi(s),1)+", "+B.c.af(s.gbX(s),1)+")"}if(s.gfg(s)===0&&s.gfi(s)===0)return"EdgeInsetsDirectional("+B.c.af(s.ghv(s),1)+", "+B.c.af(s.gbO(s),1)+", "+B.c.af(s.ghu(),1)+", "+B.c.af(s.gbX(s),1)+")" +return"EdgeInsets("+B.c.af(s.gfg(s),1)+", "+B.c.af(s.gbO(s),1)+", "+B.c.af(s.gfi(s),1)+", "+B.c.af(s.gbX(s),1)+") + EdgeInsetsDirectional("+B.c.af(s.ghv(s),1)+", 0.0, "+B.c.af(s.ghu(),1)+", 0.0)"}, +j(a,b){var s=this +if(b==null)return!1 +return b instanceof A.de&&b.gfg(b)===s.gfg(s)&&b.gfi(b)===s.gfi(s)&&b.ghv(b)===s.ghv(s)&&b.ghu()===s.ghu()&&b.gbO(b)===s.gbO(s)&&b.gbX(b)===s.gbX(s)}, +gt(a){var s=this +return A.N(s.gfg(s),s.gfi(s),s.ghv(s),s.ghu(),s.gbO(s),s.gbX(s),B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}} +A.aG.prototype={ +gfg(a){return this.a}, +gbO(a){return this.b}, +gfi(a){return this.c}, +gbX(a){return this.d}, +ghv(a){return 0}, +ghu(){return 0}, +J7(a){var s=this +return new A.w(a.a-s.a,a.b-s.b,a.c+s.c,a.d+s.d)}, +I2(a){var s=this +return new A.w(a.a+s.a,a.b+s.b,a.c-s.c,a.d-s.d)}, +D(a,b){if(b instanceof A.aG)return this.R(0,b) +return this.M1(0,b)}, +i9(a,b,c){var s=this +return new A.aG(A.O(s.a,b.a,c.a),A.O(s.b,b.b,c.e),A.O(s.c,b.c,c.b),A.O(s.d,b.d,c.f))}, +Y(a,b){var s=this +return new A.aG(s.a-b.a,s.b-b.b,s.c-b.c,s.d-b.d)}, +R(a,b){var s=this +return new A.aG(s.a+b.a,s.b+b.b,s.c+b.c,s.d+b.d)}, +S(a,b){var s=this +return new A.aG(s.a*b,s.b*b,s.c*b,s.d*b)}, +U(a){return this}, +mI(a,b,c,d){var s=this,r=b==null?s.a:b,q=d==null?s.b:d,p=c==null?s.c:c +return new A.aG(r,q,p,a==null?s.d:a)}, +uW(a){return this.mI(a,null,null,null)}, +anc(a){return this.mI(null,null,null,a)}, +ang(a,b){return this.mI(a,null,null,b)}, +ank(a,b){return this.mI(null,a,b,null)}} +A.f8.prototype={ +ghv(a){return this.a}, +gbO(a){return this.b}, +ghu(){return this.c}, +gbX(a){return this.d}, +gfg(a){return 0}, +gfi(a){return 0}, +D(a,b){if(b instanceof A.f8)return this.R(0,b) +return this.M1(0,b)}, +Y(a,b){var s=this +return new A.f8(s.a-b.a,s.b-b.b,s.c-b.c,s.d-b.d)}, +R(a,b){var s=this +return new A.f8(s.a+b.a,s.b+b.b,s.c+b.c,s.d+b.d)}, +S(a,b){var s=this +return new A.f8(s.a*b,s.b*b,s.c*b,s.d*b)}, +U(a){var s=this +switch(a.a){case 0:return new A.aG(s.c,s.b,s.a,s.d) +case 1:return new A.aG(s.a,s.b,s.c,s.d)}}} +A.q9.prototype={ +S(a,b){var s=this +return new A.q9(s.a*b,s.b*b,s.c*b,s.d*b,s.e*b,s.f*b)}, +U(a){var s=this +switch(a.a){case 0:return new A.aG(s.d+s.a,s.e,s.c+s.b,s.f) +case 1:return new A.aG(s.c+s.a,s.e,s.d+s.b,s.f)}}, +gfg(a){return this.a}, +gfi(a){return this.b}, +ghv(a){return this.c}, +ghu(){return this.d}, +gbO(a){return this.e}, +gbX(a){return this.f}} +A.auk.prototype={} +A.aD8.prototype={ +$1(a){return a<=this.a}, +$S:9} +A.aCP.prototype={ +$1(a){var s=this,r=A.y(A.aPS(s.a,s.b,a),A.aPS(s.c,s.d,a),s.e) +r.toString +return r}, +$S:377} +A.aek.prototype={ +Fu(){var s,r,q,p=this.b +if(p!=null)return p +p=this.a.length +s=1/(p-1) +if(p>4294967295)A.T(A.c9(p,0,4294967295,"length",null)) +r=J.rQ(new Array(p),t.i) +for(q=0;q") +return new A.dO(s.d,s.e,s.f,A.V(new A.R(r,new A.ah7(b),q),!0,q.h("af.E")),s.b,null)}, +dF(a,b){var s=A.aLD(a,this,b) +return s}, +dA(a,b){var s=A.aLD(this,a,b) +return s}, +j(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +if(J.U(b)!==A.t(s))return!1 +return b instanceof A.dO&&b.d.j(0,s.d)&&b.e.j(0,s.e)&&b.f===s.f&&A.dn(b.a,s.a)&&A.dn(b.b,s.b)}, +gt(a){var s=this,r=A.bv(s.a),q=s.b +q=q==null?null:A.bv(q) +return A.N(s.d,s.e,s.f,s.c,r,q,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a){var s=this,r=A.a(["begin: "+s.d.k(0),"end: "+s.e.k(0),"colors: "+A.h(s.a)],t.s),q=s.b +if(q!=null)r.push("stops: "+A.h(q)) +r.push("tileMode: "+s.f.k(0)) +return"LinearGradient("+B.b.c_(r,", ")+")"}} +A.ah7.prototype={ +$1(a){var s=A.y(null,a,this.a) +s.toString +return s}, +$S:62} +A.afu.prototype={ +a0(a){var s,r,q,p +for(s=this.b,r=s.gaT(s),q=A.o(r),q=q.h("@<1>").N(q.z[1]),r=new A.bN(J.ap(r.a),r.b,q.h("bN<1,2>")),q=q.z[1];r.q();){p=r.a;(p==null?q.a(p):p).m()}s.a0(0) +for(s=this.a,r=s.gaT(s),q=A.o(r),q=q.h("@<1>").N(q.z[1]),r=new A.bN(J.ap(r.a),r.b,q.h("bN<1,2>")),q=q.z[1];r.q();){p=r.a +if(p==null)p=q.a(p) +p.a.K(0,p.b)}s.a0(0) +this.f=0}, +Iy(a){var s,r,q,p=this,o=p.c.C(0,a) +if(o!=null){s=o.a +r=o.d +r===$&&A.b() +if(s.x)A.T(A.Q(u.V)) +B.b.C(s.y,r) +o.My()}q=p.a.C(0,a) +if(q!=null){q.a.K(0,q.b) +return!0}o=p.b.C(0,a) +if(o!=null){s=p.f +r=o.b +r.toString +p.f=s-r +o.m() +return!0}return!1}, +SZ(a,b,c){var s,r=this,q=b.b +if(q!=null&&q<=104857600&&!0){s=r.f +q.toString +r.f=s+q +r.b.n(0,a,b) +r.a7V(c)}else b.m()}, +GF(a,b,c){var s=this.c.bm(0,a,new A.afw(this,b,a)) +if(s.b==null)s.b=c}, +K7(a,b,c,d){var s,r,q,p,o,n,m,l=this,k=null,j={},i=l.a,h=i.i(0,b),g=h==null?k:h.a +j.a=g +if(g!=null)return g +h=l.b +q=h.C(0,b) +if(q!=null){j=q.a +l.GF(b,j,q.b) +h.n(0,b,q) +return j}p=l.c.i(0,b) +if(p!=null){j=p.a +i=p.b +if(j.x)A.T(A.Q(u.V)) +h=new A.ww(j) +h.xN(j) +l.SZ(b,new A.H6(j,i,h),k) +return j}try{g=j.a=c.$0() +l.GF(b,g,k) +h=g}catch(o){s=A.ax(o) +r=A.aZ(o) +if(d!=null){d.$2(s,r) +return k}else throw o}j.b=!1 +n=A.bc("pendingImage") +m=new A.jm(new A.afx(j,l,b,!0,k,n),k,k) +n.b=new A.a_z(h,m) +i.n(0,b,n.aI()) +j.a.Z(0,m) +return j.a}, +bm(a,b,c){return this.K7(a,b,c,null)}, +a7V(a){var s,r,q,p,o,n=this,m=n.b,l=A.o(m).h("aX<1>") +while(!0){if(!(n.f>104857600||m.a>1000))break +s=new A.aX(m,l) +r=s.gab(s) +if(!r.q())A.T(A.cm()) +q=r.gJ(r) +p=m.i(0,q) +s=n.f +o=p.b +o.toString +n.f=s-o +p.m() +m.C(0,q)}}} +A.afw.prototype={ +$0(){return A.b1t(this.b,new A.afv(this.a,this.c))}, +$S:378} +A.afv.prototype={ +$0(){this.a.c.C(0,this.b)}, +$S:0} +A.afx.prototype={ +$2(a,b){var s,r,q,p,o,n=this +if(a!=null){s=a.a +r=s.gbh(s)*s.gbB(s)*4 +s.m()}else r=null +s=n.a +q=s.a +if(q.x)A.T(A.Q(u.V)) +p=new A.ww(q) +p.xN(q) +o=new A.H6(q,r,p) +p=n.b +q=n.c +p.GF(q,s.a,r) +if(n.d)p.SZ(q,o,n.e) +else o.m() +p.a.C(0,q) +if(!s.b){q=n.f.aI() +q.a.K(0,q.b)}s.b=!0}, +$S:379} +A.WB.prototype={ +m(){$.c_.rx$.push(new A.au3(this))}} +A.au3.prototype={ +$1(a){var s=this.a,r=s.c +if(r!=null)r.m() +s.c=null}, +$S:3} +A.H6.prototype={} +A.z9.prototype={ +a6u(a,b,c){var s=new A.axA(this,b) +this.d=s +if(a.x)A.T(A.Q(u.V)) +a.y.push(s)}, +k(a){return"#"+A.bh(this)}} +A.axA.prototype={ +$0(){var s,r,q +this.b.$0() +s=this.a +r=s.a +q=s.d +q===$&&A.b() +if(r.x)A.T(A.Q(u.V)) +B.b.C(r.y,q) +s.My()}, +$S:0} +A.a_z.prototype={} +A.Cy.prototype={ +Vj(a){var s=this +return new A.Cy(s.a,s.b,s.c,s.d,a,s.f)}, +j(a,b){var s=this +if(b==null)return!1 +if(J.U(b)!==A.t(s))return!1 +return b instanceof A.Cy&&b.a==s.a&&b.b==s.b&&J.d(b.c,s.c)&&b.d==s.d&&J.d(b.e,s.e)&&b.f==s.f}, +gt(a){var s=this +return A.N(s.a,s.b,s.c,s.e,s.f,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a){var s,r=this,q=""+"ImageConfiguration(",p=r.a +if(p!=null){q+="bundle: "+p.k(0) +s=!0}else s=!1 +p=r.b +if(p!=null){if(s)q+=", " +p=q+("devicePixelRatio: "+B.c.af(p,1)) +q=p +s=!0}p=r.c +if(p!=null){if(s)q+=", " +p=q+("locale: "+p.k(0)) +q=p +s=!0}p=r.d +if(p!=null){if(s)q+=", " +p=q+("textDirection: "+p.k(0)) +q=p +s=!0}p=r.e +if(p!=null){if(s)q+=", " +p=q+("size: "+p.k(0)) +q=p +s=!0}p=r.f +if(p!=null){if(s)q+=", " +p=q+("platform: "+p.b) +q=p}q+=")" +return q.charCodeAt(0)==0?q:q}} +A.ki.prototype={ +U(a){var s=new A.afI() +this.a8Q(a,new A.afE(this,a,s),new A.afF(this,a,s)) +return s}, +a8Q(a,b,c){var s,r,q,p,o,n={} +n.a=null +n.b=!1 +s=new A.afB(n,c) +r=null +try{r=this.JK(a)}catch(o){q=A.ax(o) +p=A.aZ(o) +s.$2(q,p) +return}r.ba(new A.afA(n,this,b,s),t.H).o2(s)}, +wA(a,b,c,d){var s,r +if(b.a!=null){s=$.hu.op$ +s===$&&A.b() +s.K7(0,c,new A.afC(b),d) +return}s=$.hu.op$ +s===$&&A.b() +r=s.K7(0,c,new A.afD(this,c),d) +if(r!=null)b.Lw(r)}, +Bn(a,b){return A.aO5()}, +Bp(a,b){return A.aO5()}, +k(a){return"ImageConfiguration()"}} +A.afE.prototype={ +$2(a,b){this.a.wA(this.b,this.c,a,b)}, +$S(){return A.o(this.a).h("~(ki.T,~(I,dw?))")}} +A.afF.prototype={ +$3(a,b,c){return this.a_H(a,b,c)}, +a_H(a,b,c){var s=0,r=A.a1(t.H),q=this,p +var $async$$3=A.a2(function(d,e){if(d===1)return A.Z(e,r) +while(true)switch(s){case 0:p=A.hD(null,t.P) +s=2 +return A.a7(p,$async$$3) +case 2:p=q.c +if(p.a==null)p.Lw(new A.av9(A.a([],t.XZ),A.a([],t.SM),A.a([],t.b))) +p=p.a +p.toString +p.wz(A.bo("while resolving an image"),b,null,!0,c) +return A.a_(null,r)}}) +return A.a0($async$$3,r)}, +$S(){return A.o(this.a).h("ae<~>(ki.T?,I,dw?)")}} +A.afB.prototype={ +a_G(a,b){var s=0,r=A.a1(t.H),q,p=this,o +var $async$$2=A.a2(function(c,d){if(c===1)return A.Z(d,r) +while(true)switch(s){case 0:o=p.a +if(o.b){s=1 +break}o.b=!0 +p.b.$3(o.a,a,b) +case 1:return A.a_(q,r)}}) +return A.a0($async$$2,r)}, +$2(a,b){return this.a_G(a,b)}, +$S:380} +A.afA.prototype={ +$1(a){var s,r,q,p=this +p.a.a=a +try{p.c.$2(a,p.d)}catch(q){s=A.ax(q) +r=A.aZ(q) +p.d.$2(s,r)}}, +$S(){return A.o(this.b).h("b7(ki.T)")}} +A.afC.prototype={ +$0(){var s=this.a.a +s.toString +return s}, +$S:243} +A.afD.prototype={ +$0(){var s=this.a,r=this.b,q=s.Bp(r,$.hu.garG()) +return q instanceof A.VA?s.Bn(r,$.hu.garE()):q}, +$S:243} +A.VA.prototype={} +A.l6.prototype={ +j(a,b){var s=this +if(b==null)return!1 +if(J.U(b)!==A.t(s))return!1 +return b instanceof A.l6&&b.a===s.a&&b.b===s.b&&b.c===s.c}, +gt(a){return A.N(this.a,this.b,this.c,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a){return"AssetBundleImageKey(bundle: "+this.a.k(0)+', name: "'+this.b+'", scale: '+A.h(this.c)+")"}} +A.LQ.prototype={ +Bp(a,b){return A.aM0(this.u4(a,b),a.b,null,a.c)}, +Bn(a,b){return A.aM0(this.u4(a,b),a.b,null,a.c)}, +u4(a,b){return this.aeu(a,b)}, +aeu(a,b){var s=0,r=A.a1(t.hP),q,p=2,o,n,m,l,k +var $async$u4=A.a2(function(c,d){if(c===1){o=d +s=p}while(true)switch(s){case 0:l=null +p=4 +s=7 +return A.a7(a.a.Bm(a.b),$async$u4) +case 7:l=d +p=2 +s=6 +break +case 4:p=3 +k=o +if(A.ax(k) instanceof A.rx){m=$.hu.op$ +m===$&&A.b() +m.Iy(a) +throw k}else throw k +s=6 +break +case 3:s=2 +break +case 6:q=b.$1(l) +s=1 +break +case 1:return A.a_(q,r) +case 2:return A.Z(o,r)}}) +return A.a0($async$u4,r)}} +A.av9.prototype={} +A.Ap.prototype={ +gro(){return this.a}, +JK(a){var s,r={},q=a.a +if(q==null)q=$.qv() +r.a=r.b=null +s=t.P +A.aXz(A.aVg(q).ba(new A.a6A(r,this,a,q),s),new A.a6B(r),s,t.K) +s=r.a +if(s!=null)return s +s=new A.aD($.aw,t.Lv) +r.b=new A.bI(s,t.h8) +return s}, +a88(a,b,c){var s,r,q,p,o +if(c==null||c.length===0||b.b==null)return new A.oj(null,a) +s=A.aH0(t.i,t.pR) +for(r=c.length,q=0;q(r+q)/2){s=a.i(0,q) +s.toString +return s}else{s=a.i(0,r) +s.toString +return s}}, +j(a,b){if(b==null)return!1 +if(J.U(b)!==A.t(this))return!1 +return b instanceof A.Ap&&b.gro()===this.gro()&&!0}, +gt(a){return A.N(this.gro(),this.b,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a){return"AssetImage(bundle: "+A.h(this.b)+', name: "'+this.gro()+'")'}} +A.a6A.prototype={ +$1(a){var s,r,q=this,p=q.b,o=a.a_Q(p.gro()),n=p.a88(p.gro(),q.c,o) +p=n.a +if(p==null)p=1 +s=new A.l6(q.d,n.b,p) +p=q.a +r=p.b +if(r!=null)r.e7(0,s) +else p.a=new A.bK(s,t.WT)}, +$S:382} +A.a6B.prototype={ +$2(a,b){this.a.b.mF(a,b)}, +$S:44} +A.fw.prototype={ +ep(a){return new A.fw(this.a.ep(0),this.b,this.c)}, +k(a){var s=this.c +s=s!=null?s+" ":"" +return s+this.a.k(0)+" @ "+A.jU(this.b)+"x"}, +gt(a){return A.N(this.a,this.b,this.c,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a,b){var s=this +if(b==null)return!1 +if(J.U(b)!==A.t(s))return!1 +return b instanceof A.fw&&b.a===s.a&&b.b===s.b&&b.c==s.c}} +A.jm.prototype={ +gt(a){return A.N(this.a,this.b,this.c,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a,b){var s=this +if(b==null)return!1 +if(J.U(b)!==A.t(s))return!1 +return b instanceof A.jm&&J.d(b.a,s.a)&&J.d(b.b,s.b)&&J.d(b.c,s.c)}, +atu(a,b){return this.a.$2(a,b)}} +A.afI.prototype={ +Lw(a){var s,r=this +r.a=a +s=r.b +if(s!=null){r.b=null +a.r=!0 +B.b.aa(s,a.gzD(a)) +r.a.r=!1}}, +Z(a,b){var s=this.a +if(s!=null)return s.Z(0,b) +s=this.b;(s==null?this.b=A.a([],t.XZ):s).push(b)}, +K(a,b){var s,r=this.a +if(r!=null)return r.K(0,b) +for(s=0;r=this.b,s")),t.kE),!0,t.CF) +n=i.b +B.b.E(o,n) +B.b.a0(n) +s=!1 +for(n=o.length,m=0;m=s.a}else r=!0 +if(r){s=p.ax +p.Ow(new A.fw(s.gj9(s).ep(0),p.as,p.e)) +p.ay=a +s=p.ax +p.ch=s.gAt(s) +s=p.ax +s.gj9(s).m() +p.ax=null +q=B.f.hS(p.CW,p.Q.gvF()) +if(p.Q.gCg()===-1||q<=p.Q.gCg())p.pI() +return}s.toString +r=p.ay +r===$&&A.b() +p.cx=A.cy(new A.b1(B.f.an(s.a-(a.a-r.a))),new A.ai8(p))}, +pI(){var s=0,r=A.a1(t.H),q,p=2,o,n=this,m,l,k,j,i +var $async$pI=A.a2(function(a,b){if(a===1){o=b +s=p}while(true)switch(s){case 0:j=n.ax +if(j!=null)j.gj9(j).m() +n.ax=null +p=4 +s=7 +return A.a7(n.Q.jp(),$async$pI) +case 7:n.ax=b +p=2 +s=6 +break +case 4:p=3 +i=o +m=A.ax(i) +l=A.aZ(i) +n.wz(A.bo("resolving an image frame"),m,n.at,!0,l) +s=1 +break +s=6 +break +case 3:s=2 +break +case 6:if(n.Q.gvF()===1){if(n.a.length===0){s=1 +break}j=n.ax +n.Ow(new A.fw(j.gj9(j).ep(0),n.as,n.e)) +j=n.ax +j.gj9(j).m() +n.ax=null +s=1 +break}n.RD() +case 1:return A.a_(q,r) +case 2:return A.Z(o,r)}}) +return A.a0($async$pI,r)}, +RD(){if(this.cy)return +this.cy=!0 +$.c_.D4(this.gab6())}, +Ow(a){this.LC(a);++this.CW}, +Z(a,b){var s,r=this +if(r.a.length===0){s=r.Q +if(s!=null)s=r.c==null||s.gvF()>1 +else s=!1}else s=!1 +if(s)r.pI() +r.a2s(0,b)}, +K(a,b){var s,r=this +r.a2t(0,b) +if(r.a.length===0){s=r.cx +if(s!=null)s.b3(0) +r.cx=null}}, +yE(){this.a2r() +if(this.x)this.z=null}} +A.ai9.prototype={ +$2(a,b){this.a.wz(A.bo("resolving an image codec"),a,this.b,!0,b)}, +$S:44} +A.ai8.prototype={ +$0(){this.a.RD()}, +$S:0} +A.Z1.prototype={} +A.Z0.prototype={} +A.LB.prototype={} +A.mX.prototype={ +j(a,b){var s=this +if(b==null)return!1 +return b instanceof A.mX&&b.a===s.a&&b.b==s.b&&b.c==s.c&&b.d===s.d&&A.dn(b.f,s.f)}, +gt(a){var s=this +return A.N(s.a,s.b,s.c,s.d,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a){return"InlineSpanSemanticsInformation{text: "+this.a+", semanticsLabel: "+A.h(this.b)+", recognizer: "+A.h(this.c)+"}"}} +A.hV.prototype={ +Ld(a){var s={} +s.a=null +this.b1(new A.afV(s,a,new A.LB())) +return s.a}, +wH(a){var s,r=new A.ck("") +this.HI(r,!0,a) +s=r.a +return s.charCodeAt(0)==0?s:s}, +ZM(){return this.wH(!0)}, +iT(a,b){var s={} +if(b<0)return null +s.a=null +this.b1(new A.afU(s,b,new A.LB())) +return s.a}, +j(a,b){if(b==null)return!1 +if(this===b)return!0 +if(J.U(b)!==A.t(this))return!1 +return b instanceof A.hV&&J.d(b.a,this.a)}, +gt(a){return J.D(this.a)}} +A.afV.prototype={ +$1(a){var s=a.Le(this.b,this.c) +this.a.a=s +return s==null}, +$S:65} +A.afU.prototype={ +$1(a){var s=a.V2(this.b,this.c) +this.a.a=s +return s==null}, +$S:65} +A.RC.prototype={ +HI(a,b,c){a.a+=A.dK(65532)}, +A3(a){a.push(B.Oi)}} +A.d8.prototype={ +aV(a,b){var s=this.a.aV(0,b) +return new A.d8(this.b.S(0,b),s)}, +dF(a,b){var s,r,q=this +if(a instanceof A.d8){s=A.aQ(a.a,q.a,b) +r=A.l8(a.b,q.b,b) +r.toString +return new A.d8(r,s)}if(a instanceof A.er){s=A.aQ(a.a,q.a,b) +return new A.h2(q.b,1-b,a.b,s)}return q.px(a,b)}, +dA(a,b){var s,r,q=this +if(a instanceof A.d8){s=A.aQ(q.a,a.a,b) +r=A.l8(q.b,a.b,b) +r.toString +return new A.d8(r,s)}if(a instanceof A.er){s=A.aQ(q.a,a.a,b) +return new A.h2(q.b,b,a.b,s)}return q.py(a,b)}, +mH(a){var s=a==null?this.a:a +return new A.d8(this.b,s)}, +fc(a,b){var s=this.b.U(b).dJ(a).dz(-this.a.gej()),r=$.W().bD() +r.ex(s) +return r}, +m8(a){return this.fc(a,null)}, +dV(a,b){var s=$.W().bD() +s.ex(this.b.U(b).dJ(a)) +return s}, +l2(a){return this.dV(a,null)}, +k8(a,b,c,d){var s=this.b +if(s.j(0,B.H))a.cB(b,c) +else a.bQ(s.U(d).dJ(b),c)}, +gir(){return!0}, +fv(a,b,c){var s,r,q,p,o=this.a +switch(o.c.a){case 0:break +case 1:s=this.b +if(o.b===0)a.bQ(s.U(c).dJ(b),o.jk()) +else{r=$.W().aj() +r.sM(0,o.a) +q=s.U(c).dJ(b) +p=q.dz(-o.gej()) +a.qN(q.dz(o.gps()),p,r)}break}}, +am(a,b){return this.fv(a,b,null)}, +j(a,b){if(b==null)return!1 +if(J.U(b)!==A.t(this))return!1 +return b instanceof A.d8&&b.a.j(0,this.a)&&b.b.j(0,this.b)}, +gt(a){return A.N(this.a,this.b,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a){return"RoundedRectangleBorder("+this.a.k(0)+", "+this.b.k(0)+")"}} +A.h2.prototype={ +aV(a,b){var s=this.a.aV(0,b) +return new A.h2(this.b.S(0,b),b,this.d,s)}, +dF(a,b){var s,r,q,p=this +if(a instanceof A.d8){s=A.aQ(a.a,p.a,b) +r=A.l8(a.b,p.b,b) +r.toString +return new A.h2(r,p.c*b,p.d,s)}if(a instanceof A.er){s=A.aQ(a.a,p.a,b) +r=p.c +return new A.h2(p.b,r+(1-r)*(1-b),a.b,s)}if(a instanceof A.h2){s=A.aQ(a.a,p.a,b) +r=A.l8(a.b,p.b,b) +r.toString +q=A.P(a.c,p.c,b) +q.toString +return new A.h2(r,q,p.d,s)}return p.px(a,b)}, +dA(a,b){var s,r,q,p=this +if(a instanceof A.d8){s=A.aQ(p.a,a.a,b) +r=A.l8(p.b,a.b,b) +r.toString +return new A.h2(r,p.c*(1-b),p.d,s)}if(a instanceof A.er){s=A.aQ(p.a,a.a,b) +r=p.c +return new A.h2(p.b,r+(1-r)*b,a.b,s)}if(a instanceof A.h2){s=A.aQ(p.a,a.a,b) +r=A.l8(p.b,a.b,b) +r.toString +q=A.P(p.c,a.c,b) +q.toString +return new A.h2(r,q,p.d,s)}return p.py(a,b)}, +ug(a){var s,r,q,p,o,n,m,l,k=this.c +if(k===0||a.c-a.a===a.d-a.b)return a +s=a.c +r=a.a +q=s-r +p=a.d +o=a.b +n=p-o +m=1-this.d +if(q")),!0,t.Q2)}if(s.e.gir())p.x=A.V(new A.R(r,new A.aAD(a),A.S(r).h("R<1,w>")),!0,t.YT) +else p.y=A.V(new A.R(r,new A.aAE(p,a,b),A.S(r).h("R<1,tz>")),!0,t.ke)}r=s.e +if(!r.gir())q=p.r!=null||p.w!=null +else q=!1 +if(q)p.e=r.dV(a,b) +if(s.c!=null)p.f=r.fc(a,b) +p.c=a +p.d=b}, +afX(a,b,c){var s,r,q,p,o=this +if(o.w!=null){s=o.b.e +if(s.gir()){r=0 +while(!0){q=o.w +q.toString +if(!(r>>0)+r+-56613888 +break $label0$0}if(56320===s){r=r.iT(0,a-1) +r.toString +r=(r<<10>>>0)+q+-56613888 +break $label0$0}r=q +break $label0$0}return r}, +aiC(a,b){var s,r=this.a8h(b?a-1:a),q=b?a:a-1,p=this.a.iT(0,q) +if(!(r==null||p==null||A.aO2(r)||A.aO2(p))){q=A.c3("[\\p{Space_Separator}\\p{Punctuation}]",!0,!0) +s=A.dK(r) +q=!q.b.test(s)}else q=!0 +return q}, +gYb(){var s=this,r=s.c +if(r===$){r!==$&&A.ay() +r=s.c=new A.a3T(s.gaiB(),s)}return r}} +A.a3T.prototype={ +fC(a){var s +if(a<0)return null +s=this.b.fC(a) +return s==null||this.a.$2(s,!1)?s:this.fC(s-1)}, +fE(a){var s=this.b.fE(Math.max(a,0)) +return s==null||this.a.$2(s,!0)?s:this.fE(s)}} +A.aBd.prototype={ +x4(a){var s +switch(a.a){case 0:s=this.a +s=s.gqd(s) +break +case 1:s=this.a +s=s.gXi(s) +break +default:s=null}return s}} +A.aBh.prototype={ +gkP(){var s,r,q=this.c +if(q===0)return B.e +s=this.a +r=s.a +if(!isFinite(r.gbB(r)))return B.V0 +r=this.b +s=s.a +return new A.k(q*(r-s.gbB(s)),0)}, +ahg(a,b,c){var s,r,q=this,p=q.a,o=A.aOH(a,b,c,p) +if(o===q.b)return!0 +if(!isFinite(q.gkP().a)){s=p.a +s=!isFinite(s.gbB(s))&&isFinite(a)}else s=!1 +if(s)return!1 +r=p.a.glM() +p=p.a +if(p.gbB(p)-r>-1e-10&&b-r>-1e-10){q.b=o +return!0}return!1}} +A.uQ.prototype={} +A.uM.prototype={} +A.nA.prototype={ +a8(){var s=this.b +if(s!=null)s.a.a.m() +this.b=null}, +scV(a,b){var s,r,q,p=this +if(J.d(p.f,b))return +s=p.f +s=s==null?null:s.a +r=b==null +if(!J.d(s,r?null:b.a)){s=p.CW +if(s!=null)s.m() +p.CW=null}if(r)q=B.b8 +else{s=p.f +s=s==null?null:s.b4(0,b) +q=s==null?B.b8:s}p.f=b +p.r=null +s=q.a +if(s>=3)p.a8() +else if(s>=2)p.c=!0}, +gkQ(){var s=this.r +if(s==null){s=this.f +s=s==null?null:s.wH(!1) +this.r=s}return s==null?"":s}, +spb(a,b){if(this.w===b)return +this.w=b +this.a8()}, +sbS(a){var s,r=this +if(r.x===a)return +r.x=a +r.a8() +s=r.CW +if(s!=null)s.m() +r.CW=null}, +sbK(a){var s,r=this +if(a.j(0,r.y))return +r.y=a +r.a8() +s=r.CW +if(s!=null)s.m() +r.CW=null}, +saoY(a){if(this.z==a)return +this.z=a +this.a8()}, +srt(a,b){if(J.d(this.Q,b))return +this.Q=b +this.a8()}, +sru(a){if(this.as==a)return +this.as=a +this.a8()}, +slb(a){if(J.d(this.at,a))return +this.at=a +this.a8()}, +srL(a){if(this.ax===a)return +this.ax=a}, +gXr(){var s,r,q,p=this.b +if(p==null)return null +s=p.gkP() +if(!isFinite(s.a)||!isFinite(s.b))return A.a([],t.Lx) +r=p.d +if(r==null)r=p.d=p.a.a.wZ() +if(s.j(0,B.e))return r +q=A.S(r).h("R<1,eE>") +return A.V(new A.R(r,new A.aqV(s),q),!1,q.h("af.E"))}, +nA(a){if(a==null||a.length===0||A.dn(a,this.ch))return +this.ch=a +this.a8()}, +O7(a){var s,r,q,p,o,n=this,m=null,l=n.f.a +if(l==null)l=m +else{s=n.w +r=n.x +if(r==null)r=a +q=n.y +p=n.as +o=n.ay +q=l.a0a(n.z,n.Q,p,n.at,s,r,o,q) +l=q}if(l==null){l=n.w +s=n.x +if(s==null)s=a +r=n.y.aV(0,14) +q=n.as +p=n.ay +p=A.aj7(n.z,m,r,m,m,m,n.Q,q,m,l,s,p) +l=p}return l}, +a8T(){return this.O7(null)}, +gda(){var s,r,q=this,p=q.CW +if(p==null){p=q.O7(B.Z) +s=$.W().v3(p) +p=q.f +if(p==null)r=null +else{p=p.a +r=p==null?null:p.xa(q.y)}if(r!=null)s.p0(r) +s.qc(" ") +p=s.bk() +p.fQ(B.vN) +q.CW=p}return p.gbh(p)}, +O6(a){var s=this,r=s.a8T(),q=$.W().v3(r) +r=s.y +a.zV(q,s.ch,r) +s.c=!1 +return q.bk()}, +w1(a,b){var s,r,q,p,o,n,m,l,k=this,j=k.b,i=j==null +if(!i&&j.ahg(b,a,k.ax))return +s=k.f +if(s==null)throw A.c(A.Q("TextPainter.text must be set to a non-null value before using the TextPainter.")) +r=k.x +if(r==null)throw A.c(A.Q("TextPainter.textDirection must be set to a non-null value before using the TextPainter.")) +q=A.aNB(k.w,r) +if(!(!isFinite(a)&&q!==0))p=a +else p=i?null:j.a.a.glM() +o=p==null +k.d=o?a:p +n=i?null:j.a.a +if(n==null)n=k.O6(s) +n.fQ(new A.pi(k.d)) +i=new A.aBd(n) +m=A.aOH(b,a,k.ax,i) +if(o&&isFinite(b)){l=i.a.glM() +n.fQ(new A.pi(l)) +k.d=l}k.b=new A.aBh(i,m,q)}, +Bk(a){return this.w1(a,0)}, +w0(){return this.w1(1/0,0)}, +am(a,b){var s,r,q,p=this,o=p.b +if(o==null)throw A.c(A.Q("TextPainter.paint called when text geometry was not yet calculated.\nPlease call layout() before paint() to position the text before painting it.")) +if(!isFinite(o.gkP().a)||!isFinite(o.gkP().b))return +if(p.c){s=o.a +r=s.a +q=p.f +q.toString +q=p.O6(q) +q.fQ(new A.pi(p.d)) +s.a=q +r.m()}a.lw(o.a.a,b.R(0,o.gkP()))}, +L5(a){var s=this.f.iT(0,a) +if(s==null)return null +return(s&64512)===55296?a+2:a+1}, +L6(a){var s=a-1,r=this.f.iT(0,s) +if(r==null)return null +return(r&64512)===56320?a-2:s}, +P5(a){var s,r,q,p,o,n,m,l,k,j=this,i=j.gkQ().length +if(i===0||a>i)return null +s=B.d.iT(j.gkQ(),Math.max(0,a-1)) +r=s&64512 +q=r===55296||r===56320||j.f.iT(0,a)===8205||s===8207||s===8206 +p=q?2:1 +o=A.a([],t.Lx) +for(r=-i,n=!q,m=s===10;o.length===0;){l=a-p +o=j.b.a.a.CI(Math.max(0,l),a,B.mW) +if(o.length===0){if(n&&m)break +if(l>>0,n=!q;o.length===0;){m=a+p +o=this.b.a.a.CI(a,m,B.mW) +if(o.length===0){if(n)break +if(m>=r)break +p*=2 +continue}l=B.b.gL(o).e===B.q?B.b.gL(o):B.b.gO(o) +r=l.e +n=r===B.q?l.a:l.c +k=l.b +return new A.uQ(new A.k(n,k),r,l.d-k)}return null}, +l1(a,b){var s,r,q,p,o,n,m,l,k,j,i=this,h=null,g=i.b +g.toString +s=a.a<0?B.BB:i.NS(a) +$label0$0:{r=A.bn("#0#2",new A.aqS(s)) +q=A.bn("#0#4",new A.aqT(s)) +p=A.bn("#0#7",new A.aqU(s)) +if(s instanceof A.uM)if(typeof r.T()=="number"){o=r.T() +n=!0}else{o=h +n=!1}else{o=h +n=!1}if(n){n=i.w +m=i.x +m.toString +l=A.aNB(n,m) +return new A.k(l===0?0:l*g.b,o)}n=s instanceof A.uQ +if(n)if(B.q===q.T())if(p.T() instanceof A.k){k=p.T() +m=!0}else{k=h +m=!1}else{k=h +m=!1}else{k=h +m=!1}if(m){j=k +break $label0$0}if(n)if(B.Z===q.T())if(p.T() instanceof A.k){k=p.T() +n=!0}else{k=h +n=!1}else{k=h +n=!1}else{k=h +n=!1}j=n?new A.k(k.a-(b.c-b.a),k.b):h}return new A.k(A.O(j.a+g.gkP().a,0,g.b),j.b+g.gkP().b)}, +L1(a,b){var s,r,q,p,o=null +if(a.a<0)return o +s=this.NS(a) +r=A.bn("#0#2",new A.aqR(s)) +$label0$0:{if(s instanceof A.uQ)if(typeof r.T()=="number"){q=r.T() +p=!0}else{q=o +p=!1}else{q=o +p=!1}if(p){p=q +break $label0$0}if(s instanceof A.uM){p=o +break $label0$0}p=o}return p}, +NS(a){var s,r,q=this,p=q.b +if(a.j(0,p.f)){s=q.cx +s===$&&A.b() +return s}r=a.a +switch(a.b.a){case 0:s=q.P5(r) +if(s==null)s=q.P4(r) +break +case 1:s=q.P4(r) +if(s==null)s=q.P5(r) +break +default:s=null}p.f=a +return q.cx=s==null?B.BB:s}, +pf(a,b,c){var s,r,q=this.b,p=q.gkP() +if(!isFinite(p.a)||!isFinite(p.b))return A.a([],t.Lx) +s=q.a.a.x_(a.a,a.b,b,c) +if(p.j(0,B.e))r=s +else{r=A.S(s).h("R<1,eE>") +r=A.V(new A.R(s,new A.aqQ(p),r),!1,r.h("af.E"))}return r}, +l0(a){return this.pf(a,B.e8,B.cO)}, +eh(a){var s=this.b +return s.a.a.eh(a.Y(0,s.gkP()))}, +qx(){var s,r,q=this.b,p=q.gkP() +if(!isFinite(p.a)||!isFinite(p.b))return B.Ql +s=q.e +if(s==null){s=q.a.a.qx() +q.e=s}if(p.j(0,B.e))r=s +else{r=A.S(s).h("R<1,p4>") +r=A.V(new A.R(s,new A.aqP(p),r),!1,r.h("af.E"))}return r}, +m(){var s=this,r=s.CW +if(r!=null)r.m() +s.CW=null +r=s.b +if(r!=null)r.a.a.m() +s.f=s.b=null}} +A.aqV.prototype={ +$1(a){return A.aNC(a,this.a)}, +$S:98} +A.aqI.prototype={ +$0(){return this.a.a}, +$S:393} +A.aqK.prototype={ +$0(){return this.a.b}, +$S:211} +A.aqJ.prototype={ +$0(){return B.az===this.a.T()}, +$S:5} +A.aqL.prototype={ +$0(){return B.q===this.a.T()}, +$S:5} +A.aqM.prototype={ +$0(){return B.Z===this.a.T()}, +$S:5} +A.aqN.prototype={ +$0(){return B.iy===this.a.T()}, +$S:5} +A.aqO.prototype={ +$0(){return B.fr===this.a.T()}, +$S:5} +A.aqS.prototype={ +$0(){return t.Wt.a(this.a).a}, +$S:72} +A.aqT.prototype={ +$0(){return t.YL.a(this.a).b}, +$S:211} +A.aqU.prototype={ +$0(){return t.YL.a(this.a).a}, +$S:237} +A.aqR.prototype={ +$0(){return t.YL.a(this.a).c}, +$S:72} +A.aqQ.prototype={ +$1(a){return A.aNC(a,this.a)}, +$S:98} +A.aqP.prototype={ +$1(a){var s=this.a,r=a.gX8(),q=a.gUv(),p=a.gI5(),o=a.ga_0(),n=a.gbh(a),m=a.gbB(a),l=a.gjb(a),k=a.gkt(),j=a.gJq(a) +return $.W().Vy(q,k+s.b,p,r,n,l+s.a,j,o,m)}, +$S:395} +A.fl.prototype={ +aV(a,b){return b*this.a}, +V_(a,b,c){var s=this.a,r=A.O(s,c,b) +return r===s?this:new A.fl(r)}, +aml(a,b){return this.V_(a,b,0)}, +j(a,b){if(b==null)return!1 +if(this===b)return!0 +return b instanceof A.fl&&b.a===this.a}, +gt(a){return B.c.gt(this.a)}, +k(a){var s=this.a +return s===1?"no scaling":"linear ("+A.h(s)+"x)"}, +$iGg:1, +gCn(){return this.a}} +A.kF.prototype={ +gHY(a){return this.e}, +gCB(){return!0}, +j7(a,b){var s +if(t.pY.b(a)){s=this.d +if(s!=null)s.mC(a)}}, +zV(a,b,c){var s,r,q,p,o,n=this.a,m=n!=null +if(m)a.p0(n.xa(c)) +n=this.b +if(n!=null)try{a.qc(n)}catch(q){n=A.ax(q) +if(n instanceof A.jZ){s=n +r=A.aZ(q) +A.d4(new A.bG(s,r,"painting library",A.bo("while building a TextSpan"),null,!1)) +a.qc("\ufffd")}else throw q}p=this.c +if(p!=null)for(n=p.length,o=0;oq.a)q=p +if(q===B.b8)return q}s=n.c +if(s!=null)for(r=b.c,o=0;oq.a)q=p +if(q===B.b8)return q}return q}, +j(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +if(J.U(b)!==A.t(s))return!1 +if(!s.M6(0,b))return!1 +return b instanceof A.kF&&b.b==s.b&&b.d==s.d&&s.e.j(0,b.e)&&A.dn(b.c,s.c)}, +gt(a){var s=this,r=null,q=A.hV.prototype.gt.call(s,s),p=s.c +p=p==null?r:A.bv(p) +return A.N(q,s.b,s.d,r,r,r,s.e,p,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +dd(){return"TextSpan"}, +$iah:1, +$ifB:1, +gBF(){return null}, +gBG(){return null}} +A.p.prototype={ +gkD(){var s,r=this.e +if(!(this.f==null))if(r==null)r=null +else{s=A.S(r).h("R<1,f>") +s=A.V(new A.R(r,new A.aqY(this),s),!0,s.h("af.E")) +r=s}return r}, +gnT(a){var s,r=this.f +if(r!=null){s=this.d +return s==null?null:B.d.bL(s,("packages/"+r+"/").length)}return this.d}, +uX(a3,a4,a5,a6,a7,a8,a9,b0,b1,b2,b3,b4,b5,b6,b7,b8,b9,c0,c1,c2,c3,c4,c5,c6,c7){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1=this,a2=a1.ay +if(a2==null&&b8==null)s=a5==null?a1.b:a5 +else s=null +r=a1.ch +if(r==null&&a3==null)q=a4==null?a1.c:a4 +else q=null +p=b4==null?a1.r:b4 +o=b7==null?a1.w:b7 +n=b5==null?a1.x:b5 +m=c1==null?a1.y:c1 +l=c7==null?a1.z:c7 +k=c6==null?a1.Q:c6 +j=b9==null?a1.as:b9 +i=c0==null?a1.at:c0 +a2=b8==null?a2:b8 +r=a3==null?r:a3 +h=c5==null?a1.dy:c5 +g=b6==null?a1.fx:b6 +f=a7==null?a1.CW:a7 +e=a8==null?a1.cx:a8 +d=a9==null?a1.cy:a9 +c=b0==null?a1.db:b0 +b=b1==null?a1.gnT(a1):b1 +a=b2==null?a1.e:b2 +a0=c4==null?a1.f:c4 +return A.bL(r,q,s,null,f,e,d,c,b,a,a1.fr,p,n,g,o,a2,j,a1.a,i,m,a1.ax,a1.fy,a0,h,k,l)}, +ey(a){return this.uX(null,null,a,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null)}, +Vp(a,b){return this.uX(null,null,a,null,null,null,null,null,null,null,null,b,null,null,null,null,null,null,null,null,null,null,null,null,null)}, +ane(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r){return this.uX(a,b,c,null,d,e,f,g,null,null,h,i,j,null,k,l,m,null,n,o,null,null,p,q,r)}, +anj(a,b){return this.uX(null,null,null,null,null,null,null,null,a,b,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null)}, +h4(a,b,c,d,e,a0,a1,a2,a3){var s,r,q,p,o,n,m,l,k,j,i,h=this,g=null,f=h.ay +if(f==null)s=a==null?h.b:a +else s=g +r=h.ch +if(r==null)q=h.c +else q=g +p=h.gnT(h) +o=h.r +o=o==null?g:o*a2+a1 +n=h.w +n=n==null?g:B.kE[B.f.i9(n.a,0,8)] +m=h.y +m=m==null?g:m+0 +l=h.z +l=l==null?g:l+0 +k=h.as +k=k==null?g:k+0 +j=c==null?h.cx:c +i=h.db +i=i==null?g:i+0 +return A.bL(r,q,s,g,h.CW,j,h.cy,i,p,h.e,h.fr,o,h.x,h.fx,n,f,k,h.a,h.at,m,h.ax,h.fy,h.f,h.dy,h.Q,l)}, +cl(a4){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,a2,a3 +if(a4==null)return this +if(!a4.a)return a4 +s=a4.b +r=a4.c +q=a4.r +p=a4.w +o=a4.x +n=a4.y +m=a4.z +l=a4.Q +k=a4.as +j=a4.at +i=a4.ax +h=a4.ay +g=a4.ch +f=a4.dy +e=a4.fr +d=a4.fx +c=a4.CW +b=a4.cx +a=a4.cy +a0=a4.db +a1=a4.gnT(a4) +a2=a4.e +a3=a4.f +return this.uX(g,r,s,null,c,b,a,a0,a1,a2,e,q,o,d,p,h,k,j,n,i,a4.fy,a3,f,l,m)}, +xa(a){var s,r,q,p,o,n,m,l,k=this,j=null,i=k.r +$label0$0:{if(i==null){s=j +break $label0$0}s=a.j(0,B.ab) +if(s){s=i +break $label0$0}s=a.aV(0,i) +break $label0$0}r=k.gkD() +q=new A.dj(k.ch,k.c) +p=A.bn("#1#1",new A.aqZ(q)) +o=A.bn("#1#2",new A.ar_(q)) +$label1$1:{if(t.Q2.b(p.T())){n=p.T() +m=!0}else{n=j +m=!1}if(m){m=n +break $label1$1}if(o.T() instanceof A.m){l=o.T() +m=!0}else{l=j +m=!1}if(m){m=$.W().aj() +m.sM(0,l) +break $label1$1}m=j +break $label1$1}return A.aH8(m,k.b,k.CW,k.cx,k.cy,k.db,k.d,r,k.fr,s,k.x,k.fx,k.w,k.ay,k.as,k.at,k.y,k.ax,k.dy,k.Q,k.z)}, +a0a(a,b,c,d,e,a0,a1,a2){var s,r,q,p,o,n,m,l,k,j=this,i=null,h=j.at,g=h==null?i:new A.Ga(h),f=j.r +f=a2.aV(0,f==null?14:f) +if(d==null)s=i +else{s=d.a +r=d.gkD() +q=d.d +$label0$0:{if(q==null){p=i +break $label0$0}p=a2.aV(0,q) +break $label0$0}o=d.e +n=d.x +m=d.r +l=d.w +k=d.y +n=$.W().VG(s,r,p,l,m,k,o,n,i) +s=n}return A.aj7(a,j.d,f,j.x,j.w,j.as,b,c,s,e,a0,g)}, +b4(a,b){var s=this +if(s===b)return B.cI +if(s.a!==b.a||s.d!=b.d||s.r!=b.r||s.w!=b.w||s.x!=b.x||s.y!=b.y||s.z!=b.z||s.Q!=b.Q||s.as!=b.as||s.at!=b.at||s.ay!=b.ay||s.ch!=b.ch||!A.dn(s.dy,b.dy)||!A.dn(s.fr,b.fr)||!A.dn(s.fx,b.fx)||!A.dn(s.gkD(),b.gkD())||!1)return B.b8 +if(!J.d(s.b,b.b)||!J.d(s.c,b.c)||!J.d(s.CW,b.CW)||!J.d(s.cx,b.cx)||s.cy!=b.cy||s.db!=b.db)return B.Wn +return B.cI}, +j(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +if(J.U(b)!==A.t(s))return!1 +return b instanceof A.p&&b.a===s.a&&J.d(b.b,s.b)&&J.d(b.c,s.c)&&b.r==s.r&&b.w==s.w&&b.x==s.x&&b.y==s.y&&b.z==s.z&&b.Q==s.Q&&b.as==s.as&&b.at==s.at&&b.ay==s.ay&&b.ch==s.ch&&A.dn(b.dy,s.dy)&&A.dn(b.fr,s.fr)&&A.dn(b.fx,s.fx)&&J.d(b.CW,s.CW)&&J.d(b.cx,s.cx)&&b.cy==s.cy&&b.db==s.db&&b.d==s.d&&A.dn(b.gkD(),s.gkD())&&b.f==s.f&&!0}, +gt(a){var s,r=this,q=null,p=r.gkD(),o=p==null?q:A.bv(p),n=A.N(r.cy,r.db,r.d,o,r.f,r.fy,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a),m=r.dy,l=r.fx +o=m==null?q:A.bv(m) +s=l==null?q:A.bv(l) +return A.N(r.a,r.b,r.c,r.r,r.w,r.x,r.y,r.z,r.Q,r.as,r.at,r.ax,r.ay,r.ch,o,q,s,r.CW,r.cx,n)}, +dd(){return"TextStyle"}, +ghf(a){return this.w}, +gjN(a){return this.x}} +A.aqY.prototype={ +$1(a){var s=this.a.f +return"packages/"+(s==null?A.bQ(s):s)+"/"+a}, +$S:66} +A.aqZ.prototype={ +$0(){return this.a.a}, +$S:396} +A.ar_.prototype={ +$0(){return this.a.b}, +$S:216} +A.a3a.prototype={} +A.P_.prototype={ +a6c(a,b,c,d,e){var s=this +s.r=A.aPH(new A.ady(s),s.gIq(s),0,10,0)}, +eG(a,b){var s,r,q=this +if(b>q.r)return q.gAN() +s=q.e +r=q.c +return q.d+s*Math.pow(q.b,b)/r-s/r-q.f/2*b*b}, +fp(a,b){var s=this +if(b>s.r)return 0 +return s.e*Math.pow(s.b,b)-s.f*b}, +gAN(){var s=this +if(s.f===0)return s.d-s.e/s.c +return s.eG(0,s.r)}, +ZE(a){var s,r=this,q=r.d +if(a===q)return 0 +s=r.e +if(s!==0)if(s>0)q=ar.gAN() +else q=a>q||a=r.b&&r.c>=r.d +else q=!0 +if(q){n.ff(0) +n=o.cu +o.id=n.a=n.b=new A.G(A.O(0,r.a,r.b),A.O(0,r.c,r.d)) +o.jL=B.zv +n=o.fr$ +if(n!=null)n.fQ(r) +return}s.bJ(r,!0) +switch(o.jL.a){case 0:n=o.cu +s=o.fr$ +n.a=n.b=s.gv(s) +o.jL=B.lm +break +case 1:s=o.cu +q=s.b +p=o.fr$ +if(!J.d(q,p.gv(p))){s.a=o.gv(o) +q=o.fr$ +s.b=q.gv(q) +o.dN=0 +n.kE(0,0) +o.jL=B.Wk}else{q=n.x +q===$&&A.b() +if(q===n.b){n=o.fr$ +s.a=s.b=n.gv(n)}else{s=n.r +if(!(s!=null&&s.a!=null))n.c7(0)}}break +case 2:s=o.cu +q=s.b +p=o.fr$ +if(!J.d(q,p.gv(p))){q=o.fr$ +s.a=s.b=q.gv(q) +o.dN=0 +n.kE(0,0) +o.jL=B.Wl}else{o.jL=B.lm +s=n.r +if(!(s!=null&&s.a!=null))n.c7(0)}break +case 3:s=o.cu +q=s.b +p=o.fr$ +if(!J.d(q,p.gv(p))){q=o.fr$ +s.a=s.b=q.gv(q) +o.dN=0 +n.kE(0,0)}else{n.ff(0) +o.jL=B.lm}break}n=o.cu +s=o.d7 +s===$&&A.b() +s=n.a2(0,s.gl(s)) +s.toString +o.id=r.bf(s) +o.zJ() +if(o.gv(o).a=a.b&&a.c>=a.d +else s=!0 +if(s)return new A.G(A.O(0,a.a,a.b),A.O(0,a.c,a.d)) +r=p.ke(a) +switch(q.jL.a){case 0:return a.bf(r) +case 1:if(!J.d(q.cu.b,r))return a.bf(q.gv(q)) +else{p=q.cn +p===$&&A.b() +s=p.x +s===$&&A.b() +if(s===p.b)return a.bf(r)}break +case 3:case 2:if(!J.d(q.cu.b,r))return a.bf(r) +break}p=q.d7 +p===$&&A.b() +p=q.cu.a2(0,p.gl(p)) +p.toString +return a.bf(p)}, +am(a,b){var s,r,q,p=this +if(p.fr$!=null){s=p.cH +s===$&&A.b() +s=s&&p.on!==B.o}else s=!1 +r=p.ha +if(s){s=p.gv(p) +q=p.cx +q===$&&A.b() +r.sar(0,a.lQ(q,b,new A.w(0,0,0+s.a,0+s.b),A.tU.prototype.gf9.call(p),p.on,r.a))}else{r.sar(0,null) +p.a3u(a,b)}}, +m(){var s,r=this +r.ha.sar(0,null) +s=r.cn +s===$&&A.b() +s.m() +s=r.d7 +s===$&&A.b() +s.m() +r.eK()}} +A.akS.prototype={ +$0(){var s=this.a,r=s.cn +r===$&&A.b() +r=r.x +r===$&&A.b() +if(r!==s.dN)s.a8()}, +$S:0} +A.xy.prototype={ +gC_(){var s,r=this,q=r.ch$ +if(q===$){s=A.aZ_(new A.am4(r),new A.am5(r),new A.am6(r)) +q!==$&&A.ay() +r.ch$=s +q=s}return q}, +anA(a){var s,r=$.c4().d +if(r==null){s=self.window.devicePixelRatio +r=s===0?1:s}return new A.GG(a.go.gjd().eH(0,r),r)}, +IR(){var s,r,q,p,o,n,m +for(s=this.cy$,s=s.gaT(s),r=A.o(s),r=r.h("@<1>").N(r.z[1]),s=new A.bN(J.ap(s.a),s.b,r.h("bN<1,2>")),r=r.z[1],q=!1;s.q();){p=s.a +if(p==null)p=r.a(p) +q=q||p.fr$!=null +o=p.go +n=$.c4().d +if(n==null){m=self.window.devicePixelRatio +n=m===0?1:m}m=o.x +if(m==null){m=o.r +m===$&&A.b() +m=o.x=m.o8()}p.sqy(new A.GG(new A.G(m.a/n,m.b/n),n))}if(q)this.a0x()}, +IZ(){}, +IU(){}, +ary(){var s,r=this.ay$ +if(r!=null){r.fy$=$.aO() +r.fx$=0}r=t.S +s=$.aO() +this.ay$=new A.Qv(new A.am3(this),new A.ahZ(B.bK,A.A(r,t.ZA)),A.A(r,t.xg),s)}, +adM(a){B.U_.mq("first-frame",null,!1,t.H)}, +act(a){this.Io() +this.ahJ()}, +ahJ(){$.c_.rx$.push(new A.am2(this))}, +Ui(){--this.dx$ +if(!this.dy$)this.Lp()}, +Io(){var s,r,q=this,p=q.cx$ +p===$&&A.b() +p.WM() +q.cx$.WL() +q.cx$.WN() +if(q.dy$||q.dx$===0){for(p=q.cy$,p=p.gaT(p),s=A.o(p),s=s.h("@<1>").N(s.z[1]),p=new A.bN(J.ap(p.a),p.b,s.h("bN<1,2>")),s=s.z[1];p.q();){r=p.a;(r==null?s.a(r):r).amD()}q.cx$.WO() +q.dy$=!0}}, +$iah:1, +$ifi:1} +A.am4.prototype={ +$0(){var s=this.a.gC_().e +if(s!=null)s.xg()}, +$S:0} +A.am6.prototype={ +$1(a){var s +if(this.a.gC_().e!=null){s=$.eP;(s==null?$.eP=A.mJ():s).avX(a)}}, +$S:210} +A.am5.prototype={ +$0(){var s=this.a.gC_().e +if(s!=null)s.o4()}, +$S:0} +A.am3.prototype={ +$2(a,b){var s=A.aeY() +this.a.vM(s,a,b) +return s}, +$S:398} +A.am2.prototype={ +$1(a){this.a.ay$.avP()}, +$S:3} +A.Wp.prototype={} +A.Xu.prototype={} +A.a1k.prototype={ +K2(){if(this.B)return +this.a3z() +this.B=!0}, +xg(){this.o4() +this.a3l()}, +m(){this.saP(null)}} +A.az.prototype={ +uY(a,b,c,d){var s=this,r=d==null?s.a:d,q=b==null?s.b:b,p=c==null?s.c:c +return new A.az(r,q,p,a==null?s.d:a)}, +ano(a,b){return this.uY(null,null,a,b)}, +ann(a,b){return this.uY(null,a,null,b)}, +anm(a,b){return this.uY(a,null,b,null)}, +Vi(a){return this.uY(a,null,null,null)}, +an4(a){return this.uY(null,a,null,null)}, +VX(a){var s=this,r=a.gdw(),q=a.gbO(a)+a.gbX(a),p=Math.max(0,s.a-r),o=Math.max(0,s.c-q) +return new A.az(p,Math.max(p,s.b-r),o,Math.max(o,s.d-q))}, +qV(a){var s=this,r=a.a,q=a.b,p=a.c,o=a.d +return new A.az(A.O(s.a,r,q),A.O(s.b,r,q),A.O(s.c,p,o),A.O(s.d,p,o))}, +Kt(a,b){var s,r,q=this,p=b==null,o=q.a,n=p?o:A.O(b,o,q.b),m=q.b +p=p?m:A.O(b,o,m) +o=a==null +m=q.c +s=o?m:A.O(a,m,q.d) +r=q.d +return new A.az(n,p,s,o?r:A.O(a,m,r))}, +Co(a){return this.Kt(a,null)}, +Ks(a){return this.Kt(null,a)}, +gWJ(){var s=this +return new A.az(s.c,s.d,s.a,s.b)}, +bf(a){var s=this +return new A.G(A.O(a.a,s.a,s.b),A.O(a.b,s.c,s.d))}, +uU(a){var s,r,q,p,o,n=this,m=n.a,l=n.b +if(m>=l&&n.c>=n.d)return new A.G(A.O(0,m,l),A.O(0,n.c,n.d)) +s=a.a +r=a.b +q=s/r +if(s>l){r=l/q +s=l}p=n.d +if(r>p){s=p*q +r=p}if(s=s.b&&s.c>=s.d}, +S(a,b){var s=this +return new A.az(s.a*b,s.b*b,s.c*b,s.d*b)}, +garW(){var s=this,r=s.a +if(r>=0)if(r<=s.b){r=s.c +r=r>=0&&r<=s.d}else r=!1 +else r=!1 +return r}, +j(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +if(J.U(b)!==A.t(s))return!1 +return b instanceof A.az&&b.a===s.a&&b.b===s.b&&b.c===s.c&&b.d===s.d}, +gt(a){var s=this +return A.N(s.a,s.b,s.c,s.d,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a){var s,r=this,q=r.garW()?"":"; NOT NORMALIZED",p=r.a +if(p===1/0&&r.c===1/0)return"BoxConstraints(biggest"+q+")" +if(p===0&&r.b===1/0&&r.c===0&&r.d===1/0)return"BoxConstraints(unconstrained"+q+")" +s=new A.a7S() +return"BoxConstraints("+s.$3(p,r.b,"w")+", "+s.$3(r.c,r.d,"h")+q+")"}} +A.a7S.prototype={ +$3(a,b,c){if(a===b)return c+"="+B.c.af(a,1) +return B.c.af(a,1)+"<="+c+"<="+B.c.af(b,1)}, +$S:399} +A.mx.prototype={ +uD(a,b,c){if(c!=null){c=A.tn(A.aGG(c)) +if(c==null)return!1}return this.Hb(a,b,c)}, +mD(a,b,c){var s,r=b==null,q=r?c:c.Y(0,b) +r=!r +if(r)this.c.push(new A.zg(new A.k(-b.a,-b.b))) +s=a.$2(this,q) +if(r)this.C4() +return s}, +Hb(a,b,c){var s,r=c==null,q=r?b:A.c7(c,b) +r=!r +if(r)this.c.push(new A.Is(c)) +s=a.$2(this,q) +if(r)this.C4() +return s}, +Ug(a,b,c){var s,r=this +if(b!=null)r.c.push(new A.zg(new A.k(-b.a,-b.b))) +else{c.toString +c=A.tn(A.aGG(c)) +c.toString +r.c.push(new A.Is(c))}s=a.$1(r) +r.C4() +return s}, +al2(a,b){return this.Ug(a,null,b)}, +al1(a,b){return this.Ug(a,b,null)}} +A.qV.prototype={ +k(a){return"#"+A.bh(this.a)+"@"+this.c.k(0)}} +A.ha.prototype={ +k(a){return"offset="+this.a.k(0)}} +A.Bd.prototype={} +A.Zb.prototype={ +I(){return"_IntrinsicDimension."+this.b}} +A.I9.prototype={ +j(a,b){if(b==null)return!1 +return b instanceof A.I9&&b.a===this.a&&b.b===this.b}, +gt(a){return A.N(this.a,this.b,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}} +A.H.prototype={ +ew(a){if(!(a.b instanceof A.ha))a.b=new A.ha(B.e)}, +d2(a,b,c){var s=this.fx +if(s==null)s=this.fx=A.A(t.oc,t.i) +return s.bm(0,new A.I9(a,b),new A.al6(c,b))}, +bp(a){return 0}, +bo(a){return 0}, +ke(a){var s=this.fy +if(s==null)s=this.fy=A.A(t.k,t.FW) +return s.bm(0,a,new A.al8(this,a))}, +c5(a){return B.Q}, +gv(a){var s=this.id +return s==null?A.T(A.Q("RenderBox was not laid out: "+A.t(this).k(0)+"#"+A.bh(this))):s}, +gnz(){var s=this.gv(this) +return new A.w(0,0,0+s.a,0+s.b)}, +CM(a,b){var s=null +try{s=this.m7(a)}finally{}if(s==null&&!b)return this.gv(this).b +return s}, +x4(a){return this.CM(a,!1)}, +m7(a){var s=this.k1 +if(s==null)s=this.k1=A.A(t.W7,t.PM) +return s.bm(0,a,new A.al7(this,a))}, +h6(a){return null}, +gW(){return t.k.a(A.r.prototype.gW.call(this))}, +a8c(){var s,r=this,q=r.k1,p=q==null +if(!(!p&&q.a!==0)){s=r.fx +if(!(s!=null&&s.a!==0)){s=r.fy +s=s!=null&&s.a!==0}else s=!0}else s=!0 +if(s){if(!p)q.a0(0) +q=r.fx +if(q!=null)q.a0(0) +q=r.fy +if(q!=null)q.a0(0) +return!0}return!1}, +a8(){var s=this +if(s.a8c()&&s.gaU(s) instanceof A.r){s.w7() +return}s.a3j()}, +bJ(a,b){var s,r=this +if(r.id!=null)if(!a.j(0,t.k.a(A.r.prototype.gW.call(r)))){s=r.k1 +s=s!=null&&s.a!==0}else s=!1 +else s=!1 +if(s){s=r.k1 +if(s!=null)s.a0(0)}r.a3i(a,b)}, +fQ(a){return this.bJ(a,!1)}, +rC(){this.id=this.c5(t.k.a(A.r.prototype.gW.call(this)))}, +bA(){}, +cD(a,b){var s=this +if(s.id.p(0,b))if(s.cE(a,b)||s.hF(b)){a.D(0,new A.qV(b,s)) +return!0}return!1}, +hF(a){return!1}, +cE(a,b){return!1}, +dj(a,b){var s,r=a.b +r.toString +s=t.r.a(r).a +b.au(0,s.a,s.b)}, +fZ(a){var s,r,q,p,o,n=this.br(0,null) +if(n.fL(n)===0)return B.e +s=new A.eG(new Float64Array(3)) +s.l7(0,0,1) +r=new A.eG(new Float64Array(3)) +r.l7(0,0,0) +q=n.BZ(r) +r=new A.eG(new Float64Array(3)) +r.l7(0,0,1) +p=n.BZ(r).Y(0,q) +r=new A.eG(new Float64Array(3)) +r.l7(a.a,a.b,0) +o=n.BZ(r) +r=o.Y(0,p.kg(s.Wd(o)/s.Wd(p))).a +return new A.k(r[0],r[1])}, +glP(){var s=this.gv(this) +return new A.w(0,0,0+s.a,0+s.b)}, +j7(a,b){this.a3h(a,b)}} +A.al6.prototype={ +$0(){return this.a.$1(this.b)}, +$S:72} +A.al8.prototype={ +$0(){return this.a.c5(this.b)}, +$S:215} +A.al7.prototype={ +$0(){return this.a.h6(this.b)}, +$S:81} +A.d7.prototype={ +VU(a){var s,r,q,p=this.a4$ +for(s=A.o(this).h("d7.1?");p!=null;){r=s.a(p.b) +q=p.m7(a) +if(q!=null)return q+r.a.b +p=r.ak$}return null}, +Aj(a){var s,r,q,p,o=this.a4$ +for(s=A.o(this).h("d7.1"),r=null;o!=null;){q=o.b +q.toString +s.a(q) +p=o.m7(a) +if(p!=null){p+=q.a.b +r=r!=null?Math.min(r,p):p}o=q.ak$}return r}, +qE(a,b){var s,r,q={},p=q.a=this.d8$ +for(s=A.o(this).h("d7.1");p!=null;p=r){p=p.b +p.toString +s.a(p) +if(a.mD(new A.al5(q,b,p),p.a,b))return!0 +r=p.ci$ +q.a=r}return!1}, +mL(a,b){var s,r,q,p,o,n=this.a4$ +for(s=A.o(this).h("d7.1"),r=b.a,q=b.b;n!=null;){p=n.b +p.toString +s.a(p) +o=p.a +a.ef(n,new A.k(o.a+r,o.b+q)) +n=p.ak$}}} +A.al5.prototype={ +$2(a,b){return this.a.a.cD(a,b)}, +$S:17} +A.Hj.prototype={ +ad(a){this.xI(0)}} +A.fd.prototype={ +k(a){return this.xD(0)+"; id="+A.h(this.e)}} +A.ai5.prototype={ +fR(a,b){var s=this.b.i(0,a) +s.bJ(b,!0) +return s.gv(s)}, +hj(a,b){var s=this.b.i(0,a).b +s.toString +t.Wz.a(s).a=b}, +a7P(a,b){var s,r,q,p,o,n,m=this,l=m.b +try{m.b=A.A(t.K,t.x) +for(r=t.Wz,q=b;q!=null;q=n){p=q.b +p.toString +s=r.a(p) +p=m.b +p.toString +o=s.e +o.toString +p.n(0,o,q) +n=s.ak$}m.BY(a)}finally{m.b=l}}, +k(a){return"MultiChildLayoutDelegate"}} +A.Es.prototype={ +ew(a){if(!(a.b instanceof A.fd))a.b=new A.fd(null,null,B.e)}, +sI3(a){var s=this,r=s.B +if(r===a)return +if(A.t(a)!==A.t(r)||a.nB(r))s.a8() +s.B=a +s.y!=null}, +ah(a){this.a4I(a)}, +ad(a){this.a4J(0)}, +bp(a){var s=A.AM(a,1/0),r=s.bf(new A.G(A.O(1/0,s.a,s.b),A.O(1/0,s.c,s.d))).a +if(isFinite(r))return r +return 0}, +bo(a){var s=A.AM(1/0,a),r=s.bf(new A.G(A.O(1/0,s.a,s.b),A.O(1/0,s.c,s.d))).b +if(isFinite(r))return r +return 0}, +c5(a){return a.bf(new A.G(A.O(1/0,a.a,a.b),A.O(1/0,a.c,a.d)))}, +bA(){var s=this,r=t.k.a(A.r.prototype.gW.call(s)) +s.id=r.bf(new A.G(A.O(1/0,r.a,r.b),A.O(1/0,r.c,r.d))) +s.B.a7P(s.gv(s),s.a4$)}, +am(a,b){this.mL(a,b)}, +cE(a,b){return this.qE(a,b)}} +A.IU.prototype={ +ah(a){var s,r,q +this.dg(a) +s=this.a4$ +for(r=t.Wz;s!=null;){s.ah(a) +q=s.b +q.toString +s=r.a(q).ak$}}, +ad(a){var s,r,q +this.dh(0) +s=this.a4$ +for(r=t.Wz;s!=null;){s.ad(0) +q=s.b +q.toString +s=r.a(q).ak$}}} +A.a0R.prototype={} +A.Nv.prototype={ +Z(a,b){var s=this.a +return s==null?null:s.Z(0,b)}, +K(a,b){var s=this.a +return s==null?null:s.K(0,b)}, +gxk(){return null}, +Dk(a){return this.eX(a)}, +vL(a){return null}, +k(a){var s=A.bh(this),r=this.a +r=r==null?null:r.k(0) +if(r==null)r="" +return"#"+s+"("+r+")"}} +A.Et.prototype={ +soW(a){var s=this.A +if(s==a)return +this.A=a +this.Oi(a,s)}, +sWT(a){var s=this.a1 +if(s==a)return +this.a1=a +this.Oi(a,s)}, +Oi(a,b){var s=this,r=a==null +if(r)s.ag() +else if(b==null||A.t(a)!==A.t(b)||a.eX(b))s.ag() +if(s.y!=null){if(b!=null)b.K(0,s.gdB()) +if(!r)a.Z(0,s.gdB())}if(r){if(s.y!=null)s.aY()}else if(b==null||A.t(a)!==A.t(b)||a.Dk(b))s.aY()}, +sauw(a){if(this.al.j(0,a))return +this.al=a +this.a8()}, +bp(a){var s +if(this.fr$==null){s=this.al.a +return isFinite(s)?s:0}return this.DK(a)}, +bo(a){var s +if(this.fr$==null){s=this.al.b +return isFinite(s)?s:0}return this.DJ(a)}, +ah(a){var s,r=this +r.tA(a) +s=r.A +if(s!=null)s.Z(0,r.gdB()) +s=r.a1 +if(s!=null)s.Z(0,r.gdB())}, +ad(a){var s=this,r=s.A +if(r!=null)r.K(0,s.gdB()) +r=s.a1 +if(r!=null)r.K(0,s.gdB()) +s.nG(0)}, +cE(a,b){var s=this.a1 +if(s!=null){s=s.vL(b) +s=s===!0}else s=!1 +if(s)return!0 +return this.tw(a,b)}, +hF(a){var s=this.A +if(s!=null){s=s.vL(a) +s=s!==!1}else s=!1 +return s}, +bA(){this.tx() +this.aY()}, +uS(a){return a.bf(this.al)}, +QU(a,b,c){A.bc("debugPreviousCanvasSaveCount") +a.bH(0) +if(!b.j(0,B.e))a.au(0,b.a,b.b) +c.am(a,this.gv(this)) +a.b_(0)}, +am(a,b){var s,r,q=this +if(q.A!=null){s=a.gbe(a) +r=q.A +r.toString +q.QU(s,b,r) +q.S9(a)}q.iC(a,b) +if(q.a1!=null){s=a.gbe(a) +r=q.a1 +r.toString +q.QU(s,b,r) +q.S9(a)}}, +S9(a){}, +f3(a){var s,r=this +r.hs(a) +s=r.A +r.cd=s==null?null:s.gxk() +s=r.a1 +r.f7=s==null?null:s.gxk() +a.a=!1}, +qk(a,b,c){var s,r,q,p,o=this +o.he=A.aMJ(o.he,B.pn) +o.c1=A.aMJ(o.c1,B.pn) +s=o.he +r=s!=null&&!s.ga7(s) +s=o.c1 +q=s!=null&&!s.ga7(s) +s=A.a([],t.QF) +if(r){p=o.he +p.toString +B.b.E(s,p)}B.b.E(s,c) +if(q){p=o.c1 +p.toString +B.b.E(s,p)}o.Mq(a,b,s)}, +o4(){this.DH() +this.c1=this.he=null}} +A.Ny.prototype={} +A.ut.prototype={ +j(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +if(J.U(b)!==A.t(s))return!1 +return b instanceof A.ut&&b.a.j(0,s.a)&&b.b==s.b}, +k(a){var s=this +switch(s.b){case B.q:return s.a.k(0)+"-ltr" +case B.Z:return s.a.k(0)+"-rtl" +case null:case void 0:return s.a.k(0)}}, +gt(a){return A.N(this.a,this.b,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}} +A.arY.prototype={ +gck(){var s=this +if(!s.f)return!1 +if(s.e.av.qx()!==s.d)s.f=!1 +return s.f}, +Pk(a){var s,r,q=this,p=q.r,o=p.i(0,a) +if(o!=null)return o +s=new A.k(q.a.a,q.d[a].gkt()) +r=new A.aH(s,q.e.av.eh(s),t.tO) +p.n(0,a,r) +return r}, +gJ(a){return this.c}, +q(){var s,r=this,q=r.b+1 +if(q>=r.d.length)return!1 +s=r.Pk(q);++r.b +r.a=s.a +r.c=s.b +return!0}, +Yc(){var s,r=this,q=r.b +if(q<=0)return!1 +s=r.Pk(q-1);--r.b +r.a=s.a +r.c=s.b +return!0}, +asX(a){var s,r=this,q=r.a +if(a>=0){for(s=q.b+a;r.a.bs;)if(!r.Yc())break +return!q.j(0,r.a)}} +A.tT.prototype={ +m(){var s,r=this,q=r.B +if(q!=null)q.ch.sar(0,null) +r.B=null +q=r.F +if(q!=null)q.ch.sar(0,null) +r.F=null +r.WC.sar(0,null) +q=r.aE +if(q!=null){q.fy$=$.aO() +q.fx$=0}q=r.bj +if(q!=null){q.fy$=$.aO() +q.fx$=0}q=r.cv +s=q.fy$=$.aO() +q.fx$=0 +q=r.dv +q.fy$=s +q.fx$=0 +q=r.aD +q.fy$=s +q.fx$=0 +q=r.aH +q.fy$=s +q.fx$=0 +q=r.geL() +q.fy$=s +q.fx$=0 +r.av.m() +r.eK()}, +To(a){var s,r=this,q=r.ga7J(),p=r.B +if(p==null){s=A.aOw(q) +r.iJ(s) +r.B=s}else p.soW(q) +r.a9=a}, +Tt(a){var s,r=this,q=r.ga7K(),p=r.F +if(p==null){s=A.aOw(q) +r.iJ(s) +r.F=s}else p.soW(q) +r.X=a}, +geL(){var s,r,q=this.aq +if(q===$){s=$.W().aj() +r=$.aO() +this.aq!==$&&A.ay() +q=this.aq=new A.H8(s,B.e,r)}return q}, +ga7J(){var s=this,r=s.aE +if(r==null){r=A.a([],t.xT) +if(s.a1)r.push(s.geL()) +r=s.aE=new A.yL(r,$.aO())}return r}, +ga7K(){var s=this,r=s.bj +if(r==null){r=A.a([s.aD,s.aH],t.xT) +if(!s.a1)r.push(s.geL()) +r=s.bj=new A.yL(r,$.aO())}return r}, +sCm(a){return}, +srL(a){var s=this.av +if(s.ax===a)return +s.srL(a) +this.kK()}, +smO(a,b){if(this.cZ===b)return +this.cZ=b +this.kK()}, +satc(a){if(this.d9===a)return +this.d9=a +this.a8()}, +satb(a){return}, +rZ(a){var s=this.av.b.a.a.CS(a) +return A.cn(B.m,s.a,s.b,!1)}, +aka(a){var s,r,q,p,o,n,m=this +if(!m.bu.gck()){m.cv.sl(0,!1) +m.dv.sl(0,!1) +return}s=m.gv(m) +r=new A.w(0,0,0+s.a,0+s.b) +s=m.av +q=m.bu +p=m.om +p===$&&A.b() +o=s.l1(new A.b9(q.a,q.e),p) +m.cv.sl(0,r.dz(0.5).p(0,o.R(0,a))) +p=m.bu +n=s.l1(new A.b9(p.b,p.e),m.om) +m.dv.sl(0,r.dz(0.5).p(0,n.R(0,a)))}, +mu(a,b){var s,r +if(a.gck()){s=this.eP.a.c.a.a.length +a=a.A8(Math.min(a.c,s),Math.min(a.d,s))}r=this.eP.a.c.a.iW(a) +this.eP.hl(r,b)}, +ag(){this.a3k() +var s=this.B +if(s!=null)s.ag() +s=this.F +if(s!=null)s.ag()}, +kK(){this.bc=this.bM=null +this.a8()}, +tC(){var s=this +s.DF() +s.av.a8() +s.bc=s.bM=null}, +scV(a,b){var s=this,r=s.av +if(J.d(r.f,b))return +s.dE=null +r.scV(0,b) +s.Iz=s.e0=s.cj=null +s.kK() +s.aY()}, +spb(a,b){var s=this.av +if(s.w===b)return +s.spb(0,b) +this.kK()}, +sbS(a){var s=this.av +if(s.x===a)return +s.sbS(a) +this.kK() +this.aY()}, +srt(a,b){var s=this.av +if(J.d(s.Q,b))return +s.srt(0,b) +this.kK()}, +slb(a){var s=this.av +if(J.d(s.at,a))return +s.slb(a) +this.kK()}, +sa1j(a){var s=this,r=s.bE +if(r===a)return +if(s.y!=null)r.K(0,s.gz6()) +s.bE=a +if(s.y!=null){s.geL().sDj(s.bE.a) +s.bE.Z(0,s.gz6())}}, +aiv(){this.geL().sDj(this.bE.a)}, +scK(a){if(this.cI===a)return +this.cI=a +this.aY()}, +sapW(a){return}, +sKc(a,b){if(this.f6)return +this.f6=!0 +this.aY()}, +sru(a){var s,r=this +if(r.dO==a)return +r.dO=a +s=a===1?1:null +r.av.sru(s) +r.kK()}, +sasT(a){return}, +saps(a){return}, +sbK(a){var s=this.av +if(s.y.j(0,a))return +s.sbK(a) +this.kK()}, +sxj(a){var s=this +if(s.bu.j(0,a))return +s.bu=a +s.aH.sB3(a) +s.ag() +s.aY()}, +scz(a,b){var s=this,r=s.e1 +if(r===b)return +if(s.y!=null)r.K(0,s.gdB()) +s.e1=b +if(s.y!=null)b.Z(0,s.gdB()) +s.a8()}, +sanG(a){if(this.es===a)return +this.es=a +this.a8()}, +sanF(a){return}, +saub(a){var s=this +if(s.a1===a)return +s.a1=a +s.bj=s.aE=null +s.To(s.a9) +s.Tt(s.X)}, +sa1N(a){if(this.al===a)return +this.al=a +this.ag()}, +sapa(a){if(this.bg===a)return +this.bg=a +this.ag()}, +sap1(a){var s=this +if(s.he===a)return +s.he=a +s.kK() +s.aY()}, +gLs(){var s=this.he +return s}, +l0(a){var s,r +this.ju() +s=this.av.l0(a) +r=A.S(s).h("R<1,eE>") +return A.V(new A.R(s,new A.alc(this),r),!0,r.h("af.E"))}, +f3(a){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d=this +d.hs(a) +s=d.av +r=s.f +r.toString +q=A.a([],t.O_) +r.A3(q) +d.ce=q +if(B.b.fJ(q,new A.alb())&&A.by()!==B.c1){a.c=a.a=!0 +return}r=d.cj +if(r==null){p=new A.ck("") +o=A.a([],t.oU) +for(r=d.ce,n=r.length,m=0,l=0,k="";lh){d=c1[h].dy +d=d!=null&&d.p(0,new A.ng(i,b8))}else d=!1 +if(!d)break +b=c1[h] +d=s.b +d.toString +m.a(d) +b6.push(b);++h}b8=s.b +b8.toString +s=n.a(b8).ak$;++i}else{a=b7.l0(new A.hB(j,e,B.m,!1,c,d)) +if(a.length===0)continue +d=B.b.gL(a) +a0=new A.w(d.a,d.b,d.c,d.d) +a1=B.b.gL(a).e +for(d=A.S(a),c=d.h("ac<1>"),a2=new A.ac(a,1,b5,c),a2.b2(a,1,b5,d.c),a2=new A.bu(a2,a2.gu(a2),c.h("bu")),c=c.h("af.E");a2.q();){d=a2.d +if(d==null)d=c.a(d) +a0=a0.j0(new A.w(d.a,d.b,d.c,d.d)) +a1=d.e}d=a0.a +c=Math.max(0,d) +a2=a0.b +a3=Math.max(0,a2) +d=Math.min(a0.c-d,o.a(A.r.prototype.gW.call(b4)).b) +a2=Math.min(a0.d-a2,o.a(A.r.prototype.gW.call(b4)).d) +a4=Math.floor(c)-4 +a5=Math.floor(a3)-4 +d=Math.ceil(c+d)+4 +a2=Math.ceil(a3+a2)+4 +a6=new A.w(a4,a5,d,a2) +a7=A.lQ() +a8=k+1 +a7.k2=new A.x_(k,b5) +a7.e=!0 +a7.aL=l +a3=f.b +b8=a3==null?b8:a3 +a7.RG=new A.cS(b8,f.f) +a9=f.c +if(a9!=null){b8=a9.bq +if(b8!=null){a7.fG(B.dW,b8) +a7.b7(B.lC,!0)}}b8=b9.r +if(b8!=null){b0=b8.ea(a6) +if(b0.a>=b0.c||b0.b>=b0.d)b8=!(a4>=d||a5>=a2) +else b8=!1 +a7.b7(B.im,b8)}b1=A.bc("newChild") +b8=b4.eC +d=b8==null?b5:b8.a!==0 +if(d===!0){b8.toString +d=new A.aX(b8,A.o(b8).h("aX<1>")) +b2=d.gab(d) +if(!b2.q())A.T(A.cm()) +b8=b8.C(0,b2.gJ(b2)) +b8.toString +if(b1.b!==b1)A.T(A.n_(b1.a)) +b1.b=b8}else{b3=new A.pU() +b8=A.Fl(b3,b4.a8W(b3)) +if(b1.b!==b1)A.T(A.n_(b1.a)) +b1.b=b8}if(b8===b1)A.T(A.fy(b1.a)) +J.aJv(b8,a7) +if(!b8.e.j(0,a6)){b8.e=a6 +b8.i_()}b8=b1.b +if(b8===b1)A.T(A.fy(b1.a)) +d=b8.a +d.toString +r.n(0,d,b8) +b8=b1.b +if(b8===b1)A.T(A.fy(b1.a)) +b6.push(b8) +k=a8 +l=a1}}b4.eC=r +b9.m5(0,b6,c0)}, +a8W(a){return new A.ala(this,a)}, +adf(a){this.mu(a,B.ak)}, +ack(a){var s=this,r=s.av.L5(s.bu.d) +if(r==null)return +s.mu(A.cn(B.m,!a?r:s.bu.c,r,!1),B.ak)}, +acg(a){var s=this,r=s.av.L6(s.bu.d) +if(r==null)return +s.mu(A.cn(B.m,!a?r:s.bu.c,r,!1),B.ak)}, +acm(a){var s,r=this,q=r.bu.geB(),p=r.P7(r.av.b.a.a.l3(q).b) +if(p==null)return +s=a?r.bu.c:p.a +r.mu(A.cn(B.m,s,p.a,!1),B.ak)}, +aci(a){var s,r=this,q=r.bu.geB(),p=r.Pa(r.av.b.a.a.l3(q).a-1) +if(p==null)return +s=a?r.bu.c:p.a +r.mu(A.cn(B.m,s,p.a,!1),B.ak)}, +P7(a){var s,r,q +for(s=this.av;!0;){r=s.b.a.a.l3(new A.b9(a,B.m)) +q=r.a +if(!(q>=0&&r.b>=0)||q===r.b)return null +if(!this.QL(r))return r +a=r.b}}, +Pa(a){var s,r,q +for(s=this.av;a>=0;){r=s.b.a.a.l3(new A.b9(a,B.m)) +q=r.a +if(!(q>=0&&r.b>=0)||q===r.b)return null +if(!this.QL(r))return r +a=q-1}return null}, +QL(a){var s,r,q,p +for(s=a.a,r=a.b,q=this.av;s=m.gkQ().length)return A.yl(new A.b9(m.gkQ().length,B.al)) +s=m.b.a.a.l3(a) +switch(a.b.a){case 0:r=n-1 +break +case 1:r=n +break +default:r=null}if(r>0&&A.aNz(m.gkQ().charCodeAt(r))){m=s.a +q=o.Pa(m) +switch(A.by().a){case 2:if(q==null){p=o.P7(m) +if(p==null)return A.us(B.m,n) +return A.cn(B.m,n,p.b,!1)}return A.cn(B.m,q.a,n,!1) +case 0:if(o.f6){if(q==null)return A.cn(B.m,n,n+1,!1) +return A.cn(B.m,q.a,n,!1)}break +case 1:case 4:case 3:case 5:break}}return A.cn(B.m,s.a,s.b,!1)}, +tO(a,b){var s=this,r=Math.max(0,a-(1+s.es)),q=Math.min(b,r),p=s.dO!==1?r:1/0 +s.av.w1(p,q) +s.bc=b +s.bM=a}, +Ou(a){return this.tO(a,0)}, +a9E(){return this.tO(1/0,0)}, +ju(){var s=t.k,r=s.a(A.r.prototype.gW.call(this)) +this.tO(s.a(A.r.prototype.gW.call(this)).b,r.a)}, +a8p(){var s,r,q=this +switch(A.by().a){case 2:case 4:s=q.es +r=q.av.gda() +q.om=new A.w(0,0,s,0+(r+2)) +break +case 0:case 1:case 3:case 5:s=q.es +r=q.av.gda() +q.om=new A.w(0,2,s,2+(r-4)) +break}}, +a7R(){var s=this.av.f +s=s==null?null:s.b1(new A.al9()) +return s!==!1}, +c5(a){var s,r,q,p,o=this,n=o.Iz +if(!(n==null?o.Iz=o.a7R():n))return B.Q +n=o.av +s=a.b +n.nA(o.rr(s,A.qr())) +r=a.a +o.tO(s,r) +n=n.b +q=n.b +n=n.a.a +n.gbh(n) +p=A.O(q+(1+o.es),r,s) +return new A.G(p,A.O(o.G2(s),a.c,a.d))}, +bA(){var s,r,q,p,o,n,m=this,l=t.k.a(A.r.prototype.gW.call(m)),k=l.b,j=m.rr(k,A.v4()) +m.apw=j +s=m.av +s.nA(j) +m.ju() +j=s.gXr() +j.toString +m.Yx(j) +m.a8p() +j=s.b +r=j.b +j=j.a.a +j=j.gbh(j) +s=s.b +q=s.b +s=s.a.a +s.gbh(s) +p=A.O(q+(1+m.es),l.a,k) +m.id=new A.G(p,A.O(m.G2(k),l.c,l.d)) +o=new A.G(r+(1+m.es),j) +n=A.qT(o) +k=m.B +if(k!=null)k.fQ(n) +k=m.F +if(k!=null)k.fQ(n) +m.c1=m.aaL(o) +m.e1.Hk(m.gakp()) +m.e1.Hh(0,m.c1)}, +LA(a,b,c,d){var s,r,q,p=this +if(a===B.oQ){p.ky=B.e +p.IA=null +p.Aw=p.Ax=p.Ay=!1}s=a!==B.kh +p.cd=s +p.WB=d +if(s){p.f7=c +if(d!=null){s=A.BJ(B.om,B.bB,d) +s.toString +r=s}else r=B.om +s=p.geL() +q=p.om +q===$&&A.b() +s.sWK(r.J7(q).cm(b))}else p.geL().sWK(null) +p.geL().w=p.WB==null}, +Dd(a,b,c){return this.LA(a,b,c,null)}, +aem(a,b){var s,r,q,p,o,n=this.av.l1(a,B.F) +for(s=b.length,r=n.b,q=0;p=b.length,qr)return new A.aH(J.aJk(o),new A.k(n.a,o.gkt()),t.DC)}s=Math.max(0,p-1) +r=p!==0?B.b.gO(b).gkt()+B.b.gO(b).gI5():0 +return new A.aH(s,new A.k(n.a,r),t.DC)}, +Ov(a,b){var s,r,q=this,p=b.R(0,q.gf1()),o=q.cd +if(!o)q.aka(p) +s=q.B +r=q.F +if(r!=null)a.ef(r,b) +q.av.am(a.gbe(a),p) +q.Yo(a,p) +if(s!=null)a.ef(s,b)}, +dj(a,b){if(a===this.B||a===this.F)return +this.VT(a,b)}, +am(a,b){var s,r,q,p,o,n,m=this +m.ju() +s=(m.c1>0||!m.gf1().j(0,B.e))&&m.cw!==B.o +r=m.WC +if(s){s=m.cx +s===$&&A.b() +q=m.gv(m) +r.sar(0,a.lQ(s,b,new A.w(0,0,0+q.a,0+q.b),m.ga9F(),m.cw,r.a))}else{r.sar(0,null) +m.Ov(a,b)}p=m.bu +s=p.gck() +if(s){s=m.CO(p) +o=s[0].a +r=A.O(o.a,0,m.gv(m).a) +q=A.O(o.b,0,m.gv(m).b) +a.lS(A.aGg(m.al,new A.k(r,q).R(0,b)),A.r.prototype.gf9.call(m),B.e) +if(s.length===2){n=s[1].a +s=A.O(n.a,0,m.gv(m).a) +r=A.O(n.b,0,m.gv(m).b) +a.lS(A.aGg(m.bg,new A.k(s,r).R(0,b)),A.r.prototype.gf9.call(m),B.e)}}}, +mN(a){var s,r=this +switch(r.cw.a){case 0:return null +case 1:case 2:case 3:if(r.c1>0||!r.gf1().j(0,B.e)){s=r.gv(r) +s=new A.w(0,0,0+s.a,0+s.b)}else s=null +return s}}} +A.alc.prototype={ +$1(a){var s=this.a +return new A.eE(a.a+s.gf1().a,a.b+s.gf1().b,a.c+s.gf1().a,a.d+s.gf1().b,a.e)}, +$S:98} +A.alb.prototype={ +$1(a){return a.c!=null}, +$S:402} +A.ala.prototype={ +$0(){var s=this.a,r=s.eC.i(0,this.b) +r.toString +s.tf(s,r.e)}, +$S:0} +A.ald.prototype={ +$2(a,b){var s=a==null?null:a.j0(new A.w(b.a,b.b,b.c,b.d)) +return s==null?new A.w(b.a,b.b,b.c,b.d):s}, +$S:403} +A.al9.prototype={ +$1(a){var s,r +if(a instanceof A.kX){s=a.b +$label0$0:{if(B.hZ===s||B.i_===s||B.i0===s){r=!1 +break $label0$0}if(B.i1===s||B.i2===s||B.cF===s){r=!0 +break $label0$0}r=null}}else r=!0 +return r}, +$S:65} +A.a0S.prototype={ +gaU(a){return t.CA.a(A.r.prototype.gaU.call(this,this))}, +gf8(){return!0}, +giz(){return!0}, +soW(a){var s,r=this,q=r.B +if(a===q)return +r.B=a +s=a.eX(q) +if(s)r.ag() +if(r.y!=null){s=r.gdB() +q.K(0,s) +a.Z(0,s)}}, +am(a,b){var s=this,r=t.CA.a(A.r.prototype.gaU.call(s,s)),q=s.B +if(r!=null){r.ju() +q.ee(a.gbe(a),s.gv(s),r)}}, +ah(a){this.dg(a) +this.B.Z(0,this.gdB())}, +ad(a){this.B.K(0,this.gdB()) +this.dh(0)}, +c5(a){return new A.G(A.O(1/0,a.a,a.b),A.O(1/0,a.c,a.d))}} +A.py.prototype={} +A.K_.prototype={ +sB2(a){if(J.d(a,this.w))return +this.w=a +this.a6()}, +sB3(a){if(J.d(a,this.x))return +this.x=a +this.a6()}, +sLt(a){if(this.y===a)return +this.y=a +this.a6()}, +sLu(a){if(this.z===a)return +this.z=a +this.a6()}, +ee(a,b,c){var s,r,q,p,o,n,m,l,k,j=this,i=j.x,h=j.w +if(i==null||h==null||i.a===i.b)return +s=j.r +s.sM(0,h) +r=c.av +q=r.pf(A.cn(B.m,i.a,i.b,!1),j.y,j.z) +for(p=q.length,o=0;o>>16&255,o>>>8&255,o&255)}if(r||l==null||!i.r)return +r=A.lH(s,B.zq) +k=i.y +if(k===$){j=$.W().aj() +i.y!==$&&A.ay() +i.y=j +k=j}k.sM(0,l) +a.bQ(r,k)}, +eX(a){var s=this +if(s===a)return!1 +return!(a instanceof A.H8)||a.r!==s.r||a.w!==s.w||!J.d(a.z,s.z)||!J.d(a.Q,s.Q)||!a.as.j(0,s.as)||!J.d(a.at,s.at)||!J.d(a.ax,s.ax)}} +A.yL.prototype={ +Z(a,b){var s,r,q +for(s=this.r,r=s.length,q=0;q")) +s=this.r +p=A.S(s) +o=new J.cp(s,s.length,p.h("cp<1>")) +s=p.c +r=r.c +while(!0){if(!(q.q()&&o.q()))break +p=o.d +if(p==null)p=s.a(p) +n=q.d +if(p.eX(n==null?r.a(n):n))return!0}return!1}} +A.IV.prototype={ +ah(a){this.dg(a) +$.hu.lx$.a.D(0,this.gmt())}, +ad(a){$.hu.lx$.a.C(0,this.gmt()) +this.dh(0)}} +A.IW.prototype={ +ah(a){var s,r,q +this.a4K(a) +s=this.a4$ +for(r=t.ot;s!=null;){s.ah(a) +q=s.b +q.toString +s=r.a(q).ak$}}, +ad(a){var s,r,q +this.a4L(0) +s=this.a4$ +for(r=t.ot;s!=null;){s.ad(0) +q=s.b +q.toString +s=r.a(q).ak$}}} +A.a0T.prototype={} +A.Ev.prototype={ +a6o(a){var s,r,q,p,o=this +try{r=o.B +if(r!==""){q=$.aSh() +s=$.W().v3(q) +s.p0($.aSi()) +s.qc(r) +r=s.bk() +o.F!==$&&A.bS() +o.F=r}else{o.F!==$&&A.bS() +o.F=null}}catch(p){}}, +bp(a){return 1e5}, +bo(a){return 1e5}, +giz(){return!0}, +hF(a){return!0}, +c5(a){return a.bf(B.XS)}, +am(a,b){var s,r,q,p,o,n,m,l,k,j=this +try{p=a.gbe(a) +o=j.gv(j) +n=b.a +m=b.b +l=$.W().aj() +l.sM(0,$.aSg()) +p.cB(new A.w(n,m,n+o.a,m+o.b),l) +p=j.F +p===$&&A.b() +if(p!=null){s=j.gv(j).a +r=0 +q=0 +if(s>328){s-=128 +r+=64}p.fQ(new A.pi(s)) +o=j.gv(j) +if(o.b>96+p.gbh(p)+12)q+=96 +o=a.gbe(a) +o.lw(p,b.R(0,new A.k(r,q)))}}catch(k){}}} +A.OO.prototype={ +I(){return"FlexFit."+this.b}} +A.ex.prototype={ +k(a){return this.xD(0)+"; flex="+A.h(this.e)+"; fit="+A.h(this.f)}} +A.Q9.prototype={ +I(){return"MainAxisSize."+this.b}} +A.wP.prototype={ +I(){return"MainAxisAlignment."+this.b}} +A.r7.prototype={ +I(){return"CrossAxisAlignment."+this.b}} +A.Ex.prototype={ +sasB(a){if(this.F!==a){this.F=a +this.a8()}}, +sHV(a){if(this.X!==a){this.X=a +this.a8()}}, +ew(a){if(!(a.b instanceof A.ex))a.b=new A.ex(null,null,B.e)}, +P1(a,b,c){var s,r,q,p,o,n,m,l,k,j,i,h,g=this +if(g.X===B.jH)return 0 +s=g.B +r=g.a4$ +if(s===c){for(s=t.US,q=0,p=0,o=0;r!=null;){n=r.b +n.toString +m=s.a(n).e +if(m==null)m=0 +q+=m +if(m>0){n=a.$2(r,b) +l=r.b +l.toString +l=s.a(l).e +o=Math.max(o,n/(l==null?0:l))}else p+=a.$2(r,b) +n=r.b +n.toString +r=s.a(n).ak$}return o*q+p}else{for(s=t.US,q=0,p=0,k=0;r!=null;){n=r.b +n.toString +m=s.a(n).e +if(m==null)m=0 +q+=m +j=A.bc("mainSize") +i=A.bc("crossSize") +if(m===0){switch(g.B.a){case 0:n=r.d2(B.bb,1/0,r.gcc()) +if(j.b!==j)A.T(A.n_(j.a)) +j.b=n +n=a.$2(r,n) +if(i.b!==i)A.T(A.n_(i.a)) +i.b=n +break +case 1:n=r.d2(B.bc,1/0,r.gcb()) +if(j.b!==j)A.T(A.n_(j.a)) +j.b=n +n=a.$2(r,n) +if(i.b!==i)A.T(A.n_(i.a)) +i.b=n +break}n=j.b +if(n===j)A.T(A.fy(j.a)) +p+=n +n=i.b +if(n===i)A.T(A.fy(i.a)) +k=Math.max(k,A.fL(n))}n=r.b +n.toString +r=s.a(n).ak$}h=Math.max(0,(b-p)/q) +r=g.a4$ +for(;r!=null;){n=r.b +n.toString +m=s.a(n).e +if(m==null)m=0 +if(m>0)k=Math.max(k,A.fL(a.$2(r,h*m))) +n=r.b +n.toString +r=s.a(n).ak$}return k}}, +bp(a){return this.P1(new A.alg(),a,B.aI)}, +bo(a){return this.P1(new A.alf(),a,B.b2)}, +h6(a){if(this.B===B.aI)return this.Aj(a) +return this.VU(a)}, +yd(a){switch(this.B.a){case 0:return a.b +case 1:return a.a}}, +ye(a){switch(this.B.a){case 0:return a.a +case 1:return a.b}}, +c5(a){var s +if(this.X===B.jH)return B.Q +s=this.OM(a,A.qr()) +switch(this.B.a){case 0:return a.bf(new A.G(s.a,s.b)) +case 1:return a.bf(new A.G(s.b,s.a))}}, +OM(a2,a3){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c=this,b=null,a=c.B===B.aI?a2.b:a2.d,a0=a<1/0,a1=c.a4$ +for(s=t.US,r=a2.b,q=a2.d,p=b,o=0,n=0,m=0;a1!=null;){l=a1.b +l.toString +s.a(l) +k=l.e +if(k==null)k=0 +if(k>0){o+=k +p=a1}else{if(c.X===B.dC)switch(c.B.a){case 0:j=A.mw(q,b) +break +case 1:j=A.mw(b,r) +break +default:j=b}else switch(c.B.a){case 0:j=new A.az(0,1/0,0,q) +break +case 1:j=new A.az(0,r,0,1/0) +break +default:j=b}i=a3.$2(a1,j) +m+=c.ye(i) +n=Math.max(n,c.yd(i))}a1=l.ak$}h=Math.max(0,(a0?a:0)-m) +if(o>0){g=a0?h/o:0/0 +a1=c.a4$ +for(f=0;a1!=null;){l=a1.b +l.toString +k=s.a(l).e +if(k==null)k=0 +if(k>0){if(a0)e=a1===p?h-f:g*k +else e=1/0 +d=A.bc("minChildExtent") +l=a1.b +l.toString +l=s.a(l).f +switch((l==null?B.oP:l).a){case 0:if(d.b!==d)A.T(A.n_(d.a)) +d.b=e +break +case 1:if(d.b!==d)A.T(A.n_(d.a)) +d.b=0 +break}if(c.X===B.dC)switch(c.B.a){case 0:l=d.b +if(l===d)A.T(A.fy(d.a)) +j=new A.az(l,e,q,q) +break +case 1:l=d.b +if(l===d)A.T(A.fy(d.a)) +j=new A.az(r,r,l,e) +break +default:j=b}else switch(c.B.a){case 0:l=d.b +if(l===d)A.T(A.fy(d.a)) +j=new A.az(l,e,0,q) +break +case 1:l=d.b +if(l===d)A.T(A.fy(d.a)) +j=new A.az(0,r,l,e) +break +default:j=b}i=a3.$2(a1,j) +m+=c.ye(i) +f+=e +n=Math.max(n,c.yd(i))}l=a1.b +l.toString +a1=s.a(l).ak$}}return new A.awD(a0&&c.a9===B.a3?a:m,n,m)}, +bA(){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a=this,a0="RenderBox was not laid out: ",a1=t.k.a(A.r.prototype.gW.call(a)),a2=a.OM(a1,A.v4()),a3=a2.a,a4=a2.b +if(a.X===B.jH){s=a.a4$ +for(r=t.US,q=0,p=0,o=0;s!=null;){n=a.aD +n.toString +m=s.CM(n,!0) +if(m!=null){q=Math.max(q,m) +p=Math.max(m,p) +n=s.id +o=Math.max((n==null?A.T(A.Q(a0+A.t(s).k(0)+"#"+A.bh(s))):n).b-m,o) +a4=Math.max(p+o,a4)}n=s.b +n.toString +s=r.a(n).ak$}}else q=0 +switch(a.B.a){case 0:a.id=a1.bf(new A.G(a3,a4)) +a3=a.gv(a).a +a4=a.gv(a).b +break +case 1:a.id=a1.bf(new A.G(a4,a3)) +a3=a.gv(a).b +a4=a.gv(a).a +break}l=a3-a2.c +a.aE=Math.max(0,-l) +k=Math.max(0,l) +j=A.bc("leadingSpace") +i=A.bc("betweenSpace") +r=A.aPX(a.B,a.aq,a.aH) +h=r===!1 +switch(a.F.a){case 0:j.scJ(0) +i.scJ(0) +break +case 1:j.scJ(k) +i.scJ(0) +break +case 2:j.scJ(k/2) +i.scJ(0) +break +case 3:j.scJ(0) +r=a.e_$ +i.scJ(r>1?k/(r-1):0) +break +case 4:r=a.e_$ +i.scJ(r>0?k/r:0) +j.scJ(i.aI()/2) +break +case 5:r=a.e_$ +i.scJ(r>0?k/(r+1):0) +j.scJ(i.aI()) +break}g=h?a3-j.aI():j.aI() +s=a.a4$ +for(r=t.US,n=a4/2,f=i.a;s!=null;){e=s.b +e.toString +r.a(e) +d=a.X +switch(d.a){case 0:case 1:if(A.aPX(A.b6b(a.B),a.aq,a.aH)===(d===B.cT))c=0 +else{d=s.id +c=a4-a.yd(d==null?A.T(A.Q(a0+A.t(s).k(0)+"#"+A.bh(s))):d)}break +case 2:d=s.id +c=n-a.yd(d==null?A.T(A.Q(a0+A.t(s).k(0)+"#"+A.bh(s))):d)/2 +break +case 3:c=0 +break +case 4:if(a.B===B.aI){d=a.aD +d.toString +m=s.CM(d,!0) +c=m!=null?q-m:0}else c=0 +break +default:c=null}if(h){d=s.id +g-=a.ye(d==null?A.T(A.Q(a0+A.t(s).k(0)+"#"+A.bh(s))):d)}switch(a.B.a){case 0:e.a=new A.k(g,c) +break +case 1:e.a=new A.k(c,g) +break}if(h){d=i.b +if(d===i)A.T(A.fy(f)) +g-=d}else{d=s.id +d=a.ye(d==null?A.T(A.Q(a0+A.t(s).k(0)+"#"+A.bh(s))):d) +b=i.b +if(b===i)A.T(A.fy(f)) +g+=d+b}s=e.ak$}}, +cE(a,b){return this.qE(a,b)}, +am(a,b){var s,r,q,p=this +if(!(p.aE>1e-10)){p.mL(a,b) +return}s=p.gv(p) +if(s.ga7(s))return +s=p.bM +r=p.cx +r===$&&A.b() +q=p.gv(p) +s.sar(0,a.lQ(r,b,new A.w(0,0,0+q.a,0+q.b),p.gVV(),p.bj,s.a))}, +m(){this.bM.sar(0,null) +this.a4O()}, +mN(a){var s,r=this +switch(r.bj.a){case 0:return null +case 1:case 2:case 3:if(r.aE>1e-10){s=r.gv(r) +s=new A.w(0,0,0+s.a,0+s.b)}else s=null +return s}}, +dd(){return this.a3n()}} +A.alg.prototype={ +$2(a,b){return a.d2(B.bb,b,a.gcc())}, +$S:209} +A.alf.prototype={ +$2(a,b){return a.d2(B.bc,b,a.gcb())}, +$S:209} +A.awD.prototype={} +A.a0V.prototype={ +ah(a){var s,r,q +this.dg(a) +s=this.a4$ +for(r=t.US;s!=null;){s.ah(a) +q=s.b +q.toString +s=r.a(q).ak$}}, +ad(a){var s,r,q +this.dh(0) +s=this.a4$ +for(r=t.US;s!=null;){s.ad(0) +q=s.b +q.toString +s=r.a(q).ak$}}} +A.a0W.prototype={} +A.IX.prototype={ +m(){var s,r,q +for(s=this.IE$,r=s.length,q=0;q>")) +this.hE(new A.LI(s,c.h("LI<0>")),b,!0,c) +return s.length===0?null:B.b.gL(s).a}, +a6T(a){var s,r=this +if(!r.w&&r.x!=null){s=r.x +s.toString +a.Ub(s) +return}r.hz(a) +r.w=!1}, +dd(){var s=this.a2j() +return s+(this.y==null?" DETACHED":"")}} +A.agz.prototype={ +$0(){this.b.$1(this.a)}, +$S:0} +A.agA.prototype={ +$0(){var s=this.a +s.a.C(0,this.b) +s.uu(-1)}, +$S:0} +A.PO.prototype={ +sar(a,b){var s=this.a +if(b==s)return +if(s!=null)if(--s.f===0)s.m() +this.a=b +if(b!=null)++b.f}, +k(a){var s=this.a +return"LayerHandle("+(s!=null?s.k(0):"DISPOSED")+")"}} +A.Ru.prototype={ +sYv(a){var s +this.eR() +s=this.ay +if(s!=null)s.m() +this.ay=a}, +m(){this.sYv(null) +this.M7()}, +hz(a){var s=this.ay +s.toString +a.U8(B.e,s,this.ch,this.CW)}, +hE(a,b,c){return!1}} +A.eN.prototype={ +tT(a){var s +this.a2C(a) +if(!a)return +s=this.ax +for(;s!=null;){s.tT(!0) +s=s.Q}}, +alT(a){var s=this +s.Cz() +s.hz(a) +if(s.b>0)s.tT(!0) +s.w=!1 +return a.bk()}, +m(){this.Kh() +this.a.a0(0) +this.M7()}, +Cz(){var s,r=this +r.a2F() +s=r.ax +for(;s!=null;){s.Cz() +r.w=r.w||s.w +s=s.Q}}, +hE(a,b,c,d){var s,r,q +for(s=this.ay,r=a.a;s!=null;s=s.as){if(s.hE(a,b,!0,d))return!0 +q=r.length +if(q!==0)return!1}return!1}, +ah(a){var s +this.a2D(a) +s=this.ax +for(;s!=null;){s.ah(a) +s=s.Q}}, +ad(a){var s +this.a2E(0) +s=this.ax +for(;s!=null;){s.ad(0) +s=s.Q}this.tT(!1)}, +zQ(a,b){var s,r=this +if(!r.gqe())r.eR() +s=b.b +if(s!==0)r.uu(s) +b.r=r +s=r.y +if(s!=null)b.ah(s) +r.kV(b) +s=b.as=r.ay +if(s!=null)s.Q=b +r.ay=b +if(r.ax==null)r.ax=b +b.e.sar(0,b)}, +fT(){var s,r,q=this.ax +for(;q!=null;){s=q.z +r=this.z +if(s<=r){q.z=r+1 +q.fT()}q=q.Q}}, +kV(a){var s=a.z,r=this.z +if(s<=r){a.z=r+1 +a.fT()}}, +Qd(a){var s,r=this +if(!r.gqe())r.eR() +s=a.b +if(s!==0)r.uu(-s) +a.r=null +if(r.y!=null)a.ad(0)}, +Kh(){var s,r=this,q=r.ax +for(;q!=null;q=s){s=q.Q +q.Q=q.as=null +r.Qd(q) +q.e.sar(0,null)}r.ay=r.ax=null}, +hz(a){this.i5(a)}, +i5(a){var s=this.ax +for(;s!=null;){s.a6T(a) +s=s.Q}}, +qi(a,b){}} +A.kq.prototype={ +scz(a,b){if(!b.j(0,this.k3))this.eR() +this.k3=b}, +hE(a,b,c,d){return this.mg(a,b.Y(0,this.k3),!0,d)}, +qi(a,b){var s=this.k3 +b.au(0,s.a,s.b)}, +hz(a){var s=this,r=s.k3 +s.sft(a.K5(r.a,r.b,t.Ff.a(s.x))) +s.i5(a) +a.ev()}} +A.r1.prototype={ +hE(a,b,c,d){if(!this.k3.p(0,b))return!1 +return this.mg(a,b,!0,d)}, +hz(a){var s=this,r=s.k3 +r.toString +s.sft(a.YM(r,s.k4,t.GB.a(s.x))) +s.i5(a) +a.ev()}} +A.B5.prototype={ +hE(a,b,c,d){if(!this.k3.p(0,b))return!1 +return this.mg(a,b,!0,d)}, +hz(a){var s=this,r=s.k3 +r.toString +s.sft(a.YL(r,s.k4,t.cW.a(s.x))) +s.i5(a) +a.ev()}} +A.vE.prototype={ +hE(a,b,c,d){if(!this.k3.p(0,b))return!1 +return this.mg(a,b,!0,d)}, +hz(a){var s=this,r=s.k3 +r.toString +s.sft(a.YK(r,s.k4,t.L5.a(s.x))) +s.i5(a) +a.ev()}} +A.B8.prototype={ +hz(a){var s=this,r=s.k3 +r.toString +s.sft(a.YN(r,t.C5.a(s.x))) +s.i5(a) +a.ev()}} +A.Cz.prototype={ +hz(a){var s=this +s.sft(a.YO(s.aL,s.k3,t.C6.a(s.x))) +s.i5(a) +a.ev()}} +A.m3.prototype={ +sc9(a,b){var s=this +if(b.j(0,s.aL))return +s.aL=b +s.aJ=!0 +s.eR()}, +hz(a){var s,r,q=this +q.bG=q.aL +if(!q.k3.j(0,B.e)){s=q.k3 +s=A.ko(s.a,s.b,0) +r=q.bG +r.toString +s.cP(0,r) +q.bG=s}q.sft(a.wr(q.bG.a,t.qf.a(q.x))) +q.i5(a) +a.ev()}, +GH(a){var s,r=this +if(r.aJ){s=r.aL +s.toString +r.aM=A.tn(A.aGG(s)) +r.aJ=!1}s=r.aM +if(s==null)return null +return A.c7(s,a)}, +hE(a,b,c,d){var s=this.GH(b) +if(s==null)return!1 +return this.a2W(a,s,!0,d)}, +qi(a,b){var s=this.bG +if(s==null){s=this.aL +s.toString +b.cP(0,s)}else b.cP(0,s)}} +A.DH.prototype={ +sHc(a,b){var s=this,r=s.aL +if(b!=r){if(b===255||r===255)s.sft(null) +s.aL=b +s.eR()}}, +hz(a){var s,r,q,p=this +if(p.ax==null){p.sft(null) +return}s=p.aL +s.toString +r=p.k3 +q=p.x +if(s<255)p.sft(a.YP(s,r,t.Zr.a(q))) +else p.sft(a.K5(r.a,r.b,t.Ff.a(q))) +p.i5(a) +a.ev()}} +A.At.prototype={ +sAL(a,b){if(!b.j(0,this.k3)){this.k3=b +this.eR()}}, +hz(a){var s=this,r=s.k3 +r.toString +s.sft(a.YJ(r,s.k4,t.tX.a(s.x))) +s.i5(a) +a.ev()}} +A.wF.prototype={ +k(a){var s=A.bh(this),r=this.a!=null?"":"" +return"#"+s+"("+r+")"}} +A.CU.prototype={ +soL(a){var s=this,r=s.k3 +if(r===a)return +if(s.y!=null){if(r.a===s)r.a=null +a.a=s}s.k3=a}, +scz(a,b){if(b.j(0,this.k4))return +this.k4=b +this.eR()}, +ah(a){this.a29(a) +this.k3.a=this}, +ad(a){var s=this.k3 +if(s.a===this)s.a=null +this.a2a(0)}, +hE(a,b,c,d){return this.mg(a,b.Y(0,this.k4),!0,d)}, +hz(a){var s,r=this +if(!r.k4.j(0,B.e)){s=r.k4 +r.sft(a.wr(A.ko(s.a,s.b,0).a,t.qf.a(r.x)))}else r.sft(null) +r.i5(a) +if(!r.k4.j(0,B.e))a.ev()}, +qi(a,b){var s +if(!this.k4.j(0,B.e)){s=this.k4 +b.au(0,s.a,s.b)}}} +A.Cc.prototype={ +GH(a){var s,r,q,p,o=this +if(o.R8){s=o.L4() +s.toString +o.p4=A.tn(s) +o.R8=!1}if(o.p4==null)return null +r=new A.kI(new Float64Array(4)) +r.xq(a.a,a.b,0,1) +s=o.p4.a2(0,r).a +q=s[0] +p=o.p1 +return new A.k(q-p.a,s[1]-p.b)}, +hE(a,b,c,d){var s,r=this +if(r.k3.a==null){if(r.k4)return r.mg(a,b.Y(0,r.ok),!0,d) +return!1}s=r.GH(b) +if(s==null)return!1 +return r.mg(a,s,!0,d)}, +L4(){var s,r +if(this.p3==null)return null +s=this.p2 +r=A.ko(-s.a,-s.b,0) +s=this.p3 +s.toString +r.cP(0,s) +return r}, +a9R(){var s,r,q,p,o,n,m=this +m.p3=null +s=m.k3.a +if(s==null)return +r=t.KV +q=A.a([s],r) +p=A.a([m],r) +A.add(s,m,q,p) +o=A.aL4(q) +s.qi(null,o) +r=m.p1 +o.au(0,r.a,r.b) +n=A.aL4(p) +if(n.fL(n)===0)return +n.cP(0,o) +m.p3=n +m.R8=!0}, +gqe(){return!0}, +hz(a){var s,r,q=this +if(q.k3.a==null&&!q.k4){q.p2=q.p3=null +q.R8=!0 +q.sft(null) +return}q.a9R() +s=q.p3 +r=t.qf +if(s!=null){q.p2=q.ok +q.sft(a.wr(s.a,r.a(q.x))) +q.i5(a) +a.ev()}else{q.p2=null +s=q.ok +q.sft(a.wr(A.ko(s.a,s.b,0).a,r.a(q.x))) +q.i5(a) +a.ev()}q.R8=!0}, +qi(a,b){var s=this.p3 +if(s!=null)b.cP(0,s) +else{s=this.ok +b.cP(0,A.ko(s.a,s.b,0))}}} +A.Ai.prototype={ +hE(a,b,c,d){var s,r,q,p=this,o=p.mg(a,b,!0,d),n=a.a +if(n.length!==0&&!0)return o +s=p.k4 +if(s!=null){r=p.ok +q=r.a +r=r.b +s=!new A.w(q,r,q+s.a,r+s.b).p(0,b)}else s=!1 +if(s)return o +if(A.cf(p.$ti.c)===A.cf(d)){o=o||!1 +n.push(new A.Aj(d.a(p.k3),b.Y(0,p.ok),d.h("Aj<0>")))}return o}} +A.Zh.prototype={} +A.a_3.prototype={ +auY(a){var s=this.a +this.a=a +return s}, +k(a){var s="#",r=A.bh(this.b),q=this.a.a +return s+A.bh(this)+"("+("latestEvent: "+(s+r))+", "+("annotations: [list of "+q+"]")+")"}} +A.a_4.prototype={ +giZ(a){var s=this.c +return s.giZ(s)}} +A.Qv.prototype={ +PR(a){var s,r,q,p,o,n,m=t._h,l=A.n1(null,null,m,t.xV) +for(s=a.a,r=s.length,q=0;q") +this.b.aq2(a.giZ(a),a.d,A.n8(new A.aX(s,r),new A.ai1(),r.h("n.E"),t.Pb))}, +avY(a,b){var s,r,q,p,o,n=this,m={} +if(a.gcN(a)!==B.bj)return +if(t.ks.b(a))return +m.a=null +if(t.PB.b(a))m.a=A.aeY() +else{s=a.grR() +m.a=b==null?n.a.$2(a.gbv(a),s):b}r=a.giZ(a) +q=n.c +p=q.i(0,r) +if(!A.aYx(p,a))return +o=q.a +new A.ai4(m,n,p,a,r).$0() +if(o!==0!==(q.a!==0))n.a6()}, +avP(){new A.ai2(this).$0()}} +A.ai1.prototype={ +$1(a){return a.gHY(a)}, +$S:405} +A.ai4.prototype={ +$0(){var s=this +new A.ai3(s.a,s.b,s.c,s.d,s.e).$0()}, +$S:0} +A.ai3.prototype={ +$0(){var s,r,q,p,o,n=this,m=null,l=n.c +if(l==null){s=n.d +if(t.PB.b(s))return +n.b.c.n(0,n.e,new A.a_3(A.n1(m,m,t._h,t.xV),s))}else{s=n.d +if(t.PB.b(s))n.b.c.C(0,s.giZ(s))}r=n.b +q=r.c.i(0,n.e) +if(q==null){l.toString +q=l}p=q.b +q.b=s +o=t.PB.b(s)?A.n1(m,m,t._h,t.xV):r.PR(n.a.a) +r.Pt(new A.a_4(q.auY(o),o,p,s))}, +$S:0} +A.ai2.prototype={ +$0(){var s,r,q,p,o,n,m +for(s=this.a,r=s.c,r=r.gaT(r),q=A.o(r),q=q.h("@<1>").N(q.z[1]),r=new A.bN(J.ap(r.a),r.b,q.h("bN<1,2>")),q=q.z[1];r.q();){p=r.a +if(p==null)p=q.a(p) +o=p.b +n=s.aa8(p) +m=p.a +p.a=n +s.Pt(new A.a_4(m,n,o,null))}}, +$S:0} +A.ai_.prototype={ +$2(a,b){var s +if(!this.a.ai(0,a))if(a.gCB()&&a.gBG(a)!=null){s=a.gBG(a) +s.toString +s.$1(this.b.b0(this.c.i(0,a)))}}, +$S:406} +A.ai0.prototype={ +$1(a){return!this.a.ai(0,a)}, +$S:407} +A.a4F.prototype={} +A.d6.prototype={ +ad(a){}, +k(a){return""}} +A.ph.prototype={ +ef(a,b){var s,r=this +if(a.gf8()){r.xz() +if(!a.cy){s=a.ay +s===$&&A.b() +s=!s}else s=!0 +if(s)A.aMj(a,null,!0) +else if(a.db)A.aYS(a) +s=a.ch.a +s.toString +t.gY.a(s) +s.scz(0,b) +r.Uk(s)}else{s=a.ay +s===$&&A.b() +if(s){a.ch.sar(0,null) +a.G0(r,b)}else a.G0(r,b)}}, +Uk(a){a.eg(0) +this.a.zQ(0,a)}, +gbe(a){var s +if(this.e==null)this.Ss() +s=this.e +s.toString +return s}, +Ss(){var s,r,q=this +q.c=A.aYX(q.b) +s=$.W() +r=s.qD() +q.d=r +q.e=s.qC(r,null) +r=q.c +r.toString +q.a.zQ(0,r)}, +xz(){var s,r=this +if(r.e==null)return +s=r.c +s.toString +s.sYv(r.d.mR()) +r.e=r.d=r.c=null}, +LE(){if(this.c==null)this.Ss() +var s=this.c +if(!s.ch){s.ch=!0 +s.eR()}}, +rD(a,b,c,d){var s,r=this +if(a.ax!=null)a.Kh() +r.xz() +r.Uk(a) +s=r.any(a,d==null?r.b:d) +b.$2(s,c) +s.xz()}, +lS(a,b,c){return this.rD(a,b,c,null)}, +any(a,b){return new A.ph(a,b)}, +lQ(a,b,c,d,e,f){var s,r,q=this +if(e===B.o){d.$2(q,b) +return null}s=c.cm(b) +if(a){r=f==null?new A.r1(B.a9,A.A(t.S,t.M),A.ag(t.G)):f +if(!s.j(0,r.k3)){r.k3=s +r.eR()}if(e!==r.k4){r.k4=e +r.eR()}q.rD(r,d,b,s) +return r}else{q.amt(s,e,s,new A.aj5(q,d,b)) +return null}}, +auD(a,b,c,d,e,f,g){var s,r,q,p=this +if(f===B.o){e.$2(p,b) +return null}s=c.cm(b) +r=d.cm(b) +if(a){q=g==null?new A.B5(B.dz,A.A(t.S,t.M),A.ag(t.G)):g +if(!r.j(0,q.k3)){q.k3=r +q.eR()}if(f!==q.k4){q.k4=f +q.eR()}p.rD(q,e,b,s) +return q}else{p.amr(r,f,s,new A.aj4(p,e,b)) +return null}}, +K4(a,b,c,d,e,f,g){var s,r,q,p=this +if(f===B.o){e.$2(p,b) +return null}s=c.cm(b) +r=d.cm(b) +if(a){q=g==null?new A.vE(B.dz,A.A(t.S,t.M),A.ag(t.G)):g +if(r!==q.k3){q.k3=r +q.eR()}if(f!==q.k4){q.k4=f +q.eR()}p.rD(q,e,b,s) +return q}else{p.amp(r,f,s,new A.aj3(p,e,b)) +return null}}, +auC(a,b,c,d,e,f){return this.K4(a,b,c,d,e,B.dz,f)}, +p5(a,b,c,d,e){var s,r=this,q=b.a,p=b.b,o=A.ko(q,p,0) +o.cP(0,c) +o.au(0,-q,-p) +if(a){s=e==null?A.aNK(null):e +s.sc9(0,o) +r.rD(s,d,b,A.aLX(o,r.b)) +return s}else{q=r.gbe(r) +q.bH(0) +q.a2(0,o.a) +d.$2(r,b) +r.gbe(r).b_(0) +return null}}, +K6(a,b,c,d){var s=d==null?A.aGv():d +s.sHc(0,b) +s.scz(0,a) +this.lS(s,c,B.e) +return s}, +k(a){return"PaintingContext#"+A.fE(this)+"(layer: "+this.a.k(0)+", canvas bounds: "+this.b.k(0)+")"}} +A.aj5.prototype={ +$0(){return this.b.$2(this.a,this.c)}, +$S:0} +A.aj4.prototype={ +$0(){return this.b.$2(this.a,this.c)}, +$S:0} +A.aj3.prototype={ +$0(){return this.b.$2(this.a,this.c)}, +$S:0} +A.a9M.prototype={} +A.nf.prototype={ +rI(){var s=this.cx +if(s!=null)s.a.Iu()}, +sKm(a){var s=this.e +if(s==a)return +if(s!=null)s.ad(0) +this.e=a +if(a!=null)a.ah(this)}, +WM(){var s,r,q,p,o,n,m,l,k,j,i,h=this +try{for(o=t.TT;n=h.r,n.length!==0;){s=n +h.r=A.a([],o) +J.a66(s,new A.ajD()) +for(r=0;r")) +i.b2(m,l,k,j.c) +B.b.E(n,i) +break}}q=J.bq(s,r) +if(q.z&&q.y===h)q.aej()}h.f=!1}for(o=h.CW,o=A.cX(o,o.r,A.o(o).c),n=o.$ti.c;o.q();){m=o.d +p=m==null?n.a(m):m +p.WM()}}finally{h.f=!1}}, +a9L(a){try{a.$0()}finally{this.f=!0}}, +WL(){var s,r,q,p,o=this.z +B.b.dK(o,new A.ajC()) +for(s=o.length,r=0;r0){if(s.at==null){r=t.bu +s.at=new A.Tw(s.c,A.aS(r),A.A(t.S,r),A.aS(r),$.aO()) +r=s.b +if(r!=null)r.$0()}}else{r=s.at +if(r!=null){r.m() +s.at=null +r=s.d +if(r!=null)r.$0()}}}, +WO(){var s,r,q,p,o,n,m,l,k=this +if(k.at==null)return +try{p=k.ch +o=A.V(p,!0,A.o(p).c) +B.b.dK(o,new A.ajF()) +s=o +p.a0(0) +for(p=s,n=p.length,m=0;m0;n=m){m=n-1 +r[n].dj(r[m],o)}return o}, +mN(a){return null}, +W_(a){return null}, +xg(){this.y.ch.D(0,this) +this.y.rI()}, +f3(a){}, +xl(a){var s,r=this +if(r.y.at==null)return +s=r.fr +if(s!=null&&!s.y)s.a0P(a) +else if(r.gaU(r)!=null)r.gaU(r).xl(a)}, +gz2(){var s,r=this +if(r.dx==null){s=A.lQ() +r.dx=s +r.f3(s)}s=r.dx +s.toString +return s}, +o4(){this.dy=!0 +this.fr=null +this.b1(new A.alp())}, +aY(){var s,r,q,p,o=this,n=o.y +if(n==null||n.at==null){o.dx=null +return}if(o.fr!=null){n=o.dx +n=n==null?null:n.a +s=n===!0}else s=!1 +n=o.dx +r=(n==null?null:n.k1)!=null||o.gz2().k1!=null +o.dx=null +q=o.gz2().a&&s +p=o +while(!0){if(p.gaU(p) instanceof A.r)n=r||!q +else n=!1 +if(!n)break +if(p!==o&&p.dy)break +p.dy=!0 +if(q)r=!1 +p=p.gaU(p) +if(p.dx==null){n=A.lQ() +p.dx=n +p.f3(n)}q=p.dx.a +if(q&&p.fr==null)return}if(p!==o&&o.fr!=null&&o.dy)o.y.ch.C(0,o) +if(!p.dy){p.dy=!0 +n=o.y +if(n!=null){n.ch.D(0,p) +o.y.rI()}}}, +akc(){var s,r,q,p,o,n,m,l=this,k=null +if(l.z)return +s=l.fr +r=s==null +if(r)q=k +else{q=s.ch +if(q==null)q=k +else q=q.Q||q.y}s=r?k:s.z +p=t.pp.a(l.Ph(s===!0,q===!0)) +s=t.QF +o=A.a([],s) +n=A.a([],s) +s=l.fr +r=s==null +q=r?k:s.f +m=r?k:s.r +s=r?k:s.w +p.qw(s==null?0:s,m,q,o,n)}, +Ph(a,b){var s,r,q,p,o,n,m,l,k,j,i,h,g,f=this,e={},d=f.gz2() +e.a=d.d +e.b=!d.e&&!d.a +s=a||d.b +r=b||d.p4 +q=A.a([],t.q1) +p=d.c||!(f.gaU(f) instanceof A.r) +o=d.k1!=null +n=t.pp +m=A.A(t.ZX,n) +l=t.CZ +k=A.a([],l) +j=A.a([],t.Oc) +i=d.bZ +i=i==null?null:i.a!==0 +f.fX(new A.alk(e,f,r,s,q,k,j,d,i===!0,o,m)) +if(p)for(n=k.length,h=0;h"))) +for(i=g.b,h=0;!1;++h)j.push(i[h].eQ(0,new A.alm(f,m),n).dI(0))}n=f.dy=!1 +if(!(f.gaU(f) instanceof A.r)){f.yB(k,!0) +B.b.aa(j,f.gQp()) +n=e.a +g=new A.a1p(A.a([],l),A.a([f],t.TT),n)}else if(e.b){n=e.a +g=new A.WQ(j,A.a([],l),n)}else{f.yB(k,!0) +B.b.aa(j,f.gQp()) +i=e.a +g=new A.uX(b,d,j,A.a([],l),A.a([f],t.TT),i) +if(a?!d.b:n){g.ya() +g.f.b=!0}if(d.a)g.z=!0}g.E(0,k) +return g}, +yB(a,b){var s,r,q,p,o,n,m,l=this,k=A.aS(t.pp) +for(s=J.aF(a),r=0;r#"+A.bh(this)}, +k(a){return this.dd()}, +hQ(a,b,c,d){var s,r=this +if(r.gaU(r) instanceof A.r){s=r.gaU(r) +s.toString +s.hQ(a,b==null?r:b,c,d)}}, +Dn(){return this.hQ(B.bA,null,B.z,null)}, +te(a){return this.hQ(B.bA,null,B.z,a)}, +xu(a,b,c){return this.hQ(a,null,b,c)}, +tf(a,b){return this.hQ(B.bA,a,B.z,b)}, +$iah:1} +A.aln.prototype={ +$0(){var s=A.a([],t.E),r=this.a +s.push(A.aFy("The following RenderObject was being processed when the exception was fired",B.KS,r)) +s.push(A.aFy("RenderObject",B.KT,r)) +return s}, +$S:21} +A.alq.prototype={ +$0(){this.b.$1(this.c.a(this.a.gW()))}, +$S:0} +A.alo.prototype={ +$1(a){var s +a.Tf() +s=a.cx +s===$&&A.b() +if(s)this.a.cx=!0}, +$S:15} +A.alp.prototype={ +$1(a){a.o4()}, +$S:15} +A.alk.prototype={ +$1(a){var s,r,q,p,o,n,m,l,k,j,i,h,g,f=this,e=a.Ph(f.d,f.c) +if(e.a){B.b.a0(f.e) +B.b.a0(f.f) +B.b.a0(f.r) +if(!f.w.a)f.a.a=!0}for(s=e.gY8(),r=s.length,q=f.f,p=f.y,o=f.x,n=f.b,m=f.w,l=f.e,k=f.z,j=0;j1){b=new A.a2_() +b.NX(a3,a4,c)}else b=a2 +c=b.c +c===$&&A.b() +a=b.d +a===$&&A.b() +a0=A.hs(c,a) +e=e==null?a0:e.j0(a0) +c=b.b +if(c!=null){a1=A.hs(b.c,c) +f=f==null?a1:f.ea(a1)}c=b.a +if(c!=null){a1=A.hs(b.c,c) +g=g==null?a1:g.ea(a1)}d=d.c +if(d!=null)l.E(0,d)}}if(h!=null)j=!(e.a>=e.c||e.b>=e.d) +else j=!1 +if(j){if(i==null||a6.p(0,i.b))i=A.Fl(a2,B.b.gL(o).gtd()) +a6.D(0,i.b) +i.dy=l +if(!i.e.j(0,e)){i.e=e +i.i_()}if(!A.aGm(i.d,a2)){i.d=null +i.i_()}i.f=f +i.r=g +for(k=k.gab(m);k.q();){j=k.gJ(k) +if(j.gib()!=null)B.b.gL(j.b).fr=i}i.a_a(0,h) +a5.push(i)}}}, +qw(a,b,a0,a1,a2){var s,r,q,p,o,n,m,l,k,j,i,h,g,f=this,e=null,d=A.aS(t.S),c=f.y +for(s=f.x,r=s.length,q=0;q");s.q();){n=s.gJ(s) +if(n instanceof A.uX){if(n.z){m=n.b +m=B.b.gL(m).fr!=null&&d.p(0,B.b.gL(m).fr.b)}else m=!1 +if(m)B.b.gL(n.b).fr=null}m=n.b +l=new A.ac(r,1,e,p) +l.b2(r,1,e,o) +B.b.E(m,l) +n.qw(a+f.f.y1,b,a0,a1,a2)}return}k=f.a8w(b,a0) +s=f.e +r=!s +if(r){if(k==null)p=e +else{p=k.d +p===$&&A.b() +if(!p.ga7(p)){p=k.c +p===$&&A.b() +p=p.XR()}else p=!0}p=p===!0}else p=!1 +if(p)return +p=f.b +o=B.b.gL(p) +if(o.fr==null)o.fr=A.Fl(e,B.b.gL(p).gtd()) +j=B.b.gL(p).fr +j.sJg(s) +j.dy=f.c +j.w=a +if(a!==0){f.ya() +s=f.f +s.sfq(0,s.y1+a)}if(k!=null){s=k.d +s===$&&A.b() +j.sbd(0,s) +s=k.c +s===$&&A.b() +j.sc9(0,s) +j.f=k.b +j.r=k.a +if(r&&k.e){f.ya() +f.f.b7(B.im,!0)}}s=t.QF +i=A.a([],s) +f.Qw(j.f,j.r,a2,d) +for(r=J.ap(c);r.q();){o=r.gJ(r) +if(o instanceof A.uX){if(o.z){n=o.b +n=B.b.gL(n).fr!=null&&d.p(0,B.b.gL(n).fr.b)}else n=!1 +if(n)B.b.gL(o.b).fr=null}h=A.a([],s) +n=j.f +o.qw(0,j.r,n,i,h) +B.b.E(a2,h)}s=f.f +if(s.a)B.b.gL(p).qk(j,f.f,i) +else j.m5(0,i,s) +a1.push(j) +for(s=a2.length,r=t.g3,q=0;q1){s=new A.a2_() +s.NX(b,a,r) +r=s}else r=null +return r}, +gib(){return this.z?null:this.f}, +E(a,b){var s,r,q,p,o,n,m=this +for(s=b.length,r=m.y,q=0;q0;){r=c[s];--s +q=c[s] +a=r.W_(q) +if(a!=null){m.b=a +m.a=A.aOC(m.a,r.mN(q))}else m.b=A.aOC(m.b,r.mN(q)) +l=$.aT2() +l.de() +A.b20(r,q,m.c,l) +m.b=A.aOD(m.b,l) +m.a=A.aOD(m.a,l)}p=B.b.gL(c) +l=m.b +l=l==null?p.gnz():l.ea(p.gnz()) +m.d=l +o=m.a +if(o!=null){n=o.ea(l) +if(n.ga7(n)){l=m.d +l=!l.ga7(l)}else l=!1 +m.e=l +if(!l)m.d=n}}} +A.a_H.prototype={} +A.a0Y.prototype={} +A.ng.prototype={ +j(a,b){if(b==null)return!1 +return b instanceof A.ng&&b.b===this.b}, +gt(a){return A.N(B.a4c,this.b,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}} +A.jI.prototype={ +ad(a){this.a=this.b=null +this.a5o(0)}, +k(a){var s=A.h(this.b),r=this.a +r=r==null?"not laid out":"offset: "+r.k(0) +return"widget: "+s+", "+r}} +A.Sh.prototype={ +ew(a){if(!(a.b instanceof A.jI))a.b=new A.jI(null,null)}, +rr(a,b){var s,r=A.a([],t.tZ),q=this.a4$,p=A.o(this).h("at.1") +while(q!=null){r.push(A.aZQ(q,a,b)) +s=q.b +s.toString +q=p.a(s).ak$}return r}, +Yx(a){var s,r,q,p,o,n,m=this.a4$ +for(s=a.length,r=t.ot,q=A.o(this).h("at.1"),p=0;ph){d=c1[h].dy +d=d!=null&&d.p(0,new A.ng(i,b8))}else d=!1 +if(!d)break +b=c1[h] +d=s.b +d.toString +if(m.a(d).a!=null)b6.push(b);++h}b8=s.b +b8.toString +s=n.a(b8).ak$;++i}else{a=o.a(A.r.prototype.gW.call(b4)) +b7.nA(b4.cY) +a0=a.b +a0=b4.aH||b4.aD===B.cj?a0:1/0 +b7.w1(a0,a.a) +a1=b7.pf(new A.hB(j,e,B.m,!1,c,d),B.e8,B.cO) +if(a1.length===0)continue +d=B.b.gL(a1) +a2=new A.w(d.a,d.b,d.c,d.d) +a3=B.b.gL(a1).e +for(d=A.S(a1),c=d.h("ac<1>"),a=new A.ac(a1,1,b5,c),a.b2(a1,1,b5,d.c),a=new A.bu(a,a.gu(a),c.h("bu")),c=c.h("af.E");a.q();){d=a.d +if(d==null)d=c.a(d) +a2=a2.j0(new A.w(d.a,d.b,d.c,d.d)) +a3=d.e}d=a2.a +c=Math.max(0,d) +a=a2.b +a0=Math.max(0,a) +d=Math.min(a2.c-d,o.a(A.r.prototype.gW.call(b4)).b) +a=Math.min(a2.d-a,o.a(A.r.prototype.gW.call(b4)).d) +a4=Math.floor(c)-4 +a5=Math.floor(a0)-4 +d=Math.ceil(c+d)+4 +a=Math.ceil(a0+a)+4 +a6=new A.w(a4,a5,d,a) +a7=A.lQ() +a8=k+1 +a7.k2=new A.x_(k,b5) +a7.e=!0 +a7.aL=l +a0=f.b +b8=a0==null?b8:a0 +a7.RG=new A.cS(b8,f.f) +a9=f.c +if(a9!=null){b8=a9.bq +if(b8!=null){a7.fG(B.dW,b8) +a7.b7(B.lC,!0)}}b8=b9.r +if(b8!=null){b0=b8.ea(a6) +if(b0.a>=b0.c||b0.b>=b0.d)b8=!(a4>=d||a5>=a) +else b8=!1 +a7.b7(B.im,b8)}b1=A.bc("newChild") +b8=b4.d9 +d=b8==null?b5:b8.a!==0 +if(d===!0){b8.toString +d=new A.aX(b8,A.o(b8).h("aX<1>")) +b2=d.gab(d) +if(!b2.q())A.T(A.cm()) +b8=b8.C(0,b2.gJ(b2)) +b8.toString +if(b1.b!==b1)A.T(A.n_(b1.a)) +b1.b=b8}else{b3=new A.pU() +b8=A.Fl(b3,b4.ag1(b3)) +if(b1.b!==b1)A.T(A.n_(b1.a)) +b1.b=b8}if(b8===b1)A.T(A.fy(b1.a)) +J.aJv(b8,a7) +if(!b8.e.j(0,a6)){b8.e=a6 +b8.i_()}b8=b1.b +if(b8===b1)A.T(A.fy(b1.a)) +d=b8.a +d.toString +r.n(0,d,b8) +b8=b1.b +if(b8===b1)A.T(A.fy(b1.a)) +b6.push(b8) +k=a8 +l=a3}}b4.d9=r +b9.m5(0,b6,c0)}, +ag1(a){return new A.als(this,a)}, +o4(){this.DH() +this.d9=null}} +A.alu.prototype={ +$1(a){return a.y=null}, +$S:413} +A.alv.prototype={ +$1(a){var s=a.x +s===$&&A.b() +return s.c!==B.dV}, +$S:414} +A.alt.prototype={ +$2(a,b){return new A.G(a.d2(B.bb,1/0,a.gcc()),0)}, +$S:101} +A.alr.prototype={ +$1(a){var s,r +if(a instanceof A.kX){s=a.b +$label0$0:{if(B.hZ===s||B.i_===s||B.i0===s){r=!1 +break $label0$0}if(B.i1===s||B.i2===s||B.cF===s){r=!0 +break $label0$0}r=null}}else r=!0 +return r}, +$S:65} +A.als.prototype={ +$0(){var s=this.a,r=s.d9.i(0,this.b) +r.toString +s.tf(s,r.e)}, +$S:0} +A.nW.prototype={ +gl(a){var s=this.x +s===$&&A.b() +return s}, +ag2(){var s=this,r=s.Pg(),q=s.x +q===$&&A.b() +if(q.j(0,r))return +s.x=r +s.a6()}, +Pg(){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c=this,b=c.d +if(b==null||c.e==null)return B.zJ +s=b.a +r=c.e.a +b=c.b +q=b.yk(new A.b9(s,B.m)) +p=s===r?q:b.yk(new A.b9(r,B.m)) +o=b.B +n=o.x +n.toString +m=s>r!==(B.Z===n) +l=A.ko(c.gfH().a,c.gfH().b,0) +l.fL(l) +k=A.cn(B.m,s,r,!1) +j=A.a([],t.AO) +for(b=b.l0(k),n=b.length,i=0;io!==sp?m.a:e}else if(f!=null)l=n.ae.a +if(i!==sp!==s>p){l=sp?m.a:f}else if(e!=null)l=n.ap +if(s!==p&&i!==s>p){k=h.pN(e) +h.e=i?k.a:k.b}}l=g}s=l==null?n:l}l=h.Ei(s) +if(b)h.e=l +else h.d=l +s=l.a +p=h.a +if(s===p.b)return B.aT +if(s===p.a)return B.b9 +return A.anR(h.gfH(),q)}, +Ei(a){var s,r=a.a,q=this.a,p=q.b +if(r<=p)s=r===p&&a.b===B.m +else s=!0 +if(s)return new A.b9(p,B.al) +q=q.a +if(ro&&q.a.a>o)return B.aT}m.d=s +m.e=q.a +return B.aU}, +pN(a){var s,r,q,p,o=this.b +o.mr(t.k.a(A.r.prototype.gW.call(o))) +s=o.B.b.a.a.l3(a) +r=A.bc("start") +q=A.bc("end") +o=a.a +p=s.b +if(o>p)r.b=q.b=new A.b9(o,B.m) +else{r.b=new A.b9(s.a,B.m) +q.b=new A.b9(p,B.al)}o=r.aI() +return new A.a0G(q.aI(),o)}, +abt(a,b,c){var s,r,q,p,o,n,m,l=this,k=l.b,j=k.br(0,null) +if(j.fL(j)===0)switch(c){case B.ij:case B.ff:return B.b9 +case B.ik:case B.fe:return B.aT}s=A.c7(j,new A.k(a,0)).a +switch(c){case B.ij:case B.ik:if(b){k=l.e +k.toString +r=k}else{k=l.d +k.toString +r=k}q=l.adK(r,!1,s) +p=q.a +o=q.b +break +case B.fe:case B.ff:n=l.e +if(n==null){n=new A.b9(l.a.b,B.al) +l.e=n +r=n}else r=n +n=l.d +if(n==null){l.d=r +m=r}else m=n +p=k.eh(new A.k(s,k.yk(b?r:m).b-k.B.gda()/2)) +o=B.aU +break +default:p=null +o=null}if(b)l.e=p +else l.d=p +return o}, +abW(a,b,c){var s,r,q,p,o,n,m=this,l=m.e +if(l==null){l=m.a +l=a?new A.b9(l.a,B.m):new A.b9(l.b,B.al) +m.e=l +s=l}else s=l +l=m.d +if(l==null){m.d=s +r=s}else r=l +s=b?s:r +if(a&&s.a===m.a.b)return B.aT +l=!a +if(l&&s.a===m.a.a)return B.b9 +switch(c){case B.m_:l=m.a +q=m.FK(s,a,new A.vv(B.d.P(m.c,l.a,l.b))) +p=B.aU +break +case B.Zq:l=m.b.B +o=l.f +o.toString +q=m.FK(s,a,new A.yE(o,l.b.a.a).gYb()) +p=B.aU +break +case B.Zr:q=m.af2(s,a,new A.wG(m)) +p=B.aU +break +case B.Zs:o=m.a +n=o.a +o=o.b +q=m.FK(s,a,new A.Bx(B.d.P(m.c,n,o))) +if(a&&q.a===o)p=B.aT +else p=l&&q.a===n?B.b9:B.aU +break +default:p=null +q=null}if(b)m.e=q +else m.d=q +return p}, +FK(a,b,c){var s,r=a.a +if(b){r=c.fE(r) +s=r==null?this.a.b:r}else{r=c.fC(r-1) +s=r==null?this.a.a:r}return new A.b9(s,B.m)}, +af2(a,b,c){var s,r,q,p,o=this +switch(a.b.a){case 0:s=a.a +if(s<1&&!b)return B.fs +r=o.a.a +s=new A.vv(o.c).fC(r+s) +if(s==null)s=r +q=Math.max(0,s)-1 +break +case 1:q=a.a +break +default:q=null}if(b){s=c.fE(q) +p=s==null?o.a.b:s}else{s=c.fC(q) +p=s==null?o.a.a:s}return new A.b9(p,B.m)}, +adK(a,b,c){var s,r,q,p,o,n=this,m=n.b,l=m.B.qx(),k=m.l1(a,B.F),j=l.length,i=j-1 +for(s=k.b,r=0;rs){i=J.aJk(q) +break}}if(b&&i===l.length-1)p=new A.b9(n.a.b,B.al) +else if(!b&&i===0)p=new A.b9(n.a.a,B.m) +else p=n.Ei(m.eh(new A.k(c,l[b?i+1:i-1].gkt()))) +m=p.a +j=n.a +if(m===j.a)o=B.b9 +else o=m===j.b?B.aT:B.aU +return new A.aH(p,o,t.UH)}, +agC(a){var s,r,q,p,o=this +if(o.d==null||o.e==null)return!1 +s=A.bc("currentStart") +r=A.bc("currentEnd") +q=o.d +q.toString +p=o.e +p.toString +if(A.aHB(q,p)>0){s.b=q +r.b=p}else{s.b=p +r.b=q}return A.aHB(s.aI(),a)>=0&&A.aHB(r.aI(),a)<=0}, +br(a,b){var s=A.ko(this.gfH().a,this.gfH().b,0) +s.cP(0,this.b.br(0,b)) +return s}, +kT(a,b){if(this.b.y==null)return}, +gfH(){var s,r,q,p,o,n,m=this,l=m.y +if(l==null){l=m.b +s=m.a +r=s.a +q=l.l0(A.cn(B.m,r,s.b,!1)) +if(q.length!==0){l=B.b.gL(q) +p=new A.w(l.a,l.b,l.c,l.d) +for(o=1;o=q)return r.a +s=this.DK(a) +r=this.A +q=r.a +if(!(q>=1/0))return A.O(s,q,r.b) +return s}, +bo(a){var s,r=this.A,q=r.d +if(q<1/0&&r.c>=q)return r.c +s=this.DJ(a) +r=this.A +q=r.c +if(!(q>=1/0))return A.O(s,q,r.d) +return s}, +bA(){var s=this,r=t.k.a(A.r.prototype.gW.call(s)),q=s.fr$,p=s.A +if(q!=null){q.bJ(p.qV(r),!0) +q=s.fr$ +s.id=q.gv(q)}else s.id=p.qV(r).bf(B.Q)}, +c5(a){var s=this.fr$,r=this.A +if(s!=null)return s.ke(r.qV(a)) +else return r.qV(a).bf(B.Q)}} +A.Sj.prototype={ +sasO(a,b){if(this.A===b)return +this.A=b +this.a8()}, +sasM(a,b){if(this.a1===b)return +this.a1=b +this.a8()}, +Qf(a){var s,r,q=a.a,p=a.b +p=p<1/0?p:A.O(this.A,q,p) +s=a.c +r=a.d +return new A.az(q,p,s,r<1/0?r:A.O(this.a1,s,r))}, +R5(a,b){var s=this.fr$ +if(s!=null)return a.bf(b.$2(s,this.Qf(a))) +return this.Qf(a).bf(B.Q)}, +c5(a){return this.R5(a,A.qr())}, +bA(){this.id=this.R5(t.k.a(A.r.prototype.gW.call(this)),A.v4())}} +A.Eq.prototype={ +saln(a,b){if(this.A===b)return +this.A=b +this.a8()}, +bp(a){var s +if(isFinite(a))return a*this.A +s=this.fr$ +if(s!=null)return s.d2(B.bb,a,s.gcc()) +return 0}, +bo(a){var s +if(isFinite(a))return a/this.A +s=this.fr$ +if(s!=null)return s.d2(B.bc,a,s.gcb()) +return 0}, +N3(a){var s,r,q,p,o=a.a,n=a.b +if(o>=n&&a.c>=a.d)return new A.G(A.O(0,o,n),A.O(0,a.c,a.d)) +s=this.A +if(isFinite(n)){r=n/s +q=n}else{r=a.d +q=r*s}if(q>n)r=n/s +else n=q +p=a.d +if(r>p){n=p*s +r=p}if(n0}, +gf8(){return this.fr$!=null&&this.A>0}, +sdH(a,b){var s,r,q,p,o=this +if(o.a1===b)return +s=o.fr$!=null +r=s&&o.A>0 +q=o.A +o.a1=b +p=B.c.an(A.O(b,0,1)*255) +o.A=p +if(r!==(s&&p>0))o.kJ() +o.Y5() +if(q!==0!==(o.A!==0)&&!0)o.aY()}, +szN(a){return}, +nk(a){return this.A>0}, +rQ(a){var s=a==null?A.aGv():a +s.sHc(0,this.A) +return s}, +am(a,b){if(this.fr$==null||this.A===0)return +this.iC(a,b)}, +fX(a){var s,r=this.fr$ +if(r!=null)s=this.A!==0||!1 +else s=!1 +if(s){r.toString +a.$1(r)}}} +A.Eo.prototype={ +gf8(){if(this.fr$!=null){var s=this.ID$ +s.toString}else s=!1 +return s}, +rQ(a){var s=a==null?A.aGv():a +s.sHc(0,this.r_$) +return s}, +sdH(a,b){var s=this,r=s.mU$ +if(r===b)return +if(s.y!=null&&r!=null)r.K(0,s.gzo()) +s.mU$=b +if(s.y!=null)b.Z(0,s.gzo()) +s.GN()}, +szN(a){if(!1===this.oo$)return +this.oo$=!1 +this.aY()}, +GN(){var s,r=this,q=r.r_$,p=r.mU$ +p=r.r_$=B.c.an(A.O(p.gl(p),0,1)*255) +if(q!==p){s=r.ID$ +p=p>0 +r.ID$=p +if(r.fr$!=null&&s!==p)r.kJ() +r.Y5() +if(q===0||r.r_$===0)r.aY()}}, +nk(a){var s=this.mU$ +return s.gl(s)>0}, +fX(a){var s,r=this.fr$ +if(r!=null)if(this.r_$===0){s=this.oo$ +s.toString}else s=!0 +else s=!1 +if(s){r.toString +a.$1(r)}}} +A.En.prototype={} +A.S7.prototype={ +sAL(a,b){if(this.A.j(0,b))return +this.A=b +this.ag()}, +slo(a){if(this.a1===a)return +this.a1=a +this.ag()}, +gjB(){return this.fr$!=null}, +am(a,b){var s,r,q,p=this +if(p.fr$!=null){s=t.m2 +if(s.a(A.r.prototype.gar.call(p,p))==null)p.ch.sar(0,A.aJG(null)) +s.a(A.r.prototype.gar.call(p,p)).sAL(0,p.A) +r=s.a(A.r.prototype.gar.call(p,p)) +q=p.a1 +if(q!==r.k4){r.k4=q +r.eR()}s=s.a(A.r.prototype.gar.call(p,p)) +s.toString +a.lS(s,A.fF.prototype.gf9.call(p),b)}else p.ch.sar(0,null)}} +A.Bm.prototype={ +Z(a,b){return null}, +K(a,b){return null}, +k(a){return"CustomClipper"}} +A.pG.prototype={ +CJ(a){return this.b.dV(new A.w(0,0,0+a.a,0+a.b),this.c)}, +Dl(a){if(A.t(a)!==B.a4u)return!0 +t.jH.a(a) +return!a.b.j(0,this.b)||a.c!=this.c}} +A.zr.prototype={ +suQ(a){var s,r=this,q=r.A +if(q==a)return +r.A=a +s=a==null +if(s||q==null||A.t(a)!==A.t(q)||a.Dl(q))r.yz() +if(r.y!=null){if(q!=null)q.K(0,r.gyy()) +if(!s)a.Z(0,r.gyy())}}, +ah(a){var s +this.tA(a) +s=this.A +if(s!=null)s.Z(0,this.gyy())}, +ad(a){var s=this.A +if(s!=null)s.K(0,this.gyy()) +this.nG(0)}, +yz(){this.a1=null +this.ag() +this.aY()}, +sqv(a){if(a!==this.al){this.al=a +this.ag()}}, +bA(){var s=this,r=s.id!=null?s.gv(s):null +s.tx() +if(!J.d(r,s.gv(s)))s.a1=null}, +my(){var s,r=this +if(r.a1==null){s=r.A +s=s==null?null:s.CJ(r.gv(r)) +r.a1=s==null?r.gy4():s}}, +mN(a){var s,r=this +switch(r.al.a){case 0:return null +case 1:case 2:case 3:if(r.A==null)s=null +else{s=r.gv(r) +s=new A.w(0,0,0+s.a,0+s.b)}if(s==null){s=r.gv(r) +s=new A.w(0,0,0+s.a,0+s.b)}return s}}, +m(){this.cR=null +this.eK()}} +A.Sb.prototype={ +gy4(){var s=this.gv(this) +return new A.w(0,0,0+s.a,0+s.b)}, +cD(a,b){var s=this +if(s.A!=null){s.my() +if(!s.a1.p(0,b))return!1}return s.le(a,b)}, +am(a,b){var s,r,q=this,p=q.fr$ +if(p!=null){s=q.ch +if(q.al!==B.o){q.my() +p=q.cx +p===$&&A.b() +r=q.a1 +r.toString +s.sar(0,a.lQ(p,b,r,A.fF.prototype.gf9.call(q),q.al,t.VZ.a(s.a)))}else{a.ef(p,b) +s.sar(0,null)}}else q.ch.sar(0,null)}} +A.Sa.prototype={ +gy4(){var s=$.W().bD(),r=this.gv(this) +s.jA(new A.w(0,0,0+r.a,0+r.b)) +return s}, +cD(a,b){var s=this +if(s.A!=null){s.my() +if(!s.a1.p(0,b))return!1}return s.le(a,b)}, +am(a,b){var s,r,q,p=this,o=p.fr$ +if(o!=null){s=p.ch +if(p.al!==B.o){p.my() +o=p.cx +o===$&&A.b() +r=p.gv(p) +q=p.a1 +q.toString +s.sar(0,a.K4(o,b,new A.w(0,0,0+r.a,0+r.b),q,A.fF.prototype.gf9.call(p),p.al,t.JG.a(s.a)))}else{a.ef(o,b) +s.sar(0,null)}}else p.ch.sar(0,null)}} +A.J3.prototype={ +sfq(a,b){if(this.cu===b)return +this.cu=b +this.ag()}, +scF(a,b){if(this.cH.j(0,b))return +this.cH=b +this.ag()}, +sM(a,b){if(this.dN.j(0,b))return +this.dN=b +this.ag()}, +f3(a){this.hs(a) +a.sfq(0,this.cu)}} +A.Sn.prototype={ +sbV(a,b){if(this.oo===b)return +this.oo=b +this.yz()}, +salO(a,b){if(J.d(this.ci,b))return +this.ci=b +this.yz()}, +gy4(){var s,r,q=this,p=q.gv(q),o=0+p.a +p=0+p.b +switch(q.oo.a){case 0:s=q.ci +if(s==null)s=B.H +return s.dJ(new A.w(0,0,o,p)) +case 1:s=(o-0)/2 +r=(p-0)/2 +return new A.ju(0,0,o,p,s,r,s,r,s,r,s,r,s===r)}}, +cD(a,b){var s=this +if(s.A!=null){s.my() +if(!s.a1.p(0,b))return!1}return s.le(a,b)}, +am(a,b){var s,r,q,p,o,n,m,l,k,j=this +if(j.fr$==null){j.ch.sar(0,null) +return}j.my() +s=j.a1.cm(b) +r=$.W() +q=r.bD() +q.ex(s) +p=a.gbe(a) +o=j.cu +if(o!==0&&!0){n=j.cH +m=j.dN +p.of(q,n,o,(m.gl(m)>>>24&255)!==255)}l=j.al===B.dA +if(!l){r=r.aj() +r.sM(0,j.dN) +p.bQ(s,r)}r=j.cx +r===$&&A.b() +o=j.gv(j) +n=j.a1 +n.toString +m=j.ch +k=t.xt.a(m.a) +m.sar(0,a.auD(r,b,new A.w(0,0,0+o.a,0+o.b),n,new A.alw(j,l),j.al,k))}} +A.alw.prototype={ +$2(a,b){var s,r +if(this.b){s=a.gbe(a) +r=$.W().aj() +r.sM(0,this.a.dN) +s.qP(r)}this.a.iC(a,b)}, +$S:10} +A.So.prototype={ +gy4(){var s=$.W().bD(),r=this.gv(this) +s.jA(new A.w(0,0,0+r.a,0+r.b)) +return s}, +cD(a,b){var s=this +if(s.A!=null){s.my() +if(!s.a1.p(0,b))return!1}return s.le(a,b)}, +am(a,b){var s,r,q,p,o,n,m,l,k=this +if(k.fr$==null){k.ch.sar(0,null) +return}k.my() +s=k.a1.cm(b) +r=a.gbe(a) +q=k.cu +if(q!==0&&!0){p=k.cH +o=k.dN +r.of(s,p,q,(o.gl(o)>>>24&255)!==255)}n=k.al===B.dA +if(!n){q=$.W().aj() +q.sM(0,k.dN) +r.bP(s,q)}q=k.cx +q===$&&A.b() +p=k.gv(k) +o=k.a1 +o.toString +m=k.ch +l=t.JG.a(m.a) +m.sar(0,a.K4(q,b,new A.w(0,0,0+p.a,0+p.b),o,new A.alx(k,n),k.al,l))}} +A.alx.prototype={ +$2(a,b){var s,r +if(this.b){s=a.gbe(a) +r=$.W().aj() +r.sM(0,this.a.dN) +s.qP(r)}this.a.iC(a,b)}, +$S:10} +A.NC.prototype={ +I(){return"DecorationPosition."+this.b}} +A.Sc.prototype={ +sanT(a){var s,r=this +if(a.j(0,r.a1))return +s=r.A +if(s!=null)s.m() +r.A=null +r.a1=a +r.ag()}, +sbv(a,b){if(b===this.al)return +this.al=b +this.ag()}, +sqy(a){if(a.j(0,this.bg))return +this.bg=a +this.ag()}, +ad(a){var s=this,r=s.A +if(r!=null)r.m() +s.A=null +s.nG(0) +s.ag()}, +hF(a){var s=this +return s.a1.J2(s.gv(s),a,s.bg.d)}, +am(a,b){var s,r,q=this +if(q.A==null)q.A=q.a1.HQ(q.gdB()) +s=q.bg.Vj(q.gv(q)) +if(q.al===B.cu){r=q.A +r.toString +r.ee(a.gbe(a),b,s) +if(q.a1.gBa())a.LE()}q.iC(a,b) +if(q.al===B.ob){r=q.A +r.toString +r.ee(a.gbe(a),b,s) +if(q.a1.gBa())a.LE()}}} +A.SA.prototype={ +swk(a,b){var s=this +if(J.d(s.A,b))return +s.A=b +s.ag() +s.aY()}, +sfo(a){var s=this +if(J.d(s.a1,a))return +s.a1=a +s.ag() +s.aY()}, +sbS(a){var s=this +if(s.al==a)return +s.al=a +s.ag() +s.aY()}, +gjB(){return this.fr$!=null&&this.cd!=null}, +sc9(a,b){var s,r=this +if(J.d(r.cR,b))return +s=new A.bd(new Float64Array(16)) +s.aW(b) +r.cR=s +r.ag() +r.aY()}, +sn3(a){var s,r,q=this,p=q.cd +if(p==a)return +s=q.fr$!=null +r=s&&p!=null +q.cd=a +if(r!==(s&&a!=null))q.kJ() +q.ag()}, +gES(){var s,r,q,p=this,o=p.a1,n=o==null?null:o.U(p.al) +if(p.A==null&&n==null)return p.cR +s=new A.bd(new Float64Array(16)) +s.de() +o=p.A +if(o!=null)s.au(0,o.a,o.b) +o=n!=null +if(o){r=n.zM(p.gv(p)) +s.au(0,r.a,r.b)}else r=null +q=p.cR +q.toString +s.cP(0,q) +if(o)s.au(0,-r.a,-r.b) +o=p.A +if(o!=null)s.au(0,-o.a,-o.b) +return s}, +cD(a,b){return this.cE(a,b)}, +cE(a,b){var s=this.bg?this.gES():null +return a.uD(new A.alX(this),b,s)}, +am(a,b){var s,r,q,p,o,n,m,l,k,j=this +if(j.fr$!=null){s=j.gES() +s.toString +if(j.cd==null){r=A.ahB(s) +if(r==null){q=s.W0() +if(q===0||!isFinite(q)){j.ch.sar(0,null) +return}p=j.cx +p===$&&A.b() +o=A.fF.prototype.gf9.call(j) +n=j.ch +m=n.a +n.sar(0,a.p5(p,b,s,o,m instanceof A.m3?m:null))}else{j.iC(a,b.R(0,r)) +j.ch.sar(0,null)}}else{p=b.a +o=b.b +l=A.ko(p,o,0) +l.cP(0,s) +l.au(0,-p,-o) +o=j.cd +o.toString +k=A.aLk(l.a,o) +s=j.ch +p=s.a +if(p instanceof A.Cz){if(!k.j(0,p.aL)){p.aL=k +p.eR()}}else s.sar(0,new A.Cz(k,B.e,A.A(t.S,t.M),A.ag(t.G))) +s=s.a +s.toString +a.lS(s,A.fF.prototype.gf9.call(j),b)}}}, +dj(a,b){var s=this.gES() +s.toString +b.cP(0,s)}} +A.alX.prototype={ +$2(a,b){return this.a.tw(a,b)}, +$S:17} +A.Ew.prototype={ +agM(){if(this.A!=null)return +this.A=this.al}, +OL(a){switch(a.a){case 6:return!0 +case 1:case 2:case 0:case 4:case 3:case 5:return!1}}, +sIL(a){var s=this,r=s.a1 +if(r===a)return +s.a1=a +if(s.OL(r)||s.OL(a))s.a8() +else{s.cd=s.cR=null +s.ag()}}, +sfo(a){var s=this +if(s.al.j(0,a))return +s.al=a +s.A=s.cd=s.cR=null +s.ag()}, +sbS(a){var s=this +if(s.bg==a)return +s.bg=a +s.A=s.cd=s.cR=null +s.ag()}, +c5(a){var s,r=this.fr$ +if(r!=null){s=r.ke(B.cN) +switch(this.a1.a){case 6:return a.bf(new A.az(0,a.b,0,a.d).uU(s)) +case 1:case 2:case 0:case 4:case 3:case 5:return a.uU(s)}}else return new A.G(A.O(0,a.a,a.b),A.O(0,a.c,a.d))}, +bA(){var s,r,q,p=this,o=p.fr$ +if(o!=null){o.bJ(B.cN,!0) +switch(p.a1.a){case 6:o=t.k +s=o.a(A.r.prototype.gW.call(p)) +r=p.fr$ +q=new A.az(0,s.b,0,s.d).uU(r.gv(r)) +p.id=o.a(A.r.prototype.gW.call(p)).bf(q) +break +case 1:case 2:case 0:case 4:case 3:case 5:o=t.k.a(A.r.prototype.gW.call(p)) +s=p.fr$ +p.id=o.uU(s.gv(s)) +break}p.cd=p.cR=null}else{o=t.k.a(A.r.prototype.gW.call(p)) +p.id=new A.G(A.O(0,o.a,o.b),A.O(0,o.c,o.d))}}, +GO(){var s,r,q,p,o,n,m,l,k,j,i=this +if(i.cd!=null)return +if(i.fr$==null){i.cR=!1 +s=new A.bd(new Float64Array(16)) +s.de() +i.cd=s}else{i.agM() +s=i.fr$ +r=s.gv(s) +q=A.aQ4(i.a1,r,i.gv(i)) +s=q.b +p=q.a +o=r.a +n=r.b +m=i.A.J8(p,new A.w(0,0,0+o,0+n)) +l=i.A +l.toString +k=i.gv(i) +j=l.J8(s,new A.w(0,0,0+k.a,0+k.b)) +l=m.a +i.cR=m.c-l")),A.fF.prototype.gf9.call(s),b)}, +gjB(){return!0}} +A.a0M.prototype={ +ah(a){var s=this +s.tA(a) +s.mU$.Z(0,s.gzo()) +s.GN()}, +ad(a){this.mU$.K(0,this.gzo()) +this.nG(0)}, +am(a,b){if(this.r_$===0)return +this.iC(a,b)}} +A.J4.prototype={ +ah(a){var s +this.dg(a) +s=this.fr$ +if(s!=null)s.ah(a)}, +ad(a){var s +this.dh(0) +s=this.fr$ +if(s!=null)s.ad(0)}} +A.J5.prototype={ +h6(a){var s=this.fr$ +s=s==null?null:s.m7(a) +return s==null?this.xJ(a):s}} +A.EF.prototype={ +sauG(a){if(this.B===a)return +this.B=a +this.a8()}, +bp(a){var s=this.fr$ +if(s==null)return 0 +return(this.B&1)===1?s.d2(B.bc,a,s.gcb()):s.d2(B.bb,a,s.gcc())}, +bo(a){var s=this.fr$ +if(s==null)return 0 +return(this.B&1)===1?s.d2(B.bb,a,s.gcc()):s.d2(B.bc,a,s.gcb())}, +c5(a){var s,r=this.fr$ +if(r==null)return new A.G(A.O(0,a.a,a.b),A.O(0,a.c,a.d)) +s=r.ke((this.B&1)===1?a.gWJ():a) +return(this.B&1)===1?new A.G(s.b,s.a):s}, +bA(){var s,r,q,p=this +p.F=null +s=p.fr$ +if(s!=null){r=t.k +s.bJ((p.B&1)===1?r.a(A.r.prototype.gW.call(p)).gWJ():r.a(A.r.prototype.gW.call(p)),!0) +s=p.B +r=p.fr$ +if((s&1)===1){s=r.gv(r) +r=p.fr$ +r=new A.G(s.b,r.gv(r).a) +s=r}else s=r.gv(r) +p.id=s +s=new A.bd(new Float64Array(16)) +s.de() +s.au(0,p.gv(p).a/2,p.gv(p).b/2) +s.pa(1.5707963267948966*B.f.bF(p.B,4)) +r=p.fr$ +r=r.gv(r) +q=p.fr$ +s.au(0,-r.a/2,-q.gv(q).b/2) +p.F=s}else{s=t.k.a(A.r.prototype.gW.call(p)) +p.id=new A.G(A.O(0,s.a,s.b),A.O(0,s.c,s.d))}}, +cE(a,b){var s=this +if(s.fr$==null||s.F==null)return!1 +return a.uD(new A.aly(s),b,s.F)}, +afS(a,b){var s=this.fr$ +s.toString +a.ef(s,b)}, +am(a,b){var s,r,q=this,p=q.a9 +if(q.fr$!=null){s=q.cx +s===$&&A.b() +r=q.F +r.toString +p.sar(0,a.p5(s,b,r,q.gafR(),p.a))}else p.sar(0,null)}, +m(){this.a9.sar(0,null) +this.eK()}, +dj(a,b){var s=this.F +if(s!=null)b.cP(0,s) +this.a3e(a,b)}} +A.aly.prototype={ +$2(a,b){return this.a.fr$.cD(a,b)}, +$S:17} +A.a12.prototype={ +ah(a){var s +this.dg(a) +s=this.fr$ +if(s!=null)s.ah(a)}, +ad(a){var s +this.dh(0) +s=this.fr$ +if(s!=null)s.ad(0)}} +A.pE.prototype={ +I(){return"SelectionResult."+this.b}} +A.eS.prototype={$iaj:1} +A.Tq.prototype={ +sp6(a){var s=this,r=s.r3$ +if(a==r)return +if(a==null)s.K(0,s.gRZ()) +else if(r==null)s.Z(0,s.gRZ()) +s.RY() +s.r3$=a +s.S_()}, +S_(){var s=this +if(s.r3$==null){s.oq$=!1 +return}if(s.oq$&&!s.gl(s).e){s.r3$.C(0,s) +s.oq$=!1}else if(!s.oq$&&s.gl(s).e){s.r3$.D(0,s) +s.oq$=!0}}, +RY(){var s=this +if(s.oq$){s.r3$.C(0,s) +s.oq$=!1}}} +A.Fj.prototype={ +I(){return"SelectionEventType."+this.b}} +A.yj.prototype={ +I(){return"TextGranularity."+this.b}} +A.anM.prototype={} +A.B2.prototype={} +A.Fi.prototype={} +A.xN.prototype={ +I(){return"SelectionExtendDirection."+this.b}} +A.Fk.prototype={ +I(){return"SelectionStatus."+this.b}} +A.pD.prototype={ +j(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +if(J.U(b)!==A.t(s))return!1 +return b instanceof A.pD&&J.d(b.a,s.a)&&J.d(b.b,s.b)&&b.d===s.d&&b.c===s.c&&b.e===s.e}, +gt(a){var s=this +return A.N(s.a,s.b,s.d,s.c,s.e,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}} +A.u9.prototype={ +j(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +if(J.U(b)!==A.t(s))return!1 +return b instanceof A.u9&&b.a.j(0,s.a)&&b.b===s.b&&b.c===s.c}, +gt(a){return A.N(this.a,this.b,this.c,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}} +A.Gj.prototype={ +I(){return"TextSelectionHandleType."+this.b}} +A.a1X.prototype={} +A.tU.prototype={ +bp(a){var s=this.fr$ +s=s==null?null:s.d2(B.bb,a,s.gcc()) +return s==null?0:s}, +bo(a){var s=this.fr$ +s=s==null?null:s.d2(B.bc,a,s.gcb()) +return s==null?0:s}, +h6(a){var s,r,q=this.fr$ +if(q!=null){s=q.m7(a) +r=q.b +r.toString +t.r.a(r) +if(s!=null)s+=r.a.b}else s=this.xJ(a) +return s}, +am(a,b){var s,r=this.fr$ +if(r!=null){s=r.b +s.toString +a.ef(r,t.r.a(s).a.R(0,b))}}, +cE(a,b){var s,r=this.fr$ +if(r!=null){s=r.b +s.toString +t.r.a(s) +return a.mD(new A.alz(b,s,r),s.a,b)}return!1}} +A.alz.prototype={ +$2(a,b){return this.c.cD(a,b)}, +$S:17} +A.EC.prototype={ +q0(){var s=this +if(s.A!=null)return +s.A=s.a1.U(s.al)}, +sdn(a,b){var s=this +if(s.a1.j(0,b))return +s.a1=b +s.A=null +s.a8()}, +sbS(a){var s=this +if(s.al==a)return +s.al=a +s.A=null +s.a8()}, +bp(a){var s,r,q,p +this.q0() +s=this.A +r=s.a+s.c +q=s.b +s=s.d +p=this.fr$ +if(p!=null)return p.d2(B.bb,Math.max(0,a-(q+s)),p.gcc())+r +return r}, +bo(a){var s,r,q,p +this.q0() +s=this.A +r=s.a +q=s.c +p=s.b+s.d +s=this.fr$ +if(s!=null)return s.d2(B.bc,Math.max(0,a-(r+q)),s.gcb())+p +return p}, +c5(a){var s,r,q,p=this +p.q0() +if(p.fr$==null){s=p.A +return a.bf(new A.G(s.a+s.c,s.b+s.d))}s=p.A +s.toString +r=a.VX(s) +q=p.fr$.ke(r) +s=p.A +return a.bf(new A.G(s.a+q.a+s.c,s.b+q.b+s.d))}, +bA(){var s,r,q,p,o,n,m=this,l=t.k.a(A.r.prototype.gW.call(m)) +m.q0() +if(m.fr$==null){s=m.A +m.id=l.bf(new A.G(s.a+s.c,s.b+s.d)) +return}s=m.A +s.toString +r=l.VX(s) +m.fr$.bJ(r,!0) +s=m.fr$ +q=s.b +q.toString +t.r.a(q) +p=m.A +o=p.a +q.a=new A.k(o,p.b) +s=s.gv(s) +p=m.A +q=p.c +p=p.b +n=m.fr$ +m.id=l.bf(new A.G(o+s.a+q,p+n.gv(n).b+m.A.d))}} +A.S5.prototype={ +q0(){var s=this +if(s.A!=null)return +s.A=s.a1.U(s.al)}, +sfo(a){var s=this +if(s.a1.j(0,a))return +s.a1=a +s.A=null +s.a8()}, +sbS(a){var s=this +if(s.al==a)return +s.al=a +s.A=null +s.a8()}, +zJ(){var s,r,q,p,o=this +o.q0() +s=o.fr$.b +s.toString +t.r.a(s) +r=o.A +r.toString +q=o.gv(o) +p=o.fr$ +s.a=r.nX(t.EP.a(q.Y(0,p.gv(p))))}} +A.Ss.prototype={ +saw5(a){if(this.cn==a)return +this.cn=a +this.a8()}, +sar2(a){if(this.d7==a)return +this.d7=a +this.a8()}, +c5(a){var s,r,q=this,p=q.cn!=null||a.b===1/0,o=q.d7!=null||a.d===1/0,n=q.fr$ +if(n!=null){s=n.ke(new A.az(0,a.b,0,a.d)) +if(p){n=q.cn +if(n==null)n=1 +n=s.a*n}else n=1/0 +if(o){r=q.d7 +if(r==null)r=1 +r=s.b*r}else r=1/0 +return a.bf(new A.G(n,r))}n=p?0:1/0 +return a.bf(new A.G(n,o?0:1/0))}, +bA(){var s,r,q=this,p=t.k.a(A.r.prototype.gW.call(q)),o=q.cn!=null||p.b===1/0,n=q.d7!=null||p.d===1/0,m=q.fr$ +if(m!=null){m.bJ(new A.az(0,p.b,0,p.d),!0) +if(o){m=q.fr$ +m=m.gv(m) +s=q.cn +if(s==null)s=1 +s=m.a*s +m=s}else m=1/0 +if(n){s=q.fr$ +s=s.gv(s) +r=q.d7 +if(r==null)r=1 +r=s.b*r +s=r}else s=1/0 +q.id=p.bf(new A.G(m,s)) +q.zJ()}else{m=o?0:1/0 +q.id=p.bf(new A.G(m,n?0:1/0))}}} +A.aoB.prototype={ +m9(a){return new A.G(A.O(1/0,a.a,a.b),A.O(1/0,a.c,a.d))}} +A.Eu.prototype={ +sI3(a){var s=this,r=s.A +if(r===a)return +if(A.t(a)!==A.t(r)||a.nB(r))s.a8() +s.A=a +s.y!=null}, +ah(a){this.MB(a)}, +ad(a){this.MC(0)}, +bp(a){var s=A.AM(a,1/0),r=s.bf(this.A.m9(s)).a +if(isFinite(r))return r +return 0}, +bo(a){var s=A.AM(1/0,a),r=s.bf(this.A.m9(s)).b +if(isFinite(r))return r +return 0}, +c5(a){return a.bf(this.A.m9(a))}, +bA(){var s,r,q,p,o,n=this,m=t.k,l=m.a(A.r.prototype.gW.call(n)) +n.id=l.bf(n.A.m9(l)) +if(n.fr$!=null){s=n.A.x0(m.a(A.r.prototype.gW.call(n))) +m=n.fr$ +m.toString +l=s.a +r=s.b +q=l>=r +m.bJ(s,!(q&&s.c>=s.d)) +m=n.fr$.b +m.toString +t.r.a(m) +p=n.A +o=n.gv(n) +if(q&&s.c>=s.d)l=new A.G(A.O(0,l,r),A.O(0,s.c,s.d)) +else{l=n.fr$ +l=l.gv(l)}m.a=p.x8(o,l)}}} +A.J7.prototype={ +ah(a){var s +this.dg(a) +s=this.fr$ +if(s!=null)s.ah(a)}, +ad(a){var s +this.dh(0) +s=this.fr$ +if(s!=null)s.ad(0)}} +A.P9.prototype={ +I(){return"GrowthDirection."+this.b}} +A.pJ.prototype={ +gXO(){return!1}, +Uq(a,b,c){if(a==null)a=this.w +switch(A.bR(this.a).a){case 0:return new A.az(c,b,a,a) +case 1:return new A.az(a,a,c,b)}}, +alk(){return this.Uq(null,1/0,0)}, +alm(a){return this.Uq(a,1/0,0)}, +j(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +if(!(b instanceof A.pJ))return!1 +return b.a===s.a&&b.b===s.b&&b.d===s.d&&b.f===s.f&&b.r===s.r&&b.w===s.w&&b.x===s.x&&b.y===s.y&&b.Q===s.Q&&b.z===s.z}, +gt(a){var s=this +return A.N(s.a,s.b,s.d,s.f,s.r,s.w,s.x,s.y,s.Q,s.z,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a){var s=this,r=A.a([s.a.k(0),s.b.k(0),s.c.k(0),"scrollOffset: "+B.c.af(s.d,1),"remainingPaintExtent: "+B.c.af(s.r,1)],t.s),q=s.f +if(q!==0)r.push("overlap: "+B.c.af(q,1)) +r.push("crossAxisExtent: "+B.c.af(s.w,1)) +r.push("crossAxisDirection: "+s.x.k(0)) +r.push("viewportMainAxisExtent: "+B.c.af(s.y,1)) +r.push("remainingCacheExtent: "+B.c.af(s.Q,1)) +r.push("cacheOrigin: "+B.c.af(s.z,1)) +return"SliverConstraints("+B.b.c_(r,", ")+")"}} +A.TN.prototype={ +dd(){return"SliverGeometry"}} +A.xW.prototype={} +A.TO.prototype={ +k(a){return A.t(this.a).k(0)+"@(mainAxis: "+A.h(this.c)+", crossAxis: "+A.h(this.d)+")"}} +A.FD.prototype={ +k(a){var s=this.a +return"layoutOffset="+(s==null?"None":B.c.af(s,1))}} +A.pK.prototype={ +k(a){return"paintOffset="+this.a.k(0)}} +A.nx.prototype={} +A.dL.prototype={ +gW(){return t.q.a(A.r.prototype.gW.call(this))}, +gnz(){return this.glP()}, +glP(){var s=this,r=t.q +switch(A.bR(r.a(A.r.prototype.gW.call(s)).a).a){case 0:return new A.w(0,0,0+s.fx.c,0+r.a(A.r.prototype.gW.call(s)).w) +case 1:return new A.w(0,0,0+r.a(A.r.prototype.gW.call(s)).w,0+s.fx.c)}}, +rC(){}, +Xd(a,b,c){var s=this +if(c>=0&&c=0&&br;j=h,i=o){o=a3.rj(p,!0) +if(o==null){n=a3.a4$ +k=n.b +k.toString +m.a(k).a=0 +if(r===0){n.bJ(p,!0) +o=a3.a4$ +if(a5.a==null)a5.a=o +i=o +break}else{a3.fx=A.j2(a4,!1,a4,a4,0,0,0,0,-r) +return}}n=a3.a4$ +n.toString +h=j-a3.kO(n) +if(h<-1e-10){a3.fx=A.j2(a4,!1,a4,a4,0,0,0,0,-h) +a7=a3.a4$.b +a7.toString +m.a(a7).a=0 +return}n=o.b +n.toString +m.a(n).a=h +if(a5.a==null)a5.a=o}if(r<1e-10)while(!0){n=a3.a4$ +n.toString +n=n.b +n.toString +m.a(n) +k=n.b +k.toString +if(!(k>0))break +n=n.a +n.toString +o=a3.rj(p,!0) +k=a3.a4$ +k.toString +h=n-a3.kO(k) +k=a3.a4$.b +k.toString +m.a(k).a=0 +if(h<-1e-10){a3.fx=A.j2(a4,!1,a4,a4,0,0,0,0,-h) +return}}if(i==null){o.bJ(p,!0) +a5.a=o}a5.b=!0 +a5.c=o +n=o.b +n.toString +m.a(n) +k=n.b +k.toString +a5.d=k +n=n.a +n.toString +a5.e=n+a3.kO(o) +g=new A.alC(a5,a3,p) +for(f=0;a5.es+a6.r||s>0,a4,a4,a,a1,0,a,a4) +if(a===n)a7.p3=!0 +a7.qJ()}} +A.alC.prototype={ +$0(){var s,r,q,p=this.a,o=p.c,n=p.a +if(o==n)p.b=!1 +s=this.b +o=o.b +o.toString +r=p.c=A.o(s).h("at.1").a(o).ak$ +o=r==null +if(o)p.b=!1 +q=++p.d +if(!p.b){if(!o){o=r.b +o.toString +o=t.D.a(o).b +o.toString +q=o!==q +o=q}else o=!0 +q=this.c +if(o){r=s.Ja(q,n,!0) +p.c=r +if(r==null)return!1}else r.bJ(q,!0) +o=p.a=p.c}else o=r +n=o.b +n.toString +t.D.a(n) +q=p.e +n.a=q +p.e=q+s.kO(o) +return!0}, +$S:5} +A.kk.prototype={$id6:1} +A.alS.prototype={ +ew(a){}} +A.hx.prototype={ +k(a){var s=this.b,r=this.r5$?"keepAlive; ":"" +return"index="+A.h(s)+"; "+r+this.a40(0)}} +A.pz.prototype={ +ew(a){if(!(a.b instanceof A.hx))a.b=new A.hx(!1,null,null)}, +iJ(a){var s +this.Mp(a) +s=a.b +s.toString +if(!t.D.a(s).c)this.aM.I6(t.x.a(a))}, +J9(a,b,c){this.Dz(0,b,c)}, +wc(a,b){var s,r=this,q=a.b +q.toString +t.D.a(q) +if(!q.c){r.a2c(a,b) +r.aM.I6(a) +r.a8()}else{s=r.aJ +if(s.i(0,q.b)===a)s.C(0,q.b) +r.aM.I6(a) +q=q.b +q.toString +s.n(0,q,a)}}, +C(a,b){var s=b.b +s.toString +t.D.a(s) +if(!s.c){this.a2d(0,b) +return}this.aJ.C(0,s.b) +this.oh(b)}, +ED(a,b){this.B9(new A.alP(this,a,b),t.q)}, +Od(a){var s,r=this,q=a.b +q.toString +t.D.a(q) +if(q.r5$){r.C(0,a) +s=q.b +s.toString +r.aJ.n(0,s,a) +a.b=q +r.Mp(a) +q.c=!0}else r.aM.Z8(a)}, +ah(a){var s,r,q +this.a4S(a) +for(s=this.aJ,s=s.gaT(s),r=A.o(s),r=r.h("@<1>").N(r.z[1]),s=new A.bN(J.ap(s.a),s.b,r.h("bN<1,2>")),r=r.z[1];s.q();){q=s.a;(q==null?r.a(q):q).ah(a)}}, +ad(a){var s,r,q +this.a4T(0) +for(s=this.aJ,s=s.gaT(s),r=A.o(s),r=r.h("@<1>").N(r.z[1]),s=new A.bN(J.ap(s.a),s.b,r.h("bN<1,2>")),r=r.z[1];s.q();){q=s.a;(q==null?r.a(q):q).ad(0)}}, +fT(){this.LY() +var s=this.aJ +s.gaT(s).aa(0,this.gZ3())}, +b1(a){var s +this.xF(a) +s=this.aJ +s.gaT(s).aa(0,a)}, +fX(a){this.xF(a)}, +U6(a,b){var s +this.ED(a,null) +s=this.a4$ +if(s!=null){s=s.b +s.toString +t.D.a(s).a=b +return!0}this.aM.p3=!0 +return!1}, +qa(){return this.U6(0,0)}, +rj(a,b){var s,r,q,p=this,o=p.a4$ +o.toString +o=o.b +o.toString +s=t.D +o=s.a(o).b +o.toString +r=o-1 +p.ED(r,null) +o=p.a4$ +o.toString +q=o.b +q.toString +q=s.a(q).b +q.toString +if(q===r){o.bJ(a,b) +return p.a4$}p.aM.p3=!0 +return null}, +Ja(a,b,c){var s,r,q,p=b.b +p.toString +s=t.D +p=s.a(p).b +p.toString +r=p+1 +this.ED(r,b) +p=b.b +p.toString +q=A.o(this).h("at.1").a(p).ak$ +if(q!=null){p=q.b +p.toString +p=s.a(p).b +p.toString +p=p===r}else p=!1 +if(p){q.bJ(a,c) +return q}this.aM.p3=!0 +return null}, +lq(a,b){var s={} +s.a=a +s.b=b +this.B9(new A.alR(s,this),t.q)}, +kO(a){switch(A.bR(t.q.a(A.r.prototype.gW.call(this)).a).a){case 0:return a.gv(a).a +case 1:return a.gv(a).b}}, +J3(a,b,c){var s,r,q=this.d8$,p=A.aJX(a) +for(s=A.o(this).h("at.1");q!=null;){if(this.are(p,q,b,c))return!0 +r=q.b +r.toString +q=s.a(r).ci$}return!1}, +HC(a){var s=a.b +s.toString +return t.D.a(s).a}, +nk(a){var s=t.MR.a(a.b) +return(s==null?null:s.b)!=null&&!this.aJ.ai(0,s.b)}, +dj(a,b){if(!this.nk(a))b.Di() +else this.alh(a,b)}, +am(a,a0){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c=this,b=null +if(c.a4$==null)return +s=t.q +switch(A.o7(s.a(A.r.prototype.gW.call(c)).a,s.a(A.r.prototype.gW.call(c)).b).a){case 0:r=a0.R(0,new A.k(0,c.fx.c)) +q=B.vG +p=B.dL +o=!0 +break +case 1:r=a0 +q=B.dL +p=B.f3 +o=!1 +break +case 2:r=a0 +q=B.f3 +p=B.dL +o=!1 +break +case 3:r=a0.R(0,new A.k(c.fx.c,0)) +q=B.vJ +p=B.f3 +o=!0 +break +default:o=b +r=o +p=r +q=p}n=c.a4$ +for(m=A.o(c).h("at.1"),l=t.D;n!=null;){k=n.b +k.toString +k=l.a(k).a +k.toString +j=k-s.a(A.r.prototype.gW.call(c)).d +i=c.qu(n) +k=r.a +h=q.a +k=k+h*j+p.a*i +g=r.b +f=q.b +g=g+f*j+p.b*i +e=new A.k(k,g) +if(o){d=c.kO(n) +e=new A.k(k+h*d,g+f*d)}if(j0)a.ef(n,e) +k=n.b +k.toString +n=m.a(k).ak$}}} +A.alP.prototype={ +$1(a){var s=this.a,r=s.aJ,q=this.b,p=this.c +if(r.ai(0,q)){r=r.C(0,q) +r.toString +q=r.b +q.toString +t.D.a(q) +s.oh(r) +r.b=q +s.Dz(0,r,p) +q.c=!1}else s.aM.anx(q,p)}, +$S:204} +A.alR.prototype={ +$1(a){var s,r,q +for(s=this.a,r=this.b;s.a>0;){q=r.a4$ +q.toString +r.Od(q);--s.a}for(;s.b>0;){q=r.d8$ +q.toString +r.Od(q);--s.b}s=r.aJ +s=s.gaT(s) +q=A.o(s).h("ba") +B.b.aa(A.V(new A.ba(s,new A.alQ(),q),!0,q.h("n.E")),r.aM.gauQ())}, +$S:204} +A.alQ.prototype={ +$1(a){var s=a.b +s.toString +return!t.D.a(s).r5$}, +$S:420} +A.J8.prototype={ +ah(a){var s,r,q +this.dg(a) +s=this.a4$ +for(r=t.D;s!=null;){s.ah(a) +q=s.b +q.toString +s=r.a(q).ak$}}, +ad(a){var s,r,q +this.dh(0) +s=this.a4$ +for(r=t.D;s!=null;){s.ad(0) +q=s.b +q.toString +s=r.a(q).ak$}}} +A.a15.prototype={} +A.a16.prototype={} +A.a2o.prototype={ +ad(a){this.xI(0)}} +A.a2p.prototype={} +A.EH.prototype={ +gHn(){var s=this,r=t.q +switch(A.o7(r.a(A.r.prototype.gW.call(s)).a,r.a(A.r.prototype.gW.call(s)).b).a){case 0:return s.bE.d +case 1:return s.bE.a +case 2:return s.bE.b +case 3:return s.bE.c}}, +gal3(){var s=this,r=t.q +switch(A.o7(r.a(A.r.prototype.gW.call(s)).a,r.a(A.r.prototype.gW.call(s)).b).a){case 0:return s.bE.b +case 1:return s.bE.c +case 2:return s.bE.d +case 3:return s.bE.a}}, +ganC(){switch(A.bR(t.q.a(A.r.prototype.gW.call(this)).a).a){case 0:var s=this.bE +return s.gbO(s)+s.gbX(s) +case 1:return this.bE.gdw()}}, +ew(a){if(!(a.b instanceof A.pK))a.b=new A.pK(B.e)}, +bA(){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0=this,a1=null,a2=t.q,a3=a2.a(A.r.prototype.gW.call(a0)),a4=a0.gHn() +a0.gal3() +s=a0.bE +s.toString +r=s.al7(A.bR(a2.a(A.r.prototype.gW.call(a0)).a)) +q=a0.ganC() +if(a0.fr$==null){p=a0.jG(a3,0,r) +a0.fx=A.j2(a0.qr(a3,0,r),!1,a1,a1,r,Math.min(p,a3.r),0,r,a1) +return}o=a0.jG(a3,0,a4) +n=a3.f +if(n>0)n=Math.max(0,n-o) +a2=a0.fr$ +a2.toString +s=Math.max(0,a3.d-a4) +m=Math.min(0,a3.z+a4) +l=a3.r +k=a0.jG(a3,0,a4) +j=a3.Q +i=a0.qr(a3,0,a4) +h=Math.max(0,a3.w-q) +g=a3.a +f=a3.b +a2.bJ(new A.pJ(g,f,a3.c,s,a4+a3.e,n,l-k,h,a3.x,a3.y,m,j-i),!0) +e=a0.fr$.fx +a2=e.y +if(a2!=null){a0.fx=A.j2(a1,!1,a1,a1,0,0,0,0,a2) +return}a2=e.a +s=a4+a2 +m=r+a2 +d=a0.jG(a3,s,m) +c=o+d +b=a0.qr(a3,0,a4) +a=a0.qr(a3,s,m) +s=e.c +k=e.d +p=Math.min(o+Math.max(s,k+d),l) +l=e.b +k=Math.min(c+k,p) +j=Math.min(a+b+e.z,j) +i=e.e +s=Math.max(c+s,o+e.r) +a0.fx=A.j2(j,e.x,s,k,r+i,p,l,m,a1) +m=a0.fr$.b +m.toString +t.jB.a(m) +switch(A.o7(g,f).a){case 0:s=a0.bE +l=s.a +a2=s.d+a2 +m.a=new A.k(l,a0.jG(a3,a2,a2+s.b)) +break +case 1:m.a=new A.k(a0.jG(a3,0,a0.bE.a),a0.bE.b) +break +case 2:a2=a0.bE +m.a=new A.k(a2.a,a0.jG(a3,0,a2.b)) +break +case 3:s=a0.bE +a2=s.c+a2 +m.a=new A.k(a0.jG(a3,a2,a2+s.a),a0.bE.b) +break}}, +J3(a,b,c){var s,r,q,p=this,o=p.fr$ +if(o!=null&&o.fx.r>0){o=o.b +o.toString +t.jB.a(o) +s=p.jG(t.q.a(A.r.prototype.gW.call(p)),0,p.gHn()) +r=p.fr$ +r.toString +r=p.qu(r) +o=o.a +q=p.fr$.gard() +a.c.push(new A.zg(new A.k(-o.a,-o.b))) +q.$3$crossAxisPosition$mainAxisPosition(a,b-r,c-s) +a.C4()}return!1}, +qu(a){var s=this,r=t.q +switch(A.o7(r.a(A.r.prototype.gW.call(s)).a,r.a(A.r.prototype.gW.call(s)).b).a){case 0:case 2:return s.bE.a +case 3:case 1:return s.bE.b}}, +HC(a){return this.gHn()}, +dj(a,b){var s=a.b +s.toString +s=t.jB.a(s).a +b.au(0,s.a,s.b)}, +am(a,b){var s,r=this.fr$ +if(r!=null&&r.fx.w){s=r.b +s.toString +a.ef(r,b.R(0,t.jB.a(s).a))}}} +A.Sz.prototype={ +aiO(){if(this.bE!=null)return +this.bE=this.cI}, +sdn(a,b){var s=this +if(s.cI.j(0,b))return +s.cI=b +s.bE=null +s.a8()}, +sbS(a){var s=this +if(s.hD===a)return +s.hD=a +s.bE=null +s.a8()}, +bA(){this.aiO() +this.a3v()}} +A.a14.prototype={ +ah(a){var s +this.dg(a) +s=this.fr$ +if(s!=null)s.ah(a)}, +ad(a){var s +this.dh(0) +s=this.fr$ +if(s!=null)s.ad(0)}} +A.iX.prototype={ +cm(a){var s=this,r=a.a,q=a.b +return new A.iX(s.a+r,s.b+q,s.c-r,s.d-q)}, +j(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +return b instanceof A.iX&&b.a===s.a&&b.b===s.b&&b.c===s.c&&b.d===s.d}, +gt(a){var s=this +return A.N(s.a,s.b,s.c,s.d,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a){var s=this +return"RelativeRect.fromLTRB("+B.c.af(s.a,1)+", "+B.c.af(s.b,1)+", "+B.c.af(s.c,1)+", "+B.c.af(s.d,1)+")"}} +A.fj.prototype={ +gBc(){var s=this +return s.e!=null||s.f!=null||s.r!=null||s.w!=null||s.x!=null||s.y!=null}, +k(a){var s=this,r=A.a([],t.s),q=s.e +if(q!=null)r.push("top="+A.jU(q)) +q=s.f +if(q!=null)r.push("right="+A.jU(q)) +q=s.r +if(q!=null)r.push("bottom="+A.jU(q)) +q=s.w +if(q!=null)r.push("left="+A.jU(q)) +q=s.x +if(q!=null)r.push("width="+A.jU(q)) +q=s.y +if(q!=null)r.push("height="+A.jU(q)) +if(r.length===0)r.push("not positioned") +r.push(s.xD(0)) +return B.b.c_(r,"; ")}} +A.U7.prototype={ +I(){return"StackFit."+this.b}} +A.EI.prototype={ +ew(a){if(!(a.b instanceof A.fj))a.b=new A.fj(null,null,B.e)}, +aiT(){var s=this +if(s.F!=null)return +s.F=s.a9.U(s.X)}, +sfo(a){var s=this +if(s.a9.j(0,a))return +s.a9=a +s.F=null +s.a8()}, +sbS(a){var s=this +if(s.X==a)return +s.X=a +s.F=null +s.a8()}, +bp(a){return A.alV(this.a4$,new A.alU(a))}, +bo(a){return A.alV(this.a4$,new A.alT(a))}, +h6(a){return this.Aj(a)}, +c5(a){return this.Sn(a,A.qr())}, +Sn(a,b){var s,r,q,p,o,n,m,l,k,j,i,h,g,f=this +f.aiT() +if(f.e_$===0){s=a.a +r=a.b +q=A.O(1/0,s,r) +p=a.c +o=a.d +n=A.O(1/0,p,o) +return isFinite(q)&&isFinite(n)?new A.G(A.O(1/0,s,r),A.O(1/0,p,o)):new A.G(A.O(0,s,r),A.O(0,p,o))}m=a.a +l=a.c +switch(f.aq.a){case 0:s=new A.az(0,a.b,0,a.d) +break +case 1:s=A.qT(new A.G(A.O(1/0,m,a.b),A.O(1/0,l,a.d))) +break +case 2:s=a +break +default:s=null}k=f.a4$ +for(r=t.Qv,j=l,i=m,h=!1;k!=null;){q=k.b +q.toString +r.a(q) +if(!q.gBc()){g=b.$2(k,s) +i=Math.max(i,g.a) +j=Math.max(j,g.b) +h=!0}k=q.ak$}return h?new A.G(i,j):new A.G(A.O(1/0,m,a.b),A.O(1/0,l,a.d))}, +bA(){var s,r,q,p,o,n,m,l=this,k="RenderBox was not laid out: ",j=t.k.a(A.r.prototype.gW.call(l)) +l.B=!1 +l.id=l.Sn(j,A.v4()) +s=l.a4$ +for(r=t.Qv,q=t.EP;s!=null;){p=s.b +p.toString +r.a(p) +if(!p.gBc()){o=l.F +o.toString +n=l.id +if(n==null)n=A.T(A.Q(k+A.t(l).k(0)+"#"+A.bh(l))) +m=s.id +p.a=o.nX(q.a(n.Y(0,m==null?A.T(A.Q(k+A.t(s).k(0)+"#"+A.bh(s))):m)))}else{o=l.id +if(o==null)o=A.T(A.Q(k+A.t(l).k(0)+"#"+A.bh(l))) +n=l.F +n.toString +l.B=A.aMK(s,p,o,n)||l.B}s=p.ak$}}, +cE(a,b){return this.qE(a,b)}, +aue(a,b){this.mL(a,b)}, +am(a,b){var s,r=this,q=r.aH!==B.o&&r.B,p=r.aD +if(q){q=r.cx +q===$&&A.b() +s=r.gv(r) +p.sar(0,a.lQ(q,b,new A.w(0,0,0+s.a,0+s.b),r.gaud(),r.aH,p.a))}else{p.sar(0,null) +r.mL(a,b)}}, +m(){this.aD.sar(0,null) +this.eK()}, +mN(a){var s,r=this +switch(r.aH.a){case 0:return null +case 1:case 2:case 3:if(r.B){s=r.gv(r) +s=new A.w(0,0,0+s.a,0+s.b)}else s=null +return s}}} +A.alU.prototype={ +$1(a){return a.d2(B.bb,this.a,a.gcc())}, +$S:61} +A.alT.prototype={ +$1(a){return a.d2(B.bc,this.a,a.gcb())}, +$S:61} +A.a17.prototype={ +ah(a){var s,r,q +this.dg(a) +s=this.a4$ +for(r=t.Qv;s!=null;){s.ah(a) +q=s.b +q.toString +s=r.a(q).ak$}}, +ad(a){var s,r,q +this.dh(0) +s=this.a4$ +for(r=t.Qv;s!=null;){s.ad(0) +q=s.b +q.toString +s=r.a(q).ak$}}} +A.a18.prototype={} +A.og.prototype={ +d_(a){return A.qx(this.a,this.b,a)}} +A.GG.prototype={ +j(a,b){if(b==null)return!1 +if(J.U(b)!==A.t(this))return!1 +return b instanceof A.GG&&b.a.j(0,this.a)&&b.b===this.b}, +gt(a){return A.N(this.a,this.b,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a){return this.a.k(0)+" at "+A.jU(this.b)+"x"}} +A.tV.prototype={ +sqy(a){var s,r,q,p=this +if(J.d(p.fy,a))return +s=p.fy +p.fy=a +if(p.k1==null)return +if(s==null)r=null +else{r=s.b +r=A.wU(r,r,1)}q=p.fy.b +if(!J.d(r,A.wU(q,q,1))){r=p.Tr() +q=p.ch +q.a.ad(0) +q.sar(0,r) +p.ag()}p.a8()}, +K2(){var s=this +s.Q=s +s.y.r.push(s) +s.ch.sar(0,s.Tr()) +s.y.Q.push(s)}, +Tr(){var s,r=this.fy.b +r=A.wU(r,r,1) +this.k1=r +s=A.aNK(r) +s.ah(this) +return s}, +rC(){}, +bA(){var s,r=this.fy.a +this.fx=r +s=this.fr$ +if(s!=null)s.fQ(A.qT(r))}, +gf8(){return!0}, +am(a,b){var s=this.fr$ +if(s!=null)a.ef(s,b)}, +dj(a,b){var s=this.k1 +s.toString +b.cP(0,s) +this.a3g(a,b)}, +amD(){var s,r,q +try{q=$.W() +s=q.VF() +r=this.ch.a.alT(s) +this.akh() +q.Ze(r) +r.m()}finally{}}, +akh(){var s,r,q,p,o,n,m,l,k,j=null,i=this.glP(),h=i.gaK(),g=this.go +g.gnU() +s=i.gaK() +g.gnU() +g=this.ch +r=t.lu +q=g.a.WH(0,new A.k(h.a,0),r) +switch(A.by().a){case 0:p=g.a.WH(0,new A.k(s.a,i.d-1-0),r) +break +case 1:case 2:case 3:case 4:case 5:p=j +break +default:p=j}h=q==null +if(h&&p==null)return +if(!h&&p!=null){h=q.f +g=q.r +s=q.e +r=q.w +A.aNr(new A.lX(p.a,p.b,p.c,p.d,s,h,g,r)) +return}o=A.by()===B.ba +n=h?p:q +h=n.f +g=n.r +s=n.e +r=n.w +m=o?n.a:j +l=o?n.b:j +k=o?n.c:j +A.aNr(new A.lX(m,l,k,o?n.d:j,s,h,g,r))}, +glP(){var s=this.fx.S(0,this.fy.b) +return new A.w(0,0,0+s.a,0+s.b)}, +gnz(){var s,r=this.k1 +r.toString +s=this.fx +return A.hs(r,new A.w(0,0,0+s.a,0+s.b))}} +A.a1b.prototype={ +ah(a){var s +this.dg(a) +s=this.fr$ +if(s!=null)s.ah(a)}, +ad(a){var s +this.dh(0) +s=this.fr$ +if(s!=null)s.ad(0)}} +A.a8b.prototype={ +I(){return"CacheExtentStyle."+this.b}} +A.ER.prototype={ +k(a){return"RevealedOffset(offset: "+A.h(this.a)+", rect: "+this.b.k(0)+")"}} +A.tW.prototype={ +f3(a){this.hs(a) +a.Ha(B.A1)}, +fX(a){var s=this.gUZ() +new A.ba(s,new A.alZ(),A.S(s).h("ba<1>")).aa(0,a)}, +siK(a){if(a===this.B)return +this.B=a +this.a8()}, +sanB(a){if(a===this.F)return +this.F=a +this.a8()}, +scz(a,b){var s=this,r=s.a9 +if(b===r)return +if(s.y!=null)r.K(0,s.gBt()) +s.a9=b +if(s.y!=null)b.Z(0,s.gBt()) +s.a8()}, +sam1(a){if(250===this.X)return +this.X=250 +this.a8()}, +sam2(a){if(a===this.aH)return +this.aH=a +this.a8()}, +sqv(a){var s=this +if(a!==s.aD){s.aD=a +s.ag() +s.aY()}}, +ah(a){this.a4W(a) +this.a9.Z(0,this.gBt())}, +ad(a){this.a9.K(0,this.gBt()) +this.a4X(0)}, +bp(a){return 0}, +bo(a){return 0}, +gf8(){return!0}, +XX(a,b,c,d,e,f,g,h,a0,a1,a2){var s,r,q,p,o,n,m,l,k=this,j=A.b4L(k.a9.k4,e),i=f+h +for(s=f,r=0;c!=null;){q=a2<=0?0:a2 +p=Math.max(b,-q) +o=b-p +c.bJ(new A.pJ(k.B,e,j,q,r,i-s,Math.max(0,a1-s+f),d,k.F,g,p,Math.max(0,a0+o)),!0) +n=c.fx +m=n.y +if(m!=null)return m +l=s+n.b +if(n.w||a2>0)k.a_2(c,l,e) +else k.a_2(c,-a2+f,e) +i=Math.max(l+n.c,i) +m=n.a +a2-=m +r+=m +s+=n.d +m=n.z +if(m!==0){a0-=m-o +b=Math.min(p+m,0)}k.avU(e,n) +c=a.$1(c)}return 0}, +mN(a){var s,r,q,p,o,n,m=this +switch(m.aD.a){case 0:return null +case 1:case 2:case 3:break}s=m.gv(m) +r=0+s.a +q=0+s.b +s=t.q +if(s.a(A.r.prototype.gW.call(a)).f===0||!isFinite(s.a(A.r.prototype.gW.call(a)).y))return new A.w(0,0,r,q) +p=s.a(A.r.prototype.gW.call(a)).y-s.a(A.r.prototype.gW.call(a)).r+s.a(A.r.prototype.gW.call(a)).f +switch(A.o7(m.B,s.a(A.r.prototype.gW.call(a)).b).a){case 2:o=0+p +n=0 +break +case 0:q-=p +n=0 +o=0 +break +case 1:n=0+p +o=0 +break +case 3:r-=p +n=0 +o=0 +break +default:n=0 +o=0}return new A.w(n,o,r,q)}, +W_(a){var s,r,q,p,o=this +if(o.aq==null){s=o.gv(o) +return new A.w(0,0,0+s.a,0+s.b)}switch(A.bR(o.B).a){case 1:o.gv(o) +o.gv(o) +s=o.aq +s.toString +r=o.gv(o) +q=o.gv(o) +p=o.aq +p.toString +return new A.w(0,0-s,0+r.a,0+q.b+p) +case 0:o.gv(o) +s=o.aq +s.toString +o.gv(o) +r=o.gv(o) +q=o.aq +q.toString +return new A.w(0-s,0,0+r.a+q,0+o.gv(o).b)}}, +am(a,b){var s,r,q,p=this +if(p.a4$==null)return +s=p.gar_()&&p.aD!==B.o +r=p.aE +if(s){s=p.cx +s===$&&A.b() +q=p.gv(p) +r.sar(0,a.lQ(s,b,new A.w(0,0,0+q.a,0+q.b),p.gafU(),p.aD,r.a))}else{r.sar(0,null) +p.QP(a,b)}}, +m(){this.aE.sar(0,null) +this.eK()}, +QP(a,b){var s,r,q,p,o,n,m +for(s=this.gUZ(),r=s.length,q=b.a,p=b.b,o=0;o0}, +$S:422} +A.alY.prototype={ +$1(a){var s=this,r=s.c,q=s.a,p=s.b.amG(r,q.b) +return r.Xd(s.d,q.a,p)}, +$S:205} +A.EK.prototype={ +ew(a){if(!(a.b instanceof A.nx))a.b=new A.nx(null,null,B.e)}, +sal8(a){if(a===this.ce)return +this.ce=a +this.a8()}, +saK(a){if(a==this.eC)return +this.eC=a +this.a8()}, +giz(){return!0}, +c5(a){return new A.G(A.O(1/0,a.a,a.b),A.O(1/0,a.c,a.d))}, +bA(){var s,r,q,p,o,n,m,l,k,j=this +switch(A.bR(j.B).a){case 1:j.a9.Hk(j.gv(j).b) +break +case 0:j.a9.Hk(j.gv(j).a) +break}if(j.eC==null){j.n2=j.dE=0 +j.ow=!1 +j.a9.Hh(0,0) +return}switch(A.bR(j.B).a){case 1:s=j.gv(j).b +r=j.gv(j).a +break +case 0:s=j.gv(j).a +r=j.gv(j).b +break +default:s=null +r=null}j.eC.toString +q=0 +do{p=j.a9.at +p.toString +o=j.a7a(s,r,p+0) +if(o!==0)j.a9.anu(o) +else{p=j.a9 +n=j.dE +n===$&&A.b() +m=j.ce +n=Math.min(0,n+s*m) +l=j.n2 +l===$&&A.b() +if(p.Hh(n,Math.max(0,l-s*(1-m))))break}k=q+1 +if(k<10){q=k +continue}else break}while(!0)}, +a7a(a,b,c){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e=this +e.n2=e.dE=0 +e.ow=!1 +s=a*e.ce-c +r=A.O(s,0,a) +q=a-s +p=A.O(q,0,a) +switch(e.aH.a){case 0:e.aq=e.X +break +case 1:e.aq=a*e.X +break}o=e.aq +o.toString +n=a+2*o +m=s+o +l=A.O(m,0,n) +k=A.O(n-m,0,n) +j=e.eC.b +j.toString +i=A.o(e).h("at.1").a(j).ci$ +j=i==null +if(!j){h=Math.max(a,s) +g=e.XX(e.gamg(),A.O(q,-o,0),i,b,B.oY,p,a,0,l,r,h-a) +if(g!==0)return-g}q=e.eC +o=-s +h=Math.max(0,o) +o=j?Math.min(0,o):0 +j=s>=a?s:r +f=e.aq +f.toString +return e.XX(e.game(),A.O(s,-f,0),q,b,B.oX,j,a,o,k,p,h)}, +gar_(){return this.ow}, +avU(a,b){var s,r=this +switch(a.a){case 0:s=r.n2 +s===$&&A.b() +r.n2=s+b.a +break +case 1:s=r.dE +s===$&&A.b() +r.dE=s-b.a +break}if(b.x)r.ow=!0}, +a_2(a,b,c){var s=a.b +s.toString +t.jB.a(s).a=this.amE(a,b,c)}, +auc(a){var s=a.b +s.toString +return t.jB.a(s).a}, +a0D(a,b){var s,r,q,p,o=this +switch(t.q.a(A.r.prototype.gW.call(a)).b.a){case 0:s=o.eC +for(r=A.o(o).h("at.1"),q=0;s!==a;){q+=s.fx.a +p=s.b +p.toString +s=r.a(p).ak$}return q+b +case 1:r=o.eC.b +r.toString +p=A.o(o).h("at.1") +s=p.a(r).ci$ +for(q=0;s!==a;){q-=s.fx.a +r=s.b +r.toString +s=p.a(r).ci$}return q-b}}, +asN(a){var s,r,q,p=this +switch(t.q.a(A.r.prototype.gW.call(a)).b.a){case 0:s=p.eC +for(r=A.o(p).h("at.1");s!==a;){s.fx.toString +q=s.b +q.toString +s=r.a(q).ak$}return 0 +case 1:r=p.eC.b +r.toString +q=A.o(p).h("at.1") +s=q.a(r).ci$ +for(;s!==a;){s.fx.toString +r=s.b +r.toString +s=q.a(r).ci$}return 0}}, +dj(a,b){var s=a.b +s.toString +s=t.jB.a(s).a +b.au(0,s.a,s.b)}, +amG(a,b){var s,r=a.b +r.toString +t.jB.a(r) +s=t.q +switch(A.o7(s.a(A.r.prototype.gW.call(a)).a,s.a(A.r.prototype.gW.call(a)).b).a){case 2:return b-r.a.b +case 1:return b-r.a.a +case 0:return a.fx.c-(b-r.a.b) +case 3:return a.fx.c-(b-r.a.a)}}, +gUZ(){var s,r,q=this,p=A.a([],t.Ry),o=q.a4$ +if(o==null)return p +for(s=A.o(q).h("at.1");o!=q.eC;){o.toString +p.push(o) +r=o.b +r.toString +o=s.a(r).ak$}o=q.d8$ +for(;!0;){o.toString +p.push(o) +if(o===q.eC)return p +r=o.b +r.toString +o=s.a(r).ci$}}, +gami(){var s,r,q,p=this,o=A.a([],t.Ry) +if(p.a4$==null)return o +s=p.eC +for(r=A.o(p).h("at.1");s!=null;){o.push(s) +q=s.b +q.toString +s=r.a(q).ak$}q=p.eC.b +q.toString +s=r.a(q).ci$ +for(;s!=null;){o.push(s) +q=s.b +q.toString +s=r.a(q).ci$}return o}} +A.md.prototype={ +ah(a){var s,r,q +this.dg(a) +s=this.a4$ +for(r=A.o(this).h("md.0");s!=null;){s.ah(a) +q=s.b +q.toString +s=r.a(q).ak$}}, +ad(a){var s,r,q +this.dh(0) +s=this.a4$ +for(r=A.o(this).h("md.0");s!=null;){s.ad(0) +q=s.b +q.toString +s=r.a(q).ak$}}} +A.F5.prototype={ +I(){return"ScrollDirection."+this.b}} +A.kL.prototype={ +wd(a,b,c,d){var s=d.a===B.z.a +if(s){this.eE(b) +return A.d5(null,t.H)}else return this.jD(b,c,d)}, +k(a){var s=this,r=A.a([],t.s) +s.a3W(r) +r.push(A.t(s.w).k(0)) +r.push(s.r.k(0)) +r.push(A.h(s.fr)) +r.push(s.k4.k(0)) +return"#"+A.bh(s)+"("+B.b.c_(r,", ")+")"}, +dZ(a){var s=this.at +if(s!=null)a.push("offset: "+B.c.af(s,1))}} +A.as6.prototype={ +I(){return"WrapAlignment."+this.b}} +A.as7.prototype={ +I(){return"WrapCrossAlignment."+this.b}} +A.Jd.prototype={} +A.m7.prototype={} +A.EL.prototype={ +soc(a,b){if(this.B===b)return +this.B=b +this.a8()}, +sfo(a){if(this.F===a)return +this.F=a +this.a8()}, +sa1F(a,b){if(this.a9===b)return +this.a9=b +this.a8()}, +savk(a){if(this.X===a)return +this.X=a +this.a8()}, +savl(a){if(this.aq===a)return +this.aq=a +this.a8()}, +sHV(a){if(this.aH===a)return +this.aH=a +this.a8()}, +ew(a){if(!(a.b instanceof A.m7))a.b=new A.m7(null,null,B.e)}, +bp(a){var s,r,q,p,o=this +switch(o.B.a){case 0:s=o.a4$ +for(r=A.o(o).h("at.1"),q=0;s!=null;){q+=s.d2(B.bb,1/0,s.gcc()) +p=s.b +p.toString +s=r.a(p).ak$}return q +case 1:return o.Et(new A.az(0,1/0,0,a)).a}}, +bo(a){var s,r,q,p,o=this +switch(o.B.a){case 0:return o.Et(new A.az(0,a,0,1/0)).b +case 1:s=o.a4$ +for(r=A.o(o).h("at.1"),q=0;s!=null;){q+=s.d2(B.bc,1/0,s.gcb()) +p=s.b +p.toString +s=r.a(p).ak$}return q}}, +h6(a){return this.Aj(a)}, +Fb(a){switch(this.B.a){case 0:return a.a +case 1:return a.b}}, +Fa(a){switch(this.B.a){case 0:return a.b +case 1:return a.a}}, +aaM(a,b){switch(this.B.a){case 0:return new A.k(a,b) +case 1:return new A.k(b,a)}}, +aaw(a,b,c){var s=b-c +switch(this.aH.a){case 0:return a?s:0 +case 1:return a?0:s +case 2:return s/2}}, +c5(a){return this.Et(a)}, +Et(a){var s,r,q,p,o,n,m,l,k,j,i,h,g,f=this +switch(f.B.a){case 0:s=a.b +r=new A.az(0,s,0,1/0) +break +case 1:s=a.d +r=new A.az(0,1/0,0,s) +break +default:r=null +s=0}q=f.a4$ +for(p=A.o(f).h("at.1"),o=0,n=0,m=0,l=0,k=0;q!=null;){j=A.aJZ(q,r) +i=f.Fb(j) +h=f.Fa(j) +if(k>0&&m+i+f.a9>s){o=Math.max(o,m) +n+=l+f.aq +m=0 +l=0 +k=0}m+=i +l=Math.max(l,h) +if(k>0)m+=f.a9;++k +g=q.b +g.toString +q=p.a(g).ak$}n+=l +o=Math.max(o,m) +switch(f.B.a){case 0:return a.bf(new A.G(o,n)) +case 1:return a.bf(new A.G(n,o))}}, +bA(){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,b0,b1,b2,b3=this,b4="RenderBox was not laid out: ",b5=t.k.a(A.r.prototype.gW.call(b3)) +b3.bM=!1 +s=b3.a4$ +if(s==null){b3.id=new A.G(A.O(0,b5.a,b5.b),A.O(0,b5.c,b5.d)) +return}switch(b3.B.a){case 0:r=b5.b +q=new A.az(0,r,0,1/0) +p=b3.aD===B.Z&&!0 +o=b3.aE===B.mf&&!0 +break +case 1:r=b5.d +q=new A.az(0,1/0,0,r) +p=b3.aE===B.mf&&!0 +o=b3.aD===B.Z&&!0 +break +default:q=null +r=0 +p=!1 +o=!1}n=b3.a9 +m=b3.aq +l=A.a([],t.M6) +for(k=t.Qy,j=0,i=0,h=0,g=0,f=0;s!=null;){s.bJ(q,!0) +e=s.id +d=b3.Fb(e==null?A.T(A.Q(b4+A.t(s).k(0)+"#"+A.bh(s))):e) +e=s.id +c=b3.Fa(e==null?A.T(A.Q(b4+A.t(s).k(0)+"#"+A.bh(s))):e) +if(f>0&&h+n+d>r){j=Math.max(j,h) +i+=g +if(l.length!==0)i+=m +l.push(new A.Jd(h,g,f)) +h=0 +g=0 +f=0}h+=d +if(f>0)h+=n +g=Math.max(g,c);++f +e=s.b +e.toString +k.a(e) +e.e=l.length +s=e.ak$}if(f>0){j=Math.max(j,h) +i+=g +if(l.length!==0)i+=m +l.push(new A.Jd(h,g,f))}b=l.length +switch(b3.B.a){case 0:b3.id=b5.bf(new A.G(j,i)) +a=b3.gv(b3).a +a0=b3.gv(b3).b +break +case 1:b3.id=b5.bf(new A.G(i,j)) +a=b3.gv(b3).b +a0=b3.gv(b3).a +break +default:a=0 +a0=0}b3.bM=a1?a1/(b-1):0 +a2=0 +break +case 4:a3=a1/b +a2=a3/2 +break +case 5:a3=a1/(b+1) +a2=a3 +break +default:a2=0 +a3=0}a3+=m +a4=o?a0-a2:a2 +s=b3.a4$ +for(a5=0;a51?a7/(f-1):0 +a8=0 +break +case 4:a9=a7/f +a8=a9/2 +break +case 5:a9=a7/(f+1) +a8=a9 +break +default:a8=0 +a9=0}a9+=n +b0=p?a-a8:a8 +if(o)a4-=g +for(;s!=null;){e=s.b +e.toString +k.a(e) +if(e.e!==a5)break +b1=s.id +d=b3.Fb(b1==null?A.T(A.Q(b4+A.t(s).k(0)+"#"+A.bh(s))):b1) +b1=s.id +b2=b3.aaw(o,g,b3.Fa(b1==null?A.T(A.Q(b4+A.t(s).k(0)+"#"+A.bh(s))):b1)) +if(p)b0-=d +e.a=b3.aaM(b0,a4+b2) +b0=p?b0-a9:b0+(d+a9) +s=e.ak$}a4=o?a4-a3:a4+(g+a3)}}, +cE(a,b){return this.qE(a,b)}, +am(a,b){var s,r=this,q=r.bM&&r.bj!==B.o,p=r.bc +if(q){q=r.cx +q===$&&A.b() +s=r.gv(r) +p.sar(0,a.lQ(q,b,new A.w(0,0,0+s.a,0+s.b),r.gVV(),r.bj,p.a))}else{p.sar(0,null) +r.mL(a,b)}}, +m(){this.bc.sar(0,null) +this.eK()}} +A.a1d.prototype={ +ah(a){var s,r,q +this.dg(a) +s=this.a4$ +for(r=t.Qy;s!=null;){s.ah(a) +q=s.b +q.toString +s=r.a(q).ak$}}, +ad(a){var s,r,q +this.dh(0) +s=this.a4$ +for(r=t.Qy;s!=null;){s.ad(0) +q=s.b +q.toString +s=r.a(q).ak$}}} +A.a1e.prototype={} +A.yX.prototype={} +A.u5.prototype={ +I(){return"SchedulerPhase."+this.b}} +A.aje.prototype={} +A.fi.prototype={ +Zc(a){var s=this.k3$ +B.b.C(s,a) +if(s.length===0){s=$.b8() +s.ch=null +s.CW=$.aw}}, +a9V(a){var s,r,q,p,o,n,m,l,k=this.k3$,j=A.V(k,!0,t.ph) +for(p=j.length,o=0;o0)return!1 +if(j)A.T(A.Q(l)) +s=k.y9(0) +j=s.gYE() +if(m.ok$.$2$priority$scheduler(j,m)){try{if(k.c===0)A.T(A.Q(l));++k.d +k.y9(0) +p=k.c-1 +o=k.y9(p) +k.b[p]=null +k.c=p +if(p>0)k.a7j(o,0) +s.awF()}catch(n){r=A.ax(n) +q=A.aZ(n) +j=A.bo("during a task callback") +A.d4(new A.bG(r,q,"scheduler library",j,null,!1))}return k.c!==0}return!1}, +t6(a,b){var s,r=this +r.l4() +s=++r.p3$ +r.p4$.n(0,s,new A.yX(a)) +return r.p3$}, +D4(a){return this.t6(a,!1)}, +gapc(){var s=this +if(s.ry$==null){if(s.x1$===B.dU)s.l4() +s.ry$=new A.bI(new A.aD($.aw,t.d),t.gR) +s.rx$.push(new A.and(s))}return s.ry$.a}, +gWU(){return this.x2$}, +S5(a){if(this.x2$===a)return +this.x2$=a +if(a)this.l4()}, +Ww(){var s=$.b8() +if(s.x==null){s.x=this.gaba() +s.y=$.aw}if(s.z==null){s.z=this.gabC() +s.Q=$.aw}}, +Iu(){switch(this.x1$.a){case 0:case 4:this.l4() +return +case 1:case 2:case 3:return}}, +l4(){var s,r=this +if(!r.to$)s=!(A.fi.prototype.gWU.call(r)&&r.bj$) +else s=!0 +if(s)return +r.Ww() +$.b8().l4() +r.to$=!0}, +a0x(){if(this.to$)return +this.Ww() +$.b8().l4() +this.to$=!0}, +Lp(){var s,r=this +if(r.xr$||r.x1$!==B.dU)return +r.xr$=!0 +s=r.to$ +A.cy(B.z,new A.anf(r)) +A.cy(B.z,new A.ang(r,s)) +r.asu(new A.anh(r))}, +MU(a){var s=this.y1$ +return A.dp(B.c.an((s==null?B.z:new A.b1(a.a-s.a)).a/1)+this.y2$.a,0)}, +abb(a){if(this.xr$){this.bq$=!0 +return}this.WY(a)}, +abD(){var s=this +if(s.bq$){s.bq$=!1 +s.rx$.push(new A.anc(s)) +return}s.X_()}, +WY(a){var s,r,q=this +if(q.y1$==null)q.y1$=a +r=a==null +q.bG$=q.MU(r?q.aL$:a) +if(!r)q.aL$=a +q.to$=!1 +try{q.x1$=B.Ww +s=q.p4$ +q.p4$=A.A(t.S,t.h1) +J.h7(s,new A.ane(q)) +q.R8$.a0(0)}finally{q.x1$=B.Wx}}, +av0(a){var s=this,r=s.bt$,q=r==null +if(!q&&r!==a)return null +if(r===a)++s.B$ +else if(q){s.bt$=a +s.B$=1}return new A.aje(s.ga9n())}, +a9o(){if(--this.B$===0){this.bt$=null +$.b8()}}, +X_(){var s,r,q,p,o,n,m,l,k=this +try{k.x1$=B.id +for(p=t.Vu,o=A.V(k.RG$,!0,p),n=o.length,m=0;m0&&r<4){s=s.bG$ +s.toString +q.c=s}s=q.a +s.toString +return s}, +tm(a,b){var s=this,r=s.a +if(r==null)return +s.c=s.a=null +s.Cy() +if(b)r.SS(s) +else r.ST()}, +ff(a){return this.tm(a,!1)}, +ajl(a){var s,r=this +r.e=null +s=r.c +if(s==null)s=r.c=a +r.d.$1(new A.b1(a.a-s.a)) +if(!r.b&&r.a!=null&&r.e==null)r.e=$.c_.t6(r.gzh(),!0)}, +Cy(){var s,r=this.e +if(r!=null){s=$.c_ +s.p4$.C(0,r) +s.R8$.D(0,r) +this.e=null}}, +m(){var s=this,r=s.a +if(r!=null){s.a=null +s.Cy() +r.SS(s)}}, +avu(a,b){var s=""+"Ticker()" +return s.charCodeAt(0)==0?s:s}, +k(a){return this.avu(a,!1)}} +A.uv.prototype={ +ST(){this.c=!0 +this.a.iV(0) +var s=this.b +if(s!=null)s.iV(0)}, +SS(a){var s +this.c=!1 +s=this.b +if(s!=null)s.o7(new A.Gp(a))}, +aw4(a){var s,r,q=this,p=new A.ara(a) +if(q.b==null){s=q.b=new A.bI(new A.aD($.aw,t.d),t.gR) +r=q.c +if(r!=null)if(r)s.iV(0) +else s.o7(B.a3J)}q.b.a.fV(p,p,t.H)}, +qt(a,b){return this.a.a.qt(a,b)}, +o2(a){return this.qt(a,null)}, +fV(a,b,c){return this.a.a.fV(a,b,c)}, +ba(a,b){return this.fV(a,null,b)}, +ix(a){return this.a.a.ix(a)}, +k(a){var s=A.bh(this),r=this.c +if(r==null)r="active" +else r=r?"complete":"canceled" +return"#"+s+"("+r+")"}, +$iae:1} +A.ara.prototype={ +$1(a){this.a.$0()}, +$S:24} +A.Gp.prototype={ +k(a){var s=this.a +if(s!=null)return"This ticker was canceled: "+s.k(0) +return'The ticker was canceled before the "orCancel" property was first used.'}, +$ic2:1} +A.Ts.prototype={ +gz3(){var s,r,q=this.WD$ +if(q===$){s=$.b8().a +r=$.aO() +q!==$&&A.ay() +q=this.WD$=new A.ca(s.c,r,t.uh)}return q}, +a9e(){--this.IC$ +this.gz3().sl(0,this.IC$>0)}, +PI(){var s,r=this +if($.b8().a.c){if(r.AA$==null){++r.IC$ +r.gz3().sl(0,!0) +r.AA$=new A.ao2(r.ga9d())}}else{s=r.AA$ +if(s!=null)s.a.$0() +r.AA$=null}}, +adb(a){var s,r,q=a.d +if(t.V4.b(q)){s=B.aC.h8(q) +if(J.d(s,B.ji))s=q +r=new A.ub(a.a,a.b,a.c,s)}else r=a +s=this.cy$.i(0,r.b) +if(s!=null){s=s.y +if(s!=null){s=s.at +if(s!=null)s.auq(r.c,r.a,r.d)}}}} +A.ao2.prototype={} +A.nu.prototype={ +k(a){return"SemanticsTag("+this.a+")"}} +A.AU.prototype={} +A.a94.prototype={} +A.cS.prototype={ +R(a,b){var s,r,q,p,o,n,m,l=this.a,k=l.length +if(k===0)return b +s=b.a +if(s.length===0)return this +r=A.V(this.b,!0,t.Vc) +q=b.b +p=q.length +if(p!==0)for(o=0;o=0;--o)r[o]=n[q-o-1].b}n=a3.fr +m=n.length +if(m!==0){l=new Int32Array(m) +for(o=0;o0?r[n-1].p2:null +if(n!==0)if(J.U(l)===J.U(o)){if(l!=null)o.toString +k=!0}else k=!1 +else k=!0 +if(!k&&p.length!==0){if(o!=null)B.b.jr(p) +B.b.E(q,p) +B.b.a0(p)}p.push(new A.nZ(m,l,n))}if(o!=null)B.b.jr(p) +B.b.E(q,p) +s=t.rB +return A.V(new A.R(q,new A.ao4(),s),!0,s.h("af.E"))}, +a0P(a){if(this.ay==null)return +B.mN.hP(0,a.ZJ(this.b))}, +dd(){return"SemanticsNode#"+this.b}, +avp(a,b,c){return new A.a1Z(a,this,b,!0,!0,null,c)}, +ZH(a){return this.avp(B.KO,null,a)}} +A.ao6.prototype={ +$1(a){var s,r,q,p=this.a +p.a=p.a|a.fr +s=p.b +r=a.z +q=a.dx +p.b=s|(r?q&$.a5Z():q) +if(p.x==null)p.x=a.p1 +if(p.z==null)p.z=a.p3 +if(p.Q==null)p.Q=a.R8 +if(p.as==null)p.as=a.RG +if(p.at==null)p.at=a.rx +if(p.ax==null)p.ax=a.ry +if(p.ay==null)p.ay=a.to +p.ch=a.x1 +p.CW=a.x2 +p.cx=a.xr +if(p.d.a==="")p.d=a.fy +if(p.e.a==="")p.e=a.go +if(p.f.a==="")p.f=a.id +if(p.w==="")p.w=a.k2 +s=a.dy +if(s!=null){r=p.y;(r==null?p.y=A.aS(t.g3):r).E(0,s)}for(s=this.b.db,s=A.lw(s,s.r,A.o(s).c),r=this.c;s.q();)r.D(0,A.aKc(s.d)) +a.ok!=null +s=p.c +r=p.x +p.c=A.aCx(a.fx,a.p1,s,r) +r=p.r +s=p.x +p.r=A.aCx(a.k1,a.p1,r,s) +p.cy=Math.max(p.cy,a.k4+a.k3) +return!0}, +$S:103} +A.ao4.prototype={ +$1(a){return a.a}, +$S:428} +A.nJ.prototype={ +b4(a,b){return B.c.b4(this.b,b.b)}, +$ic8:1} +A.kY.prototype={ +b4(a,b){return B.c.b4(this.a,b.a)}, +a1C(){var s,r,q,p,o,n,m,l,k,j=A.a([],t.TV) +for(s=this.c,r=s.length,q=0;q") +return A.V(new A.kb(n,new A.aAA(),s),!0,s.h("n.E"))}, +a1B(){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,a2,a3=this.c,a4=a3.length +if(a4<=1)return a3 +s=t.S +r=A.A(s,t.bu) +q=A.A(s,s) +for(p=this.b,o=p===B.Z,p=p===B.q,n=a4,m=0;m2.356194490192345 +else a0=!1 +if(a||a0)q.n(0,l.b,f.b)}}a1=A.a([],t.t) +a2=A.a(a3.slice(0),A.S(a3)) +B.b.dK(a2,new A.aAw()) +new A.R(a2,new A.aAx(),A.S(a2).h("R<1,l>")).aa(0,new A.aAz(A.aS(s),q,a1)) +a3=t.qn +a3=A.V(new A.R(a1,new A.aAy(r),a3),!0,a3.h("af.E")) +a4=A.S(a3).h("cO<1>") +return A.V(new A.cO(a3,a4),!0,a4.h("af.E"))}, +$ic8:1} +A.aAA.prototype={ +$1(a){return a.a1B()}, +$S:202} +A.aAw.prototype={ +$2(a,b){var s,r,q=a.e,p=A.v2(a,new A.k(q.a,q.b)) +q=b.e +s=A.v2(b,new A.k(q.a,q.b)) +r=B.c.b4(p.b,s.b) +if(r!==0)return-r +return-B.c.b4(p.a,s.a)}, +$S:104} +A.aAz.prototype={ +$1(a){var s=this,r=s.a +if(r.p(0,a))return +r.D(0,a) +r=s.b +if(r.ai(0,a)){r=r.i(0,a) +r.toString +s.$1(r)}s.c.push(a)}, +$S:53} +A.aAx.prototype={ +$1(a){return a.b}, +$S:431} +A.aAy.prototype={ +$1(a){var s=this.a.i(0,a) +s.toString +return s}, +$S:432} +A.aCp.prototype={ +$1(a){return a.a1C()}, +$S:202} +A.nZ.prototype={ +b4(a,b){var s,r=this.b +if(r==null||b.b==null)return this.c-b.c +r.toString +s=b.b +s.toString +return r.b4(0,s)}, +$ic8:1} +A.Tw.prototype={ +m(){var s=this +s.b.a0(0) +s.c.a0(0) +s.d.a0(0) +s.eJ()}, +a0R(){var s,r,q,p,o,n,m,l,k,j,i,h,g=this,f=g.b +if(f.a===0)return +s=A.aS(t.S) +r=A.a([],t.QF) +for(q=A.o(f).h("ba<1>"),p=q.h("n.E"),o=g.d;f.a!==0;){n=A.V(new A.ba(f,new A.aoa(g),q),!0,p) +f.a0(0) +o.a0(0) +B.b.dK(n,new A.aob()) +B.b.E(r,n) +for(m=n.length,l=0;l#"+A.bh(this)}} +A.aoa.prototype={ +$1(a){return!this.a.d.p(0,a)}, +$S:103} +A.aob.prototype={ +$2(a,b){return a.CW-b.CW}, +$S:104} +A.aoc.prototype={ +$2(a,b){return a.CW-b.CW}, +$S:104} +A.ao9.prototype={ +$1(a){if(a.cy.ai(0,this.b)){this.a.a=a +return!1}return!0}, +$S:103} +A.ky.prototype={ +nH(a,b){var s=this +s.f.n(0,a,b) +s.r=s.r|a.a +s.e=!0}, +fG(a,b){this.nH(a,new A.anS(b))}, +snj(a){a.toString +this.fG(B.dW,a)}, +sni(a){a.toString +this.fG(B.zL,a)}, +sBO(a){this.fG(B.fj,a)}, +sBE(a){this.fG(B.WU,a)}, +sBP(a){this.fG(B.fk,a)}, +sBQ(a){this.fG(B.fh,a)}, +sBN(a){this.fG(B.fi,a)}, +sBH(a){this.fG(B.zM,a)}, +sBC(a){this.fG(B.zK,a)}, +sBA(a,b){this.fG(B.WV,b)}, +sBB(a,b){this.fG(B.WY,b)}, +sBM(a,b){this.fG(B.WQ,b)}, +sBK(a){this.nH(B.WW,new A.anW(a))}, +sBI(a){this.nH(B.WZ,new A.anU(a))}, +sBL(a){this.nH(B.WX,new A.anX(a))}, +sBJ(a){this.nH(B.WP,new A.anV(a))}, +sBR(a){this.nH(B.WR,new A.anY(a))}, +sBS(a){this.nH(B.WS,new A.anZ(a))}, +sBD(a){this.fG(B.ly,a)}, +sJM(a){this.fG(B.lz,a)}, +sa0B(a){if(a==this.k4)return +this.k4=a +this.e=!0}, +sa0C(a){if(a==this.ok)return +this.ok=a +this.e=!0}, +sJz(a){return}, +sHX(a){return}, +sfq(a,b){if(b===this.y1)return +this.y1=b +this.e=!0}, +Ha(a){var s=this.bZ;(s==null?this.bZ=A.aS(t.g3):s).D(0,a)}, +b7(a,b){var s=this,r=s.bt,q=a.a +if(b)s.bt=r|q +else s.bt=r&~q +s.e=!0}, +XG(a){var s=this +if(a==null||!a.e||!s.e)return!0 +if((s.r&a.r)!==0)return!1 +if((s.bt&a.bt)!==0)return!1 +if(s.rx.a.length!==0&&a.rx.a.length!==0)return!1 +return!0}, +q7(a){var s,r,q,p=this +if(!a.e)return +s=a.f +if(a.b)s.aa(0,new A.anT(p)) +else p.f.E(0,s) +s=p.r +r=a.b +q=a.r +p.r=s|(r?q&$.a5Z():q) +p.R8.E(0,a.R8) +p.bt=p.bt|a.bt +if(p.bG==null)p.bG=a.bG +if(p.aM==null)p.aM=a.aM +if(p.aJ==null)p.aJ=a.aJ +if(p.bq==null)p.bq=a.bq +if(p.xr==null)p.xr=a.xr +if(p.k3==null)p.k3=a.k3 +if(p.ok==null)p.ok=a.ok +if(p.k4==null)p.k4=a.k4 +p.p1=a.p1 +p.p2=a.p2 +p.p3=a.p3 +s=p.aL +if(s==null){s=p.aL=a.aL +p.e=!0}if(p.k2==null)p.k2=a.k2 +r=p.RG +p.RG=A.aCx(a.RG,a.aL,r,s) +if(p.rx.a==="")p.rx=a.rx +if(p.ry.a==="")p.ry=a.ry +if(p.to.a==="")p.to=a.to +s=p.x1 +r=p.aL +p.x1=A.aCx(a.x1,a.aL,s,r) +if(p.x2==="")p.x2=a.x2 +p.y2=Math.max(p.y2,a.y2+a.y1) +p.e=p.e||a.e}, +amW(){var s=this,r=A.lQ() +r.a=s.a +r.c=s.c +r.d=s.d +r.e=s.e +r.p4=s.p4 +r.aL=s.aL +r.k2=s.k2 +r.RG=s.RG +r.ry=s.ry +r.rx=s.rx +r.to=s.to +r.x1=s.x1 +r.xr=s.xr +r.x2=s.x2 +r.y1=s.y1 +r.y2=s.y2 +r.bt=s.bt +r.bZ=s.bZ +r.bG=s.bG +r.aM=s.aM +r.aJ=s.aJ +r.bq=s.bq +r.r=s.r +r.k3=s.k3 +r.ok=s.ok +r.k4=s.k4 +r.p1=s.p1 +r.p2=s.p2 +r.p3=s.p3 +r.f.E(0,s.f) +r.R8.E(0,s.R8) +r.b=s.b +return r}} +A.anS.prototype={ +$1(a){this.a.$0()}, +$S:12} +A.anW.prototype={ +$1(a){a.toString +this.a.$1(A.v_(a))}, +$S:12} +A.anU.prototype={ +$1(a){a.toString +this.a.$1(A.v_(a))}, +$S:12} +A.anX.prototype={ +$1(a){a.toString +this.a.$1(A.v_(a))}, +$S:12} +A.anV.prototype={ +$1(a){a.toString +this.a.$1(A.v_(a))}, +$S:12} +A.anY.prototype={ +$1(a){var s,r,q +a.toString +s=J.a63(t.f.a(a),t.N,t.S) +r=s.i(0,"base") +r.toString +q=s.i(0,"extent") +q.toString +this.a.$1(A.cn(B.m,r,q,!1))}, +$S:12} +A.anZ.prototype={ +$1(a){a.toString +this.a.$1(A.bQ(a))}, +$S:12} +A.anT.prototype={ +$2(a,b){if(($.a5Z()&a.a)>0)this.a.f.n(0,a,b)}, +$S:434} +A.aab.prototype={ +I(){return"DebugSemanticsDumpOrder."+this.b}} +A.xP.prototype={ +b4(a,b){var s=this.ao8(b) +return s}, +$ic8:1} +A.x_.prototype={ +ao8(a){var s=a.b,r=this.b +if(s===r)return 0 +return B.f.b4(r,s)}} +A.a1Y.prototype={} +A.a20.prototype={} +A.a21.prototype={} +A.ao0.prototype={ +ZJ(a){var s=A.aY(["type",this.a,"data",this.x3()],t.N,t.z) +if(a!=null)s.n(0,"nodeId",a) +return s}, +avt(){return this.ZJ(null)}, +k(a){var s,r,q,p=A.a([],t.s),o=this.x3(),n=J.Ly(o.gc2(o)) +B.b.jr(n) +for(s=n.length,r=0;r#"+A.bh(this)+"()"}} +A.a8d.prototype={ +ne(a,b){if(b)return this.a.bm(0,a,new A.a8e(this,a)) +return this.LU(a,!0)}, +ass(a,b,c){var s,r=this,q={},p=r.b +if(p.ai(0,a)){q=p.i(0,a) +q.toString +return c.h("ae<0>").a(q)}q.a=q.b=null +r.ne(a,!1).ba(b,c).fV(new A.a8f(q,r,a,c),new A.a8g(q,r,a),t.H) +s=q.a +if(s!=null)return s +s=new A.aD($.aw,c.h("aD<0>")) +q.b=new A.bI(s,c.h("bI<0>")) +p.n(0,a,s) +return q.b.a}, +Iy(a){this.a.C(0,a) +this.b.C(0,a) +this.c.C(0,a)}} +A.a8e.prototype={ +$0(){return this.a.LU(this.b,!0)}, +$S:435} +A.a8f.prototype={ +$1(a){var s=this,r=new A.bK(a,s.d.h("bK<0>")),q=s.a +q.a=r +s.b.b.n(0,s.c,r) +q=q.b +if(q!=null)q.e7(0,a)}, +$S(){return this.d.h("b7(0)")}} +A.a8g.prototype={ +$2(a,b){this.b.b.C(0,this.c) +this.a.b.mF(a,b)}, +$S:44} +A.ajG.prototype={ +jX(a,b){var s,r=B.ca.cp(A.zE(null,A.a3U(B.kC,b,B.a2,!1),null).e),q=$.jA.cj$ +q===$&&A.b() +s=q.D9(0,"flutter/assets",A.a88(r)).ba(new A.ajH(b),t.V4) +return s}, +Bm(a){return this.asm(a)}, +asm(a){var s=0,r=A.a1(t.SG),q,p=this,o,n +var $async$Bm=A.a2(function(b,c){if(b===1)return A.Z(c,r) +while(true)switch(s){case 0:o=A +n=A +s=3 +return A.a7(p.jX(0,a),$async$Bm) +case 3:q=o.afK(n.arC(c,0,null)) +s=1 +break +case 1:return A.a_(q,r)}}) +return A.a0($async$Bm,r)}} +A.ajH.prototype={ +$1(a){if(a==null)throw A.c(A.wb(A.a([A.b3k(this.a),A.bo("The asset does not exist or has empty data.")],t.E))) +return a}, +$S:436} +A.a6F.prototype={ +$1(a){return this.a_D(a)}, +a_D(a){var s=0,r=A.a1(t.CL),q +var $async$$1=A.a2(function(b,c){if(b===1)return A.Z(c,r) +while(true)switch(s){case 0:q=new A.uE(t.pE.a(B.aC.h8(A.a88(B.mY.cp(A.bQ(B.c9.eA(0,a)))))),A.A(t.N,t.Rk)) +s=1 +break +case 1:return A.a_(q,r)}}) +return A.a0($async$$1,r)}, +$S:437} +A.uE.prototype={ +a_Q(a){var s,r,q,p=this.b +if(!p.ai(0,a)){s=this.a +r=J.aF(s) +if(r.i(s,a)==null)return null +q=r.i(s,a) +if(q==null)q=[] +q=J.l1(t.VG.a(q),t.pE) +p.n(0,a,q.eQ(q,new A.at2(a),t.pR).dI(0)) +r.C(s,a)}p=p.i(0,a) +p.toString +return p}, +$ia6E:1} +A.at2.prototype={ +$1(a){var s,r=J.aF(a),q=r.i(a,"asset") +q.toString +A.bQ(q) +s=r.i(a,"dpr") +r=r.i(a,"asset") +r.toString +A.bQ(r) +return new A.oj(A.b2B(s),r)}, +$S:438} +A.oj.prototype={} +A.a6J.prototype={ +m0(){var s,r=this +if(r.a){s=A.A(t.N,t.z) +s.n(0,"uniqueIdentifier",r.b) +s.n(0,"hints",r.c) +s.n(0,"editingValue",r.d.Ky())}else s=null +return s}} +A.a7H.prototype={} +A.xQ.prototype={ +adU(){var s,r,q=this,p=t.v3,o=new A.aer(A.A(p,t.bd),A.aS(t.SQ),A.a([],t.sA)) +q.dv$!==$&&A.bS() +q.dv$=o +s=$.aEM() +r=A.a([],t.K0) +q.av$!==$&&A.bS() +q.av$=new A.PI(o,s,r,A.aS(p)) +p=q.dv$ +p===$&&A.b() +p.xM().ba(new A.aok(q),t.P)}, +vH(){var s=$.qv() +s.a.a0(0) +s.b.a0(0) +s.c.a0(0)}, +n6(a){return this.aqL(a)}, +aqL(a){var s=0,r=A.a1(t.H),q,p=this +var $async$n6=A.a2(function(b,c){if(b===1)return A.Z(c,r) +while(true)switch(s){case 0:switch(A.bQ(J.bq(t.a.a(a),"type"))){case"memoryPressure":p.vH() +break}s=1 +break +case 1:return A.a_(q,r)}}) +return A.a0($async$n6,r)}, +a6O(){var s=A.bc("controller") +s.scJ(new A.q_(new A.aoj(s),null,null,null,t.qh)) +return J.aUN(s.aI())}, +auJ(){if(this.k4$==null)$.b8() +return}, +Fj(a){return this.ac4(a)}, +ac4(a){var s=0,r=A.a1(t.ob),q,p=this,o,n +var $async$Fj=A.a2(function(b,c){if(b===1)return A.Z(c,r) +while(true)switch(s){case 0:a.toString +o=A.b_w(a) +n=p.k4$ +o.toString +B.b.aa(p.aap(n,o),p.gaq_()) +q=null +s=1 +break +case 1:return A.a_(q,r)}}) +return A.a0($async$Fj,r)}, +aap(a,b){var s,r,q,p +if(a===b)return B.QA +if(a===B.fJ&&b===B.e5)return B.Pz +s=A.a([],t.QP) +if(a==null)s.push(b) +else{r=B.b.cS(B.hy,a) +q=B.b.cS(B.hy,b) +if(r>q)for(p=q;p>") +s=2 +return A.a7(A.oJ(A.V(new A.R(p,new A.adr(q),o),!0,o.h("af.E")),t.H),$async$Bl) +case 2:return A.a_(null,r)}}) +return A.a0($async$Bl,r)}} +A.adp.prototype={ +$1(a){return A.dD(a.buffer,a.byteOffset,a.byteLength)}, +$S:443} +A.adr.prototype={ +$1(a){return a.ba(new A.adq(this.a),t.H)}, +$S:444} +A.adq.prototype={ +$1(a){return A.aEc(a,this.a.a)}, +$S:445} +A.wE.prototype={ +I(){return"KeyboardLockMode."+this.b}} +A.oX.prototype={} +A.rU.prototype={} +A.oZ.prototype={} +A.CR.prototype={} +A.aer.prototype={ +xM(){var s=0,r=A.a1(t.H),q=this,p,o,n,m,l,k +var $async$xM=A.a2(function(a,b){if(a===1)return A.Z(b,r) +while(true)switch(s){case 0:l=t.S +s=2 +return A.a7(B.Vb.vT("getKeyboardState",l,l),$async$xM) +case 2:k=b +if(k!=null)for(l=J.dW(k),p=J.ap(l.gc2(k)),o=q.a;p.q();){n=p.gJ(p) +m=l.i(k,n) +m.toString +o.n(0,new A.u(n),new A.j(m))}return A.a_(null,r)}}) +return A.a0($async$xM,r)}, +a9i(a){var s,r,q,p,o,n,m,l,k,j +this.d=!0 +s=!1 +for(n=this.c,m=0;!1;++m){r=n[m] +try{q=r.$1(a) +s=s||q}catch(l){p=A.ax(l) +o=A.aZ(l) +k=A.bo("while processing a key handler") +j=$.jW() +if(j!=null)j.$1(new A.bG(p,o,"services library",k,null,!1))}}this.d=!1 +return s}, +X1(a){var s,r,q=this,p=a.a,o=a.b +if(a instanceof A.rU){q.a.n(0,p,o) +s=$.aSc().i(0,o.a) +if(s!=null){r=q.b +if(r.p(0,s))r.C(0,s) +else r.D(0,s)}}else if(a instanceof A.oZ)q.a.C(0,p) +return q.a9i(a)}} +A.PH.prototype={ +I(){return"KeyDataTransitMode."+this.b}} +A.CQ.prototype={ +k(a){return"KeyMessage("+A.h(this.a)+")"}} +A.PI.prototype={ +aqd(a){var s,r=this,q=r.d +switch((q==null?r.d=B.Ov:q).a){case 0:return!1 +case 1:if(a.c===0&&a.d===0)return!1 +s=A.aY1(a) +if(a.f&&r.e.length===0){r.b.X1(s) +r.Om(A.a([s],t.K0),null)}else r.e.push(s) +return!1}}, +Om(a,b){var s,r,q,p,o=this.a +if(o!=null){s=new A.CQ(a,b) +try{o=o.$1(s) +return o}catch(p){r=A.ax(p) +q=A.aZ(p) +o=A.bo("while processing the key message handler") +A.d4(new A.bG(r,q,"services library",o,null,!1))}}return!1}, +IW(a){var s=0,r=A.a1(t.a),q,p=this,o,n,m,l,k,j,i +var $async$IW=A.a2(function(b,c){if(b===1)return A.Z(c,r) +while(true)switch(s){case 0:if(p.d==null){p.d=B.Ou +p.c.a.push(p.ga8G())}o=A.aZG(t.a.a(a)) +if(o instanceof A.lK){p.f.C(0,o.c.gk9()) +n=!0}else if(o instanceof A.xr){m=p.f +l=o.c +if(m.p(0,l.gk9())){m.C(0,l.gk9()) +n=!1}else n=!0}else n=!0 +if(n){p.c.aqy(o) +for(m=p.e,l=m.length,k=p.b,j=!1,i=0;i") +r=A.hp(new A.aX(e,s),s.h("n.E")) +q=A.a([],t.K0) +p=e.i(0,d) +o=$.jA.aL$ +n=a.a +if(n==="")n=f +if(a instanceof A.lK)if(p==null){m=new A.rU(d,c,n,o,!1) +r.D(0,d)}else m=new A.CR(d,p,n,o,!1) +else if(p==null)m=f +else{m=new A.oZ(d,p,f,o,!1) +r.C(0,d)}for(s=this.c.d,l=A.o(s).h("aX<1>"),k=l.h("n.E"),j=r.ob(A.hp(new A.aX(s,l),k)),j=j.gab(j),i=this.e;j.q();){h=j.gJ(j) +if(h.j(0,d))q.push(new A.oZ(h,c,f,o,!0)) +else{g=e.i(0,h) +g.toString +i.push(new A.oZ(h,g,f,o,!0))}}for(e=A.hp(new A.aX(s,l),k).ob(r),e=e.gab(e);e.q();){l=e.gJ(e) +k=s.i(0,l) +k.toString +i.push(new A.rU(l,k,f,o,!0))}if(m!=null)i.push(m) +B.b.E(i,q)}} +A.Ze.prototype={} +A.agu.prototype={ +k(a){return"KeyboardInsertedContent("+this.a+", "+this.b+", "+A.h(this.c)+")"}, +j(a,b){var s,r,q=this +if(b==null)return!1 +if(J.U(b)!==A.t(q))return!1 +if(b instanceof A.agu)if(b.a===q.a)if(b.b===q.b){s=b.c +r=q.c +r=s==null?r==null:s===r +s=r}else s=!1 +else s=!1 +else s=!1 +return s}, +gt(a){return A.N(this.a,this.b,this.c,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}} +A.agv.prototype={} +A.j.prototype={ +gt(a){return B.f.gt(this.a)}, +j(a,b){if(b==null)return!1 +if(this===b)return!0 +if(J.U(b)!==A.t(this))return!1 +return b instanceof A.j&&b.a===this.a}} +A.u.prototype={ +gt(a){return B.f.gt(this.a)}, +j(a,b){if(b==null)return!1 +if(this===b)return!0 +if(J.U(b)!==A.t(this))return!1 +return b instanceof A.u&&b.a===this.a}} +A.Zf.prototype={} +A.ly.prototype={ +k(a){return"MethodCall("+this.a+", "+A.h(this.b)+")"}} +A.E5.prototype={ +k(a){var s=this +return"PlatformException("+s.a+", "+A.h(s.b)+", "+A.h(s.c)+", "+A.h(s.d)+")"}, +$ic2:1} +A.Dg.prototype={ +k(a){return"MissingPluginException("+A.h(this.a)+")"}, +$ic2:1} +A.apo.prototype={ +h8(a){if(a==null)return null +return B.a2.eA(0,A.arC(a,0,null))}, +cq(a){if(a==null)return null +return A.a88(B.ca.cp(a))}} +A.ag3.prototype={ +cq(a){if(a==null)return null +return B.jk.cq(B.c9.qS(a))}, +h8(a){var s +if(a==null)return a +s=B.jk.h8(a) +s.toString +return B.c9.eA(0,s)}} +A.ag5.prototype={ +jK(a){var s=B.cP.cq(A.aY(["method",a.a,"args",a.b],t.N,t.X)) +s.toString +return s}, +iY(a){var s,r,q,p=null,o=B.cP.h8(a) +if(!t.f.b(o))throw A.c(A.cc("Expected method call Map, got "+A.h(o),p,p)) +s=J.aF(o) +r=s.i(o,"method") +q=s.i(o,"args") +if(typeof r=="string")return new A.ly(r,q) +throw A.c(A.cc("Invalid method call: "+A.h(o),p,p))}, +VQ(a){var s,r,q,p=null,o=B.cP.h8(a) +if(!t.j.b(o))throw A.c(A.cc("Expected envelope List, got "+A.h(o),p,p)) +s=J.aF(o) +if(s.gu(o)===1)return s.i(o,0) +if(s.gu(o)===3)if(typeof s.i(o,0)=="string")r=s.i(o,1)==null||typeof s.i(o,1)=="string" +else r=!1 +else r=!1 +if(r){r=A.bQ(s.i(o,0)) +q=A.dk(s.i(o,1)) +throw A.c(A.aGF(r,s.i(o,2),q,p))}if(s.gu(o)===4)if(typeof s.i(o,0)=="string")if(s.i(o,1)==null||typeof s.i(o,1)=="string")r=s.i(o,3)==null||typeof s.i(o,3)=="string" +else r=!1 +else r=!1 +else r=!1 +if(r){r=A.bQ(s.i(o,0)) +q=A.dk(s.i(o,1)) +throw A.c(A.aGF(r,s.i(o,2),q,A.dk(s.i(o,3))))}throw A.c(A.cc("Invalid envelope: "+A.h(o),p,p))}, +vp(a){var s=B.cP.cq([a]) +s.toString +return s}, +oj(a,b,c){var s=B.cP.cq([a,c,b]) +s.toString +return s}, +Ws(a,b){return this.oj(a,null,b)}} +A.apb.prototype={ +cq(a){var s +if(a==null)return null +s=A.asa(64) +this.eW(0,s,a) +return s.mP()}, +h8(a){var s,r +if(a==null)return null +s=new A.El(a) +r=this.je(0,s) +if(s.b=b.a.byteLength)throw A.c(B.bn) +return this.lV(b.kf(0),b)}, +lV(a,b){var s,r,q,p,o,n,m,l,k=this +switch(a){case 0:return null +case 1:return!0 +case 2:return!1 +case 3:s=b.b +r=$.e5() +q=b.a.getInt32(s,B.av===r) +b.b+=4 +return q +case 4:return b.CQ(0) +case 6:b.km(8) +s=b.b +r=$.e5() +q=b.a.getFloat64(s,B.av===r) +b.b+=8 +return q +case 5:case 7:p=k.fw(b) +return B.cK.cp(b.mb(p)) +case 8:return b.mb(k.fw(b)) +case 9:p=k.fw(b) +b.km(4) +s=b.a +o=A.aGs(s.buffer,s.byteOffset+b.b,p) +b.b=b.b+4*p +return o +case 10:return b.CR(k.fw(b)) +case 14:p=k.fw(b) +b.km(4) +s=b.a +o=A.aM1(s.buffer,s.byteOffset+b.b,p) +b.b=b.b+4*p +return o +case 11:p=k.fw(b) +b.km(8) +s=b.a +o=A.aGr(s.buffer,s.byteOffset+b.b,p) +b.b=b.b+8*p +return o +case 12:p=k.fw(b) +n=A.bf(p,null,!1,t.X) +for(s=b.a,m=0;m=s.byteLength)A.T(B.bn) +b.b=r+1 +n[m]=k.lV(s.getUint8(r),b)}return n +case 13:p=k.fw(b) +s=t.X +n=A.A(s,s) +for(s=b.a,m=0;m=s.byteLength)A.T(B.bn) +b.b=r+1 +r=k.lV(s.getUint8(r),b) +l=b.b +if(l>=s.byteLength)A.T(B.bn) +b.b=l+1 +n.n(0,r,k.lV(s.getUint8(l),b))}return n +default:throw A.c(B.bn)}}, +hn(a,b){var s,r +if(b<254)a.fj(0,b) +else{s=a.d +if(b<=65535){a.fj(0,254) +r=$.e5() +s.setUint16(0,b,B.av===r) +a.ui(a.e,0,2)}else{a.fj(0,255) +r=$.e5() +s.setUint32(0,b,B.av===r) +a.ui(a.e,0,4)}}}, +fw(a){var s,r,q=a.kf(0) +switch(q){case 254:s=a.b +r=$.e5() +q=a.a.getUint16(s,B.av===r) +a.b+=2 +return q +case 255:s=a.b +r=$.e5() +q=a.a.getUint32(s,B.av===r) +a.b+=4 +return q +default:return q}}} +A.apd.prototype={ +$2(a,b){var s=this.a,r=this.b +s.eW(0,r,a) +s.eW(0,r,b)}, +$S:124} +A.apf.prototype={ +jK(a){var s=A.asa(64) +B.aC.eW(0,s,a.a) +B.aC.eW(0,s,a.b) +return s.mP()}, +iY(a){var s,r,q +a.toString +s=new A.El(a) +r=B.aC.je(0,s) +q=B.aC.je(0,s) +if(typeof r=="string"&&s.b>=a.byteLength)return new A.ly(r,q) +else throw A.c(B.oS)}, +vp(a){var s=A.asa(64) +s.fj(0,0) +B.aC.eW(0,s,a) +return s.mP()}, +oj(a,b,c){var s=A.asa(64) +s.fj(0,1) +B.aC.eW(0,s,a) +B.aC.eW(0,s,c) +B.aC.eW(0,s,b) +return s.mP()}, +Ws(a,b){return this.oj(a,null,b)}, +VQ(a){var s,r,q,p,o,n +if(a.byteLength===0)throw A.c(B.Ns) +s=new A.El(a) +if(s.kf(0)===0)return B.aC.je(0,s) +r=B.aC.je(0,s) +q=B.aC.je(0,s) +p=B.aC.je(0,s) +o=s.b=a.byteLength +else n=!1 +if(n)throw A.c(A.aGF(r,p,A.dk(q),o)) +else throw A.c(B.Nt)}} +A.ahZ.prototype={ +aq2(a,b,c){var s,r,q,p +if(t.PB.b(b)){this.b.C(0,a) +return}s=this.b +r=s.i(0,a) +q=A.b16(c) +if(q==null)q=this.a +if(J.d(r==null?null:t.U8.a(r.a),q))return +p=q.Ae(a) +s.n(0,a,p) +B.Vc.dl("activateSystemCursor",A.aY(["device",p.b,"kind",t.U8.a(p.a).a],t.N,t.z),t.H)}} +A.Dh.prototype={} +A.d0.prototype={ +k(a){var s=this.gv7() +return s}} +A.Xy.prototype={ +Ae(a){throw A.c(A.co(null))}, +gv7(){return"defer"}} +A.a2M.prototype={} +A.jH.prototype={ +gv7(){return"SystemMouseCursor("+this.a+")"}, +Ae(a){return new A.a2M(this,a)}, +j(a,b){if(b==null)return!1 +if(J.U(b)!==A.t(this))return!1 +return b instanceof A.jH&&b.a===this.a}, +gt(a){return B.d.gt(this.a)}} +A.a_2.prototype={} +A.om.prototype={ +guL(){var s=$.jA.cj$ +s===$&&A.b() +return s}, +hP(a,b){return this.a0N(0,b,this.$ti.h("1?"))}, +a0N(a,b,c){var s=0,r=A.a1(c),q,p=this,o,n,m +var $async$hP=A.a2(function(d,e){if(d===1)return A.Z(e,r) +while(true)switch(s){case 0:o=p.b +n=p.guL().D9(0,p.a,o.cq(b)) +m=o +s=3 +return A.a7(t.T8.b(n)?n:A.hD(n,t.CD),$async$hP) +case 3:q=m.h8(e) +s=1 +break +case 1:return A.a_(q,r)}}) +return A.a0($async$hP,r)}, +De(a){this.guL().LF(this.a,new A.a7G(this,a))}} +A.a7G.prototype={ +$1(a){return this.a_E(a)}, +a_E(a){var s=0,r=A.a1(t.CD),q,p=this,o,n +var $async$$1=A.a2(function(b,c){if(b===1)return A.Z(c,r) +while(true)switch(s){case 0:o=p.a.b +n=o +s=3 +return A.a7(p.b.$1(o.h8(a)),$async$$1) +case 3:q=n.cq(c) +s=1 +break +case 1:return A.a_(q,r)}}) +return A.a0($async$$1,r)}, +$S:199} +A.tp.prototype={ +guL(){var s=$.jA.cj$ +s===$&&A.b() +return s}, +mq(a,b,c,d){return this.aea(a,b,c,d,d.h("0?"))}, +aea(a,b,c,d,e){var s=0,r=A.a1(e),q,p=this,o,n,m,l,k +var $async$mq=A.a2(function(f,g){if(f===1)return A.Z(g,r) +while(true)switch(s){case 0:o=p.b +n=o.jK(new A.ly(a,b)) +m=p.a +l=p.guL().D9(0,m,n) +s=3 +return A.a7(t.T8.b(l)?l:A.hD(l,t.CD),$async$mq) +case 3:k=g +if(k==null){if(c){q=null +s=1 +break}throw A.c(A.aGo("No implementation found for method "+a+" on channel "+m))}q=d.h("0?").a(o.VQ(k)) +s=1 +break +case 1:return A.a_(q,r)}}) +return A.a0($async$mq,r)}, +dl(a,b,c){return this.mq(a,b,!1,c)}, +vT(a,b,c){return this.arL(a,b,c,b.h("@<0>").N(c).h("aJ<1,2>?"))}, +arL(a,b,c,d){var s=0,r=A.a1(d),q,p=this,o +var $async$vT=A.a2(function(e,f){if(e===1)return A.Z(f,r) +while(true)switch(s){case 0:s=3 +return A.a7(p.dl(a,null,t.f),$async$vT) +case 3:o=f +q=o==null?null:J.a63(o,b,c) +s=1 +break +case 1:return A.a_(q,r)}}) +return A.a0($async$vT,r)}, +pn(a){var s=this.guL() +s.LF(this.a,new A.ahM(this,a))}, +ym(a,b){return this.ab8(a,b)}, +ab8(a,b){var s=0,r=A.a1(t.CD),q,p=2,o,n=this,m,l,k,j,i,h,g,f,e +var $async$ym=A.a2(function(c,d){if(c===1){o=d +s=p}while(true)switch(s){case 0:h=n.b +g=h.iY(a) +p=4 +e=h +s=7 +return A.a7(b.$1(g),$async$ym) +case 7:k=e.vp(d) +q=k +s=1 +break +p=2 +s=6 +break +case 4:p=3 +f=o +k=A.ax(f) +if(k instanceof A.E5){m=k +k=m.a +i=m.b +q=h.oj(k,m.c,i) +s=1 +break}else if(k instanceof A.Dg){q=null +s=1 +break}else{l=k +h=h.Ws("error",J.f0(l)) +q=h +s=1 +break}s=6 +break +case 3:s=2 +break +case 6:case 1:return A.a_(q,r) +case 2:return A.Z(o,r)}}) +return A.a0($async$ym,r)}} +A.ahM.prototype={ +$1(a){return this.a.ym(a,this.b)}, +$S:199} +A.kr.prototype={ +dl(a,b,c){return this.arM(a,b,c,c.h("0?"))}, +kH(a,b){return this.dl(a,null,b)}, +arM(a,b,c,d){var s=0,r=A.a1(d),q,p=this +var $async$dl=A.a2(function(e,f){if(e===1)return A.Z(f,r) +while(true)switch(s){case 0:q=p.a2I(a,b,!0,c) +s=1 +break +case 1:return A.a_(q,r)}}) +return A.a0($async$dl,r)}} +A.rV.prototype={ +I(){return"KeyboardSide."+this.b}} +A.iO.prototype={ +I(){return"ModifierKey."+this.b}} +A.Ei.prototype={ +gasW(){var s,r,q=A.A(t.xS,t.LE) +for(s=0;s<9;++s){r=B.pq[s] +if(this.arV(r))q.n(0,r,B.dG)}return q}} +A.kv.prototype={} +A.akn.prototype={ +$0(){var s,r,q,p=this.b,o=J.aF(p),n=A.dk(o.i(p,"key")),m=n==null +if(!m){s=n.length +s=s!==0&&s===1}else s=!1 +if(s)this.a.a=n +s=A.dk(o.i(p,"code")) +if(s==null)s="" +m=m?"":n +r=A.j7(o.i(p,"location")) +if(r==null)r=0 +q=A.j7(o.i(p,"metaState")) +if(q==null)q=0 +p=A.j7(o.i(p,"keyCode")) +return new A.S1(s,m,r,q,p==null?0:p)}, +$S:449} +A.lK.prototype={} +A.xr.prototype={} +A.aks.prototype={ +aqy(a){var s,r,q,p,o,n,m,l,k,j,i=this +if(a instanceof A.lK){p=a.c +i.d.n(0,p.gk9(),p.gw5())}else if(a instanceof A.xr)i.d.C(0,a.c.gk9()) +i.aja(a) +for(p=i.a,o=A.V(p,!0,t.iS),n=o.length,m=0;m")),e),a0=a1 instanceof A.lK +if(a0)a.D(0,g.gk9()) +for(s=g.a,r=null,q=0;q<9;++q){p=B.pq[q] +o=$.aSf() +n=o.i(0,new A.dy(p,B.cg)) +if(n==null)continue +m=B.vv.i(0,s) +if(n.p(0,m==null?new A.u(98784247808+B.d.gt(s)):m))r=p +if(f.i(0,p)===B.dG){c.E(0,n) +if(n.fJ(0,a.glr(a)))continue}l=f.i(0,p)==null?A.aS(e):o.i(0,new A.dy(p,f.i(0,p))) +if(l==null)continue +for(o=A.o(l),m=new A.q7(l,l.r,o.h("q7<1>")),m.c=l.e,o=o.c;m.q();){k=m.d +if(k==null)k=o.a(k) +j=$.aSe().i(0,k) +j.toString +d.n(0,k,j)}}i=b.i(0,B.d7)!=null&&!J.d(b.i(0,B.d7),B.eL) +for(e=$.aIP(),e=A.lw(e,e.r,A.o(e).c);e.q();){a=e.d +h=i&&a.j(0,B.d7) +if(!c.p(0,a)&&!h)b.C(0,a)}b.C(0,B.f4) +b.E(0,d) +if(a0&&r!=null&&!b.ai(0,g.gk9())){e=g.gk9().j(0,B.dR) +if(e)b.n(0,g.gk9(),g.gw5())}}} +A.dy.prototype={ +j(a,b){if(b==null)return!1 +if(J.U(b)!==A.t(this))return!1 +return b instanceof A.dy&&b.a===this.a&&b.b==this.b}, +gt(a){return A.N(this.a,this.b,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}} +A.a0v.prototype={} +A.a0u.prototype={} +A.S1.prototype={ +gk9(){var s=this.a,r=B.vv.i(0,s) +return r==null?new A.u(98784247808+B.d.gt(s)):r}, +gw5(){var s,r=this.b,q=B.Tw.i(0,r),p=q==null?null:q[this.c] +if(p!=null)return p +s=B.Te.i(0,r) +if(s!=null)return s +if(r.length===1)return new A.j(r.toLowerCase().charCodeAt(0)) +return new A.j(B.d.gt(this.a)+98784247808)}, +arV(a){var s=this +switch(a.a){case 0:return(s.d&4)!==0 +case 1:return(s.d&1)!==0 +case 2:return(s.d&2)!==0 +case 3:return(s.d&8)!==0 +case 5:return(s.d&16)!==0 +case 4:return(s.d&32)!==0 +case 6:return(s.d&64)!==0 +case 7:case 8:return!1}}, +j(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +if(J.U(b)!==A.t(s))return!1 +return b instanceof A.S1&&b.a===s.a&&b.b===s.b&&b.c===s.c&&b.d===s.d&&b.e===s.e}, +gt(a){var s=this +return A.N(s.a,s.b,s.c,s.d,s.e,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}} +A.EQ.prototype={ +gavf(){var s=this +if(s.c)return new A.bK(s.a,t.hr) +if(s.b==null){s.b=new A.bI(new A.aD($.aw,t.HB),t.EZ) +s.yl()}return s.b.a}, +yl(){var s=0,r=A.a1(t.H),q,p=this,o +var $async$yl=A.a2(function(a,b){if(a===1)return A.Z(b,r) +while(true)switch(s){case 0:s=3 +return A.a7(B.l7.kH("get",t.pE),$async$yl) +case 3:o=b +if(p.b==null){s=1 +break}p.QV(o) +case 1:return A.a_(q,r)}}) +return A.a0($async$yl,r)}, +QV(a){var s,r=a==null +if(!r){s=J.bq(a,"enabled") +s.toString +A.v_(s)}else s=!1 +this.aqA(r?null:t.nc.a(J.bq(a,"data")),s)}, +aqA(a,b){var s,r,q=this,p=q.c&&b +q.d=p +if(p)$.c_.rx$.push(new A.amf(q)) +s=q.a +if(b){p=q.a91(a) +r=t.N +if(p==null){p=t.X +p=A.A(p,p)}r=new A.dR(p,q,null,"root",A.A(r,t.z4),A.A(r,t.I1)) +p=r}else p=null +q.a=p +q.c=!0 +r=q.b +if(r!=null)r.e7(0,p) +q.b=null +if(q.a!=s){q.a6() +if(s!=null)s.m()}}, +FI(a){return this.aeU(a)}, +aeU(a){var s=0,r=A.a1(t.H),q=this,p +var $async$FI=A.a2(function(b,c){if(b===1)return A.Z(c,r) +while(true)switch(s){case 0:p=a.a +switch(p){case"push":q.QV(t.pE.a(a.b)) +break +default:throw A.c(A.co(p+" was invoked but isn't implemented by "+A.t(q).k(0)))}return A.a_(null,r)}}) +return A.a0($async$FI,r)}, +a91(a){if(a==null)return null +return t.J1.a(B.aC.h8(A.fC(a.buffer,a.byteOffset,a.byteLength)))}, +a0y(a){var s=this +s.r.D(0,a) +if(!s.f){s.f=!0 +$.c_.rx$.push(new A.amg(s))}}, +On(){var s,r,q,p,o,n=this +if(!n.f)return +n.f=!1 +for(s=n.r,r=A.cX(s,s.r,A.o(s).c),q=r.$ti.c;r.q();){p=r.d;(p==null?q.a(p):p).w=!1}s.a0(0) +o=B.aC.cq(n.a.a) +B.l7.dl("put",A.dD(o.buffer,o.byteOffset,o.byteLength),t.H)}, +apO(){if($.c_.to$)return +this.On()}} +A.amf.prototype={ +$1(a){this.a.d=!1}, +$S:3} +A.amg.prototype={ +$1(a){return this.a.On()}, +$S:3} +A.dR.prototype={ +gua(){var s=J.A2(this.a,"c",new A.amc()) +s.toString +return t.pE.a(s)}, +gms(){var s=J.A2(this.a,"v",new A.amd()) +s.toString +return t.pE.a(s)}, +amk(a,b){var s,r,q,p,o=this,n=o.f +if(n.ai(0,a)||!J.vc(o.gua(),a)){n=t.N +s=new A.dR(A.A(n,t.X),null,null,a,A.A(n,t.z4),A.A(n,t.I1)) +o.iJ(s) +return s}r=t.N +q=o.c +p=J.bq(o.gua(),a) +p.toString +s=new A.dR(t.pE.a(p),q,o,a,A.A(r,t.z4),A.A(r,t.I1)) +n.n(0,a,s) +return s}, +iJ(a){var s=this,r=a.d +if(r!==s){if(r!=null)r.yU(a) +a.d=s +s.MK(a) +if(a.c!=s.c)s.Rg(a)}}, +a9z(a){this.yU(a) +a.d=null +if(a.c!=null){a.Gh(null) +a.TN(this.gRf())}}, +pQ(){var s,r=this +if(!r.w){r.w=!0 +s=r.c +if(s!=null)s.a0y(r)}}, +Rg(a){a.Gh(this.c) +a.TN(this.gRf())}, +Gh(a){var s=this,r=s.c +if(r==a)return +if(s.w)if(r!=null)r.r.C(0,s) +s.c=a +if(s.w&&a!=null){s.w=!1 +s.pQ()}}, +yU(a){var s,r,q,p=this +if(J.d(p.f.C(0,a.e),a)){J.of(p.gua(),a.e) +s=p.r +r=s.i(0,a.e) +if(r!=null){q=J.cb(r) +p.OG(q.eF(r)) +if(q.ga7(r))s.C(0,a.e)}if(J.it(p.gua()))J.of(p.a,"c") +p.pQ() +return}s=p.r +q=s.i(0,a.e) +if(q!=null)J.of(q,a) +q=s.i(0,a.e) +q=q==null?null:J.it(q) +if(q===!0)s.C(0,a.e)}, +MK(a){var s=this +if(s.f.ai(0,a.e)){J.eo(s.r.bm(0,a.e,new A.amb()),a) +s.pQ() +return}s.OG(a) +s.pQ()}, +OG(a){this.f.n(0,a.e,a) +J.hH(this.gua(),a.e,a.a)}, +TO(a,b){var s,r,q=this.f +q=q.gaT(q) +s=this.r +s=s.gaT(s) +r=q.IM(0,new A.kb(s,new A.ame(),A.o(s).h("kb"))) +J.h7(b?A.V(r,!1,A.o(r).h("n.E")):r,a)}, +TN(a){return this.TO(a,!1)}, +auV(a){var s,r=this +if(a===r.e)return +s=r.d +if(s!=null)s.yU(r) +r.e=a +s=r.d +if(s!=null)s.MK(r)}, +m(){var s,r=this +r.TO(r.ga9y(),!0) +r.f.a0(0) +r.r.a0(0) +s=r.d +if(s!=null)s.yU(r) +r.d=null +r.Gh(null) +r.x=!0}, +k(a){return"RestorationBucket(restorationId: "+this.e+", owner: "+A.h(this.b)+")"}} +A.amc.prototype={ +$0(){var s=t.X +return A.A(s,s)}, +$S:197} +A.amd.prototype={ +$0(){var s=t.X +return A.A(s,s)}, +$S:197} +A.amb.prototype={ +$0(){return A.a([],t.QT)}, +$S:453} +A.ame.prototype={ +$1(a){return a}, +$S:454} +A.y7.prototype={ +j(a,b){var s,r +if(b==null)return!1 +if(this===b)return!0 +if(b instanceof A.y7){s=b.a +r=this.a +s=s.a===r.a&&s.b===r.b&&A.dn(b.b,this.b)}else s=!1 +return s}, +gt(a){var s=this.a +return A.N(s.a,s.b,A.bv(this.b),B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}} +A.U5.prototype={ +j(a,b){if(b==null)return!1 +if(this===b)return!0 +return b instanceof A.U5&&b.a===this.a&&A.dn(b.b,this.b)}, +gt(a){return A.N(this.a,A.bv(this.b),B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}} +A.aag.prototype={} +A.a6z.prototype={} +A.lX.prototype={ +SU(){var s,r,q,p,o=this,n=o.a +n=n==null?null:n.a +s=o.e +s=s==null?null:s.a +r=o.f.I() +q=o.r.I() +p=o.c +p=p==null?null:p.I() +return A.aY(["systemNavigationBarColor",n,"systemNavigationBarDividerColor",null,"systemStatusBarContrastEnforced",o.w,"statusBarColor",s,"statusBarBrightness",r,"statusBarIconBrightness",q,"systemNavigationBarIconBrightness",p,"systemNavigationBarContrastEnforced",o.d],t.N,t.z)}, +k(a){return"SystemUiOverlayStyle("+this.SU().k(0)+")"}, +gt(a){var s=this +return A.N(s.a,s.b,s.d,s.e,s.f,s.r,s.w,s.c,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a,b){var s,r=this +if(b==null)return!1 +if(J.U(b)!==A.t(r))return!1 +if(b instanceof A.lX)if(J.d(b.a,r.a))if(J.d(b.e,r.e))if(b.r===r.r)if(b.f===r.f)s=b.c==r.c +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +return s}} +A.apT.prototype={ +$0(){if(!J.d($.yd,$.aH5)){B.bg.dl("SystemChrome.setSystemUIOverlayStyle",$.yd.SU(),t.H) +$.aH5=$.yd}$.yd=null}, +$S:0} +A.Un.prototype={ +I(){return"SystemSoundType."+this.b}} +A.j3.prototype={ +fC(a){var s +if(a<0)return null +s=this.t1(a).a +return s>=0?s:null}, +fE(a){var s=this.t1(Math.max(0,a)).b +return s>=0?s:null}, +t1(a){var s,r=this.fC(a) +if(r==null)r=-1 +s=this.fE(a) +return new A.ce(r,s==null?-1:s)}} +A.vv.prototype={ +fC(a){var s +if(a<0)return null +s=this.a +return A.apn(s,Math.min(a,s.length)).b}, +fE(a){var s,r=this.a +if(a>=r.length)return null +s=A.apn(r,Math.max(0,a+1)) +return s.b+s.gJ(s).length}, +t1(a){var s,r,q,p=this +if(a<0){s=p.fE(a) +return new A.ce(-1,s==null?-1:s)}else{s=p.a +if(a>=s.length){s=p.fC(a) +return new A.ce(s==null?-1:s,-1)}}r=A.apn(s,a) +s=r.b +if(s!==r.c)s=new A.ce(s,s+r.gJ(r).length) +else{q=p.fE(a) +s=new A.ce(s,q==null?-1:q)}return s}} +A.wG.prototype={ +t1(a){return this.a.rZ(new A.b9(Math.max(a,0),B.m))}} +A.DQ.prototype={ +fC(a){var s,r,q +if(a<0||this.a.length===0)return null +s=this.a +r=s.length +if(a>=r)return r +if(a===0)return 0 +if(a>1&&s.charCodeAt(a)===10&&s.charCodeAt(a-1)===13)q=a-2 +else q=A.aH7(s.charCodeAt(a))?a-1:a +for(;q>0;){if(A.aH7(s.charCodeAt(q)))return q+1;--q}return Math.max(q,0)}, +fE(a){var s,r=this.a,q=r.length +if(a>=q||q===0)return null +if(a<0)return 0 +for(s=a;!A.aH7(r.charCodeAt(s));){++s +if(s===q)return s}return s=s?null:s}} +A.hB.prototype={ +gln(){var s,r=this +if(!r.gck()||r.c===r.d)s=r.e +else s=r.c=n&&o<=p.b)return p +s=p.c +r=p.d +q=s<=r +if(o<=n){if(b)return p.qA(a.b,p.b,o) +n=q?o:s +return p.A8(n,q?r:o)}if(b)return p.qA(a.b,n,o) +n=q?s:o +return p.A8(n,q?o:r)}, +Wz(a){if(this.geB().j(0,a))return this +return this.anf(a.b,a.a)}} +A.pO.prototype={} +A.Uw.prototype={} +A.Uv.prototype={} +A.Ux.prototype={} +A.yh.prototype={} +A.a2Y.prototype={} +A.pP.prototype={} +A.a_6.prototype={} +A.aBc.prototype={} +A.Oy.prototype={ +apX(a,b){var s,r,q,p,o,n,m,l,k,j=this,i=null,h=b.b +h=h.gck()?new A.a_6(h.c,h.d):i +s=b.c +s=s.gck()&&s.a!==s.b?new A.a_6(s.a,s.b):i +r=new A.aBc(b,new A.ck(""),h,s) +s=b.a +q=B.d.lm(j.a,s) +for(h=new A.a2C(q.a,q.b,q.c),p=i;h.q();p=o){o=h.d +o.toString +n=p==null?i:p.a+p.c.length +if(n==null)n=0 +m=o.a +j.G4(!1,n,m,r) +j.G4(!0,m,m+o.c.length,r)}h=p==null?i:p.a+p.c.length +if(h==null)h=0 +j.G4(!1,h,s.length,r) +s=r.e=!0 +l=r.c +k=r.d +h=r.b.a +s=(k!=null?k.a===k.b:s)?B.c2:new A.ce(k.a,k.b) +if(l==null)o=B.m1 +else{o=r.a.b +o=A.cn(o.e,l.a,l.b,o.f)}return new A.dF(h.charCodeAt(0)==0?h:h,o,s)}, +G4(a,b,c,d){var s,r,q,p +if(a)s=b===c?"":this.c +else s=B.d.P(d.a.a,b,c) +d.b.a+=s +if(s.length===c-b)return +r=new A.acG(b,c,s) +q=d.c +p=q==null +if(!p)q.a=q.a+r.$1(d.a.b.c) +if(!p)q.b=q.b+r.$1(d.a.b.d) +q=d.d +p=q==null +if(!p)q.a=q.a+r.$1(d.a.c.a) +if(!p)q.b=q.b+r.$1(d.a.c.b)}} +A.acG.prototype={ +$1(a){var s=this,r=s.a,q=a<=r&&a=r.a&&s<=this.a.length}else r=!1 +return r}, +av_(a,b){var s,r,q,p,o=this +if(!a.gck())return o +s=a.a +r=a.b +q=B.d.kX(o.a,s,r,b) +if(r-s===b.length)return o.ana(q) +s=new A.aq6(a,b) +r=o.b +p=o.c +return new A.dF(q,A.cn(B.m,s.$1(r.c),s.$1(r.d),!1),new A.ce(s.$1(p.a),s.$1(p.b)))}, +Ky(){var s=this.b,r=this.c +return A.aY(["text",this.a,"selectionBase",s.c,"selectionExtent",s.d,"selectionAffinity",s.e.I(),"selectionIsDirectional",s.f,"composingBase",r.a,"composingExtent",r.b],t.N,t.z)}, +k(a){return"TextEditingValue(text: \u2524"+this.a+"\u251c, selection: "+this.b.k(0)+", composing: "+this.c.k(0)+")"}, +j(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +return b instanceof A.dF&&b.a===s.a&&b.b.j(0,s.b)&&b.c.j(0,s.c)}, +gt(a){var s=this.b,r=this.c +return A.N(B.d.gt(this.a),s.gt(s),A.N(B.f.gt(r.a),B.f.gt(r.b),B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a),B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}} +A.aq6.prototype={ +$1(a){var s=this.a,r=s.a,q=a<=r&&a") +l=p.f +k=A.o(l).h("aX<1>") +j=k.h("hr>") +q=A.V(new A.hr(new A.ba(new A.aX(l,k),new A.aqz(p,A.V(new A.R(n,new A.aqA(),m),!0,m.h("af.E"))),k.h("ba")),new A.aqB(p),j),!0,j.h("n.E")) +s=1 +break}else if(b==="TextInputClient.scribbleInteractionBegan"){p.r=!0 +s=1 +break}else if(b==="TextInputClient.scribbleInteractionFinished"){p.r=!1 +s=1 +break}n=p.d +if(n==null){s=1 +break}if(b==="TextInputClient.requestExistingInputState"){m=p.e +m===$&&A.b() +p.E4(n,m) +p.z4(p.d.r.a.c.a) +s=1 +break}n=t.j +o=n.a(a.b) +if(b===u.l){n=t.a +i=n.a(J.bq(o,1)) +for(m=J.dW(i),l=J.ap(m.gc2(i));l.q();)A.aNw(n.a(m.i(i,l.gJ(l)))) +s=1 +break}m=J.aF(o) +h=A.el(m.i(o,0)) +l=p.d +if(h!==l.f){s=1 +break}switch(b){case"TextInputClient.updateEditingState":g=A.aNw(t.a.a(m.i(o,1))) +$.cI().ajP(g,$.aEP()) +break +case u.s:f=A.a([],t.sD) +l=t.a +for(n=J.ap(n.a(J.bq(l.a(m.i(o,1)),"deltas")));n.q();)f.push(A.b0f(l.a(n.gJ(n)))) +t.Je.a(p.d.r).awH(f) +break +case"TextInputClient.performAction":if(A.bQ(m.i(o,1))==="TextInputAction.commitContent"){n=t.a.a(m.i(o,2)) +m=J.aF(n) +A.bQ(m.i(n,"mimeType")) +A.bQ(m.i(n,"uri")) +if(m.i(n,"data")!=null)new Uint8Array(A.em(A.n5(t.JY.a(m.i(n,"data")),!0,t.S))) +p.d.r.a.toString}else p.d.r.aup(A.b4D(A.bQ(m.i(o,1)))) +break +case"TextInputClient.performSelectors":e=J.l1(n.a(m.i(o,1)),t.N) +e.aa(e,p.d.r.gaur()) +break +case"TextInputClient.performPrivateCommand":n=t.a +d=n.a(m.i(o,1)) +m=p.d.r +l=J.aF(d) +A.bQ(l.i(d,"action")) +if(l.i(d,"data")!=null)n.a(l.i(d,"data")) +m.a.toString +break +case"TextInputClient.updateFloatingCursor":n=l.r +l=A.b4C(A.bQ(m.i(o,1))) +m=t.a.a(m.i(o,2)) +if(l===B.kg){k=J.aF(m) +c=new A.k(A.kZ(k.i(m,"X")),A.kZ(k.i(m,"Y")))}else c=B.e +n.avS(new A.akm(c,l)) +break +case"TextInputClient.onConnectionClosed":n=l.r +if(n.ghW()){n.z.toString +n.fy=n.z=$.cI().d=null +n.a.d.np()}break +case"TextInputClient.showAutocorrectionPromptRect":l.r.a1h(A.el(m.i(o,1)),A.el(m.i(o,2))) +break +case"TextInputClient.showToolbar":l.r.kh() +break +case"TextInputClient.insertTextPlaceholder":l.r.arB(new A.G(A.kZ(m.i(o,1)),A.kZ(m.i(o,2)))) +break +case"TextInputClient.removeTextPlaceholder":l.r.Zb() +break +default:throw A.c(A.aGo(null))}case 1:return A.a_(q,r)}}) +return A.a0($async$Fm,r)}, +ahG(){if(this.w)return +this.w=!0 +A.fq(new A.aqD(this))}, +aib(a,b){var s,r,q,p,o,n,m,l,k,j +for(s=this.b,s=A.cX(s,s.r,A.o(s).c),r=t.jl,q=t.H,p=s.$ti.c,o=t.N,n=t.z;s.q();){m=s.d +if(m==null)p.a(m) +m=$.cI() +l=m.c +l===$&&A.b() +k=m.d.f +j=b.m0() +if(m.a!==$.aEP())j.n(0,"inputType",A.aY(["name","TextInputType.none","signed",null,"decimal",null],o,n)) +l.dl("TextInput.setClient",A.a([k,j],r),q)}}, +ND(){var s,r,q,p,o=this +o.d.toString +for(s=o.b,s=A.cX(s,s.r,A.o(s).c),r=t.H,q=s.$ti.c;s.q();){p=s.d +if(p==null)q.a(p) +p=$.cI().c +p===$&&A.b() +p.kH("TextInput.clearClient",r)}o.d=null +o.ahG()}, +z4(a){var s,r,q,p +for(s=this.b,s=A.cX(s,s.r,A.o(s).c),r=t.H,q=s.$ti.c;s.q();){p=s.d +if(p==null)q.a(p) +p=$.cI().c +p===$&&A.b() +p.dl("TextInput.setEditingState",a.Ky(),r)}}, +Gq(){var s,r,q,p +for(s=this.b,s=A.cX(s,s.r,A.o(s).c),r=t.H,q=s.$ti.c;s.q();){p=s.d +if(p==null)q.a(p) +p=$.cI().c +p===$&&A.b() +p.kH("TextInput.show",r)}}, +adO(){var s,r,q,p +for(s=this.b,s=A.cX(s,s.r,A.o(s).c),r=t.H,q=s.$ti.c;s.q();){p=s.d +if(p==null)q.a(p) +p=$.cI().c +p===$&&A.b() +p.kH("TextInput.hide",r)}}, +aie(a,b){var s,r,q,p,o,n,m,l,k +for(s=this.b,s=A.cX(s,s.r,A.o(s).c),r=a.a,q=a.b,p=b.a,o=t.N,n=t.z,m=t.H,l=s.$ti.c;s.q();){k=s.d +if(k==null)l.a(k) +k=$.cI().c +k===$&&A.b() +k.dl("TextInput.setEditableSizeAndTransform",A.aY(["width",r,"height",q,"transform",p],o,n),m)}}, +aic(a){var s,r,q,p,o,n,m,l,k,j +for(s=this.b,s=A.cX(s,s.r,A.o(s).c),r=a.a,q=a.c-r,p=a.b,o=a.d-p,n=t.N,m=t.z,l=t.H,k=s.$ti.c;s.q();){j=s.d +if(j==null)k.a(j) +j=$.cI().c +j===$&&A.b() +j.dl("TextInput.setMarkedTextRect",A.aY(["width",q,"height",o,"x",r,"y",p],n,m),l)}}, +aia(a){var s,r,q,p,o,n,m,l,k,j +for(s=this.b,s=A.cX(s,s.r,A.o(s).c),r=a.a,q=a.c-r,p=a.b,o=a.d-p,n=t.N,m=t.z,l=t.H,k=s.$ti.c;s.q();){j=s.d +if(j==null)k.a(j) +j=$.cI().c +j===$&&A.b() +j.dl("TextInput.setCaretRect",A.aY(["width",q,"height",o,"x",r,"y",p],n,m),l)}}, +aii(a){var s,r,q +for(s=this.b,s=A.cX(s,s.r,A.o(s).c),r=s.$ti.c;s.q();){q=s.d;(q==null?r.a(q):q).a16(a)}}, +aij(a,b,c,d,e){var s,r,q,p,o,n,m,l,k +for(s=this.b,s=A.cX(s,s.r,A.o(s).c),r=d.a,q=e.a,p=t.N,o=t.z,n=t.H,m=c==null,l=s.$ti.c;s.q();){k=s.d +if(k==null)l.a(k) +k=$.cI().c +k===$&&A.b() +k.dl("TextInput.setStyle",A.aY(["fontFamily",a,"fontSize",b,"fontWeightIndex",m?null:c.a,"textAlignIndex",r,"textDirectionIndex",q],p,o),n)}}, +ahe(){var s,r,q,p +for(s=this.b,s=A.cX(s,s.r,A.o(s).c),r=t.H,q=s.$ti.c;s.q();){p=s.d +if(p==null)q.a(p) +p=$.cI().c +p===$&&A.b() +p.kH("TextInput.requestAutofill",r)}}, +ajP(a,b){var s,r,q,p +if(this.d==null)return +for(s=$.cI().b,s=A.cX(s,s.r,A.o(s).c),r=s.$ti.c,q=t.H;s.q();){p=s.d +if((p==null?r.a(p):p)!==b){p=$.cI().c +p===$&&A.b() +p.dl("TextInput.setEditingState",a.Ky(),q)}}$.cI().d.r.avR(a)}} +A.aqC.prototype={ +$0(){var s=null +return A.a([A.k6("call",this.a,!0,B.bl,s,!1,s,s,B.aR,s,!1,!0,!0,B.bR,s,t.Pw)],t.E)}, +$S:21} +A.aqA.prototype={ +$1(a){return a}, +$S:455} +A.aqz.prototype={ +$1(a){var s,r,q,p=this.b,o=p[0],n=p[1],m=p[2] +p=p[3] +s=this.a.f +r=s.i(0,a) +p=r==null?null:r.arQ(new A.w(o,n,o+m,n+p)) +if(p!==!0)return!1 +p=s.i(0,a) +q=p==null?null:p.gqn(p) +if(q==null)q=B.F +if(!q.j(0,B.F)){p=q.a +p=isNaN(p)||isNaN(q.b)||isNaN(q.c)||isNaN(q.d)||p>=1/0||q.b>=1/0||q.c>=1/0||q.d>=1/0}else p=!0 +return!p}, +$S:36} +A.aqB.prototype={ +$1(a){var s,r,q=this.a.f.i(0,a),p=q.gqn(q) +q=[a] +s=p.a +r=p.b +B.b.E(q,[s,r,p.c-s,p.d-r]) +return q}, +$S:456} +A.aqD.prototype={ +$0(){var s=this.a +s.w=!1 +if(s.d==null)s.adO()}, +$S:0} +A.Gb.prototype={} +A.a_I.prototype={ +a16(a){var s,r=$.cI().c +r===$&&A.b() +s=A.S(a).h("R<1,v>") +r.dl("TextInput.setSelectionRects",A.V(new A.R(a,new A.ayG(),s),!0,s.h("af.E")),t.H)}} +A.ayG.prototype={ +$1(a){var s=a.b,r=s.a,q=s.b +return A.a([r,q,s.c-r,s.d-q,a.a,a.c.a],t.a0)}, +$S:457} +A.a4K.prototype={} +A.UZ.prototype={ +I(){return"UndoDirection."+this.b}} +A.V0.prototype={ +gajF(){var s=this.a +s===$&&A.b() +return s}, +Fn(a){return this.adI(a)}, +adI(a){var s=0,r=A.a1(t.z),q,p=this,o,n +var $async$Fn=A.a2(function(b,c){if(b===1)return A.Z(c,r) +while(true)switch(s){case 0:n=t.j.a(a.b) +if(a.a==="UndoManagerClient.handleUndo"){o=p.b +o.toString +o.aqs(p.ajn(A.bQ(J.bq(n,0)))) +s=1 +break}throw A.c(A.aGo(null)) +case 1:return A.a_(q,r)}}) +return A.a0($async$Fn,r)}, +ajn(a){switch(a){case"undo":return B.a4W +case"redo":return B.a4X}throw A.c(A.wb(A.a([A.oB("Unknown undo direction: "+a)],t.E)))}} +A.arE.prototype={} +A.aCN.prototype={ +$1(a){this.a.scJ(a) +return!1}, +$S:20} +A.b6.prototype={} +A.bk.prototype={ +fn(a){this.b=a}, +lE(a,b){return this.gjU()}, +u_(a,b){var s=this +if(A.o(s).h("dz").b(s))return s.lF(0,a,b) +return s.lE(0,a)}, +gjU(){return!0}, +qz(a){return!0}, +Kz(a,b){return this.qz(a)?B.ex:B.hl}, +tZ(a,b){var s=this +if(A.o(s).h("dz").b(s))return s.ec(a,b) +return s.eb(a)}, +H3(a){var s=this.a +s.b=!0 +s.a.push(a) +return null}, +Cc(a){return this.a.C(0,a)}, +dL(a){return new A.II(this,a,!1,!1,!1,!1,new A.b5(A.a([],t.g),t.c),A.o(this).h("II"))}} +A.dz.prototype={ +lF(a,b,c){return this.a1U(0,b)}, +lE(a,b){return this.lF(a,b,null)}, +dL(a){return new A.IJ(this,a,!1,!1,!1,!1,new A.b5(A.a([],t.g),t.c),A.o(this).h("IJ"))}} +A.cT.prototype={ +eb(a){return this.c.$1(a)}} +A.a6d.prototype={ +XB(a,b,c){return a.tZ(b,c)}, +arJ(a,b,c){if(a.u_(b,c))return new A.dj(!0,a.tZ(b,c)) +return B.Wg}} +A.mq.prototype={ +ac(){return new A.GN(A.aS(t.od),new A.I(),B.j)}} +A.a6f.prototype={ +$1(a){t.L1.a(a.gao()) +return!1}, +$S:59} +A.a6i.prototype={ +$1(a){var s=this,r=A.a6e(t.L1.a(a.gao()),s.b,s.d) +if(r!=null){s.c.tq(a,null) +s.a.a=r +return!0}return!1}, +$S:59} +A.a6g.prototype={ +$1(a){var s=A.a6e(t.L1.a(a.gao()),this.b,this.c) +if(s!=null){this.a.a=s +return!0}return!1}, +$S:59} +A.a6h.prototype={ +$1(a){var s=this,r=s.b,q=A.a6e(t.L1.a(a.gao()),r,s.d),p=q!=null +if(p&&q.u_(r,s.c))s.a.a=A.aF5(a).XB(q,r,s.c) +return p}, +$S:59} +A.a6j.prototype={ +$1(a){var s=this,r=s.b,q=A.a6e(t.L1.a(a.gao()),r,s.d),p=q!=null +if(p&&q.u_(r,s.c))s.a.a=A.aF5(a).XB(q,r,s.c) +return p}, +$S:59} +A.GN.prototype={ +aB(){this.aR() +this.T8()}, +ab_(a){this.a3(new A.asB(this))}, +T8(){var s,r,q,p,o=this,n=o.a.d +n=n.gaT(n) +s=A.hp(n,A.o(n).h("n.E")) +r=o.d.ob(s) +n=o.d +n.toString +q=s.ob(n) +for(n=r.gab(r),p=o.gPp();n.q();)n.gJ(n).Cc(p) +for(n=q.gab(q);n.q();)n.gJ(n).H3(p) +o.d=s}, +aO(a){this.bb(a) +this.T8()}, +m(){var s,r,q,p,o=this +o.aN() +for(s=o.d,s=A.cX(s,s.r,A.o(s).c),r=o.gPp(),q=s.$ti.c;s.q();){p=s.d;(p==null?q.a(p):p).Cc(r)}o.d=null}, +H(a){var s=this.a +return new A.GM(null,s.d,this.e,s.e,null)}} +A.asB.prototype={ +$0(){this.a.e=new A.I()}, +$S:0} +A.GM.prototype={ +cs(a){var s +if(this.w===a.w)s=!A.aEi(a.r,this.r) +else s=!0 +return s}} +A.rz.prototype={ +ac(){return new A.HU(new A.bp(null,t.B),B.j)}} +A.HU.prototype={ +aB(){this.aR() +$.c_.rx$.push(new A.avy(this)) +$.aa.F$.f.a.d.D(0,this.gPy())}, +m(){$.aa.F$.f.a.d.C(0,this.gPy()) +this.aN()}, +Tq(a){this.yD(new A.avw(this))}, +abU(a){if(this.c==null)return +this.Tq(a)}, +a6D(a){if(!this.e)this.yD(new A.avr(this))}, +a6F(a){if(this.e)this.yD(new A.avs(this))}, +abQ(a){var s,r=this +if(r.f!==a){r.yD(new A.avq(r,a)) +s=r.a.Q +if(s!=null)s.$1(r.f)}}, +Qs(a,b){var s,r,q,p,o,n,m=this,l=new A.avv(m),k=new A.avu(m,new A.avt(m)) +if(a==null){s=m.a +s.toString +r=s}else r=a +q=l.$1(r) +p=k.$1(r) +if(b!=null)b.$0() +s=m.a +s.toString +o=l.$1(s) +s=m.a +s.toString +n=k.$1(s) +if(p!==n)m.a.y.$1(n) +if(q!==o){l=m.a.z +if(l!=null)l.$1(o)}}, +yD(a){return this.Qs(null,a)}, +aeJ(a){return this.Qs(a,null)}, +aO(a){this.bb(a) +if(this.a.c!==a.c)$.c_.rx$.push(new A.avx(this,a))}, +ga6B(){var s,r=this.c +r.toString +r=A.d_(r,B.fF) +s=r==null?null:r.ch +switch((s==null?B.f2:s).a){case 0:return this.a.c +case 1:return!0}}, +H(a){var s,r,q,p=this,o=null,n=p.a,m=n.as +n=n.d +s=p.ga6B() +r=p.a +q=A.tr(A.we(!1,s,r.ax,o,!0,!0,n,!0,o,p.gabP(),o,o,o,o),m,p.r,p.ga6C(),p.ga6E(),o) +n=r.c +if(n)m=r.w.a!==0 +else m=!1 +if(m)q=A.vg(r.w,q) +if(n){n=r.x +n=n!=null&&n.gc8(n)}else n=!1 +if(n){n=p.a.x +n.toString +q=A.aos(q,o,n)}return q}} +A.avy.prototype={ +$1(a){var s=$.aa.F$.f.a.b +if(s==null)s=A.z2() +this.a.Tq(s)}, +$S:3} +A.avw.prototype={ +$0(){var s=$.aa.F$.f.a.b +switch((s==null?A.z2():s).a){case 0:this.a.d=!1 +break +case 1:this.a.d=!0 +break}}, +$S:0} +A.avr.prototype={ +$0(){this.a.e=!0}, +$S:0} +A.avs.prototype={ +$0(){this.a.e=!1}, +$S:0} +A.avq.prototype={ +$0(){this.a.f=this.b}, +$S:0} +A.avv.prototype={ +$1(a){var s=this.a +return s.e&&a.c&&s.d}, +$S:108} +A.avt.prototype={ +$1(a){var s,r=this.a.c +r.toString +r=A.d_(r,B.fF) +s=r==null?null:r.ch +switch((s==null?B.f2:s).a){case 0:return a.c +case 1:return!0}}, +$S:108} +A.avu.prototype={ +$1(a){var s=this.a +return s.f&&s.d&&this.b.$1(a)}, +$S:108} +A.avx.prototype={ +$1(a){this.a.aeJ(this.b)}, +$S:3} +A.Vm.prototype={ +eb(a){a.awq() +return null}} +A.Bv.prototype={ +qz(a){return this.c}, +eb(a){}} +A.vh.prototype={} +A.vs.prototype={} +A.hQ.prototype={} +A.NU.prototype={} +A.nl.prototype={} +A.RR.prototype={ +lF(a,b,c){var s,r,q,p,o,n=$.aa.F$.f.c +if(n==null||n.e==null)return!1 +for(s=t.vz,r=0;r<2;++r){q=B.Qa[r] +p=n.e +p.toString +o=A.aF7(p,q,s) +if(o!=null&&o.u_(q,c)){this.e=o +this.f=q +return!0}}return!1}, +lE(a,b){return this.lF(a,b,null)}, +ec(a,b){var s,r=this.e +r===$&&A.b() +s=this.f +s===$&&A.b() +r.tZ(s,b)}, +eb(a){return this.ec(a,null)}} +A.zj.prototype={ +Q4(a,b,c){var s +a.fn(this.gmK()) +s=a.tZ(b,c) +a.fn(null) +return s}, +ec(a,b){var s=this,r=A.aF6(s.gw6(),A.o(s).c) +return r==null?s.XD(a,s.b,b):s.Q4(r,a,b)}, +eb(a){return this.ec(a,null)}, +gjU(){var s,r,q=this,p=A.aF7(q.gw6(),null,A.o(q).c) +if(p!=null){p.fn(q.gmK()) +s=p.gjU() +p.fn(null) +r=s}else r=q.gmK().gjU() +return r}, +lF(a,b,c){var s,r=this,q=A.aF6(r.gw6(),A.o(r).c),p=q==null +if(!p)q.fn(r.gmK()) +s=(p?r.gmK():q).u_(b,c) +if(!p)q.fn(null) +return s}, +lE(a,b){return this.lF(a,b,null)}, +qz(a){var s,r=this,q=A.aF6(r.gw6(),A.o(r).c),p=q==null +if(!p)q.fn(r.gmK()) +s=(p?r.gmK():q).qz(a) +if(!p)q.fn(null) +return s}} +A.II.prototype={ +XD(a,b,c){var s=this.e +if(b==null)return s.eb(a) +else return s.eb(a)}, +gmK(){return this.e}, +gw6(){return this.f}} +A.IJ.prototype={ +Q4(a,b,c){var s +c.toString +a.fn(new A.Hk(c,this.e,new A.b5(A.a([],t.g),t.c),this.$ti.h("Hk<1>"))) +s=a.tZ(b,c) +a.fn(null) +return s}, +XD(a,b,c){var s=this.e +if(b==null)return s.ec(a,c) +else return s.ec(a,c)}, +gmK(){return this.e}, +gw6(){return this.f}} +A.Hk.prototype={ +fn(a){this.d.fn(a)}, +lE(a,b){return this.d.lF(0,b,this.c)}, +gjU(){return this.d.gjU()}, +qz(a){return this.d.qz(a)}, +H3(a){var s +this.a1T(a) +s=this.d.a +s.b=!0 +s.a.push(a)}, +Cc(a){this.a1V(a) +this.d.a.C(0,a)}, +eb(a){return this.d.ec(a,this.c)}} +A.VF.prototype={} +A.VD.prototype={} +A.Z9.prototype={} +A.KO.prototype={ +fn(a){this.LT(a) +this.e.fn(a)}} +A.KP.prototype={ +fn(a){this.LT(a) +this.e.fn(a)}} +A.Aa.prototype={ +ac(){return new A.VO(null,null,B.j)}} +A.VO.prototype={ +H(a){var s=this.a +return new A.VN(B.ah,s.e,s.f,null,this,B.a9,s.c,null)}} +A.VN.prototype={ +az(a){var s=this +return A.aZP(s.e,s.y,s.f,s.r,s.w,A.e0(a),s.x)}, +aF(a,b){var s,r=this +b.sfo(r.e) +b.sAt(0,r.r) +b.sav8(r.w) +b.sanH(0,r.f) +b.saw2(r.x) +b.sbS(A.e0(a)) +s=r.y +if(s!==b.on){b.on=s +b.ag() +b.aY()}}} +A.a4q.prototype={ +m(){var s=this,r=s.c0$ +if(r!=null)r.K(0,s.gjy()) +s.c0$=null +s.aN()}, +bY(){this.dq() +this.cW() +this.jz()}} +A.Ah.prototype={ +az(a){var s=new A.Ep(this.e,!0,null,A.ag(t.T),this.$ti.h("Ep<1>")) +s.aw() +s.saP(null) +return s}, +aF(a,b){b.sl(0,this.e) +b.sa1v(!0)}} +A.yD.prototype={ +ac(){return new A.Kq(B.j)}} +A.Kq.prototype={ +gadW(){$.aa.toString +var s=$.b8() +if(s.gAk()!=="/"){$.aa.toString +s=s.gAk()}else{this.a.toString +$.aa.toString +s=s.gAk()}return s}, +a96(a){switch(this.d){case null:case void 0:case B.e5:case B.j4:return!0 +case B.fI:case B.j5:case B.fJ:A.aH6(a.a) +return!0}}, +Am(a){this.d=a +this.a4i(a)}, +aB(){var s=this +s.aR() +s.ak4() +$.aa.toString +s.w=s.Rx($.b8().a.f,s.a.go) +$.aa.X$.push(s) +s.d=$.aa.k4$}, +aO(a){this.bb(a) +this.Tz(a)}, +m(){B.b.C($.aa.X$,this) +var s=this.e +if(s!=null)s.m() +this.aN()}, +NE(){var s=this.e +if(s!=null)s.m() +this.f=this.e=null}, +Tz(a){var s,r=this +r.a.toString +if(r.gTM()){r.NE() +if(r.r!=null){r.a.toString +a.toString +s=!1}else s=!0 +if(s){s=r.a.c +r.r=new A.rF(r,t.TX)}}else{r.NE() +r.r=null}}, +ak4(){return this.Tz(null)}, +gTM(){this.a.toString +var s=!1 +return s}, +afo(a){var s,r=a.a +if(r==="/")this.a.toString +s=this.a.as.i(0,r) +return this.a.f.$1$2(a,s,t.z)}, +afK(a){return this.a.at.$1(a)}, +vc(){var s=0,r=A.a1(t.y),q,p=this,o,n +var $async$vc=A.a2(function(a,b){if(a===1)return A.Z(b,r) +while(true)switch(s){case 0:p.a.toString +o=p.r +n=o==null?null:o.ga5() +if(n==null){q=!1 +s=1 +break}q=n.JA() +s=1 +break +case 1:return A.a_(q,r)}}) +return A.a0($async$vc,r)}, +qL(a){return this.ao_(a)}, +ao_(a){var s=0,r=A.a1(t.y),q,p=this,o,n,m,l +var $async$qL=A.a2(function(b,c){if(b===1)return A.Z(c,r) +while(true)switch(s){case 0:p.a.toString +o=p.r +n=o==null?null:o.ga5() +if(n==null){q=!1 +s=1 +break}m=a.gjl() +o=m.gcU(m).length===0?"/":m.gcU(m) +l=m.glU() +l=l.ga7(l)?null:m.glU() +o=A.zE(m.gj6().length===0?null:m.gj6(),o,l).gq3() +o=n.Gk(A.j6(o,0,o.length,B.a2,!1),null,t.X) +o.toString +o=A.aOx(o,B.mv,!1,null) +l=n.e +l.a.push(o) +l.a6() +n.yf() +n.Nl() +q=!0 +s=1 +break +case 1:return A.a_(q,r)}}) +return A.a0($async$qL,r)}, +Rx(a,b){this.a.toString +return A.b53(a,b)}, +W1(a){var s=this,r=s.Rx(a,s.a.go) +if(!r.j(0,s.w))s.a3(new A.aC4(s,r))}, +H(a){var s,r,q,p,o,n,m,l,k,j,i=this,h=null,g={} +g.a=null +i.a.toString +if(i.gTM()){s=i.r +r=i.gadW() +q=i.a +q=q.ch +q.toString +g.a=A.aFT(!0,A.aM4(B.o,r,s,q,A.aR6(),i.gafn(),h,i.gafJ(),B.Qx,!0,!0,"nav"),"Navigator Scope",h,h)}else{s=i.a.z +if(s!=null){r=s.d +r===$&&A.b() +q=s.e +q===$&&A.b() +p=s.c +p===$&&A.b() +g.a=new A.xE(r,q,p,s.b,"router",h,t.SB)}}g.b=null +s=i.a +s.toString +o=new A.f2(new A.aC3(g,i),h) +g.b=o +g.b=A.hh(o,h,B.aK,!0,s.db,h,h,B.a_) +s=i.a +r=s.cx +s=s.dx +s=A.C(255,s.gl(s)>>>16&255,s.gl(s)>>>8&255,s.gl(s)&255) +g=g.b +q=i.a +q.toString +p=i.w +p.toString +n=A.b0S() +m=A.p6($.aSM(),t.u,t.od) +m.n(0,B.m8,new A.F2(new A.b5(A.a([],t.g),t.c)).dL(a)) +l=A.aGM() +k=t.a9 +j=A.a([],k) +B.b.E(j,i.a.fr) +j.push(B.Ey) +k=A.a(j.slice(0),k) +return new A.EU(new A.Fr(new A.e1(i.ga95(),A.aos(new A.NI(A.vg(m,A.aL0(new A.Ur(new A.Fs(new A.D3(p,k,new A.UM(r,s,g,h),h),h),h),l)),h),"",n),h,t.w3),h),q.p4,h)}} +A.aC4.prototype={ +$0(){this.a.w=this.b}, +$S:0} +A.aC3.prototype={ +$1(a){return this.b.a.CW.$2(a,this.a.a)}, +$S:11} +A.a5s.prototype={} +A.Bb.prototype={ +I(){return"ConnectionState."+this.b}} +A.jf.prototype={ +k(a){var s=this +return"AsyncSnapshot("+s.a.k(0)+", "+A.h(s.b)+", "+A.h(s.c)+", "+A.h(s.d)+")"}, +j(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +return s.$ti.b(b)&&b.a===s.a&&J.d(b.b,s.b)&&J.d(b.c,s.c)&&b.d==s.d}, +gt(a){return A.N(this.a,this.b,this.c,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}} +A.wj.prototype={ +ac(){return new A.HW(B.j,this.$ti.h("HW<1>"))}} +A.HW.prototype={ +aB(){var s=this +s.aR() +s.a.toString +s.e=new A.jf(B.nX,null,null,null,s.$ti.h("jf<1>")) +s.N6()}, +aO(a){var s,r=this +r.bb(a) +if(a.c===r.a.c)return +if(r.d!=null){r.d=null +s=r.e +s===$&&A.b() +r.e=new A.jf(B.nX,s.b,s.c,s.d,s.$ti)}r.N6()}, +H(a){var s,r=this.a +r.toString +s=this.e +s===$&&A.b() +return r.d.$2(a,s)}, +m(){this.d=null +this.aN()}, +N6(){var s,r=this,q=r.a +q.toString +s=r.d=new A.I() +q.c.fV(new A.avE(r,s),new A.avF(r,s),t.H) +q=r.e +q===$&&A.b() +if(q.a!==B.h1)r.e=new A.jf(B.Ko,q.b,q.c,q.d,q.$ti)}} +A.avE.prototype={ +$1(a){var s=this.a +if(s.d===this.b)s.a3(new A.avD(s,a))}, +$S(){return this.a.$ti.h("b7(1)")}} +A.avD.prototype={ +$0(){var s=this.a +s.e=new A.jf(B.h1,this.b,null,null,s.$ti.h("jf<1>"))}, +$S:0} +A.avF.prototype={ +$2(a,b){var s=this.a +if(s.d===this.b)s.a3(new A.avC(s,a,b))}, +$S:44} +A.avC.prototype={ +$0(){var s=this.a +s.e=new A.jf(B.h1,null,this.b,this.c,s.$ti.h("jf<1>"))}, +$S:0} +A.Aq.prototype={ +ac(){return new A.GT(B.j)}} +A.GT.prototype={ +aB(){this.aR() +this.N9()}, +aO(a){this.bb(a) +this.N9()}, +N9(){this.e=new A.e1(this.ga6J(),this.a.c,null,t.Jc)}, +m(){var s,r,q=this.d +if(q!=null)for(q=A.lw(q,q.r,A.o(q).c);q.q();){s=q.d +r=this.d.i(0,s) +r.toString +s.K(0,r)}this.aN()}, +a6K(a){var s,r=this,q=a.a,p=r.d +if(p==null)p=r.d=A.A(t.I_,t.M) +p.n(0,q,r.a8N(q)) +p=r.d.i(0,q) +p.toString +q.Z(0,p) +if(!r.f){r.f=!0 +s=r.OW() +if(s!=null)r.Tu(s) +else $.c_.rx$.push(new A.at7(r))}return!1}, +OW(){var s={},r=this.c +r.toString +s.a=null +r.b1(new A.atc(s)) +return t.xO.a(s.a)}, +Tu(a){var s,r +this.c.toString +s=this.f +r=this.e +r===$&&A.b() +a.N4(t.Fw.a(A.aY_(r,s)))}, +a8N(a){var s=A.bc("callback"),r=new A.atb(this,a,s) +s.scJ(r) +return r}, +H(a){var s=this.f,r=this.e +r===$&&A.b() +return new A.CO(s,r,null)}} +A.at7.prototype={ +$1(a){var s,r=this.a +if(r.c==null)return +s=r.OW() +s.toString +r.Tu(s)}, +$S:3} +A.atc.prototype={ +$1(a){this.a.a=a}, +$S:16} +A.atb.prototype={ +$0(){var s=this.a,r=this.b +s.d.C(0,r) +r.K(0,this.c.aI()) +if(s.d.a===0)if($.c_.x1$.a<3)s.a3(new A.at9(s)) +else{s.f=!1 +A.fq(new A.ata(s))}}, +$S:0} +A.at9.prototype={ +$0(){this.a.f=!1}, +$S:0} +A.ata.prototype={ +$0(){var s=this.a +if(s.c!=null&&s.d.a===0)s.a3(new A.at8(s))}, +$S:0} +A.at8.prototype={ +$0(){}, +$S:0} +A.wD.prototype={} +A.PG.prototype={} +A.qB.prototype={ +tS(){var s=new A.PG($.aO()) +this.ii$=s +this.c.er(new A.wD(s))}, +pe(){var s,r=this +if(r.gwW()){if(r.ii$==null)r.tS()}else{s=r.ii$ +if(s!=null){s.a6() +s.eJ() +r.ii$=null}}}, +H(a){if(this.gwW()&&this.ii$==null)this.tS() +return B.a6M}} +A.a_j.prototype={ +H(a){throw A.c(A.wc("Widgets that mix AutomaticKeepAliveClientMixin into their State must call super.build() but must ignore the return value of the superclass."))}} +A.a3M.prototype={ +Lx(a,b){}, +nh(a){A.aOJ(this,new A.aBI(this,a))}} +A.aBI.prototype={ +$1(a){var s=a.y +if(s!=null&&s.p(0,this.a))a.bx()}, +$S:16} +A.aBH.prototype={ +$1(a){A.aOJ(a,this.a)}, +$S:16} +A.a3N.prototype={ +bI(a){return new A.a3M(A.jk(null,null,null,t.h,t.X),this,B.a0)}} +A.ji.prototype={ +cs(a){return this.w!==a.w}} +A.QR.prototype={ +az(a){var s=this.e +s=new A.Sm(B.c.an(A.O(s,0,1)*255),s,!1,null,A.ag(t.T)) +s.aw() +s.saP(null) +return s}, +aF(a,b){b.sdH(0,this.e) +b.szN(!1)}} +A.M2.prototype={ +az(a){var s=new A.S7(this.e,B.bN,null,A.ag(t.T)) +s.aw() +s.saP(null) +return s}, +aF(a,b){b.sAL(0,this.e) +b.slo(B.bN)}} +A.Bo.prototype={ +az(a){var s=new A.Et(this.e,this.f,this.r,!1,!1,null,A.ag(t.T)) +s.aw() +s.saP(null) +return s}, +aF(a,b){b.soW(this.e) +b.sWT(this.f) +b.sauw(this.r) +b.cR=b.bg=!1}, +vf(a){a.soW(null) +a.sWT(null)}} +A.vF.prototype={ +az(a){var s=new A.Sb(null,this.f,null,A.ag(t.T)) +s.aw() +s.saP(null) +return s}, +aF(a,b){b.suQ(null) +b.sqv(this.f)}, +vf(a){a.suQ(null)}} +A.vD.prototype={ +az(a){var s=new A.Sa(this.e,this.f,null,A.ag(t.T)) +s.aw() +s.saP(null) +return s}, +aF(a,b){b.suQ(this.e) +b.sqv(this.f)}, +vf(a){a.suQ(null)}} +A.a9m.prototype={ +$1(a){return A.a9k(this.c,this.b,new A.pG(this.a,A.e0(a)))}, +$S:467} +A.Rr.prototype={ +az(a){var s=this,r=new A.Sn(s.e,s.r,s.w,s.y,s.x,null,s.f,null,A.ag(t.T)) +r.aw() +r.saP(null) +return r}, +aF(a,b){var s=this +b.sbV(0,s.e) +b.sqv(s.f) +b.salO(0,s.r) +b.sfq(0,s.w) +b.sM(0,s.x) +b.scF(0,s.y)}} +A.Rs.prototype={ +az(a){var s=this,r=new A.So(s.r,s.x,s.w,s.e,s.f,null,A.ag(t.T)) +r.aw() +r.saP(null) +return r}, +aF(a,b){var s=this +b.suQ(s.e) +b.sqv(s.f) +b.sfq(0,s.r) +b.sM(0,s.w) +b.scF(0,s.x)}} +A.yr.prototype={ +az(a){var s=this,r=A.e0(a),q=new A.SA(s.w,null,A.ag(t.T)) +q.aw() +q.saP(null) +q.sc9(0,s.e) +q.sfo(s.r) +q.sbS(r) +q.sn3(s.x) +q.swk(0,s.f) +return q}, +aF(a,b){var s=this +b.sc9(0,s.e) +b.swk(0,s.f) +b.sfo(s.r) +b.sbS(A.e0(a)) +b.bg=s.w +b.sn3(s.x)}} +A.r3.prototype={ +az(a){var s=new A.Si(this.e,null,A.ag(t.T)) +s.aw() +s.saP(null) +return s}, +aF(a,b){b.soL(this.e)}} +A.vJ.prototype={ +az(a){var s=new A.Se(this.e,this.f,this.x,B.dt,B.dt,null,A.ag(t.T)) +s.aw() +s.saP(null) +return s}, +aF(a,b){b.soL(this.e) +b.sa1p(this.f) +b.scz(0,this.x) +b.sasc(B.dt) +b.sapT(B.dt)}} +A.Oz.prototype={ +az(a){var s=new A.Ew(this.e,this.f,A.e0(a),this.r,null,A.ag(t.T)) +s.aw() +s.saP(null) +return s}, +aF(a,b){var s +b.sIL(this.e) +b.sfo(this.f) +b.sbS(A.e0(a)) +s=this.r +if(s!==b.f7){b.f7=s +b.ag() +b.aY()}}} +A.OZ.prototype={ +az(a){var s=new A.Sf(this.e,this.f,null,A.ag(t.T)) +s.aw() +s.saP(null) +return s}, +aF(a,b){b.savM(this.e) +b.a1=this.f}} +A.EW.prototype={ +az(a){var s=new A.EF(this.e,A.ag(t.bq),null,A.ag(t.T)) +s.aw() +s.saP(null) +return s}, +aF(a,b){b.sauG(this.e)}} +A.bH.prototype={ +az(a){var s=new A.EC(this.e,A.e0(a),null,A.ag(t.T)) +s.aw() +s.saP(null) +return s}, +aF(a,b){b.sdn(0,this.e) +b.sbS(A.e0(a))}} +A.h8.prototype={ +az(a){var s=new A.Ss(this.f,this.r,this.e,A.e0(a),null,A.ag(t.T)) +s.aw() +s.saP(null) +return s}, +aF(a,b){b.sfo(this.e) +b.saw5(this.f) +b.sar2(this.r) +b.sbS(A.e0(a))}} +A.qZ.prototype={} +A.mF.prototype={ +az(a){var s=new A.Eu(this.e,null,A.ag(t.T)) +s.aw() +s.saP(null) +return s}, +aF(a,b){b.sI3(this.e)}} +A.CT.prototype={ +qg(a){var s,r,q=a.b +q.toString +t.Wz.a(q) +s=this.f +if(q.e!==s){q.e=s +r=a.gaU(a) +if(r instanceof A.r)r.a8()}}} +A.Bn.prototype={ +az(a){var s=new A.Es(this.e,0,null,null,A.ag(t.T)) +s.aw() +s.E(0,null) +return s}, +aF(a,b){b.sI3(this.e)}} +A.di.prototype={ +az(a){return A.aMH(A.mw(this.f,this.e))}, +aF(a,b){b.sUh(A.mw(this.f,this.e))}, +dd(){var s,r=this,q=r.e +if(q===1/0&&r.f===1/0)s="SizedBox.expand" +else s=q===0&&r.f===0?"SizedBox.shrink":"SizedBox" +q=r.a +return q==null?s:s+"-"+q.k(0)}} +A.hN.prototype={ +az(a){return A.aMH(this.e)}, +aF(a,b){b.sUh(this.e)}} +A.PV.prototype={ +az(a){var s=new A.Sj(this.e,this.f,null,A.ag(t.T)) +s.aw() +s.saP(null) +return s}, +aF(a,b){b.sasO(0,this.e) +b.sasM(0,this.f)}} +A.DE.prototype={ +az(a){var s=new A.EB(this.e,null,A.ag(t.T)) +s.aw() +s.saP(null) +return s}, +aF(a,b){b.sBz(this.e)}, +bI(a){return new A.a_p(this,B.a0)}} +A.a_p.prototype={} +A.cA.prototype={ +az(a){var s=new A.Eq(this.e,null,A.ag(t.T)) +s.aw() +s.saP(null) +return s}, +aF(a,b){b.saln(0,this.e)}} +A.TR.prototype={ +az(a){var s=a.ap(t.I) +s.toString +s=new A.Sz(this.e,s.w,null,A.ag(t.T)) +s.aw() +s.saP(null) +return s}, +aF(a,b){var s +b.sdn(0,this.e) +s=a.ap(t.I) +s.toString +b.sbS(s.w)}} +A.y0.prototype={ +az(a){var s=A.e0(a) +s=new A.EI(this.e,s,this.r,this.w,A.ag(t.O5),0,null,null,A.ag(t.T)) +s.aw() +s.E(0,null) +return s}, +aF(a,b){var s +b.sfo(this.e) +s=A.e0(a) +b.sbS(s) +s=this.r +if(b.aq!==s){b.aq=s +b.a8()}s=this.w +if(s!==b.aH){b.aH=s +b.ag() +b.aY()}}} +A.pq.prototype={ +qg(a){var s,r,q,p=this,o=a.b +o.toString +t.Qv.a(o) +s=p.f +if(o.w!=s){o.w=s +r=!0}else r=!1 +s=p.r +if(o.e!=s){o.e=s +r=!0}s=p.w +if(o.f!=s){o.f=s +r=!0}s=p.x +if(o.r!=s){o.r=s +r=!0}s=p.y +if(o.x!=s){o.x=s +r=!0}s=p.z +if(o.y!=s){o.y=s +r=!0}if(r){q=a.gaU(a) +if(q instanceof A.r)q.a8()}}} +A.RK.prototype={ +H(a){var s=this,r=a.ap(t.I) +r.toString +return A.aZj(s.f,s.x,null,null,s.c,r.w,s.d,s.r)}} +A.C5.prototype={ +gaf6(){switch(this.e.a){case 0:return!0 +case 1:var s=this.w +return s===B.cT||s===B.Kv}}, +L0(a){var s=this.x +s=this.gaf6()?A.e0(a):null +return s}, +az(a){var s=this,r=null,q=new A.Ex(s.e,s.f,s.r,s.w,s.L0(a),s.y,s.z,B.o,A.ag(t.O5),A.bf(4,A.nB(r,r,r,r,r,B.az,B.q,r,B.ab,B.a_),!1,t.mi),!0,0,r,r,A.ag(t.T)) +q.aw() +q.E(0,r) +return q}, +aF(a,b){var s=this,r=s.e +if(b.B!==r){b.B=r +b.a8()}b.sasB(s.f) +r=s.r +if(b.a9!==r){b.a9=r +b.a8()}b.sHV(s.w) +r=s.L0(a) +if(b.aq!=r){b.aq=r +b.a8()}r=s.y +if(b.aH!==r){b.aH=r +b.a8()}if(B.o!==b.bj){b.bj=B.o +b.ag() +b.aY()}}} +A.xG.prototype={} +A.B9.prototype={} +A.C6.prototype={ +qg(a){var s,r,q,p=a.b +p.toString +t.US.a(p) +s=this.f +if(p.e!==s){p.e=s +r=!0}else r=!1 +s=this.r +if(p.f!==s){p.f=s +r=!0}if(r){q=a.gaU(a) +if(q instanceof A.r)q.a8()}}} +A.Or.prototype={} +A.Vp.prototype={ +az(a){var s=A.e0(a) +s=new A.EL(B.aI,B.iH,this.r,B.iH,0,B.Bp,s,B.cL,B.o,A.ag(t.O5),0,null,null,A.ag(t.T)) +s.aw() +s.E(0,null) +return s}, +aF(a,b){var s +b.soc(0,B.aI) +b.sfo(B.iH) +b.sa1F(0,this.r) +b.savk(B.iH) +b.savl(0) +b.sHV(B.Bp) +s=A.e0(a) +if(b.aD!=s){b.aD=s +b.a8()}if(b.aE!==B.cL){b.aE=B.cL +b.a8()}if(B.o!==b.bj){b.bj=B.o +b.ag() +b.aY()}}} +A.SO.prototype={ +az(a){var s,r,q,p,o=this,n=null,m=o.r +if(m==null){m=a.ap(t.I) +m.toString +m=m.w}s=o.x +r=o.y +q=A.wL(a) +if(r.j(0,B.ab))r=new A.fl(1) +p=s===B.cj?"\u2026":n +s=new A.ED(A.nB(p,q,o.z,o.as,o.e,o.f,m,o.ax,r,o.at),o.w,s,o.ch,!1,0,n,n,A.ag(t.T)) +s.aw() +s.E(0,n) +s.sp6(o.ay) +return s}, +aF(a,b){var s,r=this +b.scV(0,r.e) +b.spb(0,r.f) +s=r.r +if(s==null){s=a.ap(t.I) +s.toString +s=s.w}b.sbS(s) +b.sa1y(r.w) +b.sau3(0,r.x) +b.sbK(r.y) +b.sru(r.z) +b.slb(r.as) +b.srL(r.at) +b.sCm(r.ax) +s=A.wL(a) +b.srt(0,s) +b.sp6(r.ay) +b.sa0J(r.ch)}} +A.ami.prototype={ +$0(){return this.a.a}, +$S:468} +A.amj.prototype={ +$0(){return this.a.b}, +$S:72} +A.S0.prototype={ +az(a){var s=this,r=s.d +r=r==null?null:r.ep(0) +r=new A.Ez(r,s.e,s.f,s.r,s.w,s.x,s.y,s.z,s.Q,s.as,s.at,s.ax,s.ay,s.CW,!1,null,!1,A.ag(t.T)) +r.aw() +r.ajO() +return r}, +aF(a,b){var s=this,r=s.d +b.sj9(0,r==null?null:r.ep(0)) +b.X=s.e +b.sbB(0,s.f) +b.sbh(0,s.r) +b.st3(0,s.w) +b.sM(0,s.x) +b.sdH(0,s.y) +b.samw(s.Q) +b.sIL(s.as) +b.sfo(s.at) +b.sauX(0,s.ax) +b.sama(s.ay) +b.sasK(!1) +b.sbS(null) +b.sB8(s.CW) +b.svU(!1) +b.sn3(s.z)}, +vf(a){a.sj9(0,null)}} +A.Q1.prototype={ +az(a){var s=this,r=null,q=new A.Sr(s.e,r,s.r,r,s.x,s.y,r,r,s.as,s.at,r,A.ag(t.T)) +q.aw() +q.saP(r) +return q}, +aF(a,b){var s=this +b.d6=s.e +b.eN=null +b.cn=s.r +b.d7=null +b.cu=s.x +b.cH=s.y +b.jL=b.dN=null +b.on=s.as +b.A=s.at}} +A.Di.prototype={ +az(a){var s=this +return A.aZR(s.w,null,s.e,s.r,s.f,!0)}, +aF(a,b){var s,r=this +b.eN=r.e +b.cn=r.f +b.d7=r.r +s=r.w +if(!b.cu.j(0,s)){b.cu=s +b.ag()}if(b.A!==B.b_){b.A=B.b_ +b.ag()}}} +A.iZ.prototype={ +az(a){var s=new A.Sv(null,A.ag(t.T)) +s.aw() +s.saP(null) +return s}} +A.wr.prototype={ +az(a){var s=new A.Ey(this.e,null,null,A.ag(t.T)) +s.aw() +s.saP(null) +return s}, +aF(a,b){b.sXk(this.e) +b.sJ4(null)}} +A.Lz.prototype={ +az(a){var s=new A.Em(!1,null,null,A.ag(t.T)) +s.aw() +s.saP(null) +return s}, +aF(a,b){b.sTZ(!1) +b.sJ4(null)}} +A.Tr.prototype={ +az(a){var s=this,r=new A.EG(s.e,s.f,s.r,s.w,!1,s.Pj(a),null,A.ag(t.T)) +r.aw() +r.saP(null) +r.Ta(r.A) +return r}, +Pj(a){var s,r=this.e,q=r.R8 +if(q!=null)return q +if(r.fy==null){if(r.id==null)r=r.p3!=null +else r=!0 +s=r}else s=!0 +if(!s)return null +return A.e0(a)}, +aF(a,b){var s=this +b.samK(s.f) +b.sapu(s.r) +b.sapo(s.w) +b.salM(!1) +b.sYG(s.e) +b.sbS(s.Pj(a))}} +A.Qq.prototype={ +az(a){var s=new A.Sl(null,A.ag(t.T)) +s.aw() +s.saP(null) +return s}} +A.Ml.prototype={ +az(a){var s=new A.S9(!0,null,A.ag(t.T)) +s.aw() +s.saP(null) +return s}, +aF(a,b){b.salN(!0)}} +A.oC.prototype={ +az(a){var s=new A.Sd(this.e,null,A.ag(t.T)) +s.aw() +s.saP(null) +return s}, +aF(a,b){b.sapp(this.e)}} +A.Pw.prototype={ +az(a){var s=new A.Sg(this.e,null,A.ag(t.T)) +s.aw() +s.saP(null) +return s}, +aF(a,b){b.sarv(0,this.e)}} +A.kl.prototype={ +H(a){return this.c}} +A.f2.prototype={ +H(a){return this.c.$1(a)}} +A.r2.prototype={ +az(a){var s=new A.IT(this.e,B.b_,null,A.ag(t.T)) +s.aw() +s.saP(null) +return s}, +aF(a,b){t.ri.a(b).sM(0,this.e)}} +A.IT.prototype={ +sM(a,b){if(b.j(0,this.d6))return +this.d6=b +this.ag()}, +am(a,b){var s,r,q,p,o=this,n=o.gv(o) +if(n.a>0&&n.b>0){n=a.gbe(a) +s=o.gv(o) +r=b.a +q=b.b +p=$.W().aj() +p.sM(0,o.d6) +n.cB(new A.w(r,q,r+s.a,q+s.b),p)}n=o.fr$ +if(n!=null)a.ef(n,b)}} +A.aC6.prototype={ +$1(a){var s=a==null?t.K.a(a):a +return this.a.n6(s)}, +$S:469} +A.eH.prototype={ +vc(){return A.d5(!1,t.y)}, +W5(a){return A.d5(!1,t.y)}, +qL(a){var s=a.gjl(),r=s.gcU(s).length===0?"/":s.gcU(s),q=s.glU() +q=q.ga7(q)?null:s.glU() +r=A.zE(s.gj6().length===0?null:s.gj6(),r,q).gq3() +return this.W5(A.j6(r,0,r.length,B.a2,!1))}, +I7(){}, +W3(){}, +W2(){}, +W1(a){}, +Am(a){}, +Ic(){var s=0,r=A.a1(t.s1),q +var $async$Ic=A.a2(function(a,b){if(a===1)return A.Z(b,r) +while(true)switch(s){case 0:q=B.mJ +s=1 +break +case 1:return A.a_(q,r)}}) +return A.a0($async$Ic,r)}} +A.GI.prototype={ +AW(){var s=0,r=A.a1(t.s1),q,p=this,o,n,m,l +var $async$AW=A.a2(function(a,b){if(a===1)return A.Z(b,r) +while(true)switch(s){case 0:o=A.V(p.X$,!0,t.X5),n=o.length,m=!1,l=0 +case 3:if(!(l=s.b&&s.c>=s.d) +else s=!0}else s=!1 +if(s)m=new A.PV(0,0,new A.hN(B.mV,n,n),n) +else{s=o.d +if(s!=null)m=new A.h8(s,n,n,m,n)}r=o.gafO() +if(r!=null)m=new A.bH(r,m,n) +s=o.f +if(s!=null)m=new A.r2(s,m,n) +s=o.as +if(s!==B.o){q=A.e0(a) +p=o.r +p.toString +m=A.a9k(m,s,new A.Xs(q==null?B.q:q,p))}s=o.r +if(s!=null)m=A.rc(m,s,B.cu) +s=o.w +if(s!=null)m=A.rc(m,s,B.ob) +s=o.x +if(s!=null)m=new A.hN(s,m,n) +s=o.y +if(s!=null)m=new A.bH(s,m,n) +s=o.z +if(s!=null)m=A.ys(o.Q,m,n,n,s,!0) +m.toString +return m}} +A.Xs.prototype={ +CJ(a){return this.c.CK(new A.w(0,0,0+a.a,0+a.b),this.b)}, +Dl(a){return!a.c.j(0,this.c)||a.b!==this.b}} +A.ld.prototype={ +I(){return"ContextMenuButtonType."+this.b}} +A.dZ.prototype={ +j(a,b){if(b==null)return!1 +if(J.U(b)!==A.t(this))return!1 +return b instanceof A.dZ&&J.d(b.a,this.a)&&b.b===this.b}, +gt(a){return A.N(null,this.a,this.b,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a){return"ContextMenuButtonItem "+this.b.k(0)+", null"}} +A.Ne.prototype={ +a1f(a,b,c){var s,r +A.aK3() +s=A.ahj(b,t.N1) +s.toString +r=A.aM6(b) +if(r==null)r=null +else{r=r.c +r.toString}r=A.pe(new A.a9P(A.aLo(b,r),c),!1) +$.r6=r +s.B7(0,r) +$.mD=this}, +eg(a){if($.mD!==this)return +A.aK3()}} +A.a9P.prototype={ +$1(a){return new A.H7(this.a.a,this.b.$1(a),null)}, +$S:11} +A.oy.prototype={ +rS(a,b,c){return A.aae(c,this.w,null,this.y,this.x)}, +cs(a){return!J.d(this.w,a.w)||!J.d(this.x,a.x)||!J.d(this.y,a.y)}} +A.aaf.prototype={ +$1(a){var s=a.ap(t.Uf) +if(s==null)s=B.em +return A.aae(this.e,s.w,this.a,this.d,s.x)}, +$S:470} +A.a_k.prototype={ +H(a){throw A.c(A.wc("A DefaultSelectionStyle constructed with DefaultSelectionStyle.fallback cannot be incorporated into the widget tree, it is meant only to provide a fallback value returned by DefaultSelectionStyle.of() when no enclosing default selection style is present in a BuildContext."))}} +A.NI.prototype={ +aaC(){return $.aRX()}, +H(a){var s=A.aos(this.c,"",this.aaC()) +return A.aos(s,"",A.aWo())}} +A.NN.prototype={ +x0(a){return new A.az(0,a.b,0,a.d)}, +x8(a,b){var s,r=this.b,q=r.a,p=q+b.a-a.a +r=r.b +s=r+b.b-a.b +if(p>0)q-=p +return new A.k(q,s>0?r-s:r)}, +nB(a){return!this.b.j(0,a.b)}} +A.NV.prototype={ +gaS(a){var s=this.a +if(s==null)return null +s=s.c +s.toString +return s}} +A.w0.prototype={ +ac(){return new A.HJ(A.xm(null),A.xm(null),B.j)}, +apY(a,b,c){return this.d.$3(a,b,c)}, +av7(a,b,c){return this.e.$3(a,b,c)}} +A.HJ.prototype={ +aB(){var s,r=this +r.aR() +s=r.a.c +r.d=s.gb6(s) +s=r.a.c +s.by() +s=s.cM$ +s.b=!0 +s.a.push(r.gE0()) +r.T9()}, +N1(a){var s,r=this,q=r.d +q===$&&A.b() +s=r.a7N(a,q) +r.d=s +if(q!==s)r.T9()}, +aO(a){var s,r,q=this +q.bb(a) +s=a.c +if(s!==q.a.c){r=q.gE0() +s.dR(r) +s=q.a.c +s.by() +s=s.cM$ +s.b=!0 +s.a.push(r) +r=q.a.c +q.N1(r.gb6(r))}}, +a7N(a,b){switch(a.a){case 0:case 3:return a +case 1:switch(b.a){case 0:case 3:case 1:return a +case 2:return b}break +case 2:switch(b.a){case 0:case 3:case 2:return a +case 1:return b}break}}, +T9(){var s=this,r=s.d +r===$&&A.b() +switch(r.a){case 0:case 1:s.e.saU(0,s.a.c) +s.f.saU(0,B.cQ) +break +case 2:case 3:s.e.saU(0,B.ea) +s.f.saU(0,new A.kw(s.a.c,new A.b5(A.a([],t.x8),t.jc),0)) +break}}, +m(){this.a.c.dR(this.gE0()) +this.aN()}, +H(a){var s=this.a +return s.apY(a,this.e,s.av7(a,this.f,s.f))}} +A.WO.prototype={ +az(a){var s=new A.a0P(this.e,this.f,null,A.ag(t.T)) +s.aw() +s.saP(null) +return s}, +aF(a,b){var s +this.a3p(a,b) +s=this.f +b.al=s +if(!s){s=b.a1 +if(s!=null)s.$0() +b.a1=null}else if(b.a1==null)b.ag()}} +A.a0P.prototype={ +am(a,b){var s=this +if(s.al)if(s.a1==null)s.a1=a.a.akQ(s.A) +s.iC(a,b)}} +A.Uu.prototype={ +sxj(a){var s,r,q,p,o=this +if(!o.XN(a))throw A.c(A.wc("invalid text selection: "+a.k(0))) +s=a.a +r=a.b +if(s===r){q=o.a.c +s=s>=q.a&&r<=q.b}else s=!1 +p=s?o.a.c:B.c2 +o.xL(0,o.a.ani(p,a))}, +XN(a){var s=this.a.a.length +return a.a<=s&&a.b<=s}} +A.UO.prototype={} +A.il.prototype={} +A.av3.prototype={ +fp(a,b){return 0}, +lD(a){return a>=this.b}, +eG(a,b){var s,r,q,p=this.c,o=this.d +if(p[o].a>b){s=o +o=0}else s=11 +for(r=s-1;o0){d.ky=new A.k(n.a- -4,d.ky.b) +d.IB=!1}else if(d.Aw&&k.a<0){d.ky=new A.k(n.a-l,d.ky.b) +d.Aw=!1}if(d.Ax&&k.b>0){d.ky=new A.k(d.ky.a,n.b- -4) +d.Ax=!1}else if(d.Ay&&k.b<0){d.ky=new A.k(d.ky.a,n.b-m) +d.Ay=!1}r=d.ky +j=n.a-r.a +i=n.b-r.b +h=Math.min(Math.max(j,-4),l) +g=Math.min(Math.max(i,-4),m) +if(j<-4&&k.a<0)d.IB=!0 +else if(j>l&&k.a>0)d.Aw=!0 +if(i<-4&&k.b<0)d.Ax=!0 +else if(i>m&&k.b>0)d.Ay=!0 +d.IA=n +f.k2=new A.k(h,g) +d=f.gae() +r=f.gae() +p=f.k2 +p.toString +p=p.R(0,new A.k(0,f.gae().av.gda()/2)) +f.id=d.fD(A.c7(r.br(0,e),p)) +p=f.gae() +r=f.k2 +r.toString +d=f.id +d.toString +p.Dd(s,r,d) +break +case 2:f.ul() +if(f.id!=null&&f.k2!=null){f.dy.sl(0,0) +d=f.dy +d.z=B.aA +d.kj(1,B.eb,B.jV)}break}}, +QJ(){var s,r,q,p,o=this,n=o.gae(),m=o.id +m.toString +s=n.jo(m).gam9().Y(0,new A.k(0,o.gae().av.gda()/2)) +n=o.dy +if(n.gb6(n)===B.a7){n=o.gae() +m=o.id +m.toString +n.Dd(B.kh,s,m) +n=o.gae().bu +if(n.a===n.b){n=o.id +n.toString +o.y7(A.yl(n),B.ii)}o.k2=o.k1=o.id=o.go=null}else{n=o.dy.x +n===$&&A.b() +m=o.k2 +r=A.P(m.a,s.a,n) +r.toString +m=A.P(m.b,s.b,n) +m.toString +q=o.gae() +p=o.id +p.toString +q.LA(B.kg,new A.k(r,m),p,n)}}, +EZ(a,b){var s,r,q,p,o,n=this,m=n.a.c +m.xL(0,m.a.Vg(B.c2)) +if(b){switch(a.a){case 0:case 1:case 2:case 3:case 4:case 5:case 8:case 9:case 10:case 11:case 12:n.a.d.np() +break +case 6:m=n.a.d +p=m.e +p.toString +A.wf(p).yK(m,!0) +break +case 7:m=n.a.d +p=m.e +p.toString +A.wf(p).yK(m,!1) +break}b=!0}m=n.a +m.toString +s=null +if(s==null)return +try{s.$1(m.c.a.a)}catch(o){r=A.ax(o) +q=A.aZ(o) +m=A.bo("while calling onSubmitted for "+a.k(0)) +A.d4(new A.bG(r,q,"widgets",m,null,!1))}if(b)n.ahL()}, +GQ(){var s,r=this +if(r.k3>0||!r.ghW())return +s=r.a.c.a +if(s.j(0,r.fy))return +r.z.toString +$.cI().z4(s) +r.fy=s}, +P8(a){var s,r,q,p,o,n,m,l,k=this +B.b.gct(k.gfI().f) +s=k.gae() +r=s.gv(s) +if(k.a.k2===1){s=a.c +q=a.a +p=r.a +o=s-q>=p?p/2-a.gaK().a:A.O(0,s-p,q) +n=B.dL}else{m=A.aGN(a.gaK(),Math.max(a.d-a.b,k.gae().av.gda()),a.c-a.a) +s=m.d +q=m.b +p=r.b +o=s-q>=p?p/2-m.gaK().b:A.O(0,s-p,q) +n=B.f3}s=B.b.gct(k.gfI().f).at +s.toString +q=B.b.gct(k.gfI().f).z +q.toString +p=B.b.gct(k.gfI().f).Q +p.toString +l=A.O(o+s,q,p) +p=B.b.gct(k.gfI().f).at +p.toString +return new A.ER(l,a.cm(n.S(0,p-l)))}, +yO(){var s,r,q,p,o,n=this +if(!n.ghW()){s=n.a.c.a +n.gwE() +n.a.toString +r=n.gwE() +q=A.aNx(n) +$.cI().E4(q,r) +r=q +n.z=r +n.TF() +n.RH() +r=n.z +r.toString +p=n.db +p===$&&A.b() +o=n.gtP() +r.Dh(p.d,p.r,p.w,n.a.db,o) +o=$.cI() +o.z4(s) +o.Gq() +n.a.toString +if(n.gwE().e.a){n.z.toString +o.ahe()}n.fy=s}else{n.z.toString +$.cI().Gq()}}, +NI(){var s,r,q=this +if(q.ghW()){s=q.z +s.toString +r=$.cI() +if(r.d===s)r.ND() +q.R8=q.fy=q.z=null +q.Zb()}}, +ahL(){if(this.k4)return +this.k4=!0 +A.fq(this.gahj())}, +ahk(){var s,r,q,p,o,n=this +n.k4=!1 +if(n.ghW())s=!1 +else s=!0 +if(s)return +s=n.z +s.toString +r=$.cI() +if(r.d===s)r.ND() +n.fy=n.z=null +n.a.toString +n.gwE() +n.a.toString +s=n.gwE() +q=A.aNx(n) +r.E4(q,s) +p=q +n.z=p +r.Gq() +s=n.db +s===$&&A.b() +o=n.gtP() +p.Dh(s.d,s.r,s.w,n.a.db,o) +r.z4(n.a.c.a) +n.fy=n.a.c.a}, +ajG(){this.ok=!1 +$.aa.F$.f.K(0,this.gzl())}, +Zl(){var s=this +if(s.a.d.gcK())s.yO() +else{s.ok=!0 +$.aa.F$.f.Z(0,s.gzl()) +s.a.d.lW()}}, +Ts(){var s,r,q=this +if(q.Q!=null){s=q.a.d.gcK() +r=q.Q +if(s){r.toString +r.bw(0,q.a.c.a)}else{r.m() +q.Q=null}}}, +afh(){var s=this.Q +if(s!=null){s.q5() +s=s.e +s===$&&A.b() +s.cO()}this.R8=null}, +EF(){var s,r,q,p,o,n,m,l,k,j,i,h=this,g=h.a,f=g.eP,e=h.c +e.toString +s=g.c.a +r=h.gae() +q=h.a +p=q.p2 +o=q.aq +n=q.x1 +q=q.dv +m=$.aO() +l=t.uh +k=new A.ca(!1,m,l) +j=new A.ca(!1,m,l) +l=new A.ca(!1,m,l) +i=new A.UD(e,r,p,h,new A.abd(h,f),s,k,j,l) +s=i.gTG() +r.cv.Z(0,s) +r.dv.Z(0,s) +i.GS() +s=i.gab4() +r=r.qZ +i.e!==$&&A.bS() +i.e=new A.Tp(e,new A.ca(B.SO,m,t.kr),new A.te(),q,B.ft,0,k,i.gad6(),i.gad8(),s,B.ft,0,j,i.gad0(),i.gad2(),s,l,B.Qj,g,h.ax,h.ay,h.ch,p,h,o,n,h.x,r,new A.Ne(),new A.Ne()) +return i}, +y7(a,b){var s,r,q,p,o,n=this +if(!n.a.c.XN(a))return +n.a.c.sxj(a) +switch(b){case null:case void 0:case B.zI:case B.ag:case B.ii:case B.cJ:case B.lv:case B.bk:case B.at:n.Zl() +break +case B.ak:if(n.a.d.gcK())n.Zl() +break}q=n.a +q.toString +p=n.Q +if(p==null)n.Q=n.EF() +else p.bw(0,q.c.a) +q=n.Q +q.toString +q.sX7(n.a.Q) +q=n.Q +q.q5() +q=q.e +q===$&&A.b() +q.a1k() +try{n.a.to.$2(a,b)}catch(o){s=A.ax(o) +r=A.aZ(o) +q=A.bo("while calling onSelectionChanged for "+A.h(b)) +A.d4(new A.bG(s,r,"widgets",q,null,!1))}if(n.gz5()&&n.d!=null){n.zd(!1) +n.ul()}}, +Gl(a){if(this.p1)return +this.p1=!0 +$.c_.rx$.push(new A.abl(this,a))}, +I7(){var s,r=this,q=r.c +if(q==null)return +s=A.Vi(q) +s.toString +q=r.p2 +q===$&&A.b() +if(q!==s.w.d){$.c_.rx$.push(new A.abM(r)) +if(r.p2>>24&255)/255,s) +s=q.gae() +p=q.a.go +p=A.C(B.c.an(255*r),p.gl(p)>>>16&255,p.gl(p)>>>8&255,p.gl(p)&255) +s.geL().sHz(p) +if(q.a.as){p=q.gkk().x +p===$&&A.b() +p=p>0}else p=!1 +q.r.sl(0,p)}, +gz5(){var s,r +if(this.a.d.gcK()){s=this.a +r=s.c.a.b +s=r.a===r.b&&s.as&&this.fx}else s=!1 +return s}, +ul(){var s,r=this +if(!r.a.as)return +if(!r.fx)return +s=r.d +if(s!=null)s.b3(0) +r.gkk().sl(0,1) +if(r.a.aJ)r.gkk().Hd(r.gQ5()).a.a.ix(r.gQI()) +else r.d=A.aHc(B.cU,new A.abp(r))}, +FR(){var s,r=this,q=r.p3 +if(q>0){$.aa.toString +$.b8();--q +r.p3=q +if(q===0)r.a3(new A.abi())}if(r.a.aJ){q=r.d +if(q!=null)q.b3(0) +r.d=A.cy(B.z,new A.abj(r))}else{q=r.d +q=q==null?null:q.b!=null +if(q!==!0&&r.fx)r.d=A.aHc(B.cU,new A.abk(r)) +q=r.gkk() +s=r.gkk().x +s===$&&A.b() +q.sl(0,s===0?1:0)}}, +zd(a){var s,r=this +r.gkk().sl(0,0) +s=r.d +if(s!=null)s.b3(0) +r.d=null +if(a)r.p3=0}, +St(){return this.zd(!0)}, +Gw(){var s=this +if(!s.gz5())s.St() +else if(s.d==null)s.ul()}, +Oh(){var s,r,q,p=this +if(p.a.d.gcK()&&!p.a.c.a.b.gck()){s=p.gy5() +p.a.c.K(0,s) +r=p.a.c +q=p.MX() +q.toString +r.sxj(q) +p.a.c.Z(0,s)}p.GQ() +p.Gw() +p.Ts() +p.a3(new A.abe()) +p.gGX().a1P()}, +a9G(){var s,r,q,p=this +if(p.a.d.gcK()&&p.a.d.amJ())p.yO() +else if(!p.a.d.gcK()){p.NI() +s=p.a.c +s.xL(0,s.a.Vg(B.c2))}p.Gw() +p.Ts() +s=p.a.d.gcK() +r=$.aa +if(s){r.X$.push(p) +s=p.c +s.toString +p.p2=A.Vi(s).w.d +p.a.toString +q=p.MX() +if(q!=null)p.y7(q,null)}else{B.b.C(r.X$,p) +p.a3(new A.abg(p))}p.pe()}, +MX(){var s,r=this.a +if(r.X&&r.k2===1&&!this.ok)s=A.cn(B.m,0,r.c.a.a.length,!1) +else s=!r.c.a.b.gck()?A.us(B.m,this.a.c.a.a.length):null +return s}, +a8o(a){if(this.gae().y==null||!this.ghW())return +this.TF()}, +TF(){var s=this.gae(),r=s.gv(s),q=this.gae().br(0,null) +s=this.z +if(!r.j(0,s.a)||!q.j(0,s.b)){s.a=r +s.b=q +$.cI().aie(r,q)}}, +RI(a){var s,r,q,p=this +if(!p.ghW())return +p.akb() +s=p.a.c.a.c +r=p.gae().t_(s) +if(r==null){q=s.gck()?s.a:0 +r=p.gae().jo(new A.b9(q,B.m))}p.z.a0U(r) +p.ajN() +$.c_.rx$.push(p.gahK())}, +RH(){return this.RI(null)}, +TB(a6){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,a2,a3,a4=this,a5=null +a4.a.toString +s=A.by() +if(s!==B.au)return +if(B.b.gct(a4.gfI().f).k4!==B.ie)return +s=a4.gae().av.f +s.toString +r=new A.dj(a4.a.fy,a5) +q=A.bn("#0#1",new A.abq(r)) +p=A.bn("#0#4",new A.abr(q)) +o=A.bn("#0#2",new A.abs(r)) +$label0$0:{if(t.tp.b(q.T())){n=q.T() +m=!0}else{n=a5 +m=!1}if(m){m=n +break $label0$0}if(p.T())if(typeof o.T()=="number"){l=o.T() +m=!0}else{l=a5 +m=!1}else{l=a5 +m=!1}if(m){m=new A.fl(l) +break $label0$0}if(p.T()&&o.T()==null){m=a4.c +m.toString +m=A.d_(m,B.fG) +m=m==null?a5:m.gbK() +if(m==null)m=B.ab +break $label0$0}m=a5}k=a4.a.db +j=a4.gtP() +a4.a.toString +i=a4.c +i.toString +i=A.aFw(i) +h=a4.a.glb() +g=a4.rx +f=a4.gae() +e=new A.aAj(k,j,m,i,a5,h,g,f.gv(f),s) +if(a6)d=B.b8 +else{m=a4.R8 +m=m==null?a5:m.HF(e) +d=m==null?B.b8:m}if(d.a<3)return +a4.R8=e +c=A.a([],t.u1) +b=s.wH(!1) +a=new A.FN(b,0,0) +for(a0=0;a.DZ(1,a.c);a0=a1){s=a.d +a1=a0+(s==null?a.d=B.d.P(b,a.b,a.c):s).length +s=a4.gae() +m=a01){m=n.a.c.a.b +m=m.a!==m.b||m.c===0}else m=!0 +if(m)return +m=n.a.c.a +s=m.a +m=m.b.c +r=A.apn(s,m) +q=r.b +if(m===s.length)r.Ry(2,q) +else{r.Ry(1,q) +r.DZ(1,r.b)}m=r.a +q=B.d.P(m,0,r.b) +p=new A.hz(r.gJ(r)) +p=p.gO(p) +o=new A.hz(r.gJ(r)) +n.hl(new A.dF(q+p+o.gL(o)+B.d.bL(m,r.c),A.us(B.m,r.b+r.gJ(r).length),B.c2),B.ak)}, +ah9(a){var s=this.a.c.a,r=a.a.av_(a.c,a.b) +this.hl(r,a.d) +if(r.j(0,s))this.Oh()}, +ahS(a){if(a.a)this.ku(new A.b9(this.a.c.a.a.length,B.m)) +else this.ku(B.fs)}, +ahQ(a){var s,r,q,p,o,n,m,l=this +if(a.b!==B.fc)return +s=B.b.gct(l.gfI().f) +if(l.a.k2===1){r=l.gfI() +q=s.Q +q.toString +r.eE(q) +return}r=s.Q +r.toString +if(r===0){r=s.z +r.toString +r=r===0}else r=!1 +if(r)return +p=t._N.a(l.as.ga5()) +p.toString +o=A.ank(p,a) +r=s.at +r.toString +q=s.z +q.toString +n=s.Q +n.toString +m=A.O(r+o,q,n) +if(m===r)return +l.gfI().eE(m)}, +a9Z(a){var s,r,q,p,o,n,m,l,k,j,i=this +if(i.a.k2===1)return +s=i.gae().jo(i.a.c.a.b.geB()) +r=t._N.a(i.as.ga5()) +r.toString +q=A.ank(r,new A.eR(a.gAQ(a)?B.a1:B.a8,B.fc)) +p=B.b.gct(i.gfI().f) +if(a.gAQ(a)){o=i.a.c.a +if(o.b.d>=o.a.length)return +o=s.b+q +n=p.Q +n.toString +m=i.gae() +m=m.gv(m) +l=p.at +l.toString +k=o+l>=n+m.b?new A.b9(i.a.c.a.a.length,B.m):i.gae().fD(A.c7(i.gae().br(0,null),new A.k(s.a,o))) +j=i.a.c.a.b.HM(k.a)}else{if(i.a.c.a.b.d<=0)return +o=s.b+q +n=p.at +n.toString +k=o+n<=0?B.fs:i.gae().fD(A.c7(i.gae().br(0,null),new A.k(s.a,o))) +j=i.a.c.a.b.HM(k.a)}i.ku(j.geB()) +i.hl(i.a.c.a.iW(j),B.ak)}, +ak7(a){var s=a.b +this.ku(s.geB()) +this.hl(a.a.iW(s),a.c)}, +gGX(){var s,r=this,q=r.xr +if(q===$){s=A.a([],t.g) +r.xr!==$&&A.ay() +q=r.xr=new A.Kl(r,new A.b5(s,t.c),t.Wp)}return q}, +adQ(a){var s=this.Q +if(s==null)s=null +else{s=s.e +s===$&&A.b() +s=s.gCt()}if(s===!0){this.oD(!1) +return null}s=this.c +s.toString +return A.qw(s,a,t.xm)}, +a98(a){switch(A.by().a){case 0:case 2:case 1:switch(a.gcN(a).a){case 0:this.a.d.np() +break +case 1:case 2:case 3:case 5:this.a.d.np() +break +case 4:throw A.c(A.co("Unexpected pointer down event for trackpad"))}break +case 3:case 4:case 5:this.a.d.np() +break}}, +ga6A(){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,b0=this,b1=b0.y1 +if(b1===$){s=t.g +r=A.a([],s) +q=t.c +b1=b0.x1 +if(b1===$){p=A.a([],s) +b0.x1!==$&&A.ay() +b1=b0.x1=new A.cT(b0.gah8(),new A.b5(p,q),t.Tx)}o=b0.x2 +if(o===$){p=A.a([],s) +b0.x2!==$&&A.ay() +o=b0.x2=new A.cT(b0.gak6(),new A.b5(p,q),t.ZQ)}p=A.a([],s) +n=A.a([],s) +m=b0.ga7U() +l=b0.gaeZ() +k=A.a([],s) +j=b0.c +j.toString +j=new A.nL(b0,m,l,new A.b5(k,q),t.dA).dL(j) +k=b0.gaf9() +i=A.a([],s) +h=b0.c +h.toString +h=new A.nL(b0,k,l,new A.b5(i,q),t.Uz).dL(h) +i=b0.gaep() +g=b0.gaf0() +f=A.a([],s) +e=b0.c +e.toString +e=new A.nL(b0,i,g,new A.b5(f,q),t.Fb).dL(e) +m=A.qk(b0,m,l,!1,!1,!1,t._w) +f=b0.c +f.toString +f=m.dL(f) +m=A.a([],s) +d=b0.c +d.toString +d=new A.cT(b0.ga9Y(),new A.b5(m,q),t.vr).dL(d) +m=A.qk(b0,k,l,!1,!0,!1,t.P9) +c=b0.c +c.toString +c=m.dL(c) +m=b0.gag3() +b=A.qk(b0,m,l,!1,!0,!1,t.cP) +a=b0.c +a.toString +a=b.dL(a) +b=A.qk(b0,i,g,!1,!0,!1,t.OO) +a0=b0.c +a0.toString +a0=b.dL(a0) +b=b0.gGX() +a1=b0.c +a1.toString +a1=b.dL(a1) +b=b0.gGX() +a2=b0.c +a2.toString +a2=b.dL(a2) +m=A.qk(b0,m,l,!1,!0,!1,t.b6) +b=b0.c +b.toString +b=m.dL(b) +m=b0.ga9p() +a3=A.qk(b0,m,l,!1,!0,!1,t.HH) +a4=b0.c +a4.toString +a4=a3.dL(a4) +l=A.qk(b0,k,l,!1,!0,!1,t.eI) +k=b0.c +k.toString +k=l.dL(k) +l=A.a([],s) +a3=b0.c +a3.toString +a3=new A.cT(b0.gahR(),new A.b5(l,q),t.sl).dL(a3) +l=A.a([],s) +i=A.qk(b0,i,g,!1,!0,!0,t.oB) +a5=b0.c +a5.toString +a5=i.dL(a5) +g=A.qk(b0,m,g,!0,!0,!0,t.bh) +m=b0.c +m.toString +m=g.dL(m) +g=A.a([],s) +i=b0.c +i.toString +i=new A.a1T(b0,new A.b5(g,q)).dL(i) +g=A.a([],s) +a6=b0.c +a6.toString +a6=new A.X5(b0,new A.b5(g,q)).dL(a6) +g=A.a([],s) +a7=b0.c +a7.toString +a7=new A.cT(new A.abc(b0),new A.b5(g,q),t.gv).dL(a7) +a8=b0.to +if(a8===$){s=A.a([],s) +b0.to!==$&&A.ay() +a8=b0.to=new A.cT(b0.gajx(),new A.b5(s,q),t.j5)}s=b0.c +s.toString +a9=A.aY([B.a4Q,new A.Bv(!1,new A.b5(r,q)),B.a4r,b1,B.a4E,o,B.Bk,new A.Bu(!0,new A.b5(p,q)),B.m5,new A.cT(b0.gadP(),new A.b5(n,q),t.OZ),B.a44,j,B.a4V,h,B.a45,e,B.a3X,f,B.a49,d,B.a3U,c,B.a3Z,a,B.a3W,a0,B.a4M,a1,B.a4N,a2,B.a4T,b,B.a3V,a4,B.a4R,k,B.a3Y,a3,B.m8,new A.cT(b0.gahP(),new A.b5(l,q),t.fn),B.a4S,a5,B.a4O,m,B.a4t,i,B.a42,a6,B.a4n,a7,B.a4y,a8.dL(s)],t.u,t.od) +b0.y1!==$&&A.ay() +b0.y1=a9 +b1=a9}return b1}, +H(a0){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b=this,a=null +b.Dx(a0) +s=b.a +r=s.p2 +q=new A.dj(s.fy,a) +p=A.bn("#0#1",new A.abu(q)) +o=A.bn("#0#4",new A.abv(p)) +n=A.bn("#0#2",new A.abw(q)) +$label0$0:{if(t.tp.b(p.T())){m=p.T() +s=!0}else{m=a +s=!1}if(s){s=m +break $label0$0}if(o.T())if(typeof n.T()=="number"){l=n.T() +s=!0}else{l=a +s=!1}else{l=a +s=!1}if(s){s=new A.fl(l) +break $label0$0}if(o.T()&&n.T()==null){s=A.d_(a0,B.fG) +s=s==null?a:s.gbK() +if(s==null)s=B.ab +break $label0$0}s=a}k=b.ghW() +b.a.toString +j=b.ga6A() +i=b.a +h=i.c +g=i.d +i=i.k2!==1?B.a1:B.du +f=b.gfI() +e=b.a +d=e.aD +e=e.aq +c=A.anq(a0).anp(!1,b.a.k2!==1) +return new A.WO(b.ga8n(),k,A.aq8(A.tr(A.vg(j,new A.yv(h,new A.abx(b),new A.aby(b),g,a,A.we(!1,a,A.aMX(i,B.a9,f,e,!0,b.as,d,a,c,a,new A.abz(b,r,s)),a,a,a,g,!1,a,a,a,a,a,a),a,t.pm)),B.AL,a,a,a,a),a,b.ga97()),a)}, +UN(){var s,r,q,p,o,n=this,m=null,l=n.a +l.toString +s=n.rx +if(s>=0&&s<=l.c.a.a.length){r=A.a([],t.s6) +l=n.a +q=l.c.a.a.length-n.rx +if(l.k2!==1){r.push(B.a6Y) +l=n.gae() +r.push(new A.kX(new A.G(l.gv(l).a,0),B.aF,B.cF,m,m))}else r.push(B.a6Z) +l=n.db +l===$&&A.b() +s=A.a([A.c0(m,m,m,B.d.P(n.a.c.a.a,0,q))],t.VO) +B.b.E(s,r) +s.push(A.c0(m,m,m,B.d.bL(n.a.c.a.a,q))) +return A.c0(s,m,l,m)}if(n.gaiR()){n.a.c.a.garP() +l=n.a.c.a +s=n.db +s===$&&A.b() +p=n.cy +p===$&&A.b() +p=p.c +p.toString +o=n.dx +o.toString +return A.b5a(l,!0,s,p,o)}l=n.a.c +n.c.toString +s=n.db +s===$&&A.b() +return A.c0(A.a([l.ax],t.Ne),m,s,m)}} +A.abh.prototype={ +$0(){}, +$S:0} +A.abA.prototype={ +$0(){this.a.Ag(B.at)}, +$S:0} +A.abB.prototype={ +$0(){this.a.A7(B.at)}, +$S:0} +A.abC.prototype={ +$0(){this.a.rA(B.at)}, +$S:0} +A.abD.prototype={ +$0(){this.a.D6(B.at)}, +$S:0} +A.abE.prototype={ +$0(){return this.a.A7(B.at)}, +$S:0} +A.abF.prototype={ +$0(){return this.a.Ag(B.at)}, +$S:0} +A.abG.prototype={ +$0(){return this.a.rA(B.at)}, +$S:0} +A.abH.prototype={ +$0(){return this.a.D6(B.at)}, +$S:0} +A.abI.prototype={ +$0(){return this.a.Br(B.at)}, +$S:0} +A.abJ.prototype={ +$0(){return this.a.xh(B.at)}, +$S:0} +A.abK.prototype={ +$0(){return this.a.xs(B.at)}, +$S:0} +A.abL.prototype={ +$0(){return this.a.aiX(B.at)}, +$S:0} +A.abN.prototype={ +$1(a){this.a.yO()}, +$S:3} +A.abd.prototype={ +$1(a){return this.b.$2(a,this.a)}, +$S:11} +A.abl.prototype={ +$1(a){var s,r,q,p,o,n,m,l,k,j,i,h=this.a +h.p1=!1 +s=$.aa.F$.z.i(0,h.w) +s=s==null?null:s.ga_() +t.CA.a(s) +if(s!=null){r=s.bu.gck() +r=!r||h.gfI().f.length===0}else r=!0 +if(r)return +q=s.av.gda() +h.a.toString +r=h.Q +if((r==null?null:r.c)!=null){p=r.c.rX(q).b +o=Math.max(p,48) +n=Math.max(p/2-h.Q.c.rW(B.ft,q).b+o/2,20)}else n=20 +h.a.toString +m=B.LJ.uW(n) +l=h.P8(s.jo(s.bu.geB())) +k=h.a.c.a.b +if(k.a===k.b)j=l.b +else{i=s.l0(k) +if(i.length===0)j=l.b +else if(k.c>>24&255)/255,n) +n=b0.a.go +n=A.C(B.c.an(255*m),n.gl(n)>>>16&255,n.gl(n)>>>8&255,n.gl(n)&255) +p=b0.a +l=p.k1 +p=p.d.gcK() +k=b0.a +j=k.k2 +i=k.k3 +k=k.glb() +h=b0.Q +if(h==null)h=a9 +else{h=h.e +h===$&&A.b() +h=$.mD===h.p1}if(h===!0){b0.cy===$&&A.b() +h=b0.a +g=h.p1 +f=g +g=h +h=f}else{h=b0.a +g=h.p1 +f=g +g=h +h=f}e=this.c +d=b0.gtP() +b0.a.toString +c=A.aFw(b4) +b=b0.a +a=b.w +a0=b.aL +a1=b.bG +a2=b.aM +a3=b.bq +if(a3==null)a3=B.e +a4=b.bt +a5=b.B +a6=b.bZ +if(b.X)b=!0 +else b=!1 +a7=b0.c +a7.toString +a7=A.bt(a7,B.cM,t.w).w +a8=b0.ry +b0.a.toString +return new A.r3(b0.ax,A.cH(a9,a9,new A.Jj(new A.HK(q,o,n,b0.ay,b0.ch,l,b0.r,!1,!0,p,j,i,!1,k,h,e,g.db,d,a9,"\u2022",!1,c,a,b5,!0,a0,a1,a2,a3,a6,a4,a5,b,b0,a7.b,a8,a9,B.a9,A.aO0(q,e),r),s,r,new A.abt(b0),!0,a9),!1,a9,!1,!1,a9,a9,a9,a9,a9,a9,a9,b2,b3,a9,a9,a9,b1,a9,a9,a9,a9,a9,a9,a9,a9,a9,a9,a9),a9)}, +$S:487} +A.abt.prototype={ +$0(){var s=this.a +s.yO() +s.TB(!0)}, +$S:0} +A.HK.prototype={ +az(a){var s,r=this,q=null,p=r.ax,o=r.cy,n=A.wL(a),m=r.f.b,l=A.aOG(),k=A.aOG(),j=$.aO(),i=t.uh,h=A.ag(t.O5) +if(o.j(0,B.ab))o=new A.fl(1) +s=p===1?1:q +o=A.nB(q,n,s,r.CW,r.e,r.db,r.dx,r.fy,o,r.go) +p=new A.tT(l,k,!0,r.RG,r.fr,!1,r.R8,new A.ca(!0,j,i),new A.ca(!0,j,i),o,r.z,r.at,!1,!0,p,r.ay,!1,m,r.id,r.k2,r.k3,r.p1,r.w,r.x,r.p4,r.to,B.e,h,0,q,q,!1,A.ag(t.T)) +p.aw() +l.sB2(r.cx) +l.sB3(m) +l.sLt(r.p2) +l.sLu(r.p3) +k.sB2(r.ry) +k.sB3(r.rx) +p.geL().sHz(r.r) +p.geL().sVM(r.k4) +p.geL().sVL(r.ok) +p.geL().sUB(r.y) +p.To(q) +p.Tt(q) +p.E(0,q) +return p}, +aF(a,b){var s,r,q=this +b.scV(0,q.e) +b.geL().sHz(q.r) +b.sa1N(q.w) +b.sapa(q.x) +b.geL().sUB(q.y) +b.sa1j(q.z) +b.sapW(!1) +b.sKc(0,!0) +b.scK(q.at) +b.sru(q.ax) +b.sasT(q.ay) +b.saps(!1) +b.slb(q.CW) +s=b.aH +s.sB2(q.cx) +b.sbK(q.cy) +b.spb(0,q.db) +b.sbS(q.dx) +r=A.wL(a) +b.srt(0,r) +b.sxj(q.f.b) +b.scz(0,q.id) +b.cY=!0 +b.sCm(q.fy) +b.srL(q.go) +b.satc(q.fr) +b.satb(!1) +b.sanG(q.k2) +b.sanF(q.k3) +b.geL().sVM(q.k4) +b.geL().sVL(q.ok) +s.sLt(q.p2) +s.sLu(q.p3) +b.sap1(q.p4) +b.eP=q.R8 +b.smO(0,q.RG) +b.saub(q.p1) +s=b.aD +s.sB2(q.ry) +r=q.to +if(r!==b.cw){b.cw=r +b.ag() +b.aY()}s.sB3(q.rx)}} +A.aAj.prototype={ +HF(a){var s,r,q=this +if(a===q)return B.cI +if(q.a===a.a)if(q.b===a.b){if(q.c.j(0,a.c))s=!B.AW.j(0,B.AW)||!q.f.j(0,a.f)||q.r!==a.r||!q.w.j(0,a.w) +else s=!0 +r=s}else r=!0 +else r=!0 +return r?B.b8:q.x.b4(0,a.x)}} +A.Jj.prototype={ +ac(){var s=$.aOA +$.aOA=s+1 +return new A.a1L(B.f.k(s),B.j)}, +avW(){return this.f.$0()}} +A.a1L.prototype={ +aB(){var s=this +s.aR() +s.a.toString +$.cI().f.n(0,s.d,s)}, +aO(a){this.bb(a) +this.a.toString}, +m(){$.cI().f.C(0,this.d) +this.aN()}, +gae(){var s=this.a.e +s=$.aa.F$.z.i(0,s) +s=s==null?null:s.ga_() +return t.CA.a(s)}, +arQ(a){var s,r,q,p,o=this,n=o.gqn(o),m=o.gae() +m=m==null?null:m.f6 +if(m===!0)return!1 +if(n.j(0,B.F))return!1 +if(!n.BU(a))return!1 +s=n.ea(a) +r=A.aeY() +m=$.aa +m.toString +q=s.gaK() +p=o.c +p.toString +m.vM(r,q,A.Vi(p).a) +return B.b.fJ(r.a,new A.aAk(o))}, +gqn(a){var s=t.aA.a(this.c.ga_()) +if(s==null||this.c==null||s.y==null)return B.F +return A.hs(s.br(0,null),new A.w(0,0,0+s.gv(s).a,0+s.gv(s).b))}, +H(a){return this.a.c}, +$iaMW:1} +A.aAk.prototype={ +$1(a){return a.a.j(0,this.a.gae())}, +$S:488} +A.kX.prototype={ +zV(a,b,c){var s=this.a,r=s!=null +if(r)a.p0(s.xa(c)) +s=this.x +a.U9(s.a*c.gCn(),s.b*c.gCn(),this.b) +if(r)a.ev()}} +A.nL.prototype={ +ec(a,b){var s,r,q,p,o,n=this.e,m=n.a.c.a.b +if(!m.gck())return null +s=n.Nn() +r=m.a +q=m.b +if(r!==q){r=s.fC(r) +if(r==null)r=n.a.c.a.a.length +q=s.fE(q-1) +if(q==null)q=0 +b.toString +return A.qw(b,new A.lM(n.a.c.a,"",new A.ce(r,q),B.ak),t.UM)}r=a.a +p=this.r.$3(m.gln(),r,this.f.$0()).a +q=m.c +if(r){r=s.fC(q) +if(r==null)r=n.a.c.a.a.length}else{r=s.fE(q-1) +if(r==null)r=0}o=A.cn(B.m,r,p,!1) +b.toString +return A.qw(b,new A.lM(n.a.c.a,"",o,B.ak),t.UM)}, +eb(a){return this.ec(a,null)}, +gjU(){this.e.a.toString +return!1}} +A.Kk.prototype={ +ec(a,b){var s,r,q,p,o,n,m,l,k=this,j=k.e,i=j.a,h=i.c.a,g=h.b,f=a.b||!i.X +i=g.a +s=g.b +r=i===s +if(!r&&!k.f&&f){b.toString +return A.qw(b,new A.jK(h,A.us(B.m,a.a?s:i),B.ak),t.gU)}q=g.geB() +if(a.d){i=a.a +if(i){h=j.gae().rZ(q).b +if(new A.b9(h,B.al).j(0,q)){s=j.a.c.a.a +h=h!==s.length&&s.charCodeAt(q.a)!==10}else h=!1}else h=!1 +if(h)q=new A.b9(q.a,B.m) +else{if(!i){i=j.gae().rZ(q).a +i=new A.b9(i,B.m).j(0,q)&&i!==0&&j.a.c.a.a.charCodeAt(q.a-1)!==10}else i=!1 +if(i)q=new A.b9(q.a,B.al)}}i=k.r +if(i){h=g.c +s=g.d +p=a.a?h>s:h"))}, +gjC(){var s,r,q=this.x +if(q==null){s=A.a([],t.bp) +r=this.Q +for(;r!=null;){s.push(r) +r=r.Q}this.x=s +q=s}return q}, +gcK(){if(!this.gn7()){var s=this.w +if(s==null)s=null +else{s=s.c +s=s==null?null:B.b.p(s.gjC(),this)}s=s===!0}else s=!0 +return s}, +gn7(){var s=this.w +return(s==null?null:s.c)===this}, +goT(){return this.gh9()}, +gh9(){var s,r,q,p +for(s=this.gjC(),r=s.length,q=0;q#"+s+q}, +$iaj:1} +A.ad7.prototype={ +$1(a){return!a.ghR()&&a.gdM()}, +$S:25} +A.oH.prototype={ +goT(){return this}, +gwM(){if(!this.gdM())return B.DA +return A.dI.prototype.gwM.call(this)}, +ta(a){if(a.Q==null)this.G9(a) +if(this.gcK())a.mn(!0) +else a.pZ()}, +alD(a,b){var s,r=this +if(b.Q==null)r.G9(b) +s=r.w +if(s!=null)s.f.push(new A.W1(r,b)) +s=r.w +if(s!=null)s.yA()}, +mn(a){var s,r,q=this,p=q.fr +while(!0){if((p.length!==0?B.b.gO(p):null)!=null)s=!(p.length!==0?B.b.gO(p):null).gdM() +else s=!1 +if(!s)break +p.pop()}r=p.length!==0?B.b.gO(p):null +if(!a||r==null){if(q.gdM()){q.pZ() +q.Qo(q)}return}r.mn(!0)}} +A.oG.prototype={ +I(){return"FocusHighlightMode."+this.b}} +A.ad5.prototype={ +I(){return"FocusHighlightStrategy."+this.b}} +A.Ca.prototype={ +yA(){if(this.r)return +this.r=!0 +A.fq(this.galf())}, +alg(){var s,r,q,p,o,n,m,l,k,j,i,h=this +h.r=!1 +s=h.c +for(r=h.f,q=r.length,p=h.b,o=0;o")) +if(!s.gab(s).q())p=null +else p=b?s.gO(s):s.gL(s)}return p==null?a:p}, +aaa(a,b){return this.OH(a,!1,b)}, +arI(a){}, +HB(a,b){}, +Sl(a,b){var s,r,q,p,o=A.ad9(a),n=A.aXu(a,o,b) +for(s=A.lw(n,n.r,A.o(n).c);s.q();){r=s.d +q=n.i(0,r).b.a1z(n.i(0,r).c,b) +q=A.a(q.slice(0),A.S(q)) +B.b.a0(n.i(0,r).c) +B.b.E(n.i(0,r).c,q)}p=A.a([],t.bp) +if(n.a!==0&&n.ai(0,o)){s=n.i(0,o) +s.toString +new A.adc(n,p).$1(s)}if(!!p.fixed$length)A.T(A.a3("removeWhere")) +B.b.ue(p,new A.adb(b),!0) +return p}, +yK(a,b){var s,r,q,p,o,n,m=this,l=a.goT() +l.toString +m.pv(l) +m.cH$.C(0,l) +s=l.fr +r=s.length!==0?B.b.gO(s):null +s=r==null +if(s){q=b?m.aaa(a,!1):m.OH(a,!0,!1) +l=b?B.da:B.db +m.a.$2$alignmentPolicy(q,l) +return!0}if(s)r=l +p=m.Sl(l,r) +if(p.length<2)return!1 +if(b&&r===B.b.gO(p))switch(l.dy.a){case 1:r.np() +return!1 +case 0:m.a.$2$alignmentPolicy(B.b.gL(p),B.da) +return!0}if(!b&&r===B.b.gL(p))switch(l.dy.a){case 1:r.np() +return!1 +case 0:m.a.$2$alignmentPolicy(B.b.gO(p),B.db) +return!0}for(l=J.ap(b?p:new A.cO(p,A.S(p).h("cO<1>"))),o=null;l.q();o=n){n=l.gJ(l) +if(o===r){l=b?B.da:B.db +m.a.$2$alignmentPolicy(n,l) +return!0}}return!1}} +A.ada.prototype={ +$1(a){return a.gdM()&&!a.ghR()}, +$S:25} +A.adc.prototype={ +$1(a){var s,r,q,p,o,n,m +for(s=a.c,r=s.length,q=this.b,p=this.a,o=0;o")) +if(!o.ga7(o))q=o}n=J.aF4(q,new A.aaF(new A.w(g.gbd(g).a,-1/0,g.gbd(g).c,1/0))) +if(!n.ga7(n)){p=B.b.gL(A.aWw(g.gbd(g).gaK(),n)) +break}p=B.b.gL(A.aWx(g.gbd(g).gaK(),q)) +break +case B.c5:case B.c7:q=k.aiP(b,g.gbd(g),i.gwM()) +if(q.length===0){p=j +break}if(r!=null&&!r.d.gUw()){o=new A.ba(q,new A.aaG(r),A.S(q).h("ba<1>")) +if(!o.ga7(o))q=o}n=J.aF4(q,new A.aaH(new A.w(-1/0,g.gbd(g).b,1/0,g.gbd(g).d))) +if(!n.ga7(n)){p=B.b.gL(A.aWv(g.gbd(g).gaK(),n)) +break}p=B.b.gL(A.aWy(g.gbd(g).gaK(),q)) +break +default:p=j}if(p!=null){h=k.cH$ +m=h.i(0,i) +l=new A.yR(b,g) +if(m!=null)m.a.push(l) +else h.n(0,i,new A.XE(A.a([l],t.Kj))) +switch(b){case B.c4:case B.c7:k.a.$2$alignmentPolicy(p,B.db) +break +case B.c6:case B.c5:k.a.$2$alignmentPolicy(p,B.da) +break}return!0}return!1}} +A.azb.prototype={ +$1(a){return a.b===this.a}, +$S:492} +A.aaz.prototype={ +$2(a,b){if(this.a)if(this.b)return B.c.b4(a.gbd(a).b,b.gbd(b).b) +else return B.c.b4(b.gbd(b).d,a.gbd(a).d) +else if(this.b)return B.c.b4(a.gbd(a).a,b.gbd(b).a) +else return B.c.b4(b.gbd(b).c,a.gbd(a).c)}, +$S:40} +A.aaB.prototype={ +$2(a,b){var s=a.gbd(a).gaK(),r=b.gbd(b).gaK(),q=this.a,p=A.aFB(q,s,r) +if(p===0)return A.aFA(q,s,r) +return p}, +$S:40} +A.aaA.prototype={ +$2(a,b){var s=a.gbd(a).gaK(),r=b.gbd(b).gaK(),q=this.a,p=A.aFA(q,s,r) +if(p===0)return A.aFB(q,s,r) +return p}, +$S:40} +A.aaC.prototype={ +$2(a,b){var s,r,q,p=this.a,o=a.gbd(a),n=b.gbd(b),m=o.a,l=p.a,k=o.c +m=Math.abs(m-l)=s.c}, +$S:25} +A.aav.prototype={ +$2(a,b){return B.c.b4(a.gbd(a).gaK().a,b.gbd(b).gaK().a)}, +$S:40} +A.aaw.prototype={ +$1(a){var s=this.a +return!a.gbd(a).j(0,s)&&a.gbd(a).gaK().b<=s.b}, +$S:25} +A.aax.prototype={ +$1(a){var s=this.a +return!a.gbd(a).j(0,s)&&a.gbd(a).gaK().b>=s.d}, +$S:25} +A.aay.prototype={ +$2(a,b){return B.c.b4(a.gbd(a).gaK().b,b.gbd(b).gaK().b)}, +$S:40} +A.aas.prototype={ +$1(a){var s,r,q=this,p=q.b.a.pop().b,o=p.e +o.toString +o=A.jy(o) +s=$.aa.F$.f.c.e +s.toString +if(o!=A.jy(s)){o=q.a +s=q.c +o.pv(s) +o.cH$.C(0,s) +return!1}switch(a){case B.c4:case B.c7:r=B.db +break +case B.c5:case B.c6:r=B.da +break +default:r=null}q.a.a.$2$alignmentPolicy(p,r) +return!0}, +$S:494} +A.aaE.prototype={ +$1(a){var s=a.e +s.toString +return A.jy(s)===this.a}, +$S:25} +A.aaF.prototype={ +$1(a){var s=a.gbd(a).ea(this.a) +return!s.ga7(s)}, +$S:25} +A.aaG.prototype={ +$1(a){var s=a.e +s.toString +return A.jy(s)===this.a}, +$S:25} +A.aaH.prototype={ +$1(a){var s=a.gbd(a).ea(this.a) +return!s.ga7(s)}, +$S:25} +A.ek.prototype={ +gW7(){var s=this.d +if(s==null){s=this.c.e +s.toString +s=this.d=new A.az9().$1(s)}s.toString +return s}} +A.az8.prototype={ +$1(a){var s=a.gW7() +return A.wK(s,A.S(s).c)}, +$S:495} +A.aza.prototype={ +$2(a,b){switch(this.a.a){case 1:return B.c.b4(a.b.a,b.b.a) +case 0:return B.c.b4(b.b.c,a.b.c)}}, +$S:193} +A.az9.prototype={ +$1(a){var s,r=A.a([],t.vl),q=t.I,p=a.fY(q) +for(;p!=null;){r.push(q.a(p.gao())) +s=A.b3x(p) +p=s==null?null:s.fY(q)}return r}, +$S:497} +A.mc.prototype={ +gbd(a){var s,r,q,p,o=this +if(o.b==null)for(s=o.a,r=A.S(s).h("R<1,w>"),s=new A.R(s,new A.az6(),r),s=new A.bu(s,s.gu(s),r.h("bu")),r=r.h("af.E");s.q();){q=s.d +if(q==null)q=r.a(q) +p=o.b +if(p==null){o.b=q +p=q}o.b=p.j0(q)}s=o.b +s.toString +return s}} +A.az6.prototype={ +$1(a){return a.b}, +$S:498} +A.az7.prototype={ +$2(a,b){switch(this.a.a){case 1:return B.c.b4(a.gbd(a).a,b.gbd(b).a) +case 0:return B.c.b4(b.gbd(b).c,a.gbd(a).c)}}, +$S:499} +A.akF.prototype={ +a8i(a){var s,r,q,p,o,n=B.b.gL(a).a,m=t.qi,l=A.a([],m),k=A.a([],t.jE) +for(s=a.length,r=0;r") +return A.V(new A.ba(b,new A.akI(new A.w(-1/0,s.b,1/0,s.d)),r),!0,r.h("n.E"))}, +$S:500} +A.akI.prototype={ +$1(a){var s=a.b.ea(this.a) +return!s.ga7(s)}, +$S:501} +A.Cb.prototype={ +ac(){return new A.Yz(B.j)}} +A.HT.prototype={} +A.Yz.prototype={ +gco(a){var s,r,q,p=this,o=p.d +if(o===$){s=p.a.c +r=A.a([],t.bp) +q=$.aO() +p.d!==$&&A.ay() +o=p.d=new A.HT(s,!1,!0,!0,!0,null,null,r,q)}return o}, +m(){this.gco(this).m() +this.aN()}, +aO(a){var s=this +s.bb(a) +if(a.c!==s.a.c)s.gco(s).dy=s.a.c}, +H(a){var s=null,r=this.gco(this) +return A.we(!1,!1,this.a.f,s,!0,!0,r,!1,s,s,s,s,s,!0)}} +A.SH.prototype={ +eb(a){a.awE(a.gco(a))}} +A.tw.prototype={} +A.QG.prototype={ +eb(a){var s=$.aa.F$.f.c,r=s.e +r.toString +return A.wf(r).yK(s,!0)}, +Kz(a,b){return b?B.ex:B.hl}} +A.tN.prototype={} +A.RM.prototype={ +eb(a){var s=$.aa.F$.f.c,r=s.e +r.toString +return A.wf(r).yK(s,!1)}, +Kz(a,b){return b?B.ex:B.hl}} +A.Bu.prototype={ +eb(a){var s,r +if(!this.c){s=$.aa.F$.f.c +r=s.e +r.toString +A.wf(r).ark(s,a.a)}}} +A.YA.prototype={} +A.a0B.prototype={ +HB(a,b){var s +this.a2m(a,b) +s=this.cH$.i(0,b) +if(s!=null){s=s.a +if(!!s.fixed$length)A.T(A.a3("removeWhere")) +B.b.ue(s,new A.azb(a),!0)}}} +A.a4N.prototype={} +A.a4O.prototype={} +A.hT.prototype={ +ga5(){var s,r=$.aa.F$.z.i(0,this) +if(r instanceof A.fk){s=r.gcQ(r) +if(A.o(this).c.b(s))return s}return null}} +A.bp.prototype={ +k(a){var s,r=this,q=r.a +if(q!=null)s=" "+q +else s="" +if(A.t(r)===B.a4h)return"[GlobalKey#"+A.bh(r)+s+"]" +return"["+("#"+A.bh(r))+s+"]"}} +A.rF.prototype={ +j(a,b){if(b==null)return!1 +if(J.U(b)!==A.t(this))return!1 +return this.$ti.b(b)&&b.a===this.a}, +gt(a){return A.mo(this.a)}, +k(a){var s="GlobalObjectKey",r=B.d.fs(s,">")?B.d.P(s,0,-8):s +return"["+r+" "+("#"+A.bh(this.a))+"]"}} +A.i.prototype={ +dd(){var s=this.a +return s==null?"Widget":"Widget-"+s.k(0)}, +j(a,b){if(b==null)return!1 +return this.xG(0,b)}, +gt(a){return A.I.prototype.gt.call(this,this)}} +A.ao.prototype={ +bI(a){return new A.y1(this,B.a0)}} +A.X.prototype={ +bI(a){return A.b_W(this)}} +A.aAS.prototype={ +I(){return"_StateLifecycle."+this.b}} +A.a9.prototype={ +aB(){}, +aO(a){}, +a3(a){a.$0() +this.c.cO()}, +ez(){}, +bY(){}, +m(){}, +bx(){}} +A.aV.prototype={} +A.ez.prototype={ +bI(a){return new A.pj(this,B.a0,A.o(this).h("pj"))}} +A.b4.prototype={ +bI(a){return A.aXR(this)}} +A.av.prototype={ +aF(a,b){}, +vf(a){}} +A.PR.prototype={ +bI(a){return new A.PQ(this,B.a0)}} +A.b3.prototype={ +bI(a){return new A.Fv(this,B.a0)}} +A.fe.prototype={ +bI(a){return A.aYz(this)}} +A.yS.prototype={ +I(){return"_ElementLifecycle."+this.b}} +A.Z2.prototype={ +T7(a){a.b1(new A.awc(this,a)) +a.l_()}, +ajK(){var s,r,q,p=this +p.a=!0 +r=p.b +q=A.V(r,!0,A.o(r).c) +B.b.dK(q,A.aIl()) +s=q +r.a0(0) +try{r=s +new A.cO(r,A.as(r).h("cO<1>")).aa(0,p.gajI())}finally{p.a=!1}}} +A.awc.prototype={ +$1(a){this.a.T7(a)}, +$S:16} +A.a82.prototype={ +Lo(a){var s=this +if(a.as){s.e=!0 +return}if(!s.d&&s.a!=null){s.d=!0 +s.a.$0()}s.c.push(a) +a.as=!0}, +Y0(a){try{a.$0()}finally{}}, +uN(a,b){var s,r,q,p,o,n,m,l,k=this,j={},i=b==null +if(i&&k.c.length===0)return +try{k.d=!0 +if(!i){j.a=null +k.e=!1 +try{b.$0()}finally{}}i=k.c +B.b.dK(i,A.aIl()) +k.e=!1 +j.b=i.length +j.c=0 +for(o=0;o=i.length){m=k.e +m.toString}else m=!0 +if(m){B.b.dK(i,A.aIl()) +o=k.e=!1 +j.b=i.length +while(!0){m=j.c +if(!(m>0?i[m-1].Q:o))break +j.c=m-1}o=m}}}finally{for(i=k.c,o=i.length,l=0;l").N(d.z[1]),g=new A.bN(J.ap(g.a),g.b,d.h("bN<1,2>")),d=d.z[1];g.q();){m=g.a +if(m==null)m=d.a(m) +if(!a3.p(0,m)){m.a=null +m.qI() +l=k.f.b +if(m.r===B.dq){m.ez() +m.b1(A.aDQ())}l.b.D(0,m)}}return c}, +ed(a,b){var s,r,q,p=this +p.a=a +p.c=b +p.r=B.dq +s=a!=null +if(s){r=a.d +r===$&&A.b();++r}else r=1 +p.d=r +if(s)p.f=a.f +q=p.gao().a +if(q instanceof A.hT)p.f.z.n(0,q,p) +p.GM() +p.Hm()}, +bw(a,b){this.e=b}, +a_9(a,b){new A.ac_(b).$1(a)}, +wQ(a){this.c=a}, +Ti(a){var s=a+1,r=this.d +r===$&&A.b() +if(r")),s=s.c;p.q();){r=p.d;(r==null?s.a(r):r).y2.C(0,q)}q.x=null +q.r=B.a6_}, +l_(){var s=this,r=s.e,q=r==null?null:r.a +if(q instanceof A.hT){r=s.f.z +if(J.d(r.i(0,q),s))r.C(0,q)}s.y=s.e=null +s.r=B.BA}, +gv(a){var s=this.ga_() +if(s instanceof A.H)return s.gv(s) +return null}, +mM(a,b){var s=this.y;(s==null?this.y=A.ds(t.IS):s).D(0,a) +a.KK(this,b) +return t.WB.a(a.gao())}, +I4(a){return this.mM(a,null)}, +ap(a){var s=this.x,r=s==null?null:s.i(0,A.cf(a)) +if(r!=null)return a.a(this.mM(r,null)) +this.z=!0 +return null}, +CP(a){var s=this.fY(a) +s=s==null?null:s.gao() +return a.h("0?").a(s)}, +fY(a){var s=this.x +return s==null?null:s.i(0,A.cf(a))}, +Hm(){var s=this.a +this.b=s==null?null:s.b}, +GM(){var s=this.a +this.x=s==null?null:s.x}, +vD(a){var s,r=this.a +while(!0){s=r==null +if(!(!s&&A.t(r.gao())!==A.cf(a)))break +r=r.a}s=s?null:r.gao() +return a.h("0?").a(s)}, +vC(a){var s,r=this.a +for(;s=r==null,!s;){if(r instanceof A.fk&&a.b(r.gcQ(r)))break +r=r.a}t.lE.a(r) +s=s?null:r.gcQ(r) +return a.h("0?").a(s)}, +oy(a){var s=this.a +for(;s!=null;){if(s instanceof A.bi&&a.b(s.ga_()))return a.a(s.ga_()) +s=s.a}return null}, +jm(a){var s=this.a +while(!0){if(!(s!=null&&a.$1(s)))break +s=s.a}}, +bx(){this.cO()}, +er(a){var s=this.b +if(s!=null)s.er(a)}, +dd(){var s=this.e +s=s==null?null:s.dd() +return s==null?"#"+A.bh(this)+"(DEFUNCT)":s}, +cO(){var s=this +if(s.r!==B.dq)return +if(s.Q)return +s.Q=!0 +s.f.Lo(s)}, +C9(a){var s +if(this.r===B.dq)s=!this.Q&&!a +else s=!0 +if(s)return +try{this.jc()}finally{}}, +Z0(){return this.C9(!1)}, +jc(){this.Q=!1}, +$iM:1} +A.abX.prototype={ +$1(a){this.a.a=a}, +$S:16} +A.abV.prototype={ +$1(a){this.a.push(a) +return!0}, +$S:20} +A.abU.prototype={ +$1(a){var s=null +return A.k6("",a,!0,B.bl,s,!1,s,s,B.aR,s,!1,!0,!0,B.jU,s,t.h)}, +$S:502} +A.abY.prototype={ +$1(a){var s=this.a.p(0,a) +return s?null:a}, +$S:503} +A.abZ.prototype={ +$2(a,b){return new A.oQ(b,a,t.Bc)}, +$S:504} +A.ac_.prototype={ +$1(a){var s +a.wQ(this.a) +s=a.gCf() +if(s!=null)this.$1(s)}, +$S:16} +A.abS.prototype={ +$1(a){a.Ti(this.a)}, +$S:16} +A.abW.prototype={ +$1(a){a.qI()}, +$S:16} +A.abT.prototype={ +$1(a){a.uI(this.a)}, +$S:16} +A.Op.prototype={ +az(a){var s=this.d,r=new A.Ev(s,A.ag(t.T)) +r.aw() +r.a6o(s) +return r}} +A.Ba.prototype={ +gCf(){return this.ax}, +ed(a,b){this.DC(a,b) +this.F_()}, +F_(){this.Z0()}, +jc(){var s,r,q,p,o,n,m=this,l=null +try{l=m.bk() +m.gao()}catch(o){s=A.ax(o) +r=A.aZ(o) +m.ay=!1 +n=A.BS(A.aI2(A.bo("building "+m.k(0)),s,r,new A.a9G())) +l=n}finally{m.pt()}try{m.ax=m.dU(m.ax,l,m.c)}catch(o){q=A.ax(o) +p=A.aZ(o) +n=A.BS(A.aI2(A.bo("building "+m.k(0)),q,p,new A.a9H())) +l=n +m.ax=m.dU(null,l,m.c)}}, +b1(a){var s=this.ax +if(s!=null)a.$1(s)}, +j5(a){this.ax=null +this.ki(a)}} +A.a9G.prototype={ +$0(){var s=A.a([],t.E) +return s}, +$S:21} +A.a9H.prototype={ +$0(){var s=A.a([],t.E) +return s}, +$S:21} +A.y1.prototype={ +bk(){return t.Iz.a(this.gao()).H(this)}, +bw(a,b){this.pu(0,b) +this.C9(!0)}} +A.fk.prototype={ +bk(){return this.gcQ(this).H(this)}, +gcQ(a){var s=this.k3 +s.toString +return s}, +F_(){var s=this +s.gcQ(s).aB() +s.gcQ(s).bx() +s.a27()}, +jc(){var s=this +if(s.k4){s.gcQ(s).bx() +s.k4=!1}s.a28()}, +bw(a,b){var s,r=this +r.pu(0,b) +s=r.gcQ(r).a +s.toString +r.gcQ(r).a=t.d2.a(r.gao()) +r.gcQ(r).aO(s) +r.C9(!0)}, +bY(){var s=this +s.tp() +s.gcQ(s).bY() +s.cO()}, +ez(){this.gcQ(this).ez() +this.M2()}, +l_(){var s=this +s.tr() +s.gcQ(s).m() +s.k3=s.gcQ(s).c=null}, +mM(a,b){return this.tq(a,b)}, +I4(a){return this.mM(a,null)}, +bx(){this.DB() +this.k4=!0}} +A.Ec.prototype={ +bk(){return t.yH.a(this.gao()).b}, +bw(a,b){var s=this,r=t.yH.a(s.gao()) +s.pu(0,b) +s.wR(r) +s.C9(!0)}, +wR(a){this.nh(a)}} +A.pj.prototype={ +N4(a){this.b1(new A.aj8(a))}, +nh(a){var s=this.e +s.toString +this.N4(this.$ti.h("ez<1>").a(s))}} +A.aj8.prototype={ +$1(a){if(a instanceof A.bi)this.a.qg(a.ga_()) +else a.b1(this)}, +$S:16} +A.fS.prototype={ +GM(){var s=this,r=s.a,q=r==null?null:r.x +if(q==null)q=B.Vn +s.x=q.auF(0,A.t(s.gao()),s)}, +Lx(a,b){this.y2.n(0,a,b)}, +KK(a,b){this.Lx(a,null)}, +JJ(a,b){b.bx()}, +wR(a){if(t.WB.a(this.gao()).cs(a))this.a37(a)}, +nh(a){var s,r,q +for(s=this.y2,r=A.o(s),s=new A.z0(s,s.Eu(),r.h("z0<1>")),r=r.c;s.q();){q=s.d +this.JJ(a,q==null?r.a(q):q)}}} +A.bi.prototype={ +ga_(){var s=this.ax +s.toString +return s}, +gCf(){return null}, +aa7(){var s,r=this.a,q=r +while(!0){s=q==null +if(!(!s&&!(q instanceof A.bi)))break +r=s?null:q.a +q=r}return t.c_.a(q)}, +aa6(){var s=this.a,r=A.a([],t.OM),q=s +while(!0){if(!(q!=null&&!(q instanceof A.bi)))break +if(q instanceof A.pj)r.push(q) +s=q.a +q=s}return r}, +ed(a,b){var s,r=this +r.DC(a,b) +s=r.e +s.toString +r.ax=t.F5.a(s).az(r) +r.uI(b) +r.pt()}, +bw(a,b){this.pu(0,b) +this.R0()}, +jc(){this.R0()}, +R0(){var s=this,r=s.e +r.toString +t.F5.a(r).aF(s,s.ga_()) +s.pt()}, +ez(){this.M2()}, +l_(){var s=this,r=s.e +r.toString +t.F5.a(r) +s.tr() +r.vf(s.ga_()) +s.ax.m() +s.ax=null}, +wQ(a){var s,r=this,q=r.c +r.a2l(a) +s=r.ch +if(s!=null)s.k0(r.ga_(),q,r.c)}, +uI(a){var s,r,q,p,o,n=this +n.c=a +s=n.ch=n.aa7() +if(s!=null)s.jR(n.ga_(),a) +r=n.aa6() +for(s=r.length,q=t.IL,p=0;p"))}, +jR(a,b){var s=this.ga_(),r=b.a +s.J9(0,a,r==null?null:r.ga_())}, +k0(a,b,c){var s=this.ga_(),r=c.a +s.wc(a,r==null?null:r.ga_())}, +kW(a,b){this.ga_().C(0,a)}, +b1(a){var s,r,q,p,o=this.k4 +o===$&&A.b() +s=o.length +r=this.ok +q=0 +for(;q") +h.d=new A.aP(t.m.a(p),new A.e3(new A.fv(new A.hW(n,1,B.ae)),o,m),m.h("aP"))}}if(s)s=!(isFinite(q.a)&&isFinite(q.b)) +else s=!0 +h.w=s}, +a1H(a,b){var s,r,q,p=this +p.f=b +switch(b.a.a){case 1:s=p.e +s===$&&A.b() +s.saU(0,new A.kw(b.gjE(b),new A.b5(A.a([],t.x8),t.jc),0)) +r=!1 +break +case 0:s=p.e +s===$&&A.b() +s.saU(0,b.gjE(b)) +r=!0 +break +default:r=null}s=p.f +p.b=s.v0(s.gWW(),p.f.gCp()) +p.f.f.Dr(r) +p.f.r.Dq() +s=p.f +q=A.pe(p.ga7u(),!1) +p.r=q +s.b.B7(0,q) +q=p.e +q===$&&A.b() +q.by() +q=q.cC$ +q.b=!0 +q.a.push(p.gJU())}, +k(a){var s,r,q,p,o,n=this.f +n===$&&A.b() +s=n.d.b +r=n.e.b +n=n.f.a.c.k(0) +q=s.k(0) +p=r.k(0) +o=this.e +o===$&&A.b() +return"HeroFlight(for: "+n+", from: "+q+", to: "+p+" "+A.h(o.c)+")"}} +A.avX.prototype={ +$2(a,b){var s,r=null,q=this.a,p=q.b +p===$&&A.b() +s=q.e +s===$&&A.b() +s=p.a2(0,s.gl(s)) +s.toString +p=q.f +p===$&&A.b() +p=p.c +return A.E7(p.b-s.d,A.ws(A.fQ(!1,b,q.d),!0,r),r,r,s.a,p.a-s.c,s.b,r)}, +$S:522} +A.avY.prototype={ +$0(){var s,r=this.a +r.x=!1 +this.b.cx.K(0,this) +s=r.e +s===$&&A.b() +r.R_(s.gb6(s))}, +$S:0} +A.oL.prototype={ +Ap(){var s,r,q,p=$.l0() +A.w9(this) +if(p.a.get(this).cx.a)return +p=this.b +p=p.gaT(p) +s=A.o(p).h("ba") +r=A.V(new A.ba(p,new A.aez(),s),!1,s.h("n.E")) +for(p=r.length,q=0;q"),a=t.k2;s.q();){a0=s.gJ(s) +a1=a0.a +a2=a0.b +a3=l.i(0,a1) +a4=k.i(0,a1) +if(a3==null)a5=null +else{a0=r.id +if(a0==null)a0=A.T(A.Q("RenderBox was not laid out: "+A.t(r).k(0)+"#"+A.bh(r))) +a6=a3.a.f +if(a6==null)a6=a2.a.f +if(a6==null)a6=j +a5=new A.avW(b2,q,a0,b0,b1,a2,a3,p,a6,b3,a4!=null)}if(a5!=null&&a5.gck()){l.C(0,a1) +if(a4!=null){a0=a4.f +a0===$&&A.b() +a6=a0.a +if(a6===B.cY&&a5.a===B.cZ){a0=a4.e +a0===$&&A.b() +a0.saU(0,new A.kw(a5.gjE(a5),new A.b5(A.a([],h),g),0)) +a0=a4.b +a0===$&&A.b() +a4.b=new A.ES(a0,a0.b,a0.a,a)}else{a6=a6===B.cZ&&a5.a===B.cY +a7=a4.e +if(a6){a7===$&&A.b() +a0=a5.gjE(a5) +a6=a4.f +a6=a6.gjE(a6) +a6=a6.gl(a6) +a7.saU(0,new A.aP(c.a(a0),new A.ar(a6,1,d),b)) +a0=a4.f +a6=a0.f +a7=a5.r +if(a6!==a7){a6.qT(!0) +a7.Dq() +a0=a4.f +a6=a4.b +a6===$&&A.b() +a4.b=a0.v0(a6.b,a5.gCp())}else{a6=a4.b +a6===$&&A.b() +a4.b=a0.v0(a6.b,a6.a)}}else{a6=a4.b +a6===$&&A.b() +a7===$&&A.b() +a4.b=a0.v0(a6.a2(0,a7.gl(a7)),a5.gCp()) +a4.c=null +a0=a5.a +a6=a4.e +if(a0===B.cZ)a6.saU(0,new A.kw(a5.gjE(a5),new A.b5(A.a([],h),g),0)) +else a6.saU(0,a5.gjE(a5)) +a4.f.f.qT(!0) +a4.f.r.qT(!0) +a5.f.Dr(a0===B.cY) +a5.r.Dq() +a0=a4.r.f.ga5() +if(a0!=null)a0.Qn()}}a4.f=a5}else{a0=new A.nQ(i,B.ea) +a6=A.a([],h) +a7=new A.b5(a6,g) +a8=new A.Eb(a7,new A.b5(A.a([],f),e),0) +a8.a=B.K +a8.b=0 +a8.by() +a7.b=!0 +a6.push(a0.gPq()) +a0.e=a8 +a0.a1H(0,a5) +k.n(0,a1,a0)}}else if(a4!=null)a4.w=!0}for(s=J.ap(l.gaT(l));s.q();)s.gJ(s).Wu()}, +abN(a){var s=a.f +s===$&&A.b() +this.b.C(0,s.f.a.c)}, +a94(a,b,c,d,e){var s=t.rA.a(e.gao()),r=A.d_(e,null),q=A.d_(d,null) +if(r==null||q==null)return s.e +return A.oh(b,new A.aex(r,c,q.r,r.r,b,s),null)}, +m(){var s,r,q,p,o,n,m,l +for(s=this.b,s=s.gaT(s),r=A.o(s),r=r.h("@<1>").N(r.z[1]),s=new A.bN(J.ap(s.a),s.b,r.h("bN<1,2>")),r=r.z[1];s.q();){q=s.a +if(q==null)q=r.a(q) +p=q.r +if(p!=null){p.eg(0) +q.r.m() +q.r=null +p=q.e +p===$&&A.b() +p.saU(0,null) +p=q.e +o=q.gJU() +n=p.cC$ +n.b=!0 +m=n.c +if(m===$){l=A.ds(n.$ti.c) +n.c!==$&&A.ay() +n.c=l +m=l}if(m.a>0){m.b=m.c=m.d=m.e=null +m.a=0}if(B.b.C(n.a,o))p.lu() +p=q.e +q=q.gPq() +o=p.cM$ +o.b=!0 +m=o.c +if(m===$){l=A.ds(o.$ti.c) +o.c!==$&&A.ay() +o.c=l +m=l}if(m.a>0){m.b=m.c=m.d=m.e=null +m.a=0}if(B.b.C(o.a,q))p.lu()}}}} +A.aez.prototype={ +$1(a){var s=a.f +s===$&&A.b() +if(s.y)if(s.a===B.cZ){s=a.e +s===$&&A.b() +s=s.gb6(s)===B.K}else s=!1 +else s=!1 +return s}, +$S:525} +A.aey.prototype={ +$1(a){var s=this,r=s.b +if(r.a==null||s.c.a==null)return +s.a.So(r,s.c,s.d,s.e)}, +$S:3} +A.aex.prototype={ +$2(a,b){var s=this,r=s.c,q=s.d,p=s.e +r=s.b===B.cY?new A.BI(r,q).a2(0,p.gl(p)):new A.BI(q,r).a2(0,p.gl(p)) +return A.pb(s.f.e,s.a.HN(r),null)}, +$S:526} +A.oN.prototype={ +H(a){var s,r,q,p,o,n,m,l,k,j,i,h,g=this,f=null,e=a.ap(t.I) +e.toString +s=e.w +r=A.aG5(a) +q=g.d +if(q==null)q=r.a +p=r.b +o=r.c +n=r.d +m=r.e +l=r.gdH(r) +if(l==null)l=1 +k=g.x +if(k==null){e=r.f +e.toString +k=e}if(l!==1)k=A.C(B.c.an(255*((k.gl(k)>>>24&255)/255*l)),k.gl(k)>>>16&255,k.gl(k)>>>8&255,k.gl(k)&255) +e=g.c +j=A.dK(e.a) +i=A.a([],t.uf) +if(p!=null)i.push(new A.oI("FILL",p)) +if(o!=null)i.push(new A.oI("wght",o)) +if(n!=null)i.push(new A.oI("GRAD",n)) +if(m!=null)i.push(new A.oI("opsz",m)) +h=A.aGQ(f,f,B.ZF,f,f,!0,f,A.c0(f,f,A.bL(f,f,k,f,f,f,f,f,e.b,f,f,q,f,i,f,f,f,!1,f,f,f,f,e.c,r.w,f,f),j),B.az,s,f,B.ab,B.a_) +if(e.d)switch(s.a){case 0:e=new A.bd(new Float64Array(16)) +e.de() +e.hN(0,-1,1,1) +h=A.ys(B.ah,h,f,f,e,!1) +break +case 1:break}return A.cH(f,f,new A.oC(!0,A.eC(A.jh(h,f,f),q,q),f),!1,f,!1,!1,f,f,f,f,g.z,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f)}} +A.ea.prototype={ +j(a,b){var s=this +if(b==null)return!1 +if(J.U(b)!==A.t(s))return!1 +return b instanceof A.ea&&b.a===s.a&&b.b===s.b&&b.c==s.c&&b.d===s.d&&A.dn(null,null)}, +gt(a){var s=this +return A.N(s.a,s.b,s.c,s.d,A.bv(B.QG),B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a){return"IconData(U+"+B.d.lO(B.f.iv(this.a,16).toUpperCase(),5,"0")+")"}} +A.rM.prototype={ +cs(a){return!this.w.j(0,a.w)}, +rS(a,b,c){return A.Pn(c,this.w,null)}} +A.afs.prototype={ +$1(a){return A.Pn(this.c,A.aLj(a).cl(this.b),this.a)}, +$S:527} +A.dt.prototype={ +v_(a,b,c,d,e,f,g,h){var s=this,r=g==null?s.a:g,q=b==null?s.b:b,p=h==null?s.c:h,o=c==null?s.d:c,n=e==null?s.e:e,m=a==null?s.f:a,l=d==null?s.gdH(s):d +return new A.dt(r,q,p,o,n,m,l,f==null?s.w:f)}, +ey(a){return this.v_(a,null,null,null,null,null,null,null)}, +cl(a){return this.v_(a.f,a.b,a.d,a.gdH(a),a.e,a.w,a.a,a.c)}, +U(a){return this}, +gdH(a){var s=this.r +if(s==null)s=null +else s=A.O(s,0,1) +return s}, +j(a,b){var s=this +if(b==null)return!1 +if(J.U(b)!==A.t(s))return!1 +return b instanceof A.dt&&b.a==s.a&&b.b==s.b&&b.c==s.c&&b.d==s.d&&b.e==s.e&&J.d(b.f,s.f)&&b.gdH(b)==s.gdH(s)&&A.dn(b.w,s.w)}, +gt(a){var s=this,r=s.gdH(s),q=s.w +q=q==null?null:A.bv(q) +return A.N(s.a,s.b,s.c,s.d,s.e,s.f,r,q,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}} +A.YZ.prototype={} +A.wt.prototype={ +ac(){return new A.I2(B.j)}} +A.I2.prototype={ +aB(){var s=this +s.aR() +$.aa.X$.push(s) +s.z=new A.NV(s,t.uZ)}, +m(){var s,r=this +B.b.C($.aa.X$,r) +r.aj0() +s=r.at +if(s!=null)s.m() +s=r.z +s===$&&A.b() +s.a=null +r.Ga(null) +r.aN()}, +bx(){var s,r=this +r.ajU() +r.Rv() +s=r.c +s.toString +if(A.aHb(s))r.aes() +else r.Sv(!0) +r.dr()}, +aO(a){var s=this +s.bb(a) +if(s.r)s.a.toString +if(!s.a.c.j(0,a.c))s.Rv()}, +ajU(){var s=this.c +s.toString +s=A.d_(s,B.a6p) +s=s==null?null:s.Q +if(s==null){s=$.Tt.AB$ +s===$&&A.b() +s=(s.a&2)!==0}this.w=s}, +Rv(){var s,r,q,p,o=this,n=o.z +n===$&&A.b() +s=o.a +r=s.c +q=o.c +q.toString +p=s.r +s=s.w +o.akg(new A.F3(n,r,t.JE).U(A.aDy(q,new A.G(p,s))))}, +aaH(a){var s=this,r=s.ax +if(r==null||a){s.as=s.Q=null +s.a.toString +r=s.ax=new A.jm(s.gac1(),null,null)}r.toString +return r}, +yi(){return this.aaH(!1)}, +ac2(a,b){this.a3(new A.aw8(this,a,b))}, +Ga(a){var s=this.e +$.c_.rx$.push(new A.aw9(s)) +this.e=a}, +akg(a){var s,r,q=this,p=q.d +if(p==null)s=null +else{s=p.a +if(s==null)s=p}r=a.a +if(s===(r==null?a:r))return +if(q.r){p.toString +p.K(0,q.yi())}q.a.toString +q.a3(new A.awa(q)) +q.a3(new A.awb(q)) +q.d=a +if(q.r)a.Z(0,q.yi())}, +aes(){var s,r=this +if(r.r)return +s=r.d +s.toString +s.Z(0,r.yi()) +s=r.at +if(s!=null)s.m() +r.at=null +r.r=!0}, +Sv(a){var s,r,q=this +if(!q.r)return +if(a)if(q.at==null){s=q.d +s=(s==null?null:s.a)!=null}else s=!1 +else s=!1 +if(s){s=q.d.a +if(s.x)A.T(A.Q(u.V)) +r=new A.ww(s) +r.xN(s) +q.at=r}s=q.d +s.toString +s.K(0,q.yi()) +q.r=!1}, +aj0(){return this.Sv(!1)}, +H(a){var s,r,q,p,o,n,m,l=this,k=null +if(l.Q!=null)l.a.toString +s=l.e +r=s==null +q=r?k:s.a +p=r?k:s.c +o=l.a +n=o.r +o=o.w +s=r?k:s.b +if(s==null)s=1 +r=l.w +r===$&&A.b() +m=new A.S0(q,p,n,o,s,k,k,B.hc,k,k,B.ah,B.ew,k,!1,r,!1,k) +m=A.cH(k,k,m,!1,k,!1,!1,k,k,k,!0,"",k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k) +return m}} +A.aw8.prototype={ +$0(){var s,r=this.a +r.Ga(this.b) +r.as=r.Q=r.f=null +s=r.x +r.x=s==null?0:s+1 +r.y=B.cx.nw(r.y,this.c)}, +$S:0} +A.aw9.prototype={ +$1(a){var s=this.a +if(s!=null)s.a.m() +return null}, +$S:3} +A.awa.prototype={ +$0(){this.a.Ga(null)}, +$S:0} +A.awb.prototype={ +$0(){var s=this.a +s.x=s.f=null +s.y=!1}, +$S:0} +A.a4B.prototype={} +A.qU.prototype={ +d_(a){var s=A.oq(this.a,this.b,a) +s.toString +return s}} +A.mG.prototype={ +d_(a){var s=A.aad(this.a,this.b,a) +s.toString +return s}} +A.BI.prototype={ +d_(a){var s=A.BJ(this.a,this.b,a) +s.toString +return s}} +A.oz.prototype={ +d_(a){var s=A.ev(this.a,this.b,a) +s.toString +return s}} +A.qR.prototype={ +d_(a){return A.qS(this.a,this.b,a)}} +A.Mo.prototype={ +d_(a){return A.op(this.a,this.b,a)}} +A.tm.prototype={ +d_(b0){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,a2,a3,a4=new A.eG(new Float64Array(3)),a5=new A.eG(new Float64Array(3)),a6=A.aMA(),a7=A.aMA(),a8=new A.eG(new Float64Array(3)),a9=new A.eG(new Float64Array(3)) +this.a.VS(a4,a6,a8) +this.b.VS(a5,a7,a9) +s=1-b0 +r=a4.kg(s).R(0,a5.kg(b0)) +q=a6.kg(s).R(0,a7.kg(b0)) +p=new Float64Array(4) +o=new A.ps(p) +o.aW(q) +o.wf(0) +n=a8.kg(s).R(0,a9.kg(b0)) +s=new Float64Array(16) +q=new A.bd(s) +m=p[0] +l=p[1] +k=p[2] +j=p[3] +i=m+m +h=l+l +g=k+k +f=m*i +e=m*h +d=m*g +c=l*h +b=l*g +a=k*g +a0=j*i +a1=j*h +a2=j*g +a3=r.a +s[0]=1-(c+a) +s[1]=e+a2 +s[2]=d-a1 +s[3]=0 +s[4]=e-a2 +s[5]=1-(f+a) +s[6]=b+a0 +s[7]=0 +s[8]=d+a1 +s[9]=b-a0 +s[10]=1-(f+c) +s[11]=0 +s[12]=a3[0] +s[13]=a3[1] +s[14]=a3[2] +s[15]=1 +q.aV(0,n) +return q}} +A.m0.prototype={ +d_(a){var s=A.bb(this.a,this.b,a) +s.toString +return s}} +A.Pt.prototype={} +A.wx.prototype={ +gnK(){var s,r=this,q=r.d +if(q===$){s=A.c5(null,r.a.d,null,null,r) +r.d!==$&&A.ay() +r.d=s +q=s}return q}, +gds(){var s,r=this,q=r.e +if(q===$){s=r.gnK() +q=r.e=A.dc(r.a.c,s,null)}return q}, +aB(){var s,r=this +r.aR() +s=r.gnK() +s.by() +s=s.cM$ +s.b=!0 +s.a.push(new A.afO(r)) +r.NY() +r.W6()}, +aO(a){var s,r=this +r.bb(a) +if(r.a.c!==a.c){r.gds().m() +s=r.gnK() +r.e=A.dc(r.a.c,s,null)}r.gnK().e=r.a.d +if(r.NY()){r.ij(new A.afN(r)) +s=r.gnK() +s.sl(0,0) +s.c7(0) +r.W6()}}, +m(){this.gds().m() +this.gnK().m() +this.a4y()}, +aki(a,b){var s +if(a==null)return +s=this.gds() +a.sHo(a.a2(0,s.gl(s))) +a.sbi(0,b)}, +NY(){var s={} +s.a=!1 +this.ij(new A.afM(s,this)) +return s.a}, +W6(){}} +A.afO.prototype={ +$1(a){switch(a.a){case 3:this.a.a.toString +break +case 0:case 1:case 2:break}}, +$S:6} +A.afN.prototype={ +$3(a,b,c){this.a.aki(a,b) +return a}, +$S:174} +A.afM.prototype={ +$3(a,b,c){var s +if(b!=null){if(a==null)a=c.$1(b) +s=a.b +if(!J.d(b,s==null?a.a:s))this.a.a=!0 +else if(a.b==null)a.sbi(0,a.a)}else a=null +return a}, +$S:174} +A.qy.prototype={ +aB(){this.a2u() +var s=this.gnK() +s.by() +s=s.cC$ +s.b=!0 +s.a.push(this.gab2())}, +ab3(){this.a3(new A.a6p())}} +A.a6p.prototype={ +$0(){}, +$S:0} +A.A5.prototype={ +ac(){return new A.VJ(null,null,B.j)}} +A.VJ.prototype={ +ij(a){var s,r,q,p=this,o=null,n=p.CW +p.a.toString +s=t.ZU +p.CW=s.a(a.$3(n,o,new A.asD())) +n=t.Om +p.cx=n.a(a.$3(p.cx,p.a.x,new A.asE())) +r=t.ms +p.cy=r.a(a.$3(p.cy,p.a.y,new A.asF())) +q=p.db +p.a.toString +p.db=r.a(a.$3(q,o,new A.asG())) +p.dx=t.YY.a(a.$3(p.dx,p.a.Q,new A.asH())) +p.dy=n.a(a.$3(p.dy,p.a.as,new A.asI())) +n=p.fr +p.a.toString +p.fr=t.ka.a(a.$3(n,o,new A.asJ())) +n=p.fx +p.a.toString +p.fx=s.a(a.$3(n,o,new A.asK()))}, +H(a){var s,r,q,p,o,n,m,l=this,k=null,j=l.gds(),i=l.CW +i=i==null?k:i.a2(0,j.gl(j)) +s=l.cx +s=s==null?k:s.a2(0,j.gl(j)) +r=l.cy +r=r==null?k:r.a2(0,j.gl(j)) +q=l.db +q=q==null?k:q.a2(0,j.gl(j)) +p=l.dx +p=p==null?k:p.a2(0,j.gl(j)) +o=l.dy +o=o==null?k:o.a2(0,j.gl(j)) +n=l.fr +n=n==null?k:n.a2(0,j.gl(j)) +m=l.fx +m=m==null?k:m.a2(0,j.gl(j)) +return A.bP(i,l.a.r,B.o,k,p,r,q,k,k,o,s,n,m,k)}} +A.asD.prototype={ +$1(a){return new A.og(t.pC.a(a),null)}, +$S:173} +A.asE.prototype={ +$1(a){return new A.oz(t.A0.a(a),null)}, +$S:172} +A.asF.prototype={ +$1(a){return new A.mG(t.Hw.a(a),null)}, +$S:171} +A.asG.prototype={ +$1(a){return new A.mG(t.Hw.a(a),null)}, +$S:171} +A.asH.prototype={ +$1(a){return new A.qU(t.k.a(a),null)}, +$S:533} +A.asI.prototype={ +$1(a){return new A.oz(t.A0.a(a),null)}, +$S:172} +A.asJ.prototype={ +$1(a){return new A.tm(t.xV.a(a),null)}, +$S:534} +A.asK.prototype={ +$1(a){return new A.og(t.pC.a(a),null)}, +$S:173} +A.A9.prototype={ +ac(){return new A.VM(null,null,B.j)}} +A.VM.prototype={ +ij(a){var s,r=this,q=null,p=t.ir +r.CW=p.a(a.$3(r.CW,r.a.w,new A.asQ())) +r.cx=p.a(a.$3(r.cx,r.a.x,new A.asR())) +s=r.cy +r.a.toString +r.cy=p.a(a.$3(s,q,new A.asS())) +s=r.db +r.a.toString +r.db=p.a(a.$3(s,q,new A.asT())) +s=r.dx +r.a.toString +r.dx=p.a(a.$3(s,q,new A.asU())) +s=r.dy +r.a.toString +r.dy=p.a(a.$3(s,q,new A.asV()))}, +H(a){var s,r,q,p,o,n,m=this,l=null,k=m.CW +if(k==null)k=l +else{s=m.gds() +s=k.a2(0,s.gl(s)) +k=s}s=m.cx +if(s==null)s=l +else{r=m.gds() +r=s.a2(0,r.gl(r)) +s=r}r=m.cy +if(r==null)r=l +else{q=m.gds() +q=r.a2(0,q.gl(q)) +r=q}q=m.db +if(q==null)q=l +else{p=m.gds() +p=q.a2(0,p.gl(p)) +q=p}p=m.dx +if(p==null)p=l +else{o=m.gds() +o=p.a2(0,o.gl(o)) +p=o}o=m.dy +if(o==null)o=l +else{n=m.gds() +n=o.a2(0,n.gl(n)) +o=n}return A.E7(q,m.a.r,o,l,k,r,s,p)}} +A.asQ.prototype={ +$1(a){return new A.ar(A.mk(a),null,t.Y)}, +$S:32} +A.asR.prototype={ +$1(a){return new A.ar(A.mk(a),null,t.Y)}, +$S:32} +A.asS.prototype={ +$1(a){return new A.ar(A.mk(a),null,t.Y)}, +$S:32} +A.asT.prototype={ +$1(a){return new A.ar(A.mk(a),null,t.Y)}, +$S:32} +A.asU.prototype={ +$1(a){return new A.ar(A.mk(a),null,t.Y)}, +$S:32} +A.asV.prototype={ +$1(a){return new A.ar(A.mk(a),null,t.Y)}, +$S:32} +A.A6.prototype={ +ac(){return new A.VK(null,null,B.j)}} +A.VK.prototype={ +ij(a){this.CW=t.Dh.a(a.$3(this.CW,this.a.w,new A.asL()))}, +H(a){var s,r=this.CW +r.toString +s=this.gds() +s=r.a2(0,s.gl(s)) +return A.hh(this.a.r,null,B.aK,!0,s,null,null,B.a_)}} +A.asL.prototype={ +$1(a){return new A.m0(t.em.a(a),null)}, +$S:535} +A.A8.prototype={ +ac(){return new A.VL(null,null,B.j)}} +A.VL.prototype={ +ij(a){var s=this,r=s.CW +s.a.toString +s.CW=t.eJ.a(a.$3(r,B.H,new A.asM())) +s.cx=t.ir.a(a.$3(s.cx,s.a.z,new A.asN())) +r=t.YJ +s.cy=r.a(a.$3(s.cy,s.a.Q,new A.asO())) +s.db=r.a(a.$3(s.db,s.a.at,new A.asP()))}, +H(a){var s,r,q,p,o,n=this,m=n.a,l=m.w +m=m.x +s=n.CW +s.toString +r=n.gds() +r=s.a2(0,r.gl(r)) +s=n.cx +s.toString +q=n.gds() +q=s.a2(0,q.gl(q)) +s=n.a.Q +p=n.db +p.toString +o=n.gds() +o=p.a2(0,o.gl(o)) +o.toString +return new A.Rr(l,m,r,q,s,o,n.a.r,null)}} +A.asM.prototype={ +$1(a){return new A.qR(t.m_.a(a),null)}, +$S:536} +A.asN.prototype={ +$1(a){return new A.ar(A.mk(a),null,t.Y)}, +$S:32} +A.asO.prototype={ +$1(a){return new A.f4(t.n8.a(a),null)}, +$S:89} +A.asP.prototype={ +$1(a){return new A.f4(t.n8.a(a),null)}, +$S:89} +A.z4.prototype={ +m(){var s=this,r=s.c0$ +if(r!=null)r.K(0,s.gjy()) +s.c0$=null +s.aN()}, +bY(){this.dq() +this.cW() +this.jz()}} +A.lq.prototype={ +bI(a){return new A.CB(A.jk(null,null,null,t.h,t.X),this,B.a0,A.o(this).h("CB"))}} +A.CB.prototype={ +KK(a,b){var s=this.y2,r=this.$ti,q=r.h("bV<1>?").a(s.i(0,a)),p=q==null +if(!p&&q.ga7(q))return +if(b==null)s.n(0,a,A.ds(r.c)) +else{p=p?A.ds(r.c):q +p.D(0,r.c.a(b)) +s.n(0,a,p)}}, +JJ(a,b){var s,r=this.$ti,q=r.h("bV<1>?").a(this.y2.i(0,b)) +if(q==null)return +if(!q.ga7(q)){s=this.e +s.toString +s=r.h("lq<1>").a(s).a_8(a,q) +r=s}else r=!0 +if(r)b.bx()}} +A.jn.prototype={ +cs(a){return a.f!==this.f}, +bI(a){var s=new A.z5(A.jk(null,null,null,t.h,t.X),this,B.a0,A.o(this).h("z5")) +this.f.Z(0,s.gFo()) +return s}} +A.z5.prototype={ +bw(a,b){var s,r,q=this,p=q.e +p.toString +s=q.$ti.h("jn<1>").a(p).f +r=b.f +if(s!==r){p=q.gFo() +s.K(0,p) +r.Z(0,p)}q.Mk(0,b)}, +bk(){var s,r=this +if(r.bM){s=r.e +s.toString +r.M5(r.$ti.h("jn<1>").a(s)) +r.bM=!1}return r.Mj()}, +adJ(){this.bM=!0 +this.cO()}, +nh(a){this.M5(a) +this.bM=!1}, +l_(){var s=this,r=s.e +r.toString +s.$ti.h("jn<1>").a(r).f.K(0,s.gFo()) +s.tr()}} +A.dC.prototype={} +A.afS.prototype={ +$1(a){var s,r,q +if(a.j(0,this.a))return!1 +if(a instanceof A.fS&&a.gao() instanceof A.dC){s=t.og.a(a.gao()) +r=A.t(s) +q=this.c +if(!q.p(0,r)){q.D(0,r) +this.d.push(s)}}return!0}, +$S:20} +A.MB.prototype={} +A.H7.prototype={ +H(a){var s,r,q,p=this.d +for(s=this.c,r=s.length,q=0;q"))}} +A.z7.prototype={ +ga_(){return this.$ti.h("iY<1,r>").a(A.bi.prototype.ga_.call(this))}, +b1(a){var s=this.k4 +if(s!=null)a.$1(s)}, +j5(a){this.k4=null +this.ki(a)}, +ed(a,b){var s=this +s.pA(a,b) +s.$ti.h("iY<1,r>").a(A.bi.prototype.ga_.call(s)).KJ(s.gQe())}, +bw(a,b){var s,r=this +r.nF(0,b) +s=r.$ti.h("iY<1,r>") +s.a(A.bi.prototype.ga_.call(r)).KJ(r.gQe()) +s=s.a(A.bi.prototype.ga_.call(r)) +s.AH$=!0 +s.a8()}, +jc(){var s=this.$ti.h("iY<1,r>").a(A.bi.prototype.ga_.call(this)) +s.AH$=!0 +s.a8() +this.DI()}, +l_(){this.$ti.h("iY<1,r>").a(A.bi.prototype.ga_.call(this)).KJ(null) +this.Ms()}, +aeg(a){this.f.uN(this,new A.awz(this,a))}, +jR(a,b){this.$ti.h("iY<1,r>").a(A.bi.prototype.ga_.call(this)).saP(a)}, +k0(a,b,c){}, +kW(a,b){this.$ti.h("iY<1,r>").a(A.bi.prototype.ga_.call(this)).saP(null)}} +A.awz.prototype={ +$0(){var s,r,q,p,o,n,m,l,k=this,j=null +try{o=k.a +n=o.e +n.toString +j=o.$ti.h("ov<1>").a(n).c.$2(o,k.b) +o.e.toString}catch(m){s=A.ax(m) +r=A.aZ(m) +l=A.BS(A.aPO(A.bo("building "+k.a.e.k(0)),s,r,new A.awA())) +j=l}try{o=k.a +o.k4=o.dU(o.k4,j,null)}catch(m){q=A.ax(m) +p=A.aZ(m) +o=k.a +l=A.BS(A.aPO(A.bo("building "+o.e.k(0)),q,p,new A.awB())) +j=l +o.k4=o.dU(null,j,o.c)}}, +$S:0} +A.awA.prototype={ +$0(){var s=A.a([],t.E) +return s}, +$S:21} +A.awB.prototype={ +$0(){var s=A.a([],t.E) +return s}, +$S:21} +A.iY.prototype={ +KJ(a){if(J.d(a,this.IF$))return +this.IF$=a +this.a8()}} +A.n0.prototype={ +az(a){var s=new A.J0(null,!0,null,null,A.ag(t.T)) +s.aw() +return s}} +A.J0.prototype={ +bp(a){return 0}, +bo(a){return 0}, +c5(a){return B.Q}, +bA(){var s=this,r=t.k,q=r.a(A.r.prototype.gW.call(s)) +if(s.AH$||!r.a(A.r.prototype.gW.call(s)).j(0,s.WE$)){s.WE$=r.a(A.r.prototype.gW.call(s)) +s.AH$=!1 +r=s.IF$ +r.toString +s.B9(r,A.o(s).h("iY.0"))}r=s.fr$ +if(r!=null){r.bJ(q,!0) +r=s.fr$ +s.id=q.bf(r.gv(r))}else s.id=new A.G(A.O(1/0,q.a,q.b),A.O(1/0,q.c,q.d))}, +h6(a){var s=this.fr$ +if(s!=null)return s.m7(a) +return this.xJ(a)}, +cE(a,b){var s=this.fr$ +s=s==null?null:s.cD(a,b) +return s===!0}, +am(a,b){var s=this.fr$ +if(s!=null)a.ef(s,b)}} +A.a4S.prototype={ +ah(a){var s +this.dg(a) +s=this.fr$ +if(s!=null)s.ah(a)}, +ad(a){var s +this.dh(0) +s=this.fr$ +if(s!=null)s.ad(0)}} +A.a4T.prototype={} +A.zl.prototype={} +A.aD_.prototype={ +$1(a){return this.a.a=a}, +$S:129} +A.aD0.prototype={ +$1(a){return a.b}, +$S:537} +A.aD1.prototype={ +$1(a){var s,r,q,p +for(s=J.aF(a),r=this.a,q=this.b,p=0;ps.b?B.l9:B.l8}, +qB(a,b,c,d){var s=this,r=b==null?s.gbK():b,q=a==null?s.r:a,p=d==null?s.w:d,o=c==null?s.f:c +return new A.Dd(s.a,s.b,r,s.e,o,q,p,s.x,!1,s.z,s.Q,s.as,s.at,s.ax,s.ay,s.ch,s.CW,s.cx)}, +anr(a,b){return this.qB(a,null,null,b)}, +Vk(a){return this.qB(null,a,null,null)}, +and(a){return this.qB(null,null,a,null)}, +anq(a,b){return this.qB(a,null,b,null)}, +HN(a){return this.qB(a,null,null,null)}, +ans(a,b){return this.qB(null,null,a,b)}, +Ki(a,b,c,d){var s,r,q,p,o,n,m=this,l=null +if(!(b||d||c||a))return m +s=m.r +r=b?0:l +q=d?0:l +p=c?0:l +r=s.mI(a?0:l,r,p,q) +q=m.w +p=b?Math.max(0,q.a-s.a):l +o=d?Math.max(0,q.b-s.b):l +n=c?Math.max(0,q.c-s.c):l +return m.anr(r,q.mI(a?Math.max(0,q.d-s.d):l,p,n,o))}, +auT(a){return this.Ki(!1,!1,!1,a)}, +auU(a){var s=this,r=null,q=s.w,p=s.f,o=Math.max(0,q.d-p.d) +q=q.mI(o,r,r,r) +return s.ans(p.mI(0,r,r,r),q)}, +j(a,b){var s=this +if(b==null)return!1 +if(J.U(b)!==A.t(s))return!1 +return b instanceof A.Dd&&b.a.j(0,s.a)&&b.b===s.b&&b.gbK().a===s.gbK().a&&b.e===s.e&&b.r.j(0,s.r)&&b.w.j(0,s.w)&&b.f.j(0,s.f)&&b.x.j(0,s.x)&&b.as===s.as&&b.at===s.at&&b.ax===s.ax&&b.Q===s.Q&&b.z===s.z&&b.ay===s.ay&&b.ch===s.ch&&b.CW.j(0,s.CW)&&A.dn(b.cx,s.cx)}, +gt(a){var s=this +return A.N(s.a,s.b,s.gbK().a,s.e,s.r,s.w,s.f,!1,s.as,s.at,s.ax,s.Q,s.z,s.ay,s.ch,s.CW,A.bv(s.cx),B.a,B.a,B.a)}, +k(a){var s=this +return"MediaQueryData("+B.b.c_(A.a(["size: "+s.a.k(0),"devicePixelRatio: "+B.c.af(s.b,1),"textScaler: "+s.gbK().k(0),"platformBrightness: "+s.e.k(0),"padding: "+s.r.k(0),"viewPadding: "+s.w.k(0),"viewInsets: "+s.f.k(0),"systemGestureInsets: "+s.x.k(0),"alwaysUse24HourFormat: false","accessibleNavigation: "+s.z,"highContrast: "+s.as,"onOffSwitchLabels: "+s.at,"disableAnimations: "+s.ax,"invertColors: "+s.Q,"boldText: "+s.ay,"navigationMode: "+s.ch.b,"gestureSettings: "+s.CW.k(0),"displayFeatures: "+A.h(s.cx)],t.s),", ")+")"}} +A.n9.prototype={ +cs(a){return!this.w.j(0,a.w)}, +a_8(a8,a9){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,a2,a3,a4,a5,a6,a7 +for(s=a9.gab(a9),r=this.w,q=a8.w,p=r.cx!==q.cx,o=r.CW,n=q.CW,m=r.ch!==q.ch,l=r.ay!==q.ay,k=r.ax!==q.ax,j=r.at!==q.at,i=r.as!==q.as,h=r.Q!==q.Q,g=r.z!==q.z,f=r.w,e=q.w,d=r.x,c=q.x,b=r.f,a=q.f,a0=r.r,a1=q.r,a2=r.e!==q.e,a3=r.b!==q.b,a4=r.a,a5=q.a,a6=a4.a,a4=a4.b;s.q();){a7=s.gJ(s) +if(a7 instanceof A.f_)switch(a7.a){case 0:if(!(a5.a===a6&&a5.b===a4))return!0 +break +case 1:a7=a6>a4?B.l9:B.l8 +if(a7!==(a5.a>a5.b?B.l9:B.l8))return!0 +break +case 2:if(a3)return!0 +break +case 3:if(r.gbK().a!==q.gbK().a)return!0 +break +case 4:if(!r.gbK().j(0,q.gbK()))return!0 +break +case 5:if(a2)return!0 +break +case 6:if(!a0.j(0,a1))return!0 +break +case 7:if(!b.j(0,a))return!0 +break +case 8:if(!d.j(0,c))return!0 +break +case 9:if(!f.j(0,e))return!0 +break +case 10:break +case 11:if(g)return!0 +break +case 12:if(h)return!0 +break +case 13:if(i)return!0 +break +case 14:if(j)return!0 +break +case 15:if(k)return!0 +break +case 16:if(l)return!0 +break +case 17:if(m)return!0 +break +case 18:if(!o.j(0,n))return!0 +break +case 19:if(p)return!0 +break}}return!1}} +A.ahD.prototype={ +$1(a){return A.pb(this.a,A.bt(a,null,t.w).w.Vk(B.ab),null)}, +$S:169} +A.ahC.prototype={ +$1(a){var s=A.bt(a,null,t.w).w +return A.pb(this.c,s.Vk(s.gbK().V_(0,this.b,this.a)),null)}, +$S:169} +A.ait.prototype={ +I(){return"NavigationMode."+this.b}} +A.It.prototype={ +ac(){return new A.ZS(B.j)}} +A.ZS.prototype={ +aB(){this.aR() +$.aa.X$.push(this)}, +bx(){this.dr() +this.ak0() +this.us()}, +aO(a){var s,r=this +r.bb(a) +s=r.a +s.toString +if(r.e==null||a.c!==s.c)r.us()}, +ak0(){var s,r=this +r.a.toString +s=r.c +s.toString +s=A.d_(s,null) +r.d=s +r.e=null}, +us(){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d=this,c=null,b=d.a.c,a=d.d,a0=b.gjd(),a1=$.c4(),a2=a1.d +if(a2==null){a2=self.window.devicePixelRatio +if(a2===0)a2=1}a2=a0.eH(0,a2) +a0=a1.d +if(a0==null){a0=self.window.devicePixelRatio +if(a0===0)a0=1}s=a==null +r=s?c:a.gbK().a +if(r==null)r=b.b.a.e +q=r===1?B.ab:new A.fl(r) +p=s?c:a.e +if(p==null)p=b.b.a.d +b.gnU() +o=a1.d +if(o==null){o=self.window.devicePixelRatio +if(o===0)o=1}o=A.ab9(B.fx,o) +b.gnU() +n=a1.d +if(n==null){n=self.window.devicePixelRatio +if(n===0)n=1}n=A.ab9(B.fx,n) +m=b.w +l=a1.d +if(l==null){l=self.window.devicePixelRatio +if(l===0)l=1}l=A.ab9(m,l) +b.gnU() +a1=a1.d +if(a1==null){a1=self.window.devicePixelRatio +if(a1===0)a1=1}a1=A.ab9(B.fx,a1) +m=s?c:a.z +if(m==null)m=(b.b.a.a.a&1)!==0 +k=s?c:a.Q +if(k==null)k=(b.b.a.a.a&2)!==0 +j=s?c:a.ax +if(j==null)j=(b.b.a.a.a&4)!==0 +i=s?c:a.ay +if(i==null)i=(b.b.a.a.a&8)!==0 +h=s?c:a.as +if(h==null)h=(b.b.a.a.a&32)!==0 +g=s?c:a.at +if(g==null)g=(b.b.a.a.a&64)!==0 +f=s&&c +a=s?c:a.ch +if(a==null)a=B.f2 +b.gnU() +b.gnU() +e=new A.Dd(a2,a0,q,p,l,o,n,a1,f===!0,m,k,h,g,j,i,a,new A.NO(c),B.Qw) +if(!e.j(0,d.e))d.a3(new A.axZ(d,e))}, +I7(){this.us()}, +W3(){if(this.d==null)this.us()}, +W2(){if(this.d==null)this.us()}, +m(){B.b.C($.aa.X$,this) +this.aN()}, +H(a){var s=this.e +s.toString +return A.pb(this.a.e,s,null)}} +A.axZ.prototype={ +$0(){this.a.e=this.b}, +$S:0} +A.a4D.prototype={} +A.Qu.prototype={ +H(a){var s,r,q=null +switch(A.by().a){case 1:case 3:case 5:break +case 0:case 2:case 4:break}s=this.c +r=A.cH(q,q,A.tr(new A.hN(B.mV,s==null?q:new A.r2(s,q,q),q),B.bK,q,q,q,q),!1,q,!1,!1,q,q,q,q,q,q,q,q,q,q,q,q,q,q,this.x,q,q,q,q,q,q,q,q,q) +return A.aJM(new A.oC(!0,new A.a_0(r,new A.ahU(this,a),q),q))}} +A.ahU.prototype={ +$0(){A.Uo(B.Z8)}, +$S:0} +A.LG.prototype={ +H(a){var s=t.Bs.a(this.c) +return A.aGp(!0,null,s.gl(s),!1,null,this.f,null)}} +A.yI.prototype={ +il(a){if(this.aM==null)return!1 +return this.pw(a)}, +X4(a){}, +X5(a,b){var s=this.aM +if(s!=null)this.cT("onAnyTapUp",s)}, +AX(a,b,c){}} +A.VT.prototype={ +Vb(){var s=t.S,r=A.ds(s) +return new A.yI(B.aD,18,B.cw,A.A(s,t.SP),r,null,null,A.Lm(),A.A(s,t.C))}, +Xq(a){a.aM=this.a}} +A.a_0.prototype={ +H(a){return new A.lJ(this.c,A.aY([B.a4I,new A.VT(this.d)],t.u,t.xR),B.b_,!1,null)}} +A.Dx.prototype={ +H(a){var s,r,q=this,p=a.ap(t.I) +p.toString +s=A.a([],t.p) +r=q.c +if(r!=null)s.push(A.agC(r,B.j0)) +r=q.d +if(r!=null)s.push(A.agC(r,B.j1)) +r=q.e +if(r!=null)s.push(A.agC(r,B.j2)) +return new A.Bn(new A.aBy(q.f,q.r,p.w),s,null)}} +A.K9.prototype={ +I(){return"_ToolbarSlot."+this.b}} +A.aBy.prototype={ +BY(a){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e=this +if(e.b.i(0,B.j0)!=null){s=a.a +r=a.b +q=e.fR(B.j0,new A.az(0,s,r,r)).a +switch(e.f.a){case 0:p=s-q +break +case 1:p=0 +break +default:p=null}e.hj(B.j0,new A.k(p,0))}else q=0 +if(e.b.i(0,B.j2)!=null){o=e.fR(B.j2,A.a7R(a)) +switch(e.f.a){case 0:n=0 +break +case 1:n=a.a-o.a +break +default:n=null}m=o.a +e.hj(B.j2,new A.k(n,(a.b-o.b)/2))}else m=0 +if(e.b.i(0,B.j1)!=null){s=a.a +r=e.e +l=Math.max(s-q-m-r*2,0) +k=e.fR(B.j1,A.a7R(a).an4(l)) +j=q+r +if(e.d){i=k.a +h=(s-i)/2 +g=s-m +if(h+i>g)h=g-i-r +else if(h")),s=s.c;q.q();){r=q.d +if(r==null)r=s.a(r) +if(r.a===this)return!1 +r=r.d.a +if(r<=10&&r>=1)return!0}return!1}, +gXE(){var s=this.a +if(s==null)return!1 +s=s.OK(A.aOy(this)) +s=s==null?null:s.gXK() +return s===!0}} +A.amO.prototype={ +$1(a){var s,r=this.a.a +if(r==null)s=null +else{r.a.toString +s=!0}if(s===!0){r=r.y.gh9() +if(r!=null)r.lW()}}, +$S:29} +A.amN.prototype={ +$1(a){var s=this.a.a +if(s!=null){s=s.y.gh9() +if(s!=null)s.lW()}}, +$S:29} +A.i7.prototype={ +k(a){var s=this.a +s=s==null?"none":'"'+s+'"' +return"RouteSettings("+s+", "+A.h(this.b)+")"}} +A.ey.prototype={ +k(a){return'Page("'+A.h(this.a)+'", '+this.c.k(0)+", "+A.h(this.b)+")"}} +A.pd.prototype={} +A.rH.prototype={ +cs(a){return a.f!=this.f}} +A.np.prototype={} +A.UW.prototype={} +A.NK.prototype={ +av1(a,b,c){var s,r,q,p,o=A.a([],t.Fm),n=new A.aal(a,c,o) +n.$2(null,b.length===0) +for(s=b.length,r=0;r=10)return +s.x=!0 +s.w=b +s.d=B.a6W}, +e7(a,b){return this.amB(a,b,t.z)}, +m(){var s,r,q,p,o,n,m,l=this,k={} +l.d=B.a6T +s=l.a +r=s.gBV() +q=new A.azT() +p=A.S(r) +o=new A.ba(r,q,p.h("ba<1>")) +if(!o.gab(o).q()){l.d=B.iS +s.m() +return}k.a=o.gu(o) +n=s.a +n.f.D(0,l) +for(s=B.b.gab(r),p=new A.ik(s,q,p.h("ik<1>"));p.q();){r=s.gJ(s) +m=A.bc("listener") +q=new A.azU(k,l,r,m,n) +m.b=q +r=r.d +if(r!=null)r.Z(0,q)}}, +ga_w(){var s=this.d.a +return s<=7&&s>=1}, +gXK(){var s=this.d.a +return s<=10&&s>=1}, +Y4(a){var s +for(s=this.a;s.gwX();)s.kw(a) +this.C1(a) +this.y=!1}} +A.azV.prototype={ +$0(){var s=this.a +if(s.d===B.BK){s.d=B.e3 +this.b.yf()}}, +$S:0} +A.azT.prototype={ +$1(a){return a.gYa()}, +$S:545} +A.azU.prototype={ +$0(){var s=this,r=s.a;--r.a +s.c.K(0,s.d.aI()) +if(r.a===0)return A.fq(new A.azS(s.b,s.e))}, +$S:0} +A.azS.prototype={ +$0(){var s=this.a +if(!this.b.f.C(0,s))return +s.d=B.iS +s.a.m()}, +$S:0} +A.azW.prototype={ +$1(a){return a.a===this.a}, +$S:56} +A.qa.prototype={} +A.zf.prototype={ +oU(a){a.yI(this.b,this.a,B.cY,!1)}} +A.ze.prototype={ +oU(a){var s=$.l0() +A.w9(a) +if(!s.a.get(a).cx.a)a.yI(this.a,this.b,B.cZ,!1)}} +A.ID.prototype={ +oU(a){}} +A.IE.prototype={ +oU(a){var s=this.a,r=s.grm() +if(r)a.yI(this.b,s,B.cY,!1)}} +A.YM.prototype={ +E(a,b){B.b.E(this.a,b) +if(J.l2(b))this.a6()}, +i(a,b){return this.a[b]}, +gab(a){var s=this.a +return new J.cp(s,s.length,A.S(s).h("cp<1>"))}, +k(a){return A.rO(this.a,"[","]")}, +$iaj:1} +A.ht.prototype={ +abX(){var s,r,q=this,p=q.US(),o=A.bc("routeBlocksPop"),n=!p +if(n){s=q.u3(A.oc()) +o.scJ(s!=null&&s.a.goX()===B.fb)}else o.scJ(!1) +r=new A.tu(!n||o.aI()) +n=$.c_ +switch(n.x1$.a){case 4:q.c.er(r) +break +case 0:case 2:case 3:case 1:n.rx$.push(new A.aiw(q,r)) +break}}, +aB(){var s,r,q,p,o,n=this +n.aR() +for(s=n.a.x,r=s.length,q=0;q")),q=q.c;r.q();){p=r.d;(p==null?q.a(p):p).a.A0()}}, +OP(){var s,r,q +this.f.aa1(new A.aiv(),!0) +for(s=this.e,r=s.a;!s.ga7(s);){q=r.pop() +s.a6() +A.aM5(q,!1)}}, +GL(a){var s,r,q=this +if(q.Q!=a){if(a!=null)$.l0().n(0,a,q) +s=q.Q +if(s==null)s=null +else{r=$.l0() +A.w9(s) +s=r.a.get(s)}if(s===q){s=$.l0() +r=q.Q +r.toString +s.n(0,r,null)}q.Q=a +q.Tl()}}, +Tl(){var s=this,r=s.Q,q=s.a +if(r!=null)s.as=B.b.R(q.x,A.a([r],t.tc)) +else s.as=q.x}, +aO(a){var s,r,q,p,o,n=this +n.a4E(a) +s=a.x +if(s!==n.a.x){for(r=s.length,q=0;q")),r=r.c;s.q();){o=s.d;(o==null?r.a(o):o).a.A0()}}, +ez(){var s,r,q,p,o=this.as +o===$&&A.b() +s=o.length +r=0 +for(;r")),r=r.c;s.q();){q=s.d +B.b.E(p,(q==null?r.a(q):q).a.gBV())}return p}, +ak_(){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,a2,a3,a4=this,a5=null,a6={} +a6.a=a6.b=0 +a6.c=J.bF(a4.a.c)-1 +s=a4.e +r=a6.d=s.gu(s)-1 +q=t.uD +p=A.a([],q) +o=A.A(t.IA,t.Z4) +for(n=s.a,m=a5,l=0;l<=r;l=i){k=n[l] +if(!k.c){J.eo(o.bm(0,m,new A.aix()),k) +j=l+1 +a6.a=j +i=j +continue}i=a6.b +if(i>a6.c)break +h=J.bq(a4.a.c,i) +if(!k.Hy(h))break +g=k.a +if(g.b!==h){g.b=h +g.jH()}p.push(k) +a6.b=i+1 +j=l+1 +a6.a=j +i=j +m=k}f=A.a([],q) +q=r +while(!0){if(!(l<=q&&a6.b<=a6.c))break +c$1:{i=n[q] +if(!i.c){f.push(i) +r=q-1 +a6.d=r +q=r +break c$1}g=a4.a.c +e=a6.c +if(!i.Hy(J.bq(g,e)))break +if(f.length!==0){o.bm(0,i,new A.aiy(f)) +B.b.a0(f)}r=q-1 +a6.d=r +a6.c=e-1 +q=r}}r=q+f.length +a6.d=r +q=t.Ez +d=A.A(t.f0,q) +c=A.aS(q) +for(q=t.pw;l<=r;){i=n[l];++l +if(!i.c)continue +b=q.a(i.a.b) +g=i.d.a +if(!(g<=7&&g>=1)){c.D(0,i) +continue}d.n(0,b.c,i)}for(i=t.xs,a=!1;g=a6.b,g<=a6.c;){a0=J.bq(a4.a.c,g) +a6.b=g+1 +g=a0.c +g=!d.ai(0,g)||!d.i(0,g).Hy(a0) +if(g){g=a4.c +g.toString +g=a0.o9(g) +e=$.a5V() +p.push(new A.eI(g,a5,!0,B.BI,e,new A.mj(new WeakRef(e),i),e)) +a=!0}else{g=d.C(0,a0.c) +g.toString +e=g.a +if(e.b!==a0){e.b=a0 +e.jH()}p.push(g)}}a1=A.A(t.oV,t.Kh) +for(;i=a6.a,i<=a6.d;){k=n[i] +a6.a=i+1 +if(!k.c){J.eo(o.bm(0,m,new A.aiz()),k) +if(m.y){i=k.d.a +i=i<=7&&i>=1}else i=!1 +if(i)k.y=!0 +continue}a2=q.a(k.a.b) +if(d.ai(0,a2.c)||c.p(0,k)){a1.n(0,m,k) +i=k.d.a +if(i<=7&&i>=1)k.y=!0}m=k}a6.c=J.bF(a4.a.c)-1 +r=s.gu(s)-1 +a6.d=r +q=i +while(!0){if(!(q<=r&&a6.b<=a6.c))break +c$4:{k=n[q] +if(!k.c){J.eo(o.bm(0,m,new A.aiA()),k) +break c$4}i=a4.a.c +g=a6.b +h=J.bq(i,g) +i=k.a +if(i.b!==h){i.b=h +i.jH()}p.push(k) +j=q+1 +a6.a=j +a6.b=g+1 +q=j +m=k}}if(a||a1.a!==0){a4.a.toString +a3=B.Dv.av1(a1,p,o) +a3=new A.ft(a3,A.S(a3).h("ft<1,eI>"))}else a3=p +q=n.length +B.b.a0(n) +if(q!==0)s.a6() +if(o.ai(0,a5)){q=o.i(0,a5) +q.toString +s.E(0,q)}for(q=J.ap(a3);q.q();){i=q.gJ(q) +n.push(i) +s.a6() +if(o.ai(0,i)){i=o.i(0,i) +i.toString +B.b.E(n,i) +if(J.l2(i))s.a6()}}a4.yf()}, +F1(a3){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1=this,a2=null +a1.ch=!0 +s=a1.e +r=s.gu(s)-1 +q=s.a +p=q[r] +o=r>0?q[r-1]:a2 +n=A.a([],t.uD) +$label0$1:for(m=a1.x,l=t.xs,k=a1.w,j=a2,i=j,h=!1,g=!1;r>=0;){switch(p.d.a){case 1:f=a1.mo(r-1,A.oc()) +e=f>=0?q[f]:a2 +e=e==null?a2:e.a +d=p.a +d.a=a1 +d.na() +p.d=B.a6U +k.f_(0,new A.zf(d,e)) +continue $label0$1 +case 2:if(h||i==null){e=p.a +e.v9() +p.d=B.e3 +if(i==null)e.va(a2) +continue $label0$1}break +case 3:case 4:case 6:e=o==null?a2:o.a +f=a1.mo(r-1,A.oc()) +d=f>=0?q[f]:a2 +d=d==null?a2:d.a +p.aqw(i==null,a1,e,d) +if(p.d===B.e3)continue $label0$1 +break +case 5:if(!g&&j!=null){p.a.qK(j) +p.f=new A.mj(new WeakRef(j),l)}g=!0 +break +case 7:if(!g&&j!=null){p.a.qK(j) +p.f=new A.mj(new WeakRef(j),l)}h=!0 +g=!0 +break +case 8:f=a1.mo(r,A.Lk()) +e=f>=0?q[f]:a2 +if(!p.aqv(a1,e==null?a2:e.a))continue $label0$1 +if(!g){if(j!=null){p.a.qK(j) +p.f=new A.mj(new WeakRef(j),l)}j=p.a}e=p.a +f=a1.mo(r,A.Lk()) +d=f>=0?q[f]:a2 +m.f_(0,new A.ze(e,d==null?a2:d.a)) +if(p.d===B.mu)continue $label0$1 +h=!0 +break +case 11:break +case 9:e=p.a +e=e.d.a +if((e.a&30)!==0)A.T(A.Q("Future already completed")) +e.mk(a2) +p.w=null +p.d=B.a6Q +continue $label0$1 +case 10:if(!g){if(j!=null)p.a.qK(j) +j=a2}f=a1.mo(r,A.Lk()) +e=f>=0?q[f]:a2 +e=e==null?a2:e.a +p.d=B.a6S +if(p.x)m.f_(0,new A.ID(p.a,e)) +continue $label0$1 +case 12:if(!h&&i!=null)break +p.d=B.mu +continue $label0$1 +case 13:p=B.b.fz(q,r) +s.a6() +n.push(p) +p=i +break +case 14:case 15:case 0:break}--r +c=r>0?q[r-1]:a2 +i=p +p=o +o=c}a1.aaf() +a1.aah() +if(a1.a.as){b=a1.u3(A.oc()) +a=b==null?a2:b.a.b.a +if(a!=null&&a!==a1.ax){A.aNt(a2,!1,a2,A.eW(a,0,a2)) +a1.ax=a}}for(q=n.length,a0=0;a0=0;){s=l[k] +r=s.d.a +if(!(r<=12&&r>=3)){--k +continue}q=this.aaQ(k+1,A.aR7()) +r=q==null +p=r?m:q.a +if(p!=s.r){if(!((r?m:q.a)==null&&J.d(s.f.a.deref(),s.r))){p=s.a +p.va(r?m:q.a)}s.r=r?m:q.a}--k +o=this.mo(k,A.aR7()) +n=o>=0?l[o]:m +r=n==null +p=r?m:n.a +if(p!=s.e){p=s.a +p.vb(r?m:n.a) +s.e=r?m:n.a}}}, +Pd(a,b){a=this.mo(a,b) +return a>=0?this.e.a[a]:null}, +mo(a,b){var s=this.e.a +while(!0){if(!(a>=0&&!b.$1(s[a])))break;--a}return a}, +aaQ(a,b){var s=this.e,r=s.a +while(!0){if(!(a?") +q=r.a(this.a.r.$1(s)) +return q==null&&!b?r.a(this.a.w.$1(s)):q}, +Gk(a,b,c){return this.z0(a,!1,b,c)}, +US(){var s=this.e,r=s.gab(s),q=new A.ik(r,A.oc(),A.o(s).h("ik")) +if(!q.q())return!1 +if(r.gJ(r).a.gwX())return!0 +if(!q.q())return!1 +return!0}, +wa(a){var s=0,r=A.a1(t.y),q,p=this,o,n,m +var $async$wa=A.a2(function(b,c){if(b===1)return A.Z(c,r) +while(true)$async$outer:switch(s){case 0:m=p.u3(A.oc()) +if(m==null){q=!1 +s=1 +break}o=m.a +s=3 +return A.a7(o.jn(),$async$wa) +case 3:n=c +if(p.c==null){q=!0 +s=1 +break}if(n===B.fb){q=!0 +s=1 +break}if(m!==p.u3(A.oc())){q=!0 +s=1 +break}switch(o.goX().a){case 2:q=!1 +s=1 +break $async$outer +case 0:p.C1(a) +q=!0 +s=1 +break $async$outer +case 1:o.JR(!1) +q=!0 +s=1 +break $async$outer}case 1:return A.a_(q,r)}}) +return A.a0($async$wa,r)}, +JA(){return this.wa(null,t.X)}, +asP(a){return this.wa(a,t.X)}, +C2(a){var s=this,r=s.e.as8(0,A.oc()) +if(r.c){if(s.a.d.$2(r.a,a)&&r.d===B.e3)r.d=B.mw}else r.C1(a) +if(r.d===B.mw)s.F1(!1) +s.Nl()}, +C1(a){return this.C2(a,t.X)}, +ev(){return this.C2(null,t.X)}, +WG(a){var s,r=this,q=r.e.a,p=B.b.Xn(q,A.aOy(a),0) +q=q[p] +if(q.c&&q.d.a<8){s=r.Pd(p-1,A.Lk()) +s=s==null?null:s.a +r.x.f_(0,new A.ze(a,s))}q.d=B.mu +if(!r.ch)r.F1(!1)}, +sTL(a){this.CW=a +this.cx.sl(0,a>0)}, +ao0(){var s,r,q,p,o,n,m=this +m.sTL(m.CW+1) +if(m.CW===1){s=m.e +r=m.mo(s.gu(s)-1,A.Lk()) +q=s.a[r].a +p=!q.gwX()&&r>0?m.Pd(r-1,A.Lk()).a:null +s=m.as +s===$&&A.b() +o=s.length +n=0 +for(;n")),r=r.c;s.q();){q=s.d +if(q==null)q=r.a(q) +if(a.$1(q))return q}return null}, +u3(a){var s,r,q,p,o +for(s=this.e.a,r=A.S(s),s=new J.cp(s,s.length,r.h("cp<1>")),r=r.c,q=null;s.q();){p=s.d +o=p==null?r.a(p):p +if(a.$1(o))q=o}return q}, +H(a){var s,r,q=this,p=null,o=q.gacF(),n=A.wf(a),m=q.c6$,l=q.d +l===$&&A.b() +s=q.a.at +if(l.ga5()==null){r=q.gMZ() +r=J.rQ(r.slice(0),A.S(r).c)}else r=B.po +return new A.rH(p,new A.e1(new A.aiB(q,a),A.D1(B.ce,new A.Lz(!1,A.aL0(A.we(!0,p,A.arF(m,new A.x0(r,s,l)),p,p,p,q.y,!1,p,p,p,p,p,!0),n),p),o,q.gacy(),p,p,o),p,t.w3),p)}} +A.aiw.prototype={ +$1(a){var s=this.a.c +if(s==null)return +s.er(this.b)}, +$S:3} +A.aiC.prototype={ +$1(a){var s,r,q=a.b.a +if(q!=null){s=this.a.at +r=s.y +if(r==null)r=s.$ti.h("cN.T").a(r) +s.Mu(0,r+1) +q=new A.a_7(r,q,null,B.mx)}else q=null +return A.aOx(a,B.iR,!1,q)}, +$S:548} +A.aiv.prototype={ +$1(a){a.d=B.iS +a.a.m() +return!0}, +$S:56} +A.aix.prototype={ +$0(){return A.a([],t.uD)}, +$S:92} +A.aiy.prototype={ +$0(){return A.n5(this.a,!0,t.Ez)}, +$S:92} +A.aiz.prototype={ +$0(){return A.a([],t.uD)}, +$S:92} +A.aiA.prototype={ +$0(){return A.a([],t.uD)}, +$S:92} +A.aiu.prototype={ +$0(){var s=this.a +if(s!=null)s.sTZ(!0)}, +$S:0} +A.aiB.prototype={ +$1(a){if(a.a||!this.a.US())return!1 +this.b.er(B.Ua) +return!0}, +$S:196} +A.Jc.prototype={ +I(){return"_RouteRestorationType."+this.b}} +A.a1i.prototype={ +gXM(){return!0}, +A4(){return A.a([this.a.a],t.jl)}} +A.a_7.prototype={ +A4(){var s=this,r=s.a5_(),q=A.a([s.c,s.d],t.jl),p=s.e +if(p!=null)q.push(p) +B.b.E(r,q) +return r}, +o9(a){var s=a.Gk(this.d,this.e,t.z) +s.toString +return s}, +gZq(){return this.c}} +A.aHn.prototype={ +gXM(){return!1}, +A4(){A.aZ2(this.d)}, +o9(a){var s=a.c +s.toString +return this.d.$2(s,this.e)}, +gZq(){return this.c}} +A.YN.prototype={ +bw(a0,a1){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c=this,b=null,a=c.y==null +if(a)c.y=A.A(t.N,t.UX) +s=t.jl +r=A.a([],s) +q=c.y +q.toString +p=J.bq(q,null) +if(p==null)p=B.hB +o=A.A(t.ob,t.UX) +q=c.y +q.toString +n=J.aV3(J.Lx(q)) +for(q=a1.a,m=A.S(q),q=new J.cp(q,q.length,m.h("cp<1>")),m=m.c,l=b,k=a,j=!0;q.q();){i=q.d +h=i==null?m.a(i):i +if(h.d.a>7){i=h.a +i.c.sl(0,b) +continue}if(h.c){k=k||r.length!==J.bF(p) +if(r.length!==0){g=l==null?b:l.gfa() +o.n(0,g,r) +n.C(0,g)}j=h.gfa()!=null +i=h.a +f=j?h.gfa():b +i.c.sl(0,f) +if(j){r=A.a([],s) +i=c.y +i.toString +p=J.bq(i,h.gfa()) +if(p==null)p=B.hB}else{r=B.hB +p=B.hB}l=h +continue}if(j){i=h.b +i=i==null?b:i.gXM() +j=i===!0}else j=!1 +i=h.a +f=j?h.gfa():b +i.c.sl(0,f) +if(j){i=h.b +f=i.b +i=f==null?i.b=i.A4():f +if(!k){f=J.aF(p) +e=f.gu(p) +d=r.length +k=e<=d||!J.d(f.i(p,d),i)}else k=!0 +B.b.D(r,i)}}k=k||r.length!==J.bF(p) +c.aa3(r,l,o,n) +if(k||n.gc8(n)){c.y=o +c.a6()}}, +aa3(a,b,c,d){var s +if(a.length!==0){s=b==null?null:b.gfa() +c.n(0,s,a) +d.C(0,s)}}, +a0(a){if(this.y==null)return +this.y=null +this.a6()}, +Zr(a,b){var s,r,q,p,o,n,m=A.a([],t.uD) +if(this.y!=null)s=a!=null&&a.gfa()==null +else s=!0 +if(s)return m +s=this.y +s.toString +r=J.bq(s,a==null?null:a.gfa()) +if(r==null)return m +for(s=J.ap(r),q=t.xs;s.q();){p=A.b1X(s.gJ(s)) +o=p.o9(b) +n=$.a5V() +m.push(new A.eI(o,p,!1,B.iR,n,new A.mj(new WeakRef(n),q),n))}return m}, +Ac(){return null}, +rd(a){a.toString +return J.aJp(t.f.a(a),new A.aw1(),t.ob,t.UX)}, +Xo(a){this.y=a}, +rM(){return this.y}, +gqR(a){return this.y!=null}} +A.aw1.prototype={ +$2(a,b){return new A.aH(A.dk(a),A.n5(t.j.a(b),!0,t.K),t.qE)}, +$S:550} +A.tu.prototype={ +k(a){return"NavigationNotification canHandlePop: "+this.a}} +A.ayj.prototype={ +$2(a,b){if(!a.a)a.K(0,b)}, +$S:71} +A.IF.prototype={ +bY(){this.dq() +this.cW() +this.f2()}, +m(){var s=this,r=s.b9$ +if(r!=null)r.K(0,s.geM()) +s.b9$=null +s.aN()}} +A.IG.prototype={ +aO(a){this.bb(a) +this.vg()}, +bx(){var s,r,q,p,o=this +o.dr() +s=o.c6$ +r=o.gp9() +q=o.c +q.toString +q=A.xB(q) +o.j1$=q +p=o.q4(q,r) +if(r){o.lX(s,o.hb$) +o.hb$=!1}if(p)if(s!=null)s.m()}, +m(){var s,r=this +r.ha$.aa(0,new A.ayj()) +s=r.c6$ +if(s!=null)s.m() +r.c6$=null +r.a4C()}} +A.a4z.prototype={} +A.QK.prototype={ +k(a){var s=A.a([],t.s) +this.dZ(s) +return"Notification("+B.b.c_(s,", ")+")"}, +dZ(a){}} +A.e1.prototype={ +bI(a){return new A.IH(this,B.a0,this.$ti.h("IH<1>"))}} +A.IH.prototype={ +Yi(a){var s,r=this.e +r.toString +s=this.$ti +s.h("e1<1>").a(r) +if(s.c.b(a))return r.d.$1(a) +return!1}, +nh(a){}} +A.jo.prototype={} +A.a4J.prototype={} +A.nc.prototype={ +soV(a){var s +if(this.b===a)return +this.b=a +s=this.e +if(s!=null)s.Og()}, +soO(a){if(this.c)return +this.c=!0 +this.e.Og()}, +gYa(){var s=this.d +return(s==null?null:s.a)!=null}, +K(a,b){var s=this.d +if(s!=null)s.K(0,b)}, +eg(a){var s,r=this.e +r.toString +this.e=null +if(r.c==null)return +B.b.C(r.d,this) +s=$.c_ +if(s.x1$===B.id)s.rx$.push(new A.aiR(r)) +else r.Ql()}, +cO(){var s=this.f.ga5() +if(s!=null)s.Qn()}, +m(){var s,r=this +r.r=!0 +if(!r.gYa()){s=r.d +if(s!=null){s.fy$=$.aO() +s.fx$=0}r.d=null}}, +k(a){var s=this,r=A.bh(s),q=s.b,p=s.c,o=s.r?"(DISPOSED)":"" +return"#"+r+"(opaque: "+q+"; maintainState: "+p+")"+o}, +$iaj:1} +A.aiR.prototype={ +$1(a){this.a.Ql()}, +$S:3} +A.nT.prototype={ +ac(){return new A.zh(B.j)}} +A.zh.prototype={ +afN(a,b){var s,r,q,p=this.e +if(p==null)p=this.e=new A.ta(t.oM) +s=p.b===0?null:p.gO(p) +r=b.a +while(!0){q=s==null +if(!(!q&&s.a>r))break +s=s.gYD()}if(q){p.Fv(p.c,b,!0) +p.c=b}else s.j2$.Fv(s.j3$,b,!1)}, +gG_(){var s,r=this,q=r.f +if(q===$){s=r.EC(!1) +r.f!==$&&A.ay() +r.f=s +q=s}return q}, +EC(a){return new A.fn(this.a8O(a),t.bm)}, +a8O(a){var s=this +return function(){var r=a +var q=0,p=2,o,n,m,l +return function $async$EC(b,c,d){if(c===1){o=d +q=p}while(true)switch(q){case 0:l=s.e +if(l==null||l.b===0){q=1 +break}n=r?l.gO(l):l.gL(l) +case 3:if(!(n!=null)){q=4 +break}m=n.d +n=r?n.gYD():n.gk6(n) +q=m!=null?5:6 +break +case 5:q=7 +return b.b=m,1 +case 7:case 6:q=3 +break +case 4:case 1:return 0 +case 2:return b.c=o,3}}}}, +aB(){var s,r=this +r.aR() +r.a.c.d.sl(0,r) +s=r.c.oy(t.im) +s.toString +r.d=s}, +aO(a){var s,r=this +r.bb(a) +if(a.d!==r.a.d){s=r.c.oy(t.im) +s.toString +r.d=s}}, +m(){var s,r=this,q=r.a.c.d +if(q!=null)q.sl(0,null) +q=r.a.c +if(q.r){s=q.d +if(s!=null){s.fy$=$.aO() +s.fx$=0}q.d=null}r.e=null +r.aN()}, +H(a){var s=this.a,r=s.e,q=this.d +q===$&&A.b() +return new A.yo(r,new A.uT(q,this,s.c.a.$1(a),null),null)}, +Qn(){this.a3(new A.ayt())}} +A.ayt.prototype={ +$0(){}, +$S:0} +A.x0.prototype={ +ac(){return new A.x2(A.a([],t.wi),null,null,B.j)}} +A.x2.prototype={ +aB(){this.aR() +this.Xt(0,this.a.c)}, +Fx(a,b){if(a!=null)return B.b.cS(this.d,a) +return this.d.length}, +Xs(a,b,c){b.e=this +this.a3(new A.aiW(this,c,null,b))}, +B7(a,b){return this.Xs(a,b,null)}, +Xt(a,b){var s,r=b.length +if(r===0)return +for(s=0;s"),s=new A.cO(s,r),s=new A.bu(s,s.gu(s),r.h("bu")),r=r.h("af.E"),q=!0,p=0;s.q();){o=s.d +if(o==null)o=r.a(o) +if(q){++p +m.push(new A.nT(o,n,!0,o.f)) +q=!o.b||!1}else if(o.c)m.push(new A.nT(o,n,!1,o.f))}s=t.MV +return new A.K7(m.length-p,n.a.d,A.V(new A.cO(m,s),!1,s.h("af.E")),null)}} +A.aiW.prototype={ +$0(){var s=this,r=s.a +B.b.eu(r.d,r.Fx(s.b,s.c),s.d)}, +$S:0} +A.aiV.prototype={ +$0(){var s=this,r=s.a +B.b.vS(r.d,r.Fx(s.b,s.c),s.d)}, +$S:0} +A.aiX.prototype={ +$0(){var s,r,q=this,p=q.a,o=p.d +B.b.a0(o) +s=q.b +B.b.E(o,s) +r=q.c +r.Z7(s) +B.b.vS(o,p.Fx(q.d,q.e),r)}, +$S:0} +A.aiU.prototype={ +$0(){}, +$S:0} +A.aiT.prototype={ +$0(){}, +$S:0} +A.K7.prototype={ +bI(a){return new A.a3e(A.ds(t.h),this,B.a0)}, +az(a){var s=a.ap(t.I) +s.toString +s=new A.qg(s.w,this.e,this.f,A.ag(t.O5),0,null,null,A.ag(t.T)) +s.aw() +s.E(0,null) +return s}, +aF(a,b){var s=this.e +if(b.a9!==s){b.a9=s +if(!b.aq)b.nE()}s=a.ap(t.I) +s.toString +b.sbS(s.w) +s=this.f +if(s!==b.X){b.X=s +b.ag() +b.aY()}}} +A.a3e.prototype={ +ga_(){return t.im.a(A.iQ.prototype.ga_.call(this))}, +jR(a,b){var s,r +this.M9(a,b) +s=a.b +s.toString +t.i9.a(s) +r=this.e +r.toString +s.at=t.KJ.a(t.f4.a(r).c[b.b]).c}, +k0(a,b,c){this.Ma(a,b,c)}} +A.uU.prototype={ +ew(a){if(!(a.b instanceof A.fj))a.b=new A.fj(null,null,B.e)}, +giz(){return!0}, +bA(){var s,r,q,p,o,n,m,l=this,k="RenderBox was not laid out: ",j=l.tH(),i=j.gab(j) +j=l.gW() +s=A.qT(new A.G(A.O(1/0,j.a,j.b),A.O(1/0,j.c,j.d))) +j=l.gZB() +r=j.B +if(r==null)r=j.B=B.bM.U(j.F) +for(j=t.Qv,q=t.EP;i.q();){p=i.gJ(i) +o=p.b +o.toString +j.a(o) +if(!o.gBc()){p.bJ(s,!0) +n=l.id +if(n==null)n=A.T(A.Q(k+A.t(l).k(0)+"#"+A.bh(l))) +m=p.id +o.a=r.nX(q.a(n.Y(0,m==null?A.T(A.Q(k+A.t(p).k(0)+"#"+A.bh(p))):m)))}else{n=l.id +A.aMK(p,o,n==null?A.T(A.Q(k+A.t(l).k(0)+"#"+A.bh(l))):n,r)}}}, +cE(a,b){var s,r,q,p=this.Eh(),o=p.gab(p) +p=t.Qv +s=!1 +while(!0){if(!(!s&&o.q()))break +r=o.gJ(o) +q=r.b +q.toString +s=a.mD(new A.azB(r),p.a(q).a,b)}return s}, +am(a,b){var s,r,q,p,o,n +for(s=this.tH(),s=s.gab(s),r=t.Qv,q=b.a,p=b.b;s.q();){o=s.gJ(s) +n=o.b +n.toString +n=r.a(n).a +a.ef(o,new A.k(n.a+q,n.b+p))}}} +A.azB.prototype={ +$2(a,b){return this.a.cD(a,b)}, +$S:17} +A.zC.prototype={ +KS(a){var s=this.at +if(s==null)s=null +else{s=s.d +s=s==null?null:s.a.gG_().aa(0,a)}return s}} +A.qg.prototype={ +gZB(){return this}, +ew(a){if(!(a.b instanceof A.zC))a.b=new A.zC(null,null,B.e)}, +ah(a){var s,r,q,p,o +this.a5T(a) +s=this.a4$ +for(r=t.i9;s!=null;){q=s.b +q.toString +r.a(q) +p=q.at +if(p==null)o=null +else{p=p.d +if(p==null)o=null +else{p=p.a.gG_() +p=new A.e4(p.a(),p.$ti.h("e4<1>")) +o=p}}if(o!=null)for(;o.q();)o.b.ah(a) +s=q.ak$}}, +ad(a){var s,r,q +this.a5U(0) +s=this.a4$ +for(r=t.i9;s!=null;){q=s.b +q.toString +r.a(q) +q.KS(A.b78()) +s=q.ak$}}, +fT(){return this.b1(this.gZ3())}, +sbS(a){var s=this +if(s.F===a)return +s.F=a +s.B=null +if(!s.aq)s.nE()}, +DS(a){this.aq=!0 +this.iJ(a) +this.aq=!1 +a.A.a8()}, +G6(a){this.aq=!0 +this.oh(a) +this.aq=!1}, +a8(){if(!this.aq)this.nE()}, +gtU(){var s,r,q,p,o=this +if(o.a9===A.at.prototype.gUY.call(o))return null +s=A.at.prototype.gapI.call(o,o) +for(r=o.a9,q=t.Qv;r>0;--r){p=s.b +p.toString +s=q.a(p).ak$}return s}, +bp(a){return A.alV(this.gtU(),new A.azD(a))}, +bo(a){return A.alV(this.gtU(),new A.azC(a))}, +h6(a){var s,r,q,p,o=this.gtU() +for(s=t.Qv,r=null;o!=null;){q=o.b +q.toString +s.a(q) +p=o.m7(a) +if(p!=null){p+=q.a.b +r=r!=null?Math.min(r,p):p}o=q.ak$}return r}, +c5(a){return new A.G(A.O(1/0,a.a,a.b),A.O(1/0,a.c,a.d))}, +tH(){return new A.fn(this.a86(),t.bm)}, +a86(){var s=this +return function(){var r=0,q=1,p,o,n,m,l,k +return function $async$tH(a,b,c){if(b===1){p=c +r=q}while(true)switch(r){case 0:k=s.gtU() +o=t.i9 +case 2:if(!(k!=null)){r=3 +break}r=4 +return a.b=k,1 +case 4:n=k.b +n.toString +o.a(n) +m=n.at +if(m==null)l=null +else{m=m.d +if(m==null)l=null +else{m=m.a.gG_() +m=new A.e4(m.a(),m.$ti.h("e4<1>")) +l=m}}r=l!=null?5:6 +break +case 5:case 7:if(!l.q()){r=8 +break}r=9 +return a.b=l.b,1 +case 9:r=7 +break +case 8:case 6:k=n.ak$ +r=2 +break +case 3:return 0 +case 1:return a.c=p,3}}}}, +Eh(){return new A.fn(this.a85(),t.bm)}, +a85(){var s=this +return function(){var r=0,q=1,p,o,n,m,l,k,j,i,h +return function $async$Eh(a,b,c){if(b===1){p=c +r=q}while(true)switch(r){case 0:i=s.a9===A.at.prototype.gUY.call(s)?null:s.d8$ +h=s.e_$-s.a9 +o=t.i9 +case 2:if(!(i!=null)){r=3 +break}n=i.b +n.toString +o.a(n) +m=n.at +if(m==null)l=null +else{m=m.d +if(m==null)l=null +else{m=m.a +k=m.r +if(k===$){j=m.EC(!0) +m.r!==$&&A.ay() +m.r=j +k=j}m=new A.e4(k.a(),k.$ti.h("e4<1>")) +l=m}}r=l!=null?4:5 +break +case 4:case 6:if(!l.q()){r=7 +break}r=8 +return a.b=l.b,1 +case 8:r=6 +break +case 7:case 5:r=9 +return a.b=i,1 +case 9:--h +i=h<=0?null:n.ci$ +r=2 +break +case 3:return 0 +case 1:return a.c=p,3}}}}, +am(a,b){var s,r,q=this,p=q.aH +if(q.X!==B.o){s=q.cx +s===$&&A.b() +r=q.gv(q) +p.sar(0,a.lQ(s,b,new A.w(0,0,0+r.a,0+r.b),A.uU.prototype.gf9.call(q),q.X,p.a))}else{p.sar(0,null) +q.a4U(a,b)}}, +m(){this.aH.sar(0,null) +this.eK()}, +b1(a){var s,r,q=this.a4$ +for(s=t.i9;q!=null;){a.$1(q) +r=q.b +r.toString +s.a(r) +r.KS(a) +q=r.ak$}}, +fX(a){var s,r,q=this.gtU() +for(s=t.i9;q!=null;){a.$1(q) +r=q.b +r.toString +s.a(r) +r.KS(a) +q=r.ak$}}, +mN(a){var s +switch(this.X.a){case 0:return null +case 1:case 2:case 3:s=this.gv(this) +return new A.w(0,0,0+s.a,0+s.b)}}} +A.azD.prototype={ +$1(a){return a.d2(B.bb,this.a,a.gcc())}, +$S:61} +A.azC.prototype={ +$1(a){return a.d2(B.bc,this.a,a.gcb())}, +$S:61} +A.aiS.prototype={ +k(a){return"OverlayPortalController"+(this.a!=null?"":" DETACHED")}} +A.DJ.prototype={ +ac(){return new A.a_t(B.j)}} +A.a_t.prototype={ +aaJ(a,b){var s,r,q=this,p=q.f,o=A.bn("marker",new A.ayu(q,!1)) +if(p!=null)if(q.e){s=o.T() +s=p.b===s.r&&p.c===s.f +r=s}else r=!0 +else r=!1 +q.e=!1 +if(r)return p +return q.f=new A.qc(a,o.T().r,o.T().f)}, +aB(){this.aR() +this.Sc(this.a.c)}, +Sc(a){var s,r=a.b,q=this.d +if(q!=null)s=r!=null&&r>q +else s=!0 +if(s)this.d=r +a.b=null +a.a=this}, +bx(){this.dr() +this.e=!0}, +aO(a){var s,r,q=this +q.bb(a) +if(!q.e){q.a.toString +s=!1}else s=!0 +q.e=s +s=a.c +r=q.a.c +if(s!==r){s.a=null +q.Sc(r)}}, +m(){this.a.c.a=null +this.f=null +this.aN()}, +a1e(a,b){this.a3(new A.ayw(this,b)) +this.f=null}, +oC(){this.a3(new A.ayv(this)) +this.f=null}, +H(a){var s,r,q=this,p=null,o=q.d +if(o==null)return new A.zi(p,q.a.e,p,p) +q.a.toString +s=q.aaJ(o,!1) +r=q.a +return new A.zi(new A.Xx(new A.f2(r.d,p),p),r.e,s,p)}} +A.ayu.prototype={ +$0(){var s=this.a.c +s.toString +return A.b1V(s,this.b)}, +$S:551} +A.ayw.prototype={ +$0(){this.a.d=this.b}, +$S:0} +A.ayv.prototype={ +$0(){this.a.d=null}, +$S:0} +A.qc.prototype={ +MS(a){var s,r=this +r.d=a +r.b.afN(0,r) +s=r.c +s.ag() +s.kJ() +s.aY()}, +Rn(a){var s,r=this +r.d=null +s=r.b.e +if(s!=null)s.C(0,r) +s=r.c +s.ag() +s.kJ() +s.aY()}, +k(a){var s=A.bh(this) +return"_OverlayEntryLocation["+s+"] "}} +A.uT.prototype={ +cs(a){return a.f!==this.f||a.r!==this.r}} +A.zi.prototype={ +bI(a){return new A.a_s(this,B.a0)}, +az(a){var s=new A.J1(null,A.ag(t.T)) +s.aw() +s.saP(null) +return s}} +A.a_s.prototype={ +ga_(){return t.SN.a(A.bi.prototype.ga_.call(this))}, +ed(a,b){var s,r=this +r.pA(a,b) +s=r.e +s.toString +t.eU.a(s) +r.ok=r.dU(r.ok,s.d,null) +r.k4=r.dU(r.k4,s.c,s.e)}, +bw(a,b){var s=this +s.nF(0,b) +s.ok=s.dU(s.ok,b.d,null) +s.k4=s.dU(s.k4,b.c,b.e)}, +j5(a){this.ok=null +this.ki(a)}, +b1(a){var s=this.ok,r=this.k4 +if(s!=null)a.$1(s) +if(r!=null)a.$1(r)}, +bY(){var s,r,q +this.tp() +s=this.k4 +if(s!=null){r=t.Kp.a(s.ga_()) +if(r!=null){q=s.c +q.toString +t.Vl.a(q) +q.c.DS(r) +q.d=r}}}, +ez(){var s,r,q=this.k4 +if(q!=null){s=t.Kp.a(q.ga_()) +if(s!=null){r=q.c +r.toString +t.Vl.a(r) +r.c.G6(s) +r.d=null}}this.Mr()}, +jR(a,b){var s=t.SN +if(b!=null){s=s.a(A.bi.prototype.ga_.call(this)) +t.Lj.a(a) +s.A=a +b.MS(a) +b.c.DS(a)}else s.a(A.bi.prototype.ga_.call(this)).saP(a)}, +k0(a,b,c){var s=b.c,r=c.c +if(s!==r){s.G6(a) +r.DS(a)}if(b.b!==c.b||b.a!==c.a){b.Rn(a) +c.MS(a)}}, +kW(a,b){if(b==null){t.SN.a(A.bi.prototype.ga_.call(this)).saP(null) +return}t.Lj.a(a) +b.Rn(a) +b.c.G6(a) +t.SN.a(A.bi.prototype.ga_.call(this)).A=null}} +A.Xx.prototype={ +az(a){var s,r=a.oy(t.SN) +r.toString +s=new A.qf(r,null,A.ag(t.T)) +s.aw() +s.saP(null) +return r.A=s}, +aF(a,b){}} +A.qf.prototype={ +tH(){var s=this.fr$ +return s==null?B.DC:A.aXW(1,new A.azm(s),t.x)}, +Eh(){return this.tH()}, +gZB(){var s=this.d +return s instanceof A.qg?s:A.T(A.wc(A.h(s)+" of "+this.k(0)+" is not a _RenderTheater"))}, +fT(){this.A.kV(this) +this.Mt()}, +w7(){var s=this +if(s.a1)return +s.al=s.a1=!0 +s.nE() +s.A.a8() +s.a1=!1}, +a8(){this.al=!0 +this.nE()}, +asb(){var s,r=t.gW.a(this.d) +if(r==null||this.y==null)return +s=t.k.a(A.r.prototype.gW.call(r)) +this.DG(A.qT(new A.G(A.O(1/0,s.a,s.b),A.O(1/0,s.c,s.d))),!1)}, +bJ(a,b){var s,r=this,q=r.al||!t.k.a(A.r.prototype.gW.call(r)).j(0,a) +r.bg=!0 +r.DG(a,b) +r.al=r.bg=!1 +if(q){s=r.d +s.toString +t.im.a(s).B9(new A.azn(r),t.k)}}, +fQ(a){return this.bJ(a,!1)}, +rC(){var s=t.k.a(A.r.prototype.gW.call(this)) +this.id=new A.G(A.O(1/0,s.a,s.b),A.O(1/0,s.c,s.d))}, +bA(){var s=this +if(s.bg){s.al=!1 +return}if(s.fr$==null){s.al=!1 +return}s.a4V() +s.al=!1}, +dj(a,b){var s,r=a.b +r.toString +s=t.r.a(r).a +b.au(0,s.a,s.b)}} +A.azm.prototype={ +$1(a){return this.a}, +$S:552} +A.azn.prototype={ +$1(a){var s=this.a +s.al=!0 +s.nE()}, +$S:553} +A.J1.prototype={ +fT(){this.Mt() +var s=this.A +if(s!=null&&s.y!=null)this.kV(s)}, +bA(){this.tx() +var s=this.A +if(s!=null)s.asb()}} +A.a_u.prototype={ +bY(){this.dq() +this.cW() +this.f2()}, +m(){var s=this,r=s.b9$ +if(r!=null)r.K(0,s.geM()) +s.b9$=null +s.aN()}} +A.a4Q.prototype={} +A.a4R.prototype={} +A.KU.prototype={ +ah(a){var s,r,q +this.dg(a) +s=this.a4$ +for(r=t.Qv;s!=null;){s.ah(a) +q=s.b +q.toString +s=r.a(q).ak$}}, +ad(a){var s,r,q +this.dh(0) +s=this.a4$ +for(r=t.Qv;s!=null;){s.ad(0) +q=s.b +q.toString +s=r.a(q).ak$}}} +A.a4W.prototype={} +A.Cj.prototype={ +ac(){var s=t.y +return new A.HZ(A.aY([!1,!0,!0,!0],s,s),null,null,B.j)}, +ng(a){return A.Ln().$1(a)}} +A.HZ.prototype={ +aB(){var s,r,q=this +q.aR() +s=q.a +r=s.f +q.d=A.aOi(A.bR(s.e),r,q) +r=q.a +s=r.f +s=A.aOi(A.bR(r.e),s,q) +q.e=s +r=q.d +r.toString +q.f=new A.Iu(A.a([r,s],t.Eo))}, +aO(a){var s,r=this +r.bb(a) +if(!a.f.j(0,r.a.f)||A.bR(a.e)!==A.bR(r.a.e)){s=r.d +s.toString +s.sM(0,r.a.f) +s=r.d +s.toString +s.sUA(A.bR(r.a.e)) +s=r.e +s.toString +s.sM(0,r.a.f) +s=r.e +s.toString +s.sUA(A.bR(r.a.e))}}, +FZ(a){var s,r,q,p,o,n,m,l,k,j,i=this +if(!i.a.ng(a))return!1 +s=a.a +r=s.e +if(A.bR(r)!==A.bR(i.a.e))return!1 +q=i.d +q.toString +p=s.c +p.toString +o=s.a +o.toString +q.e=-Math.min(p-o,q.d) +o=i.e +o.toString +s=s.b +s.toString +o.e=-Math.min(s-p,o.d) +if(a instanceof A.lA){s=a.e +if(s<0)n=q +else if(s>0)n=o +else n=null +m=n===q +q=i.c +q.er(new A.DK(m,0)) +q=i.w +q.n(0,m,!0) +q.i(0,m).toString +n.d=0 +i.w.i(0,m).toString +q=a.f +if(q!==0){s=n.c +if(s!=null)s.b3(0) +n.c=null +l=A.O(Math.abs(q),100,1e4) +s=n.f +if(n.a===B.iN)r=0.3 +else{r=n.r +r===$&&A.b() +q=r.a +q=r.b.a2(0,q.gl(q)) +r=q}s.a=r +r.toString +s.b=A.O(l*0.00006,r,0.5) +r=n.w +s=n.x +s===$&&A.b() +q=s.a +r.a=s.b.a2(0,q.gl(q)) +r.b=Math.min(0.025+75e-8*l*l,1) +r=n.b +r===$&&A.b() +r.e=A.dp(0,B.c.an(0.15+l*0.02)) +r.kE(0,0) +n.as=0.5 +n.a=B.a6b}else{q=a.d +if(q!=null){p=a.b.ga_() +p.toString +t.x.a(p) +k=p.gv(p) +j=p.fZ(q.d) +switch(A.bR(r).a){case 0:n.toString +r=k.b +n.YI(0,Math.abs(s),k.a,A.O(j.b,0,r),r) +break +case 1:n.toString +r=k.a +n.YI(0,Math.abs(s),k.b,A.O(j.a,0,r),r) +break}}}}else{if(!(a instanceof A.pC&&a.d!=null))s=a instanceof A.kx&&a.d!=null +else s=!0 +if(s){if(q.a===B.iO)q.nO(B.dF) +s=i.e +if(s.a===B.iO)s.nO(B.dF)}}i.r=A.t(a) +return!1}, +m(){this.d.m() +this.e.m() +this.a5K()}, +H(a){var s=this,r=null,q=s.a,p=s.d,o=s.e,n=q.e,m=s.f +return new A.e1(s.gFY(),new A.iZ(A.mE(new A.iZ(q.w,r),new A.YG(p,o,n,m),r,r,B.Q),r),r,t.WA)}} +A.z_.prototype={ +I(){return"_GlowState."+this.b}} +A.HY.prototype={ +sM(a,b){if(this.ax.j(0,b))return +this.ax=b +this.a6()}, +sUA(a){if(this.ay===a)return +this.ay=a +this.a6()}, +m(){var s=this,r=s.b +r===$&&A.b() +r.m() +r=s.y +r===$&&A.b() +r.w.dD$.C(0,r) +r.Mx() +r=s.c +if(r!=null)r.b3(0) +s.eJ()}, +YI(a,b,c,d,e){var s,r,q,p=this,o=p.c +if(o!=null)o.b3(0) +p.at=p.at+b/200 +o=p.f +s=p.r +s===$&&A.b() +r=s.b +s=s.a +o.a=r.a2(0,s.gl(s)) +o.b=Math.min(r.a2(0,s.gl(s))+b/c*0.8,0.5) +q=Math.min(c,e*0.20096189432249995) +s=p.w +r=p.x +r===$&&A.b() +o=r.b +r=r.a +s.a=o.a2(0,r.gl(r)) +s.b=Math.max(1-1/(0.7*Math.sqrt(p.at*q)),A.fL(o.a2(0,r.gl(r)))) +r=d/e +p.Q=r +if(r!==p.as){o=p.y +o===$&&A.b() +if(!o.garZ())o.nC(0)}else{o=p.y +o===$&&A.b() +o.ff(0) +p.z=null}o=p.b +o===$&&A.b() +o.e=B.oe +if(p.a!==B.iO){o.kE(0,0) +p.a=B.iO}else{o=o.r +if(!(o!=null&&o.a!=null))p.a6()}p.c=A.cy(B.oe,new A.avT(p))}, +Ef(a){var s=this +if(a!==B.a7)return +switch(s.a.a){case 1:s.nO(B.dF) +break +case 3:s.a=B.iN +s.at=0 +break +case 2:case 0:break}}, +nO(a){var s,r,q=this,p=q.a +if(p===B.BD||p===B.iN)return +p=q.c +if(p!=null)p.b3(0) +q.c=null +p=q.f +s=q.r +s===$&&A.b() +r=s.a +p.a=s.b.a2(0,r.gl(r)) +p.b=0 +p=q.w +r=q.x +r===$&&A.b() +s=r.a +p.a=r.b.a2(0,s.gl(s)) +p.b=0 +p=q.b +p===$&&A.b() +p.e=a +p.kE(0,0) +q.a=B.BD}, +ajk(a){var s,r=this,q=r.z +if(q!=null){q=q.a +s=r.Q +r.as=s-(s-r.as)*Math.pow(2,-(a.a-q)/$.aSW().a) +r.a6()}if(A.Ll(r.Q,r.as,0.001)){q=r.y +q===$&&A.b() +q.ff(0) +r.z=null}else r.z=a}, +am(a,b){var s,r,q,p,o,n,m,l,k,j=this,i=j.r +i===$&&A.b() +s=i.a +if(J.d(i.b.a2(0,s.gl(s)),0))return +s=b.a +r=b.b +q=s>r?r/s:1 +p=s*3/2 +o=Math.min(r,s*0.20096189432249995) +r=j.x +r===$&&A.b() +n=r.a +n=r.b.a2(0,n.gl(n)) +r=j.as +m=$.W().aj() +l=j.ax +k=i.a +m.sM(0,A.C(B.c.an(255*i.b.a2(0,k.gl(k))),l.gl(l)>>>16&255,l.gl(l)>>>8&255,l.gl(l)&255)) +a.bH(0) +a.au(0,0,j.d+j.e) +a.ei(0,1,n*q) +a.ia(new A.w(0,0,0+s,0+o)) +a.du(new A.k(s/2*(0.5+r),o-p),p,m) +a.b_(0)}, +k(a){return"_GlowController(color: "+this.ax.k(0)+", axis: "+this.ay.b+")"}} +A.avT.prototype={ +$0(){return this.a.nO(B.jW)}, +$S:0} +A.YG.prototype={ +QR(a,b,c,d,e){var s +if(c==null)return +switch(A.o7(d,e).a){case 0:c.am(a,b) +break +case 2:a.bH(0) +a.au(0,0,b.b) +a.ei(0,1,-1) +c.am(a,b) +a.b_(0) +break +case 3:a.bH(0) +a.lY(0,1.5707963267948966) +a.ei(0,1,-1) +c.am(a,new A.G(b.b,b.a)) +a.b_(0) +break +case 1:a.bH(0) +s=b.a +a.au(0,s,0) +a.lY(0,1.5707963267948966) +c.am(a,new A.G(b.b,s)) +a.b_(0) +break}}, +am(a,b){var s=this,r=s.d +s.QR(a,b,s.b,r,B.oY) +s.QR(a,b,s.c,r,B.oX)}, +eX(a){return a.b!=this.b||a.c!=this.c}, +k(a){return"_GlowingOverscrollIndicatorPainter("+A.h(this.b)+", "+A.h(this.c)+")"}} +A.a2A.prototype={ +I(){return"_StretchDirection."+this.b}} +A.FM.prototype={ +ac(){return new A.JR(null,null,B.j)}, +ng(a){return A.Ln().$1(a)}} +A.JR.prototype={ +gnS(){var s,r,q,p,o,n,m=this,l=null,k=m.d +if(k===$){s=t.Y +r=new A.ar(0,0,s) +q=new A.JQ(r,B.mB,B.ds,$.aO()) +p=A.c5(l,l,l,l,m) +p.by() +o=p.cM$ +o.b=!0 +o.a.push(q.gEe()) +q.a!==$&&A.bS() +q.a=p +n=A.dc(B.eb,p,l) +n.a.Z(0,q.gdm()) +t.m.a(n) +q.b!==$&&A.bS() +q.b=new A.aP(n,r,s.h("aP")) +m.d!==$&&A.ay() +m.d=q +k=q}return k}, +FZ(a){var s,r,q,p,o,n,m,l=this +if(!l.a.ng(a))return!1 +s=a.a +if(A.bR(s.e)!==A.bR(l.a.c))return!1 +if(a instanceof A.lA){l.f=a +J.U(l.e) +r=a.e +q=l.c +q.er(new A.DK(r<0,0)) +l.w=!0 +r=l.r+=r +q=a.f +if(q!==0){s=l.gnS() +r=l.r +p=A.O(Math.abs(q),1,1e4) +q=s.c +o=s.b +o===$&&A.b() +n=o.a +q.a=o.b.a2(0,n.gl(n)) +q.b=Math.min(0.016+1.01/p,1) +q=s.a +q===$&&A.b() +q.e=A.dp(0,B.c.an(p*0.02)) +q.kE(0,0) +s.d=B.a73 +s.f=r>0?B.ds:B.BL}else if(a.d!=null){s=s.d +s.toString +m=A.O(Math.abs(r)/s,0,1) +l.gnS().auA(0,m,l.r)}}else if(a instanceof A.pC||a instanceof A.kx){l.r=0 +s=l.gnS() +if(s.d===B.mC)s.nO(B.ep)}l.e=a +return!1}, +aau(a){switch(this.a.c.a){case 0:return a===B.ds?B.mG:B.mF +case 1:return a===B.ds?B.aV:B.aM +case 2:return a===B.ds?B.mF:B.mG +case 3:return a===B.ds?B.aM:B.aV}}, +m(){var s=this.gnS(),r=s.a +r===$&&A.b() +r.m() +s.eJ() +this.a63()}, +H(a){var s={},r=A.bt(a,B.fE,t.w).w +s.a=null +return new A.e1(this.gFY(),A.oh(this.gnS(),new A.aAV(s,this,r.a),null),null,t.WA)}} +A.aAV.prototype={ +$2(a,b){var s,r,q,p,o,n,m,l=this,k=l.b,j=k.gnS().b +j===$&&A.b() +s=j.a +s=j.b.a2(0,s.gl(s)) +switch(A.bR(k.a.c).a){case 0:r=1+s +l.a.a=l.c.a +q=1 +break +case 1:q=1+s +l.a.a=l.c.b +r=1 +break +default:r=1 +q=1}p=k.aau(k.gnS().f) +j=k.f +if(j==null)o=null +else{j=j.a.d +j.toString +o=j}if(o==null)o=l.a.a +j=A.wU(r,q,1) +s=s===0 +n=s?null:B.hc +k=k.a +m=A.ys(p,k.f,n,null,j,!0) +return A.aFm(m,!s&&o!==l.a.a?k.e:B.o)}, +$S:555} +A.zy.prototype={ +I(){return"_StretchState."+this.b}} +A.JQ.prototype={ +auA(a,b,c){var s,r,q,p=this,o=c>0?B.ds:B.BL +if(p.f!==o&&p.d===B.mD)return +p.f=o +p.e=b +s=p.c +r=p.b +r===$&&A.b() +q=r.a +s.a=r.b.a2(0,q.gl(q)) +q=p.e +s.b=0.016*q+0.016*(1-Math.exp(-q*8.237217661997105)) +q=p.a +q===$&&A.b() +q.e=B.ep +if(p.d!==B.mC){q.kE(0,0) +p.d=B.mC}else{s=q.r +if(!(s!=null&&s.a!=null))p.a6()}}, +Ef(a){var s=this +if(a!==B.a7)return +switch(s.d.a){case 1:s.nO(B.ep) +break +case 3:s.d=B.mB +s.e=0 +break +case 2:case 0:break}}, +nO(a){var s,r,q=this,p=q.d +if(p===B.mD||p===B.mB)return +p=q.c +s=q.b +s===$&&A.b() +r=s.a +p.a=s.b.a2(0,r.gl(r)) +p.b=0 +p=q.a +p===$&&A.b() +p.e=a +p.kE(0,0) +q.d=B.mD}, +k(a){return"_StretchController()"}} +A.DK.prototype={ +dZ(a){this.a4G(a) +a.push("side: "+(this.a?"leading edge":"trailing edge"))}} +A.IK.prototype={ +dZ(a){var s,r +this.DE(a) +s=this.hA$ +r=s===0?"local":"remote" +a.push("depth: "+s+" ("+r+")")}} +A.KK.prototype={ +bY(){this.dq() +this.cW() +this.f2()}, +m(){var s=this,r=s.b9$ +if(r!=null)r.K(0,s.geM()) +s.b9$=null +s.aN()}} +A.L_.prototype={ +bY(){this.dq() +this.cW() +this.f2()}, +m(){var s=this,r=s.b9$ +if(r!=null)r.K(0,s.geM()) +s.b9$=null +s.aN()}} +A.JN.prototype={ +j(a,b){if(b==null)return!1 +if(J.U(b)!==A.t(this))return!1 +return b instanceof A.JN&&A.dn(b.a,this.a)}, +gt(a){return A.bv(this.a)}, +k(a){return"StorageEntryIdentifier("+B.b.c_(this.a,":")+")"}} +A.DN.prototype={ +MY(a){var s=A.a([],t.g8) +if(A.aMf(a,s))a.jm(new A.aj0(s)) +return s}, +auL(a){var s +if(this.a==null)return null +s=this.MY(a) +return s.length!==0?this.a.i(0,new A.JN(s)):null}} +A.aj0.prototype={ +$1(a){return A.aMf(a,this.a)}, +$S:20} +A.x3.prototype={ +H(a){return this.c}} +A.js.prototype={ +goV(){return!0}, +guJ(){return!1}, +Hx(a){return!0}, +gjO(){return this.bZ}} +A.ahH.prototype={} +A.ajK.prototype={} +A.NH.prototype={ +FH(a){return this.aeS(a)}, +aeS(a){var s=0,r=A.a1(t.H),q,p=this,o,n,m +var $async$FH=A.a2(function(b,c){if(b===1)return A.Z(c,r) +while(true)switch(s){case 0:n=A.el(a.b) +m=p.a +if(!m.ai(0,n)){s=1 +break}m=m.i(0,n) +m.toString +o=a.a +if(o==="Menu.selectedCallback"){m.gawB().$0() +m.gatG() +o=$.aa.F$.f.c.e +o.toString +A.aV8(o,m.gatG(),t.vz)}else if(o==="Menu.opened")m.gawz(m).$0() +else if(o==="Menu.closed")m.gawy(m).$0() +case 1:return A.a_(q,r)}}) +return A.a0($async$FH,r)}} +A.xk.prototype={ +cs(a){return this.f!=a.f}} +A.pA.prototype={ +ac(){return new A.a1j(null,A.A(t.yb,t.M),null,!0,null,B.j)}} +A.a1j.prototype={ +gfa(){return this.a.d}, +lX(a,b){}, +H(a){return A.arF(this.c6$,this.a.c)}} +A.GC.prototype={ +cs(a){return a.f!=this.f}} +A.EU.prototype={ +ac(){return new A.Jb(B.j)}} +A.Jb.prototype={ +bx(){var s,r=this +r.dr() +s=r.c +s.toString +r.r=A.xB(s) +r.FC() +if(r.d==null){r.a.toString +r.d=!1}}, +aO(a){this.bb(a) +this.FC()}, +gQ8(){this.a.toString +return!1}, +FC(){var s,r=this +if(r.gQ8()&&!r.w){r.w=!0;++$.tX.dx$ +s=$.jA.e0$ +s===$&&A.b() +s.gavf().ba(new A.azN(r),t.P)}}, +ah6(){var s,r=this +r.e=!1 +r.f=null +s=$.jA.e0$ +s===$&&A.b() +s.K(0,r.gGb()) +r.FC()}, +m(){if(this.e){var s=$.jA.e0$ +s===$&&A.b() +s.K(0,this.gGb())}this.aN()}, +H(a){var s,r,q=this,p=q.d +p.toString +if(p&&q.gQ8())return B.aF +p=q.r +if(p==null)p=q.f +s=q.a +r=s.d +return A.arF(p,new A.pA(s.c,r,null))}} +A.azN.prototype={ +$1(a){var s,r=this.a +r.w=!1 +if(r.c!=null){s=$.jA.e0$ +s===$&&A.b() +s.Z(0,r.gGb()) +r.a3(new A.azM(r,a))}$.tX.Ui()}, +$S:768} +A.azM.prototype={ +$0(){var s=this.a +s.f=this.b +s.e=!0 +s.d=!1}, +$S:0} +A.fg.prototype={ +gqR(a){return!0}, +m(){var s=this,r=s.c +if(r!=null){r=r.ha$.C(0,s) +r.toString +s.K(0,r) +s.c=s.b=null}s.eJ() +s.a=!0}} +A.lN.prototype={ +Ie(a){}, +rF(a,b){var s,r,q=this,p=q.c6$ +p=p==null?null:J.vc(p.gms(),b) +s=p===!0 +r=s?a.rd(J.bq(q.c6$.gms(),b)):a.Ac() +if(a.b==null){a.b=b +a.c=q +p=new A.amh(q,a) +a.Z(0,p) +q.ha$.n(0,a,p)}a.Xo(r) +if(!s&&a.gqR(a)&&q.c6$!=null)q.GP(a)}, +vg(){var s,r,q=this +if(q.j1$!=null){s=q.c6$ +s=s==null?null:s.e +s=s==q.gfa()||q.gp9()}else s=!0 +if(s)return +r=q.c6$ +if(q.q4(q.j1$,!1))if(r!=null)r.m()}, +gp9(){var s,r,q=this +if(q.hb$)return!0 +if(q.gfa()==null)return!1 +s=q.c +s.toString +r=A.xB(s) +if(r!=q.j1$){if(r==null)s=null +else{s=r.c +s=s==null?null:s.d +s=s===!0}s=s===!0}else s=!1 +return s}, +q4(a,b){var s,r,q=this +if(q.gfa()==null||a==null)return q.S7(null,b) +if(b||q.c6$==null){s=q.gfa() +s.toString +return q.S7(a.amk(s,q),b)}s=q.c6$ +s.toString +r=q.gfa() +r.toString +s.auV(r) +r=q.c6$ +r.toString +a.iJ(r) +return!1}, +S7(a,b){var s,r=this,q=r.c6$ +if(a==q)return!1 +r.c6$=a +if(!b){if(a!=null){s=r.ha$ +new A.aX(s,A.o(s).h("aX<1>")).aa(0,r.gak1())}r.Ie(q)}return!0}, +GP(a){var s,r,q=a.gqR(a),p=this.c6$ +if(q){if(p!=null){q=a.b +q.toString +s=a.rM() +if(!J.d(J.bq(p.gms(),q),s)||!J.vc(p.gms(),q)){J.hH(p.gms(),q,s) +p.pQ()}}}else if(p!=null){q=a.b +q.toString +r=J.vc(p.gms(),q) +J.of(p.gms(),q) +if(J.it(p.gms()))J.of(p.a,"v") +if(r)p.pQ()}}} +A.amh.prototype={ +$0(){var s=this.a +if(s.c6$==null)return +s.GP(this.b)}, +$S:0} +A.aCf.prototype={ +$2(a,b){if(!a.a)a.K(0,b)}, +$S:71} +A.a4X.prototype={ +aO(a){this.bb(a) +this.vg()}, +bx(){var s,r,q,p,o=this +o.dr() +s=o.c6$ +r=o.gp9() +q=o.c +q.toString +q=A.xB(q) +o.j1$=q +p=o.q4(q,r) +if(r){o.lX(s,o.hb$) +o.hb$=!1}if(p)if(s!=null)s.m()}, +m(){var s,r=this +r.ha$.aa(0,new A.aCf()) +s=r.c6$ +if(s!=null)s.m() +r.c6$=null +r.aN()}} +A.cN.prototype={ +sl(a,b){var s=this.y +if(b==null?s!=null:b!==s){this.y=b +this.Ig(s)}}, +Xo(a){this.y=a}} +A.kW.prototype={ +Ac(){return this.cy}, +Ig(a){this.a6()}, +rd(a){return A.o(this).h("kW.T").a(a)}, +rM(){var s=this.y +return s==null?A.o(this).h("cN.T").a(s):s}} +A.J9.prototype={ +rd(a){return this.a4Y(a)}, +rM(){var s=this.a4Z() +s.toString +return s}} +A.EP.prototype={} +A.EO.prototype={} +A.aCg.prototype={ +$2(a,b){if(!a.a)a.K(0,b)}, +$S:71} +A.j_.prototype={ +goN(a){var s,r=this,q=r.a +if(q!=null)return q +q=r.gjl() +if(q.gcU(q).length===0)q="/" +else{q=r.gjl() +q=q.gcU(q)}s=r.gjl().glU() +s=s.ga7(s)?null:r.gjl().glU() +q=A.zE(r.gjl().gj6().length===0?null:r.gjl().gj6(),q,s).gq3() +return A.j6(q,0,q.length,B.a2,!1)}, +gjl(){var s=this.b +if(s!=null)return s +s=this.a +s.toString +return A.eW(s,0,null)}} +A.xE.prototype={ +ac(){return new A.zu(new A.a1g($.aO()),null,A.A(t.yb,t.M),null,!0,null,B.j,this.$ti.h("zu<1>"))}} +A.amF.prototype={ +I(){return"RouteInformationReportingType."+this.b}} +A.zu.prototype={ +gfa(){return this.a.r}, +aB(){var s,r=this +r.aR() +s=r.a.c +if(s!=null)s.Z(0,r.gyp()) +r.a.f.zA(r.gFf()) +r.a.e.Z(0,r.gFk())}, +lX(a,b){var s,r,q=this,p=q.f +q.rF(p,"route") +s=p.y +r=s==null +if((r?A.o(p).h("cN.T").a(s):s)!=null){p=r?A.o(p).h("cN.T").a(s):s +p.toString +q.yQ(p,new A.aA3(q))}else{p=q.a.c +if(p!=null)q.yQ(p.gl(p),new A.aA4(q))}}, +ahM(){var s=this +if(s.w||s.a.c==null)return +s.w=!0 +$.c_.rx$.push(s.gahc())}, +ahd(a){var s,r,q,p=this +p.w=!1 +s=p.f +r=s.y +q=r==null +if((q?A.o(s).h("cN.T").a(r):r)!=null){s=q?A.o(s).h("cN.T").a(r):r +s.toString +r=p.a.c +r.toString +q=p.e +q.toString +r.avi(s,q)}p.e=B.zA}, +ahn(){var s=this.a,r=s.e.d +s=s.d +return s==null?null:s.av4(r)}, +yF(){var s=this +s.f.sl(0,s.ahn()) +if(s.e==null)s.e=B.zA +s.ahM()}, +bx(){var s,r=this +r.r=!0 +r.a5X() +s=r.a.c +if(s!=null&&r.r)r.yQ(s.gl(s),new A.aA2(r)) +r.r=!1 +r.yF()}, +aO(a){var s,r,q,p=this +p.a5Y(a) +s=p.a +r=a.c +q=s.c==r +if(!q||s.f!==a.f||s.d!=a.d||s.e!==a.e)p.d=new A.I() +if(!q){s=r==null +if(!s)r.K(0,p.gyp()) +q=p.a.c +if(q!=null)q.Z(0,p.gyp()) +s=s?null:r.gl(r) +r=p.a.c +if(s!=(r==null?null:r.gl(r)))p.PH()}s=a.f +if(p.a.f!==s){r=p.gFf() +s.Cd(r) +p.a.f.zA(r)}s=a.e +if(p.a.e!==s){r=p.gFk() +s.K(0,r) +p.a.e.Z(0,r) +p.yF()}}, +m(){var s=this,r=s.a.c +if(r!=null)r.K(0,s.gyp()) +s.a.f.Cd(s.gFf()) +s.a.e.K(0,s.gFk()) +s.d=null +s.a5Z()}, +yQ(a,b){var s,r,q=this +q.r=!1 +q.d=new A.I() +s=q.a.d +s.toString +r=q.c +r.toString +s.auh(a,r).ba(q.agK(q.d,b),t.H)}, +agK(a,b){return new A.aA0(this,a,b)}, +PH(){var s,r=this +r.r=!0 +s=r.a.c +r.yQ(s.gl(s),new A.azY(r))}, +ab9(){var s=this +s.d=new A.I() +return s.a.e.C3().ba(s.acP(s.d),t.y)}, +acP(a){return new A.azZ(this,a)}, +RB(){this.a3(new A.aA1()) +this.yF() +return new A.bK(null,t.b5)}, +acQ(){this.a3(new A.aA_()) +this.yF()}, +H(a){var s=this.c6$,r=this.a,q=r.c,p=r.f,o=r.d +r=r.e +return A.arF(s,new A.a1v(q,p,o,r,this,new A.f2(r.galQ(),null),null))}} +A.aA3.prototype={ +$0(){return this.a.a.e.ga14()}, +$S(){return this.a.$ti.h("ae<~>(1)()")}} +A.aA4.prototype={ +$0(){return this.a.a.e.ga0Y()}, +$S(){return this.a.$ti.h("ae<~>(1)()")}} +A.aA2.prototype={ +$0(){return this.a.a.e.gLG()}, +$S(){return this.a.$ti.h("ae<~>(1)()")}} +A.aA0.prototype={ +$1(a){var s=0,r=A.a1(t.H),q,p=this,o,n +var $async$$1=A.a2(function(b,c){if(b===1)return A.Z(c,r) +while(true)switch(s){case 0:o=p.a +n=p.b +if(o.d!=n){s=1 +break}s=3 +return A.a7(p.c.$0().$1(a),$async$$1) +case 3:if(o.d==n)o.RB() +case 1:return A.a_(q,r)}}) +return A.a0($async$$1,r)}, +$S(){return this.a.$ti.h("ae<~>(1)")}} +A.azY.prototype={ +$0(){return this.a.a.e.gLG()}, +$S(){return this.a.$ti.h("ae<~>(1)()")}} +A.azZ.prototype={ +$1(a){var s=this.a +if(this.b!=s.d)return new A.bK(!0,t.d9) +s.RB() +return new A.bK(a,t.d9)}, +$S:558} +A.aA1.prototype={ +$0(){}, +$S:0} +A.aA_.prototype={ +$0(){}, +$S:0} +A.a1v.prototype={ +cs(a){var s=this +return s.f!=a.f||s.r!==a.r||s.w!=a.w||s.x!==a.x||s.y!==a.y}} +A.jO.prototype={ +gX9(){return this.a.a.length!==0}, +zA(a){var s=this.a +s.b=!0 +s.a.push(a) +return null}, +Cd(a){return this.a.C(0,a)}, +Je(a){var s,r,q,p=this.a +if(p.a.length===0)return a +try{p=p.a1u(0) +return p}catch(q){s=A.ax(q) +r=A.aZ(q) +p=A.bo("while invoking the callback for "+A.t(this).k(0)) +A.d4(new A.bG(s,r,"widget library",p,new A.au4(this),!1)) +return a}}} +A.au4.prototype={ +$0(){var s=null,r=this.a +return A.a([A.k6("The "+A.t(r).k(0)+" that invoked the callback was",r,!0,B.bl,s,!1,s,s,B.aR,s,!1,!0,!0,B.bR,s,A.o(r).h("jO"))],t.E)}, +$S:21} +A.M0.prototype={ +gxW(a){var s,r=this.b +if(r===$){s=t.uF.a(A.aS(t.Ox)) +r!==$&&A.ay() +this.b=s +r=s}return r}, +Je(a){var s,r,q,p=this,o={} +if(p.gxW(p).a!==0){s=p.gxW(p) +r=A.V(s,!0,A.o(s).c) +q=r.length-1 +o.a=q +return r[q].ata(a).ba(new A.a6P(o,p,r,a),t.y)}return p.Mz(a)}} +A.a6P.prototype={ +$1(a){var s,r,q,p=this +if(a)return new A.bK(!0,t.d9) +s=p.a +r=s.a +if(r>0){q=r-1 +s.a=q +return p.c[q].ata(p.d).ba(p,t.y)}return p.b.Mz(p.d)}, +$S:559} +A.SP.prototype={ +zA(a){var s=this +if(!(A.jO.prototype.gX9.call(s)||s.gxW(s).a!==0))$.aa.X$.push(s) +s.a4n(a)}, +Cd(a){var s=this +s.a4o(a) +if(!(A.jO.prototype.gX9.call(s)||s.gxW(s).a!==0))B.b.C($.aa.X$,s)}, +vc(){return this.Je(A.d5(!1,t.y))}} +A.SU.prototype={} +A.xF.prototype={ +a0Z(a){return this.Df(a)}, +a15(a){return this.Df(a)}} +A.SV.prototype={} +A.a1g.prototype={ +Ac(){return null}, +Ig(a){this.a6()}, +rd(a){var s,r,q=null +if(a==null)return q +t.Dn.a(a) +s=J.cb(a) +r=A.dk(s.gL(a)) +if(r==null)return q +return new A.j_(q,A.eW(r,0,q),s.gO(a))}, +rM(){var s,r=this,q=r.y,p=q==null +if((p?A.o(r).h("cN.T").a(q):q)==null)q=null +else{q=(p?A.o(r).h("cN.T").a(q):q).gjl().k(0) +s=r.y +q=[q,(s==null?A.o(r).h("cN.T").a(s):s).c]}return q}} +A.a1o.prototype={} +A.zI.prototype={ +aO(a){this.bb(a) +this.vg()}, +bx(){var s,r,q,p,o=this +o.dr() +s=o.c6$ +r=o.gp9() +q=o.c +q.toString +q=A.xB(q) +o.j1$=q +p=o.q4(q,r) +if(r){o.lX(s,o.hb$) +o.hb$=!1}if(p)if(s!=null)s.m()}, +m(){var s,r=this +r.ha$.aa(0,new A.aCg()) +s=r.c6$ +if(s!=null)s.m() +r.c6$=null +r.aN()}} +A.x1.prototype={ +gBV(){return this.e}, +na(){var s,r=this,q=A.pe(r.ga7q(),!1) +r.p1=q +r.goO() +s=A.pe(r.ga7s(),!0) +r.p3=s +B.b.E(r.e,A.a([q,s],t.wi)) +r.a3P()}, +kw(a){var s,r=this +r.a3K(a) +s=r.at.Q +s===$&&A.b() +if(s===B.K&&!r.Q)r.a.WG(r) +return!0}, +m(){var s,r,q +for(s=this.e,r=s.length,q=0;q"))}} +A.nR.prototype={ +aB(){var s,r,q=this +q.aR() +s=A.a([],t.Eo) +r=q.a.c.go +if(r!=null)s.push(r) +r=q.a.c.id +if(r!=null)s.push(r) +q.e=new A.Iu(s)}, +aO(a){this.bb(a) +this.Tm()}, +bx(){this.dr() +this.d=null +this.Tm()}, +Tm(){var s,r,q=this.a.c +q.a.a.toString +s=this.f +s.dy=B.a3T +if(q.grm()){this.a.c.a.a.toString +r=!0}else r=!1 +if(r){r=q.a.y.gh9() +if(r!=null)r.ta(s)}}, +aan(){this.a3(new A.ay1(this))}, +m(){this.f.m() +this.r.m() +this.aN()}, +gSf(){var s=this.a.c.go +if((s==null?null:s.gb6(s))!==B.aX){s=this.a.c.a +s=s==null?null:s.cx.a +s=s===!0}else s=!0 +return s}, +H(a){var s,r,q=this,p=null,o=q.a.c,n=o.grm(),m=q.a.c +if(!m.grf()){m=m.fN$ +m=m!=null&&m.length!==0}else m=!0 +s=q.a.c +s=s.grf()||s.mS$>0 +r=q.a.c +return A.oh(o.c,new A.ay5(q),new A.Ix(n,m,s,o,new A.DE(r.fy,new A.x3(new A.f2(new A.ay6(q),p),r.ok,p),p),p))}} +A.ay1.prototype={ +$0(){this.a.d=null}, +$S:0} +A.ay5.prototype={ +$2(a,b){var s=this.a.a.c.c.a +b.toString +return new A.pA(b,s,null)}, +$S:561} +A.ay6.prototype={ +$1(a){var s,r=null,q=A.aY([B.m5,new A.XG(a,new A.b5(A.a([],t.g),t.c))],t.u,t.od),p=this.a,o=p.e +o===$&&A.b() +s=p.d +if(s==null)s=p.d=new A.iZ(new A.f2(new A.ay3(p),r),p.a.c.k4) +return A.vg(q,new A.xk(p.r,B.b2,B.X9,A.aFT(!1,new A.iZ(A.oh(o,new A.ay4(p),s),r),r,r,p.f),r))}, +$S:562} +A.ay4.prototype={ +$2(a,b){var s,r,q=this.a,p=q.a.c,o=p.go +o.toString +s=p.id +s.toString +r=p.a +r=r==null?null:r.cx +if(r==null)r=new A.ca(!1,$.aO(),t.uh) +return p.zZ(a,o,s,A.oh(r,new A.ay2(q),b))}, +$S:87} +A.ay2.prototype={ +$2(a,b){var s=this.a,r=s.gSf() +s.f.sdM(!r) +return A.ws(b,r,null)}, +$S:563} +A.ay3.prototype={ +$1(a){var s,r=this.a.a.c,q=r.go +q.toString +s=r.id +s.toString +return r.qo(a,q,s)}, +$S:11} +A.jr.prototype={ +a3(a){var s,r=this.k3 +if(r.ga5()!=null){r=r.ga5() +if(r.a.c.grm())if(!r.gSf()){r.a.c.a.a.toString +s=!0}else s=!1 +else s=!1 +if(s){s=r.a.c.a.y.gh9() +if(s!=null)s.ta(r.f)}r.a3(a)}else a.$0()}, +zZ(a,b,c,d){return d}, +na(){var s=this +s.a4f() +s.go=A.xm(A.fH.prototype.gjE.call(s,s)) +s.id=A.xm(A.fH.prototype.gLq.call(s))}, +vd(){var s,r=this,q=r.k3 +if(q.ga5()!=null){r.a.a.toString +s=!0}else s=!1 +if(s){s=r.a.y.gh9() +if(s!=null)s.ta(q.ga5().f)}return r.a4d()}, +v9(){var s,r=this,q=r.k3 +if(q.ga5()!=null){r.a.a.toString +s=!0}else s=!1 +if(s){s=r.a.y.gh9() +if(s!=null)s.ta(q.ga5().f)}r.a4b()}, +sBz(a){var s,r=this +if(r.fy===a)return +r.a3(new A.ahW(r,a)) +s=r.go +s.toString +s.saU(0,r.fy?B.ea:A.fH.prototype.gjE.call(r,r)) +s=r.id +s.toString +s.saU(0,r.fy?B.cQ:A.fH.prototype.gLq.call(r)) +r.jH()}, +jn(){var s=0,r=A.a1(t.oj),q,p=this,o,n,m +var $async$jn=A.a2(function(a,b){if(a===1)return A.Z(b,r) +while(true)switch(s){case 0:p.k3.ga5() +o=A.V(p.k1,!0,t.Ev),n=o.length,m=0 +case 3:if(!(m>>24&255)!==0&&!n.fy){s=n.go +s.toString +r=n.gqm().a +r=A.C(0,r>>>16&255,r>>>8&255,r&255) +q=n.gqm() +p=t.IC.h("e3") +t.m.a(s) +n.guJ() +o=new A.LG(!1,n.gzR(),!0,new A.aP(s,new A.e3(new A.fv(B.bA),new A.f4(r,q),p),p.h("aP")),m)}else{n.guJ() +o=A.aGp(!0,m,m,!1,m,n.gzR(),m)}s=n.go +if(s.gb6(s)!==B.aX){s=n.go +s=s.gb6(s)===B.K}else s=!0 +o=A.ws(o,s,m) +n.guJ() +return o}, +a7t(a){var s=this,r=null,q=s.p2 +return q==null?s.p2=A.cH(r,r,new A.zd(s,s.k3,A.o(s).h("zd<1>")),!1,r,!1,!1,r,r,r,r,r,r,r,r,r,r,r,r,r,r,r,r,r,r,B.Ve,r,r,r,r,r):q}, +k(a){return"ModalRoute("+this.b.k(0)+", animation: "+A.h(this.as)+")"}} +A.ahW.prototype={ +$0(){this.a.fy=this.b}, +$S:0} +A.ahX.prototype={ +$1(a){var s=a.gawr() +return s.gl(s)}, +$S:564} +A.ahV.prototype={ +$0(){}, +$S:0} +A.uR.prototype={ +jn(){var s=0,r=A.a1(t.oj),q,p=this,o +var $async$jn=A.a2(function(a,b){if(a===1)return A.Z(b,r) +while(true)switch(s){case 0:o=p.fN$ +if(o!=null&&o.length!==0){q=B.ic +s=1 +break}q=p.a3Q() +s=1 +break +case 1:return A.a_(q,r)}}) +return A.a0($async$jn,r)}, +goX(){var s=this.fN$ +if(s!=null&&s.length!==0)return B.ic +return A.cx.prototype.goX.call(this)}, +kw(a){var s,r,q=this,p=q.fN$ +if(p!=null&&p.length!==0){s=p.pop() +s.b=null +s.QE() +r=s.c&&--q.mS$===0 +if(q.fN$.length===0||r)q.jH() +return!1}q.a4c(a) +return!0}} +A.T0.prototype={ +H(a){var s,r,q,p=t.w,o=A.bt(a,B.b1,p).w.r,n=Math.max(o.a,0),m=this.d,l=m?o.b:0 +l=Math.max(l,0) +s=Math.max(o.c,0) +r=this.f +q=r?o.d:0 +return new A.bH(new A.aG(n,l,s,Math.max(q,0)),A.pb(this.x,A.bt(a,null,p).w.Ki(r,!0,!0,m),null),null)}} +A.Td.prototype={ +Zo(){}, +W9(a,b){if(b!=null)b.er(new A.F9(null,a,b,0))}, +Wa(a,b,c){b.er(A.aGV(b,null,null,a,c))}, +Aq(a,b,c){b.er(new A.lA(null,c,0,a,b,0))}, +W8(a,b){b.er(new A.pC(null,a,b,0))}, +uF(){}, +m(){this.b=!0}, +k(a){return"#"+A.bh(this)}} +A.oO.prototype={ +uF(){this.a.jq(0)}, +gl8(){return!1}, +gjW(){return!1}, +ghm(){return 0}} +A.aeZ.prototype={ +gl8(){return!1}, +gjW(){return!1}, +ghm(){return 0}, +m(){this.c.$0() +this.xK()}} +A.ans.prototype={ +a6V(a,b){var s,r,q=this +if(b==null)return a +if(a===0){if(q.d!=null)if(q.r==null){s=q.e +s=b.a-s.a>5e4}else s=!1 +else s=!1 +if(s)q.r=0 +return 0}else{s=q.r +if(s==null)return a +else{s+=a +q.r=s +r=q.d +r.toString +if(Math.abs(s)>r){q.r=null +s=Math.abs(a) +if(s>24)return a +else return Math.min(r/3,s)*J.iu(a)}else return 0}}}, +bw(a,b){var s,r,q,p,o=this +o.x=b +s=b.c +s.toString +r=s===0 +if(!r)o.e=b.a +q=b.a +if(o.f)if(r)if(q!=null){r=o.e +r=q.a-r.a>2e4}else r=!0 +else r=!1 +else r=!1 +if(r)o.f=!1 +p=o.a6V(s,q) +if(p===0)return +s=o.a +if(A.a5D(s.w.a.c))p=-p +s.KP(p>0?B.ls:B.lt) +r=s.at +r.toString +s.DL(r-s.r.Hi(s,p))}, +m(){this.x=null +this.b.$0()}, +k(a){return"#"+A.bh(this)}} +A.ab0.prototype={ +W9(a,b){var s=t.uL.a(this.c.x) +if(b!=null)b.er(new A.F9(s,a,b,0))}, +Wa(a,b,c){b.er(A.aGV(b,null,t.zk.a(this.c.x),a,c))}, +Aq(a,b,c){b.er(new A.lA(t.zk.a(this.c.x),c,0,a,b,0))}, +W8(a,b){var s=this.c.x +b.er(new A.pC(s instanceof A.iB?s:null,a,b,0))}, +gl8(){var s=this.c +return(s==null?null:s.w)!==B.b6}, +gjW(){return!0}, +ghm(){return 0}, +m(){this.c=null +this.xK()}, +k(a){return"#"+A.bh(this)+"("+A.h(this.c)+")"}} +A.M5.prototype={ +Zo(){var s=this.a,r=this.c +r===$&&A.b() +s.jq(r.ghm())}, +uF(){var s=this.a,r=this.c +r===$&&A.b() +s.jq(r.ghm())}, +GB(){var s=this.c +s===$&&A.b() +s=s.x +s===$&&A.b() +if(!(Math.abs(this.a.DL(s))<1e-10)){s=this.a +s.iM(new A.oO(s))}}, +EU(){if(!this.b)this.a.jq(0)}, +Aq(a,b,c){var s=this.c +s===$&&A.b() +b.er(new A.lA(null,c,s.ghm(),a,b,0))}, +gjW(){return!0}, +ghm(){var s=this.c +s===$&&A.b() +return s.ghm()}, +m(){var s=this.c +s===$&&A.b() +s.m() +this.xK()}, +k(a){var s=A.bh(this),r=this.c +r===$&&A.b() +return"#"+s+"("+r.k(0)+")"}, +gl8(){return this.d}} +A.O7.prototype={ +GB(){var s=this.a,r=this.d +r===$&&A.b() +r=r.x +r===$&&A.b() +if(s.DL(r)!==0){s=this.a +s.iM(new A.oO(s))}}, +EU(){var s,r +if(!this.b){s=this.a +r=this.d +r===$&&A.b() +s.jq(r.ghm())}}, +Aq(a,b,c){var s=this.d +s===$&&A.b() +b.er(new A.lA(null,c,s.ghm(),a,b,0))}, +gl8(){return!0}, +gjW(){return!0}, +ghm(){var s=this.d +s===$&&A.b() +return s.ghm()}, +m(){var s=this.c +s===$&&A.b() +s.iV(0) +s=this.d +s===$&&A.b() +s.m() +this.xK()}, +k(a){var s=A.bh(this),r=this.d +r===$&&A.b() +return"#"+s+"("+r.k(0)+")"}} +A.F3.prototype={ +wA(a,b,c,d){var s,r=this +if(b.a==null){s=$.hu.op$ +s===$&&A.b() +s=s.a.i(0,c)!=null||s.b.i(0,c)!=null}else s=!0 +if(s){r.b.wA(a,b,c,d) +return}s=r.a +if(s.gaS(s)==null)return +s=s.gaS(s) +s.toString +if(A.b_g(s)){$.c_.D4(new A.anm(r,a,b,c,d)) +return}r.b.wA(a,b,c,d)}, +Bn(a,b){return this.b.Bn(a,b)}, +Bp(a,b){return this.b.Bp(a,b)}, +JK(a){return this.b.JK(a)}} +A.anm.prototype={ +$1(a){var s=this +A.fq(new A.anl(s.a,s.b,s.c,s.d,s.e))}, +$S:3} +A.anl.prototype={ +$0(){var s=this +return s.a.wA(s.b,s.c,s.d,s.e)}, +$S:0} +A.Te.prototype={ +ant(a,b,c,d,e,f){return new A.aC7(this,f,b,c,d,a,e)}, +anp(a,b){return this.ant(null,a,null,null,null,b)}, +nt(a){return A.by()}, +god(){return B.A3}, +gC0(){return A.dg([B.cC,B.d4],t.bd)}, +zY(a,b,c){var s=null +switch(this.nt(a).a){case 3:case 4:case 5:return A.aZI(b,c.b,B.bS,s,s,A.Ln(),B.z,s,s,s,s,B.dF,s) +case 0:case 1:case 2:return b}}, +zX(a,b,c){switch(this.nt(a).a){case 2:case 3:case 4:case 5:return b +case 0:case 1:return A.aL9(c.a,b,B.i)}}, +CC(a){switch(this.nt(a).a){case 2:return new A.ann() +case 4:return new A.ano() +case 0:case 1:case 3:case 5:return new A.anp()}}, +ph(a){switch(this.nt(a).a){case 2:return B.D3 +case 4:return B.D4 +case 0:case 1:case 3:case 5:return B.EG}}, +k(a){return"ScrollBehavior"}} +A.ann.prototype={ +$1(a){return A.aXN(a.gcN(a))}, +$S:565} +A.ano.prototype={ +$1(a){var s=a.gcN(a),r=t.av,q=A.bf(20,null,!1,r) +$.mp() +return new A.wO(q,s,new A.lT(),A.bf(20,null,!1,r))}, +$S:566} +A.anp.prototype={ +$1(a){var s=a.gcN(a) +$.mp() +return new A.kJ(s,new A.lT(),A.bf(20,null,!1,t.av))}, +$S:165} +A.aC7.prototype={ +god(){var s=this.f +return s==null?B.A3:s}, +gC0(){var s=this.r +return s==null?A.dg([B.cC,B.d4],t.bd):s}, +zX(a,b,c){if(this.c)return this.a.zX(a,b,c) +return b}, +zY(a,b,c){if(this.b)return this.a.zY(a,b,c) +return b}, +ph(a){var s=this.a.ph(a) +return s}, +CC(a){return this.a.CC(a)}, +k(a){return"_WrappedScrollBehavior"}} +A.F4.prototype={ +cs(a){var s +if(A.t(this.f)===A.t(a.f))s=!1 +else s=!0 +return s}} +A.Tf.prototype={ +jD(a,b,c){return this.alb(a,b,c)}, +alb(a,b,c){var s=0,r=A.a1(t.H),q=this,p,o,n +var $async$jD=A.a2(function(d,e){if(d===1)return A.Z(e,r) +while(true)switch(s){case 0:n=A.a([],t.mo) +for(p=q.f,o=0;o#"+A.bh(this)+"("+B.b.c_(s,", ")+")"}} +A.aoP.prototype={ +k(a){var s=A.a([],t.s) +this.dZ(s) +return"#"+A.bh(this)+"("+B.b.c_(s,", ")+")"}, +dZ(a){var s,r,q +try{s=this.b +if(s!=null)a.push("estimated child count: "+A.h(s))}catch(q){r=A.ax(q) +a.push("estimated child count: EXCEPTION ("+J.U(r).k(0)+")")}}} +A.a1x.prototype={} +A.TM.prototype={ +apG(a){return null}, +UL(a,b){var s,r,q,p,o,n,m,l,k=null +if(b>=0)p=b>=this.b +else p=!0 +if(p)return k +s=null +try{s=this.a.$2(a,b)}catch(o){r=A.ax(o) +q=A.aZ(o) +n=new A.bG(r,q,"widgets library",A.bo("building"),k,!1) +A.d4(n) +s=A.BS(n)}if(s==null)return k +if(s.a!=null){p=s.a +p.toString +m=new A.a1x(p)}else m=k +p=s +s=new A.iZ(p,k) +l=A.aPw(s,b) +if(l!=null)s=new A.Pw(l,s,k) +p=s +s=new A.Aq(new A.Jw(p,k),k) +return new A.kl(s,m)}} +A.Jw.prototype={ +ac(){return new A.Jx(null,B.j)}} +A.Jx.prototype={ +gwW(){return this.r}, +asi(a){return new A.aAu(this,a)}, +zp(a,b){var s,r=this +if(b){s=r.d;(s==null?r.d=A.aS(t.x9):s).D(0,a)}else{s=r.d +if(s!=null)s.C(0,a)}s=r.d +s=s==null?null:s.a!==0 +s=s===!0 +if(r.r!==s){r.r=s +r.pe()}}, +bx(){var s,r,q,p=this +p.dr() +s=p.c +s.toString +r=A.To(s) +s=p.f +if(s!=r){if(s!=null){q=p.e +if(q!=null)new A.aX(q,A.o(q).h("aX<1>")).aa(0,s.gKg(s))}p.f=r +if(r!=null){s=p.e +if(s!=null)new A.aX(s,A.o(s).h("aX<1>")).aa(0,r.gkq(r))}}}, +D(a,b){var s,r=this,q=r.asi(b) +b.Z(0,q) +s=r.e;(s==null?r.e=A.A(t.x9,t.M):s).n(0,b,q) +r.f.D(0,b) +if(b.gl(b).c!==B.dV)r.zp(b,!0)}, +C(a,b){var s=this.e +if(s==null)return +s=s.C(0,b) +s.toString +b.K(0,s) +this.f.C(0,b) +this.zp(b,!1)}, +m(){var s,r,q=this,p=q.e +if(p!=null){for(p=A.lw(p,p.r,A.o(p).c);p.q();){s=p.d +q.f.C(0,s) +r=q.e.i(0,s) +r.toString +s.K(0,r)}q.e=null}q.d=null +q.aN()}, +H(a){var s=this +s.Dx(a) +if(s.f==null)return s.a.c +return A.aN_(s.a.c,s)}} +A.aAu.prototype={ +$0(){var s=this.b,r=this.a +if(s.gl(s).c!==B.dV)r.zp(s,!0) +else r.zp(s,!1)}, +$S:0} +A.a50.prototype={ +aB(){this.aR() +if(this.r)this.tS()}, +ez(){var s=this.ii$ +if(s!=null){s.a6() +s.eJ() +this.ii$=null}this.tz()}} +A.nq.prototype={ +kv(){var s=this,r=null,q=s.gJ_()?s.giq():r,p=s.gJ_()?s.gip():r,o=s.gXa()?s.gdQ():r,n=s.gXc()?s.gwV():r,m=s.giK(),l=s.gmO(s) +return new A.OB(q,p,o,n,m,l)}, +gJV(){var s=this +return s.gdQ()s.gip()}, +gUw(){var s=this +return s.gdQ()===s.giq()||s.gdQ()===s.gip()}, +gol(){var s=this +return s.gwV()-A.O(s.giq()-s.gdQ(),0,s.gwV())-A.O(s.gdQ()-s.gip(),0,s.gwV())}} +A.OB.prototype={ +giq(){var s=this.a +s.toString +return s}, +gip(){var s=this.b +s.toString +return s}, +gJ_(){return this.a!=null&&this.b!=null}, +gdQ(){var s=this.c +s.toString +return s}, +gXa(){return this.c!=null}, +gwV(){var s=this.d +s.toString +return s}, +gXc(){return this.d!=null}, +k(a){var s=this +return"FixedScrollMetrics("+B.c.af(Math.max(s.gdQ()-s.giq(),0),1)+"..["+B.c.af(s.gol(),1)+"].."+B.c.af(Math.max(s.gip()-s.gdQ(),0),1)+")"}, +giK(){return this.e}, +gmO(a){return this.f}} +A.Yd.prototype={} +A.ij.prototype={} +A.as0.prototype={ +Yi(a){if(t.rS.b(a))++a.hA$ +return!1}} +A.hw.prototype={ +dZ(a){this.a5g(a) +a.push(this.a.k(0))}} +A.F9.prototype={ +dZ(a){var s +this.ty(a) +s=this.d +if(s!=null)a.push(s.k(0))}} +A.kx.prototype={ +dZ(a){var s +this.ty(a) +a.push("scrollDelta: "+A.h(this.e)) +s=this.d +if(s!=null)a.push(s.k(0))}} +A.lA.prototype={ +dZ(a){var s,r=this +r.ty(a) +a.push("overscroll: "+B.c.af(r.e,1)) +a.push("velocity: "+B.c.af(r.f,1)) +s=r.d +if(s!=null)a.push(s.k(0))}} +A.pC.prototype={ +dZ(a){var s +this.ty(a) +s=this.d +if(s!=null)a.push(s.k(0))}} +A.V6.prototype={ +dZ(a){this.ty(a) +a.push("direction: "+this.d.k(0))}} +A.Jm.prototype={ +dZ(a){var s,r +this.DE(a) +s=this.hA$ +r=s===0?"local":"remote" +a.push("depth: "+s+" ("+r+")")}} +A.Jl.prototype={ +cs(a){return this.f!==a.f}} +A.q8.prototype={ +ash(a,b){return this.a.$1(b)}} +A.F6.prototype={ +ac(){return new A.F7(new A.ta(t.z_),B.j)}} +A.F7.prototype={ +K(a,b){var s,r,q=this.d +q.toString +q=A.b1s(q,q.$ti.c) +s=q.$ti.c +for(;q.q();){r=q.c +if(r==null)r=s.a(r) +if(J.d(r.a,b)){q=r.j2$ +q.toString +q.T4(A.o(r).h("iM.E").a(r)) +return}}}, +QD(a){var s,r,q,p,o,n,m,l,k=this.d +if(k.b===0)return +p=A.V(k,!0,t.Sx) +for(k=p.length,o=0;oMath.max(Math.abs(s.a),Math.abs(s.b))}return s.Z2(a,b,c)}, +uE(a,b){var s=this.a +if(s==null)return 0 +return s.uE(a,b)}, +zI(a,b,c,d){var s=this.a +if(s==null){s=b.c +s.toString +return s}return s.zI(a,b,c,d)}, +Ab(a,b){var s=this.a +if(s==null)return null +return s.Ab(a,b)}, +gtl(){var s=this.a +s=s==null?null:s.gtl() +return s==null?$.aSm():s}, +Cs(a){var s=this.a +s=s==null?null:s.Cs(a) +if(s==null){s=a.w.f +s===$&&A.b() +s=new A.Gv(1/s,1/(0.05*s))}return s}, +gJD(){var s=this.a +s=s==null?null:s.gJD() +return s==null?18:s}, +gBw(){var s=this.a +s=s==null?null:s.gBw() +return s==null?50:s}, +gw9(){var s=this.a +s=s==null?null:s.gw9() +return s==null?8000:s}, +HA(a){var s=this.a +if(s==null)return 0 +return s.HA(a)}, +gIl(){var s=this.a +return s==null?null:s.gIl()}, +k(a){var s=this.a +if(s==null)return"ScrollPhysics" +return"ScrollPhysics -> "+s.k(0)}} +A.RZ.prototype={ +uH(a){return new A.RZ(this.uM(a))}, +zI(a,b,c,d){var s,r,q,p,o,n,m,l +if(d!==0){s=!1 +r=!1}else{s=!0 +r=!0}q=c.a +q.toString +p=b.a +p.toString +if(q===p){o=c.b +o.toString +n=b.b +n.toString +n=o===n +o=n}else o=!1 +if(o)s=!1 +o=c.c +o.toString +n=b.c +n.toString +if(o!==n){if(isFinite(q)){n=c.b +n.toString +if(isFinite(n))if(isFinite(p)){n=b.b +n.toString +n=isFinite(n)}else n=!1 +else n=!1}else n=!1 +if(n)r=!1 +s=!1}n=om}else m=!0 +if(m)r=!1 +if(s){if(n&&p>q)return p-(q-o) +q=c.b +q.toString +if(o>q){n=b.b +n.toString +n=n0&&b<0))n=p>0&&b>0 +else n=!0 +s=a.ax +if(n){s.toString +m=this.WV((o-Math.abs(b))/s)}else{s.toString +m=this.WV(o/s)}l=J.iu(b) +if(n&&this.b===B.zE)return l*Math.abs(b) +return l*A.aVt(o,Math.abs(b),m)}, +uE(a,b){return 0}, +Ab(a,b){var s,r,q,p,o,n,m,l=this.Cs(a) +if(Math.abs(b)>=l.c||a.gJV()){switch(this.b.a){case 1:s=1400 +break +case 0:s=0 +break +default:s=null}r=this.gtl() +q=a.at +q.toString +p=a.z +p.toString +o=a.Q +o.toString +n=new A.a7Q(p,o,r,l) +if(qo){n.f=new A.u8(o,A.JL(r,q-o,b),B.c3) +n.r=-1/0}else{q=n.e=A.aXx(0.135,q,b,s) +m=q.gAN() +if(b>0&&m>o){p=q.ZE(o) +n.r=p +n.f=new A.u8(o,A.JL(r,o-o,Math.min(q.fp(0,p),5000)),B.c3)}else if(b<0&&mr)q=r +else q=o +r=a.z +r.toString +if(s0){r=a.at +r.toString +p=a.Q +p.toString +p=r>=p +r=p}else r=!1 +if(r)return o +if(b<0){r=a.at +r.toString +p=a.z +p.toString +p=r<=p +r=p}else r=!1 +if(r)return o +r=a.at +r.toString +r=new A.a9f(r,b,n) +p=$.aEG() +s=p*0.35*Math.pow(s/2223.8657884799995,1/(p-1)) +r.e=s +r.f=b*s/p +return r}} +A.A4.prototype={ +uH(a){return new A.A4(this.uM(a))}, +mf(a){return!0}} +A.u7.prototype={ +I(){return"ScrollPositionAlignmentPolicy."+this.b}} +A.nr.prototype={ +a6p(a,b,c,d,e){var s,r,q,p=this +if(d!=null)p.q7(d) +if(p.at==null){s=p.w +r=s.c +r.toString +r=A.aMh(r) +if(r==null)q=null +else{s=s.c +s.toString +q=r.auL(s)}if(q!=null)p.at=q}}, +giq(){var s=this.z +s.toString +return s}, +gip(){var s=this.Q +s.toString +return s}, +gJ_(){return this.z!=null&&this.Q!=null}, +gdQ(){var s=this.at +s.toString +return s}, +gXa(){return this.at!=null}, +gwV(){var s=this.ax +s.toString +return s}, +gXc(){return this.ax!=null}, +q7(a){var s=this,r=a.z +if(r!=null&&a.Q!=null){r.toString +s.z=r +r=a.Q +r.toString +s.Q=r}r=a.at +if(r!=null)s.at=r +r=a.ax +if(r!=null)s.ax=r +s.fr=a.fr +a.fr=null +if(A.t(a)!==A.t(s))s.fr.Zo() +s.w.LB(s.fr.gl8()) +s.dy.sl(0,s.fr.gjW())}, +gmO(a){var s=this.w.f +s===$&&A.b() +return s}, +a10(a){var s,r,q,p=this,o=p.at +o.toString +if(a!==o){s=p.r.uE(p,a) +o=p.at +o.toString +r=a-s +p.at=r +if(r!==o){p.GR() +p.xE() +r=p.at +r.toString +p.If(r-o)}if(Math.abs(s)>1e-10){o=p.fr +o.toString +r=p.kv() +q=$.aa.F$.z.i(0,p.w.Q) +q.toString +o.Aq(r,q,s) +return s}}return 0}, +anu(a){var s=this.at +s.toString +this.at=s+a +this.ch=!0}, +WS(a){var s=this,r=s.at +r.toString +s.as=a-r +s.at=a +s.GR() +s.xE() +$.c_.rx$.push(new A.anw(s))}, +Hk(a){if(this.ax!==a){this.ax=a +this.ch=!0}return!0}, +Hh(a,b){var s,r,q,p=this +if(!A.Ll(p.z,a,0.001)||!A.Ll(p.Q,b,0.001)||p.ch||p.db!==A.bR(p.giK())){p.z=a +p.Q=b +p.db=A.bR(p.giK()) +s=p.ay?p.kv():null +p.ch=!1 +p.CW=!0 +if(p.ay){r=p.cx +r.toString +s.toString +r=!p.anv(r,s)}else r=!1 +if(r)return!1 +p.ay=!0}if(p.CW){p.a3U() +p.w.a0S(p.r.mf(p)) +p.CW=!1}s=p.kv() +if(p.cx!=null){r=Math.max(s.gdQ()-s.giq(),0) +q=p.cx +if(r===Math.max(q.gdQ()-q.giq(),0))if(s.gol()===p.cx.gol()){r=Math.max(s.gip()-s.gdQ(),0) +q=p.cx +r=r===Math.max(q.gip()-q.gdQ(),0)&&s.e===p.cx.e}else r=!1 +else r=!1 +r=!r}else r=!0 +if(r){if(!p.cy){A.fq(p.gao1()) +p.cy=!0}p.cx=p.kv()}return!0}, +anv(a,b){var s=this,r=s.r.zI(s.fr.gjW(),b,a,s.fr.ghm()),q=s.at +q.toString +if(r!==q){s.at=r +return!1}return!0}, +uF(){this.fr.uF() +this.GR()}, +GR(){var s,r,q,p,o,n=this,m=n.w +switch(m.a.c.a){case 0:s=B.fi +r=B.fh +break +case 1:s=B.fj +r=B.fk +break +case 2:s=B.fh +r=B.fi +break +case 3:s=B.fk +r=B.fj +break +default:s=null +r=null}q=A.aS(t._S) +p=n.at +p.toString +o=n.z +o.toString +if(p>o)q.D(0,r) +p=n.at +p.toString +o=n.Q +o.toString +if(pr)o=r +break +default:o=m}r=n.at +r.toString +if(o===r)return A.d5(m,t.H) +if(e.a===B.z.a){n.eE(o) +return A.d5(m,t.H)}return n.jD(o,d,e)}, +wd(a,b,c,d){var s,r=this.z +r.toString +s=this.Q +s.toString +b=A.O(b,r,s) +return this.a4h(0,b,c,d)}, +iM(a){var s,r,q=this,p=q.fr +if(p!=null){s=p.gl8() +r=q.fr.gjW() +if(r&&!a.gjW())q.I9() +q.fr.m()}else{r=!1 +s=!1}q.fr=a +if(s!==a.gl8())q.w.LB(q.fr.gl8()) +q.dy.sl(0,q.fr.gjW()) +if(!r&&q.fr.gjW())q.Id()}, +Id(){var s=this.fr +s.toString +s.W9(this.kv(),$.aa.F$.z.i(0,this.w.Q))}, +If(a){var s,r,q=this.fr +q.toString +s=this.kv() +r=$.aa.F$.z.i(0,this.w.Q) +r.toString +q.Wa(s,r,a)}, +I9(){var s,r,q,p=this,o=p.fr +o.toString +s=p.kv() +r=p.w +q=$.aa.F$.z.i(0,r.Q) +q.toString +o.W8(s,q) +q=p.at +q.toString +r.r.sl(0,q) +q=$.jA.e0$ +q===$&&A.b() +q.apO() +o=r.c +o.toString +o=A.aMh(o) +if(o!=null){s=r.c +s.toString +r=p.at +r.toString +if(o.a==null)o.a=A.A(t.K,t.z) +s=o.MY(s) +if(s.length!==0)o.a.n(0,new A.JN(s),r)}}, +ao2(){var s,r,q +this.cy=!1 +s=this.w.Q +if($.aa.F$.z.i(0,s)!=null){r=this.kv() +q=$.aa.F$.z.i(0,s) +q.toString +s=$.aa.F$.z.i(0,s) +if(s!=null)s.er(new A.u6(r,q,0))}}, +m(){var s=this,r=s.fr +if(r!=null)r.m() +s.fr=null +r=s.dy +r.fy$=$.aO() +r.fx$=0 +s.eJ()}, +dZ(a){var s,r,q=this +q.a4g(a) +s=q.z +s=s==null?null:B.c.af(s,1) +r=q.Q +r=r==null?null:B.c.af(r,1) +a.push("range: "+A.h(s)+".."+A.h(r)) +r=q.ax +a.push("viewport: "+A.h(r==null?null:B.c.af(r,1)))}} +A.anw.prototype={ +$1(a){this.a.as=0}, +$S:3} +A.u6.prototype={ +Us(){return A.aGV(this.b,this.hA$,null,this.a,null)}, +dZ(a){this.a5f(a) +a.push(this.a.k(0))}} +A.Jk.prototype={ +dZ(a){var s,r +this.DE(a) +s=this.hA$ +r=s===0?"local":"remote" +a.push("depth: "+s+" ("+r+")")}} +A.a1M.prototype={} +A.F8.prototype={ +giK(){return this.w.a.c}, +q7(a){var s,r=this +r.a3T(a) +r.fr.a=r +r.k4=a.k4 +s=a.ok +if(s!=null){r.ok=s +s.a=r +a.ok=null}}, +iM(a){var s,r=this +r.k3=0 +r.a3V(a) +s=r.ok +if(s!=null)s.m() +r.ok=null +if(!r.fr.gjW())r.KP(B.ie)}, +jq(a){var s,r,q,p=this,o=p.r.Ab(p,a) +if(o!=null){s=p.fr +s=s==null?null:s.gl8() +s=new A.M5(s!==!1,p) +r=A.aJA(null,0,p.w) +r.by() +q=r.cC$ +q.b=!0 +q.a.push(s.gGA()) +r.Hd(o).a.a.ix(s.gET()) +s.c=r +p.iM(s)}else p.iM(new A.oO(p))}, +KP(a){var s,r,q,p=this +if(p.k4===a)return +p.k4=a +s=p.kv() +r=p.w.Q +q=$.aa.F$.z.i(0,r) +q.toString +r=$.aa.F$.z.i(0,r) +if(r!=null)r.er(new A.V6(a,s,q,0))}, +jD(a,b,c){var s,r,q,p=this,o=p.at +o.toString +if(A.Ll(a,o,p.r.Cs(p).a)){p.eE(a) +return A.d5(null,t.H)}o=p.at +o.toString +s=new A.O7(p) +r=new A.bI(new A.aD($.aw,t.d),t.gR) +s.c=r +o=A.aJA("DrivenScrollActivity",o,p.w) +o.by() +q=o.cC$ +q.b=!0 +q.a.push(s.gGA()) +o.z=B.aA +o.kj(a,b,c).a.a.ix(s.gET()) +s.d!==$&&A.bS() +s.d=o +p.iM(s) +return r.a}, +eE(a){var s,r,q=this +q.iM(new A.oO(q)) +s=q.at +s.toString +if(s!==a){q.WS(a) +q.Id() +r=q.at +r.toString +q.If(r-s) +q.I9()}q.jq(0)}, +K1(a){var s,r,q,p,o=this +if(a===0){o.jq(0) +return}s=o.at +s.toString +r=o.z +r.toString +r=Math.max(s+a,r) +q=o.Q +q.toString +p=Math.min(r,q) +if(p!==s){o.iM(new A.oO(o)) +o.KP(-a>0?B.ls:B.lt) +s=o.at +s.toString +o.dy.sl(0,!0) +o.WS(p) +o.Id() +r=o.at +r.toString +o.If(r-s) +o.I9() +o.jq(0)}}, +m(){var s=this.ok +if(s!=null)s.m() +this.ok=null +this.a3X()}} +A.a7Q.prototype={ +Gr(a){var s,r=this,q=r.r +q===$&&A.b() +if(a>q){if(!isFinite(q))q=0 +r.w=q +q=r.f +q===$&&A.b() +s=q}else{r.w=0 +q=r.e +q===$&&A.b() +s=q}s.a=r.a +return s}, +eG(a,b){return this.Gr(b).eG(0,b-this.w)}, +fp(a,b){return this.Gr(b).fp(0,b-this.w)}, +lD(a){return this.Gr(a).lD(a-this.w)}, +k(a){return"BouncingScrollSimulation(leadingExtent: "+A.h(this.b)+", trailingExtent: "+A.h(this.c)+")"}} +A.a9f.prototype={ +eG(a,b){var s,r=this.e +r===$&&A.b() +s=A.O(b/r,0,1) +r=this.f +r===$&&A.b() +return this.b+r*(1-Math.pow(1-s,$.aEG()))}, +fp(a,b){var s=this.e +s===$&&A.b() +return this.c*Math.pow(1-A.O(b/s,0,1),$.aEG()-1)}, +lD(a){var s=this.e +s===$&&A.b() +return a>=s}} +A.Tj.prototype={ +I(){return"ScrollViewKeyboardDismissBehavior."+this.b}} +A.Ti.prototype={ +alY(a,b,c,d){return new A.GH(c,0,b,null,this.Q,this.ch,d,null)}, +H(a){var s,r,q,p,o,n,m,l,k,j,i=this,h=null,g=i.UM(a),f=i.cx +if(f==null){s=A.d_(a,h) +if(s!=null){r=s.r +q=r.ang(0,0) +p=r.ank(0,0) +r=i.c===B.b2 +f=r?p:q +g=A.pb(g,s.HN(r?q:p),h)}}o=A.a([f!=null?new A.TR(f,g,h):g],t.p) +r=i.c +n=A.b6l(a,r,!1) +m=i.f +m=A.aZl(a,r) +l=m?A.RO(a):i.e +k=A.aMX(n,i.ch,l,i.at,!1,h,i.r,i.ay,h,i.as,new A.anx(i,n,o)) +j=m&&l!=null?new A.xk(h,h,B.Xk,k,h):k +if(i.ax===B.WD)return new A.e1(new A.any(a),j,h,t.ZE) +else return j}} +A.anx.prototype={ +$2(a,b){return this.a.alY(a,b,this.b,this.c)}, +$S:570} +A.any.prototype={ +$1(a){var s=A.aFU(this.a) +if(a.d!=null&&s.gcK())s.np() +return!1}, +$S:571} +A.Mt.prototype={} +A.Q_.prototype={ +UM(a){return new A.TP(this.RG,null)}} +A.aAo.prototype={ +$2(a,b){if(!a.a)a.K(0,b)}, +$S:71} +A.Fa.prototype={ +ac(){var s=null,r=t.B +return new A.xL(new A.a1h($.aO()),new A.bp(s,r),new A.bp(s,t.hA),new A.bp(s,r),B.vu,s,A.A(t.yb,t.M),s,!0,s,s,s,B.j)}, +aw_(a,b){return this.f.$2(a,b)}} +A.anF.prototype={ +$1(a){return null}, +$S:572} +A.Jn.prototype={ +cs(a){return this.r!==a.r}} +A.xL.prototype={ +gVY(){var s,r=this +switch(r.a.c.a){case 2:s=r.d.at +s.toString +return new A.k(0,s) +case 0:s=r.d.at +s.toString +return new A.k(0,-s) +case 3:s=r.d.at +s.toString +return new A.k(-s,0) +case 1:s=r.d.at +s.toString +return new A.k(s,0)}}, +gtR(){var s=this.a.d +if(s==null){s=this.x +s.toString}return s}, +gfa(){return this.a.z}, +Tw(){var s,r,q,p=this,o=p.a.Q +if(o==null){o=p.c +o.toString +o=A.anq(o)}p.w=o +s=p.c +s.toString +s=o.ph(s) +p.e=s +o=p.a +r=o.e +if(r!=null)p.e=new A.A4(r.uM(s)) +else{o=o.Q +if(o!=null){s=p.c +s.toString +p.e=o.ph(s).uH(p.e)}}q=p.d +if(q!=null){p.gtR().v8(0,q) +A.fq(q.gvn())}p.gtR() +o=p.e +o.toString +s=$.aO() +s=new A.F8(B.ie,o,p,!0,null,new A.ca(!1,s,t.uh),s) +s.a6p(p,null,!0,q,o) +if(s.at==null&&!0)s.at=0 +if(s.fr==null)s.iM(new A.oO(s)) +p.d=s +o=p.gtR() +s=p.d +s.toString +o.ah(s)}, +lX(a,b){var s,r,q,p=this.r +this.rF(p,"offset") +s=p.y +r=s==null +if((r?A.o(p).h("cN.T").a(s):s)!=null){q=this.d +q.toString +p=r?A.o(p).h("cN.T").a(s):s +p.toString +if(b)q.at=p +else q.eE(p)}}, +aB(){if(this.a.d==null)this.x=A.anr() +this.aR()}, +bx(){var s=this,r=s.c +r.toString +r=A.d_(r,B.iQ) +s.y=r==null?null:r.CW +r=s.c +r.toString +r=A.d_(r,B.cM) +r=r==null?null:r.b +if(r==null){r=s.c +r.toString +A.Vi(r).toString +r=$.c4().d +if(r==null){r=self.window.devicePixelRatio +if(r===0)r=1}}s.f=r +s.Tw() +s.a5i()}, +ait(a){var s,r,q=this,p=null,o=q.a.Q,n=o==null,m=a.Q,l=m==null +if(n!==l)return!0 +if(!n)if(!l)if(A.t(m.a)===A.t(o.a))if(m.b===o.b)if(m.c===o.c)if(A.a5M(m.god(),o.god()))if(A.a5M(m.gC0(),o.gC0()))o=!1 +else o=!0 +else o=!0 +else o=!0 +else o=!0 +else o=!0 +else o=!1 +else o=!1 +if(o)return!0 +o=q.a +s=o.e +if(s==null){o=o.Q +if(o==null)s=p +else{n=q.c +n.toString +n=o.ph(n) +s=n}}r=a.e +if(r==null)if(l)r=p +else{o=q.c +o.toString +o=m.ph(o) +r=o}do{o=s==null +n=o?p:A.t(s) +m=r==null +if(n!=(m?p:A.t(r)))return!0 +s=o?p:s.a +r=m?p:r.a}while(s!=null||r!=null) +o=q.a.d +o=o==null?p:A.t(o) +n=a.d +return o!=(n==null?p:A.t(n))}, +aO(a){var s,r,q=this +q.a5j(a) +s=a.d +if(q.a.d!=s){if(s==null){s=q.x +s.toString +r=q.d +r.toString +s.v8(0,r) +q.x.m() +q.x=null}else{r=q.d +r.toString +s.v8(0,r) +if(q.a.d==null)q.x=A.anr()}s=q.gtR() +r=q.d +r.toString +s.ah(r)}if(q.ait(a))q.Tw()}, +m(){var s,r=this,q=r.a.d +if(q!=null){s=r.d +s.toString +q.v8(0,s)}else{q=r.x +if(q!=null){s=r.d +s.toString +q.v8(0,s)}q=r.x +if(q!=null)q.m()}r.d.m() +r.r.m() +r.a5k()}, +a0S(a){var s,r,q=this +if(a===q.ay)s=!a||A.bR(q.a.c)===q.ch +else s=!1 +if(s)return +if(!a){q.at=B.vu +q.RO()}else{switch(A.bR(q.a.c).a){case 1:q.at=A.aY([B.mb,new A.cM(new A.anB(q),new A.anC(q),t.ok)],t.u,t.xR) +break +case 0:q.at=A.aY([B.ma,new A.cM(new A.anD(q),new A.anE(q),t.Uv)],t.u,t.xR) +break}a=!0}q.ay=a +q.ch=A.bR(q.a.c) +s=q.Q +if(s.ga5()!=null){s=s.ga5() +s.Gx(q.at) +if(!s.a.f){r=s.c.ga_() +r.toString +t.Wx.a(r) +s.e.alo(r)}}}, +LB(a){var s,r=this +if(r.ax===a)return +r.ax=a +s=r.as +if($.aa.F$.z.i(0,s)!=null){s=$.aa.F$.z.i(0,s).ga_() +s.toString +t.f1.a(s).sXk(r.ax)}}, +ahT(a){var s=this.d,r=s.fr.ghm(),q=new A.aeZ(this.ga9l(),s) +s.iM(q) +s.k3=r +this.cx=q}, +ahV(a){var s,r,q=this.d,p=q.r,o=p.HA(q.k3) +p=p.gIl() +s=p==null?null:0 +r=new A.ans(q,this.ga9j(),o,p,a.a,o!==0,s,a.d,a) +q.iM(new A.ab0(r,q)) +this.CW=q.ok=r}, +ahW(a){var s=this.CW +if(s!=null)s.bw(0,a)}, +ahU(a){var s,r,q,p,o=this.CW +if(o!=null){s=a.b +s.toString +r=-s +if(A.a5D(o.a.w.a.c))r=-r +o.x=a +if(o.f){s=J.iu(r) +q=o.c +p=Math.abs(r)>Math.abs(q)*0.5 +if(s===J.iu(q)&&p)r+=q}o.a.jq(r)}}, +RO(){if($.aa.F$.z.i(0,this.Q)==null)return +var s=this.cx +if(s!=null)s.a.jq(0) +s=this.CW +if(s!=null)s.a.jq(0)}, +a9m(){this.cx=null}, +a9k(){this.CW=null}, +RU(a){var s,r=this.d,q=r.at +q.toString +s=r.z +s.toString +s=Math.max(q+a,s) +r=r.Q +r.toString +return Math.min(s,r)}, +RT(a){var s,r,q=A.bc("delta"),p=$.jA.dv$ +p===$&&A.b() +p=p.a +p=p.gaT(p) +s=A.hp(p,A.o(p).h("n.E")) +p=this.w +p===$&&A.b() +p=p.gC0() +r=s.fJ(0,p.glr(p))&&a.gcN(a)===B.bj +switch(A.bR(this.a.c).a){case 0:q.b=r?a.gny().b:a.gny().a +break +case 1:q.b=r?a.gny().a:a.gny().b +break}if(A.a5D(this.a.c))q.b=q.aI()*-1 +return q.aI()}, +agU(a){var s,r,q,p,o=this +if(t.Mj.b(a)&&o.d!=null){s=o.e +if(s!=null){r=o.d +r.toString +r=!s.mf(r) +s=r}else s=!1 +if(s)return +q=o.RT(a) +p=o.RU(q) +if(q!==0){s=o.d.at +s.toString +s=p!==s}else s=!1 +if(s)$.hm.cZ$.Z5(0,a,o.gahX())}else if(t.xb.b(a))o.d.K1(0)}, +ahY(a){var s,r=this,q=r.RT(a),p=r.RU(q) +if(q!==0){s=r.d.at +s.toString +s=p!==s}else s=!1 +if(s)r.d.K1(q)}, +acU(a){var s,r +if(a.hA$===0){s=$.aa.F$.z.i(0,this.z) +r=s==null?null:s.ga_() +if(r!=null)r.aY()}return!1}, +H(a){var s,r,q,p,o,n,m,l=this,k=null,j=l.d +j.toString +s=l.at +r=l.a +q=r.w +p=l.ax +o=new A.Jn(l,j,A.D1(B.ce,new A.lJ(A.cH(k,k,A.ws(r.aw_(a,j),p,l.as),!1,k,!1,!q,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k),s,B.b_,q,l.Q),k,k,k,l.gagT(),k),k) +j=l.a +if(!j.w){s=l.d +s.toString +l.e.toString +o=new A.e1(l.gacT(),new A.a1N(s,!0,j.x,o,l.z),k,t.ji)}j=j.c +s=l.gtR() +r=l.a.as +n=new A.Tk(j,s,r) +j=l.w +j===$&&A.b() +o=j.zY(a,j.zX(a,o,n),n) +m=A.To(a) +if(m!=null){j=l.d +j.toString +o=new A.Jp(l,j,o,m,k)}return o}} +A.anB.prototype={ +$0(){var s=this.a.w +s===$&&A.b() +return A.aNY(null,s.god())}, +$S:187} +A.anC.prototype={ +$1(a){var s,r,q=this.a +a.ax=q.gRP() +a.ay=q.gRR() +a.ch=q.gRS() +a.CW=q.gRQ() +a.cx=q.gRN() +s=q.e +a.cy=s==null?null:s.gJD() +s=q.e +a.db=s==null?null:s.gBw() +s=q.e +a.dx=s==null?null:s.gw9() +s=q.w +s===$&&A.b() +r=q.c +r.toString +a.fr=s.CC(r) +a.at=q.a.y +a.b=q.y +a.c=q.w.god()}, +$S:132} +A.anD.prototype={ +$0(){var s=this.a.w +s===$&&A.b() +return A.af3(null,s.god())}, +$S:183} +A.anE.prototype={ +$1(a){var s,r,q=this.a +a.ax=q.gRP() +a.ay=q.gRR() +a.ch=q.gRS() +a.CW=q.gRQ() +a.cx=q.gRN() +s=q.e +a.cy=s==null?null:s.gJD() +s=q.e +a.db=s==null?null:s.gBw() +s=q.e +a.dx=s==null?null:s.gw9() +s=q.w +s===$&&A.b() +r=q.c +r.toString +a.fr=s.CC(r) +a.at=q.a.y +a.b=q.y +a.c=q.w.god()}, +$S:182} +A.Jp.prototype={ +ac(){return new A.a1O(B.j)}} +A.a1O.prototype={ +aB(){var s,r,q,p +this.aR() +s=this.a +r=s.c +s=s.d +q=t.x9 +p=t.i +q=new A.Jo(r,new A.ab8(r,30),s,A.A(q,p),A.A(q,p),A.a([],t.D1),A.aS(q),B.WN,$.aO()) +s.Z(0,q.gRF()) +this.d=q}, +aO(a){var s,r +this.bb(a) +s=this.a.d +if(a.d!==s){r=this.d +r===$&&A.b() +r.sbv(0,s)}}, +m(){var s=this.d +s===$&&A.b() +s.m() +this.aN()}, +H(a){var s=this.a,r=s.f,q=this.d +q===$&&A.b() +return new A.xM(r,s.e,q,null)}} +A.Jo.prototype={ +sbv(a,b){var s,r=this.id +if(b===r)return +s=this.gRF() +r.K(0,s) +this.id=b +b.Z(0,s)}, +ahH(){if(this.fr)return +this.fr=!0 +$.c_.rx$.push(new A.aAl(this))}, +I8(){var s=this,r=s.b,q=A.wK(r,A.S(r).c) +r=s.k1 +r.wy(r,new A.aAm(q)) +r=s.k2 +r.wy(r,new A.aAn(q)) +s.a2N()}, +IX(a){var s,r,q,p,o,n,m=this +if(m.fy==null&&m.fx==null)m.go=m.Pn(a.b) +s=A.a5x(m.dx) +r=a.b +q=a.c +p=-s.a +o=-s.b +if(a.a===B.fd){r=m.fy=m.PW(r) +a=A.aMY(new A.k(r.a+p,r.b+o),q)}else{r=m.fx=m.PW(r) +a=A.aMZ(new A.k(r.a+p,r.b+o),q)}n=m.a2V(a) +if(n===B.lw){m.dy.e=!1 +return n}if(m.go){r=m.dy +r.a1I(A.aGN(a.b,0,0)) +if(r.e)return B.lw}return n}, +PW(a){var s,r,q,p=this.dx,o=p.c.ga_() +o.toString +t.x.a(o) +s=o.fZ(a) +if(!this.go){r=s.b +if(r<0||s.a<0)return A.c7(o.br(0,null),B.e) +if(r>o.gv(o).b||s.a>o.gv(o).a)return B.UW}q=A.a5x(p) +return A.c7(o.br(0,null),new A.k(s.a+q.a,s.b+q.b))}, +GK(a,b){var s,r,q,p=this,o=p.dx,n=A.a5x(o) +o=o.c.ga_() +o.toString +t.x.a(o) +s=o.br(0,null) +r=p.d +if(r!==-1)q=p.fx==null||b +else q=!1 +if(q){r=J.jX(p.b[r]).a +r.toString +p.fx=A.c7(s,A.c7(J.aF0(p.b[p.d],o),r.a.R(0,new A.k(0,-r.b/2))).R(0,n))}r=p.c +if(r!==-1)q=!0 +else q=!1 +if(q){r=J.jX(p.b[r]).b +r.toString +p.fy=A.c7(s,A.c7(J.aF0(p.b[p.c],o),r.a.R(0,new A.k(0,-r.b/2))).R(0,n))}}, +Tj(){return this.GK(!0,!0)}, +Qa(a){var s,r,q,p,o,n,m,l,k=this,j=k.b +if(a){s=j[k.c] +r=s.gl(s).b +q=s.gl(s).b.b}else{s=j[k.d] +r=s.gl(s).a +j=s.gl(s).a +q=j==null?null:j.b}if(q==null||r==null)return +j=k.dx +p=j.c.ga_() +p.toString +t.x.a(p) +o=A.c7(s.br(0,p),r.a) +n=p.gv(p).a +p=p.gv(p).b +switch(j.a.c.a){case 0:m=o.b +l=m-q +if(m>=p&&l<=0)return +if(m>p){j=k.id +n=j.at +n.toString +j.eE(n+p-m) +return}if(l<0){j=k.id +p=j.at +p.toString +j.eE(p+0-l)}return +case 1:r=o.a +if(r>=n&&r<=0)return +if(r>n){j=k.id +p=j.at +p.toString +j.eE(p+r-n) +return}if(r<0){j=k.id +p=j.at +p.toString +j.eE(p+r-0)}return +case 2:m=o.b +l=m-q +if(m>=p&&l<=0)return +if(m>p){j=k.id +n=j.at +n.toString +j.eE(n+m-p) +return}if(l<0){j=k.id +p=j.at +p.toString +j.eE(p+l-0)}return +case 3:r=o.a +if(r>=n&&r<=0)return +if(r>n){j=k.id +p=j.at +p.toString +j.eE(p+n-r) +return}if(r<0){j=k.id +p=j.at +p.toString +j.eE(p+0-r)}return}}, +Pn(a){var s,r=this.dx.c.ga_() +r.toString +t.x.a(r) +s=r.fZ(a) +return new A.w(0,0,0+r.gv(r).a,0+r.gv(r).b).p(0,s)}, +fM(a,b){var s,r,q=this +switch(b.a.a){case 0:s=q.dx.d.at +s.toString +q.k1.n(0,a,s) +q.Av(a) +break +case 1:s=q.dx.d.at +s.toString +q.k2.n(0,a,s) +q.Av(a) +break +case 5:case 6:q.Av(a) +s=q.dx +r=s.d.at +r.toString +q.k1.n(0,a,r) +s=s.d.at +s.toString +q.k2.n(0,a,s) +break +case 2:q.k2.C(0,a) +q.k1.C(0,a) +break +case 3:case 4:s=q.dx +r=s.d.at +r.toString +q.k2.n(0,a,r) +s=s.d.at +s.toString +q.k1.n(0,a,s) +break}return q.a2O(a,b)}, +Av(a){var s,r,q,p,o,n,m=this,l=m.dx,k=l.d.at +k.toString +s=m.k1 +r=s.i(0,a) +q=m.fx +if(q!=null)p=r==null||Math.abs(k-r)>1e-10 +else p=!1 +if(p){o=A.a5x(l) +a.qM(A.aMZ(new A.k(q.a+-o.a,q.b+-o.b),null)) +q=l.d.at +q.toString +s.n(0,a,q)}s=m.k2 +n=s.i(0,a) +q=m.fy +if(q!=null)k=n==null||Math.abs(k-n)>1e-10 +else k=!1 +if(k){o=A.a5x(l) +a.qM(A.aMY(new A.k(q.a+-o.a,q.b+-o.b),null)) +l=l.d.at +l.toString +s.n(0,a,l)}}, +m(){var s=this +s.k1.a0(0) +s.k2.a0(0) +s.fr=!1 +s.dy.e=!1 +s.a2P()}} +A.aAl.prototype={ +$1(a){var s=this.a +if(!s.fr)return +s.fr=!1 +s.zq()}, +$S:3} +A.aAm.prototype={ +$2(a,b){return!this.a.p(0,a)}, +$S:161} +A.aAn.prototype={ +$2(a,b){return!this.a.p(0,a)}, +$S:161} +A.a1N.prototype={ +az(a){var s=this.e,r=new A.a13(s,!0,this.r,null,A.ag(t.T)) +r.aw() +r.saP(null) +s.Z(0,r.gY6()) +return r}, +aF(a,b){b.sal5(!0) +b.sbv(0,this.e) +b.sa0L(this.r)}} +A.a13.prototype={ +sbv(a,b){var s,r=this,q=r.A +if(b===q)return +s=r.gY6() +q.K(0,s) +r.A=b +b.Z(0,s) +r.aY()}, +sal5(a){return}, +sa0L(a){if(a==this.al)return +this.al=a +this.aY()}, +f3(a){var s,r,q=this +q.hs(a) +a.a=!0 +if(q.A.ay){a.b7(B.X2,!0) +s=q.A +r=s.at +r.toString +a.aM=r +a.e=!0 +r=s.Q +r.toString +a.aJ=r +s=s.z +s.toString +a.bq=s +a.sa0B(q.al)}}, +qk(a,b,c){var s,r,q,p,o,n,m,l=this +if(c.length!==0){s=B.b.gL(c).dy +s=!(s!=null&&s.p(0,B.A1))}else s=!0 +if(s){l.bg=null +l.Mq(a,b,c) +return}s=l.bg +if(s==null)s=l.bg=A.Fl(null,l.gtd()) +s.sJg(a.Q||a.y) +s.sbd(0,a.e) +s=l.bg +s.toString +r=t.QF +q=A.a([s],r) +p=A.a([],r) +for(s=c.length,o=null,n=0;n#"+A.bh(r)+"("+B.b.c_(q,", ")+")"}, +gt(a){return A.N(this.a,this.b,null,this.d,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a,b){var s,r=this +if(b==null)return!1 +if(r===b)return!0 +if(J.U(b)!==A.t(r))return!1 +if(b instanceof A.Tk)if(b.a===r.a)if(b.b===r.b)s=b.d===r.d +else s=!1 +else s=!1 +else s=!1 +return s}} +A.anA.prototype={ +$2(a,b){if(b!=null)this.a.push(a+b.k(0))}, +$S:575} +A.ab8.prototype={ +FQ(a,b){switch(b.a){case 0:return a.a +case 1:return a.b}}, +aiy(a,b){switch(b.a){case 0:return a.a +case 1:return a.b}}, +a1I(a){var s=this,r=s.a.gVY() +s.d=a.au(0,r.a,r.b) +if(s.e)return +s.pY()}, +pY(){var s=0,r=A.a1(t.H),q,p=this,o,n,m,l,k,j,i,h,g,f,e,d,c +var $async$pY=A.a2(function(a,b){if(a===1)return A.Z(b,r) +while(true)switch(s){case 0:d=p.a +c=d.c.ga_() +c.toString +t.x.a(c) +o=A.hs(c.br(0,null),new A.w(0,0,0+c.gv(c).a,0+c.gv(c).b)) +c=p.e=!0 +n=d.gVY() +m=o.a +l=o.b +k=p.FQ(new A.k(m+n.a,l+n.b),A.bR(d.a.c)) +j=k+p.aiy(new A.G(o.c-m,o.d-l),A.bR(d.a.c)) +l=p.d +l===$&&A.b() +i=p.FQ(new A.k(l.a,l.b),A.bR(d.a.c)) +l=p.d +h=p.FQ(new A.k(l.c,l.d),A.bR(d.a.c)) +switch(d.a.c.a){case 0:case 3:if(h>j){m=d.d +l=m.at +l.toString +m=m.z +m.toString +m=l>m}else m=!1 +if(m){g=Math.min(h-j,20) +m=d.d +l=m.z +l.toString +m=m.at +m.toString +f=Math.max(l,m-g)}else{if(im}else m=!1 +if(m){g=Math.min(k-i,20) +m=d.d +l=m.z +l.toString +m=m.at +m.toString +f=Math.max(l,m-g)}else{if(h>j){m=d.d +l=m.at +l.toString +m=m.Q +m.toString +m=l>>24&255)/255*q.gl(q))),r.gl(r)>>>16&255,r.gl(r)>>>8&255,r.gl(r)&255)) +return s}, +QT(a){var s,r,q,p=this +if(a){s=$.W().aj() +r=p.c +q=p.r +s.sM(0,A.C(B.c.an(255*((r.gl(r)>>>24&255)/255*q.gl(q))),r.gl(r)>>>16&255,r.gl(r)>>>8&255,r.gl(r)&255)) +s.saG(0,B.D) +s.sbs(1) +return s}s=$.W().aj() +r=p.b +q=p.r +s.sM(0,A.C(B.c.an(255*((r.gl(r)>>>24&255)/255*q.gl(q))),r.gl(r)>>>16&255,r.gl(r)>>>8&255,r.gl(r)&255)) +return s}, +ag_(){return this.QT(!1)}, +afW(a,b){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e=this,d=null +e.gyZ() +switch(e.gyZ().a){case 0:s=e.f +r=e.cy +r===$&&A.b() +q=new A.G(s,r) +s+=2*e.x +r=e.db.d +r.toString +p=e.dx +p=p===B.a1||p===B.a8 +o=e.Q +n=new A.G(s,r-(p?o.gbO(o)+o.gbX(o):o.gdw())) +r=e.x +m=r+e.Q.a +o=e.cx +o===$&&A.b() +r=m-r +l=e.gyu() +k=new A.k(r,l) +j=k.R(0,new A.k(s,0)) +i=e.db.d +i.toString +p=e.dx +p=p===B.a1||p===B.a8 +h=e.Q +p=p?h.gbO(h)+h.gbX(h):h.gdw() +g=new A.k(r+s,l+(i-p)) +f=o +break +case 1:s=e.f +r=e.cy +r===$&&A.b() +q=new A.G(s,r) +r=e.x +p=e.db.d +p.toString +o=e.dx +o=o===B.a1||o===B.a8 +l=e.Q +o=o?l.gbO(l)+l.gbX(l):l.gdw() +n=new A.G(s+2*r,p-o) +o=e.f +p=e.x +m=b.a-o-p-e.Q.c +o=e.cx +o===$&&A.b() +p=m-p +r=e.gyu() +k=new A.k(p,r) +s=e.db.d +s.toString +l=e.dx +l=l===B.a1||l===B.a8 +i=e.Q +g=new A.k(p,r+(s-(l?i.gbO(i)+i.gbX(i):i.gdw()))) +j=k +f=o +break +case 2:s=e.cy +s===$&&A.b() +q=new A.G(s,e.f) +s=e.db.d +s.toString +r=e.dx +r=r===B.a1||r===B.a8 +p=e.Q +r=r?p.gbO(p)+p.gbX(p):p.gdw() +p=e.f +o=e.x +p+=2*o +n=new A.G(s-r,p) +r=e.cx +r===$&&A.b() +f=o+e.Q.b +o=e.gyu() +s=f-e.x +k=new A.k(o,s) +j=k.R(0,new A.k(0,p)) +l=e.db.d +l.toString +i=e.dx +i=i===B.a1||i===B.a8 +h=e.Q +g=new A.k(o+(l-(i?h.gbO(h)+h.gbX(h):h.gdw())),s+p) +m=r +break +case 3:s=e.cy +s===$&&A.b() +q=new A.G(s,e.f) +s=e.db.d +s.toString +r=e.dx +r=r===B.a1||r===B.a8 +p=e.Q +r=r?p.gbO(p)+p.gbX(p):p.gdw() +p=e.f +o=e.x +n=new A.G(s-r,p+2*o) +r=e.cx +r===$&&A.b() +f=b.b-p-o-e.Q.d +o=e.gyu() +p=f-e.x +k=new A.k(o,p) +s=e.db.d +s.toString +l=e.dx +l=l===B.a1||l===B.a8 +i=e.Q +g=new A.k(o+(s-(l?i.gbO(i)+i.gbX(i):i.gdw())),p) +j=k +m=r +break +default:g=d +j=g +k=j +n=k +q=n +f=q +m=f}s=k.a +r=k.b +e.ch=new A.w(s,r,s+n.a,r+n.b) +e.CW=new A.w(m,f,m+q.a,f+q.b) +s=e.r +if(s.gl(s)!==0){s=e.ch +s.toString +a.cB(s,e.ag_()) +a.ig(j,g,e.QT(!0)) +s=e.y +if(s!=null){r=e.CW +r.toString +a.bQ(A.lH(r,s),e.gQS()) +return}s=e.CW +s.toString +a.cB(s,e.gQS()) +return}}, +am(a,b){var s,r,q,p,o,n,m,l,k,j,i,h,g=this,f=g.dx +if(f!=null){s=g.db +if(s!=null){r=s.b +r.toString +s=s.a +s.toString +s=r<=s}else s=!0}else s=!0 +if(s)return +s=g.db.d +s.toString +f=f===B.a1||f===B.a8 +r=g.Q +f=f?r.gbO(r)+r.gbX(r):r.gdw() +if(s-f-2*g.w<=0)return +f=g.db +s=f.b +s.toString +if(s==1/0||s==-1/0)return +f=f.gol() +s=g.dx +s=s===B.a1||s===B.a8 +r=g.Q +s=s?r.gbO(r)+r.gbX(r):r.gdw() +r=g.db +q=r.b +q.toString +p=r.a +p.toString +r=r.d +r.toString +o=g.dx +o=o===B.a1||o===B.a8 +n=g.Q +o=o?n.gbO(n)+n.gbX(n):n.gdw() +m=A.O((f-s)/(q-p+r-o),0,1) +o=g.db.d +o.toString +f=g.dx +f=f===B.a1||f===B.a8 +s=g.Q +f=f?s.gbO(s)+s.gbX(s):s.gdw() +f=Math.min(o-f-2*g.w,g.at) +o=g.db.d +o.toString +s=g.dx +s=s===B.a1||s===B.a8 +r=g.Q +s=s?r.gbO(r)+r.gbX(r):r.gdw() +l=Math.max(f,(o-s-2*g.w)*m) +s=g.db.gol() +o=g.db.d +o.toString +f=g.as +r=g.dx +r=r===B.a1||r===B.a8 +q=g.Q +r=r?q.gbO(q)+q.gbX(q):q.gdw() +k=Math.min(f,o-r-2*g.w) +f=g.dx +f=f===B.a8||f===B.cm +r=g.db +if((f?Math.max(r.gip()-r.gdQ(),0):Math.max(r.gdQ()-r.giq(),0))>0){f=g.dx +f=f===B.a8||f===B.cm +r=g.db +r=(f?Math.max(r.gdQ()-r.giq(),0):Math.max(r.gip()-r.gdQ(),0))>0 +f=r}else f=!1 +j=f?k:k*(1-A.O(1-s/o,0,0.2)/0.2) +f=g.db.d +f.toString +s=g.dx +s=s===B.a1||s===B.a8 +r=g.Q +s=s?r.gbO(r)+r.gbX(r):r.gdw() +s=A.O(l,j,f-s-2*g.w) +g.cy=s +f=g.db +r=f.b +r.toString +q=f.a +q.toString +i=r-q +if(i>0){r=f.c +r.toString +h=A.O((r-q)/i,0,1)}else h=0 +r=g.dx +q=r===B.a8 +p=q||r===B.cm?1-h:h +f=f.d +f.toString +r=r===B.a1||q +q=g.Q +r=r?q.gbO(q)+q.gbX(q):q.gdw() +g.cx=p*(f-r-2*g.w-s)+g.gaek() +return g.afW(a,b)}, +Lg(a){var s,r,q,p,o=this,n=o.db,m=n.b +m.toString +s=n.a +s.toString +n=n.d +n.toString +r=o.dx +r=r===B.a1||r===B.a8 +q=o.Q +r=r?q.gbO(q)+q.gbX(q):q.gdw() +q=o.w +p=o.cy +p===$&&A.b() +return(m-s)*a/(n-r-2*q-p)}, +vL(a){var s,r,q=this +if(q.CW==null)return null +if(!q.ay){s=q.r +if(s.gl(s)!==0){s=q.db +r=s.a +r.toString +s=s.b +s.toString +s=r===s}else s=!0}else s=!0 +if(s)return!1 +return q.ch.p(0,a)}, +Xf(a,b,c){var s,r,q,p=this,o=p.ch +if(o==null)return!1 +if(p.ay)return!1 +s=p.db +r=s.a +r.toString +s=s.b +s.toString +if(r===s)return!1 +q=o.j0(A.hv(p.CW.gaK(),24)) +s=p.r +if(s.gl(s)===0){if(c&&b===B.bj)return q.p(0,a) +return!1}switch(b.a){case 0:case 4:return q.p(0,a) +case 1:case 2:case 3:case 5:return o.p(0,a)}}, +arf(a,b){return this.Xf(a,b,!1)}, +Xg(a,b){var s,r,q=this +if(q.CW==null)return!1 +if(q.ay)return!1 +s=q.r +if(s.gl(s)===0)return!1 +s=q.db +r=s.a +r.toString +s=s.b +s.toString +if(r===s)return!1 +switch(b.a){case 0:case 4:s=q.CW +return s.j0(A.hv(s.gaK(),24)).p(0,a) +case 1:case 2:case 3:case 5:return q.CW.p(0,a)}}, +eX(a){var s,r=this +if(r.a.j(0,a.a))if(r.b.j(0,a.b))if(r.c.j(0,a.c))if(r.e==a.e)if(r.f===a.f)if(r.r===a.r)if(r.w===a.w)if(r.x===a.x)if(J.d(r.y,a.y))if(r.Q.j(0,a.Q))if(r.as===a.as)if(r.at===a.at)s=r.ay!==a.ay +else s=!0 +else s=!0 +else s=!0 +else s=!0 +else s=!0 +else s=!0 +else s=!0 +else s=!0 +else s=!0 +else s=!0 +else s=!0 +else s=!0 +return s}, +Dk(a){return!1}, +gxk(){return null}, +k(a){return"#"+A.bh(this)}} +A.anJ.prototype={ +$1(a){var s,r +if(a!=null){s=a.b +s.toString +r=a.a +r.toString +r=s>r +s=r}else s=!1 +return s}, +$S:576} +A.xs.prototype={ +ac(){return A.aZJ(t.jV)}, +ng(a){return this.cx.$1(a)}} +A.lL.prototype={ +gnP(){var s=this.a.d +return s}, +gpo(){var s=this.a.e +return s===!0}, +gSh(){if(this.gpo())this.a.toString +return!1}, +goi(){this.a.toString +return!0}, +aB(){var s,r,q,p,o=this,n=null +o.aR() +s=A.c5(n,o.a.ay,n,n,o) +s.by() +r=s.cM$ +r.b=!0 +r.a.push(o.gakl()) +o.x=s +s=o.y=A.dc(B.ar,s,n) +r=o.a +q=r.w +if(q==null)q=6 +p=r.r +r=r.db +r=new A.Fc(B.ju,B.n,B.n,n,q,s,0,0,p,n,B.bB,18,18,r,$.aO()) +s.a.Z(0,r.gdm()) +o.at!==$&&A.bS() +o.at=r}, +bx(){this.dr()}, +akm(a){if(a!==B.K)if(this.gnP()!=null)this.goi()}, +wP(){var s,r=this,q=r.at +q===$&&A.b() +r.a.toString +q.sM(0,B.ju) +r.a.toString +q.savI(null) +if(r.gSh()){r.a.toString +s=B.ER}else s=B.n +q.sm1(s) +if(r.gSh()){r.a.toString +s=B.Kj}else s=B.n +q.sZX(s) +s=r.c.ap(t.I) +s.toString +q.sbS(s.w) +s=r.a.w +q.sKp(s==null?6:s) +q.sws(r.a.r) +r.a.toString +s=r.c +s.toString +s=A.bt(s,B.b1,t.w).w +q.sdn(0,s.r) +q.sD5(r.a.db) +r.a.toString +q.sJv(0) +r.a.toString +q.sbV(0,null) +r.a.toString +q.sHW(0) +r.a.toString +q.sJE(0,18) +r.a.toString +q.sY9(18) +q.sXj(!r.goi())}, +aO(a){var s,r=this +r.bb(a) +s=r.a.e +if(s!=a.e)if(s===!0){s=r.w +if(s!=null)s.b3(0) +s=r.x +s===$&&A.b() +s.z=B.aA +s.kj(1,B.ae,null)}else{s=r.x +s===$&&A.b() +s.dc(0)}}, +ak5(a){var s,r,q,p,o,n=this,m=B.b.gct(n.r.f),l=A.bc("primaryDeltaFromDragStart"),k=A.bc("primaryDeltaFromLastDragUpdate") +switch(m.w.a.c.a){case 0:s=a.b +l.b=n.d.b-s +k.b=n.e.b-s +break +case 1:s=a.a +l.b=s-n.d.a +k.b=s-n.e.a +break +case 2:s=a.b +l.b=s-n.d.b +k.b=s-n.e.b +break +case 3:s=a.a +l.b=n.d.a-s +k.b=n.e.a-s +break}s=n.at +s===$&&A.b() +r=l.aI() +q=n.f +q.toString +p=s.Lg(r+q) +if(l.aI()>0){r=m.at +r.toString +r=pr}else r=!1 +else r=!0 +if(r){r=m.at +r.toString +p=r+s.Lg(k.aI())}s=m.at +s.toString +if(p!==s){o=p-m.r.uE(m,p) +s=n.c +s.toString +s=A.anq(s) +r=n.c +r.toString +switch(s.nt(r).a){case 1:case 3:case 4:case 5:s=m.z +s.toString +r=m.Q +r.toString +o=A.O(o,s,r) +break +case 2:case 0:break}m.eE(o)}}, +yH(){var s,r=this +if(!r.gpo()){s=r.w +if(s!=null)s.b3(0) +r.w=A.cy(r.a.ch,new A.akC(r))}}, +nu(){var s=this.r.f +if(s.length!==0)return A.bR(B.b.gct(s).giK()) +return null}, +AY(){if(this.nu()==null)return +var s=this.w +if(s!=null)s.b3(0)}, +B_(a){var s,r,q,p,o,n,m=this +m.r=m.gnP() +if(m.nu()==null)return +s=m.w +if(s!=null)s.b3(0) +s=m.x +s===$&&A.b() +s.c7(0) +m.e=m.d=a +s=m.at +s===$&&A.b() +r=s.db +q=r.b +q.toString +p=r.a +p.toString +o=q-p +if(o>0){q=r.c +q.toString +n=A.O(q/o,0,1)}else n=0 +r=r.d +r.toString +q=s.dx +q=q===B.a1||q===B.a8 +p=s.Q +q=q?p.gbO(p)+p.gbX(p):p.gdw() +p=s.w +s=s.cy +s===$&&A.b() +m.f=n*(r-q-2*p-s) +m.as=!0}, +aqW(a){var s,r=this +if(J.d(r.e,a))return +s=B.b.gct(r.r.f) +if(!s.r.mf(s))return +if(r.nu()==null)return +r.ak5(a) +r.e=a}, +AZ(a,b){var s=this +s.as=!1 +if(s.nu()==null)return +s.yH() +s.r=s.f=s.e=s.d=null}, +adG(a){var s,r,q,p,o,n=this,m=n.gnP() +n.r=m +s=B.b.gct(m.f) +if(!s.r.mf(s))return +m=s.w +switch(m.a.c.a){case 0:case 2:r=n.at +r===$&&A.b() +r=r.cx +r===$&&A.b() +q=a.c.b>r?B.a1:B.a8 +break +case 3:case 1:r=n.at +r===$&&A.b() +r=r.cx +r===$&&A.b() +q=a.c.a>r?B.du:B.cm +break +default:q=null}m=$.aa.F$.z.i(0,m.Q) +m.toString +p=A.jy(m) +p.toString +o=A.ank(p,new A.eR(q,B.fc)) +m=B.b.gct(n.r.f) +r=B.b.gct(n.r.f).at +r.toString +m.wd(0,r+o,B.jK,B.aD)}, +Gp(a){var s,r,q=this.gnP() +if(q==null)return!0 +s=q.f +r=s.length +if(r>1)return!1 +return r===0||A.bR(B.b.gct(s).giK())===a}, +ai_(a){var s,r,q=this,p=q.a +p.toString +if(!p.ng(a.Us()))return!1 +if(q.gpo()){p=q.x +p===$&&A.b() +s=p.Q +s===$&&A.b() +if(s!==B.aW&&s!==B.a7)p.c7(0)}r=a.a +p=r.e +if(q.Gp(A.bR(p))){s=q.at +s===$&&A.b() +s.fW(0,r,p)}return!1}, +acW(a){var s,r,q,p=this +if(!p.a.ng(a))return!1 +s=a.a +r=s.b +r.toString +q=s.a +q.toString +if(r<=q){r=p.x +r===$&&A.b() +q=r.Q +q===$&&A.b() +if(q!==B.K&&q!==B.aX)r.dc(0) +r=s.e +if(p.Gp(A.bR(r))){q=p.at +q===$&&A.b() +q.fW(0,s,r)}return!1}if(a instanceof A.kx||a instanceof A.lA){r=p.x +r===$&&A.b() +q=r.Q +q===$&&A.b() +if(q!==B.aW&&q!==B.a7)r.c7(0) +r=p.w +if(r!=null)r.b3(0) +r=s.e +if(p.Gp(A.bR(r))){q=p.at +q===$&&A.b() +q.fW(0,s,r)}}else if(a instanceof A.pC)if(p.d==null)p.yH() +return!1}, +gaas(){var s=this,r=A.A(t.u,t.xR) +if(s.gnP()==null||!s.goi())return r +r.n(0,B.a4K,new A.cM(new A.aky(s),new A.akz(s),t.ff)) +r.n(0,B.a4L,new A.cM(new A.akA(s),new A.akB(s),t.Bk)) +return r}, +XJ(a,b,c){var s,r=this.z +if($.aa.F$.z.i(0,r)==null)return!1 +s=A.aHW(r,a) +r=this.at +r===$&&A.b() +return r.Xf(s,b,!0)}, +IP(a){var s,r=this +if(r.XJ(a.gbv(a),a.gcN(a),!0)){r.Q=!0 +s=r.x +s===$&&A.b() +s.c7(0) +s=r.w +if(s!=null)s.b3(0)}else if(r.Q){r.Q=!1 +r.yH()}}, +IQ(a){this.Q=!1 +this.yH()}, +R3(a){var s=A.bR(B.b.gct(this.r.f).giK())===B.aI?a.gny().a:a.gny().b +return A.a5D(B.b.gct(this.r.f).w.a.c)?s*-1:s}, +SG(a){var s,r=B.b.gct(this.r.f).at +r.toString +s=B.b.gct(this.r.f).z +s.toString +s=Math.max(r+a,s) +r=B.b.gct(this.r.f).Q +r.toString +return Math.min(s,r)}, +acE(a){var s,r,q,p=this +p.r=p.gnP() +s=p.R3(a) +r=p.SG(s) +if(s!==0){q=B.b.gct(p.r.f).at +q.toString +q=r!==q}else q=!1 +if(q)B.b.gct(p.r.f).K1(s)}, +ai1(a){var s,r,q,p,o=this +o.r=o.gnP() +s=o.at +s===$&&A.b() +s=s.vL(a.gbR()) +if(s===!0){s=o.r +if(s!=null)if(s.f.length!==0)s=!0 +else s=!1 +else s=!1}else s=!1 +if(s){r=B.b.gct(o.r.f) +if(t.Mj.b(a)){if(!r.r.mf(r))return +q=o.R3(a) +p=o.SG(q) +if(q!==0){s=r.at +s.toString +s=p!==s}else s=!1 +if(s)$.hm.cZ$.Z5(0,a,o.gacD())}else if(t.xb.b(a)){s=r.at +s.toString +r.eE(s)}}}, +m(){var s=this,r=s.x +r===$&&A.b() +r.m() +r=s.w +if(r!=null)r.b3(0) +r=s.at +r===$&&A.b() +r.r.a.K(0,r.gdm()) +r.eJ() +s.a4H()}, +H(a){var s,r,q=this,p=null +q.wP() +s=q.gaas() +r=q.at +r===$&&A.b() +return new A.e1(q.gahZ(),new A.e1(q.gacV(),new A.iZ(A.D1(B.ce,new A.lJ(A.tr(A.mE(new A.iZ(q.a.c,p),r,q.z,p,B.Q),B.aP,p,p,new A.akD(q),new A.akE(q)),s,p,!1,p),p,p,p,q.gai0(),p),p),p,t.WA),p,t.ji)}} +A.akC.prototype={ +$0(){var s=this.a,r=s.x +r===$&&A.b() +r.dc(0) +s.w=null}, +$S:0} +A.aky.prototype={ +$0(){var s=this.a,r=s.a.CW,q=t.S,p=A.ds(q),o=A.aQX() +return new A.mg(s.z,r,null,B.cw,A.A(q,t.SP),p,s,null,o,A.A(q,t.C))}, +$S:577} +A.akz.prototype={ +$1(a){var s=this.a +a.p2=s.gX6() +a.p3=new A.akv(s) +a.p4=new A.akw(s) +a.RG=new A.akx(s)}, +$S:578} +A.akv.prototype={ +$1(a){return this.a.B_(a.b)}, +$S:88} +A.akw.prototype={ +$1(a){return this.a.aqW(a.b)}, +$S:90} +A.akx.prototype={ +$1(a){return this.a.AZ(a.b,a.c)}, +$S:83} +A.akA.prototype={ +$0(){var s=this.a,r=t.S,q=A.ds(r) +return new A.mh(s.z,B.aD,18,B.cw,A.A(r,t.SP),q,s,null,A.Lm(),A.A(r,t.C))}, +$S:579} +A.akB.prototype={ +$1(a){a.aM=this.a.gadF()}, +$S:580} +A.akD.prototype={ +$1(a){var s +switch(a.gcN(a).a){case 1:case 4:s=this.a +if(s.goi())s.IQ(a) +break +case 2:case 3:case 5:case 0:break}}, +$S:46} +A.akE.prototype={ +$1(a){var s +switch(a.gcN(a).a){case 1:case 4:s=this.a +if(s.goi())s.IP(a) +break +case 2:case 3:case 5:case 0:break}}, +$S:581} +A.mg.prototype={ +il(a){if(!this.Ft(this.cv,a.gbv(a),a.gcN(a)))return!1 +return this.a2H(a)}, +Ft(a,b,c){var s +if($.aa.F$.z.i(0,a)==null)return!1 +s=t.ip.a($.aa.F$.z.i(0,a).gao()).f +s.toString +return t.sm.a(s).Xg(A.aHW(a,b),c)}} +A.mh.prototype={ +il(a){if(!this.Ft(this.hd,a.gbv(a),a.gcN(a)))return!1 +return this.a48(a)}, +Ft(a,b,c){var s,r +if($.aa.F$.z.i(0,a)==null)return!1 +s=t.ip.a($.aa.F$.z.i(0,a).gao()).f +s.toString +t.sm.a(s) +r=A.aHW(a,b) +return s.arf(r,c)&&!s.Xg(r,c)}} +A.zp.prototype={ +bY(){this.dq() +this.cW() +this.f2()}, +m(){var s=this,r=s.b9$ +if(r!=null)r.K(0,s.geM()) +s.b9$=null +s.aN()}} +A.wY.prototype={ +D(a,b){this.Q.D(0,b) +this.RK()}, +C(a,b){var s,r,q=this +if(q.Q.C(0,b))return +s=B.b.cS(q.b,b) +B.b.fz(q.b,s) +r=q.c +if(s<=r)q.c=r-1 +r=q.d +if(s<=r)q.d=r-1 +b.K(0,q.gFl()) +q.RK()}, +RK(){var s,r +if(!this.y){this.y=!0 +s=new A.ail(this) +r=$.c_ +if(r.x1$===B.zC)A.fq(s) +else r.rx$.push(s)}}, +aae(){var s,r,q,p,o,n,m,l,k=this,j=k.Q,i=A.V(j,!0,A.o(j).c) +B.b.dK(i,k.gEr()) +s=k.b +k.b=A.a([],t.D1) +r=k.d +q=k.c +j=k.gFl() +p=0 +o=0 +while(!0){n=i.length +if(!(pMath.min(n,l))k.Av(m) +m.Z(0,j) +B.b.D(k.b,m);++p}}k.c=q +k.d=r +k.Q=A.aS(t.x9)}, +I8(){this.zq()}, +zq(){var s=this,r=s.a0k() +if(!s.at.j(0,r)){s.at=r +s.a6()}s.ajQ()}, +gamz(){return this.gEr()}, +a8l(a,b){var s=A.hs(a.br(0,null),new A.w(0,0,0+a.gv(a).a,0+a.gv(a).b)),r=A.hs(b.br(0,null),new A.w(0,0,0+b.gv(b).a,0+b.gv(b).b)),q=A.aYB(s,r) +if(q!==0)return q +return A.aYA(s,r)}, +acY(){if(this.x)return +this.zq()}, +a0k(){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d=this,c=null,b=d.c +if(b===-1||d.d===-1||d.b.length===0)return new A.pD(c,c,B.dV,B.kG,d.b.length!==0) +if(!d.as){b=d.MW(d.d,b) +d.d=b +d.c=d.MW(d.c,b)}s=J.jX(d.b[d.d]) +b=d.c +r=d.d +q=b>=r +while(!0){if(!(r!==d.c&&s.a==null))break +r+=q?1:-1 +s=J.jX(d.b[r])}b=s.a +if(b!=null){p=d.b[r] +o=d.a.ga_() +o.toString +n=A.c7(p.br(0,t.x.a(o)),b.a) +m=isFinite(n.a)&&isFinite(n.b)?new A.u9(n,b.b,b.c):c}else m=c +l=J.jX(d.b[d.c]) +k=d.c +while(!0){if(!(k!==d.d&&l.b==null))break +k+=q?-1:1 +l=J.jX(d.b[k])}b=l.b +if(b!=null){p=d.b[k] +o=d.a.ga_() +o.toString +j=A.c7(p.br(0,t.x.a(o)),b.a) +i=isFinite(j.a)&&isFinite(j.b)?new A.u9(j,b.b,b.c):c}else i=c +h=A.a([],t.AO) +g=d.gaqY()?new A.w(0,0,0+d.gVc().a,0+d.gVc().b):c +for(f=d.d;f<=d.c;++f){e=J.jX(d.b[f]).d +b=new A.R(e,new A.aim(d,f,g),A.S(e).h("R<1,w>")).DD(0,new A.ain()) +B.b.E(h,A.V(b,!0,b.$ti.h("n.E")))}return new A.pD(m,i,!s.j(0,l)?B.lx:s.c,h,!0)}, +MW(a,b){var s=b>a +while(!0){if(!(a!==b&&J.jX(this.b[a]).c!==B.lx))break +a+=s?1:-1}return a}, +kT(a,b){return}, +ajQ(){var s,r=this,q=null,p=r.e,o=r.r,n=r.d +if(n===-1||r.c===-1){n=r.f +if(n!=null){n.kT(q,q) +r.f=null}n=r.w +if(n!=null){n.kT(q,q) +r.w=null}return}if(!J.d(r.b[n],r.f)){n=r.f +if(n!=null)n.kT(q,q)}if(!J.d(r.b[r.c],r.w)){n=r.w +if(n!=null)n.kT(q,q)}n=r.b +s=r.d +n=r.f=n[s] +if(s===r.c){r.w=n +n.kT(p,o) +return}n.kT(p,q) +n=r.b[r.c] +r.w=n +n.kT(q,o)}, +ON(){var s,r,q,p=this,o=p.d,n=o===-1 +if(n&&p.c===-1)return +if(n||p.c===-1){if(n)o=p.c +n=p.b +new A.ba(n,new A.aij(p,o),A.S(n).h("ba<1>")).aa(0,new A.aik(p)) +return}n=p.c +s=Math.min(o,n) +r=Math.max(o,n) +for(q=0;n=p.b,q=s&&q<=r)continue +p.fM(n[q],B.js)}}, +aqJ(a){var s,r,q,p=this +for(s=p.b,r=s.length,q=0;q")).aa(0,new A.aip(n)) +n.d=n.c=r}return B.aU}else if(s===B.aT){n.d=n.c=r-1 +return B.aU}}return B.aU}, +aq1(a){var s,r,q,p=this +for(s=p.b,r=s.length,q=0;q0&&r===B.b9))break;--s +r=p.fM(p.b[s],a)}if(a.gjV())p.c=s +else p.d=s +return r}, +aq3(a){var s,r,q,p=this +if(p.d===-1)switch(a.goc(a)){case B.ij:case B.ff:p.d=p.c=p.b.length +break +case B.ik:case B.fe:p.d=p.c=0 +break}s=a.gjV()?p.c:p.d +r=p.fM(p.b[s],a) +switch(a.goc(a)){case B.ij:if(r===B.b9)if(s>0){--s +r=p.fM(p.b[s],a.an1(B.ff))}break +case B.ik:if(r===B.aT){q=p.b +if(s=0&&q==null))break +o=s.b=n.fM(m[r],a) +switch(o.a){case 2:case 3:case 4:q=o +break +case 0:if(p===!1){++r +q=B.aU}else if(r===n.b.length-1)q=o +else{++r +p=!0}break +case 1:if(p===!0){--r +q=B.aU}else if(r===0)q=o +else{--r +p=!1}break}}if(a0)n.c=r +else n.d=r +n.ON() +q.toString +return q}, +amA(a,b){return this.gamz().$2(a,b)}} +A.ail.prototype={ +$1(a){var s=this.a +if(!s.y)return +s.y=!1 +if(s.Q.a!==0)s.aae() +s.I8()}, +$0(){return this.$1(null)}, +$C:"$1", +$R:0, +$D(){return[null]}, +$S:195} +A.aim.prototype={ +$1(a){var s,r=this.a,q=r.b[this.b] +r=r.a.ga_() +r.toString +s=A.hs(q.br(0,t.x.a(r)),a) +r=this.c +if(r!=null)return r.ea(s) +return s}, +$S:583} +A.ain.prototype={ +$1(a){return a.gvW(a)&&!a.ga7(a)}, +$S:584} +A.aij.prototype={ +$1(a){return a!==this.a.b[this.b]}, +$S:160} +A.aik.prototype={ +$1(a){return this.a.fM(a,B.js)}, +$S:52} +A.aio.prototype={ +$1(a){return a!==this.a.b[this.b]}, +$S:160} +A.aip.prototype={ +$1(a){return this.a.fM(a,B.js)}, +$S:52} +A.aia.prototype={ +$0(){return this.a.a}, +$S:5} +A.aib.prototype={ +$0(){return!0===this.a.T()}, +$S:5} +A.aic.prototype={ +$0(){return this.a.b}, +$S:5} +A.aid.prototype={ +$0(){return!0===this.a.T()}, +$S:5} +A.aie.prototype={ +$0(){return this.a.c}, +$S:5} +A.aif.prototype={ +$0(){return!0===this.a.T()}, +$S:5} +A.aig.prototype={ +$0(){return!1===this.a.T()}, +$S:5} +A.aih.prototype={ +$0(){return!1===this.a.T()}, +$S:5} +A.aii.prototype={ +$0(){return!1===this.a.T()}, +$S:5} +A.a_5.prototype={} +A.xM.prototype={ +ac(){return new A.a1W(A.aS(t.M),null,!1,B.j)}} +A.a1W.prototype={ +aB(){var s,r,q,p=this +p.aR() +s=p.a +r=s.e +if(r!=null){q=p.c +q.toString +r.a=q +s=s.c +if(s!=null)p.sp6(s)}}, +aO(a){var s,r,q,p,o,n=this +n.bb(a) +s=a.e +if(s!=n.a.e){r=s==null +if(!r){s.a=null +n.d.aa(0,s.gZ9(s))}q=n.a.e +if(q!=null){p=n.c +p.toString +q.a=p +n.d.aa(0,q.gzD(q))}s=r?null:s.at +r=n.a.e +if(!J.d(s,r==null?null:r.at))for(s=n.d,s=A.V(s,!1,A.o(s).c),r=s.length,o=0;o").N(h.h("h3<1,2>")).h("nX<1,2>"),h=A.V(new A.nX(i,h),!0,h.h("n.E")),g=h.length,f=t.MR,e=a.k4,d=0;d").N(g.h("h3<1,2>")).h("nX<1,2>")).aa(0,p) +if(!a1.a&&a.p3){b=i.XW() +k=b==null?-1:b +j=k+1 +J.hH(s,j,i.i(0,j)) +p.$1(j)}}finally{a.p2=null +a.ga_()}}, +anx(a,b){this.f.uN(this,new A.aoQ(this,b,a))}, +dU(a,b,c){var s,r,q,p,o=null +if(a==null)s=o +else{s=a.ga_() +s=s==null?o:s.b}r=t.MR +r.a(s) +q=this.a2k(a,b,c) +if(q==null)p=o +else{p=q.ga_() +p=p==null?o:p.b}r.a(p) +if(s!=p&&s!=null&&p!=null)p.a=s.a +return q}, +j5(a){this.ok.C(0,a.c) +this.ki(a)}, +Z8(a){var s,r=this +r.ga_() +s=a.b +s.toString +s=t.D.a(s).b +s.toString +r.f.uN(r,new A.aoU(r,s))}, +Wx(a,b,c,d,e){var s=this.e +s.toString +t.M0.a(s) +d.toString +s=A.b_L(b,c,d,e,s.d.b) +return s}, +qJ(){var s=this.ok +s.apJ() +s.XW() +s=this.e +s.toString +t.M0.a(s)}, +I6(a){var s=a.b +s.toString +t.D.a(s).b=this.p2}, +jR(a,b){this.ga_().Dz(0,t.x.a(a),this.p1)}, +k0(a,b,c){this.ga_().wc(t.x.a(a),this.p1)}, +kW(a,b){this.ga_().C(0,t.x.a(a))}, +b1(a){var s=this.ok,r=s.$ti +r=r.h("@<1>").N(r.z[1]).h("uW<1,2>") +r=A.cC(new A.uW(s,r),r.h("n.E"),t.h) +B.b.aa(A.V(r,!0,A.o(r).h("n.E")),a)}} +A.aoT.prototype={ +$1(a){var s,r,q,p,o=this,n=o.b +n.p2=a +q=n.ok +if(q.i(0,a)!=null&&!J.d(q.i(0,a),o.c.i(0,a))){q.n(0,a,n.dU(q.i(0,a),null,a)) +o.a.a=!0}s=n.dU(o.c.i(0,a),o.d.d.UL(n,a),a) +if(s!=null){p=o.a +p.a=p.a||!J.d(q.i(0,a),s) +q.n(0,a,s) +q=s.ga_().b +q.toString +r=t.D.a(q) +if(a===0)r.a=0 +else{q=o.e +if(q.ai(0,a))r.a=q.i(0,a)}if(!r.c)n.p1=t.aA.a(s.ga_())}else{o.a.a=!0 +q.C(0,a)}}, +$S:53} +A.aoR.prototype={ +$0(){return null}, +$S:19} +A.aoS.prototype={ +$0(){return this.a.ok.i(0,this.b)}, +$S:590} +A.aoQ.prototype={ +$0(){var s,r,q,p=this,o=p.a +o.p1=p.b==null?null:t.aA.a(o.ok.i(0,p.c-1).ga_()) +s=null +try{q=o.e +q.toString +r=t.M0.a(q) +q=o.p2=p.c +s=o.dU(o.ok.i(0,q),r.d.UL(o,q),q)}finally{o.p2=null}q=p.c +o=o.ok +if(s!=null)o.n(0,q,s) +else o.C(0,q)}, +$S:0} +A.aoU.prototype={ +$0(){var s,r,q,p=this +try{r=p.a +q=r.p2=p.b +s=r.dU(r.ok.i(0,q),null,q)}finally{p.a.p2=null}p.a.ok.C(0,p.b)}, +$S:0} +A.CO.prototype={ +qg(a){var s,r,q=a.b +q.toString +t.Cl.a(q) +s=this.f +if(q.r5$!==s){q.r5$=s +r=a.gaU(a) +if(r instanceof A.r&&!s)r.a8()}}} +A.TT.prototype={ +I(){return"SnapshotMode."+this.b}} +A.FG.prototype={ +szL(a){return}} +A.TV.prototype={ +az(a){var s=new A.zt(A.bt(a,B.cM,t.w).w.b,this.w,this.e,this.f,!0,null,A.ag(t.T)) +s.aw() +s.saP(null) +return s}, +aF(a,b){t.xL.a(b) +b.samO(0,this.e) +b.sasV(0,this.f) +b.smO(0,A.bt(a,B.cM,t.w).w.b) +b.soW(this.w) +b.salE(!0)}} +A.zt.prototype={ +smO(a,b){var s,r=this +if(b===r.A)return +r.A=b +s=r.cd +if(s==null)return +else{s.m() +r.cd=null +r.ag()}}, +soW(a){var s,r=this,q=r.a1 +if(a===q)return +s=r.gdB() +q.K(0,s) +r.a1=a +if(A.t(q)!==A.t(r.a1)||r.a1.eX(q))r.ag() +if(r.y!=null)r.a1.Z(0,s)}, +samO(a,b){var s,r=this,q=r.al +if(b===q)return +s=r.gyN() +q.K(0,s) +r.al=b +if(r.y!=null)b.Z(0,s)}, +sasV(a,b){if(b===this.bg)return +this.bg=b +this.ag()}, +salE(a){return}, +ah(a){var s=this +s.al.Z(0,s.gyN()) +s.a1.Z(0,s.gdB()) +s.tA(a)}, +ad(a){var s,r=this +r.he=!1 +r.al.K(0,r.gyN()) +r.a1.K(0,r.gdB()) +s=r.cd +if(s!=null)s.m() +r.f7=r.cd=null +r.nG(0)}, +m(){var s,r=this +r.al.K(0,r.gyN()) +r.a1.K(0,r.gdB()) +s=r.cd +if(s!=null)s.m() +r.f7=r.cd=null +r.eK()}, +afA(){var s,r=this +r.he=!1 +s=r.cd +if(s!=null)s.m() +r.f7=r.cd=null +r.ag()}, +am(a,b){var s=this,r=s.gv(s) +if(r.ga7(r)){r=s.cd +if(r!=null)r.m() +s.f7=s.cd=null +return}r=s.cd +if(r!=null)r.m() +s.f7=s.cd=null +s.a1.wl(a,b,s.gv(s),A.fF.prototype.gf9.call(s)) +return}} +A.TU.prototype={} +A.Xv.prototype={ +K(a,b){}, +$iaj:1} +A.U4.prototype={ +k(a){var s=this +return B.d.fb(" spell check enabled : "+s.e+"\n spell check service : "+A.h(s.a)+"\n misspelled text style : "+A.h(s.c)+"\n spell check suggestions toolbar builder: "+A.h(s.d)+"\n")}, +j(a,b){var s +if(b==null)return!1 +if(this===b)return!0 +if(b instanceof A.U4)s=b.e===this.e +else s=!1 +return s}, +gt(a){var s=this +return A.N(s.a,s.c,s.d,s.e,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}} +A.Ur.prototype={ +az(a){var s=new A.EJ(new A.w8(new WeakMap(),t.ii),A.aS(t.Cn),A.A(t.X,t.hh),B.ce,null,A.ag(t.T)) +s.aw() +s.saP(null) +return s}, +aF(a,b){}} +A.EJ.prototype={ +Cx(a){var s +this.eN.C(0,a) +s=this.cn +s.i(0,a.cH).C(0,a) +if(s.i(0,a.cH).a===0)s.C(0,a.cH)}, +cD(a,b){var s,r,q=this +if(!q.gv(q).p(0,b))return!1 +s=q.cE(a,b)||q.A===B.b_ +if(s){r=new A.qV(b,q) +q.d6.n(0,r,a) +a.D(0,r)}return s}, +j7(a,b){var s,r,q,p,o,n,m,l,k=this +if(!t.pY.b(a)||a.gdY(a)!==1)return +s=k.eN +if(s.a===0)return +A.w9(b) +r=k.d6.a.get(b) +if(r==null)return +q=k.aaP(s,r.a) +p=t.Cn +o=A.aol(q,q.gFN(),A.o(q).c,p).NG() +n=A.aS(p) +for(q=o.gab(o),p=k.cn;q.q();){m=q.gJ(q) +m=p.i(0,m.cH) +m.toString +n.E(0,m)}l=s.ob(n) +for(s=l.gab(l);s.q();){q=s.gJ(s).eN +if(q!=null)q.$1(a)}for(s=A.cX(n,n.r,n.$ti.c),q=s.$ti.c;s.q();){p=s.d +if(p==null)q.a(p)}}, +aaP(a,b){var s,r,q,p,o=A.aS(t.zE) +for(s=b.length,r=this.eN,q=0;q1)return +if(p.c){q=o.ga5() +q.toString +q.gae() +q=o.ga5() +q.toString +q=q.gae().bu.gck()}else q=!1 +if(q)switch(A.by().a){case 2:case 4:p.a9X(r,B.ag) +break +case 0:case 1:case 3:case 5:p.yc(r,B.ag) +break}else switch(A.by().a){case 2:switch(s){case B.bj:case B.b6:o=o.ga5() +o.toString +o.gae().hO(B.ag,r) +break +case B.bu:case B.cG:case B.aE:case B.c_:q=o.ga5() +q.toString +if(q.gae().cI){q=p.r +q.toString}else q=!1 +if(q){o=o.ga5() +o.toString +o.gae().hO(B.ag,r) +p.uj(r)}break +case null:case void 0:break}break +case 0:case 1:switch(s){case B.bj:case B.b6:o=o.ga5() +o.toString +o.gae().hO(B.ag,r) +break +case B.bu:case B.cG:case B.aE:case B.c_:q=o.ga5() +q.toString +if(q.gae().cI){o=o.ga5() +o.toString +o.gae().hO(B.ag,r) +p.uj(r)}break +case null:case void 0:break}break +case 3:case 4:case 5:o=o.ga5() +o.toString +o.gae().hO(B.ag,r) +break}}, +atn(a){var s,r,q,p,o,n,m,l,k,j,i=this,h=i.a +h.a.toString +if(!i.c){s=h.x +r=s.ga5() +r.toString +if(r.gae().dO===1){r=s.ga5() +r.toString +r=r.gae().e1.at +r.toString +q=new A.k(r-i.e,0)}else{r=s.ga5() +r.toString +r=r.gae().e1.at +r.toString +q=new A.k(0,r-i.e)}p=new A.k(0,i.gRM()-i.d) +r=a.d +o=r.Y(0,a.r) +n=a.x +if(A.zA(n)===2){m=s.ga5() +m.toString +m.gae().D7(B.ag,o.Y(0,q).Y(0,p),r) +switch(a.f){case B.bu:case B.cG:case B.aE:case B.c_:return i.uj(r) +case B.bj:case B.b6:case null:case void 0:return}}if(A.zA(n)===3)switch(A.by().a){case 0:case 1:case 2:switch(a.f){case B.bj:case B.b6:return i.Gm(B.ag,o.Y(0,q).Y(0,p),r) +case B.bu:case B.cG:case B.aE:case B.c_:case null:case void 0:break}return +case 3:return i.RW(B.ag,o.Y(0,q).Y(0,p),r) +case 5:case 4:return i.Gm(B.ag,o.Y(0,q).Y(0,p),r)}switch(A.by().a){case 2:switch(a.f){case B.bj:case B.b6:h=s.ga5() +h.toString +return h.gae().xi(B.ag,o.Y(0,q).Y(0,p),r) +case B.bu:case B.cG:case B.aE:case B.c_:h=s.ga5() +h.toString +if(h.gae().cI){h=i.f +if(h.a===h.b){h=i.r +h.toString}else h=!1}else h=!1 +if(h){h=s.ga5() +h.toString +h.gae().hO(B.ag,r) +return i.uj(r)}break +case null:case void 0:break}return +case 0:case 1:switch(a.f){case B.bj:case B.b6:case B.bu:case B.cG:h=s.ga5() +h.toString +return h.gae().xi(B.ag,o.Y(0,q).Y(0,p),r) +case B.aE:case B.c_:h=s.ga5() +h.toString +if(h.gae().cI){h=s.ga5() +h.toString +h.gae().hO(B.ag,r) +return i.uj(r)}break +case null:case void 0:break}return +case 4:case 3:case 5:h=s.ga5() +h.toString +return h.gae().xi(B.ag,o.Y(0,q).Y(0,p),r)}}s=i.f +if(s.a!==s.b)s=A.by()!==B.au&&A.by()!==B.c1 +else s=!0 +if(s)return i.yc(a.d,B.ag) +h=h.x +s=h.ga5() +s.toString +l=s.a.c.a.b +s=h.ga5() +s.toString +r=a.d +k=s.gae().fD(r) +s=i.f +n=s.c +m=k.a +j=nn +if(j&&l.c===n){s=h.ga5() +s.toString +h=h.ga5() +h.toString +s.hl(h.a.c.a.iW(A.cn(B.m,i.f.d,m,!1)),B.ag)}else if(!j&&m!==n&&l.c!==n){s=h.ga5() +s.toString +h=h.ga5() +h.toString +s.hl(h.a.c.a.iW(A.cn(B.m,i.f.c,m,!1)),B.ag)}else i.yc(r,B.ag)}, +atj(a){var s,r=this +r.r=null +if(r.b&&A.zA(a.c)===2){s=r.a.x.ga5() +s.toString +s.kh()}if(r.c)r.f=null +r.PQ()}} +A.Gh.prototype={ +ac(){return new A.K2(B.j)}} +A.K2.prototype={ +adB(){this.a.c.$0()}, +adA(){this.a.d.$0()}, +ajd(a){var s +this.a.e.$1(a) +s=a.d +if(A.zA(s)===2){s=this.a.ax.$1(a) +return s}if(A.zA(s)===3){s=this.a.ay.$1(a) +return s}}, +aje(a){if(A.zA(a.d)===1)this.a.y.$1(a)}, +ajc(){this.a.z.$0()}, +abz(a){this.a.ch.$1(a)}, +abA(a){this.a.CW.$1(a)}, +aby(a){this.a.cx.$1(a)}, +aam(a){var s=this.a.f +if(s!=null)s.$1(a)}, +aak(a){var s=this.a.r +if(s!=null)s.$1(a)}, +acc(a){this.a.Q.$1(a)}, +aca(a){this.a.as.$1(a)}, +ac8(a){this.a.at.$1(a)}, +H(a){var s,r,q=this,p=A.A(t.u,t.xR) +p.n(0,B.m9,new A.cM(new A.aBi(q),new A.aBj(q),t.UN)) +q.a.toString +p.n(0,B.m6,new A.cM(new A.aBk(q),new A.aBl(q),t.jn)) +q.a.toString +switch(A.by().a){case 0:case 1:case 2:p.n(0,B.a4P,new A.cM(new A.aBm(q),new A.aBn(q),t.hg)) +break +case 3:case 4:case 5:p.n(0,B.a4x,new A.cM(new A.aBo(q),new A.aBp(q),t.Qm)) +break}s=q.a +if(s.f!=null||s.r!=null)p.n(0,B.Bl,new A.cM(new A.aBq(q),new A.aBr(q),t.C1)) +s=q.a +r=s.cy +return new A.lJ(s.db,p,r,!0,null)}} +A.aBi.prototype={ +$0(){return A.yf(this.a,null)}, +$S:192} +A.aBj.prototype={ +$1(a){var s=this.a.a +a.bt=s.w +a.B=s.x}, +$S:191} +A.aBk.prototype={ +$0(){return A.Q5(this.a,null,A.dg([B.aE],t.C))}, +$S:190} +A.aBl.prototype={ +$1(a){var s=this.a +a.p3=s.gacb() +a.p4=s.gac9() +a.RG=s.gac7()}, +$S:188} +A.aBm.prototype={ +$0(){var s=null,r=t.S,q=A.ds(r) +return new A.lY(B.af,B.fD,A.aS(r),s,s,0,s,s,s,s,s,s,A.A(r,t.SP),q,this.a,s,A.Lm(),A.A(r,t.C))}, +$S:596} +A.aBn.prototype={ +$1(a){var s +a.at=B.oc +s=this.a +a.AF$=s.gPN() +a.AG$=s.gPM() +a.ch=s.gSN() +a.cx=s.gPv() +a.cy=s.gPw() +a.db=s.gPu() +a.CW=s.gSO() +a.dx=s.gSM()}, +$S:597} +A.aBo.prototype={ +$0(){var s=null,r=t.S,q=A.ds(r) +return new A.lZ(B.af,B.fD,A.aS(r),s,s,0,s,s,s,s,s,s,A.A(r,t.SP),q,this.a,s,A.Lm(),A.A(r,t.C))}, +$S:598} +A.aBp.prototype={ +$1(a){var s +a.at=B.oc +s=this.a +a.AF$=s.gPN() +a.AG$=s.gPM() +a.ch=s.gSN() +a.cx=s.gPv() +a.cy=s.gPw() +a.db=s.gPu() +a.CW=s.gSO() +a.dx=s.gSM()}, +$S:599} +A.aBq.prototype={ +$0(){return A.aL5(this.a,null)}, +$S:179} +A.aBr.prototype={ +$1(a){var s=this.a,r=s.a +a.at=r.f!=null?s.gaal():null +a.ch=r.r!=null?s.gaaj():null}, +$S:178} +A.N5.prototype={ +Z(a,b){var s=this +if(s.fx$<=0)$.aa.X$.push(s) +if(s.ay===B.jt)A.d5(null,t.H) +s.LW(0,b)}, +K(a,b){var s=this +s.LX(0,b) +if(!s.w&&s.fx$<=0)B.b.C($.aa.X$,s)}, +Am(a){switch(a.a){case 1:A.d5(null,t.H) +break +case 0:case 2:case 3:case 4:break}}, +m(){B.b.C($.aa.X$,this) +this.w=!0 +this.eJ()}} +A.vG.prototype={ +I(){return"ClipboardStatus."+this.b}} +A.kE.prototype={ +IT(a){return this.aqq(a)}, +aqq(a){var s=0,r=A.a1(t.H) +var $async$IT=A.a2(function(b,c){if(b===1)return A.Z(c,r) +while(true)switch(s){case 0:return A.a_(null,r)}}) +return A.a0($async$IT,r)}} +A.WK.prototype={} +A.KX.prototype={ +m(){var s=this,r=s.c0$ +if(r!=null)r.K(0,s.gjy()) +s.c0$=null +s.aN()}, +bY(){this.dq() +this.cW() +this.jz()}} +A.KY.prototype={ +m(){var s=this,r=s.c0$ +if(r!=null)r.K(0,s.gjy()) +s.c0$=null +s.aN()}, +bY(){this.dq() +this.cW() +this.jz()}} +A.Gl.prototype={} +A.UF.prototype={ +x0(a){return new A.az(0,a.b,0,a.d)}, +x8(a,b){var s,r,q,p=this,o=p.d +if(o==null)o=p.b.b>=b.b +s=o?p.b:p.c +r=A.b0k(s.a,b.a,a.a) +q=s.b +return new A.k(r,o?Math.max(0,q-b.b):q)}, +nB(a){return!this.b.j(0,a.b)||!this.c.j(0,a.c)||this.d!=a.d}} +A.yo.prototype={ +ac(){return new A.a3g(new A.ca(!0,$.aO(),t.uh),B.j)}} +A.a3g.prototype={ +bx(){var s,r=this +r.dr() +s=r.c +s.toString +r.d=A.aHb(s) +r.Tk()}, +aO(a){this.bb(a) +this.Tk()}, +m(){var s=this.e +s.fy$=$.aO() +s.fx$=0 +this.aN()}, +Tk(){var s=this.d&&this.a.c +this.e.sl(0,s)}, +H(a){var s=this.e +return new A.HN(s.a,s,this.a.d,null)}} +A.HN.prototype={ +cs(a){return this.f!==a.f}} +A.j1.prototype={ +v4(a){var s,r=this +r.e9$=new A.yn(a,null) +r.cW() +r.jz() +s=r.e9$ +s.toString +return s}, +jz(){var s,r=this.e9$ +if(r!=null){s=this.c0$ +r.sJG(0,!s.gl(s))}}, +cW(){var s,r=this,q=r.c +q.toString +s=A.aNE(q) +q=r.c0$ +if(s===q)return +if(q!=null)q.K(0,r.gjy()) +s.Z(0,r.gjy()) +r.c0$=s}} +A.ei.prototype={ +v4(a){var s,r,q=this +if(q.b9$==null)q.cW() +if(q.dD$==null)q.dD$=A.aS(t.DH) +s=new A.a49(q,a,null) +r=q.b9$ +s.sJG(0,!r.gl(r)) +q.dD$.D(0,s) +return s}, +f2(){var s,r,q,p +if(this.dD$!=null){s=this.b9$ +r=!s.gl(s) +for(s=this.dD$,s=A.cX(s,s.r,A.o(s).c),q=s.$ti.c;s.q();){p=s.d;(p==null?q.a(p):p).sJG(0,r)}}}, +cW(){var s,r=this,q=r.c +q.toString +s=A.aNE(q) +q=r.b9$ +if(s===q)return +if(q!=null)q.K(0,r.geM()) +s.Z(0,r.geM()) +r.b9$=s}} +A.a49.prototype={ +m(){this.w.dD$.C(0,this) +this.Mx()}} +A.Hi.prototype={ +Z(a,b){}, +K(a,b){}, +$iaj:1, +gl(){return!0}} +A.UM.prototype={ +H(a){A.apS(new A.a6z(this.c,this.d.a)) +return this.e}} +A.Ac.prototype={ +ac(){return new A.GO(B.j)}, +glJ(){return this.c}} +A.GO.prototype={ +aB(){this.aR() +this.a.glJ().Z(0,this.gFg())}, +aO(a){var s,r=this +r.bb(a) +if(r.a.glJ()!==a.glJ()){s=r.gFg() +a.glJ().K(0,s) +r.a.glJ().Z(0,s)}}, +m(){this.a.glJ().K(0,this.gFg()) +this.aN()}, +abg(){this.a3(new A.asW())}, +H(a){return this.a.H(a)}} +A.asW.prototype={ +$0(){}, +$S:0} +A.TK.prototype={ +H(a){var s=this,r=t.so.a(s.c),q=r.gl(r) +if(s.e===B.Z)q=new A.k(-q.a,q.b) +return new A.OZ(q,s.f,s.r,null)}} +A.Ql.prototype={ +H(a){var s,r,q=this,p=t.m.a(q.c) +switch(p.gb6(p).a){case 0:case 3:s=!1 +break +case 1:case 2:s=!0 +break +default:s=null}p=q.e.$1(p.gl(p)) +r=s?q.r:null +return A.ys(q.f,q.w,r,null,p,!0)}} +A.T5.prototype={} +A.SS.prototype={} +A.Ot.prototype={ +az(a){var s=null,r=new A.En(s,s,s,s,s,A.ag(t.T)) +r.aw() +r.saP(s) +r.sdH(0,this.e) +r.szN(!1) +return r}, +aF(a,b){b.sdH(0,this.e) +b.szN(!1)}} +A.xt.prototype={ +d_(a){var s=A.aZN(this.a,this.b,a) +s.toString +return s}} +A.E8.prototype={ +H(a){var s=t.Jo.a(this.c) +return A.xi(this.e,s.gl(s))}} +A.NB.prototype={ +H(a){var s=this.e,r=s.a +return A.rc(this.r,s.b.a2(0,r.gl(r)),B.cu)}} +A.NJ.prototype={ +H(a){var s=this,r=t.rb.a(s.c) +return A.hh(s.x,s.w,s.r,!0,r.gl(r),null,null,B.a_)}} +A.D0.prototype={ +glJ(){return this.c}, +H(a){return this.Hs(a,this.f)}} +A.LF.prototype={ +glJ(){return A.D0.prototype.glJ.call(this)}, +galZ(){return this.e}, +Hs(a,b){return this.galZ().$2(a,b)}} +A.yv.prototype={ +ac(){var s=this.$ti +return new A.yw(new A.a3O(A.a([],s.h("q<1>")),s.h("a3O<1>")),B.j,s.h("yw<1>"))}} +A.yw.prototype={ +gajg(){var s=this.e +s===$&&A.b() +return s}, +gtQ(){var s=this.a.r,r=this.x +if(r==null){s=$.aO() +s=new A.V_(new A.f3(s),new A.f3(s),B.a4Y,s) +this.x=s}else s=r +return s}, +wN(){var s,r,q,p=this,o=p.d +if(o.gv6()==null)return +s=p.f +r=s==null +q=r?null:s.b!=null +if(q===!0){if(!r)s.b3(0) +p.GJ(0,o.gv6())}else p.GJ(0,o.wN()) +p.zr()}, +wu(){this.GJ(0,this.d.wu()) +this.zr()}, +zr(){var s=this.gtQ(),r=this.d,q=r.a,p=q.length!==0&&r.b>0 +s.sl(0,new A.yx(p,r.gUT())) +if(A.by()!==B.au)return +s=$.aIR() +if(s.b===this){q=q.length!==0&&r.b>0 +r=r.gUT() +s=s.a +s===$&&A.b() +s.dl("UndoManager.setUndoState",A.aY(["canUndo",q,"canRedo",r],t.N,t.y),t.H)}}, +ajE(a){this.wN()}, +agY(a){this.wu()}, +GJ(a,b){var s=this +if(b==null)return +if(J.d(b,s.w))return +s.w=b +s.r=!0 +try{s.a.e.$1(b)}finally{s.r=!1}}, +R6(){var s,r=this +if(J.d(r.a.c.a,r.w))return +if(r.r)return +s=r.a +s=s.d.$2(r.w,s.c.a) +if(!(s==null?!0:s))return +s=r.a.c.a +r.w=s +r.f=r.ajh(s)}, +Px(){if(!this.a.f.gcK())return +$.aIR().b=this +this.zr()}, +aqs(a){switch(a.a){case 0:this.wN() +break +case 1:this.wu() +break}}, +aB(){var s,r=this +r.aR() +s=A.b4x(B.cU,new A.arD(r),r.$ti.c) +r.e!==$&&A.bS() +r.e=s +r.R6() +r.a.c.Z(0,r.gG5()) +r.Px() +r.a.f.Z(0,r.gFh()) +r.gtQ().w.Z(0,r.ga__()) +r.gtQ().x.Z(0,r.gZ4())}, +aO(a){var s,r,q=this +q.bb(a) +s=a.c +if(q.a.c!==s){r=q.d +B.b.a0(r.a) +r.b=-1 +r=q.gG5() +s.K(0,r) +q.a.c.Z(0,r)}s=a.f +if(q.a.f!==s){r=q.gFh() +s.K(0,r) +q.a.f.Z(0,r)}q.a.toString}, +m(){var s,r=this +r.a.c.K(0,r.gG5()) +r.a.f.K(0,r.gFh()) +r.gtQ().w.K(0,r.ga__()) +r.gtQ().x.K(0,r.gZ4()) +s=r.x +if(s!=null)s.m() +s=r.f +if(s!=null)s.b3(0) +r.aN()}, +H(a){var s=t.g,r=t.c +return A.vg(A.aY([B.a4D,new A.cT(this.gajD(),new A.b5(A.a([],s),r),t._n).dL(a),B.a4q,new A.cT(this.gagX(),new A.b5(A.a([],s),r),t.fN).dL(a)],t.u,t.od),this.a.w)}, +ajh(a){return this.gajg().$1(a)}} +A.arD.prototype={ +$1(a){var s=this.a +s.d.p_(a) +s.zr()}, +$S(){return this.a.$ti.h("~(1)")}} +A.yx.prototype={ +k(a){return"UndoHistoryValue(canUndo: "+this.a+", canRedo: "+this.b+")"}, +j(a,b){if(b==null)return!1 +if(this===b)return!0 +return b instanceof A.yx&&b.a===this.a&&b.b===this.b}, +gt(a){var s=this.a?519018:218159 +return A.N(s,this.b?519018:218159,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}} +A.V_.prototype={ +m(){var s=this.w,r=$.aO() +s.fy$=r +s.fx$=0 +s=this.x +s.fy$=r +s.fx$=0 +this.eJ()}} +A.a3O.prototype={ +gv6(){var s=this.a +return s.length===0?null:s[this.b]}, +gUT(){var s=this.a.length +return s!==0&&this.b"))}} +A.zG.prototype={ +aB(){var s,r=this +r.aR() +s=r.a.c +r.d=s.a +s.Z(0,r.gGW())}, +aO(a){var s,r,q=this +q.bb(a) +s=a.c +if(s!==q.a.c){r=q.gGW() +s.K(0,r) +s=q.a.c +q.d=s.a +s.Z(0,r)}}, +m(){this.a.c.K(0,this.gGW()) +this.aN()}, +ako(){this.a3(new A.aBT(this))}, +H(a){var s,r=this.a +r.toString +s=this.d +s===$&&A.b() +return r.d.$3(a,s,null)}} +A.aBT.prototype={ +$0(){var s=this.a +s.d=s.a.c.a}, +$S:0} +A.Vf.prototype={ +H(a){var s=this,r=s.c,q=s.e,p=s.f +return new A.IP(r,new A.as_(s),q,p,new A.Hy(r,q,p,t.Q8))}} +A.as_.prototype={ +$2(a,b){var s=this.a,r=s.c +return new A.uY(r,new A.IN(b,new A.It(r,s.d,null),null),null)}, +$S:602} +A.IP.prototype={ +bI(a){return new A.a0z(this,B.a0)}, +az(a){return this.f}} +A.a0z.prototype={ +glg(){var s=this.e +s.toString +t.mP.a(s) +return s.e}, +ga_(){return t.Ju.a(A.bi.prototype.ga_.call(this))}, +GY(){var s,r,q,p,o,n,m,l=this +try{n=l.e +n.toString +s=t.mP.a(n).d.$2(l,l.glg()) +l.aM=l.dU(l.aM,s,null)}catch(m){r=A.ax(m) +q=A.aZ(m) +n=A.bo("building "+l.k(0)) +p=new A.bG(r,q,"widgets library",n,null,!1) +A.d4(p) +o=A.BS(p) +l.aM=l.dU(null,o,l.c)}}, +ed(a,b){var s,r=this +r.pA(a,b) +s=t.Ju +r.glg().sKm(s.a(A.bi.prototype.ga_.call(r))) +r.N7() +r.GY() +s.a(A.bi.prototype.ga_.call(r)).K2() +if(r.glg().at!=null)s.a(A.bi.prototype.ga_.call(r)).xg()}, +N8(a){var s,r,q=this +if(a==null)a=A.aNZ(q) +s=q.glg() +a.CW.D(0,s) +r=a.cx +if(r!=null)s.ah(r) +s=$.tX +s.toString +r=t.Ju.a(A.bi.prototype.ga_.call(q)) +s.cy$.n(0,r.go.a,r) +r.sqy(s.anA(r)) +q.aJ=a}, +N7(){return this.N8(null)}, +Oe(){var s,r=this,q=r.aJ +if(q!=null){s=$.tX +s.toString +s.cy$.C(0,t.Ju.a(A.bi.prototype.ga_.call(r)).go.a) +s=r.glg() +q.CW.C(0,s) +if(q.cx!=null)s.ad(0) +r.aJ=null}}, +bx(){var s,r=this +r.DB() +if(r.aJ==null)return +s=A.aNZ(r) +if(s!==r.aJ){r.Oe() +r.N8(s)}}, +jc(){this.DI() +this.GY()}, +bY(){var s=this +s.tp() +s.glg().sKm(t.Ju.a(A.bi.prototype.ga_.call(s))) +s.N7()}, +ez(){this.Oe() +this.glg().sKm(null) +this.Mr()}, +bw(a,b){this.nF(0,b) +this.GY()}, +b1(a){var s=this.aM +if(s!=null)a.$1(s)}, +j5(a){this.aM=null +this.ki(a)}, +jR(a,b){t.Ju.a(A.bi.prototype.ga_.call(this)).saP(a)}, +k0(a,b,c){}, +kW(a,b){t.Ju.a(A.bi.prototype.ga_.call(this)).saP(null)}, +l_(){var s=this,r=s.glg(),q=s.e +q.toString +if(r!==t.mP.a(q).e){r=s.glg() +q=r.at +if(q!=null)q.m() +r.at=null +B.b.a0(r.r) +B.b.a0(r.z) +B.b.a0(r.Q) +r.ch.a0(0)}s.Ms()}} +A.uY.prototype={ +cs(a){return this.f!==a.f}} +A.IN.prototype={ +cs(a){return this.f!==a.f}} +A.Hy.prototype={ +j(a,b){var s=this +if(b==null)return!1 +if(J.U(b)!==A.t(s))return!1 +return s.$ti.b(b)&&b.a===s.a&&b.b===s.b&&b.c===s.c}, +gt(a){return A.N(this.a,this.b,this.c,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a){return"[_DeprecatedRawViewKey "+("#"+A.bh(this.a))+"]"}} +A.GH.prototype={ +az(a){var s=this,r=s.e,q=A.aO_(a,r),p=A.ag(t.O5) +r=new A.EK(s.r,r,q,s.w,250,B.ni,s.Q,p,0,null,null,A.ag(t.T)) +r.aw() +r.E(0,null) +q=r.a4$ +if(q!=null)r.eC=q +return r}, +aF(a,b){var s=this,r=s.e +b.siK(r) +r=A.aO_(a,r) +b.sanB(r) +b.sal8(s.r) +b.scz(0,s.w) +b.sam1(s.y) +b.sam2(B.ni) +b.sqv(s.Q)}, +bI(a){return new A.a42(A.ds(t.h),this,B.a0)}} +A.a42.prototype={ +ga_(){return t.E1.a(A.iQ.prototype.ga_.call(this))}, +ed(a,b){var s=this +s.aJ=!0 +s.a2K(a,b) +s.Td() +s.aJ=!1}, +bw(a,b){var s=this +s.aJ=!0 +s.a2M(0,b) +s.Td() +s.aJ=!1}, +Td(){var s,r=this,q=r.e +q.toString +t.Dg.a(q) +q=r.gi8(r) +s=t.E1 +if(!q.ga7(q)){q=s.a(A.iQ.prototype.ga_.call(r)) +s=r.gi8(r) +q.saK(t.IT.a(s.gL(s).ga_())) +r.bq=0}else{s.a(A.iQ.prototype.ga_.call(r)).saK(null) +r.bq=null}}, +jR(a,b){var s=this +s.M9(a,b) +if(!s.aJ&&b.b===s.bq)t.E1.a(A.iQ.prototype.ga_.call(s)).saK(t.IT.a(a))}, +k0(a,b,c){this.Ma(a,b,c)}, +kW(a,b){var s=this +s.a2L(a,b) +if(!s.aJ&&t.E1.a(A.iQ.prototype.ga_.call(s)).eC===a)t.E1.a(A.iQ.prototype.ga_.call(s)).saK(null)}} +A.a5q.prototype={} +A.a5r.prototype={} +A.Vk.prototype={ +H(a){var s=new A.a43(!1,!1,A.ws(this.c,!0,null),null) +return new A.a44(!1,s,null)}} +A.a44.prototype={ +cs(a){return!1}} +A.a43.prototype={ +az(a){var s=new A.a1c(!1,!1,null,A.ag(t.T)) +s.aw() +s.saP(null) +return s}, +aF(a,b){b.saw0(0,!1) +b.sasG(!1)}} +A.a1c.prototype={ +saw0(a,b){return}, +sasG(a){return}, +fX(a){}, +am(a,b){return}} +A.yC.prototype={ +zV(a,b,c){var s,r=this.a,q=r!=null +if(q)a.p0(r.xa(c)) +b.toString +s=b[a.gYw()] +r=s.a +a.zF(r.a,r.b,this.b,s.d,s.c) +if(q)a.ev()}, +b1(a){return a.$1(this)}, +a_f(a){return!0}, +Le(a,b){var s=b.a +if(a.a===s)return this +b.a=s+1 +return null}, +V2(a,b){var s=b.a +b.a=s+1 +return a-s===0?65532:null}, +b4(a,b){var s,r,q,p,o,n=this +if(n===b)return B.cI +if(A.t(b)!==A.t(n))return B.b8 +s=n.a +r=s==null +q=b.a +if(r!==(q==null))return B.b8 +t.a7.a(b) +if(!n.e.xG(0,b.e)||n.b!==b.b)return B.b8 +if(!r){q.toString +p=s.b4(0,q) +o=p.a>0?p:B.cI +if(o===B.b8)return o}else o=B.cI +return o}, +j(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +if(J.U(b)!==A.t(s))return!1 +if(!s.M6(0,b))return!1 +return b instanceof A.kX&&b.e.xG(0,s.e)&&b.b===s.b&&!0}, +gt(a){var s=this +return A.N(A.hV.prototype.gt.call(s,s),s.e,s.b,s.c,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}} +A.as3.prototype={ +$1(a){var s,r,q,p,o=this,n=null,m=a.a,l=m==null?n:m.r +$label0$0:{if(typeof l=="number"){m=l!==B.b.gO(o.b) +s=l}else{s=n +m=!1}if(m){m=s +break $label0$0}m=n +break $label0$0}r=m!=null +if(r)o.b.push(m) +if(a instanceof A.kX){q=B.b.gO(o.b) +p=q===0?0:o.c.aV(0,q)/q +m=o.a.a++ +o.d.push(new A.a48(a,A.cH(n,n,new A.W0(a,p,a.e,n),!1,n,!1,!1,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,new A.ng(m,"PlaceholderSpanIndexSemanticsTag("+m+")"),n,n,n,n),n))}a.a_f(o) +if(r)o.b.pop() +return!0}, +$S:65} +A.a48.prototype={ +qg(a){var s=a.b +s.toString +t.ot.a(s).b=this.f}} +A.W0.prototype={ +az(a){var s=this.e +s=new A.J6(this.f,s.b,s.c,null,A.ag(t.T)) +s.aw() +return s}, +aF(a,b){var s=this.e +b.sfo(s.b) +b.skt(s.c) +b.st3(0,this.f)}} +A.J6.prototype={ +st3(a,b){if(b===this.B)return +this.B=b +this.a8()}, +sfo(a){if(this.F===a)return +this.F=a +this.a8()}, +skt(a){return}, +bo(a){var s=this.fr$ +s=s==null?null:s.bo(a/this.B) +if(s==null)s=0 +return s*this.B}, +bp(a){var s=this.fr$ +s=s==null?null:s.bp(a/this.B) +if(s==null)s=0 +return s*this.B}, +h6(a){var s=this.fr$,r=s==null?null:s.m7(a) +$label0$0:{if(r==null){s=this.xJ(a) +break $label0$0}s=this.B*r +break $label0$0}return s}, +c5(a){var s=this.fr$,r=s==null?null:s.c5(new A.az(0,a.b/this.B,0,1/0)) +if(r==null)r=B.Q +return a.bf(r.S(0,this.B))}, +bA(){var s,r=this,q=r.fr$ +if(q==null)return +s=t.k +q.bJ(new A.az(0,s.a(A.r.prototype.gW.call(r)).b/r.B,0,1/0),!0) +r.id=s.a(A.r.prototype.gW.call(r)).bf(q.gv(q).S(0,r.B))}, +dj(a,b){var s=this.B +b.ei(0,s,s)}, +am(a,b){var s,r,q,p=this,o=p.fr$ +if(o==null){p.ch.sar(0,null) +return}s=p.B +if(s===1){a.ef(o,b) +p.ch.sar(0,null) +return}r=p.cx +r===$&&A.b() +q=p.ch +q.sar(0,a.p5(r,b,A.wU(s,s,1),new A.azr(o),t.zV.a(q.a)))}, +cE(a,b){var s,r=this.fr$ +if(r==null)return!1 +s=this.B +return a.uD(new A.azq(r),b,A.wU(s,s,1))}} +A.azr.prototype={ +$2(a,b){return a.ef(this.a,b)}, +$S:10} +A.azq.prototype={ +$2(a,b){return this.a.cD(a,b)}, +$S:17} +A.a4U.prototype={ +ah(a){var s +this.dg(a) +s=this.fr$ +if(s!=null)s.ah(a)}, +ad(a){var s +this.dh(0) +s=this.fr$ +if(s!=null)s.ad(0)}} +A.AE.prototype={ +Hs(a,b){return this.f.$2(a,b)}} +A.vp.prototype={ +ac(){var s=this.$ti +return new A.H_(B.j,s.h("@<1>").N(s.z[1]).h("H_<1,2>"))}} +A.H_.prototype={ +aB(){var s,r=this +r.aR() +r.a.toString +s=r.c +s.toString +s=A.akc(s,!1,r.$ti.c) +r.d=s +r.e=s.c}, +aO(a){var s,r,q=this +q.bb(a) +s=q.c +s.toString +r=A.akc(s,!1,q.$ti.c) +q.a.toString +if(!J.d(r,r)){q.d=r +q.e=r.c}}, +bx(){var s,r,q=this +q.dr() +q.a.toString +s=q.c +s.toString +r=A.akc(s,!1,q.$ti.c) +s=q.d +s===$&&A.b() +if(s!==r){q.d=r +q.e=r.c}}, +H(a){var s,r,q,p,o,n=this +n.a.toString +s=n.$ti +A.b_p(a,new A.atv(n),s.c,t.y) +r=n.d +r===$&&A.b() +q=n.a +p=q.d +o=n.e +o===$&&A.b() +o=q.Hs(a,o) +return new A.AF(o,r,new A.atw(n),p,o,null,s.h("@<1>").N(s.z[1]).h("AF<1,2>"))}} +A.atv.prototype={ +$1(a){var s=this.a.d +s===$&&A.b() +return s===a}, +$S(){return this.a.$ti.h("F(1)")}} +A.atw.prototype={ +$2(a,b){var s=this.a +return s.a3(new A.atu(s,b))}, +$S(){return this.a.$ti.h("~(M,2)")}} +A.atu.prototype={ +$0(){return this.a.e=this.b}, +$S:0} +A.AF.prototype={} +A.qP.prototype={ +ac(){var s=this.$ti +return new A.H0(B.j,s.h("@<1>").N(s.z[1]).h("H0<1,2>"))}} +A.H0.prototype={ +aB(){var s,r=this +r.aR() +s=r.a.f +r.w=s +r.x=s.c +r.E7()}, +aO(a){var s,r=this +r.bb(a) +s=r.a.f +if(a.f!==s){if(r.r!=null){r.E8() +r.w=s +r.x=s.c}r.E7()}}, +bx(){var s,r,q=this +q.dr() +s=q.a.f +r=q.w +r===$&&A.b() +if(r!==s){if(q.r!=null){q.E8() +q.w=s +q.x=s.c}q.E7()}}, +qp(a,b){this.a.toString +return b}, +m(){this.E8() +this.aN()}, +E7(){var s=this.w +s===$&&A.b() +s=s.gum() +this.r=new A.j5(s,A.o(s).h("j5<1>")).Jr(new A.atx(this))}, +E8(){var s=this.r +if(s!=null)s.b3(0) +this.r=null}} +A.atx.prototype={ +$1(a){var s,r=this.a,q=r.a +q.toString +s=r.c +s.toString +q.r.$2(s,a) +r.x=a}, +$S(){return this.a.$ti.h("~(2)")}} +A.AG.prototype={ +qp(a,b){var s=null,r=this.$ti +return new A.CC(new A.yN(this.r,s,s,s,A.b58(),new A.a7N(this),r.h("yN<1>")),!0,b,s,r.h("CC<1>"))}} +A.a7N.prototype={ +$2(a,b){return b.aA(0)}, +$S(){return this.a.$ti.h("~(M,1)")}} +A.a7M.prototype={ +$1(a){return this.a.asI()}, +$S:24} +A.Qw.prototype={} +A.nw.prototype={ +k(a){return"crossAxisIndex="+A.h(this.w)+"; "+this.a41(0)}} +A.Sy.prototype={ +sa0t(a){var s=this +if(s.jM===a)return +if(A.t(a)!==A.t(s.jM)||!1)s.a8() +s.jM=a}, +sasC(a){if(this.bu===a)return +this.bu=a +this.a8()}, +sanD(a){if(this.e1===a)return +this.e1=a +this.a8()}, +ew(a){if(!(a.b instanceof A.nw))a.b=new A.nw(!1,null,null)}, +qu(a){var s=t.Kn.a(a.b).w +s.toString +return this.A.$1(s)*this.es}, +qa(){var s,r,q=this.a3w(0,0) +if(q){s=this.a4$ +s.toString +r=t.Kn.a(s.b) +r.w=r.a=0}return q}, +lq(a,b){var s,r,q,p,o,n,m,l=this,k=l.a4$ +k.toString +s=A.o(l).h("at.1") +r=t.Kn +q=l.a1 +p=l.al +o=k +n=a +while(!0){if(!(n>0&&o!=null))break +m=r.a(o.b).w +if(m!=null){q.push(m) +p.push(l.kO(o))}k=o.b +k.toString +o=s.a(k).ak$;--n}l.a3x(a,b)}, +rj(a,b){var s,r,q=this.a3y(a,!0) +if(q!=null){s=t.Kn.a(q.b) +r=this.a1 +s.w=r.length!==0?r.pop():0 +r=this.al +s.x=r.length!==0?r.pop():0}return q}, +bA(){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,b0,b1,b2,b3,b4,b5,b6=this,b7=null,b8={},b9=b6.aM +b9.p3=!1 +s=t.q +r=B.c.dk(s.a(A.r.prototype.gW.call(b6)).w/(600+b6.e1)) +b6.A=A.a5D(s.a(A.r.prototype.gW.call(b6)).x)?new A.alG(r):new A.alH() +q=s.a(A.r.prototype.gW.call(b6)) +p=b6.e1 +q=(q.w+p)/r +b6.es=q +o=s.a(A.r.prototype.gW.call(b6)).alm(q-p) +n=s.a(A.r.prototype.gW.call(b6)).d+s.a(A.r.prototype.gW.call(b6)).z +m=n+s.a(A.r.prototype.gW.call(b6)).Q +l=A.bf(r,0,!1,t.i) +k=new A.alO(b6,l) +q=b6.cR +if(q!=null&&q!==r){B.b.a0(b6.a1) +B.b.a0(b6.al) +q=b6.a4$ +if(q!=null){q=q.b +q.toString +p=t.D +q=p.a(q).b +q.toString +if(q!==0){j=b6.d8$ +j.toString +j=j.b +j.toString +j=p.a(j).b +j.toString +b6.lq(0,j-q+1) +B.b.AJ(l,0,r,0) +b6.qa() +i=b6.a4$ +i.bJ(o,!0) +q=b6.a4$ +q.toString +q=q.b +q.toString +q=p.a(q).b +q.toString +h=q +g=0 +while(!0){if(!(i!=null&&h<=b6.bg))break +k.$1(i) +q=i.b +q.toString +q=p.a(q).a +q.toString +i=b6.Ja(o,i,!0);++h +g=q}f=g-n +if(f!==0){b6.fx=A.j2(b7,!1,b7,b7,0,0,0,0,f) +return}}}}b6.cR=r +if(b6.a4$==null)if(!b6.qa()){b6.fx=B.ix +b9.qJ() +return}b8.a=null +e=b6.a4$ +q=e.b +q.toString +p=t.D +if(p.a(q).a==null){q=A.o(b6).h("at.1") +d=0 +while(!0){if(e!=null){j=e.b +j.toString +j=p.a(j).a==null}else j=!1 +if(!j)break +j=e.b +j.toString +e=q.a(j).ak$;++d}b6.lq(d,0) +if(b6.a4$==null)if(!b6.qa()){b6.fx=B.ix +b9.qJ() +return}}B.b.AJ(l,0,r,1/0) +c=new A.alN(b6,l,r) +i=b8.b=b6.a4$ +if(i!=null){q=i.b +q.toString +q=p.a(q).b +q.toString +q=q===0}else q=!1 +if(q)t.Kn.a(i.b).w=0 +q=A.o(b6).h("at.1") +j=t.Kn +b=i +while(!0){if(!(b!=null&&B.b.fJ(l,new A.alI())))break +a=j.a(b8.b.b) +h=a.w +if(h!=null){b=a.a +b.toString +if(J.d(l[h],1/0))l[h]=b}b=b8.b.b +b.toString +i=q.a(b).ak$ +b8.b=i +b=i}e=b6.a4$ +for(a0=b7;B.b.fJ(l,new A.alJ(n));a0=e){e=b6.rj(o,!0) +if(e==null){b=b6.a4$ +b.toString +j.a(b.b).a=0 +if(n===0){b.bJ(o,!0) +e=b6.a4$ +if(b8.a==null)b8.a=e +a0=e +break}else{b6.fx=A.j2(b7,!1,b7,b7,0,0,0,0,-n) +return}}a1=B.b.is(l,B.mX) +if(a1<-1e-10){b6.fx=A.j2(b7,!1,b7,b7,0,0,0,0,-a1) +b9=b6.a4$ +b9.toString +a=j.a(b9.b) +a2=c.$0() +a.a=a2.a +a.w=a2.w +a.a=0 +return}a3=c.$0() +a=j.a(e.b) +a.a=a3.a +a.w=a3.w +b=a3.w +b.toString +a4=a3.a +a4.toString +l[b]=a4 +if(b8.a==null)b8.a=e}if(n<1e-10)while(!0){b=b6.a4$ +b.toString +b=b.b +b.toString +p.a(b) +a4=b.b +a4.toString +if(!(a4>0))break +j.a(b) +e=b6.rj(o,!0) +a3=c.$0() +b.a=a3.a +b.w=a3.w +b=a3.a +b.toString +if(b<-1e-10){b6.fx=A.j2(b7,!1,b7,b7,0,0,0,0,-b) +return}}if(a0==null){e.bJ(o,!0) +b8.a=e}a5=B.b.is(l,B.mX) +b8.c=!0 +b8.b=e +b=e.b +b.toString +p.a(b) +a4=b.b +a4.toString +b8.d=a4 +j.a(b) +j=b.w +j.toString +b=b.a +b.toString +l[j]=b+b6.kO(e)+b6.bu +for(a6=0;a6s.a(A.r.prototype.gW.call(b6)).d+s.a(A.r.prototype.gW.call(b6)).r||s.a(A.r.prototype.gW.call(b6)).d>0,b7,b7,b3,b4,0,b3,b7) +if(b3===b2)b9.p3=!0 +b9.qJ()}} +A.alD.prototype={ +$1(a){return a}, +$S:42} +A.alG.prototype={ +$1(a){return this.a-a-1}, +$S:42} +A.alH.prototype={ +$1(a){return a}, +$S:42} +A.alO.prototype={ +$1(a){var s,r=this.b,q=A.aYc(r),p=t.Kn.a(a.b),o=r[q] +p.a=o +p.w=q +o.toString +s=this.a +s=o+s.kO(a)+s.bu +r[q]=s +return s}, +$S:61} +A.alN.prototype={ +$0(){var s,r,q,p,o,n,m=this.a,l=m.a4$ +l.toString +s=t.Kn.a(l.b) +l=s.x +l.toString +m=m.bu +r=s.w +r.toString +q=this.b +p=q[r]-(l+m) +for(m=this.c,o=0;othis.a}, +$S:9} +A.alK.prototype={ +$1(a){var s=this.a +return a>=t.q.a(A.r.prototype.gW.call(s)).d}, +$S:9} +A.alE.prototype={ +$0(){var s,r,q,p=this,o=p.a,n=o.b,m=o.a +if(n==m)o.c=!1 +s=p.b +n=n.b +n.toString +r=o.b=A.o(s).h("at.1").a(n).ak$ +n=r==null +if(n)o.c=!1 +q=++o.d +if(!o.c){if(!n){n=r.b +n.toString +n=t.D.a(n).b +n.toString +q=n!==q +n=q}else n=!0 +q=p.c +if(n){r=s.Ja(q,m,!0) +o.b=r +if(r==null)return!1}else r.bJ(q,!0) +n=o.a=o.b}else n=r +n.toString +p.d.$1(n) +if(!o.e&&B.b.fJ(p.e,new A.alF(s))){o.e=!0 +o=o.b.b +o.toString +o=t.D.a(o).b +o.toString +s.bg=o}return!0}, +$S:5} +A.alF.prototype={ +$1(a){var s=this.a +return a>=t.q.a(A.r.prototype.gW.call(s)).d}, +$S:9} +A.alL.prototype={ +$1(a){return a-this.a.bu")) +r.C(0,s.gL(s))}r.n(0,b,c)}} +A.a8c.prototype={ +$1(a){var s=this.b,r=this.c +s.a.C(0,r) +s.Ni(0,r,a) +this.a.a=a}, +$S:604} +A.Uk.prototype={ +j(a,b){var s +if(b==null)return!1 +if(J.U(b)!==A.t(this))return!1 +if(b instanceof A.Uk)if(B.k.j(0,B.k))s=!0 +else s=!1 +else s=!1 +return s}, +gt(a){return A.N(B.k,14,7,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a){return"SvgTheme(currentColor: "+B.k.k(0)+", fontSize: 14, xHeight: 7)"}} +A.jG.prototype={ +YA(a){return new A.bK(null,A.o(this).h("bK"))}, +CX(a){if(a!=null)a.ap(t.AG) +return B.E8}, +aet(a){var s=this.CX(a) +return this.YA(a).ba(new A.apF(this,s),t.V4)}, +XZ(a){return $.aUv().b.bm(0,this.Ht(a),new A.apG(this,a))}, +Ht(a){return new A.FU(this.CX(a),this,this.b)}} +A.apF.prototype={ +$1(a){var s=this.a +return A.b4v(new A.apE(s,this.b),a,"Load Bytes",A.o(s).h("jG.T?"),t.V4)}, +$S(){return A.o(this.a).h("ae(jG.T?)")}} +A.apE.prototype={ +$1(a1){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c="PathOps library was not initialized.",b=this.a.YH(a1),a=t.N,a0=A.n3(10,t.mf) +b=new A.Vt(b,B.nf,!1,!1,!1,!1,!1) +s=new A.kC(new A.Ul(new A.Y(4278190080),14,7),null,b.gab(b),"Svg loader",!1,new A.a1f(A.A(a,t.Pg),A.A(a,t.R1),A.A(a,t.YN),A.A(a,t.lf)),a0,A.aS(a),B.de) +s.y=s.x=s.w=!1 +s.agb() +a=s.Q +a.toString +r=new A.am9().CD(a,B.aL) +if(s.w)A.T(A.cj(c)) +if(s.x)A.T(A.cj(c)) +if(s.y)A.T(A.cj(c)) +b=t.S +a=A.A(t.qA,b) +a0=A.A(t.Nt,b) +q=A.A(t.Qr,b) +p=A.A(t.J2,b) +o=A.A(t.iG,b) +n=A.A(t.WR,b) +m=A.a([],t.SV) +l=A.A(t.D3,b) +k=A.A(t.cu,b) +j=new A.a9E(new A.ab1(a,a0,q,p,o,n,m,A.A(t.K,b),l,k)) +j.CD(r,null) +b=j.b +b===$&&A.b() +i=j.c +i===$&&A.b() +h=a.$ti.h("aX<1>") +h=A.V(new A.aX(a,h),!0,h.h("n.E")) +a=a0.$ti.h("aX<1>") +a=A.V(new A.aX(a0,a),!0,a.h("n.E")) +a0=q.$ti.h("aX<1>") +a0=A.V(new A.aX(q,a0),!0,a0.h("n.E")) +q=n.$ti.h("aX<1>") +g=p.$ti.h("aX<1>") +f=o.$ti.h("aX<1>") +e=l.$ti.h("aX<1>") +d=k.$ti.h("aX<1>") +return A.fC(A.b3f(new A.Va(b,i,h,a,A.V(new A.aX(n,q),!0,q.h("n.E")),a0,A.V(new A.aX(p,g),!0,g.h("n.E")),A.V(new A.aX(o,f),!0,f.h("n.E")),A.V(new A.aX(l,e),!0,e.h("n.E")),A.V(new A.aX(k,d),!0,d.h("n.E")),m),!1).buffer,0,null)}, +$S(){return A.o(this.a).h("c1(jG.T?)")}} +A.apG.prototype={ +$0(){return this.a.aet(this.b)}, +$S:605} +A.FU.prototype={ +gt(a){return A.N(this.a,this.b,this.c,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a,b){if(b==null)return!1 +return b instanceof A.FU&&b.a.j(0,this.a)&&b.b.j(0,this.b)&&!0}} +A.FV.prototype={ +YH(a){return u.z}, +gt(a){return A.N(u.z,this.a,this.b,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a,b){var s +if(b==null)return!1 +if(b instanceof A.FV)s=!0 +else s=!1 +return s}} +A.VX.prototype={ +gt(a){return A.N(this.a,this.b,this.c,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a,b){if(b==null)return!1 +return b instanceof A.VX&&b.a===this.a&&b.c===this.c&&!0}, +k(a){return"VectorGraphicAsset("+this.a+")"}} +A.FT.prototype={ +Ru(a){if(a!=null)return A.aKe(a) +return $.qv()}, +YA(a){var s=this.Ru(a) +return s.jX(0,this.c)}, +YH(a){return B.a2.VN(0,A.dD(a.buffer,0,null),!0)}, +Ht(a){var s=this +return new A.FU(s.CX(a),new A.VX(s.c,s.d,s.Ru(a)),s.b)}, +gt(a){var s=this +return A.N(s.c,s.d,s.e,s.a,s.b,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a,b){var s +if(b==null)return!1 +if(b instanceof A.FT)if(b.c===this.c)s=!0 +else s=!1 +else s=!1 +return s}, +k(a){return"SvgAssetLoader("+this.c+")"}} +A.apA.prototype={} +A.Uj.prototype={ +H(a){var s=this,r=null +return new A.GF(s.r,s.c,s.d,B.Dd,B.ah,!1,r,!1,B.a9,r,r,s.at,r,B.Wp,!0,r)}} +A.S4.prototype={ +AT(a,b,c){return this.aqa(a,b,c)}, +aqa(a,b,c){var s=0,r=A.a1(t.H),q=1,p,o=[],n=this,m,l,k,j,i,h,g +var $async$AT=A.a2(function(d,e){if(d===1){p=e +s=q}while(true)switch(s){case 0:h=null +q=3 +m=n.a.i(0,a) +s=m!=null?6:7 +break +case 6:j=m.$1(b) +s=8 +return A.a7(t.T8.b(j)?j:A.hD(j,t.CD),$async$AT) +case 8:h=e +case 7:o.push(5) +s=4 +break +case 3:q=2 +g=p +l=A.ax(g) +k=A.aZ(g) +j=A.bo("during a framework-to-plugin message") +A.d4(new A.bG(l,k,"flutter web plugins",j,null,!1)) +o.push(5) +s=4 +break +case 2:o=[1] +case 4:q=1 +if(c!=null)c.$1(h) +s=o.pop() +break +case 5:return A.a_(null,r) +case 1:return A.Z(p,r)}}) +return A.a0($async$AT,r)}} +A.ajQ.prototype={} +A.ST.prototype={ +alR(a,b,c){if(b.a.length===0&&b.e==null)return B.aF +return this.a.$2(a,new A.f2(new A.amy(this,b,!1),null))}, +a7x(a,b,c,d,e,f){var s,r,q=this,p=t.Bt,o=t.Uh +if(b.e!=null)s=A.aY([e,A.a([q.Nf(a,q.Ng(b))],t.Im)],p,o) +else{s=A.A(p,o) +q.E9(a,b,0,c,!1,s,e,f)}p=A.o(s).h("aX<1>") +r=A.hp(new A.aX(s,p),p.h("n.E")) +r.E(0,A.b_1(b)) +p=q.y +p.wy(p,new A.amr(r)) +p=s.i(0,e) +p.toString +return p}, +E9(a,b,c,d,e,f,g,h){var s,r,q,p,o=this,n=b.a +if(c>=n.length)return +s=n[c] +r=s.a +q=o.alV(b,s) +if(q.x!=null){p=o.Nf(a,q) +J.eo(f.bm(0,g,new A.ams()),p) +o.E9(a,b,c+1,d,!1,f,g,h)}else{p=o.a7w(a,q,s,r,d) +if(p!=null)J.eo(f.bm(0,g,new A.amt()),p) +o.E9(a,b,c+1,d,!1,f,g,h)}if(p!=null){h.n(0,p,q) +d.ae5(p,s)}}, +alV(a,b){var s,r +if(b instanceof A.iJ){s=b.d +if(s.e!=null)return this.Ng(s)}else s=a +r=t.N +return new A.dr(s.c,b.b,null,b.a.d,s.f,A.aLE(s.b,r,r),s.d,s.e,b.c)}, +a7w(a,b,c,d,e){var s,r=d.e +if(r!=null){s=r.$2(a,b) +return s}return this.a7O(a,b,d)}, +a7O(a,b,c){var s=c.f +if(s==null)return null +return this.qo(a,b,new A.f2(new A.amx(s,b),null))}, +Nj(a){var s,r=this +if(r.z==null){s=a.vD(t.fc) +if(s!=null){r.z=A.b70() +r.Q=new A.amu()}else{s=a.vD(t.VD) +if(s!=null){r.z=A.b5G() +r.Q=new A.amv()}else{r.z=r.gau7() +r.Q=new A.amw()}}}}, +qo(a,b,c){var s,r,q +this.Nj(a) +s=this.z +s.toString +r=b.y +q=t.N +q=A.p6(b.r,q,q) +q.E(0,b.b.gYS()) +return s.$5$arguments$child$key$name$restorationId(q,c,r,b.e,r.a)}, +au8(a,b,c,d,e){return new A.DA(b,B.z,B.z,A.b5H(),c,e,d,a,t.M8)}, +Ng(a){var s=a.c +return new A.dr(s,s.gcU(s),null,null,a.f,a.b,null,a.e,new A.dN(s.k(0)+"(error)",t.kK))}, +Nf(a,b){var s +this.Nj(a) +s=this.Q.$2(a,b) +s=this.qo(a,b,s) +return s}} +A.amy.prototype={ +$1(a){var s=t.sd,r=A.A(s,t.Js),q=this.a,p=q.d.c,o=new A.a_v(A.A(s,t.RS),q.x) +p=q.a.$2(a,A.b_0(o.gatz(),q.a7x(a,this.b,o,this.c,p,r),p,null,q.r,!0,q.e)) +q=q.w +q.avV(r) +return new A.wo(q,p,null)}, +$S:608} +A.amr.prototype={ +$2(a,b){return!this.a.p(0,a)}, +$S:609} +A.ams.prototype={ +$0(){return A.a([],t.Im)}, +$S:213} +A.amt.prototype={ +$0(){return A.a([],t.Im)}, +$S:213} +A.amx.prototype={ +$1(a){return this.a.$2(a,this.b)}, +$S:11} +A.amu.prototype={ +$2(a,b){return new A.wS(b.x,null)}, +$S:611} +A.amv.prototype={ +$2(a,b){return new A.vQ(b.x,null)}, +$S:612} +A.amw.prototype={ +$2(a,b){return new A.w7(b.x,null)}, +$S:613} +A.a_v.prototype={ +ae5(a,b){J.aJn(this.a.bm(0,a,new A.ayx()),0,b)}, +atA(a,b){var s=t.sd.a(a.b),r=this.a,q=r.i(0,s) +q.toString +if(this.b.$3(a,b,J.vd(q))){r=r.i(0,s) +r.toString +J.aJr(r) +return!0}return!1}} +A.ayx.prototype={ +$0(){return A.a([],t.i3)}, +$S:615} +A.amz.prototype={ +alX(a){var s=a.c +return new A.dr(s,s.gcU(s),null,null,a.f,a.b,a.d,null,B.a5m)}, +IJ(a,b){var s,r,q,p,o=A.eW(a,0,null).k(0) +if(B.d.fs(o,"?"))o=B.d.P(o,0,o.length-1) +s=A.eW(B.d.Zj(B.d.fs(o,"/")&&o!=="/"&&!B.d.p(o,"?")?B.d.P(o,0,o.length-1):o,"/?","?",1),0,null) +r=t.N +q=A.A(r,r) +p=this.aaI(s.gcU(s),"",q,s.gcU(s),this.a) +if(p==null)return new A.d9(B.eI,B.d5,s,b,new A.wm("no routes for location: "+s.k(0)),A.EX(B.eI)) +return new A.d9(p,q,s,b,null,A.EX(p))}, +apH(a){return this.IJ(a,null)}, +aaI(a,b,c,d,e){var s,r,q,p,o=A.bc("subPathParameters"),n=e.length,m=t.N,l=0 +while(!0){if(!(l=n.length)return o +s=n[c] +n=new A.amB(this,a,b,c) +r=s.a +q=r.r +p=q!=null?q.$2(a,new A.dr(b.c,s.b,o,r.d,b.f,b.b,b.d,o,s.c)):o +q=t.ob +if(q.b(p))return n.$1(p) +return p.ba(n,q)}, +P6(a,b,c){var s,r,q,p,o,n=this +try{s=n.apH(a) +q=s +if(B.b.p(c,q)){p=A.V(c,!0,t.LQ) +p.push(q) +A.T(A.aLa("redirect loop detected "+n.OR(p)))}if(c.length>n.b){p=A.V(c,!0,t.LQ) +p.push(q) +A.T(A.aLa("too many redirects "+n.OR(p)))}c.push(q) +q.k(0) +return s}catch(o){q=A.ax(o) +if(q instanceof A.wm){r=q +r.toString +return new A.d9(B.eI,B.d5,b,null,r,A.EX(B.eI))}else throw o}}, +OR(a){return new A.R(a,new A.amA(),A.S(a).h("R<1,f>")).c_(0," => ")}, +k(a){return"RouterConfiguration: "+A.h(this.a)}, +anM(){var s,r,q=new A.ck("") +q.a=""+"Full paths for routes:\n" +this.Oa(this.a,"",0,q) +s=this.e +if(s.a!==0){q.a+="known full paths for route names:\n" +for(s=s.gd5(s),s=s.gab(s);s.q();){r=s.gJ(s) +q.a+=" "+A.h(r.a)+" => "+A.h(r.b)+"\n"}}s=q.a +return s.charCodeAt(0)==0?s:s}, +Oa(a,b,c,d){var s,r,q,p,o,n +for(s=a.length,r=c*2,q=c+1,p=0;p")),o),!0,o.h("n.E")) +return A.aLb(n.length-1,s,n).ba(new A.aed(m,a),t.H)}}return m.S3(a)}, +S3(a){this.d=a +this.a6() +return new A.bK(null,t.b5)}} +A.aec.prototype={ +$1(a){return a.a}, +$S:238} +A.aed.prototype={ +$1(a){if(!a)return new A.bK(null,t.b5) +return this.a.S3(this.b)}, +$S:622} +A.ayi.prototype={ +gJ(a){var s=this.d +s===$&&A.b() +return s}, +OI(){var s=this.b +this.a.a[s].toString +this.b=s-1 +return}, +q(){var s,r,q=this +if(q.b<0)return!1 +q.OI() +for(s=q.a.a;r=q.b,r>=0;){s[r].toString +q.OI()}q.d=q.c +return!0}} +A.YK.prototype={} +A.ais.prototype={ +I(){return"NavigatingType."+this.b}} +A.tZ.prototype={} +A.P6.prototype={ +avi(a,b){var s,r,q=this +switch(b.a){case 0:s=q.c +if(s.goN(s)===a.goN(a)&&B.jM.e8(q.c.c,a.c))return +r=q.c===B.lq +break +case 1:r=!0 +break +case 2:r=!1 +break +default:r=null}B.hW.kH("selectMultiEntryHistory",t.H) +A.aNt(a.goN(a),r,a.c,null) +q.b=q.c=a}, +gl(a){return this.b}, +R2(a){var s=this +if(s.b===a)return +if(a.c!=null)s.b=s.c=a +else{s.b=new A.j_(a.goN(a),null,new A.tZ(null,B.l5,t.Qt)) +s.c=B.lq}s.xE()}, +Z(a,b){if(this.fx$<=0)$.aa.X$.push(this) +this.LW(0,b)}, +K(a,b){this.LX(0,b) +if(this.fx$<=0)B.b.C($.aa.X$,this)}, +qL(a){this.R2(a) +return new A.bK(!0,t.d9)}, +W5(a){this.R2(new A.j_(a,null,null)) +return new A.bK(!0,t.d9)}} +A.YI.prototype={} +A.YJ.prototype={} +A.fh.prototype={ +j(a,b){var s=this +if(b==null)return!1 +if(J.U(b)!==A.t(s))return!1 +return b instanceof A.fh&&s.a===b.a&&s.b===b.b&&s.c.j(0,b.c)}, +gt(a){return A.N(this.a,this.b,this.c,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}} +A.iJ.prototype={ +j(a,b){if(b==null)return!1 +return this===b}, +gt(a){return A.mo(this)}} +A.afL.prototype={ +$2(a,b){return A.T(A.co(null))}, +$S:623} +A.d9.prototype={ +p_(a){var s=A.V(this.a,!0,t.UV) +s.push(a) +return this.EA(s)}, +C(a,b){var s,r,q,p,o,n=this,m=n.a,l=A.a(m.slice(0),A.S(m)) +B.b.p7(l,B.b.cS(l,b),l.length) +while(!0){if(l.length!==0){B.b.gO(l).toString +m=B.b.gO(l).a +m=m.e==null&&m.f==null}else m=!1 +if(!m)break +l.pop()}if(b instanceof A.iJ)return n.EA(l) +s=A.EX(new A.ba(l,new A.amJ(),A.S(l).h("ba<1>"))) +r=A.a([],t.s) +A.aRn(s,r) +m=t.N +q=A.wK(r,m) +p=n.b +p=p.gd5(p) +o=A.aGk(p.hJ(p,new A.amK(q)),m,m) +return n.O2(l,o,n.c.Zi(0,A.aRm(s,o)))}, +gO(a){return B.b.gO(this.a)}, +gavj(){var s=this.a,r=A.S(s).h("R<1,lO>") +return A.V(new A.R(s,new A.amL(),r),!0,r.h("af.E"))}, +O2(a,b,c){var s=this,r=c==null?s.c:c,q=b==null?s.b:b +return new A.d9(a,q,r,s.d,s.e,A.EX(a))}, +EA(a){return this.O2(a,null,null)}, +j(a,b){var s=this +if(b==null)return!1 +if(J.U(b)!==A.t(s))return!1 +return b instanceof A.d9&&s.c.j(0,b.c)&&J.d(s.d,b.d)&&s.e==b.e&&B.OL.e8(s.a,b.a)&&B.SP.e8(s.b,b.b)}, +gt(a){var s=this,r=A.bv(s.a),q=s.b +q=q.gd5(q) +return A.N(r,s.c,s.d,s.e,A.aYL(q.eQ(q,new A.amI(),t.S)),B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +k(a){return"RouteMatchList("+this.f+")"}} +A.amH.prototype={ +$1(a){return!(a instanceof A.iJ)}, +$S:234} +A.amJ.prototype={ +$1(a){return!(a instanceof A.iJ)}, +$S:234} +A.amK.prototype={ +$1(a){return this.a.p(0,a.a)}, +$S:228} +A.amL.prototype={ +$1(a){return a.a}, +$S:238} +A.amI.prototype={ +$1(a){return A.N(a.a,a.b,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +$S:626} +A.amG.prototype={} +A.a1u.prototype={ +cp(a){var s,r=t.S6 +r=A.n8(new A.dG(a.a,r),new A.azX(),r.h("n.E"),t.pE) +s=A.V(r,!0,A.o(r).h("n.E")) +return A.aOz(a.c.k(0),a.d,s,null)}} +A.azX.prototype={ +$1(a){var s=a.d +return A.aOz(s.c.k(0),s.d,null,a.c.a)}, +$S:627} +A.a1t.prototype={ +cp(a){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d=J.aF(a),c=d.i(a,"location") +c.toString +A.bQ(c) +s=A.dk(d.i(a,"state")) +r=s!=null?A.aI_(s,B.c9.gVR().a):null +q=this.a.IJ(c,r) +p=t.wh.a(d.i(a,"imperativeMatches")) +if(p!=null)for(d=J.aV5(p,t.pE),c=J.ap(d.a),d=d.$ti,o=new A.m6(c,d.h("m6<1>")),d=d.c,n=t.kK,m=t.Kw,l=t.oe,k=t.UV;o.q();){j=d.a(c.gJ(c)) +i=this.cp(j) +j=J.bq(j,"pageKey") +j.toString +A.bQ(j) +h=$.aw +g=A.aLm(i) +f=A.aLn(i) +e=A.V(q.a,!0,k) +e.push(new A.iJ(i,new A.bI(new A.aD(h,m),l),g,f,new A.dN(j,n))) +q=q.EA(e)}return q}} +A.w7.prototype={ +H(a){var s=null,r=this.c +r=r==null?s:"GoException: "+r.a +return A.amX(!0,A.jh(A.f5(A.a([B.a3o,B.AC,A.bj(r==null?"page not found":r,s,s,s,s),B.AC,new A.H3(new A.acv(a),B.a3s,s)],t.p),B.T,B.cD,B.a3),s,s),!0)}} +A.acv.prototype={ +$0(){return A.aeh(this.a).xe(0,"/",null)}, +$S:0} +A.H3.prototype={ +ac(){return new A.Wx(B.j)}} +A.Wx.prototype={ +bx(){var s,r=this +r.dr() +s=r.c.vD(t.iM) +s=s==null?null:s.dx +if(s==null)s=B.l +r.d!==$&&A.bS() +r.d=s}, +H(a){var s=null,r=this.a,q=r.c,p=this.d +p===$&&A.b() +return A.hn(s,A.bP(s,r.d,B.o,p,s,s,s,s,s,s,B.k_,s,s,s),B.af,!1,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,q,s,s,s)}} +A.wm.prototype={ +k(a){return"GoException: "+this.a}, +$ic2:1} +A.oR.prototype={ +cs(a){return!1}} +A.vQ.prototype={ +H(a){var s=null,r=this.c +r=r==null?s:"GoException: "+r.a +return new A.Bi(B.KH,A.jh(A.f5(A.a([A.bj(r==null?"page not found":r,s,s,s,s),A.a9W(B.ah,B.e7,B.Bc,s,B.jL,44,new A.a9Z(a),s,0.4)],t.p),B.T,B.cD,B.a3),s,s),s)}} +A.a9Z.prototype={ +$0(){return A.aeh(this.a).xe(0,"/",null)}, +$S:0} +A.hg.prototype={ +o9(a){var s=null,r=this.$ti,q=A.a([],t.Zt),p=$.aw,o=r.h("aD<1?>"),n=r.h("bI<1?>"),m=A.xm(B.cQ),l=A.a([],t.wi),k=$.aO(),j=$.aw +return new A.Hx(!1,!0,!1,q,A.aS(t.kj),new A.bp(s,r.h("bp>")),new A.bp(s,t.B),new A.DN(),s,0,new A.bI(new A.aD(p,o),n),m,l,this,new A.ca(s,k,t.XR),new A.bI(new A.aD(j,o),n),r.h("Hx<1>"))}} +A.Hx.prototype={ +guJ(){this.$ti.h("hg<1>").a(this.b) +return!1}, +gqm(){this.$ti.h("hg<1>").a(this.b) +return null}, +gzR(){this.$ti.h("hg<1>").a(this.b) +return null}, +gCu(a){return this.$ti.h("hg<1>").a(this.b).w}, +gZv(){return this.$ti.h("hg<1>").a(this.b).x}, +goO(){this.$ti.h("hg<1>").a(this.b) +return!0}, +gjO(){this.$ti.h("hg<1>").a(this.b) +return!1}, +goV(){this.$ti.h("hg<1>").a(this.b) +return!0}, +qo(a,b,c){var s=null +return A.cH(s,s,this.$ti.h("hg<1>").a(this.b).r,!1,s,!1,!0,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,!0,s,s,s,s,s,s,s,s)}, +zZ(a,b,c,d){return this.$ti.h("hg<1>").a(this.b).ay.$4(a,b,c,d)}} +A.DA.prototype={} +A.wS.prototype={ +H(a){var s=null,r=A.aJD(s,s,B.Ba),q=this.c +q=q==null?s:"GoException: "+q.a +if(q==null)q="page not found" +return A.aGS(r,s,A.jh(A.f5(A.a([new A.Fh(q,s),A.G6(B.Bc,new A.ahs(a),s)],t.p),B.T,B.cD,B.a3),s,s),s)}} +A.ahs.prototype={ +$0(){return A.aeh(this.a).xe(0,"/",null)}, +$S:0} +A.ae8.prototype={ +auh(a,b){var s,r=this,q=a.c +q.toString +if(!(q instanceof A.tZ))return r.Ri(b,r.c.b.cp(t.pE.a(q))).ba(new A.ae9(r,b),t.LQ) +s=A.bc("initialMatches") +s.scJ(r.a.IJ(a.goN(a),q.a)) +if(s.aI().e!=null)a.goN(a) +return r.Ri(b,s.aI()).ba(new A.aea(r,b,q),t.LQ)}, +av4(a){var s +if(a.a.length===0)return null +s=a.c.k(0) +return new A.j_(s,null,B.Eu.cp(a))}, +Ri(a,b){var s=this.a.Ke(0,a,b,A.a([],t.k4)) +if(s instanceof A.d9)return new A.bK(s,t.Zs) +return s}, +ak3(a,b,c,d){var s,r,q +switch(d.a){case 0:b.toString +s=this.Pl() +c.toString +return b.p_(A.aG8(c,a,s)) +case 1:s=b.C(0,b.gO(b)) +r=this.Pl() +c.toString +return s.p_(A.aG8(c,a,r)) +case 2:q=b.gO(b) +s=b.C(0,q) +r=q.gawC() +c.toString +return s.p_(A.aG8(c,a,r)) +case 3:return a +case 4:b.c.k(0) +a.c.k(0) +return a}}, +Pl(){var s,r,q=J.rP(32,t.S) +for(s=this.d,r=0;r<32;++r)q[r]=s.fS(33)+89 +return new A.dN(A.jF(q,0,null),t.kK)}} +A.ae9.prototype={ +$1(a){if(a.e!=null&&this.a.b!=null)return this.a.b.$2(this.b,a) +return a}, +$S:227} +A.aea.prototype={ +$1(a){var s=this +if(a.e!=null&&s.a.b!=null)return s.a.b.$2(s.b,a) +return s.a.ak3(a,null,null,s.c.d)}, +$S:227} +A.aCH.prototype={ +$1(a){return"\\"+A.h(a.b[0])}, +$S:50} +A.lO.prototype={} +A.ln.prototype={} +A.a1s.prototype={} +A.aeb.prototype={ +a6d(a,b,c,d,e,f,g,h,i,j,k,l,m,a0,a1,a2){var s,r,q,p,o,n=this +A.b7Q(!1) +if($.aa==null)A.aO1() +$.aa.toString +s=t.N +s=new A.amz(a2,k,new A.bp(null,t.b7),new A.aef(),A.A(s,s)) +s.a7M("",a2) +s.anM() +n.a!==$&&A.bS() +n.a=s +n.e!==$&&A.bS() +n.e=new A.ae8(s,null,new A.amG(new A.a1t(s)),B.aw) +r=n.a9I(e) +q=$.aO() +n.d!==$&&A.bS() +n.d=new A.P6(l,new A.j_(r,null,new A.tZ(d,B.l5,t.Qt)),B.lq,q) +r=A.a([],t.tc) +r=A.V(r,!0,t.JS) +p=new A.Ck(!1,s,$.aSk(),q) +o=t.sd +p.a=new A.ST(new A.aeg(n),c,b,s,a0,!0,r,new A.wn(A.A(o,t.Js),A.A(t.Kv,o),q),p.gacH(),A.A(t.Bt,t.Pd)) +n.c!==$&&A.bS() +n.c=p}, +xe(a,b,c){var s,r,q,p=this.d +p===$&&A.b() +s=new A.tZ(c,B.l5,t.Qt) +r=p.b +q=r.goN(r)!==b||!J.d(p.b.c,s) +p.b=new A.j_(b,null,s) +if(q)p.xE()}, +a9I(a){var s +$.aa.toString +s=$.b8().gAk() +return s}} +A.aef.prototype={ +$2(a,b){return null}, +$S:630} +A.aeg.prototype={ +$2(a,b){return new A.oR(this.a,b,null)}, +$S:631} +A.dr.prototype={ +j(a,b){var s=this +if(b==null)return!1 +return b instanceof A.dr&&b.b.j(0,s.b)&&b.c===s.c&&b.e==s.e&&b.f===s.f&&b.r===s.r&&J.d(b.w,s.w)&&b.x==s.x&&b.y.j(0,s.y)}, +gt(a){var s=this +return A.N(s.b,s.c,s.d,s.e,s.f,s.r,s.w,s.x,s.y,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}} +A.wo.prototype={} +A.wn.prototype={ +avV(a){var s,r,q,p,o,n,m={} +m.a=!1 +s=this.b +s=s.gaT(s) +r=A.hp(s,A.o(s).h("n.E")) +for(s=a.gd5(a),s=s.gab(s),q=this.a;s.q();){p=s.gJ(s) +o=p.a +n=q.i(0,o) +if(n!=null){p=p.b +if(!n.j(0,p)){m.a=m.a||r.p(0,o) +q.n(0,o,p)}continue}q.n(0,o,p.b)}q.wy(q,new A.aee(m,a,r)) +if(m.a)this.a6()}} +A.aee.prototype={ +$2(a,b){if(this.b.ai(0,a))return!1 +if(this.c.p(0,a)){this.a.a=!0 +return!1}return!0}, +$S:632} +A.auq.prototype={} +A.a6D.prototype={ +yv(){var s=0,r=A.a1(t.f9),q,p=2,o,n,m,l,k +var $async$yv=A.a2(function(a,b){if(a===1){o=b +s=p}while(true)switch(s){case 0:p=4 +s=7 +return A.a7($.qv().ne("AssetManifest.json",!0),$async$yv) +case 7:n=b +m=A.aVf(n) +q=m +s=1 +break +p=2 +s=6 +break +case 4:p=3 +k=o +$.qv().Iy("AssetManifest.json") +throw k +s=6 +break +case 3:s=2 +break +case 6:case 1:return A.a_(q,r) +case 2:return A.Z(o,r)}}) +return A.a0($async$yv,r)}} +A.aDW.prototype={ +$1(a){return $.aRo.C(0,this.a)}, +$S:633} +A.aei.prototype={} +A.lo.prototype={ +gCA(a){return"https://fonts.gstatic.com/s/a/"+this.a+".ttf"}} +A.aej.prototype={ +k(a){return this.a+"_"+this.b.k(0)}} +A.kf.prototype={ +ZF(){var s,r=B.Tg.i(0,this.a) +if(r==null)r="Regular" +s=this.b===B.hf?"Italic":"" +if(r==="Regular")return s===""?r:s +return r+s}, +k(a){var s,r=this.a.a,q=r===3,p=q?"":(r+1)*100 +r=this.b.I() +r=A.is(r,"FontStyle.","") +s=B.d.nn(r,"normal",q?"regular":"") +return A.h(p)+s}, +gt(a){return A.N(this.a,this.b,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a,b){var s,r=this +if(b==null)return!1 +if(r===b)return!0 +s=J.ja(b) +if(s.gdT(b)!==A.t(r))return!1 +return s.ghf(b)===r.a&&s.gjN(b)===r.b}, +ghf(a){return this.a}, +gjN(a){return this.b}} +A.aDV.prototype={ +$1(a){return a.uh("GET",this.a,this.b)}, +$S:634} +A.Mh.prototype={ +uh(a,b,c){return this.ai8(a,b,c)}, +ai8(a,b,c){var s=0,r=A.a1(t.Wd),q,p=this,o,n +var $async$uh=A.a2(function(d,e){if(d===1)return A.Z(e,r) +while(true)switch(s){case 0:o=A.aZW(a,b) +n=A +s=3 +return A.a7(p.hP(0,o),$async$uh) +case 3:q=n.ama(e) +s=1 +break +case 1:return A.a_(q,r)}}) +return A.a0($async$uh,r)}, +$iN0:1} +A.Mi.prototype={ +apC(){if(this.w)throw A.c(A.Q("Can't finalize a finalized Request.")) +this.w=!0 +return B.Dk}, +k(a){return this.a+" "+this.b.k(0)}} +A.a7u.prototype={ +$2(a,b){return a.toLowerCase()===b.toLowerCase()}, +$S:635} +A.a7v.prototype={ +$1(a){return B.d.gt(a.toLowerCase())}, +$S:85} +A.a7w.prototype={ +MG(a,b,c,d,e,f,g){var s=this.b +if(s<100)throw A.c(A.bC("Invalid status code "+s+".",null))}} +A.AN.prototype={ +hP(a,b){return this.a0O(0,b)}, +a0O(a,b){var s=0,r=A.a1(t.ZG),q,p=2,o,n=[],m=this,l,k,j,i,h,g,f +var $async$hP=A.a2(function(c,d){if(c===1){o=d +s=p}while(true)switch(s){case 0:if(m.c)throw A.c(A.aVR("HTTP request failed. Client is already closed.",b.b)) +b.a1Z() +s=3 +return A.a7(new A.vt(A.aNj(b.y,t.Cm)).ZG(),$async$hP) +case 3:j=d +i=new XMLHttpRequest() +i.toString +l=i +i=m.a +i.D(0,l) +h=l +J.aUT(h,b.a,b.b.k(0),!0) +h.responseType="arraybuffer" +h.withCredentials=!1 +b.r.aa(0,J.aUM(l)) +k=new A.bI(new A.aD($.aw,t.EW),t.FL) +h=t.fg +g=new A.yT(l,"load",!1,h) +f=t.H +g.gL(g).ba(new A.a7V(l,k,b),f) +h=new A.yT(l,"error",!1,h) +h.gL(h).ba(new A.a7W(k,b),f) +J.aUX(l,j) +p=4 +s=7 +return A.a7(k.a,$async$hP) +case 7:h=d +q=h +n=[1] +s=5 +break +n.push(6) +s=5 +break +case 4:n=[2] +case 5:p=2 +i.C(0,l) +s=n.pop() +break +case 6:case 1:return A.a_(q,r) +case 2:return A.Z(o,r)}}) +return A.a0($async$hP,r)}, +aA(a){var s,r,q,p +this.c=!0 +for(s=this.a,r=A.cX(s,s.r,A.o(s).c),q=r.$ti.c;r.q();){p=r.d;(p==null?q.a(p):p).abort()}s.a0(0)}} +A.a7V.prototype={ +$1(a){var s,r,q,p=this.a,o=A.dD(t.pI.a(A.b32(p.response)),0,null),n=A.aNj(o,t.Cm),m=p.status +m.toString +s=o.length +r=this.c +q=B.NE.gav3(p) +p=p.statusText +n=new A.y2(A.b8a(new A.vt(n)),r,m,p,s,q,!1,!0) +n.MG(m,s,q,!1,!0,p,r) +this.b.e7(0,n)}, +$S:200} +A.a7W.prototype={ +$1(a){this.a.mF(new A.B3("XMLHttpRequest error.",this.b.b),A.aNi())}, +$S:200} +A.vt.prototype={ +ZG(){var s=new A.aD($.aw,t.aP),r=new A.bI(s,t.gI),q=new A.WA(new A.a89(r),new Uint8Array(1024)) +this.nd(q.gkq(q),!0,q.guR(q),r.gamC()) +return s}} +A.a89.prototype={ +$1(a){return this.a.e7(0,new Uint8Array(A.em(a)))}, +$S:638} +A.B3.prototype={ +k(a){var s=this.b.k(0) +return"ClientException: "+this.a+", uri="+s}, +$ic2:1} +A.am7.prototype={} +A.xA.prototype={} +A.y2.prototype={} +A.AS.prototype={} +A.a8v.prototype={ +$1(a){return a.toLowerCase()}, +$S:66} +A.De.prototype={ +k(a){var s=new A.ck(""),r=""+this.a +s.a=r +r+="/" +s.a=r +s.a=r+this.b +J.h7(this.c.a,new A.ahG(s)) +r=s.a +return r.charCodeAt(0)==0?r:r}} +A.ahE.prototype={ +$0(){var s,r,q,p,o,n,m,l,k,j=this.a,i=new A.app(null,j),h=$.aUy() +i.D2(h) +s=$.aUw() +i.vs(s) +r=i.gJp().i(0,0) +r.toString +i.vs("/") +i.vs(s) +q=i.gJp().i(0,0) +q.toString +i.D2(h) +p=t.N +o=A.A(p,p) +while(!0){p=i.d=B.d.nf(";",j,i.c) +n=i.e=i.c +m=p!=null +p=m?i.e=i.c=p.gbi(p):n +if(!m)break +p=i.d=h.nf(0,j,p) +i.e=i.c +if(p!=null)i.e=i.c=p.gbi(p) +i.vs(s) +if(i.c!==i.e)i.d=null +p=i.d.i(0,0) +p.toString +i.vs("=") +n=i.d=s.nf(0,j,i.c) +l=i.e=i.c +m=n!=null +if(m){n=i.e=i.c=n.gbi(n) +l=n}else n=l +if(m){if(n!==l)i.d=null +n=i.d.i(0,0) +n.toString +k=n}else k=A.b64(i) +n=i.d=h.nf(0,j,i.c) +i.e=i.c +if(n!=null)i.e=i.c=n.gbi(n) +o.n(0,p,k)}i.apt() +return A.aLZ(r,q,o)}, +$S:639} +A.ahG.prototype={ +$2(a,b){var s,r,q=this.a +q.a+="; "+a+"=" +s=$.aUr() +s=s.b.test(b) +r=q.a +if(s){q.a=r+'"' +s=q.a+=A.a5N(b,$.aTh(),new A.ahF(),null) +q.a=s+'"'}else q.a=r+b}, +$S:63} +A.ahF.prototype={ +$1(a){return"\\"+A.h(a.i(0,0))}, +$S:50} +A.aDK.prototype={ +$1(a){var s=a.i(0,1) +s.toString +return s}, +$S:50} +A.tv.prototype={ +H(a){throw A.c(A.Q("implemented internally"))}, +bI(a){return new A.a_c(A.aS(t.ai),null,this,B.a0)}, +$ijD:1} +A.a_c.prototype={ +gao(){return t.SK.a(A.aI.prototype.gao.call(this))}, +bk(){var s,r,q,p,o=this,n=o.hB$,m=n==null?null:n.y2 +if(m==null)m=t.SK.a(A.aI.prototype.gao.call(o)).d +for(n=t.SK.a(A.aI.prototype.gao.call(o)).c,s=A.S(n).h("cO<1>"),n=new A.cO(n,s),n=new A.bu(n,n.gu(n),s.h("bu")),s=s.h("af.E"),r=null;n.q();m=r){q=n.d +r=new A.qb(q==null?s.a(q):q,m,o,null)}if(r!=null)for(n=o.y2,n=A.cX(n,n.r,A.o(n).c),s=n.$ti.c;n.q();){q=n.d +if(q==null)q=s.a(q) +p=r.c +if(!J.d(q.aL,p)){q.aL=p +q.cO()}r=r.d +q.sarz(r) +if(!(r instanceof A.qb))break}return m}} +A.qb.prototype={ +bI(a){return new A.nS(this,B.a0)}, +H(a){return A.T(A.Q("handled internally"))}} +A.nS.prototype={ +gao(){return t.Fn.a(A.aI.prototype.gao.call(this))}, +sarz(a){var s,r,q=this.y2 +if(a instanceof A.qb)if(q instanceof A.qb){s=a.c +r=q.c +s=A.t(s)===A.t(r)&&J.d(s.a,r.a)}else s=!1 +else s=!1 +if(s)return +if(!J.d(q,a)){this.y2=a +this.b1(new A.ayk())}}, +ed(a,b){var s=this,r=t.Fn +r.a(A.aI.prototype.gao.call(s)).e.y2.D(0,s) +s.aL=r.a(A.aI.prototype.gao.call(s)).c +s.y2=r.a(A.aI.prototype.gao.call(s)).d +s.tn(a,b)}, +l_(){t.Fn.a(A.aI.prototype.gao.call(this)).e.y2.C(0,this) +this.tr()}, +bk(){var s=this.aL +s.toString +return s}} +A.ayk.prototype={ +$1(a){return a.cO()}, +$S:16} +A.Fx.prototype={} +A.aAH.prototype={ +$1(a){if(a instanceof A.nS)this.a.hB$=a +return!1}, +$S:20} +A.aAI.prototype={ +$1(a){if(a instanceof A.nS)this.a.hB$=a +return!1}, +$S:20} +A.aCe.prototype={ +$1(a){if(a instanceof A.nS)this.a.hB$=a +return!1}, +$S:20} +A.uk.prototype={ +H(a){return this.qp(a,this.c)}, +bI(a){return A.b_E(this)}, +$ijD:1} +A.Fw.prototype={ +bk(){var s=this +if(s.hB$!=null)return t.k7.a(A.aI.prototype.gao.call(s)).qp(s,s.hB$.y2) +return s.a47()}, +gao(){return t.k7.a(A.aI.prototype.gao.call(this))}} +A.pH.prototype={ +bI(a){return A.b_D(this)}, +$ijD:1} +A.xU.prototype={ +H(a){return this.qp(a,this.a.c)}} +A.TD.prototype={ +gao(){return t.zL.a(A.aI.prototype.gao.call(this))}, +gcQ(a){return t.RZ.a(A.fk.prototype.gcQ.call(this,this))}, +bk(){var s,r,q=this +if(q.hB$!=null){s=t.RZ.a(A.fk.prototype.gcQ.call(q,q)) +r=q.hB$.y2 +r.toString +return s.qp(q,r)}return q.a46()}} +A.a2i.prototype={ +ed(a,b){if(t.Ej.b(a))this.hB$=a +this.tn(a,b)}, +bY(){this.a45() +this.jm(new A.aAH(this))}} +A.a2j.prototype={ +ed(a,b){if(t.Ej.b(a))this.hB$=a +this.tn(a,b)}, +bY(){this.tp() +this.jm(new A.aAI(this))}} +A.a4I.prototype={ +ed(a,b){if(t.Ej.b(a))this.hB$=a +this.tn(a,b)}, +bY(){this.tp() +this.jm(new A.aCe(this))}} +A.DL.prototype={ +j(a,b){var s,r=this +if(b==null)return!1 +if(r!==b)s=b instanceof A.DL&&A.t(r)===A.t(b)&&r.a===b.a&&r.b===b.b&&r.c===b.c&&r.d===b.d&&r.e===b.e&&r.f==b.f +else s=!0 +return s}, +gt(a){var s=this +return B.d.gt(s.a)^B.d.gt(s.b)^B.d.gt(s.c)^B.d.gt(s.d)^B.d.gt(s.e)^J.D(s.f)}, +k(a){var s=this +return"PackageInfo(appName: "+s.a+", buildNumber: "+s.d+", packageName: "+s.b+", version: "+s.c+", buildSignature: "+s.e+", installerStore: "+A.h(s.f)+")"}} +A.aiZ.prototype={ +m6(a){var s=0,r=A.a1(t.BB),q,p=this,o,n,m,l,k,j,i,h,g,f +var $async$m6=A.a2(function(b,c){if(b===1)return A.Z(c,r) +while(true)switch(s){case 0:g=Date.now() +f=window.document.baseURI +f.toString +o=A.eW(f,0,null) +n=A.c3("[^/]+\\.html.*",!0,!1) +f=A.b2m(o) +m=o.gcU(o) +l=f+A.is(m,n,"") +k="version.json?cachebuster="+g +s=3 +return A.a7(A.b6k(A.eW(B.d.fs(l,"/")?l+k:l+"/"+k,0,null)),$async$m6) +case 3:j=c +i=p.aaW(j) +g=J.aF(i) +f=g.i(i,"app_name") +if(f==null)f="" +m=g.i(i,"version") +if(m==null)m="" +h=g.i(i,"build_number") +if(h==null)h="" +g=g.i(i,"package_name") +q=new A.DM(f,g==null?"":g,m,h,"",null) +s=1 +break +case 1:return A.a_(q,r)}}) +return A.a0($async$m6,r)}, +aaW(a){var s,r +if(a.b===200)try{s=B.c9.VO(0,A.b61(J.bq(A.b30(a.e).c.a,"charset")).eA(0,a.w),null) +return s}catch(r){return A.A(t.N,t.z)}else return A.A(t.N,t.z)}} +A.ahI.prototype={ +m6(a){var s=0,r=A.a1(t.BB),q,p,o,n,m,l,k,j +var $async$m6=A.a2(function(b,c){if(b===1)return A.Z(c,r) +while(true)switch(s){case 0:s=3 +return A.a7(B.TZ.vT("getAll",t.N,t.z),$async$m6) +case 3:j=c +j.toString +p=J.aF(j) +o=p.i(j,"appName") +if(o==null)o="" +n=p.i(j,"packageName") +if(n==null)n="" +m=p.i(j,"version") +if(m==null)m="" +l=p.i(j,"buildNumber") +if(l==null)l="" +k=p.i(j,"buildSignature") +if(k==null)k="" +q=new A.DM(o,n,m,l,k,A.dk(p.i(j,"installerStore"))) +s=1 +break +case 1:return A.a_(q,r)}}) +return A.a0($async$m6,r)}} +A.DM.prototype={} +A.aiY.prototype={} +A.a9N.prototype={ +akC(a,b){var s,r,q=t.XS +A.aQ0("absolute",A.a([b,null,null,null,null,null,null,null,null,null,null,null,null,null,null],q)) +s=this.a +s=s.hH(b)>0&&!s.nb(b) +if(s)return b +s=this.b +r=A.a([s==null?A.aQt():s,b,null,null,null,null,null,null,null,null,null,null,null,null,null,null],q) +A.aQ0("join",r) +return this.as3(new A.dG(r,t.Ri))}, +as3(a){var s,r,q,p,o,n,m,l,k +for(s=a.gab(a),r=new A.ik(s,new A.a9R(),a.$ti.h("ik")),q=this.a,p=!1,o=!1,n="";r.q();){m=s.gJ(s) +if(q.nb(m)&&o){l=A.Rh(m,q) +k=n.charCodeAt(0)==0?n:n +n=B.d.P(k,0,q.rK(k,!0)) +l.b=n +if(q.we(n))l.e[0]=q.gpl() +n=""+l.k(0)}else if(q.hH(m)>0){o=!q.nb(m) +n=""+m}else{if(!(m.length!==0&&q.HJ(m[0])))if(p)n+=q.gpl() +n+=m}p=q.we(m)}return n.charCodeAt(0)==0?n:n}, +l9(a,b){var s=A.Rh(b,this.a),r=s.d,q=A.S(r).h("ba<1>") +q=A.V(new A.ba(r,new A.a9S(),q),!0,q.h("n.E")) +s.d=q +r=s.b +if(r!=null)B.b.eu(q,0,r) +return s.d}, +JI(a,b){var s +if(!this.af7(b))return b +s=A.Rh(b,this.a) +s.wf(0) +return s.k(0)}, +af7(a){var s,r,q,p,o,n,m,l,k=this.a,j=k.hH(a) +if(j!==0){if(k===$.a5U())for(s=0;s0)return o.JI(0,a) +if(m.hH(a)<=0||m.nb(a))a=o.akC(0,a) +if(m.hH(a)<=0&&m.hH(s)>0)throw A.c(A.aMk(n+a+'" from "'+s+'".')) +r=A.Rh(s,m) +r.wf(0) +q=A.Rh(a,m) +q.wf(0) +l=r.d +if(l.length!==0&&J.d(l[0],"."))return q.k(0) +l=r.b +p=q.b +if(l!=p)l=l==null||p==null||!m.K0(l,p) +else l=!1 +if(l)return q.k(0) +while(!0){l=r.d +if(l.length!==0){p=q.d +l=p.length!==0&&m.K0(l[0],p[0])}else l=!1 +if(!l)break +B.b.fz(r.d,0) +B.b.fz(r.e,1) +B.b.fz(q.d,0) +B.b.fz(q.e,1)}l=r.d +if(l.length!==0&&J.d(l[0],".."))throw A.c(A.aMk(n+a+'" from "'+s+'".')) +l=t.N +B.b.vS(q.d,0,A.bf(r.d.length,"..",!1,l)) +p=q.e +p[0]="" +B.b.vS(p,1,A.bf(r.d.length,m.gpl(),!1,l)) +m=q.d +l=m.length +if(l===0)return"." +if(l>1&&J.d(B.b.gO(m),".")){B.b.eF(q.d) +m=q.e +m.pop() +m.pop() +m.push("")}q.b="" +q.Zd() +return q.k(0)}, +YC(a){var s,r,q=this,p=A.aPK(a) +if(p.ge5()==="file"&&q.a===$.Lt())return p.k(0) +else if(p.ge5()!=="file"&&p.ge5()!==""&&q.a!==$.Lt())return p.k(0) +s=q.JI(0,q.a.K_(A.aPK(p))) +r=q.auO(s) +return q.l9(0,r).length>q.l9(0,s).length?s:r}} +A.a9R.prototype={ +$1(a){return a!==""}, +$S:36} +A.a9S.prototype={ +$1(a){return a.length!==0}, +$S:36} +A.aDf.prototype={ +$1(a){return a==null?"null":'"'+a+'"'}, +$S:640} +A.ag_.prototype={ +a0i(a){var s=this.hH(a) +if(s>0)return B.d.P(a,0,s) +return this.nb(a)?a[0]:null}, +K0(a,b){return a===b}} +A.aj9.prototype={ +Zd(){var s,r,q=this +while(!0){s=q.d +if(!(s.length!==0&&J.d(B.b.gO(s),"")))break +B.b.eF(q.d) +q.e.pop()}s=q.e +r=s.length +if(r!==0)s[r-1]=""}, +wf(a){var s,r,q,p,o,n,m=this,l=A.a([],t.s) +for(s=m.d,r=s.length,q=0,p=0;p0){s=B.d.fu(a,"\\",s+1) +if(s>0)return s}return r}if(r<3)return 0 +if(!A.aQP(a.charCodeAt(0)))return 0 +if(a.charCodeAt(1)!==58)return 0 +r=a.charCodeAt(2) +if(!(r===47||r===92))return 0 +return 3}, +hH(a){return this.rK(a,!1)}, +nb(a){return this.hH(a)===1}, +K_(a){var s,r +if(a.ge5()!==""&&a.ge5()!=="file")throw A.c(A.bC("Uri "+a.k(0)+" must have scheme 'file:'.",null)) +s=a.gcU(a) +if(a.gjP(a)===""){if(s.length>=3&&B.d.bz(s,"/")&&A.aQQ(s,1))s=B.d.nn(s,"/","")}else s="\\\\"+a.gjP(a)+s +r=A.is(s,"/","\\") +return A.j6(r,0,r.length,B.a2,!1)}, +amv(a,b){var s +if(a===b)return!0 +if(a===47)return b===92 +if(a===92)return b===47 +if((a^b)!==32)return!1 +s=a|32 +return s>=97&&s<=122}, +K0(a,b){var s,r +if(a===b)return!0 +s=a.length +if(s!==b.length)return!1 +for(r=0;r>>0}} +A.apQ.prototype={ +uk(){var s,r,q,p,o,n=this +for(s=n.a,r=n.d;!0;){q=n.c +if(q>=r)return-1 +p=s.charCodeAt(q) +if(p<=32)o=p===32||p===10||p===9||p===13||p===12 +else o=!1 +if(!o)return p +n.c=q+1}}, +Sj(){if(this.uk()===44){++this.c +this.uk()}}, +aeN(a,b){var s +if(!(a>=48&&a<=57||a===43||a===45||a===46)||this.b===B.lN)return b +s=this.b +if(s===B.lS)return B.AI +if(s===B.lT)return B.AJ +return s}, +kl(){var s=this,r=s.c +if(r>=s.d)return-1 +s.c=r+1 +return s.a.charCodeAt(r)}, +fh(){var s,r,q,p,o,n,m,l,k,j,i=this,h="Numeric overflow" +i.uk() +s=i.kl() +if(s===43){s=i.kl() +r=1}else if(s===45){s=i.kl() +r=-1}else r=1 +if((s<48||s>57)&&s!==46)throw A.c(A.Q("First character of a number must be one of [0-9+-.].")) +q=0 +while(!0){if(!(48<=s&&s<=57))break +q=q*10+(s-48) +s=i.kl()}if(!(-17976931348623157e292<=q&&q<=17976931348623157e292))throw A.c(A.Q(h)) +if(s===46){s=i.kl() +if(s<48||s>57)throw A.c(A.Q("There must be at least one digit following the .")) +p=0 +o=1 +while(!0){if(!(48<=s&&s<=57))break +o*=0.1 +p+=(s-48)*o +s=i.kl()}}else p=0 +n=(q+p)*r +m=i.c +if(m57)throw A.c(A.Q("Missing exponent")) +j=0 +while(!0){if(!(s>=48&&s<=57))break +j=j*10+(s-48) +s=i.kl()}if(k)j=-j +if(!(-37<=j&&j<=38))throw A.c(A.Q("Invalid exponent "+j)) +if(j!==0)n*=Math.pow(10,j)}if(!(-17976931348623157e292<=n&&n<=17976931348623157e292))throw A.c(A.Q(h)) +if(s!==-1){--i.c +i.Sj()}return n}, +QW(){var s,r=this,q=r.c +if(q>=r.d)throw A.c(A.Q("Expected more data")) +r.c=q+1 +s=r.a.charCodeAt(q) +r.Sj() +if(s===48)return!1 +else if(s===49)return!0 +else throw A.c(A.Q("Invalid flag value"))}, +Ys(){return new A.fn(this.auj(),t.ij)}, +auj(){var s=this +return function(){var r=0,q=1,p,o +return function $async$Ys(a,b,c){if(b===1){p=c +r=q}while(true)switch(r){case 0:o=s.d +case 2:if(!(s.c1){b0*=Math.sqrt(m) +b1*=Math.sqrt(m)}q.de() +q.ei(0,1/b0,1/b1) +q.pa(a9) +l=a8.pP(q,b2) +k=a8.pP(q,b3.b) +j=k.Y(0,l) +a9=j.a +o=j.b +i=Math.sqrt(Math.max(1/(a9*a9+o*o)-0.25,0)) +if(!isFinite(i))i=0 +j=j.S(0,b3.e===b3.f?-i:i) +a9=l.R(0,k).S(0,0.5) +o=a9.a+-j.b +a9=a9.b+j.a +h=new A.cu(o,a9) +l=l.Y(0,h) +g=Math.atan2(l.b,l.a) +k=k.Y(0,h) +f=Math.atan2(k.b,k.a)-g +if(f<0&&b3.e)f+=6.283185307179586 +else if(f>0&&!b3.e)f-=6.283185307179586 +q.de() +q.pa(s) +q.ei(0,b0,b1) +e=B.c.dk(Math.abs(f/1.5717963267948964)) +for(n=b4.a,d=0;d"))}} +A.Qc.prototype={ +gJ(a){var s=this.e +s===$&&A.b() +return s}, +q(){var s,r,q,p,o,n=this +for(s=n.b,r=s.length,q=n.a;p=n.d,p<=r;){o=q.a.b8(s,p) +p=n.d +if(o<0)n.d=p+1 +else{s=q.aZ(new A.vO(s,p)) +n.e=s.gl(s) +s=n.d +if(s===o)n.d=s+1 +else n.d=o +return!0}}return!1}} +A.kc.prototype={ +aZ(a){var s,r=a.a,q=a.b,p=this.a.b8(r,q) +if(p<0)return new A.bm(this.b,r,q) +s=B.d.P(r,q,p) +return new A.cd(s,r,p,t.Xb)}, +b8(a,b){return this.a.b8(a,b)}} +A.D6.prototype={ +aZ(a){var s,r=this.a.aZ(a) +if(r instanceof A.bm)return r +s=this.b.$1(r.gl(r)) +return new A.cd(s,r.a,r.b,this.$ti.h("cd<2>"))}, +b8(a,b){var s=this.a.b8(a,b) +return s}} +A.Gu.prototype={ +aZ(a){var s,r,q,p=this.a.aZ(a) +if(p instanceof A.bm)return p +s=p.gl(p) +r=p.b +q=this.$ti +return new A.cd(new A.nC(s,a.a,a.b,r,q.h("nC<1>")),p.a,r,q.h("cd>"))}, +b8(a,b){return this.a.b8(a,b)}} +A.Fu.prototype={ +ji(a){return this.a===a}} +A.r4.prototype={ +ji(a){return this.a}} +A.Q6.prototype={ +a6i(a){var s,r,q,p,o,n,m,l +for(s=a.length,r=this.a,q=this.c,p=0;p>>0}}}, +ji(a){var s=this.a +if(s<=a)if(a<=this.b){s=a-s +s=(this.c[B.f.el(s,5)]&B.pt[s&31])>>>0!==0}else s=!1 +else s=!1 +return s}, +$ieq:1} +A.QI.prototype={ +ji(a){return!this.a.ji(a)}} +A.aEl.prototype={ +$2(a,b){var s=a.a,r=b.a +return s!==r?s-r:a.b-b.b}, +$S:641} +A.aEm.prototype={ +$2(a,b){return a+(b.b-b.a+1)}, +$S:642} +A.aDa.prototype={ +$1(a){return new A.e2(a.charCodeAt(0),a.charCodeAt(0))}, +$S:643} +A.aD5.prototype={ +$3(a,b,c){return new A.e2(a.charCodeAt(0),c.charCodeAt(0))}, +$S:644} +A.aD9.prototype={ +$1(a){return A.b77(a)}, +$S:645} +A.aD3.prototype={ +$2(a,b){var s +if(a==null)s=b +else s=b instanceof A.r4?new A.r4(!b.a):new A.QI(b) +return s}, +$S:646} +A.eq.prototype={} +A.e2.prototype={ +ji(a){return this.a<=a&&a<=this.b}, +$ieq:1} +A.Vn.prototype={ +ji(a){if(a<256)switch(a){case 9:case 10:case 11:case 12:case 13:case 32:case 133:case 160:return!0 +default:return!1}switch(a){case 5760:case 8192:case 8193:case 8194:case 8195:case 8196:case 8197:case 8198:case 8199:case 8200:case 8201:case 8202:case 8232:case 8233:case 8239:case 8287:case 12288:case 65279:return!0 +default:return!1}}, +$ieq:1} +A.r_.prototype={ +aZ(a){var s,r,q,p,o=this.a,n=o[0].aZ(a) +if(!(n instanceof A.bm))return n +for(s=o.length,r=this.b,q=n,p=1;p=0)return q}return q}} +A.e_.prototype={ +gi8(a){return A.a([this.a],t.Vz)}, +jg(a,b,c){var s=this +s.nD(0,b,c) +if(s.a.j(0,b))s.a=A.o(s).h("au").a(c)}} +A.ud.prototype={ +aZ(a){var s,r,q,p=this.a.aZ(a) +if(p instanceof A.bm)return p +s=this.b.aZ(p) +if(s instanceof A.bm)return s +r=p.gl(p) +q=s.gl(s) +return new A.cd(new A.dj(r,q),s.a,s.b,this.$ti.h("cd<+(1,2)>"))}, +b8(a,b){b=this.a.b8(a,b) +if(b<0)return-1 +b=this.b.b8(a,b) +if(b<0)return-1 +return b}, +gi8(a){return A.a([this.a,this.b],t.Vz)}, +jg(a,b,c){var s=this +s.nD(0,b,c) +if(s.a.j(0,b))s.a=s.$ti.h("au<1>").a(c) +if(s.b.j(0,b))s.b=s.$ti.h("au<2>").a(c)}} +A.akJ.prototype={ +$1(a){return this.a.$2(a.a,a.b)}, +$S(){return this.d.h("@<0>").N(this.b).N(this.c).h("1(+(2,3))")}} +A.ue.prototype={ +aZ(a){var s,r,q,p,o=this,n=o.a.aZ(a) +if(n instanceof A.bm)return n +s=o.b.aZ(n) +if(s instanceof A.bm)return s +r=o.c.aZ(s) +if(r instanceof A.bm)return r +q=n.gl(n) +s=s.gl(s) +p=r.gl(r) +return new A.cd(new A.IQ(q,s,p),r.a,r.b,o.$ti.h("cd<+(1,2,3)>"))}, +b8(a,b){b=this.a.b8(a,b) +if(b<0)return-1 +b=this.b.b8(a,b) +if(b<0)return-1 +b=this.c.b8(a,b) +if(b<0)return-1 +return b}, +gi8(a){return A.a([this.a,this.b,this.c],t.Vz)}, +jg(a,b,c){var s=this +s.nD(0,b,c) +if(s.a.j(0,b))s.a=s.$ti.h("au<1>").a(c) +if(s.b.j(0,b))s.b=s.$ti.h("au<2>").a(c) +if(s.c.j(0,b))s.c=s.$ti.h("au<3>").a(c)}} +A.akK.prototype={ +$1(a){return this.a.$3(a.a,a.b,a.c)}, +$S(){var s=this +return s.e.h("@<0>").N(s.b).N(s.c).N(s.d).h("1(+(2,3,4))")}} +A.Fo.prototype={ +aZ(a){var s,r,q,p,o,n=this,m=n.a.aZ(a) +if(m instanceof A.bm)return m +s=n.b.aZ(m) +if(s instanceof A.bm)return s +r=n.c.aZ(s) +if(r instanceof A.bm)return r +q=n.d.aZ(r) +if(q instanceof A.bm)return q +p=m.gl(m) +s=s.gl(s) +r=r.gl(r) +o=q.gl(q) +return new A.cd(new A.a0J([p,s,r,o]),q.a,q.b,n.$ti.h("cd<+(1,2,3,4)>"))}, +b8(a,b){var s=this +b=s.a.b8(a,b) +if(b<0)return-1 +b=s.b.b8(a,b) +if(b<0)return-1 +b=s.c.b8(a,b) +if(b<0)return-1 +b=s.d.b8(a,b) +if(b<0)return-1 +return b}, +gi8(a){var s=this +return A.a([s.a,s.b,s.c,s.d],t.Vz)}, +jg(a,b,c){var s=this +s.nD(0,b,c) +if(s.a.j(0,b))s.a=s.$ti.h("au<1>").a(c) +if(s.b.j(0,b))s.b=s.$ti.h("au<2>").a(c) +if(s.c.j(0,b))s.c=s.$ti.h("au<3>").a(c) +if(s.d.j(0,b))s.d=s.$ti.h("au<4>").a(c)}} +A.akM.prototype={ +$1(a){var s=a.a +return this.a.$4(s[0],s[1],s[2],s[3])}, +$S(){var s=this +return s.f.h("@<0>").N(s.b).N(s.c).N(s.d).N(s.e).h("1(+(2,3,4,5))")}} +A.Fp.prototype={ +aZ(a){var s,r,q,p,o,n,m=this,l=m.a.aZ(a) +if(l instanceof A.bm)return l +s=m.b.aZ(l) +if(s instanceof A.bm)return s +r=m.c.aZ(s) +if(r instanceof A.bm)return r +q=m.d.aZ(r) +if(q instanceof A.bm)return q +p=m.e.aZ(q) +if(p instanceof A.bm)return p +o=l.gl(l) +s=s.gl(s) +r=r.gl(r) +q=q.gl(q) +n=p.gl(p) +return new A.cd(new A.a0K([o,s,r,q,n]),p.a,p.b,m.$ti.h("cd<+(1,2,3,4,5)>"))}, +b8(a,b){var s=this +b=s.a.b8(a,b) +if(b<0)return-1 +b=s.b.b8(a,b) +if(b<0)return-1 +b=s.c.b8(a,b) +if(b<0)return-1 +b=s.d.b8(a,b) +if(b<0)return-1 +b=s.e.b8(a,b) +if(b<0)return-1 +return b}, +gi8(a){var s=this +return A.a([s.a,s.b,s.c,s.d,s.e],t.Vz)}, +jg(a,b,c){var s=this +s.nD(0,b,c) +if(s.a.j(0,b))s.a=s.$ti.h("au<1>").a(c) +if(s.b.j(0,b))s.b=s.$ti.h("au<2>").a(c) +if(s.c.j(0,b))s.c=s.$ti.h("au<3>").a(c) +if(s.d.j(0,b))s.d=s.$ti.h("au<4>").a(c) +if(s.e.j(0,b))s.e=s.$ti.h("au<5>").a(c)}} +A.akN.prototype={ +$1(a){var s=a.a +return this.a.$5(s[0],s[1],s[2],s[3],s[4])}, +$S(){var s=this +return s.r.h("@<0>").N(s.b).N(s.c).N(s.d).N(s.e).N(s.f).h("1(+(2,3,4,5,6))")}} +A.Fq.prototype={ +aZ(a){var s,r,q,p,o,n,m,l,k,j=this,i=j.a.aZ(a) +if(i instanceof A.bm)return i +s=j.b.aZ(i) +if(s instanceof A.bm)return s +r=j.c.aZ(s) +if(r instanceof A.bm)return r +q=j.d.aZ(r) +if(q instanceof A.bm)return q +p=j.e.aZ(q) +if(p instanceof A.bm)return p +o=j.f.aZ(p) +if(o instanceof A.bm)return o +n=j.r.aZ(o) +if(n instanceof A.bm)return n +m=j.w.aZ(n) +if(m instanceof A.bm)return m +l=i.gl(i) +s=s.gl(s) +r=r.gl(r) +q=q.gl(q) +p=p.gl(p) +o=o.gl(o) +n=n.gl(n) +k=m.gl(m) +return new A.cd(new A.a0L([l,s,r,q,p,o,n,k]),m.a,m.b,j.$ti.h("cd<+(1,2,3,4,5,6,7,8)>"))}, +b8(a,b){var s=this +b=s.a.b8(a,b) +if(b<0)return-1 +b=s.b.b8(a,b) +if(b<0)return-1 +b=s.c.b8(a,b) +if(b<0)return-1 +b=s.d.b8(a,b) +if(b<0)return-1 +b=s.e.b8(a,b) +if(b<0)return-1 +b=s.f.b8(a,b) +if(b<0)return-1 +b=s.r.b8(a,b) +if(b<0)return-1 +b=s.w.b8(a,b) +if(b<0)return-1 +return b}, +gi8(a){var s=this +return A.a([s.a,s.b,s.c,s.d,s.e,s.f,s.r,s.w],t.Vz)}, +jg(a,b,c){var s=this +s.nD(0,b,c) +if(s.a.j(0,b))s.a=s.$ti.h("au<1>").a(c) +if(s.b.j(0,b))s.b=s.$ti.h("au<2>").a(c) +if(s.c.j(0,b))s.c=s.$ti.h("au<3>").a(c) +if(s.d.j(0,b))s.d=s.$ti.h("au<4>").a(c) +if(s.e.j(0,b))s.e=s.$ti.h("au<5>").a(c) +if(s.f.j(0,b))s.f=s.$ti.h("au<6>").a(c) +if(s.r.j(0,b))s.r=s.$ti.h("au<7>").a(c) +if(s.w.j(0,b))s.w=s.$ti.h("au<8>").a(c)}} +A.akO.prototype={ +$1(a){var s=a.a +return this.a.$8(s[0],s[1],s[2],s[3],s[4],s[5],s[6],s[7])}, +$S(){var s=this +return s.y.h("@<0>").N(s.b).N(s.c).N(s.d).N(s.e).N(s.f).N(s.r).N(s.w).N(s.x).h("1(+(2,3,4,5,6,7,8,9))")}} +A.tb.prototype={ +jg(a,b,c){var s,r,q,p +this.nD(0,b,c) +for(s=this.a,r=s.length,q=this.$ti.h("au"),p=0;p"))}, +b8(a,b){var s=this.a.b8(a,b) +return s<0?b:s}} +A.FA.prototype={ +aZ(a){var s,r,q,p=this,o=p.b.aZ(a) +if(o instanceof A.bm)return o +s=p.a.aZ(o) +if(s instanceof A.bm)return s +r=p.c.aZ(s) +if(r instanceof A.bm)return r +q=s.gl(s) +return new A.cd(q,r.a,r.b,p.$ti.h("cd<1>"))}, +b8(a,b){b=this.b.b8(a,b) +if(b<0)return-1 +b=this.a.b8(a,b) +if(b<0)return-1 +return this.c.b8(a,b)}, +gi8(a){return A.a([this.b,this.a,this.c],t.Vz)}, +jg(a,b,c){var s=this +s.M0(0,b,c) +if(s.b.j(0,b))s.b=c +if(s.c.j(0,b))s.c=c}} +A.rm.prototype={ +aZ(a){return new A.cd(this.a,a.a,a.b,this.$ti.h("cd<1>"))}, +b8(a,b){return b}} +A.QF.prototype={ +aZ(a){var s,r=a.a,q=a.b,p=r.length +if(q=l||!r.ji(n.charCodeAt(q)))return new A.bm(o.b,n,q);++q;++p}s=o.d +while(!0){if(!(q=p||!r.ji(a.charCodeAt(b)))return-1;++b;++q}s=this.d +while(!0){if(!(b")) +for(s=o.b,r=a;m.length=s)return p +q=o.a.aZ(r) +if(q instanceof A.bm)return p +m.push(q.gl(q))}else return new A.cd(m,r.a,r.b,n.h("cd>"))}}, +b8(a,b){var s,r,q,p,o=this +for(s=o.b,r=b,q=0;q=s)return-1 +p=o.a.b8(a,r) +if(p<0)return-1;++q}else return r}} +A.CW.prototype={ +gi8(a){return A.a([this.a,this.e],t.Vz)}, +jg(a,b,c){this.M0(0,b,c) +if(this.e.j(0,b))this.e=c}} +A.E9.prototype={ +aZ(a){var s,r,q,p=this,o=p.$ti,n=A.a([],o.h("q<1>")) +for(s=p.b,r=a;n.length>"))}, +b8(a,b){var s,r,q,p,o=this +for(s=o.b,r=b,q=0;q"))}, +qp(a,b){b.toString +return new A.fJ(this,b,null,this.$ti.h("fJ<1?>"))}} +A.I5.prototype={} +A.anL.prototype={ +$1(a){var s=this,r=s.a +if(!r.b(a))throw A.c(A.aGK(A.cf(r),A.t(s.b.gao()))) +return!B.jM.e8(s.c.$1(a),s.d)}, +$S(){return this.a.h("F(0?)")}} +A.fJ.prototype={ +cs(a){return!1}, +bI(a){return new A.z6(A.jk(null,null,null,t.h,t.X),this,B.a0,this.$ti.h("z6<1>"))}} +A.uL.prototype={} +A.z6.prototype={ +gpJ(){var s,r=this,q=r.eO +if(q===$){s=r.$ti.h("fJ<1>").a(A.aI.prototype.gao.call(r)).f.e.ac() +s.a=r +r.eO!==$&&A.ay() +r.eO=s +q=s}return q}, +fY(a){var s={} +s.a=null +this.jm(new A.awd(s,a)) +return s.a}, +ed(a,b){this.tn(a,b)}, +gao(){return this.$ti.h("fJ<1>").a(A.aI.prototype.gao.call(this))}, +KK(a,b){var s,r=this.y2,q=r.i(0,a),p=q==null +if(!p&&!this.$ti.h("uL<1>").b(q))return +s=this.$ti +if(s.h("F(1)").b(b)){p=p?new A.uL(A.a([],s.h("q")),s.h("uL<1>")):q +s.h("uL<1>").a(p) +if(p.a){p.a=!1 +B.b.a0(p.c)}if(!p.b){p.b=!0 +A.aXB(new A.awe(p),t.P)}p.c.push(b) +r.n(0,a,p)}else r.n(0,a,B.ji)}, +JJ(a,b){var s,r,q,p,o,n=this.y2.i(0,b),m=!1 +if(n!=null)if(this.$ti.h("uL<1>").b(n)){if(b.Q)return +for(r=n.c,q=r.length,p=0;p") +r.a(A.aI.prototype.gao.call(s)) +s.gpJ().Hr(s.d9) +s.d9=!1 +if(s.bM){s.bM=!1 +s.nh(r.a(A.aI.prototype.gao.call(s)))}return s.Mj()}, +l_(){this.gpJ().m() +this.tr()}, +asI(){if(!this.cY)return +this.cO() +this.bM=!0}, +mM(a,b){return this.tq(a,b)}, +I4(a){return this.mM(a,null)}, +$iPx:1} +A.awd.prototype={ +$1(a){this.a.a=a.fY(this.b) +return!1}, +$S:20} +A.awe.prototype={ +$0(){var s=this.a +s.b=!1 +s.a=!0}, +$S:19} +A.XA.prototype={} +A.kU.prototype={ +aw6(a){return!1}, +m(){}, +Hr(a){}} +A.yN.prototype={ +ac(){return new A.Hl(this.$ti.h("Hl<1>"))}} +A.Hl.prototype={ +gl(a){var s,r,q,p,o,n,m=this,l=null,k=m.c +if(k&&m.f!=null){k=A.cf(m.$ti.c).k(0) +q=m.f +q=q==null?l:q.k(0) +throw A.c(A.Q("Tried to read a provider that threw during the creation of its value.\nThe exception occurred during the creation of type "+k+".\n\n"+A.h(q)))}if(!k){m.c=!0 +k=m.a +k.toString +q=m.$ti.h("kU.D") +q.a(k.$ti.h("fJ<1>").a(A.aI.prototype.gao.call(k)).f.e) +try{k=m.a +k.toString +k=q.a(k.$ti.h("fJ<1>").a(A.aI.prototype.gao.call(k)).f.e) +p=m.a +p.toString +m.d=k.a.$1(p)}catch(o){s=A.ax(o) +r=A.aZ(o) +m.f=new A.bG(s,r,"provider",l,l,!1) +throw o}finally{}k=m.a +k.toString +q.a(k.$ti.h("fJ<1>").a(A.aI.prototype.gao.call(k)).f.e)}k=m.a +k.cY=!1 +if(m.b==null){q=m.$ti +k=q.h("kU.D").a(A.o(k).h("fJ<1>").a(A.aI.prototype.gao.call(k)).f.e) +p=m.a +p.toString +n=m.d +q=n==null?q.c.a(n):n +q=k.e.$2(p,q) +k=q +m.b=k}m.a.cY=!0 +k=m.d +return k==null?m.$ti.c.a(k):k}, +m(){var s,r,q,p,o=this +o.a4q() +s=o.b +if(s!=null)s.$0() +if(o.c){s=o.a +s.toString +r=o.$ti +s=r.h("kU.D").a(s.$ti.h("fJ<1>").a(A.aI.prototype.gao.call(s)).f.e) +q=o.a +q.toString +p=o.d +r=p==null?r.c.a(p):p +s.f.$2(q,r)}}, +Hr(a){var s,r=this +if(a)if(r.c){s=r.a +s.toString +r.$ti.h("kU.D").a(s.$ti.h("fJ<1>").a(A.aI.prototype.gao.call(s)).f.e)}s=r.a +s.toString +r.e=r.$ti.h("kU.D").a(s.$ti.h("fJ<1>").a(A.aI.prototype.gao.call(s)).f.e) +return r.a4p(a)}} +A.Qy.prototype={} +A.RT.prototype={ +k(a){return"A provider for "+this.a.k(0)+" unexpectedly returned null."}, +$ic2:1} +A.Ea.prototype={ +k(a){return"Provider<"+this.a.k(0)+"> not found for "+this.b.k(0)}, +$ic2:1} +A.aoZ.prototype={ +gu(a){return this.c.length}, +gasg(a){return this.b.length}, +a6r(a,b){var s,r,q,p,o,n +for(s=this.c,r=s.length,q=this.b,p=0;p=r||s[n]!==10)o=10}if(o===10)q.push(p+1)}}, +rY(a){var s,r=this +if(a<0)throw A.c(A.ef("Offset may not be negative, was "+a+".")) +else if(a>r.c.length)throw A.c(A.ef("Offset "+a+u.D+r.gu(r)+".")) +s=r.b +if(a=B.b.gO(s))return s.length-1 +if(r.aeb(a)){s=r.d +s.toString +return s}return r.d=r.aa0(a)-1}, +aeb(a){var s,r,q=this.d +if(q==null)return!1 +s=this.b +if(a=r-1||a=r-2||aa)p=r +else s=r+1}return p}, +CL(a){var s,r,q=this +if(a<0)throw A.c(A.ef("Offset may not be negative, was "+a+".")) +else if(a>q.c.length)throw A.c(A.ef("Offset "+a+" must be not be greater than the number of characters in the file, "+q.gu(q)+".")) +s=q.rY(a) +r=q.b[s] +if(r>a)throw A.c(A.ef("Line "+s+" comes after offset "+a+".")) +return a-r}, +ns(a){var s,r,q,p,o=this +if(a<0)throw A.c(A.ef("Line may not be negative, was "+a+".")) +else{s=o.b +r=s.length +if(a>=r)throw A.c(A.ef("Line "+a+" must be less than the number of lines in the file, "+o.gasg(o)+"."))}q=s[a] +if(q<=o.c.length){p=a+1 +s=p=s[p]}else s=!0 +if(s)throw A.c(A.ef("Line "+a+" doesn't have 0 columns.")) +return q}} +A.Ow.prototype={ +gd1(){return this.a.a}, +gdG(a){return this.a.rY(this.b)}, +geq(){return this.a.CL(this.b)}, +gcz(a){return this.b}} +A.yU.prototype={ +gd1(){return this.a.a}, +gu(a){return this.c-this.b}, +gbW(a){return A.aFN(this.a,this.b)}, +gbi(a){return A.aFN(this.a,this.c)}, +gcV(a){return A.jF(B.l4.cf(this.a.c,this.b,this.c),0,null)}, +gaS(a){var s=this,r=s.a,q=s.c,p=r.rY(q) +if(r.CL(q)===0&&p!==0){if(q-s.b===0)return p===r.b.length-1?"":A.jF(B.l4.cf(r.c,r.ns(p),r.ns(p+1)),0,null)}else q=p===r.b.length-1?r.c.length:r.ns(p+1) +return A.jF(B.l4.cf(r.c,r.ns(r.rY(s.b)),q),0,null)}, +b4(a,b){var s +if(!(b instanceof A.yU))return this.a43(0,b) +s=B.f.b4(this.b,b.b) +return s===0?B.f.b4(this.c,b.c):s}, +j(a,b){var s=this +if(b==null)return!1 +if(!(b instanceof A.yU))return s.a42(0,b) +return s.b===b.b&&s.c===b.c&&J.d(s.a.a,b.a.a)}, +gt(a){return A.N(this.b,this.c,this.a.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +$iny:1} +A.aeC.prototype={ +ar8(a4){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1=this,a2=null,a3=a1.a +a1.TV(B.b.gL(a3).c) +s=a1.e +r=A.bf(s,a2,!1,t.Xk) +for(q=a1.r,s=s!==0,p=a1.b,o=0;o0){m=a3[o-1] +l=m.c +k=n.c +if(!J.d(l,k)){a1.zw("\u2575") +q.a+="\n" +a1.TV(k)}else if(m.b+1!==n.b){a1.akz("...") +q.a+="\n"}}for(l=n.d,k=A.S(l).h("cO<1>"),j=new A.cO(l,k),j=new A.bu(j,j.gu(j),k.h("bu")),k=k.h("af.E"),i=n.b,h=n.a;j.q();){g=j.d +if(g==null)g=k.a(g) +f=g.a +e=f.gbW(f) +e=e.gdG(e) +d=f.gbi(f) +if(e!==d.gdG(d)){e=f.gbW(f) +f=e.gdG(e)===i&&a1.aec(B.d.P(h,0,f.gbW(f).geq()))}else f=!1 +if(f){c=B.b.cS(r,a2) +if(c<0)A.T(A.bC(A.h(r)+" contains no null elements.",a2)) +r[c]=g}}a1.aky(i) +q.a+=" " +a1.akx(n,r) +if(s)q.a+=" " +b=B.b.arw(l,new A.aeX()) +a=b===-1?a2:l[b] +k=a!=null +if(k){j=a.a +g=j.gbW(j) +g=g.gdG(g)===i?j.gbW(j).geq():0 +f=j.gbi(j) +a1.akv(h,g,f.gdG(f)===i?j.gbi(j).geq():h.length,p)}else a1.zy(h) +q.a+="\n" +if(k)a1.akw(n,a,r) +for(k=l.length,a0=0;a0")),q=this.r,r=r.h("B.E");s.q();){p=s.d +if(p==null)p=r.a(p) +if(p===9)q.a+=B.d.S(" ",4) +else q.a+=A.dK(p)}}, +zx(a,b,c){var s={} +s.a=c +if(b!=null)s.a=B.f.k(b+1) +this.iF(new A.aeV(s,this,a),"\x1b[34m")}, +zw(a){return this.zx(a,null,null)}, +akz(a){return this.zx(null,null,a)}, +aky(a){return this.zx(null,a,null)}, +H0(){return this.zx(null,null,null)}, +EB(a){var s,r,q,p +for(s=new A.fu(a),r=t.Hz,s=new A.bu(s,s.gu(s),r.h("bu")),r=r.h("B.E"),q=0;s.q();){p=s.d +if((p==null?r.a(p):p)===9)++q}return q}, +aec(a){var s,r,q +for(s=new A.fu(a),r=t.Hz,s=new A.bu(s,s.gu(s),r.h("bu")),r=r.h("B.E");s.q();){q=s.d +if(q==null)q=r.a(q) +if(q!==32&&q!==9)return!1}return!0}, +a8k(a,b){var s,r=this.b!=null +if(r&&b!=null)this.r.a+=b +s=a.$0() +if(r&&b!=null)this.r.a+="\x1b[0m" +return s}, +iF(a,b){return this.a8k(a,b,t.z)}} +A.aeW.prototype={ +$0(){return this.a}, +$S:647} +A.aeE.prototype={ +$1(a){var s=a.d +s=new A.ba(s,new A.aeD(),A.S(s).h("ba<1>")) +return s.gu(s)}, +$S:648} +A.aeD.prototype={ +$1(a){var s=a.a,r=s.gbW(s) +r=r.gdG(r) +s=s.gbi(s) +return r!==s.gdG(s)}, +$S:125} +A.aeF.prototype={ +$1(a){return a.c}, +$S:650} +A.aeH.prototype={ +$1(a){var s=a.a.gd1() +return s==null?new A.I():s}, +$S:651} +A.aeI.prototype={ +$2(a,b){return a.a.b4(0,b.a)}, +$S:652} +A.aeJ.prototype={ +$1(a){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e=a.a,d=a.b,c=A.a([],t.Kx) +for(s=J.cb(d),r=s.gab(d),q=t._Y;r.q();){p=r.gJ(r).a +o=p.gaS(p) +n=A.aDP(o,p.gcV(p),p.gbW(p).geq()) +n.toString +n=B.d.lm("\n",B.d.P(o,0,n)) +m=n.gu(n) +p=p.gbW(p) +l=p.gdG(p)-m +for(p=o.split("\n"),n=p.length,k=0;kB.b.gO(c).b)c.push(new A.kV(j,l,e,A.a([],q)));++l}}i=A.a([],q) +for(r=c.length,h=0,k=0;k")),p=p.h("af.E");q.q();){n=q.d +if(n==null)n=p.a(n) +f=n.a +f=f.gbW(f) +if(f.gdG(f)>j.b)break +i.push(n)}h+=i.length-g +B.b.E(j.d,i)}return c}, +$S:653} +A.aeG.prototype={ +$1(a){var s=a.a +s=s.gbi(s) +return s.gdG(s)" +return null}, +$S:0} +A.aeR.prototype={ +$0(){var s=this.b===this.c.b?"\u250c":"\u2514" +this.a.r.a+=s}, +$S:19} +A.aeS.prototype={ +$0(){var s=this.b==null?"\u2500":"\u253c" +this.a.r.a+=s}, +$S:19} +A.aeT.prototype={ +$0(){this.a.r.a+="\u2500" +return null}, +$S:0} +A.aeU.prototype={ +$0(){var s,r,q=this,p=q.a,o=p.a?"\u253c":"\u2502" +if(q.c!=null)q.b.r.a+=o +else{s=q.e +r=s.b +if(q.d===r){s=q.b +s.iF(new A.aeP(p,s),p.b) +p.a=!0 +if(p.b==null)p.b=s.b}else{if(q.r===r){r=q.f.a +s=r.gbi(r).geq()===s.a.length}else s=!1 +r=q.b +if(s)r.r.a+="\u2514" +else r.iF(new A.aeQ(r,o),p.b)}}}, +$S:19} +A.aeP.prototype={ +$0(){var s=this.a.a?"\u252c":"\u250c" +this.b.r.a+=s}, +$S:19} +A.aeQ.prototype={ +$0(){this.a.r.a+=this.b}, +$S:19} +A.aeL.prototype={ +$0(){var s=this +return s.a.zy(B.d.P(s.b,s.c,s.d))}, +$S:0} +A.aeM.prototype={ +$0(){var s,r,q=this.a,p=q.r,o=p.a,n=this.c.a,m=n.gbW(n).geq(),l=n.gbi(n).geq() +n=this.b.a +s=q.EB(B.d.P(n,0,m)) +r=q.EB(B.d.P(n,m,l)) +m+=s*3 +p.a+=B.d.S(" ",m) +p=p.a+=B.d.S("^",Math.max(l+(s+r)*3-m,1)) +return p.length-o.length}, +$S:48} +A.aeN.prototype={ +$0(){var s=this.c.a +return this.a.aku(this.b,s.gbW(s).geq())}, +$S:0} +A.aeO.prototype={ +$0(){var s,r=this,q=r.a,p=q.r,o=p.a +if(r.b)p.a+=B.d.S("\u2500",3) +else{s=r.d.a +q.TU(r.c,Math.max(s.gbi(s).geq()-1,0),!1)}return p.a.length-o.length}, +$S:48} +A.aeV.prototype={ +$0(){var s=this.b,r=s.r,q=this.a.a +if(q==null)q="" +s=r.a+=B.d.au5(q,s.d) +q=this.c +r.a=s+(q==null?"\u2502":q)}, +$S:19} +A.h1.prototype={ +k(a){var s,r,q=this.a,p=q.gbW(q) +p=p.gdG(p) +s=q.gbW(q).geq() +r=q.gbi(q) +q=""+"primary "+(""+p+":"+s+"-"+r.gdG(r)+":"+q.gbi(q).geq()) +return q.charCodeAt(0)==0?q:q}} +A.aw0.prototype={ +$0(){var s,r,q,p,o=this.a +if(!(t.D_.b(o)&&A.aDP(o.gaS(o),o.gcV(o),o.gbW(o).geq())!=null)){s=o.gbW(o) +s=A.TY(s.gcz(s),0,0,o.gd1()) +r=o.gbi(o) +r=r.gcz(r) +q=o.gd1() +p=A.b5w(o.gcV(o),10) +o=A.ap_(s,A.TY(r,A.aOk(o.gcV(o)),p,q),o.gcV(o),o.gcV(o))}return A.b1m(A.b1o(A.b1n(o)))}, +$S:654} +A.kV.prototype={ +k(a){return""+this.b+': "'+this.a+'" ('+B.b.c_(this.d,", ")+")"}} +A.kz.prototype={ +Ih(a){var s=this.a +if(!J.d(s,a.gd1()))throw A.c(A.bC('Source URLs "'+A.h(s)+'" and "'+A.h(a.gd1())+"\" don't match.",null)) +return Math.abs(this.b-a.gcz(a))}, +b4(a,b){var s=this.a +if(!J.d(s,b.gd1()))throw A.c(A.bC('Source URLs "'+A.h(s)+'" and "'+A.h(b.gd1())+"\" don't match.",null)) +return this.b-b.gcz(b)}, +j(a,b){if(b==null)return!1 +return t.y3.b(b)&&J.d(this.a,b.gd1())&&this.b===b.gcz(b)}, +gt(a){var s=this.a +s=s==null?null:s.gt(s) +if(s==null)s=0 +return s+this.b}, +k(a){var s=this,r=A.t(s).k(0),q=s.a +return"<"+r+": "+s.b+" "+(A.h(q==null?"unknown source":q)+":"+(s.c+1)+":"+(s.d+1))+">"}, +$ic8:1, +gd1(){return this.a}, +gcz(a){return this.b}, +gdG(a){return this.c}, +geq(){return this.d}} +A.TZ.prototype={ +Ih(a){if(!J.d(this.a.a,a.gd1()))throw A.c(A.bC('Source URLs "'+A.h(this.gd1())+'" and "'+A.h(a.gd1())+"\" don't match.",null)) +return Math.abs(this.b-a.gcz(a))}, +b4(a,b){if(!J.d(this.a.a,b.gd1()))throw A.c(A.bC('Source URLs "'+A.h(this.gd1())+'" and "'+A.h(b.gd1())+"\" don't match.",null)) +return this.b-b.gcz(b)}, +j(a,b){if(b==null)return!1 +return t.y3.b(b)&&J.d(this.a.a,b.gd1())&&this.b===b.gcz(b)}, +gt(a){var s=this.a.a +s=s==null?null:s.gt(s) +if(s==null)s=0 +return s+this.b}, +k(a){var s=A.t(this).k(0),r=this.b,q=this.a,p=q.a +return"<"+s+": "+r+" "+(A.h(p==null?"unknown source":p)+":"+(q.rY(r)+1)+":"+(q.CL(r)+1))+">"}, +$ic8:1, +$ikz:1} +A.U0.prototype={ +a6s(a,b,c){var s,r=this.b,q=this.a +if(!J.d(r.gd1(),q.gd1()))throw A.c(A.bC('Source URLs "'+A.h(q.gd1())+'" and "'+A.h(r.gd1())+"\" don't match.",null)) +else if(r.gcz(r)'}, +$ic8:1} +A.ny.prototype={ +gaS(a){return this.d}} +A.Ud.prototype={ +gth(a){return A.bQ(this.c)}} +A.app.prototype={ +gJp(){var s=this +if(s.c!==s.e)s.d=null +return s.d}, +D2(a){var s,r=this,q=r.d=J.aJq(a,r.b,r.c) +r.e=r.c +s=q!=null +if(s)r.e=r.c=q.gbi(q) +return s}, +Wy(a,b){var s +if(this.D2(a))return +if(b==null)if(a instanceof A.oW)b="/"+a.a+"/" +else{s=J.f0(a) +s=A.is(s,"\\","\\\\") +b='"'+A.is(s,'"','\\"')+'"'}this.OE(b)}, +vs(a){return this.Wy(a,null)}, +apt(){if(this.c===this.b.length)return +this.OE("no more input")}, +apj(a,b,c,d){var s,r,q,p,o,n,m=this.b +if(d<0)A.T(A.ef("position must be greater than or equal to 0.")) +else if(d>m.length)A.T(A.ef("position must be less than or equal to the string length.")) +s=d+c>m.length +if(s)A.T(A.ef("position plus length must not go beyond the end of the string.")) +s=this.a +r=new A.fu(m) +q=A.a([0],t.t) +p=new Uint32Array(A.em(r.dI(r))) +o=new A.aoZ(s,q,p) +o.a6r(r,s) +n=d+c +if(n>p.length)A.T(A.ef("End "+n+u.D+o.gu(o)+".")) +else if(d<0)A.T(A.ef("Start may not be negative, was "+d+".")) +throw A.c(new A.Ud(m,b,new A.yU(o,d,n)))}, +OE(a){this.apj(0,"expected "+a+".",0,this.c)}} +A.nF.prototype={ +gu(a){return this.b}, +i(a,b){if(b>=this.b)throw A.c(A.Pv(b,this,null,null,null)) +return this.a[b]}, +n(a,b,c){if(b>=this.b)throw A.c(A.Pv(b,this,null,null,null)) +this.a[b]=c}, +su(a,b){var s,r,q,p=this,o=p.b +if(bo){if(o===0)q=new Uint8Array(b) +else q=p.zk(b) +B.O.dW(q,0,p.b,p.a) +p.a=q}}p.b=b}, +GI(a,b){var s=this,r=s.b +if(r===s.a.length)s.T3(r) +s.a[s.b++]=b}, +D(a,b){var s=this,r=s.b +if(r===s.a.length)s.T3(r) +s.a[s.b++]=b}, +E(a,b){A.eA(0,"start") +this.ajA(b,0,null)}, +ajA(a,b,c){var s,r,q +if(t.j.b(a))c=a.length +if(c!=null){this.ajC(this.b,a,b,c) +return}for(s=J.ap(a),r=0;s.q();){q=s.gJ(s) +if(r>=b)this.GI(0,q);++r}if(rs||d>s)throw A.c(A.Q("Too few elements"))}r=d-c +q=o.b+r +o.ajB(q) +s=o.a +p=a+r +B.O.bC(s,p,o.b+r,s,a) +B.O.bC(o.a,a,p,b,c) +o.b=q}, +eu(a,b,c){var s,r,q,p=this +if(b<0||b>p.b)throw A.c(A.c9(b,0,p.b,null,null)) +s=p.b +r=p.a +if(ss)throw A.c(A.c9(c,0,s,null,null)) +s=this.a +if(A.o(this).h("nF").b(d))B.O.bC(s,b,c,d.a,e) +else B.O.bC(s,b,c,d,e)}, +dW(a,b,c,d){return this.bC(a,b,c,d,0)}} +A.Z8.prototype={} +A.GB.prototype={} +A.agw.prototype={ +I(){return"LaunchMode."+this.b}} +A.as2.prototype={} +A.ahJ.prototype={ +UR(a){var s=t.y +return B.vy.mq("canLaunch",A.aY(["url",a],t.N,t.K),!1,s).ba(new A.ahK(),s)}, +vZ(a,b,c,d,e,f,g,h){var s=t.y +return B.vy.mq("launch",A.aY(["url",a,"useSafariVC",f,"useWebView",g,"enableJavaScript",!0,"enableDomStorage",!0,"universalLinksOnly",e,"headers",d],t.N,t.K),!1,s).ba(new A.ahL(),s)}} +A.ahK.prototype={ +$1(a){return a===!0}, +$S:155} +A.ahL.prototype={ +$1(a){return a===!0}, +$S:155} +A.tM.prototype={ +I(){return"PreferredLaunchMode."+this.b}} +A.Pu.prototype={} +A.PN.prototype={} +A.arM.prototype={ +vZ(a,b,c,d,e,f,g,h){throw A.c(A.co("launch() has not been implemented."))}, +w_(a,b){var s,r,q=B.d.bz(a,"http:")||B.d.bz(a,"https:"),p=b.a +if(p!==B.zk)if(p!==B.zl){s=q&&p===B.le +r=s}else r=!0 +else r=!0 +return this.vZ(a,!0,!0,b.b.c,p===B.zm,r,r,b.c)}} +A.arN.prototype={ +au2(a,b){var s,r=A.aHg(a),q=r==null?null:r.ge5() +if(B.Xe.p(0,q))return null +s=this.b&&B.A4.p(0,q)?"_top":"" +return this.a.open(a,s,"noopener,noreferrer")}, +UR(a){var s=$.aSI(),r=A.aHg(a) +return A.d5(s.p(0,r==null?null:r.ge5()),t.y)}, +vZ(a,b,c,d,e,f,g,h){return this.as9(a,!0,!0,d,e,f,g,h)}, +as9(a,b,c,d,e,f,g,h){var s=0,r=A.a1(t.y),q,p=this +var $async$vZ=A.a2(function(i,j){if(i===1)return A.Z(j,r) +while(true)switch(s){case 0:q=p.w_(a,new A.PN(B.le,B.Od,h)) +s=1 +break +case 1:return A.a_(q,r)}}) +return A.a0($async$vZ,r)}, +w_(a,b){return this.asa(a,b)}, +asa(a,b){var s=0,r=A.a1(t.y),q,p=this +var $async$w_=A.a2(function(c,d){if(c===1)return A.Z(d,r) +while(true)switch(s){case 0:q=p.au2(a,b.c)!=null +s=1 +break +case 1:return A.a_(q,r)}}) +return A.a0($async$w_,r)}} +A.SE.prototype={ +sHl(a){if(a.j(0,this.B))return +this.B=a}, +swo(a){if(a===this.F)return +this.F=a +this.ag()}, +siU(a){if(this.a9==a)return +this.a9=a +this.ag()}, +sdH(a,b){return}, +PT(){return}, +hF(a){return!0}, +giz(){return!0}, +gjB(){return!0}, +c5(a){return new A.G(A.O(0,a.a,a.b),A.O(0,a.c,a.d))}, +ah(a){this.PT() +this.dg(a)}, +ad(a){this.dh(0)}, +m(){var s=this +s.aH.sar(0,null) +s.aD.sar(0,null) +s.aE.sar(0,null) +s.eK()}, +am(a,b){var s,r=this +if(r.X<=0)return +s=r.aH +s.sar(0,a.p5(!0,b,r.bj,new A.am1(r),s.a))}} +A.am1.prototype={ +$2(a,b){var s=this.a,r=s.aD +r.sar(0,a.K6(b,B.f.an(s.X*255),new A.am0(s),r.a))}, +$S:10} +A.am0.prototype={ +$2(a,b){var s,r=this.a,q=r.a9,p=r.aE +if(q!=null){s=p.a +if(s==null)s=new A.B8(A.A(t.S,t.M),A.ag(t.G)) +if(q!==s.k3){s.k3=q +s.eR()}a.lS(s,new A.am_(r),b) +p.sar(0,s)}else{p.sar(0,null) +a.gbe(a).mQ(r.F.a)}}, +$S:10} +A.am_.prototype={ +$2(a,b){a.gbe(a).mQ(this.a.F.a)}, +$S:10} +A.iV.prototype={} +A.aDB.prototype={ +$0(){var s,r=this,q={},p=r.a,o=p.gt(p),n=$.W(),m=n.qD(),l=A.aL_(o,B.Ep,m,n.qC(m,null),r.b,r.c,r.d,r.e) +n=r.f +s=B.dy.anQ(0,n,l) +q.a=s +if(s.a)return new A.bK(l.KA(),t.AH) +return A.oJ(l.at,t.H).ba(new A.aDC(q,n,l,p),t.YA)}, +$S:656} +A.aDC.prototype={ +$1(a){var s=this.c,r=this.a +r.a=B.dy.VP(0,this.b,s,r.a) +return s.KA()}, +$S:657} +A.ayB.prototype={} +A.a_y.prototype={} +A.auT.prototype={} +A.acZ.prototype={ +KA(){var s,r,q,p,o,n,m=this +m.cx=!0 +try{q=m.f.mR() +p=m.CW +return new A.iV(q,p)}finally{for(q=m.ax,p=q.gaT(q),o=A.o(p),o=o.h("@<1>").N(o.z[1]),p=new A.bN(J.ap(p.a),p.b,o.h("bN<1,2>")),o=o.z[1];p.q();){n=p.a +s=n==null?o.a(n):n +s.m()}q.a0(0) +for(q=m.ay,p=q.gaT(q),o=A.o(p),o=o.h("@<1>").N(o.z[1]),p=new A.bN(J.ap(p.a),p.b,o.h("bN<1,2>")),o=o.z[1];p.q();){n=p.a +r=n==null?o.a(n):n +n=r.b +if(n!=null)n.m()}q.a0(0)}}, +JN(a,b,c){return this.ato(a,b,c)}, +ato(a,b,c){var s=0,r=A.a1(t.z),q=this,p,o,n +var $async$JN=A.a2(function(d,e){if(d===1)return A.Z(e,r) +while(true)switch(s){case 0:o=q.y[a] +n=q.x[b] +if(c!=null)n.sbU(q.ay.i(0,c).b) +p=q.dy +if(p!=null){p=q.ay.i(0,p.a).a +p.bP(o,n)}else{p=n +q.r.bP(o,p)}return A.a_(null,r)}}) +return A.a0($async$JN,r)}, +Yj(a,b,c,d,e,f,g,h,i){var s=$.W().aj() +s.sM(0,new A.m(b)) +if(a!==0)s.slo(B.OO[a]) +if(e!=null)s.sbU(this.z[e]) +if(d===1){s.saG(0,B.D) +if(f!=null&&f!==0)s.sla(B.PZ[f]) +if(g!=null&&g!==0)s.spr(B.QT[g]) +if(h!=null&&h!==4)s.sLR(h) +if(i!=null&&i!==0)s.sbs(i)}this.x.push(s)}, +aty(a,b,c,d,e,f,g,h){var s,r,q=A.a([],t.W) +for(s=e.length,r=0;r>>0)) +this.z.push(A.aeo(new A.k(a,b),new A.k(c,d),q,f,B.pd[g],null))}, +atB(a,b,c,d,e,f,g,h,i,j){var s,r,q,p,o,n=new A.k(a,b) +if(d==null)s=null +else{e.toString +s=new A.k(d,e)}r=A.a([],t.W) +for(q=f.length,p=0;p>>0)) +o=!J.d(s,n)&&s!=null +q=B.pd[i] +this.z.push(A.aXF(n,c,r,g,q,h,o?s:null))}, +JO(a,b,c,d){return this.atp(a,b,c,d)}, +atp(a,b,c,d){var s=0,r=A.a1(t.z),q=this,p,o,n,m,l +var $async$JO=A.a2(function(e,f){if(e===1)return A.Z(f,r) +while(true)switch(s){case 0:n={} +m=q.Q[a] +l=q.cy +if(l==null)l=0 +p=q.db +n.a=0 +o=new A.ad_(n,q,d,m,l,p) +if(b!=null)o.$1(b) +if(c!=null)o.$1(c) +q.cy=l+n.a +return A.a_(null,r)}}) +return A.a0($async$JO,r)}, +atv(a,b,c){var s,r,q=new A.aD($.aw,t.d),p=new A.bI(q,t.gR) +this.at.push(q) +q=$.hu.op$ +q===$&&A.b() +s=q.bm(0,A.N(this.a,a,b,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a),new A.ad1(c)) +if(s==null){p.o7("Failed to load image") +return}r=A.bc("listener") +r.b=new A.jm(new A.ad2(this,s,r,a,p),null,new A.ad3(p,s,r,null)) +s.Z(0,r.aI())}} +A.ad_.prototype={ +$1(a){var s,r,q,p,o=this,n=null,m=o.b,l=m.x[a],k=o.c +if(k!=null)l.sbU(m.ay.i(0,k).b) +k=A.aj7(n,n,n,n,n,n,n,n,n,n,m.d,n) +s=$.W().v3(k) +k=o.d +s.p0(A.aH8(n,n,k.f,k.w,k.r,n,k.b,n,n,k.c,n,n,k.e,l,n,n,n,m.c,n,n,n)) +s.qc(k.a) +r=s.bk() +r.fQ(B.vN) +o.a.a=r.glM() +if(m.dx!=null){q=m.r +q.bH(0) +p=m.dx +p.toString +q.a2(0,p)}q=m.r +q.lw(r,new A.k(o.e-r.glM()*k.d,o.f-r.gqd(r))) +r.m() +if(m.dx!=null)q.b_(0)}, +$S:53} +A.ad1.prototype={ +$0(){return A.aYN(A.afK(this.a).ba(new A.ad0(),t.OX))}, +$S:658} +A.ad0.prototype={ +$1(a){return this.a_F(a)}, +a_F(a){var s=0,r=A.a1(t.OX),q,p=2,o,n=[],m,l,k,j +var $async$$1=A.a2(function(b,c){if(b===1){o=c +s=p}while(true)switch(s){case 0:p=3 +s=6 +return A.a7(A.aG6(a),$async$$1) +case 6:m=c +s=7 +return A.a7(m.Jb(),$async$$1) +case 7:l=c +s=8 +return A.a7(l.jp(),$async$$1) +case 8:k=c +j=J.a65(k) +m.a=null +l.m() +q=new A.fw(j,1,null) +n=[1] +s=4 +break +n.push(5) +s=4 +break +case 3:n=[2] +case 4:p=2 +a.a=null +s=n.pop() +break +case 5:case 1:return A.a_(q,r) +case 2:return A.Z(o,r)}}) +return A.a0($async$$1,r)}, +$S:659} +A.ad2.prototype={ +$2(a,b){var s=this +s.b.K(0,s.c.aI()) +s.a.ax.n(0,s.d,a.a) +s.e.iV(0)}, +$S:176} +A.ad3.prototype={ +$2(a,b){var s=this.a +if((s.a.a&30)===0)s.iV(0) +this.b.K(0,this.c.aI()) +A.d4(new A.bG(a,b,"image resource service",A.bo("Failed to load image"),null,!0))}, +$S:175} +A.a2Z.prototype={} +A.a2X.prototype={ +ghf(a){return this.e}} +A.V9.prototype={ +k(a){return"VectorGraphicsDecodeException: Failed to decode vector graphic from "+this.a.k(0)+".\n\nAdditional error: "+A.h(this.b)}, +$ic2:1} +A.qW.prototype={} +A.Eh.prototype={ +j(a,b){if(b==null)return!1 +return b instanceof A.Eh&&b.a.j(0,this.a)&&b.b===this.b&&b.c===this.c}, +gt(a){return A.N(this.a,this.b,this.c,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}} +A.S_.prototype={} +A.SC.prototype={ +sHl(a){if(a.j(0,this.B))return +this.B=a}, +swo(a){if(a===this.F)return +this.F=a +this.ag()}, +siU(a){if(this.a9==a)return +this.a9=a +this.ag()}, +smO(a,b){if(b===this.X)return +this.X=b +this.ag()}, +sdH(a,b){return}, +uf(){return}, +st3(a,b){if(b===this.aD)return +this.aD=b +this.ag()}, +hF(a){return!0}, +giz(){return!0}, +c5(a){return new A.G(A.O(0,a.a,a.b),A.O(0,a.c,a.d))}, +FG(a){var s +if(a==null)return +if(--a.c===0&&$.SD.ai(0,a.b)){$.SD.C(0,a.b) +s=a.a +if(s!=null)s.m() +a.a=null}}, +aeQ(){var s,r,q,p,o=this,n=o.F.b,m=o.X,l=o.aD,k=B.c.an(n.a*m/l),j=B.c.an(n.b*m/l),i=new A.Eh(o.B,k,j) +if($.SD.ai(0,i)){n=$.SD.i(0,i) +n.toString +m=o.aE +if(n!==m){o.FG(m);++n.c}o.aE=n +return}n=o.X +m=o.aD +l=o.F +s=$.W() +r=s.qD() +q=s.qC(r,null) +q.aV(0,n/m) +q.mQ(l.a) +p=new A.S_(r.mR().wG(k,j),i,0) +p.c=1 +$.SD.n(0,i,p) +o.FG(o.aE) +o.aE=p}, +ah(a){this.uf() +this.dg(a)}, +ad(a){this.dh(0)}, +m(){this.FG(this.aE) +this.eK()}, +am(a,b){var s,r,q,p,o,n,m=this +if(m.aq<=0)return +m.aeQ() +s=m.aE +r=s.a +r.toString +s=s.b +q=$.W().aj() +q.sn3(B.hc) +p=m.a9 +if(p!=null)q.siU(p) +q.sM(0,A.aFn(0,0,0,m.aq)) +p=b.a +o=b.b +n=m.F.b +a.gbe(a).jI(r,new A.w(0,0,s.b,s.c),new A.w(p,o,p+n.a,o+n.b),q)}} +A.Sp.prototype={ +swo(a){if(a===this.B)return +this.B=a +this.ag()}, +siU(a){if(this.F==a)return +this.F=a +this.ag()}, +sdH(a,b){return}, +uf(){return}, +hF(a){return!0}, +giz(){return!0}, +c5(a){return new A.G(A.O(0,a.a,a.b),A.O(0,a.c,a.d))}, +ah(a){this.uf() +this.dg(a)}, +ad(a){this.dh(0)}, +m(){this.eK()}, +am(a,b){var s,r,q,p,o=this +if(o.a9<=0)return +s=$.W().aj() +r=o.F +if(r!=null)s.siU(r) +s.sM(0,A.aFn(0,0,0,o.a9)) +q=a.gbe(a).Lb() +if(!b.j(0,B.e)){a.gbe(a).bH(0) +a.gbe(a).au(0,b.a,b.b)}if(o.a9!==1||o.F!=null){r=a.gbe(a) +p=o.gv(o) +r.e4(new A.w(0,0,0+p.a,0+p.b),s)}a.gbe(a).mQ(o.B.a) +a.gbe(a).Ci(q)}} +A.SF.prototype={ +I(){return"RenderingStrategy."+this.b}} +A.GF.prototype={ +ac(){return new A.a3Y(B.j)}} +A.nV.prototype={} +A.zn.prototype={ +gt(a){var s=this +return A.N(s.a,s.b,s.c,s.d,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a,b){var s=this +if(b==null)return!1 +return b instanceof A.zn&&b.a.j(0,s.a)&&J.d(b.b,s.b)&&b.c==s.c&&b.d===s.d}} +A.a3Y.prototype={ +bx(){var s=this,r=s.c +r.toString +s.r=A.wL(r) +r=s.c +r.toString +s.w=A.e0(r) +s.Qj() +s.dr()}, +aO(a){if(!a.c.j(0,this.a.c))this.Qj() +this.bb(a)}, +m(){var s=this +s.yG(s.d) +s.d=null +s.aN()}, +yG(a){if(a==null)return +if(--a.c===0&&$.aBV.ai(0,a.b)){$.aBV.C(0,a.b) +a.a.a.m()}}, +aey(a,b,c){var s,r +if($.aC2.ai(0,b)){s=$.aC2.i(0,b) +s.toString +return s}r=c.XZ(a).ba(new A.aC_(this,b,c),t.YA).ba(new A.aC0(b),t.Wa) +$.aC2.n(0,b,r) +r.ix(new A.aC1(b)) +return r}, +abK(a,b){this.a3(new A.aBU(this,a,b))}, +Qj(){var s,r,q,p=this,o=p.a.c,n=p.c +n.toString +s=new A.zn(o.Ht(n),p.r,p.w,p.a.ch) +r=$.aBV.i(0,s) +if(r!=null){++r.c +p.a3(new A.aBX(p,r)) +return}q=p.a.c +o=p.c +o.toString +p.aey(o,s,q).ba(new A.aBY(p,q,s),t.P)}, +H(a){var s,r,q,p,o,n,m,l,k,j=this,i=null,h=j.d,g=h==null?i:h.a +if(g!=null){h=j.a +s=h.d +r=h.e +h=s==null +if(h&&r==null){h=g.b +s=h.a +r=h.b}else{if(r!=null){q=g.b +q=!q.ga7(q)}else q=!1 +if(q){h=g.b +s=r/h.b*h.a}else{if(!h){h=g.b +h=!h.ga7(h)}else h=!1 +if(h){h=g.b +r=s/h.a*h.b}}}h=g.b +s.toString +r.toString +p=Math.min(h.a/s,h.b/r) +if($.aT4()){q=j.d.b +o=j.a +n=new A.a0A(g,o.at,o.ax,q,i,i) +q=o}else{q=j.a +o=q.ay +m=j.d +l=q.at +k=q.ax +if(o===B.Wo)n=new A.a0y(g,l,p,k,m.b,i,i) +else{m.toString +n=new A.a0x(g,l,k,i,i)}}n=A.eC(new A.Oz(q.f,q.r,q.z,A.TG(n,h),i),r,s)}else{h=j.a +q=h.d +n=A.eC(i,h.e,q)}n=A.cH(i,i,n,!1,i,!1,!1,i,i,i,!0,"",i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i) +return n}} +A.aC_.prototype={ +$1(a){var s=this.b +return A.aQw(a,s.d,this.c,s.b,new A.aBZ(this.a),s.c)}, +$S:170} +A.aBZ.prototype={ +$2(a,b){return this.a.abK(a,b)}, +$S:175} +A.aC0.prototype={ +$1(a){return new A.nV(a,this.a,0)}, +$S:662} +A.aC1.prototype={ +$0(){$.aC2.C(0,this.a)}, +$S:19} +A.aBU.prototype={ +$0(){var s=this.a +s.e=this.b +s.f=this.c}, +$S:0} +A.aBX.prototype={ +$0(){var s=this.a +s.yG(s.d) +s.d=this.b}, +$S:0} +A.aBY.prototype={ +$1(a){var s;++a.c +s=this.a +if(s.c==null||!this.b.j(0,s.a.c)){s.yG(a) +return}if(a.c===1)$.aBV.n(0,this.c,a) +s.a3(new A.aBW(s,a))}, +$S:663} +A.aBW.prototype={ +$0(){var s=this.a +s.yG(s.d) +s.d=this.b}, +$S:0} +A.a0y.prototype={ +az(a){var s=this,r=A.d_(a,null) +r=r==null?null:r.b +if(r==null)r=1 +r=new A.SC(s.x,s.e,s.f,r,s.w,s.r,A.ag(t.T)) +r.aw() +r.uf() +return r}, +aF(a,b){var s,r=this +b.swo(r.e) +b.sHl(r.x) +b.siU(r.f) +s=A.d_(a,null) +s=s==null?null:s.b +b.smO(0,s==null?1:s) +b.sdH(0,r.w) +b.st3(0,r.r)}} +A.a0A.prototype={ +az(a){var s=this,r=A.ag(t.bq),q=A.ag(t.o0),p=A.ag(t.Zn),o=new A.bd(new Float64Array(16)) +o.de() +o=new A.SE(s.w,s.e,s.f,s.r,r,q,p,o,A.ag(t.T)) +o.aw() +o.PT() +return o}, +aF(a,b){var s=this +b.swo(s.e) +b.sHl(s.w) +b.siU(s.f) +b.sdH(0,s.r)}} +A.a0x.prototype={ +az(a){var s=new A.Sp(this.e,this.f,this.r,A.ag(t.T)) +s.aw() +s.uf() +return s}, +aF(a,b){b.swo(this.e) +b.siU(this.f) +b.sdH(0,this.r)}} +A.arT.prototype={ +Js(a,b){return this.asq(a,b)}, +asq(a,b){var s=0,r=A.a1(t.YA),q,p,o +var $async$Js=A.a2(function(c,d){if(c===1)return A.Z(d,r) +while(true)switch(s){case 0:o={} +o.a=B.q +p=$.b8().a.f +o.b=p.length===0?B.Rg:B.b.gL(p) +q=a.XZ(b).ba(new A.arU(o,a,!0,null),t.YA) +s=1 +break +case 1:return A.a_(q,r)}}) +return A.a0($async$Js,r)}} +A.arU.prototype={ +$1(a){var s,r,q=this +try{s=q.a +s=A.aQw(a,q.c,q.b,s.b,q.d,s.a) +return s}catch(r){A.aEq().$1("Failed to decode "+q.b.k(0)) +throw r}}, +$S:170} +A.Nz.prototype={} +A.arW.prototype={ +VP(d6,d7,d8,d9){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,b0,b1,b2,b3,b4,b5,b6,b7,b8,b9,c0,c1,c2,c3,c4,c5,c6,c7,c8,c9,d0,d1,d2,d3,d4=null,d5="The provided data was not a vector_graphics binary asset." +if(d9==null){s=new A.az5(d7) +if(d7.byteLength<5)throw A.c(A.Q(d5)) +if(s.CZ(0)!==8924514)throw A.c(A.Q(d5)) +if(s.kf(0)!==1)throw A.c(A.Q("The provided data does not match the currently supported version."))}else{r=d9.b +r.toString +s=r}$label0$1:for(r=s.a,q=d8.as,p=d8.ay,o=d8.r,n=d8.ax,m=d8.Q,l=t.J9,k=d8.y,j=d8.e,i=d8.x,h=!1;g=s.b,g0){b2=r.buffer +b3=r.byteOffset +c1=new Uint8Array(b2,b3+g,b) +s.b+=b +c2=B.cK.cp(c1)}else c2=d4 +b=r.getUint16(s.b,!0) +g=s.b+=2 +b2=r.buffer +b3=r.byteOffset +c1=new Uint8Array(b2,b3+g,b) +s.b+=b +c3=B.cK.cp(c1) +c4=A.a([],l) +if((b9&1)!==0)c4.push(B.lZ) +if((b9&2)!==0)c4.push(B.Zl) +if((b9&4)!==0)c4.push(B.Zn) +m.push(new A.a2X(c3,c2,d,e,B.kE[b8],A.b0d(c4),B.R2[c0],new A.m(c))) +continue $label0$1 +case 44:e=r.getUint16(s.b,!0) +g=s.b+=2 +d=r.getUint16(g,!0) +g=s.b+=2 +c5=d===65535?d4:d +d=r.getUint16(g,!0) +g=s.b+=2 +c6=d===65535?d4:d +d=r.getUint16(g,!0) +s.b+=2 +d8.JO(e,c5,c6,d===65535?d4:d) +continue $label0$1 +case 46:e=r.getUint16(s.b,!0) +g=s.b+=2 +s.b=g+1 +c7=r.getUint8(g) +d=r.getUint32(s.b,!0) +g=s.b+=4 +b2=r.buffer +b3=r.byteOffset +c1=new Uint8Array(b2,b3+g,d) +s.b+=d +d8.atv(e,c7,c1) +h=!0 +continue $label0$1 +case 47:e=r.getUint16(s.b,!0) +g=s.b+=2 +d=r.getFloat32(g,!0) +g=s.b+=4 +c=r.getFloat32(g,!0) +g=s.b+=4 +b=r.getFloat32(g,!0) +g=s.b+=4 +a=r.getFloat32(g,!0) +s.b+=4 +c8=s.xb() +g=n.i(0,e) +g.toString +b2=c8!=null +if(b2){o.bH(0) +o.a2(0,c8)}o.jI(g,new A.w(0,0,g.gbB(g),g.gbh(g)),new A.w(d,c,d+b,c+a),$.W().aj()) +if(b2)o.b_(0) +continue $label0$1 +case 49:e=r.getUint16(s.b,!0) +g=s.b+=2 +d=r.getFloat32(g,!0) +g=s.b+=4 +c=r.getFloat32(g,!0) +g=s.b+=4 +b=r.getFloat32(g,!0) +g=s.b+=4 +a=r.getFloat32(g,!0) +s.b+=4 +c9=s.xb() +c9.toString +d8.dy=new A.ayB(e,b,a,c9) +g=$.W() +d0=g.qD() +d1=g.qC(d0,d4) +d1.ia(new A.w(d,c,d+b,c+a)) +g=new A.a_y() +g.c=d0 +g.a=d1 +p.n(0,e,g) +continue $label0$1 +case 50:r.getUint16(s.b,!0) +g=s.b+=2 +e=r.getFloat32(g,!0) +g=s.b+=4 +d=r.getFloat32(g,!0) +g=s.b+=4 +c=r.getFloat32(g,!0) +g=s.b+=4 +b=r.getFloat32(g,!0) +g=s.b+=4 +s.b=g+1 +d2=r.getUint8(g)!==0||!1 +c9=s.xb() +g=isNaN(e)?d4:e +b2=isNaN(d)?d4:d +b3=isNaN(c)?d4:c +q.push(new A.a2Z(g,b2,b3,isNaN(b)?d4:b,d2,c9)) +continue $label0$1 +case 51:e=r.getUint16(s.b,!0) +s.b+=2 +d3=q[e] +if(d3.e)d8.db=d8.cy=0 +g=d3.a +if(g!=null)d8.cy=g +g=d3.b +if(g!=null)d8.db=g +g=d3.c +if(g!=null){b2=d8.cy +d8.cy=(b2==null?0:b2)+g}g=d3.d +if(g!=null)d8.db+=g +d8.dx=d3.f +continue $label0$1 +default:throw A.c(A.Q("Unknown type tag "+f))}}return B.KP}, +anQ(a,b,c){return this.VP(a,b,c,null)}, +a_x(a,b,c,d){a.f0(B.c8) +a.lf() +a.a.push(30) +a.lj(b) +a.lj(c) +a.lj(d==null?65535:d)}, +a90(a){var s,r=a.length,q=new Float32Array(r),p=new DataView(new ArrayBuffer(8)) +for(s=0;sa.a){s=a.b +throw A.c(A.Q(B.d.avw(s[0])+B.d.bL(s,1)+" must be encoded together (current phase is "+this.as.b+")."))}this.as=a}, +akB(a){var s,r=this.a +if(a!=null){s=a.length +r.push(s) +this.mz(8) +B.b.E(this.a,A.dD(a.buffer,a.byteOffset,8*s))}else r.push(0)}, +lj(a){var s,r +this.c.setUint16(0,a,!0) +s=this.a +r=this.d +r===$&&A.b() +B.b.E(s,A.eD(r,0,A.fK(2,"count",t.S),A.as(r).h("B.E")))}, +agO(a){var s,r +this.c.setUint32(0,a,!0) +s=this.a +r=this.d +r===$&&A.b() +B.b.E(s,A.eD(r,0,A.fK(4,"count",t.S),A.as(r).h("B.E")))}, +R9(a){this.mz(4) +B.b.E(this.a,A.dD(a.buffer,a.byteOffset,4*a.length))}, +jw(a){var s,r +this.c.setFloat32(0,a,!0) +s=this.a +r=this.d +r===$&&A.b() +B.b.E(s,A.eD(r,0,A.fK(4,"count",t.S),A.as(r).h("B.E")))}, +R7(a){this.mz(4) +B.b.E(this.a,A.dD(a.buffer,a.byteOffset,4*a.length))}, +mz(a){var s,r=this.a,q=B.f.bF(r.length,a) +if(q!==0){s=$.v9() +B.b.E(r,A.eD(s,0,A.fK(a-q,"count",t.S),A.as(s).h("B.E")))}}} +A.az5.prototype={ +kf(a){return this.a.getUint8(this.b++)}, +a0o(a){var s=this.a.getUint16(this.b,!0) +this.b+=2 +return s}, +CZ(a){var s=this.a.getUint32(this.b,!0) +this.b+=4 +return s}, +mb(a){var s=this.a,r=A.dD(s.buffer,s.byteOffset+this.b,a) +this.b+=a +return r}, +Lh(a){var s,r,q,p=this +p.mz(2) +s=p.a +r=s.buffer +s=s.byteOffset+p.b +A.L2(r,s,a) +q=new Uint16Array(r,s,a) +p.b=p.b+2*a +return q}, +L2(a){var s,r,q=this +q.mz(4) +s=q.a +r=A.aGs(s.buffer,s.byteOffset+q.b,a) +q.b=q.b+4*a +return r}, +x5(a){var s,r,q=this +q.mz(4) +s=q.a +r=A.aM1(s.buffer,s.byteOffset+q.b,a) +q.b=q.b+4*a +return r}, +mz(a){var s=this.b,r=B.f.bF(s,a) +if(r!==0)this.b=s+(a-r)}, +xb(){var s,r,q=this,p=q.kf(0) +if(p>0){q.mz(8) +s=q.a +r=A.aGr(s.buffer,s.byteOffset+q.b,p) +q.b=q.b+8*p +return r}return null}} +A.ab1.prototype={ +aaN(a,b){return b.bm(0,a,new A.ab2(b))}, +jv(a,b){return this.aaN(a,b,t.z)}, +Ud(a){var s=null +this.r.push(new A.iC(s,B.L_,s,this.jv(a,this.a),s,s))}, +akX(a,b,c,d,e){var s,r,q,p=this +if(b.a.length===0)return +s=p.jv(b,p.b) +r=p.jv(c,p.a) +q=e!=null?p.w.i(0,e):null +p.r.push(new A.iC(d,B.KZ,s,r,q,null))}} +A.ab2.prototype={ +$0(){return this.a.a}, +$S:48} +A.bY.prototype={ +gt(a){return A.N(this.a,this.b,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a,b){if(b==null)return!1 +return b instanceof A.bY&&b.a===this.a&&b.b===this.b}, +S(a,b){return new A.bY(this.a*b,this.b*b)}, +R(a,b){return new A.bY(this.a+b.a,this.b+b.b)}, +k(a){return"Point("+A.h(this.a)+", "+A.h(this.b)+")"}} +A.i6.prototype={ +gt(a){var s=this +return A.N(s.a,s.b,s.c,s.d,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a,b){var s=this +if(b==null)return!1 +return b instanceof A.i6&&b.a===s.a&&b.b===s.b&&b.c===s.c&&b.d===s.d}, +k(a){var s=this +return"Rect.fromLTRB("+A.h(s.a)+", "+A.h(s.b)+", "+A.h(s.c)+", "+A.h(s.d)+")"}} +A.Pp.prototype={} +A.O2.prototype={} +A.jY.prototype={ +a0v(a){var s,r,q,p,o=this +if(a!=null)s=o.a===1&&o.d===1 +else s=!0 +if(s)return a +s=o.a +r=o.c +q=o.b +p=o.d +return(Math.sqrt(s*s+r*r)+Math.sqrt(q*q+p*p))/2*a}, +avg(a){var s,r,q,p,o,n,m,l=this +if(a===0)return l +s=Math.cos(a) +r=Math.sin(a) +q=l.a +p=l.c +o=l.b +n=l.d +m=-r +return A.mr(q*s+p*r,o*s+n*r,q*m+p*s,o*m+n*s,l.e,l.f,l.r)}, +gWr(){var s=this,r=s.a +return r>0&&s.b===0&&s.c===0&&s.d>0&&s.r===r}, +t5(a,b){var s=this +if(a===1&&b===1)return s +return A.mr(s.a*a,s.b*a,s.c*b,s.d*b,s.e,s.f,s.r*a)}, +wL(a,b){var s=this,r=s.a,q=s.b,p=s.c,o=s.d +return A.mr(r,q,p,o,r*a+p*b+s.e,q*a+o*b+s.f,s.r)}, +eS(a){var s=this,r=s.a,q=a.a,p=s.c,o=a.b,n=s.b,m=s.d,l=a.c,k=a.d,j=a.e,i=a.f +return A.mr(r*q+p*o,n*q+m*o,r*l+p*k,n*l+m*k,r*j+p*i+s.e,n*j+m*i+s.f,s.r*a.r)}, +m3(a,b){var s=this,r=b.a,q=b.b +return new A.bY(s.a*r+s.c*q+s.e,s.b*r+s.d*q+s.f)}, +pc(){var s=this +return new Float64Array(A.em(A.a([s.a,s.b,0,0,s.c,s.d,0,0,0,0,s.r,0,s.e,s.f,0,1],t.n)))}, +gt(a){var s=this +return A.N(s.a,s.b,s.c,s.d,s.e,s.f,s.r,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a,b){var s=this +if(b==null)return!1 +return b instanceof A.jY&&b.a===s.a&&b.b===s.b&&b.c===s.c&&b.d===s.d&&b.e===s.e&&b.f===s.f&&b.r===s.r}, +k(a){var s=this +return"[ "+A.h(s.a)+", "+A.h(s.c)+", "+A.h(s.e)+" ]\n[ "+A.h(s.b)+", "+A.h(s.d)+", "+A.h(s.f)+" ]\n[ 0.0, 0.0, 1.0 ] // _m4_10 = "+A.h(s.r)+"\n"}} +A.Rl.prototype={ +I(){return"PathFillType."+this.b}} +A.x5.prototype={ +I(){return"PathCommandType."+this.b}} +A.pl.prototype={} +A.fc.prototype={ +b0(a){var s=a.m3(0,new A.bY(this.b,this.c)) +return new A.fc(s.a,s.b,B.bh)}, +gt(a){return A.N(this.a,this.b,this.c,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a,b){if(b==null)return!1 +return b instanceof A.fc&&b.b===this.b&&b.c===this.c}, +k(a){return"LineToCommand("+A.h(this.b)+", "+A.h(this.c)+")"}} +A.iP.prototype={ +b0(a){var s=a.m3(0,new A.bY(this.b,this.c)) +return new A.iP(s.a,s.b,B.cE)}, +gt(a){return A.N(this.a,this.b,this.c,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a,b){if(b==null)return!1 +return b instanceof A.iP&&b.b===this.b&&b.c===this.c}, +k(a){return"MoveToCommand("+A.h(this.b)+", "+A.h(this.c)+")"}} +A.eO.prototype={ +V6(a){var s=this +return new A.a9V().$5(a,new A.bY(s.b,s.c),new A.bY(s.d,s.e),new A.bY(s.f,s.r),0)}, +b0(a){var s=this,r=a.m3(0,new A.bY(s.b,s.c)),q=a.m3(0,new A.bY(s.d,s.e)),p=a.m3(0,new A.bY(s.f,s.r)) +return new A.eO(r.a,r.b,q.a,q.b,p.a,p.b,B.b5)}, +gt(a){var s=this +return A.N(s.a,s.b,s.c,s.d,s.e,s.f,s.r,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a,b){var s=this +if(b==null)return!1 +return b instanceof A.eO&&b.b===s.b&&b.c===s.c&&b.d===s.d&&b.e===s.e&&b.f===s.f&&b.r===s.r}, +k(a){var s=this +return"CubicToCommand("+A.h(s.b)+", "+A.h(s.c)+", "+A.h(s.d)+", "+A.h(s.e)+", "+A.h(s.f)+", "+A.h(s.r)+")"}} +A.a9V.prototype={ +$5(a,b,c,d,e){var s +if(A.RH(b,A.tC(a,d,0.3333333333333333))>1.5||A.RH(c,A.tC(a,d,0.6666666666666666))>1.5){s=A.aK4(a,b,c,d,0.5) +e=this.$5(s[0],s[1],s[2],s[3],e) +e=this.$5(s[3],s[4],s[5],s[6],e)}else e+=A.RH(a,d) +return e}, +$S:664} +A.B7.prototype={ +b0(a){return this}, +gt(a){return A.fE(this.a)}, +j(a,b){if(b==null)return!1 +return b instanceof A.B7}, +k(a){return"CloseCommand()"}} +A.iU.prototype={ +kr(a){var s,r,q,p,o,n,m,l=a.a,k=(a.c-l)*0.5,j=a.b,i=(a.d-j)*0.5 +l+=k +j+=i +s=0.551915024494*k +r=0.551915024494*i +q=j-i +p=this.a +p.push(new A.iP(l,q,B.cE)) +o=l+s +n=l+k +m=j-r +p.push(new A.eO(o,q,n,m,n,j,B.b5)) +r=j+r +i=j+i +p.push(new A.eO(n,r,o,i,l,i,B.b5)) +s=l-s +k=l-k +p.push(new A.eO(s,i,k,r,k,j,B.b5)) +p.push(new A.eO(k,m,s,q,l,q,B.b5)) +p.push(B.fQ) +return this}, +jA(a){var s,r=a.a,q=a.b,p=this.a +p.push(new A.iP(r,q,B.cE)) +s=a.c +p.push(new A.fc(s,q,B.bh)) +q=a.d +p.push(new A.fc(s,q,B.bh)) +p.push(new A.fc(r,q,B.bh)) +p.push(B.fQ) +return this}, +akZ(a,b,c){var s,r,q,p,o,n,m,l,k,j,i,h,g,f +if(b===0&&c===0)return this.jA(a) +s=new A.bY(b,c).S(0,0.551915024494) +r=a.a +q=r+b +p=a.b +o=this.a +o.push(new A.iP(q,p,B.cE)) +n=r+(a.c-r) +m=n-b +o.push(new A.fc(m,p,B.bh)) +l=s.a +k=m+l +j=p+c +i=s.b +h=j-i +o.push(new A.eO(k,p,n,h,n,j,B.b5)) +g=p+(a.d-p) +f=g-c +o.push(new A.fc(n,f,B.bh)) +i=f+i +o.push(new A.eO(n,i,k,g,m,g,B.b5)) +o.push(new A.fc(q,g,B.bh)) +l=q-l +o.push(new A.eO(l,g,r,i,r,f,B.b5)) +o.push(new A.fc(r,j,B.bh)) +o.push(new A.eO(r,h,l,p,q,p,B.b5)) +o.push(B.fQ) +return this}, +ZL(a){var s,r=this.a,q=this.b +q===$&&A.b() +s=A.Rj(r,q) +if(a)B.b.a0(r) +return s}, +pd(){return this.ZL(!0)}} +A.fD.prototype={ +aw7(a){if(a===this.b)return this +return A.Rj(this.a,a)}, +b0(a){var s,r,q,p=A.a([],t.H9) +for(s=this.a,r=s.length,q=0;q"+A.h(r)+","):"Path(" +s=this.b +r=(s!==B.bI?r+("\n fillType: "+s.k(0)+","):r)+"\n)" +return r.charCodeAt(0)==0?r:r}} +A.aug.prototype={ +gk6(a){var s=this,r=s.b,q=s.a +if(r>=q.length)r=s.b=0 +s.b=r+1 +return q[r]}} +A.ayA.prototype={ +gu(a){var s=this.b +s===$&&A.b() +return s}, +O9(a){var s,r,q,p,o,n,m,l,k=this,j=A.RH(k.c,a) +if(!(j<=0)){s=k.b +s===$&&A.b() +s=s<=0}else s=!0 +if(s)return +s=k.f +r=a.a +q=a.b +p=k.a +while(!0){o=k.b +o===$&&A.b() +if(!(j>=o))break +n=o/j +o=k.c +m=1-n +k.c=new A.bY(m*o.a+n*r,m*o.b+n*q) +k.b=p.gk6(p) +o=k.e +o===$&&A.b() +m=k.c +l=m.a +m=m.b +if(o)s.push(new A.fc(l,m,B.bh)) +else s.push(new A.iP(l,m,B.cE)) +j=A.RH(k.c,a) +k.e=!k.e}if(j>0){k.b=o-j +p=k.e +p===$&&A.b() +if(p)s.push(new A.fc(r,q,B.bh))}k.c=a}, +a8Y(a){var s,r,q,p,o,n=this,m=null,l=a.V6(n.c),k=n.a,j=n.f +while(!0){s=n.b +s===$&&A.b() +if(!(l>=s))break +r=A.aK4(n.c,new A.bY(a.b,a.c),new A.bY(a.d,a.e),new A.bY(a.f,a.r),s/l) +s=n.c=r[3] +q=n.e +q===$&&A.b() +if(q){s=A.S(r) +q=new A.ac(r,1,m,s.h("ac<1>")) +q.b2(r,1,m,s.c) +p=q.wD(0,3).dI(0) +q=p[0] +s=p[1] +o=p[2] +j.push(new A.eO(q.a,q.b,s.a,s.b,o.a,o.b,B.b5))}else j.push(new A.iP(s.a,s.b,B.cE)) +s=A.S(r) +q=new A.ac(r,4,m,s.h("ac<1>")) +q.b2(r,4,m,s.c) +p=q.wD(0,3).dI(0) +q=p[0] +s=p[1] +o=p[2] +a=new A.eO(q.a,q.b,s.a,s.b,o.a,o.b,B.b5) +n.b=k.gk6(k) +l=a.V6(n.c) +n.e=!n.e}n.b=s-l +n.c=new A.bY(a.f,a.r) +k=n.e +k===$&&A.b() +if(k)j.push(a)}, +anI(a){var s,r,q,p,o,n,m,l=this,k=l.a +l.b=k.gk6(k) +l.e=!0 +for(k=a.a,s=k.length,r=t.ZC,q=t.JO,p=t.wd,o=l.f,n=0;n"+p+", offsets: "+o+", tileMode: "+n+", "+m+"unitMode: "+A.h(s.e)+")"}} +A.Cl.prototype={ +I(){return"GradientUnitMode."+this.b}} +A.pu.prototype={ +He(a,b){var s,r,q=this,p=q.f +if(p==null)p=B.aL +s=q.e +switch((s==null?B.kn:s).a){case 0:s=a.a +r=a.b +p=b.wL(s,r).t5(a.c-s,a.d-r).eS(p) +break +case 1:p=b.eS(p) +break +case 2:break}s=q.d +if(s==null)s=B.m4 +return new A.pu(q.r,q.w,q.x,q.a,q.b,q.c,s,B.oW,p)}, +Hj(a){var s,r,q,p,o=this,n=o.b +if(n==null)n=a.b +s=o.c +if(s==null)s=a.c +r=o.f +if(r==null)r=a.f +q=o.e +if(q==null)q=a.e +p=o.d +if(p==null)p=a.d +return new A.pu(o.r,o.w,o.x,o.a,n,s,p,q,r)}, +gt(a){var s,r=this,q=r.b +q=A.bv(q==null?A.a([],t.Ai):q) +s=r.c +return A.N(r.a,r.r,r.w,q,A.bv(s==null?A.a([],t.n):s),r.d,r.f,r.x,r.e,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a,b){var s=this +if(b==null)return!1 +return b instanceof A.pu&&b.a===s.a&&b.r.j(0,s.r)&&b.w===s.w&&J.d(b.x,s.x)&&A.jc(b.b,s.b)&&A.jc(b.c,s.c)&&J.d(b.f,s.f)&&b.d==s.d&&b.e==s.e}, +k(a){var s=this,r=s.r.k(0),q=A.h(s.b),p=A.h(s.c),o=A.h(s.d),n=s.f +n=n==null?"":"transform: Float64List.fromList("+A.h(n.pc())+") ," +return"RadialGradient(id: '"+s.a+"', center: "+r+", radius: "+A.h(s.w)+", colors: "+q+", offsets: "+p+", tileMode: "+o+", "+n+"focalPoint: "+A.h(s.x)+", unitMode: "+A.h(s.e)+")"}} +A.lB.prototype={ +gt(a){return A.N(this.a,this.b,this.c,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a,b){if(b==null)return!1 +return b instanceof A.lB&&b.a===this.a&&J.d(b.b,this.b)&&J.d(b.c,this.c)}, +k(a){var s="Paint(blendMode: "+this.a.k(0),r=this.b +if(r!=null)s+=", stroke: "+r.k(0) +r=this.c +s=(r!=null?s+(", fill: "+r.k(0)):s)+")" +return s.charCodeAt(0)==0?s:s}} +A.FO.prototype={ +gt(a){var s=this +return A.N(B.Vj,s.a,s.b,s.c,s.d,s.e,s.f,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a,b){var s,r=this +if(b==null)return!1 +if(b instanceof A.FO){s=b.a +s=r.a.a===s.a&&J.d(b.b,r.b)&&b.c==r.c&&b.d==r.d&&b.e==r.e&&b.f==r.f}else s=!1 +return s}, +k(a){var s=this,r="Stroke(color: "+s.a.k(0),q=s.b +if(q!=null)r+=", shader: "+q.k(0) +q=s.c +if(q!=null)r+=", cap: "+q.k(0) +q=s.d +if(q!=null)r+=", join: "+q.k(0) +q=s.e +if(q!=null)r+=", miterLimit: "+A.h(q) +q=s.f +r=(q!=null?r+(", width: "+A.h(q)):r)+")" +return r.charCodeAt(0)==0?r:r}} +A.ru.prototype={ +gt(a){return A.N(B.Vi,this.a,this.b,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a,b){var s +if(b==null)return!1 +if(b instanceof A.ru){s=b.a +s=this.a.a===s.a&&J.d(b.b,this.b)}else s=!1 +return s}, +k(a){var s="Fill(color: "+this.a.k(0),r=this.b +s=(r!=null?s+(", shader: "+r.k(0)):s)+")" +return s.charCodeAt(0)==0?s:s}} +A.eM.prototype={ +I(){return"BlendMode."+this.b}} +A.Rg.prototype={ +I(){return"PaintingStyle."+this.b}} +A.FP.prototype={ +I(){return"StrokeCap."+this.b}} +A.FQ.prototype={ +I(){return"StrokeJoin."+this.b}} +A.Gq.prototype={ +I(){return"TileMode."+this.b}} +A.Gf.prototype={ +gt(a){var s=this +return A.N(s.a,s.c,s.b,s.d,s.e,s.f,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a,b){var s=this +if(b==null)return!1 +return b instanceof A.Gf&&b.a==s.a&&b.c==s.c&&b.b==s.b&&b.d==s.d&&b.e===s.e&&J.d(b.f,s.f)}, +k(a){var s=this,r=""+("TextPosition(reset: "+s.e),q=s.a +if(q!=null)r+=", x: "+A.h(q) +q=s.c +if(q!=null)r+=", y: "+A.h(q) +q=s.b +if(q!=null)r+=", dx: "+A.h(q) +q=s.d +if(q!=null)r+=", dy: "+A.h(q) +q=s.f +r=(q!=null?r+(", transform: "+q.k(0)):r)+")" +return r.charCodeAt(0)==0?r:r}} +A.G9.prototype={ +gt(a){var s=this +return A.N(s.a,s.b,s.c,s.d,s.e,s.f,s.r,s.w,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a,b){var s,r=this +if(b==null)return!1 +if(b instanceof A.G9)if(b.a===r.a)if(b.b===r.b)if(b.c===r.c)if(b.d==r.d)if(b.e===r.e){s=b.f +if(r.f.a===s.a)if(b.r===r.r)s=r.w.a===b.w.a +else s=!1 +else s=!1}else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +else s=!1 +return s}, +k(a){var s=this +return"TextConfig('"+s.a+"', "+A.h(s.b)+", '"+A.h(s.d)+"', "+s.e.k(0)+", "+A.h(s.c)+", "+s.f.k(0)+", "+s.r.k(0)+", "+s.w.k(0)+",)"}, +ghf(a){return this.e}} +A.kd.prototype={ +I(){return"FontWeight."+this.b}} +A.uq.prototype={ +I(){return"TextDecorationStyle."+this.b}} +A.up.prototype={ +j(a,b){if(b==null)return!1 +return b instanceof A.up&&b.a===this.a}, +gt(a){return B.f.gt(this.a)}, +k(a){var s,r=this.a +if(r===0)return"TextDecoration.none" +s=A.a([],t.s) +if((r&1)!==0)s.push("underline") +if((r&2)!==0)s.push("overline") +if((r&4)!==0)s.push("lineThrough") +if(s.length===1)return"TextDecoration."+s[0] +return"TextDecoration.combine(["+B.b.c_(s,", ")+"])"}} +A.cG.prototype={ +dX(a,b){return this}, +i6(a){return this.dX(a,!1)}} +A.XZ.prototype={ +cg(a,b,c){return b.a_g(this,c)}, +ca(a,b,c){return this.cg(a,b,c,t.z,t.z)}} +A.UV.prototype={ +mG(a){var s=this.a +if(s.j(0,B.aL))return a +return a.eS(s)}} +A.fr.prototype={} +A.Vj.prototype={ +cg(a,b,c){return b.CD(this,c)}, +ca(a,b,c){return this.cg(a,b,c,t.z,t.z)}} +A.x4.prototype={ +uA(a,b,c,d,e,f,g){var s,r=b!=null?new A.B4(c,b,a,a.b.r):a +if(d!=null){s=a.b +r=new A.D7(d,r,s.z,e,s.r)}if(f!=null)r=new A.DU(f,r,g,a.b.r) +B.b.D(this.d,r)}, +H5(a,b,c,d){return this.uA(a,null,b,null,c,null,d)}, +dX(a,b){var s=A.ty(this.b.qf(a),null,this.a) +B.b.E(s.d,this.d) +return s}, +i6(a){return this.dX(a,!1)}, +anz(){var s,r,q=null,p=this.b,o=p.f,n=o==null,m=n?q:o.c +p=p.z +s=p==null +if(s)r=m!=null&&m!==1&&m!==0 +else r=!0 +if(r){o=n?q:o.avr(B.Wj,this.a) +if(o==null){o=A.vH(0,0,0,m==null?1:m) +o=new A.ru(o,q)}return new A.lB(s?B.fL:p,q,o)}return q}, +cg(a,b,c){return b.a_j(this,c)}, +ca(a,b,c){return this.cg(a,b,c,t.z,t.z)}} +A.UC.prototype={ +cg(a,b,c){return b.a_v(this,c)}, +ca(a,b,c){return this.cg(a,b,c,t.z,t.z)}, +dX(a,b){var s=A.aND(this.b.qf(a),this.r) +B.b.E(s.d,this.d) +return s}, +i6(a){return this.dX(a,!1)}} +A.T1.prototype={ +cg(a,b,c){return b.a_t(this,c)}, +ca(a,b,c){return this.cg(a,b,c,t.z,t.z)}} +A.B4.prototype={ +cg(a,b,c){return b.a_c(this,c)}, +ca(a,b,c){return this.cg(a,b,c,t.z,t.z)}, +dX(a,b){var s=this +return new A.B4(s.b,s.c,s.d.dX(a,b),s.a)}, +i6(a){return this.dX(a,!1)}} +A.D7.prototype={ +cg(a,b,c){return b.a_i(this,c)}, +ca(a,b,c){return this.cg(a,b,c,t.z,t.z)}, +dX(a,b){var s=this +return new A.D7(s.b,s.c.dX(a,b),s.d,s.e,s.a)}, +i6(a){return this.dX(a,!1)}} +A.x7.prototype={ +HH(a,b){var s,r=this.b,q=r.e,p=q==null?null:q.ZO(a,b) +q=r.f +s=q==null?null:q.Kx(a,b,B.cS) +if(s==null&&p==null)return null +r=r.z +return new A.lB(r==null?B.fL:r,p,s)}, +dX(a,b){var s=this.b +s=b?a.uG(s,this.a):s.qf(a) +return A.aMl(this.d,s)}, +i6(a){return this.dX(a,!1)}, +cg(a,b,c){return b.a_k(this,c)}, +ca(a,b,c){return this.cg(a,b,c,t.z,t.z)}} +A.vU.prototype={ +dX(a,b){var s=this,r=s.b +r=b?a.uG(r,s.a):r.qf(a) +return A.aKg(r,s.d,s.e)}, +i6(a){return this.dX(a,!1)}, +cg(a,b,c){return b.a_d(this,c)}, +ca(a,b,c){return this.cg(a,b,c,t.z,t.z)}} +A.UB.prototype={ +HH(a,b){var s,r=this.b,q=r.f,p=q==null?null:q.Kx(a,b,B.cS) +q=r.e +s=q==null?null:q.ZO(a,b) +if(p==null&&s==null)return null +r=r.z +return new A.lB(r==null?B.fL:r,s,p)}, +dX(a,b){var s=this.b,r=b?a.uG(s,this.a):s.qf(a) +return A.aNA(this.d,r)}, +i6(a){return this.dX(a,!1)}, +cg(a,b,c){return b.a_u(this,c)}, +ca(a,b,c){return this.cg(a,b,c,t.z,t.z)}} +A.Ps.prototype={ +dX(a,b){var s=this,r=s.b +r=b?a.uG(r,s.a):r.qf(a) +return A.aLl(s.d,s.e,r)}, +i6(a){return this.dX(a,!1)}, +cg(a,b,c){return b.a_h(this,c)}, +ca(a,b,c){return this.cg(a,b,c,t.z,t.z)}} +A.DU.prototype={ +cg(a,b,c){return b.a_l(this,c)}, +ca(a,b,c){return this.cg(a,b,c,t.z,t.z)}, +dX(a,b){var s=this +return new A.DU(s.b,s.c.dX(a,b),s.d,s.a)}, +i6(a){return this.dX(a,!1)}} +A.JU.prototype={} +A.kC.prototype={ +Ok(){var s,r,q=this,p=q.ax +for(s=q.c;s.q();){r=s.d +r.toString +if(r instanceof A.fI&&!r.r)++q.ax +else if(r instanceof A.h0)--q.ax +q.as=B.de +q.at=null +if(q.ax")),r=n.r;s.q();){q=s.b +if(q instanceof A.fI){if(n.a1M(q))continue +p=B.Tu.i(0,q.e) +if(p==null){if(!q.r)n.Ok()}else p.$2(n,!1)}else if(q instanceof A.h0)n.ap9(0,q) +else{if(!r.ga7(r))o=r.gO(r).a==="text"||r.gO(r).a==="tspan" +else o=!1 +if(o)if(q instanceof A.jN)n.N2(q.e) +else if(q instanceof A.pY)n.N2(q.gl(q))}}if(n.Q==null)throw A.c(A.Q("Invalid SVG data")) +n.f.d=!0}, +cX(a,b){var s=this.as.a.i(0,a) +return s==null?b:s}, +eo(a){return this.cX(a,null)}, +A1(a){var s="url(#"+A.h(this.as.b)+")" +if(s!=="url(#)"){this.f.akS(s,a) +return!0}return!1}, +q9(a,b){this.r.f_(0,new A.JU(a.e,b)) +this.A1(b)}, +al_(a){var s,r,q,p,o=this,n=B.vp.i(0,a.e) +if(n==null)return!1 +s=o.r +r=s.gO(s).b +s=n.$1(o) +s.toString +q=A.aMl(s,o.as) +o.A1(q) +s=o.f +p=s.gnr() +r.uA(q,o.as.y,s.gpg(),o.eo("mask"),p,s.x7(o),p) +return!0}, +a1M(a){if(a.e==="defs")if(!a.r){this.q9(a,A.ty(this.as,null,null)) +return!0}return this.al_(a)}, +ap9(a,b){var s=this.r,r=b.e +while(!0){if(r===s.gO(s).a)s.gO(s).toString +if(!!1)break +s.eF(0)}if(r===s.gO(s).a)s.eF(0) +this.ay=b +if(r==="text")this.ch=!1}, +auf(a){var s +if(a==null||a==="")return null +s=A.dX(a,this.a,!0) +if(s!=null)return s +a=B.d.fb(a.toLowerCase()) +s=$.b02.i(0,a) +if(s!=null)return s +throw A.c(A.Q("Could not parse font-size: "+a))}, +aul(a){if(a==null)return null +switch(a){case"none":return B.AV +case"underline":return B.Zk +case"overline":return B.Zm +case"line-through":return B.Zo}throw A.c(A.a3('Attribute value for text-decoration="'+a+'" is not supported'))}, +aum(a){if(a==null)return null +switch(a){case"solid":return B.AT +case"dashed":return B.Zg +case"dotted":return B.Ze +case"double":return B.Zd +case"wavy":return B.Zi}throw A.c(A.a3('Attribute value for text-decoration-style="'+a+'" is not supported'))}, +auk(a){switch(a){case"end":return 1 +case"middle":return 0.5 +case"start":return 0 +case"inherit":default:return null}}, +QX(a){var s +if(a==="100%"||a==="")return 1/0 +s=A.dX(a,this.a,!0) +return s==null?1/0:s}, +QY(){var s,r,q,p,o,n,m,l=this,k=l.eo("viewBox") +if(k==null)k="" +s=l.eo("width") +if(s==null)s="" +r=l.eo("height") +if(r==null)r="" +q=k==="" +if(q&&s===""&&r==="")throw A.c(A.Q("SVG did not specify dimensions\n\nThe SVG library looks for a `viewBox` or `width` and `height` attribute to determine the viewport boundary of the SVG. Note that these attributes, as with all SVG attributes, are case sensitive.\nDuring processing, the following attributes were found:\n "+l.as.a.k(0))) +if(q)return new A.a41(l.QX(s),l.QX(r),B.aL) +p=B.d.l9(k,A.c3("[ ,]+",!0,!1)) +if(p.length<4)throw A.c(A.Q("viewBox element must be 4 elements long")) +q=A.fp(p[2],!1) +q.toString +o=A.fp(p[3],!1) +o.toString +n=A.fp(p[0],!1) +n.toString +m=A.fp(p[1],!1) +m.toString +return new A.a41(q,o,B.aL.wL(-n,-m))}, +Yt(){switch(this.eo("spreadMethod")){case"pad":return B.m4 +case"repeat":return B.a3K +case"reflect":return B.a3L}return null}, +Yr(){switch(this.eo("gradientUnits")){case"userSpaceOnUse":return B.NC +case"objectBoundingBox":return B.kn}return null}, +ag5(a,b){switch(a){case"butt":return B.Yp +case"round":return B.Yq +case"square":return B.Yr +default:return null}}, +ag9(a,b){switch(a){case"miter":return B.Ys +case"bevel":return B.Yu +case"round":return B.Yt +default:return null}}, +ag7(a){var s,r,q,p,o,n,m +if(a==null||a==="")return null +else if(a==="none")return B.Qn +s=J.aJt(a,A.c3("[ ,]+",!0,!1)) +r=A.a([],t.n) +for(q=s.length,p=this.a,o=!1,n=0;n>>0)}}if(B.d.bz(a.toLowerCase(),"rgba")){p=t.a4 +n=A.V(new A.R(A.a(B.d.P(a,J.aF1(a,"(")+1,B.d.cS(a,")")).split(","),t.s),new A.apH(),p),!0,p.h("af.E")) +p=A.fp(B.b.eF(n),!1) +p.toString +m=A.S(n).h("R<1,l>") +l=A.V(new A.R(n,new A.apI(),m),!0,m.h("af.E")) +return A.vH(l[0],l[1],l[2],p)}if(B.d.bz(a.toLowerCase(),"hsl")){p=t.OL +k=A.V(new A.R(A.a(B.d.P(a,J.aF1(a,"(")+1,B.d.cS(a,")")).split(","),t.s),new A.apJ(),p),!0,p.h("af.E")) +j=B.c.bF(k[0]/360,1) +p=k[1] +i=k[2]/100 +h=k.length>3?k[3]:255 +l=A.a([0,0,0],t.n) +if(j<0.16666666666666666){l[0]=1 +l[1]=j*6}else if(j<0.3333333333333333){l[0]=2-j*6 +l[1]=1}else if(j<0.5){l[1]=1 +l[2]=j*6-2}else if(j<0.6666666666666666){l[1]=4-j*6 +l[2]=1}else{m=j*6 +if(j<0.8333333333333334){l[0]=m-4 +l[2]=1}else{l[0]=1 +l[2]=6-m}}m=t.bK +l=A.V(new A.R(l,new A.apK(p/100),m),!0,m.h("af.E")) +p=A.S(l).h("R<1,z>") +l=i<0.5?A.V(new A.R(l,new A.apL(i),p),!0,p.h("af.E")):A.V(new A.R(l,new A.apM(i),p),!0,p.h("af.E")) +p=A.S(l).h("R<1,z>") +l=A.V(new A.R(l,new A.apN(),p),!0,p.h("af.E")) +return A.aK1(h,J.aF2(l[0]),J.aF2(l[1]),J.aF2(l[2]))}if(B.d.bz(a.toLowerCase(),"rgb")){p=t.OL +l=A.V(new A.R(A.a(B.d.P(a,J.aF1(a,"(")+1,B.d.cS(a,")")).split(","),t.s),new A.apO(),p),!0,p.h("af.E")) +g=l.length>3?l[3]:255 +return A.aK1(g,l[0],l[1],l[2])}f=B.SQ.i(0,a) +if(f!=null)return f +return null}, +a8L(a){var s,r,q,p,o,n,m,l,k,j=t.N,i=A.A(j,j) +for(j=J.ap(a);j.q();){s=j.gJ(j) +r=B.d.fb(s.b) +s=s.a +q=B.d.cS(s,":") +p=q>0 +if((p?B.d.bL(s,q+1):s)==="style")for(s=r.split(";"),p=s.length,o=0;o>>24 +if((r==null?255:r)!==255){r=o.a +q=(r>>>24)/255 +o=A.vH(r>>>16&255,r>>>8&255,r&255,1)}r=l==="none"?B.fR:new A.mC(!1,o) +return new A.yb(n.f,r,q,m,m)}} +A.apH.prototype={ +$1(a){return B.d.fb(a)}, +$S:66} +A.apI.prototype={ +$1(a){return A.ir(a,null)}, +$S:85} +A.apJ.prototype={ +$1(a){var s +a=B.d.fb(a) +if(B.d.fs(a,"%"))a=B.d.P(a,0,a.length-1) +if(B.d.p(a,".")){s=A.fp(a,!1) +s.toString +return B.c.an(s*2.55)}return A.ir(a,null)}, +$S:85} +A.apK.prototype={ +$1(a){return a+(1-this.a)*(0.5-a)}, +$S:2} +A.apL.prototype={ +$1(a){return this.a*2*a}, +$S:2} +A.apM.prototype={ +$1(a){return this.a*2*(1-a)+2*a-1}, +$S:2} +A.apN.prototype={ +$1(a){return a*255}, +$S:2} +A.apO.prototype={ +$1(a){var s +a=B.d.fb(a) +if(B.d.fs(a,"%")){s=A.fp(B.d.P(a,0,a.length-1),!1) +s.toString +return B.c.an(s*2.55)}return A.ir(a,null)}, +$S:85} +A.a1f.prototype={ +a_W(a){return this.a.i(0,a)}, +a_U(a){var s,r,q,p={},o=this.c.i(0,a) +if(o==null)return A.a([],t.hc) +s=A.a([],t.Sd) +p.a=null +r=new A.azL(p,s) +for(q=J.ap(o);q.q();)r.$1(q.gJ(q)) +q=t.OW +return A.V(new A.R(s,new A.azK(),q),!1,q.h("af.E"))}, +x7(a){var s,r +if(a.eo("fill")!=null){s=a.eo("fill") +s.toString +if(B.d.bz(s,"url")&&a.z.p(0,s))return s}if(a.eo("stroke")!=null){r=a.eo("stroke") +r.toString +if(B.d.bz(r,"url")&&a.z.p(0,r))return r}return null}, +akR(a,b){J.eo(this.e.bm(0,a,new A.azI()),b)}, +U5(a,b){var s,r,q=this.b,p=a.a +if(q.ai(0,p))return +q.n(0,p,a) +if(b!=null){b="url("+b+")" +s=q.i(0,b) +if(s!=null)q.n(0,p,a.Hj(s)) +else this.akR(b,a)}else{p=this.e.C(0,p) +p=J.ap(p==null?A.a([],t.AB):p) +for(;p.q();){r=p.gJ(p) +q.n(0,r.a,r.Hj(a))}}}, +akP(a,b){this.c.bm(0,a,new A.azH(b))}, +akS(a,b){this.a.bm(0,a,new A.azJ(b))}} +A.azL.prototype={ +$1(a){var s,r,q,p,o,n,m=this +if(a instanceof A.x7){s=a.d +r=A.a([],t.H9) +q=new A.iU(r,$) +B.b.E(r,s.a) +q.b=s.b +s=a.b.x +if(s==null)s=B.bI +q.b=s +r=m.a +p=r.a +o=p==null +if(!o){n=p.b +n===$&&A.b() +n=s!==n +s=n}else s=!1 +if(s){r.a=q +m.b.push(q)}else if(o){r.a=q +m.b.push(q)}else{s=q.ZL(!1) +B.b.E(p.a,s.a)}}else if(a instanceof A.vU){s=a.d +m.$1(a.e.$1(s))}else if(a instanceof A.x4)B.b.aa(a.d,m)}, +$S:667} +A.azK.prototype={ +$1(a){return a.pd()}, +$S:668} +A.azI.prototype={ +$0(){return A.a([],t.AB)}, +$S:669} +A.azH.prototype={ +$0(){return this.a}, +$S:670} +A.azJ.prototype={ +$0(){return this.a}, +$S:671} +A.a41.prototype={} +A.ya.prototype={ +gar3(){var s=this.a +s=s.gd5(s) +return s.hJ(s,new A.apB())}, +uG(a3,a4){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0=this,a1=null,a2=t.N +a2=A.p6(A.aGk(a3.gar3(),a2,a2),a2,a2) +a2.E(0,a0.a) +s=a2.i(0,"id") +r=a2.i(0,"href") +q=a4==null?a0.r:a4 +p=a0.d.E3(a3.d) +o=a0.e +if(o==null)o=a1 +else{n=a3.e +m=o.a +l=o.b +k=n==null +l=l.E3(k?a1:n.b) +j=o.c +if(j==null)j=k?a1:n.c +i=o.d +if(i==null)i=k?a1:n.d +h=o.e +if(h==null)h=k?a1:n.e +g=o.f +if(g==null)g=k?a1:n.f +f=o.r +if(f==null)f=k?a1:n.r +e=o.w +if(e==null)e=k?a1:n.w +d=o.x +if(d==null)d=k?a1:n.x +c=o.y +if(c==null)c=k?a1:n.y +o=o.z +if(o==null)o=k?a1:n.z +o=new A.FW(m,l,j,i,h,g,f,e,d,c,o)}if(o==null)o=a3.e +n=a0.f +if(n==null)n=a1 +else{m=a3.f +l=n.a +k=n.b +j=m==null +k=k.E3(j?a1:m.b) +i=n.d +if(i==null)i=j?a1:m.d +h=n.e +if(h==null)h=j?a1:m.e +n=n.c +if(n==null)n=j?a1:m.c +h=new A.yb(l,k,n,i,h) +n=h}if(n==null)n=a3.f +m=a0.w +if(m==null)m=a3.w +l=a0.x +if(l==null)l=a3.x +k=a0.y +if(k==null)k=a3.y +j=a0.z +if(j==null)j=a3.z +i=a0.Q +if(i==null)i=a3.Q +h=a0.as +if(h==null)h=a3.as +g=a0.at +if(g==null)g=a3.at +f=a0.ax +if(f==null)f=a3.ax +e=a0.ay +if(e==null)e=a3.ay +d=a0.ch +if(d==null)d=a3.ch +c=a0.db +if(c==null)c=a3.db +b=a0.cx +if(b==null)b=a3.cx +a=a0.CW +if(a==null)a=a3.CW +return A.aNn(j,k,l,p,a0.dy,a0.fr,n,m,i,g,h,b,r,s,a2,o,c,f,d,e,q,a,a0.cy,a0.dx)}, +qf(a){return this.uG(a,null)}, +ghf(a){return this.as}} +A.apB.prototype={ +$1(a){return B.Xg.p(0,a.a)}, +$S:228} +A.BC.prototype={ +qq(a){if(this.b)return this.a*a +return this.a}, +gt(a){return A.N(this.a,this.b,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a,b){if(b==null)return!1 +return b instanceof A.BC&&b.b===this.b&&b.a===this.a}} +A.FW.prototype={ +ZO(a,b){var s,r,q=this,p=null,o=q.b +if(!o.a)s=o.b==null&&q.y==null&&q.c==null||q.r===0 +else s=!0 +if(s)return p +if(q.y===!0)return new A.FO(B.cS,p,q.e,q.d,q.f,q.r) +s=q.c +if(s!=null){s=t.Mm.a(q.a.b.i(0,s)) +r=s==null?p:s.He(a,b) +if(r==null)return p}else r=p +o=o.b +o.toString +s=q.z +if(s==null)s=1 +o=o.a +s=A.vH(o>>>16&255,o>>>8&255,o&255,s) +o=b.a0v(q.r) +return new A.FO(s,r,q.e,q.d,q.f,o)}} +A.yb.prototype={ +Kx(a,b,c){var s,r,q,p=this,o=null,n=p.b +if(n.a)return o +n=n.b +if(n==null)s=o +else{r=p.c +if(r==null)r=1 +n=n.a +r=A.vH(n>>>16&255,n>>>8&255,n&255,r) +s=r}if(s==null)if(c==null)s=o +else{n=p.c +if(n==null)n=1 +r=c.a +n=A.vH(r>>>16&255,r>>>8&255,r&255,n) +s=n}if(s==null)return o +if(p.e===!0)return new A.ru(s,o) +n=p.d +if(n!=null){n=t.Mm.a(p.a.b.i(0,n)) +q=n==null?o:n.He(a,b) +if(q==null)return o}else q=o +return new A.ru(s,q)}, +avr(a,b){return this.Kx(a,b,null)}, +k(a){var s=this +return"SvgFillAttributes(definitions: "+s.a.k(0)+", color: "+s.b.k(0)+", shaderId: "+A.h(s.d)+", hasPattern: "+A.h(s.e)+", oapctiy: "+A.h(s.c)+")"}} +A.mC.prototype={ +E3(a){var s,r=this +if(a==null||r.a)return r +if(a.a&&r.b==null)return B.fR +s=r.b +return new A.mC(!1,s==null?a.b:s)}, +k(a){var s +if(this.a)s='"none"' +else{s=this.b +s=s==null?null:s.k(0) +if(s==null)s="null"}return s}} +A.am9.prototype={ +a_c(a,b){var s,r=a.mG(b),q=A.a([],t.hc) +for(s=J.ap(a.b.$1(a.c));s.q();)q.push(s.gJ(s).b0(r)) +if(q.length===0)return a.d.ca(0,this,b) +return new A.SI(q,a.d.ca(0,this,b))}, +a_i(a,b){var s,r=a.e.$1(a.b) +if(r==null)return a.c.ca(0,this,b) +s=a.c.ca(0,this,b) +return new A.SJ(r.ca(0,this,a.mG(b)),s,a.d)}, +a_j(b4,b5){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,b0=null,b1=b4.mG(b5),b2=b4.anz(),b3=t.f2 +if(b2==null){b3=A.a([],b3) +for(s=b4.d,r=s.length,q=b4.b,p=0;p0){f=Math.sqrt(g+1) +s=a1.a +s[3]=f*0.5 +f=0.5/f +s[0]=(i[5]-i[7])*f +s[1]=(i[6]-i[2])*f +s[2]=(i[1]-i[3])*f}else{if(s1&&a[0]==="#"){if(s>2){s=a[1] +s=s==="x"||s==="X"}else s=!1 +if(s)return this.Ob(B.d.bL(a,2),16) +else return this.Ob(B.d.bL(a,1),10)}else return B.Tk.i(0,a)}, +Ob(a,b){var s=A.aGI(a,b) +if(s==null||s<0||1114111");o.a>s;){q=new A.aX(o,r) +p=q.gab(q) +if(!p.q())A.T(A.cm()) +o.C(0,p.gJ(p))}}o=o.i(0,b) +o.toString +return o}} +A.yF.prototype={ +aZ(a){var s,r=a.a,q=a.b,p=r.length,o=q") +return null}, +gt(a){return A.N(B.a5r,this.e,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a,b){if(b==null)return!1 +return b instanceof A.jN&&b.e===this.e}} +A.kM.prototype={ +mA(a,b){var s=b.a +s.D(0,"") +return null}, +gt(a){return A.N(B.a5s,this.e,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a,b){if(b==null)return!1 +return b instanceof A.kM&&b.e===this.e}} +A.kN.prototype={ +mA(a,b){var s=b.a +s.D(0,"") +return null}, +gt(a){return A.N(B.a5t,B.hx.eD(0,this.e),B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a,b){if(b==null)return!1 +return b instanceof A.kN&&B.hx.e8(b.e,this.e)}} +A.kO.prototype={ +mA(a,b){var s,r,q=b.a +q.D(0,"") +return null}, +gt(a){return A.N(B.a5u,this.e,this.f,this.r,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a,b){if(b==null)return!1 +return b instanceof A.kO&&this.e===b.e&&J.d(this.f,b.f)&&this.r==b.r}} +A.h0.prototype={ +mA(a,b){var s=b.a +s.D(0,"") +return null}, +gt(a){return A.N(B.Bq,this.e,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a,b){if(b==null)return!1 +return b instanceof A.h0&&b.e===this.e}, +glN(a){return this.e}} +A.a4b.prototype={} +A.kP.prototype={ +mA(a,b){var s,r=b.a +r.D(0,"") +return null}, +gt(a){return A.N(B.a5v,this.f,this.e,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a,b){if(b==null)return!1 +return b instanceof A.kP&&b.e===this.e&&b.f===this.f}} +A.fI.prototype={ +mA(a,b){var s=b.a +s.D(0,"<") +s.D(0,this.e) +b.U2(this.f) +if(this.r)s.D(0,"/>") +else s.D(0,">") +return null}, +gt(a){return A.N(B.Bq,this.e,this.r,B.hx.eD(0,this.f),B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a,b){if(b==null)return!1 +return b instanceof A.fI&&b.e===this.e&&b.r===this.r&&B.hx.e8(b.f,this.f)}, +glN(a){return this.e}} +A.a4j.prototype={} +A.pY.prototype={ +gl(a){var s,r=this,q=r.r +if(q===$){s=r.f.eA(0,r.e) +r.r!==$&&A.ay() +r.r=s +q=s}return q}, +mA(a,b){b.a.D(0,A.a5N(this.gl(this),$.aUb(),A.b5W(),null)) +return null}, +gt(a){return A.N(B.a5w,this.gl(this),B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a,b){if(b==null)return!1 +return b instanceof A.pY&&b.gl(b)===this.gl(this)}, +$iGL:1} +A.Vt.prototype={ +gab(a){var s=A.a([],t.Ec),r=A.a([],t.po) +return new A.asc($.aUn().i(0,this.b),new A.asb(!1,!1,!1,!1,!1,s,r),new A.bm("",this.a,0))}} +A.asc.prototype={ +gJ(a){var s=this.d +s.toString +return s}, +q(){var s,r,q,p,o=this,n=o.c +if(n!=null){s=o.a.aZ(n) +if(s instanceof A.cd){o.c=s +r=s.e +o.d=r +o.b.alc(r,n.a,n.b,s.b) +return!0}else{r=n.b +q=n.a +if(r"),A.bZ("/>")],t.sb),A.b67(),q),q,q,p,q,q),new A.ast(),q,q,p,q,q,t.a1)}, +alC(a){return A.aGH(new A.aK(this.galq(),B.t,t.vq),0,9007199254740991,t.wG)}, +alr(){var s=this,r=t.Q,q=t.N,p=t._0 +return A.tR(A.l_(new A.aK(s.gti(),B.t,r),new A.aK(s.gk5(),B.t,r),new A.aK(s.gals(),B.t,t.VJ),q,q,p),new A.ash(s),q,q,p,t.wG)}, +alu(){var s=this.gtj(),r=t.Q,q=t.N,p=t._0 +return new A.iT(B.Wf,A.akL(A.aEx(new A.aK(s,B.t,r),A.bZ("="),new A.aK(s,B.t,r),new A.aK(this.gnY(),B.t,t.VJ),q,q,q,p),new A.asd(),q,q,q,p,p),t.Tq)}, +alv(){var s=t.VJ +return A.os(A.a([new A.aK(this.galw(),B.t,s),new A.aK(this.galA(),B.t,s),new A.aK(this.galy(),B.t,s)],t.m5),null,t._0)}, +alx(){var s=t.N +return A.tR(A.l_(A.bZ('"'),new A.yF('"',0),A.bZ('"'),s,s,s),new A.ase(),s,s,s,t._0)}, +alB(){var s=t.N +return A.tR(A.l_(A.bZ("'"),new A.yF("'",0),A.bZ("'"),s,s,s),new A.asg(),s,s,s,t._0)}, +alz(){return A.p8(new A.aK(this.gk5(),B.t,t.Q),new A.asf(),!1,t.N,t._0)}, +ap8(a){var s=t.Q,r=t.N +return A.akL(A.aEx(A.bZ(""),r,r,r,r),new A.asq(),r,r,r,r,t.Gn)}, +amx(){var s=t.N +return A.tR(A.l_(A.bZ("" expected',new A.hY(A.bZ("-->"),0,9007199254740991,new A.je("input expected"),t.Po),t.Ii),A.bZ("-->"),s,s,s),new A.ask(),s,s,s,t.mL)}, +am8(){var s=t.N +return A.tR(A.l_(A.bZ("" expected',new A.hY(A.bZ("]]>"),0,9007199254740991,new A.je("input expected"),t.Po),t.Ii),A.bZ("]]>"),s,s,s),new A.asi(),s,s,s,t.cL)}, +anP(){var s=t.N,r=t.d0 +return A.akL(A.aEx(A.bZ(""),s,r,s,s),new A.asl(),s,r,s,s,t.UR)}, +auz(){var s=t.Q,r=t.N +return A.akL(A.aEx(A.bZ("" expected',new A.hY(A.bZ("?>"),0,9007199254740991,new A.je("input expected"),t.Po),t.Ii),r,r),new A.asr(),r,r,r),t.mA),A.bZ("?>"),r,r,r,r),new A.ass(),r,r,r,r,t.Mw)}, +aoa(){var s=this,r=A.bZ(""),t.mM),new A.asp(),n,n,n,t.dd,n,t.ob,n,n,t.RN)}, +aoi(){var s=t.r0 +return A.os(A.a([new A.aK(this.gaol(),B.t,s),new A.aK(this.gaoj(),B.t,s)],t.Gv),null,t.aD)}, +aom(){var s=t.N,r=t._0 +return A.tR(A.l_(A.bZ("SYSTEM"),new A.aK(this.gti(),B.t,t.Q),new A.aK(this.gnY(),B.t,t.VJ),s,s,r),new A.asn(),s,s,r,t.aD)}, +aok(){var s=this.gti(),r=t.Q,q=this.gnY(),p=t.VJ,o=t.N,n=t._0 +return A.aMG(A.aRA(A.bZ("PUBLIC"),new A.aK(s,B.t,r),new A.aK(q,B.t,p),new A.aK(s,B.t,r),new A.aK(q,B.t,p),o,o,n,o,n),new A.asm(),o,o,n,o,n,t.aD)}, +aoo(){var s,r=this,q=A.bZ("["),p=t.lk +p=A.os(A.a([new A.aK(r.gaod(),B.t,p),new A.aK(r.gaob(),B.t,p),new A.aK(r.gaof(),B.t,p),new A.aK(r.gaop(),B.t,p),new A.aK(r.gYF(),B.t,t.hC),new A.aK(r.gV3(),B.t,t.ZV),new A.aK(r.gaor(),B.t,p),new A.je("input expected")],t.Vz),null,t.z) +s=t.N +return A.tR(A.l_(q,new A.kc('"]" expected',new A.hY(A.bZ("]"),0,9007199254740991,p,t.mT),t.vo),A.bZ("]"),s,s,s),new A.aso(),s,s,s,s)}, +aoe(){var s=A.bZ(""),0,9007199254740991,r,t.xj),A.bZ(">"),q,t.UX,q)}, +aoc(){var s=A.bZ(""),0,9007199254740991,r,t.xj),A.bZ(">"),q,t.UX,q)}, +aog(){var s=A.bZ(""),0,9007199254740991,r,t.xj),A.bZ(">"),q,t.UX,q)}, +aoq(){var s=A.bZ(""),0,9007199254740991,r,t.xj),A.bZ(">"),q,t.UX,q)}, +aos(){var s=t.N +return A.l_(A.bZ("%"),new A.aK(this.gk5(),B.t,t.Q),A.bZ(";"),s,s,s)}, +a1D(){var s="whitespace expected" +return A.aML(new A.uj(B.ne,s),1,9007199254740991,s)}, +a1E(){var s="whitespace expected" +return A.aML(new A.uj(B.ne,s),0,9007199254740991,s)}, +at2(){var s=t.Q,r=t.N +return new A.kc("name expected",A.aRz(new A.aK(this.gat0(),B.t,s),A.aGH(new A.aK(this.gasZ(),B.t,s),0,9007199254740991,r),r,t.yp),t.TJ)}, +at1(){return A.aRl(":A-Z_a-z\xc0-\xd6\xd8-\xf6\xf8-\u02ff\u0370-\u037d\u037f-\u1fff\u200c-\u200d\u2070-\u218f\u2c00-\u2fef\u3001-\ud7ff\uf900-\ufdcf\ufdf0-\ufffd",null)}, +at_(){return A.aRl(":A-Z_a-z\xc0-\xd6\xd8-\xf6\xf8-\u02ff\u0370-\u037d\u037f-\u1fff\u200c-\u200d\u2070-\u218f\u2c00-\u2fef\u3001-\ud7ff\uf900-\ufdcf\ufdf0-\ufffd-.0-9\xb7\u0300-\u036f\u203f-\u2040",null)}} +A.asj.prototype={ +$1(a){var s=null +return new A.pY(a,this.a.a,s,s,s,s)}, +$S:688} +A.ast.prototype={ +$5(a,b,c,d,e){var s=null +return new A.fI(b,c,e==="/>",s,s,s,s)}, +$S:689} +A.ash.prototype={ +$3(a,b,c){return new A.eY(b,this.a.a.eA(0,c.a),c.b,null)}, +$S:690} +A.asd.prototype={ +$4(a,b,c,d){return d}, +$S:691} +A.ase.prototype={ +$3(a,b,c){return new A.dj(b,B.ml)}, +$S:185} +A.asg.prototype={ +$3(a,b,c){return new A.dj(b,B.a5q)}, +$S:185} +A.asf.prototype={ +$1(a){return new A.dj(a,B.ml)}, +$S:693} +A.asq.prototype={ +$4(a,b,c,d){var s=null +return new A.h0(b,s,s,s,s)}, +$S:694} +A.ask.prototype={ +$3(a,b,c){var s=null +return new A.kM(b,s,s,s,s)}, +$S:695} +A.asi.prototype={ +$3(a,b,c){var s=null +return new A.jN(b,s,s,s,s)}, +$S:696} +A.asl.prototype={ +$4(a,b,c,d){var s=null +return new A.kN(b,s,s,s,s)}, +$S:697} +A.asr.prototype={ +$2(a,b){return b}, +$S:235} +A.ass.prototype={ +$4(a,b,c,d){var s=null +return new A.kP(b,c,s,s,s,s)}, +$S:699} +A.asp.prototype={ +$8(a,b,c,d,e,f,g,h){var s=null +return new A.kO(c,d,f,s,s,s,s)}, +$S:700} +A.asn.prototype={ +$3(a,b,c){return new A.eu(null,null,c.a,c.b)}, +$S:701} +A.asm.prototype={ +$5(a,b,c,d,e){return new A.eu(c.a,c.b,e.a,e.b)}, +$S:702} +A.aso.prototype={ +$3(a,b,c){return b}, +$S:703} +A.aDJ.prototype={ +$1(a){return A.b7G(new A.aK(new A.Vu(a).gapl(),B.t,t.hq),t.l1)}, +$S:704} +A.Nf.prototype={ +D(a,b){return this.a.$1(b)}, +aA(a){}} +A.eY.prototype={ +gt(a){return A.N(this.a,this.b,this.c,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a,B.a)}, +j(a,b){if(b==null)return!1 +return b instanceof A.eY&&b.a===this.a&&b.b===this.b&&b.c===this.c}, +glN(a){return this.a}} +A.a4c.prototype={} +A.a4d.prototype={} +A.GK.prototype={ +gJt(a){var s=this,r=B.d.cS(s.glN(s),":") +return r>0?B.d.bL(s.glN(s),r+1):s.glN(s)}} +A.Vv.prototype={ +aw1(a){return a.mA(0,this)}} +A.aEg.prototype={ +$0(){return A.b6Y()}, +$S:0} +A.aEf.prototype={ +$0(){var s,r=$.aUx(),q=$.aIO(),p=new A.aiZ(),o=$.a5T() +o.n(0,p,q) +A.aMo(p,q,!1) +$.aYQ=p +q=self +q=q.window +p=$.aIT() +s=new A.arN(q) +o.n(0,s,p) +q=q.navigator +s.b=J.vb(q.userAgent,"Safari")&&!J.vb(q.userAgent,"Chrome") +A.aMo(s,p,!0) +$.b0J=s +$.aUt() +$.aEL().Kf("__url_launcher::link",A.b6V(),!1) +$.aRp=r.gaq9()}, +$S:0};(function aliases(){var s=A.a1z.prototype +s.a50=s.a0 +s.a56=s.bH +s.a54=s.b_ +s.a59=s.au +s.a57=s.ei +s.a55=s.lY +s.a58=s.a2 +s.a53=s.ia +s.a52=s.o5 +s.a51=s.iS +s=A.vN.prototype +s.a2b=s.kS +s=A.Hz.prototype +s.MA=s.bI +s=A.wp.prototype +s.a2q=s.EE +s=A.dJ.prototype +s.a34=s.Cj +s.Md=s.bk +s.ts=s.nW +s.Mh=s.bw +s.Mg=s.kY +s.Me=s.j_ +s.Mf=s.oZ +s=A.ee.prototype +s.a31=s.oZ +s.a32=s.jf +s.lc=s.bw +s.a33=s.kY +s.pz=s.j_ +s=A.RN.prototype +s.ld=s.eV +s.tt=s.m +s=A.Br.prototype +s.DA=s.ri +s.a2h=s.KM +s.a2f=s.ie +s.a2g=s.Is +s=J.wz.prototype +s.a2x=s.k +s.a2w=s.G +s=J.p_.prototype +s.a2G=s.k +s=A.fx.prototype +s.a2y=s.Xw +s.a2z=s.Xx +s.a2B=s.Xz +s.a2A=s.Xy +s=A.q0.prototype +s.a4m=s.xO +s=A.nP.prototype +s.a4u=s.pF +s.a4v=s.OU +s.a4x=s.S1 +s.a4w=s.lk +s=A.B.prototype +s.M8=s.bC +s=A.bl.prototype +s.a2e=s.apZ +s=A.JS.prototype +s.a5l=s.aA +s=A.n.prototype +s.DD=s.hJ +s=A.I.prototype +s.xG=s.j +s.c4=s.k +s=A.m.prototype +s.a25=s.j +s.a26=s.k +s=A.Ar.prototype +s.Dy=s.ee +s.a1X=s.aoE +s.a1Y=s.Wg +s=A.GU.prototype +s.a4j=s.m +s=A.AB.prototype +s.xC=s.ee +s=A.xv.prototype +s.tu=s.rP +s.a3c=s.ah +s.a3d=s.ad +s=A.cv.prototype +s.Dv=s.Cr +s=A.DR.prototype +s.a30=s.a2 +s=A.Ad.prototype +s.Dw=s.m +s=A.KG.prototype +s.a5G=s.m +s=A.KH.prototype +s.a5H=s.m +s=A.KI.prototype +s.a5I=s.m +s=A.KS.prototype +s.a5P=s.ah +s.a5Q=s.ad +s=A.Mk.prototype +s.a2_=s.hg +s.a20=s.oF +s.a21=s.KI +s=A.f3.prototype +s.LW=s.Z +s.LX=s.K +s.eJ=s.m +s.xE=s.a6 +s=A.ca.prototype +s.xL=s.sl +s=A.aq.prototype +s.a2i=s.dd +s=A.k5.prototype +s.a2j=s.dd +s=A.wl.prototype +s.a2o=s.vM +s.a2n=s.ao3 +s=A.i0.prototype +s.a2H=s.il +s=A.dq.prototype +s.a2p=s.H4 +s.pw=s.il +s.M4=s.m +s=A.DG.prototype +s.xH=s.i4 +s.Mb=s.re +s.Mc=s.U +s.mi=s.m +s.a2X=s.xy +s=A.xj.prototype +s.a35=s.i4 +s.Mi=s.i3 +s.a36=s.fU +s=A.ic.prototype +s.a48=s.il +s=A.JX.prototype +s.a5m=s.ik +s.a5n=s.fU +s=A.GZ.prototype +s.a4k=s.i4 +s.a4l=s.m +s=A.KB.prototype +s.a5B=s.m +s=A.KD.prototype +s.a5C=s.m +s=A.KE.prototype +s.a5E=s.aB +s.a5D=s.m +s=A.HI.prototype +s.a4r=s.m +s=A.KL.prototype +s.a5M=s.aB +s.a5L=s.ez +s=A.mW.prototype +s.mh=s.m +s=A.L0.prototype +s.a64=s.m +s=A.L1.prototype +s.a65=s.m +s=A.KF.prototype +s.a5F=s.m +s=A.Jf.prototype +s.a5a=s.m +s=A.Jg.prototype +s.a5b=s.m +s=A.Jh.prototype +s.a5d=s.aO +s.a5c=s.bx +s.a5e=s.m +s=A.KJ.prototype +s.a5J=s.m +s=A.KT.prototype +s.a5R=s.ah +s.a5S=s.ad +s=A.KV.prototype +s.a5V=s.ah +s.a5W=s.ad +s=A.KZ.prototype +s.a62=s.m +s=A.KM.prototype +s.a5N=s.m +s=A.KN.prototype +s.a5O=s.m +s=A.Gt.prototype +s.a4a=s.m +s=A.Ka.prototype +s.a5p=s.m +s=A.AH.prototype +s.a23=s.Du +s.a22=s.D +s=A.cs.prototype +s.Mv=s.dF +s.Mw=s.dA +s=A.ed.prototype +s.px=s.dF +s.py=s.dA +s=A.iA.prototype +s.LZ=s.dF +s.M_=s.dA +s=A.Ms.prototype +s.LV=s.m +s=A.de.prototype +s.M1=s.D +s=A.WB.prototype +s.My=s.m +s=A.rN.prototype +s.a2s=s.Z +s.a2t=s.K +s.a2r=s.yE +s=A.hV.prototype +s.M6=s.j +s=A.i8.prototype +s.a4_=s.j +s=A.FI.prototype +s.a44=s.eG +s=A.xy.prototype +s.a3B=s.IR +s.a3D=s.IZ +s.a3C=s.IU +s.a3A=s.Io +s=A.az.prototype +s.a24=s.j +s=A.ha.prototype +s.xD=s.k +s=A.H.prototype +s.xJ=s.h6 +s.nE=s.a8 +s.DG=s.bJ +s.a3f=s.rC +s.le=s.cD +s.a3e=s.dj +s=A.IU.prototype +s.a4I=s.ah +s.a4J=s.ad +s=A.IV.prototype +s.a4K=s.ah +s.a4L=s.ad +s=A.IW.prototype +s.a4M=s.ah +s.a4N=s.ad +s=A.IX.prototype +s.a4O=s.m +s=A.eb.prototype +s.a2C=s.tT +s.M7=s.m +s.a2F=s.Cz +s.a2D=s.ah +s.a2E=s.ad +s=A.eN.prototype +s.mg=s.hE +s.a29=s.ah +s.a2a=s.ad +s=A.kq.prototype +s.a2W=s.hE +s=A.d6.prototype +s.xI=s.ad +s=A.r.prototype +s.eK=s.m +s.Mp=s.iJ +s.dg=s.ah +s.dh=s.ad +s.a3j=s.a8 +s.a3i=s.bJ +s.a3k=s.ag +s.a3g=s.dj +s.a3l=s.xg +s.hs=s.f3 +s.DH=s.o4 +s.tv=s.fX +s.Mq=s.qk +s.a3h=s.j7 +s.a3n=s.dd +s.a3m=s.hQ +s=A.aT.prototype +s.Mt=s.fT +s=A.at.prototype +s.Dz=s.J9 +s.a2d=s.C +s.a2c=s.wc +s.LY=s.fT +s.xF=s.b1 +s=A.px.prototype +s.DF=s.tC +s=A.hE.prototype +s.a4z=s.zH +s=A.J2.prototype +s.a4P=s.ah +s.a4Q=s.ad +s=A.K1.prototype +s.a5o=s.ad +s=A.fF.prototype +s.DK=s.bp +s.DJ=s.bo +s.a3r=s.c5 +s.tx=s.bA +s.tw=s.cE +s.a3q=s.dj +s.iC=s.am +s=A.EE.prototype +s.a3s=s.cD +s=A.J4.prototype +s.tA=s.ah +s.nG=s.ad +s=A.J5.prototype +s.a4R=s.h6 +s=A.tU.prototype +s.a3u=s.am +s.a3t=s.cE +s=A.J7.prototype +s.MB=s.ah +s.MC=s.ad +s=A.FD.prototype +s.a40=s.k +s=A.hx.prototype +s.a41=s.k +s=A.pz.prototype +s.a3w=s.U6 +s.a3y=s.rj +s.a3x=s.lq +s=A.J8.prototype +s.a4S=s.ah +s.a4T=s.ad +s=A.EH.prototype +s.a3v=s.bA +s=A.tV.prototype +s.a3z=s.K2 +s=A.md.prototype +s.a4W=s.ah +s.a4X=s.ad +s=A.kL.prototype +s.a4h=s.wd +s.a4g=s.dZ +s=A.fi.prototype +s.a3R=s.IO +s=A.yn.prototype +s.Mx=s.m +s=A.LP.prototype +s.LU=s.ne +s=A.xQ.prototype +s.a3Y=s.vH +s.a3Z=s.n6 +s=A.tp.prototype +s.a2I=s.mq +s=A.bk.prototype +s.LT=s.fn +s.a1U=s.lE +s.a1T=s.H3 +s.a1V=s.Cc +s=A.qB.prototype +s.Dx=s.H +s=A.eH.prototype +s.a4i=s.Am +s=A.Ja.prototype +s.MD=s.ed +s=A.Kr.prototype +s.a5q=s.hg +s.a5r=s.KI +s=A.Ks.prototype +s.a5s=s.hg +s.a5t=s.oF +s=A.Kt.prototype +s.a5u=s.hg +s.a5v=s.oF +s=A.Ku.prototype +s.a5x=s.hg +s.a5w=s.vH +s=A.Kv.prototype +s.a5y=s.hg +s=A.Kw.prototype +s.a5z=s.hg +s.a5A=s.oF +s=A.HL.prototype +s.a4s=s.aB +s=A.HM.prototype +s.a4t=s.m +s=A.OU.prototype +s.pv=s.arI +s.a2m=s.HB +s=A.a9.prototype +s.aR=s.aB +s.bb=s.aO +s.tz=s.ez +s.dq=s.bY +s.aN=s.m +s.dr=s.bx +s=A.av.prototype +s.a3p=s.aF +s=A.aI.prototype +s.a2k=s.dU +s.DC=s.ed +s.pu=s.bw +s.a2l=s.wQ +s.M3=s.vO +s.ki=s.j5 +s.tp=s.bY +s.M2=s.ez +s.tr=s.l_ +s.tq=s.mM +s.DB=s.bx +s.pt=s.jc +s=A.Ba.prototype +s.tn=s.ed +s.a27=s.F_ +s.a28=s.jc +s=A.y1.prototype +s.a47=s.bk +s=A.fk.prototype +s.a46=s.bk +s.a45=s.bY +s=A.Ec.prototype +s.Mj=s.bk +s.Mk=s.bw +s.a37=s.wR +s=A.fS.prototype +s.a2v=s.wR +s.M5=s.nh +s=A.bi.prototype +s.pA=s.ed +s.nF=s.bw +s.DI=s.jc +s.Mr=s.ez +s.Ms=s.l_ +s.a3o=s.wQ +s=A.iQ.prototype +s.M9=s.jR +s.Ma=s.k0 +s.a2L=s.kW +s.a2K=s.ed +s.a2M=s.bw +s=A.wx.prototype +s.a2u=s.aB +s=A.qy.prototype +s.a1W=s.aB +s=A.z4.prototype +s.a4y=s.m +s=A.cx.prototype +s.a3P=s.na +s.a3M=s.vd +s.a3H=s.v9 +s.a3N=s.Ib +s.a3Q=s.jn +s.a3K=s.kw +s.a3L=s.qK +s.a3I=s.va +s.a3J=s.vb +s.a3G=s.jH +s.a3F=s.A0 +s.a3O=s.m +s=A.a1i.prototype +s.a5_=s.A4 +s=A.IF.prototype +s.a4B=s.bY +s.a4C=s.m +s=A.IG.prototype +s.a4E=s.aO +s.a4D=s.bx +s.a4F=s.m +s=A.QK.prototype +s.DE=s.dZ +s=A.uU.prototype +s.a4V=s.bA +s.a4U=s.am +s=A.KU.prototype +s.a5T=s.ah +s.a5U=s.ad +s=A.IK.prototype +s.a4G=s.dZ +s=A.KK.prototype +s.a5K=s.m +s=A.L_.prototype +s.a63=s.m +s=A.lN.prototype +s.a3E=s.Ie +s=A.cN.prototype +s.Mu=s.sl +s=A.kW.prototype +s.a4Y=s.rd +s.a4Z=s.rM +s=A.jO.prototype +s.a4n=s.zA +s.a4o=s.Cd +s.Mz=s.Je +s=A.zI.prototype +s.a5Y=s.aO +s.a5X=s.bx +s.a5Z=s.m +s=A.x1.prototype +s.a3_=s.na +s.a2Y=s.kw +s.a2Z=s.m +s=A.fH.prototype +s.a4f=s.na +s.a4d=s.vd +s.a4b=s.v9 +s.a4c=s.kw +s.a4e=s.m +s=A.jr.prototype +s.a2J=s.vb +s=A.uR.prototype +s.a4A=s.jn +s=A.Td.prototype +s.xK=s.m +s=A.hw.prototype +s.ty=s.dZ +s=A.Jm.prototype +s.a5g=s.dZ +s=A.xK.prototype +s.a3S=s.zI +s=A.nr.prototype +s.a3T=s.q7 +s.DL=s.a10 +s.a3U=s.uF +s.a3V=s.iM +s.a3X=s.m +s.a3W=s.dZ +s=A.Jk.prototype +s.a5f=s.dZ +s=A.Jq.prototype +s.a5h=s.m +s=A.Jr.prototype +s.a5j=s.aO +s.a5i=s.bx +s.a5k=s.m +s=A.lL.prototype +s.Mo=s.aB +s.a38=s.bx +s.a3b=s.AY +s.Mn=s.B_ +s.Mm=s.AZ +s.a39=s.IP +s.a3a=s.IQ +s.Ml=s.m +s=A.zp.prototype +s.a4H=s.m +s=A.wY.prototype +s.a2N=s.I8 +s.a2T=s.aqJ +s.a2U=s.aqK +s.a2Q=s.aq1 +s.a2S=s.aqb +s.a2R=s.aq3 +s.a2V=s.IX +s.a2P=s.m +s.a2O=s.fM +s=A.KW.prototype +s.a6_=s.m +s=A.Gi.prototype +s.a49=s.JP +s=A.KX.prototype +s.a60=s.m +s=A.KY.prototype +s.a61=s.m +s=A.Mi.prototype +s.a1Z=s.apC +s=A.au.prototype +s.nD=s.jg +s=A.e_.prototype +s.M0=s.jg +s=A.kU.prototype +s.a4q=s.m +s.a4p=s.Hr +s=A.xZ.prototype +s.a43=s.b4 +s.a42=s.j})();(function installTearOffs(){var s=hunkHelpers._static_2,r=hunkHelpers._static_1,q=hunkHelpers.installStaticTearOff,p=hunkHelpers._instance_0u,o=hunkHelpers._instance_1u,n=hunkHelpers._instance_1i,m=hunkHelpers._static_0,l=hunkHelpers._instance_0i,k=hunkHelpers.installInstanceTearOff,j=hunkHelpers._instance_2u,i=hunkHelpers._instance_2i +s(A,"b3j","b5c",235) +r(A,"b3h","aVn",1) +q(A,"aPn",1,function(){return{params:null}},["$2$params","$1"],["aPi",function(a){return A.aPi(a,null)}],707,0) +r(A,"b3i","b48",33) +r(A,"a5w","b3d",24) +p(A.A3.prototype,"gGC","ajm",0) +var h +o(h=A.Pi.prototype,"gah_","ah0",53) +o(h,"gadY","adZ",53) +o(A.MR.prototype,"gakN","akO",415) +o(h=A.lU.prototype,"ga8D","a8E",1) +o(h,"ga8B","a8C",1) +o(A.Ue.prototype,"gah3","ah4",610) +o(A.OS.prototype,"gaeV","aeW",366) +n(h=A.Ou.prototype,"gkq","D",546) +p(h,"ga1J","pq",43) +n(A.a2I.prototype,"gu","asd",156) +o(A.PJ.prototype,"gaft","afu",130) +n(A.Dj.prototype,"gJS","JT",12) +n(A.Fy.prototype,"gJS","JT",12) +o(A.Pc.prototype,"gafp","afq",1) +p(h=A.Ok.prototype,"gvn","m",0) +o(h,"gTp","ajR",8) +o(A.RI.prototype,"gFT","afx",473) +o(A.pQ.prototype,"gagD","agE",248) +o(A.U2.prototype,"gasR","JB",256) +p(A.SX.prototype,"gvn","m",0) +o(h=A.Nc.prototype,"gabn","abo",1) +o(h,"gabp","abq",1) +o(h,"gabl","abm",1) +o(h=A.Br.prototype,"gvG","WZ",1) +o(h,"gAS","aq0",1) +o(h,"gwb","asQ",1) +o(A.Nu.prototype,"ga7h","a7i",280) +o(A.P0.prototype,"gafL","afM",1) +s(J,"b3M","aXX",67) +n(J.lr.prototype,"gapd","fs",36) +n(A.kS.prototype,"glr","p",35) +m(A,"b3Z","aZp",48) +n(A.fO.prototype,"glr","p",35) +n(A.fb.prototype,"glr","p",35) +l(A.fx.prototype,"gamn","a0",0) +r(A,"b4N","b0W",57) +r(A,"b4O","b0X",57) +r(A,"b4P","b0Y",57) +m(A,"aQ8","b4r",0) +r(A,"b4Q","b49",24) +s(A,"b4R","b4b",128) +m(A,"aQ7","b4a",0) +q(A,"b4S",4,null,["$4"],["aD7"],708,0) +n(A.q0.prototype,"gkq","D",12) +k(A.yK.prototype,"gamC",0,1,function(){return[null]},["$2","$1"],["mF","o7"],387,0,0) +j(A.aD.prototype,"gNO","iG",128) +n(A.JP.prototype,"gkq","D",12) +l(A.q1.prototype,"gUU","b3",208) +l(h=A.HB.prototype,"gUU","b3",208) +p(h,"gafv","afw",0) +s(A,"aIc","b36",123) +r(A,"aId","b38",122) +s(A,"b5f","aYb",67) +s(A,"b5g","b3c",67) +k(h=A.mb.prototype,"gFN",0,0,null,["$1$0","$0"],["u7","FO"],126,0,0) +n(h,"glr","p",35) +k(h=A.im.prototype,"gFN",0,0,null,["$1$0","$0"],["u7","FO"],126,0,0) +n(h,"glr","p",35) +k(h=A.y_.prototype,"gaf8",0,0,null,["$1$0","$0"],["QB","pR"],126,0,0) +n(h,"glr","p",35) +r(A,"b5t","b39",129) +l(A.Ia.prototype,"guR","aA",0) +n(h=A.WA.prototype,"gkq","D",12) +l(h,"guR","aA",0) +r(A,"aQl","b6x",122) +s(A,"aQk","b6w",123) +s(A,"aQi","aW0",709) +r(A,"b5u","b0I",66) +m(A,"b5v","b2s",710) +s(A,"aQj","b4E",711) +n(A.n.prototype,"glr","p",35) +n(h=A.ck.prototype,"gaw9","rT",12) +k(h,"gawd",0,0,null,["$1","$0"],["a_A","awe"],458,0,0) +i(A.oM.prototype,"ga12","a13",63) +q(A,"b71",2,null,["$1$2","$2"],["aR5",function(a,b){return A.aR5(a,b,t.Jy)}],189,1) +q(A,"aR3",2,null,["$1$2","$2"],["aR4",function(a,b){return A.aR4(a,b,t.Jy)}],189,1) +q(A,"Lq",3,null,["$3"],["aoE"],713,0) +q(A,"Lr",3,null,["$3"],["P"],714,0) +q(A,"ch",3,null,["$3"],["y"],715,0) +o(A.JO.prototype,"gXA","eb",33) +p(A.nK.prototype,"gOp","a9s",0) +j(h=A.ND.prototype,"gaph","e8",123) +n(h,"gar0","eD",122) +o(h,"gas_","as0",35) +s(A,"b62","aHO",716) +j(A.GY.prototype,"ga7c","a7d",68) +q(A,"b5_",3,null,["$3"],["aVi"],717,0) +q(A,"b50",3,null,["$3"],["aVj"],718,0) +q(A,"b51",3,null,["$3"],["aVk"],719,0) +q(A,"b52",4,null,["$4"],["b5K"],720,0) +s(A,"a5E","b5L",4) +q(A,"b4T",3,null,["$3"],["aXj"],721,0) +r(A,"eJ","b7S",9) +r(A,"h6","b5O",14) +q(A,"b4W",3,null,["$3"],["aXL"],722,0) +q(A,"b4Z",3,null,["$3"],["b0P"],723,0) +q(A,"b4V",3,null,["$3"],["aXK"],724,0) +q(A,"b4Y",3,null,["$3"],["b0O"],725,0) +r(A,"b4U","aXJ",154) +r(A,"b4X","b0N",242) +o(A.JC.prototype,"gOX","aax",24) +j(A.Ig.prototype,"gaen","aeo",116) +q(A,"b6T",3,null,["$3"],["aY7"],726,0) +q(A,"b6S",3,null,["$3"],["aVl"],727,0) +r(A,"b6U","b7T",91) +q(A,"aQV",4,function(){return{size:null}},["$5$size","$4"],["aPj",function(a,b,c,d){return A.aPj(a,b,c,d,null)}],728,0) +s(A,"v5","b7R",150) +s(A,"zU","b4K",729) +s(A,"aEb","b5T",131) +s(A,"Lj","b5N",79) +s(A,"Li","b5M",79) +r(A,"aIv","b5P",100) +q(A,"b7y",3,null,["$3"],["aYZ"],730,0) +q(A,"b7C",3,null,["$3"],["aZC"],731,0) +q(A,"b7D",3,null,["$3"],["aZD"],732,0) +j(A.Ji.prototype,"gabe","abf",142) +q(A,"b7I",3,null,["$3"],["b_a"],733,0) +r(A,"b7J","b5Q",734) +s(A,"b7L","b6o",735) +s(A,"b7K","b6n",736) +p(A.l4.prototype,"gYl","au0",0) +j(A.Aw.prototype,"gpi","t2",4) +j(h=A.Ax.prototype,"gw2","w3",4) +j(h,"go_","o0",4) +j(A.GX.prototype,"gpi","t2",4) +j(h=A.Ay.prototype,"go_","o0",4) +j(h,"gw2","w3",4) +j(h=A.Az.prototype,"go_","o0",4) +j(h,"gavF","avG",4) +j(h,"gw2","w3",4) +j(h,"gavc","avd",4) +j(A.qL.prototype,"go_","o0",4) +j(A.Av.prototype,"gpi","t2",4) +j(h=A.Ic.prototype,"ghG","io",4) +j(h,"giN","jF",4) +j(h=A.Ha.prototype,"ga_Z","a0_",148) +j(h,"ga0p","a0q",148) +o(h,"ga00","a01",14) +o(h,"ga0r","a0s",14) +j(h=A.Id.prototype,"giN","jF",4) +j(h,"ghG","io",4) +j(h=A.Ie.prototype,"ghG","io",4) +j(h,"giN","jF",4) +j(h=A.t4.prototype,"giN","jF",4) +j(h,"ghG","io",4) +j(h=A.t6.prototype,"ghG","io",4) +j(h,"gava","avb",4) +j(h,"gavD","avE",4) +j(h=A.t7.prototype,"giN","jF",4) +j(h,"ghG","io",4) +j(h=A.If.prototype,"giN","jF",4) +j(h,"ghG","io",4) +k(h=A.vi.prototype,"gZs",1,0,function(){return{from:null}},["$1$from","$0"],["Zt","dc"],259,0,0) +o(h,"ga9f","a9g",260) +o(h,"gE1","a71",3) +o(A.kw.prototype,"gq2","zb",6) +o(A.Bl.prototype,"gTg","Th",6) +o(h=A.uy.prototype,"gq2","zb",6) +p(h,"gGV","akn",0) +o(h=A.vK.prototype,"gQu","aeP",6) +p(h,"gQt","aeO",0) +p(A.qz.prototype,"gdm","a6",0) +o(A.oi.prototype,"gYf","wh",6) +o(h=A.Hn.prototype,"gadv","adw",27) +o(h,"gadC","adD",49) +p(h,"gadt","adu",0) +o(h=A.Ho.prototype,"gafi","afj",54) +o(h,"gafk","afl",46) +p(A.Hr.prototype,"gFF","Qk",0) +s(A,"b73","b40",737) +q(A,"b75",3,null,["$3"],["b47"],738,0) +q(A,"b74",5,null,["$5"],["b46"],177,0) +k(A.GW.prototype,"ga7y",0,3,null,["$3"],["a7z"],264,0,0) +p(A.Hp.prototype,"gado","adp",0) +o(h=A.yQ.prototype,"gaht","ahu",31) +o(h,"gahv","ahw",13) +o(h,"gahr","ahs",28) +p(h,"gahp","ahq",0) +o(h,"gahx","ahy",55) +p(A.Hq.prototype,"gX6","AY",0) +q(A,"b86",4,null,["$4"],["aW9"],739,0) +o(h=A.Hu.prototype,"gafr","afs",28) +p(h,"gacp","PE",0) +p(h,"gacN","PG",0) +o(h,"gzc","aiZ",6) +o(h=A.Hs.prototype,"gafD","afE",27) +o(h,"gafF","afG",49) +p(h,"gafB","afC",0) +q(A,"b4M",1,null,["$2$forceReport","$1"],["aKZ",function(a){return A.aKZ(a,!1)}],740,0) +n(h=A.f3.prototype,"gzD","Z",57) +n(h,"gZ9","K",57) +p(h,"gdm","a6",0) +r(A,"b7V","b_U",741) +o(h=A.wl.prototype,"gacw","acx",284) +o(h,"ga9b","a9c",285) +o(h,"gam5","am6",53) +p(h,"gaag","F2",0) +o(h,"gacA","PF",22) +p(h,"gacR","acS",0) +q(A,"bcX",3,null,["$3"],["aL6"],742,0) +o(A.ke.prototype,"goA","ik",22) +r(A,"aQX","aYg",34) +r(A,"aIx","aWU",165) +r(A,"aIy","aWV",34) +o(A.BE.prototype,"goA","ik",22) +r(A,"b72","aWT",34) +p(A.X6.prototype,"gafH","afI",0) +o(h=A.k9.prototype,"gyL","af3",22) +o(h,"gagZ","ud",290) +p(h,"gaf4","nN",0) +r(A,"Lm","aXC",34) +o(A.xj.prototype,"goA","ik",22) +o(h=A.JX.prototype,"goA","ik",22) +p(h,"ga8z","a8A",0) +o(A.AC.prototype,"goA","ik",22) +j(h=A.Im.prototype,"gae6","ae7",301) +j(h,"gaeH","aeI",87) +o(A.GQ.prototype,"gE2","a73",303) +o(h=A.IZ.prototype,"gcc","bp",2) +o(h,"gcb","bo",2) +p(A.H4.prototype,"goB","IY",0) +o(h=A.J_.prototype,"gcc","bp",2) +o(h,"gcb","bo",2) +p(h=A.vZ.prototype,"ga6Y","a6Z",0) +o(h,"ga7_","a70",6) +p(h,"gabY","abZ",0) +o(h,"gabw","abx",118) +p(h,"gabu","abv",0) +o(h,"gQx","aeY",13) +o(h,"gSb","aik",28) +l(h,"guR","aA",0) +o(A.oS.prototype,"gab0","ab1",6) +o(A.CE.prototype,"gae_","ae0",6) +o(A.CF.prototype,"gae1","ae2",6) +o(h=A.CD.prototype,"ga0g","a0h",333) +o(h,"ganK","anL",334) +o(h=A.I7.prototype,"gakE","akF",335) +k(h,"ga1s",0,0,null,["$1","$0"],["LK","a1t"],221,0,0) +p(h,"goB","IY",0) +o(h,"gX0","aq6",220) +o(h,"gaq7","aq8",8) +o(h,"gaqQ","aqR",27) +o(h,"gaqS","aqT",49) +o(h,"gaqF","aqG",27) +o(h,"gaqH","aqI",49) +p(h,"gaqN","X3",0) +p(h,"gaqO","aqP",0) +p(h,"gaqB","aqC",0) +p(h,"gaqD","aqE",0) +o(h,"gaql","aqm",54) +o(h,"gaqn","aqo",46) +p(A.K0.prototype,"gEM","Of",0) +p(h=A.zH.prototype,"grw","atf",0) +o(h,"grv","ate",6) +o(A.Ky.prototype,"gu8","FW",24) +o(A.Kz.prototype,"gu8","FW",24) +o(h=A.HR.prototype,"gacL","acM",6) +p(h,"gafy","afz",0) +o(h=A.xI.prototype,"ga9w","a9x",8) +p(h,"gahE","ahF",0) +q(A,"aRy",3,null,["$3"],["b4_"],743,0) +s(A,"b7P","b_q",744) +o(h=A.a1V.prototype,"gats","JP",84) +o(h,"gatq","atr",84) +o(h,"gatJ","atK",90) +o(h,"gatP","atQ",217) +o(h,"gatL","atM",88) +p(h=A.Jt.prototype,"gQH","afd",0) +j(h,"gacZ","ad_",354) +p(h,"gad4","ad5",0) +o(h=A.JD.prototype,"gabh","abi",38) +o(h,"gGu","Gv",38) +o(h,"gGs","Gt",38) +o(h,"ga6y","a6z",355) +o(h,"gaiG","aiH",8) +o(h,"gaiI","aiJ",8) +p(h=A.zs.prototype,"ga9N","EV",0) +o(h,"gGu","Gv",31) +o(h,"gaiE","aiF",13) +o(h,"gGs","Gt",28) +o(h,"gaiK","aiL",27) +o(h,"gaiM","aiN",49) +o(h,"gcc","bp",2) +o(h,"gcb","bo",2) +p(h,"gart","B5",0) +p(h,"ganU","Ai",0) +o(h=A.Iq.prototype,"gaj6","aj7",31) +o(h,"gaj8","aj9",13) +o(h,"gaj4","aj5",28) +o(h,"gaj2","aj3",241) +p(A.JV.prototype,"gabr","abs",0) +s(A,"b87","b0p",745) +o(h=A.yp.prototype,"gajp","ajq",27) +k(h,"gSX",0,0,function(){return[null]},["$1","$0"],["SY","ajo"],221,0,0) +k(h,"gPK",0,0,null,["$1","$0"],["PL","adx"],365,0,0) +o(h,"gabS","abT",8) +o(h,"gac_","ac0",8) +o(h=A.yq.prototype,"gajt","aju",6) +o(h,"gajr","ajs",55) +o(h,"gPz","abV",22) +p(h,"gady","adz",0) +p(h,"gac5","ac6",0) +p(h,"gacJ","acK",0) +o(h,"gPC","acd",54) +o(h,"gPD","ace",46) +o(h,"ga7G","a7H",11) +k(h=A.DP.prototype,"garE",0,1,null,["$4$allowUpscaling$cacheHeight$cacheWidth","$1"],["Xu","arF"],371,0,0) +k(h,"garG",0,1,null,["$2$getTargetSize","$1"],["Xv","arH"],372,0,0) +q(A,"aI9",3,null,["$3"],["aMd"],746,0) +q(A,"aIk",3,null,["$3"],["ev"],747,0) +n(h=A.rN.prototype,"gzD","Z",212) +o(h,"ga0X","LC",769) +o(h=A.Qx.prototype,"gabj","abk",386) +o(h,"gab6","ab7",3) +n(h,"gzD","Z",212) +j(A.yE.prototype,"gaiB","aiC",391) +q(A,"Lo",3,null,["$3"],["bb"],748,0) +n(h=A.P_.prototype,"gawf","eG",2) +n(h,"gIq","fp",2) +r(A,"b54","b15",210) +o(h=A.xy.prototype,"gadL","adM",3) +o(h,"gacs","act",3) +o(h=A.H.prototype,"gcc","bp",2) +o(h,"gcb","bo",2) +p(h,"gBt","a8",0) +j(A.d7.prototype,"gVV","mL",10) +o(h=A.Es.prototype,"gcc","bp",2) +o(h,"gcb","bo",2) +o(h=A.Et.prototype,"gcc","bp",2) +o(h,"gcb","bo",2) +p(h=A.tT.prototype,"gdB","ag",0) +p(h,"gz6","aiv",0) +o(h,"gadg","adh",109) +o(h,"gade","adf",401) +o(h,"gacj","ack",8) +o(h,"gacf","acg",8) +o(h,"gacl","acm",8) +o(h,"gach","aci",8) +o(h,"gcc","bp",2) +o(h,"gcb","bo",2) +o(h,"ga9C","a9D",27) +p(h,"gadr","ads",0) +p(h,"ga9A","a9B",0) +j(h,"ga9F","Ov",10) +o(h=A.Ev.prototype,"gcc","bp",2) +o(h,"gcb","bo",2) +o(h=A.Ex.prototype,"gcc","bp",2) +o(h,"gcb","bo",2) +o(h=A.Ez.prototype,"gcc","bp",2) +o(h,"gcb","bo",2) +r(A,"aR8","aZS",15) +r(A,"aR9","aZT",15) +p(A.nf.prototype,"gTD","TE",0) +o(h=A.r.prototype,"gZ3","kV",15) +p(h,"gdB","ag",0) +k(h,"gf9",0,2,null,["$2"],["am"],10,0,1) +p(h,"gY6","aY",0) +k(h,"gQp",0,1,null,["$2$isMergeUp","$1"],["yB","aeF"],409,0,0) +k(h,"gtd",0,0,null,["$4$curve$descendant$duration$rect","$0","$1$rect","$3$curve$duration$rect","$2$descendant$rect"],["hQ","Dn","te","xu","tf"],207,0,0) +o(h=A.at.prototype,"gamg","amh","at.0?(I?)") +o(h,"game","amf","at.0?(I?)") +p(A.px.prototype,"gmt","ahO",0) +o(h=A.ED.prototype,"gcc","bp",2) +o(h,"gcb","bo",2) +o(h,"ga83","a84",412) +o(h=A.fF.prototype,"gcc","bp",2) +o(h,"gcb","bo",2) +k(h,"gf9",0,2,null,["$2"],["am"],10,0,1) +o(h=A.Er.prototype,"gcc","bp",2) +o(h,"gcb","bo",2) +o(h=A.Eq.prototype,"gcc","bp",2) +o(h,"gcb","bo",2) +p(A.Eo.prototype,"gzo","GN",0) +p(A.zr.prototype,"gyy","yz",0) +j(A.Ew.prototype,"gafT","QO",416) +o(h=A.EB.prototype,"gcc","bp",2) +o(h,"gcb","bo",2) +p(h=A.nn.prototype,"gagr","ags",0) +p(h,"gagt","agu",0) +p(h,"gagv","agw",0) +p(h,"gagp","agq",0) +p(h=A.EG.prototype,"gagy","agz",0) +p(h,"gagl","agm",0) +p(h,"gagj","agk",0) +p(h,"gagd","age",0) +p(h,"gagf","agg",0) +p(h,"gagn","ago",0) +p(h,"gagh","agi",0) +o(h=A.EF.prototype,"gcc","bp",2) +o(h,"gcb","bo",2) +j(h,"gafR","afS",10) +p(A.Tq.prototype,"gRZ","S_",0) +o(h=A.tU.prototype,"gcc","bp",2) +o(h,"gcb","bo",2) +k(h,"gf9",0,2,null,["$2"],["am"],10,0,1) +o(h=A.EC.prototype,"gcc","bp",2) +o(h,"gcb","bo",2) +o(h=A.Eu.prototype,"gcc","bp",2) +o(h,"gcb","bo",2) +k(A.dL.prototype,"gard",0,1,null,["$3$crossAxisPosition$mainAxisPosition"],["Xd"],417,0,0) +o(h=A.EI.prototype,"gcc","bp",2) +o(h,"gcb","bo",2) +j(h,"gaud","aue",10) +o(h=A.tW.prototype,"gcc","bp",2) +o(h,"gcb","bo",2) +j(h,"gafU","QP",10) +k(h,"gtd",0,0,null,["$4$curve$descendant$duration$rect","$0","$1$rect","$3$curve$duration$rect","$2$descendant$rect"],["hQ","Dn","te","xu","tf"],207,0,0) +o(h=A.EL.prototype,"gcc","bp",2) +o(h,"gcb","bo",2) +s(A,"b56","b_b",749) +q(A,"b57",0,null,["$2$priority$scheduler"],["b5R"],750,0) +o(h=A.fi.prototype,"ga9U","a9V",203) +p(h,"gahB","ahC",0) +o(h,"gaba","abb",3) +p(h,"gabC","abD",0) +p(h,"ga9n","a9o",0) +o(A.yn.prototype,"gzh","ajl",3) +p(h=A.Ts.prototype,"ga9d","a9e",0) +p(h,"gadc","PI",0) +o(h,"gada","adb",425) +o(A.cP.prototype,"gRh","agW",426) +o(A.ky.prototype,"gal0","Ha",433) +r(A,"b55","b_x",751) +p(h=A.xQ.prototype,"ga6N","a6O",439) +o(h,"gac3","Fj",440) +o(h,"gacu","yn",75) +o(h=A.PI.prototype,"gaqc","aqd",130) +o(h,"gaqz","IW",446) +o(h,"ga8G","a8H",447) +o(A.EQ.prototype,"gaeT","FI",133) +o(h=A.dR.prototype,"ga9y","a9z",198) +o(h,"gRf","Rg",198) +o(A.Uz.prototype,"gaeC","yw",75) +o(A.V0.prototype,"gadH","Fn",75) +o(A.GN.prototype,"gPp","ab_",460) +o(h=A.HU.prototype,"gPy","abU",220) +o(h,"ga6C","a6D",54) +o(h,"ga6E","a6F",46) +o(h,"gabP","abQ",8) +o(h=A.Kq.prototype,"ga95","a96",196) +o(h,"gafn","afo",463) +o(h,"gafJ","afK",464) +o(A.GT.prototype,"ga6J","a6K",465) +p(h=A.GI.prototype,"gaqh","aqi",0) +o(h,"gacn","aco",75) +p(h,"gabc","abd",0) +p(h=A.Kx.prototype,"gaqk","IR",0) +p(h,"gaqV","IZ",0) +p(h,"gaqr","IU",0) +o(h,"gaq_","IO",706) +o(A.HJ.prototype,"gE0","N1",6) +p(h=A.oA.prototype,"gQG","afc",0) +p(h,"gafm","QJ",0) +p(h,"gahj","ahk",0) +p(h,"gzl","ajG",0) +p(h,"gafg","afh",0) +p(h,"gafe","aff",0) +p(h,"gQI","FR",0) +p(h,"gy5","Oh",0) +p(h,"gER","a9G",0) +o(h,"ga8n","a8o",471) +k(h,"gahK",0,0,function(){return[null]},["$1","$0"],["RI","RH"],195,0,0) +o(h,"gaur","aus",109) +k(h,"gaeZ",0,3,null,["$3"],["af_"],194,0,0) +k(h,"gaf0",0,3,null,["$3"],["af1"],194,0,0) +p(h,"ga7U","Nn",58) +p(h,"gaf9","afa",58) +p(h,"gaep","aeq",58) +p(h,"gag3","ag4",58) +p(h,"ga9p","a9q",58) +o(h,"gajx","ajy",475) +o(h,"gah8","ah9",476) +o(h,"gahR","ahS",477) +o(h,"gahP","ahQ",478) +o(h,"ga9Y","a9Z",479) +o(h,"gak6","ak7",480) +o(h,"gadP","adQ",481) +o(h,"ga97","a98",55) +p(A.Ca.prototype,"galf","alg",0) +o(h=A.YL.prototype,"gaqu","IV",22) +o(h,"gaqe","aqf",490) +p(A.yV.prototype,"gFi","abR",0) +q(A,"b6g",1,null,["$5$alignment$alignmentPolicy$curve$duration","$1","$2$alignmentPolicy"],["aFV",function(a){return A.aFV(a,null,null,null,null)},function(a,b){return A.aFV(a,null,b,null,null)}],752,0) +r(A,"aDQ","b1p",16) +s(A,"aIl","aX3",753) +r(A,"aQJ","aX2",16) +o(h=A.Z2.prototype,"gajI","T7",16) +p(h,"gajJ","ajK",0) +o(h=A.xq.prototype,"gaaq","aar",55) +o(h,"gacB","acC",519) +o(h,"gakd","ake",520) +o(h=A.nQ.prototype,"ga7u","a7v",11) +o(h,"gPq","Pr",6) +p(h,"gJU","atY",0) +o(h=A.oL.prototype,"gabM","abN",523) +k(h,"ga93",0,5,null,["$5"],["a94"],177,0,0) +q(A,"aQN",3,null,["$3"],["mU"],754,0) +j(A.I2.prototype,"gac1","ac2",176) +p(A.qy.prototype,"gab2","ab3",0) +p(A.z5.prototype,"gFo","adJ",0) +o(A.z7.prototype,"gQe","aeg",12) +o(h=A.J0.prototype,"gcc","bp",2) +o(h,"gcb","bo",2) +s(A,"aR6","aYJ",755) +r(A,"oc","b1Y",56) +r(A,"aR7","b1Z",56) +r(A,"Lk","b2_",56) +o(A.zf.prototype,"gwg","oU",78) +o(A.ze.prototype,"gwg","oU",78) +o(A.ID.prototype,"gwg","oU",78) +o(A.IE.prototype,"gwg","oU",78) +p(h=A.ht.prototype,"gPA","abX",0) +o(h,"gacy","acz",55) +o(h,"gacF","acG",22) +r(A,"b78","b1W",15) +k(A.uU.prototype,"gf9",0,2,null,["$2"],["am"],10,0,1) +o(h=A.qg.prototype,"gcc","bp",2) +o(h,"gcb","bo",2) +o(A.HZ.prototype,"gFY","FZ",69) +o(h=A.HY.prototype,"gEe","Ef",6) +o(h,"gajj","ajk",3) +o(A.JR.prototype,"gFY","FZ",69) +o(A.JQ.prototype,"gEe","Ef",6) +o(A.NH.prototype,"gaeR","FH",133) +p(A.Jb.prototype,"gGb","ah6",0) +o(A.lN.prototype,"gak1","GP",557) +o(h=A.zu.prototype,"gahc","ahd",3) +p(h,"gyp","PH",0) +p(h,"gFf","ab9",230) +p(h,"gFk","acQ",0) +o(h=A.xF.prototype,"ga0Y","a0Z",119) +o(h,"ga14","a15",119) +o(A.fH.prototype,"gPJ","adq",6) +o(h=A.jr.prototype,"ga7q","a7r",11) +o(h,"ga7s","a7t",11) +p(h=A.M5.prototype,"gGA","GB",0) +p(h,"gET","EU",0) +p(h=A.O7.prototype,"gGA","GB",0) +p(h,"gET","EU",0) +s(A,"bdc","aPw",756) +n(h=A.Jx.prototype,"gkq","D",52) +n(h,"gKg","C",52) +r(A,"Ln","b5S",69) +p(A.nr.prototype,"gao1","ao2",0) +p(A.F8.prototype,"gvn","m",0) +o(h=A.xL.prototype,"gRP","ahT",118) +o(h,"gRR","ahV",31) +o(h,"gRS","ahW",13) +o(h,"gRQ","ahU",28) +p(h,"gRN","RO",0) +p(h,"ga9l","a9m",0) +p(h,"ga9j","a9k",0) +o(h,"gagT","agU",163) +o(h,"gahX","ahY",22) +o(h,"gacT","acU",121) +p(A.Jo.prototype,"gRF","ahH",0) +o(h=A.lL.prototype,"gakl","akm",6) +p(h,"gX6","AY",0) +o(h,"gadF","adG",27) +o(h,"gahZ","ai_",121) +o(h,"gacV","acW",69) +o(h,"gacD","acE",22) +o(h,"gai0","ai1",163) +n(h=A.wY.prototype,"gkq","D",52) +n(h,"gKg","C",52) +j(h,"gEr","a8l",582) +p(h,"gFl","acY",0) +j(A.JB.prototype,"gacq","acr",229) +p(A.JA.prototype,"gSe","aiq",0) +o(A.xX.prototype,"gauQ","Z8",589) +p(A.zt.prototype,"gyN","afA",0) +p(h=A.UD.prototype,"gTG","GS",0) +o(h,"gad0","ad1",31) +o(h,"gad2","ad3",13) +o(h,"gad6","ad7",31) +o(h,"gad8","ad9",13) +o(h,"gab4","ab5",28) +o(h=A.Tp.prototype,"gadk","adl",31) +o(h,"gadm","adn",13) +o(h,"gadi","adj",28) +o(h,"gabG","abH",31) +o(h,"gabI","abJ",13) +o(h,"gabE","abF",28) +o(h,"ga7C","a7D",11) +o(h,"ga7l","a7m",11) +o(h,"ga7E","a7F",11) +p(A.Jy.prototype,"gzi","GD",0) +p(A.Jv.prototype,"gFp","Fq",0) +p(h=A.Gi.prototype,"gatW","atX",0) +p(h,"gatU","atV",0) +o(h,"gatS","atT",86) +p(h,"gatN","atO",0) +o(h,"gatH","atI",83) +p(h,"gatC","atD",0) +o(h,"gatE","atF",27) +o(h,"gatg","ath",86) +o(h,"gatZ","au_",86) +o(h,"gatk","atl",159) +o(h,"gatm","atn",158) +o(h,"gati","atj",157) +p(h=A.K2.prototype,"gPN","adB",0) +p(h,"gPM","adA",0) +o(h,"gSN","ajd",86) +o(h,"gSO","aje",217) +p(h,"gSM","ajc",0) +o(h,"gPv","abz",159) +o(h,"gPw","abA",158) +o(h,"gPu","aby",157) +o(h,"gaal","aam",84) +o(h,"gaaj","aak",84) +o(h,"gacb","acc",88) +o(h,"gac9","aca",90) +o(h,"gac7","ac8",83) +p(A.j1.prototype,"gjy","jz",0) +p(A.ei.prototype,"geM","f2",0) +r(A,"b8f","b_9",184) +r(A,"b8e","b__",184) +p(A.GO.prototype,"gFg","abg",0) +p(h=A.yw.prototype,"ga__","wN",0) +p(h,"gZ4","wu",0) +o(h,"gajD","ajE",600) +o(h,"gagX","agY",601) +p(h,"gG5","R6",0) +p(h,"gFh","Px",0) +p(A.zG.prototype,"gGW","ako",0) +o(h=A.J6.prototype,"gcb","bo",2) +o(h,"gcc","bp",2) +s(A,"b58","aVo",758) +k(A.S4.prototype,"gaq9",0,3,null,["$3"],["AT"],606,0,0) +k(A.ST.prototype,"gau7",0,0,null,["$5$arguments$child$key$name$restorationId"],["au8"],607,0,0) +j(A.a_v.prototype,"gatz","atA",614) +k(h=A.Ck.prototype,"gacH",0,3,null,["$3"],["acI"],620,0,0) +o(h,"galQ","H",11) +o(h,"gLG","Df",119) +q(A,"b5G",0,null,["$5$arguments$child$key$name$restorationId"],["b79"],759,0) +q(A,"b5H",4,null,["$4"],["aYK"],760,0) +q(A,"b70",0,null,["$5$arguments$child$key$name$restorationId"],["b7a"],761,0) +s(A,"b7j","b1d",26) +s(A,"aRg","b18",26) +s(A,"aRi","b1f",26) +s(A,"aRh","b1e",26) +s(A,"b7h","b1b",26) +s(A,"b7k","b1g",26) +s(A,"b7i","b1c",26) +s(A,"b7g","b1a",26) +s(A,"b7e","b17",26) +s(A,"b7f","b19",26) +r(A,"b7l","b1J",73) +r(A,"b7o","b1M",73) +r(A,"b7r","b1P",73) +r(A,"b7p","b1N",164) +r(A,"b7q","b1O",164) +r(A,"b7m","b1K",73) +r(A,"b7n","b1L",73) +o(h=A.a1f.prototype,"gnr","a_W",665) +o(h,"gpg","a_U",666) +r(A,"b5W","b4w",50) +r(A,"b5V","b4q",50) +r(A,"b5U","b3a",50) +p(h=A.Vu.prototype,"gapl","apm",673) +p(h,"gamb","amc",674) +p(h,"ga1K","a1L",675) +l(h,"gUz","alC",676) +p(h,"galq","alr",677) +p(h,"gals","alu",60) +p(h,"gnY","alv",60) +p(h,"galw","alx",60) +p(h,"galA","alB",60) +p(h,"galy","alz",60) +l(h,"gap7","ap8",679) +p(h,"gV3","amx",680) +p(h,"gam7","am8",681) +p(h,"ganO","anP",682) +p(h,"gYF","auz",683) +p(h,"gao9","aoa",684) +p(h,"gaoh","aoi",127) +p(h,"gaol","aom",127) +p(h,"gaoj","aok",127) +p(h,"gaon","aoo",51) +p(h,"gaod","aoe",70) +p(h,"gaob","aoc",70) +p(h,"gaof","aog",70) +p(h,"gaop","aoq",70) +p(h,"gaor","aos",70) +p(h,"gti","a1D",51) +p(h,"gtj","a1E",51) +p(h,"gk5","at2",51) +p(h,"gat0","at1",51) +p(h,"gasZ","at_",51) +o(A.Vv.prototype,"ga_b","aw1",705) +r(A,"b6V","aYa",765) +q(A,"zT",3,null,["$3"],["b6R"],766,0) +q(A,"aEq",1,null,["$2$wrapWidth","$1"],["aQv",function(a){return A.aQv(a,null)}],767,0) +m(A,"b7B","aPg",0) +s(A,"qr","aJZ",101) +s(A,"v4","aVI",101) +r(A,"aQf","b4z",82) +s(A,"b67","b7N",117) +s(A,"aQB","b7O",117) +s(A,"b66","b7M",117) +s(A,"b7s","b4c",47) +s(A,"b7v","b4f",47) +s(A,"b7w","b4g",47) +s(A,"b7x","b4h",47) +s(A,"b7u","b4e",47) +s(A,"b7t","b4d",47)})();(function inheritance(){var s=hunkHelpers.mixin,r=hunkHelpers.mixinHard,q=hunkHelpers.inherit,p=hunkHelpers.inheritMany +q(A.I,null) +p(A.I,[A.A3,A.a6r,A.ou,A.av7,A.a1z,A.a9Q,A.iw,A.a8p,A.Qa,A.MI,A.Pi,A.pf,A.kp,A.n,A.O9,A.m5,A.TH,A.tS,A.pV,A.rA,A.aoG,A.Po,A.r0,A.MN,A.MH,A.Mv,A.fz,A.ak4,A.aj2,A.PP,A.agx,A.agy,A.adv,A.a9I,A.a99,A.MR,A.air,A.eF,A.Ng,A.vA,A.B_,A.a97,A.MJ,A.a9c,A.MW,A.ot,A.akl,A.Mz,A.TC,A.MO,A.FS,A.lU,A.MY,A.Ue,A.MT,A.B1,A.B0,A.MS,A.MP,A.a9b,A.bX,A.MZ,A.B6,A.a9p,A.a9q,A.acw,A.acx,A.Oe,A.acS,A.aaI,A.ani,A.Pl,A.afj,A.Pk,A.Pj,A.O_,A.By,A.XK,A.XP,A.NY,A.OS,A.ac9,A.T2,A.u_,A.a1y,A.amY,A.ade,A.a3P,A.Ou,A.wh,A.rB,A.Cf,A.Ao,A.hl,A.Nh,A.yO,A.dJ,A.cW,A.aps,A.Hz,A.apD,A.apC,A.y8,A.Uf,A.hc,A.akd,A.a9J,A.WP,A.a9U,A.pL,A.aja,A.a2I,A.a_x,A.apt,A.Ug,A.apV,A.zk,A.x8,A.pm,A.nm,A.aoF,A.ajc,A.pg,A.akP,A.du,A.ayy,A.alW,A.Ui,A.uZ,A.afc,A.y9,A.apu,A.rl,A.aiJ,A.aon,A.w5,A.lk,A.Oh,A.Ty,A.lR,A.uf,A.qe,A.ak5,A.Ph,A.Fz,A.Cs,A.A7,A.mV,A.PJ,A.lm,A.agj,A.a9O,A.ahY,A.a7Y,A.na,A.BV,A.Oj,A.Oi,A.Pc,A.ajI,A.Vg,A.RE,A.ajL,A.ajN,A.amV,A.RI,A.ak0,A.Ij,A.atr,A.a47,A.me,A.uH,A.zo,A.ajS,A.aGJ,A.ako,A.P4,A.P3,A.aiM,A.a67,A.RN,A.no,A.ve,A.w4,A.ac5,A.Tx,A.Tv,A.uc,A.aco,A.ao3,A.ao_,A.Xw,A.B,A.jq,A.ag2,A.ag4,A.apa,A.ape,A.as8,A.S2,A.apy,A.MA,A.tx,A.aj6,A.y6,A.a8r,A.af8,A.aqh,A.aqg,A.avA,A.avB,A.avz,A.pQ,A.agE,A.U2,A.SX,A.aqH,A.ll,A.lC,A.BP,A.BR,A.BQ,A.ur,A.aq3,A.yk,A.da,A.nG,A.a7U,A.Nc,A.acc,A.acd,A.G8,A.ac6,A.LW,A.yi,A.w2,A.afW,A.aqk,A.aq4,A.afk,A.abR,A.aba,A.Q7,A.bU,A.acE,A.aaq,A.ac1,A.wd,A.Vh,A.aGb,J.wz,J.cp,A.MC,A.aM,A.aoi,A.bu,A.bN,A.ik,A.Oq,A.Up,A.TI,A.TJ,A.Oa,A.OV,A.m6,A.BX,A.V3,A.lW,A.io,A.wQ,A.vL,A.q6,A.jB,A.CK,A.ary,A.QM,A.BT,A.JM,A.azF,A.ah8,A.wJ,A.oW,A.zb,A.pZ,A.y3,A.a2C,A.au6,A.awf,A.jx,A.YC,A.Kc,A.aAX,A.D2,A.K8,A.GR,A.e4,A.LR,A.eg,A.q1,A.q0,A.yK,A.jQ,A.aD,A.VY,A.JP,A.VZ,A.Xz,A.av2,A.zm,A.HB,A.a2z,A.a4l,A.a4k,A.z0,A.jR,A.axz,A.q7,A.z8,A.iM,A.ZK,A.qi,A.HD,A.XR,A.ZD,A.a2w,A.a2v,A.mf,A.Ub,A.N8,A.bl,A.a87,A.atp,A.Wm,A.MF,A.a2f,A.aww,A.auj,A.aAW,A.a3V,A.Kp,A.mj,A.iz,A.b1,A.QU,A.FK,A.Y2,A.fR,A.PB,A.aH,A.b7,A.a2F,A.lT,A.SY,A.ck,A.Km,A.arG,A.jS,A.w8,A.pF,A.a9T,A.aFM,A.Y1,A.b0,A.OC,A.asx,A.QL,A.awq,A.Od,A.au7,A.JO,A.nK,A.a8A,A.QP,A.w,A.aC,A.ju,A.hX,A.m,A.tg,A.aG7,A.jC,A.lp,A.Pq,A.mR,A.n6,A.ub,A.lE,A.xf,A.dv,A.cV,A.aog,A.iG,A.oI,A.nz,A.Ga,A.eE,A.b9,A.ce,A.pi,A.a8h,A.P2,A.a6C,A.a80,A.aet,A.ajO,A.a7L,A.on,A.FN,A.my,A.As,A.bO,A.NF,A.CH,A.n2,A.qj,A.za,A.tf,A.ND,A.Pb,A.rh,A.aap,A.aes,A.acu,A.a5,A.XC,A.a2x,A.Wn,A.Wd,A.Wf,A.Wg,A.W8,A.Yo,A.Wk,A.Wi,A.a7F,A.a3o,A.an,A.We,A.AB,A.Cm,A.a0Y,A.kG,A.a2e,A.a2d,A.W6,A.Yn,A.Ym,A.Yj,A.Yl,A.a0t,A.YQ,A.a40,A.Yk,A.a2k,A.Y5,A.a6K,A.awC,A.a6N,A.W3,A.k_,A.Yf,A.Yg,A.ff,A.cL,A.PW,A.Zs,A.Zy,A.Wa,A.Wo,A.Wb,A.Yh,A.Yi,A.ZB,A.Zz,A.a3n,A.a2c,A.Zu,A.p3,A.dE,A.a_G,A.pt,A.a0o,A.a0p,A.tQ,A.a1K,A.a1J,A.a1H,A.a1F,A.a1D,A.qX,A.ZF,A.MG,A.arR,A.or,A.kR,A.lb,A.jv,A.p0,A.a6y,A.aj,A.aoA,A.Ag,A.DR,A.Ae,A.Ad,A.qz,A.oi,A.ig,A.Za,A.aqW,A.YZ,A.i_,A.NE,A.I0,A.ayg,A.ayf,A.aye,A.Bj,A.cx,A.i7,A.Hm,A.Xt,A.Ms,A.Xi,A.K4,A.Dz,A.Xl,A.Xj,A.f6,A.Ys,A.Mk,A.f3,A.ayl,A.aq,A.k5,A.ho,A.aHC,A.jp,A.x9,A.aBG,A.as9,A.El,A.kB,A.bK,A.dA,A.wk,A.yZ,A.adJ,A.azG,A.wl,A.mI,A.li,A.lj,A.iB,A.a_T,A.ej,A.VB,A.WR,A.X0,A.WW,A.WU,A.WV,A.WT,A.WX,A.X4,A.X2,A.X3,A.X1,A.WZ,A.X_,A.WY,A.WS,A.rC,A.NO,A.iI,A.zD,A.mT,A.wN,A.D4,A.wM,A.o1,A.aHv,A.ak1,A.PS,A.X6,A.zz,A.ajX,A.ak_,A.fU,A.ye,A.pM,A.a2O,A.a2R,A.a2Q,A.a2S,A.a2P,A.JX,A.WM,A.adM,A.jL,A.pW,A.IO,A.kJ,A.VE,A.Te,A.aoB,A.VU,A.nM,A.W9,A.ZL,A.Wt,A.Wu,A.Wv,A.Ww,A.Wy,A.Zo,A.a_2,A.Wz,A.WC,A.WF,A.WH,A.WL,A.Xo,A.Xq,A.XD,A.XH,A.XS,A.XT,A.XY,A.nO,A.Y4,A.Y9,A.auS,A.Yp,A.acP,A.acB,A.acA,A.acO,A.bA,A.YY,A.mW,A.wy,A.OQ,A.Z4,A.ZE,A.NG,A.Ws,A.Ib,A.bB,A.cr,A.Qh,A.ZW,A.ZT,A.ZV,A.Zq,A.a_8,A.a_a,A.a_b,A.a_q,A.Dc,A.nd,A.a_w,A.zH,A.a0f,A.a0h,A.a0s,A.an_,A.T3,A.a9M,A.ai5,A.VF,A.a1P,A.a1Q,A.Zp,A.a1R,A.a1S,A.Gi,A.Z9,A.a2m,A.aoM,A.aoN,A.aoO,A.a7x,A.a2r,A.aAZ,A.a2K,A.a55,A.a2N,A.a2W,A.a31,A.a3b,A.a3f,A.z3,A.Y6,A.a45,A.a3h,A.a3i,A.yp,A.a3k,A.a3L,A.hK,A.DP,A.AH,A.cs,A.OA,A.a9g,A.Wq,A.att,A.de,A.auk,A.aek,A.afu,A.WB,A.a_z,A.Cy,A.ki,A.Z0,A.l6,A.fw,A.jm,A.Z1,A.ww,A.LB,A.mX,A.a2G,A.xd,A.j3,A.aBd,A.aBh,A.uQ,A.uM,A.nA,A.fl,A.a3a,A.ap7,A.aur,A.ays,A.aBJ,A.Gv,A.xy,A.a_H,A.d6,A.I9,A.d7,A.Ny,A.ut,A.arY,A.awD,A.Aj,A.LI,A.Zh,A.PO,A.wF,A.a_3,A.a4F,A.aT,A.es,A.at,A.px,A.aAv,A.a2_,A.nu,A.Sh,A.a4Y,A.fF,A.Eo,A.eS,A.Tq,A.anM,A.pD,A.a1X,A.a2n,A.alA,A.kk,A.alS,A.iX,A.GG,A.ER,A.Jd,A.yX,A.aje,A.fi,A.yn,A.uv,A.Gp,A.Ts,A.ao2,A.AU,A.a94,A.cS,A.a1Y,A.a20,A.nJ,A.kY,A.nZ,A.ky,A.a21,A.ao0,A.LP,A.uE,A.oj,A.a6J,A.a7H,A.xQ,A.a7X,A.a9r,A.ado,A.Ze,A.aer,A.CQ,A.PI,A.agu,A.Zf,A.ly,A.E5,A.Dg,A.apo,A.ag3,A.ag5,A.apb,A.apf,A.ahZ,A.Dh,A.om,A.tp,A.a0u,A.a0v,A.aks,A.dy,A.dR,A.y7,A.U5,A.aag,A.a6z,A.lX,A.a2Y,A.pP,A.a_6,A.aBc,A.Gc,A.aql,A.akm,A.dF,A.aqX,A.aqj,A.ua,A.aqm,A.Uz,A.Gb,A.a4K,A.V0,A.arE,A.VD,A.zj,A.jf,A.QK,A.qB,A.eH,A.GI,A.dZ,A.Ne,A.NV,A.UO,A.il,A.aAj,A.YH,A.W1,A.ad4,A.Yw,A.Yu,A.YL,A.yW,A.YA,A.yR,A.XE,A.aar,A.a4O,A.a4N,A.Z2,A.a82,A.QJ,A.aym,A.amk,A.oQ,A.rE,A.ao1,A.avW,A.nQ,A.pd,A.ea,A.MB,A.iY,A.zl,A.NL,A.lx,A.aqE,A.te,A.Dd,A.np,A.UW,A.qa,A.a1i,A.nc,A.uU,A.aiS,A.JN,A.DN,A.ahH,A.ajK,A.lN,A.j_,A.jO,A.SU,A.Q2,A.Q3,A.Td,A.ans,A.aC7,A.aoP,A.nq,A.Yd,A.ij,A.as0,A.xK,A.Tn,A.Tk,A.ab8,A.a2g,A.a4p,A.a28,A.a2b,A.Xv,A.U4,A.UD,A.Tp,A.kE,A.Gl,A.j1,A.ei,A.Hi,A.yx,A.a3O,A.aoV,A.a8a,A.Uk,A.qW,A.FU,A.VX,A.apA,A.ST,A.a_v,A.amz,A.tZ,A.fh,A.d9,A.wm,A.a1s,A.aeb,A.dr,A.auq,A.a6D,A.aei,A.lo,A.aej,A.kf,A.Mh,A.Mi,A.a7w,A.B3,A.De,A.Fx,A.DL,A.ajJ,A.DM,A.a9N,A.apr,A.aj9,A.Rk,A.cu,A.apQ,A.Rm,A.apP,A.vO,A.Ri,A.au,A.nC,A.Qc,A.eq,A.Q6,A.e2,A.Vn,A.uL,A.XA,A.kU,A.RT,A.Ea,A.aoZ,A.TZ,A.xZ,A.aeC,A.h1,A.kV,A.kz,A.U1,A.app,A.as2,A.Pu,A.PN,A.iV,A.ayB,A.a_y,A.auT,A.arX,A.a2Z,A.a2X,A.V9,A.Eh,A.S_,A.nV,A.zn,A.arT,A.Nz,A.arW,A.arV,A.az5,A.ab1,A.bY,A.i6,A.Pp,A.O2,A.jY,A.pl,A.iU,A.fD,A.aug,A.ayA,A.DT,A.afH,A.Y,A.kg,A.lB,A.FO,A.ru,A.Gf,A.G9,A.up,A.cG,A.JU,A.kC,A.a1f,A.a41,A.ya,A.BC,A.FW,A.yb,A.mC,A.Vl,A.Ul,A.On,A.Va,A.iC,A.tl,A.uB,A.tk,A.bd,A.ps,A.eG,A.kI,A.eu,A.pX,A.Vw,A.asu,A.Vq,A.asb,A.asv,A.asw,A.Vx,A.a5t,A.a4f,A.asc,A.Vu,A.Nf,A.a4c,A.GK,A.Vv]) +p(A.ou,[A.N6,A.a6u,A.a6s,A.a96,A.aCo,A.aCF,A.aCE,A.afh,A.afi,A.afe,A.aff,A.afg,A.aDH,A.aDG,A.aoL,A.afz,A.aCI,A.a9a,A.N7,A.aCM,A.a9e,A.a9y,A.a9z,A.a9t,A.a9u,A.a9s,A.a9w,A.a9x,A.a9v,A.aaO,A.aaR,A.aDe,A.aEw,A.aEv,A.adf,A.adg,A.adh,A.adi,A.adj,A.adk,A.adn,A.adl,A.aDM,A.aDN,A.aDO,A.aDL,A.ayz,A.aiK,A.af6,A.af7,A.af4,A.af5,A.aE2,A.acT,A.acR,A.aDR,A.aDS,A.aCQ,A.aCR,A.aCS,A.aCT,A.aCU,A.aCV,A.aCW,A.aCX,A.age,A.agf,A.agg,A.agi,A.agp,A.agt,A.aEp,A.ai7,A.aoC,A.aoD,A.acC,A.acl,A.ach,A.aci,A.acj,A.ack,A.acg,A.ace,A.acn,A.amW,A.ats,A.ayI,A.ayK,A.ayL,A.ayM,A.ayN,A.ayO,A.ayP,A.aBB,A.aBC,A.aBD,A.aBE,A.aBF,A.ay8,A.ay9,A.aya,A.ayb,A.ayc,A.ayd,A.akp,A.akq,A.aku,A.a6a,A.a6b,A.afQ,A.afR,A.anH,A.anI,A.ao8,A.acq,A.aan,A.ahS,A.aq1,A.aq9,A.aqa,A.aqb,A.aqc,A.aqe,A.a8s,A.ac7,A.ac8,A.aah,A.aai,A.aaj,A.aak,A.afq,A.afr,A.afo,A.a6o,A.acJ,A.acK,A.afl,A.abb,A.aDs,A.aa4,A.aa7,A.adA,A.a8w,A.PA,A.Us,A.aga,A.ag9,A.aDZ,A.aE0,A.aAY,A.at4,A.at3,A.aCi,A.aB7,A.aB8,A.adG,A.adB,A.avK,A.avR,A.apl,A.apk,A.azR,A.avV,A.auM,A.axy,A.aho,A.ap3,A.ap6,A.awu,A.aBP,A.aCA,A.aCB,A.ava,A.avb,A.aE8,A.aEr,A.aEs,A.aDz,A.agd,A.aDq,A.aew,A.aeu,A.a8j,A.a8l,A.a8o,A.aCs,A.aEj,A.atm,A.a7_,A.a70,A.a72,A.a6M,A.aov,A.aow,A.aox,A.aoy,A.aoz,A.akT,A.akU,A.akV,A.akX,A.akY,A.al_,A.al0,A.al1,A.al2,A.al3,A.al4,A.axw,A.axx,A.agF,A.aDF,A.aDE,A.aDD,A.agH,A.agI,A.ayF,A.ayD,A.ajn,A.ajo,A.ajB,A.ajs,A.ajt,A.aju,A.az4,A.aAi,A.a6U,A.aaa,A.aiq,A.ay0,A.aDl,A.a7d,A.a7a,A.a7b,A.a7i,A.a7e,A.atn,A.a7k,A.a7j,A.a7s,A.a7r,A.a7q,A.ati,A.atf,A.ath,A.aw7,A.a8F,A.a8G,A.a8H,A.a8S,A.a8X,A.a8Y,A.a8Z,A.a9_,A.a90,A.a91,A.a92,A.a8I,A.a8J,A.a8K,A.a8L,A.a8M,A.a8N,A.a8O,A.a8P,A.a8Q,A.a8R,A.a8T,A.a8U,A.a8V,A.a8W,A.awF,A.awI,A.awJ,A.awO,A.awP,A.awQ,A.awL,A.awK,A.awX,A.awR,A.awZ,A.awY,A.ax_,A.ax0,A.ax4,A.ax6,A.ax8,A.ax5,A.ax7,A.ax1,A.ax2,A.agQ,A.axf,A.axd,A.axb,A.axg,A.axe,A.agR,A.agS,A.agT,A.agU,A.agV,A.axp,A.axq,A.axo,A.axn,A.ah5,A.agX,A.agW,A.agZ,A.agY,A.ah_,A.ah0,A.ajx,A.ajl,A.ajA,A.ayX,A.ayY,A.az3,A.az2,A.anb,A.aAa,A.aA9,A.aAc,A.aAb,A.aAf,A.agD,A.aut,A.auA,A.aus,A.aux,A.auy,A.auB,A.auK,A.azf,A.azg,A.aze,A.azh,A.azi,A.aa3,A.aiF,A.auL,A.acW,A.acX,A.acY,A.aDA,A.ap8,A.apR,A.avS,A.ajU,A.ajV,A.ak2,A.a6Q,A.a6R,A.a6S,A.ab3,A.ab4,A.ab5,A.ac2,A.ac3,A.ac4,A.a6k,A.a6l,A.a6m,A.ahu,A.au_,A.au0,A.au1,A.atD,A.atE,A.atF,A.atQ,A.atT,A.atU,A.atV,A.atW,A.atX,A.atY,A.atZ,A.atG,A.atH,A.atI,A.atR,A.atB,A.atS,A.atA,A.atJ,A.atK,A.atL,A.atM,A.atN,A.atO,A.atP,A.aud,A.aue,A.auc,A.aua,A.au9,A.aub,A.aw5,A.aw2,A.aw4,A.aw3,A.avd,A.ave,A.avg,A.avf,A.avh,A.avi,A.avk,A.avj,A.ayn,A.ayo,A.ayq,A.ayr,A.ayp,A.awl,A.awi,A.ahb,A.aqG,A.axU,A.axF,A.axG,A.axH,A.axI,A.ahy,A.aCa,A.aCb,A.aCc,A.aCd,A.aj1,A.amZ,A.axN,A.axK,A.axM,A.axL,A.axJ,A.aAQ,A.azv,A.azt,A.azs,A.aAK,A.axW,A.axX,A.axY,A.aB5,A.aB2,A.aB3,A.aB4,A.aB1,A.aB_,A.aB9,A.aBb,A.aBa,A.azw,A.azx,A.azz,A.azA,A.asX,A.ar6,A.auo,A.aun,A.aup,A.a9h,A.a9i,A.a9j,A.aD8,A.aCP,A.ah7,A.au3,A.afF,A.afA,A.a6A,A.afJ,A.afV,A.afU,A.aAC,A.aAD,A.aAE,A.aqV,A.aqQ,A.aqP,A.aqY,A.ady,A.am6,A.am2,A.a7S,A.alc,A.alb,A.al9,A.ai1,A.ai0,A.alo,A.alp,A.alk,A.all,A.alm,A.akR,A.alu,A.alv,A.alr,A.alB,A.alP,A.alR,A.alQ,A.alU,A.alT,A.alZ,A.alY,A.and,A.anc,A.ara,A.ao6,A.ao4,A.aAA,A.aAz,A.aAx,A.aAy,A.aCp,A.aoa,A.ao9,A.anS,A.anW,A.anU,A.anX,A.anV,A.anY,A.anZ,A.a8f,A.ajH,A.a6F,A.at2,A.aok,A.auO,A.adp,A.adr,A.adq,A.a7G,A.ahM,A.amf,A.amg,A.ame,A.acG,A.aq6,A.aqA,A.aqz,A.aqB,A.ayG,A.aCN,A.a6f,A.a6i,A.a6g,A.a6h,A.a6j,A.avy,A.avv,A.avt,A.avu,A.avx,A.aC3,A.avE,A.at7,A.atc,A.aBI,A.aBH,A.a9m,A.aC6,A.aC5,A.a9P,A.aaf,A.abN,A.abd,A.abl,A.abM,A.abp,A.abk,A.abc,A.aby,A.aAk,A.ad7,A.aCJ,A.ada,A.adc,A.adb,A.azb,A.aat,A.aau,A.aaw,A.aax,A.aas,A.aaE,A.aaF,A.aaG,A.aaH,A.az8,A.az9,A.az6,A.akI,A.awc,A.abX,A.abV,A.abU,A.abY,A.ac_,A.abS,A.abW,A.abT,A.aj8,A.ai6,A.adR,A.adW,A.adY,A.ae_,A.ae1,A.adT,A.adV,A.auV,A.auW,A.auX,A.av_,A.av0,A.av1,A.aeB,A.aez,A.aey,A.afs,A.aw9,A.afO,A.afN,A.afM,A.asD,A.asE,A.asF,A.asG,A.asH,A.asI,A.asJ,A.asK,A.asQ,A.asR,A.asS,A.asT,A.asU,A.asV,A.asL,A.asM,A.asN,A.asO,A.asP,A.afS,A.aD_,A.aD0,A.aD1,A.axC,A.axD,A.ahi,A.ahk,A.ahh,A.aqF,A.ahl,A.ahD,A.ahC,A.amO,A.amN,A.aiD,A.azT,A.azW,A.aiw,A.aiC,A.aiv,A.aiB,A.aiR,A.azD,A.azC,A.azm,A.azn,A.aj0,A.azN,A.aA0,A.azZ,A.a6P,A.arx,A.aru,A.ahc,A.ay6,A.ay3,A.ahX,A.anm,A.ann,A.ano,A.anp,A.anu,A.anv,A.anw,A.any,A.anF,A.anC,A.anE,A.aAl,A.anJ,A.akz,A.akv,A.akw,A.akx,A.akB,A.akD,A.akE,A.ail,A.aim,A.ain,A.aij,A.aik,A.aio,A.aip,A.aoT,A.anP,A.anQ,A.anO,A.anN,A.aAt,A.aBj,A.aBl,A.aBn,A.aBp,A.aBr,A.arD,A.aDd,A.as3,A.atv,A.atx,A.a7M,A.alD,A.alG,A.alH,A.alO,A.alI,A.alJ,A.alK,A.alF,A.alL,A.alM,A.a8c,A.apF,A.apE,A.amy,A.amx,A.amC,A.amD,A.amE,A.amB,A.amA,A.aec,A.aed,A.amH,A.amJ,A.amK,A.amL,A.amI,A.azX,A.ae9,A.aea,A.aCH,A.aDW,A.aDV,A.a7v,A.a7V,A.a7W,A.a89,A.a8v,A.ahF,A.aDK,A.ayk,A.aAH,A.aAI,A.aCe,A.a9R,A.a9S,A.aDf,A.aDa,A.aD5,A.aD9,A.akJ,A.akK,A.akM,A.akN,A.akO,A.aEz,A.anL,A.awd,A.aeE,A.aeD,A.aeF,A.aeH,A.aeJ,A.aeG,A.aeX,A.ahK,A.ahL,A.aDC,A.ad_,A.ad0,A.aC_,A.aC0,A.aBY,A.arU,A.a9V,A.apH,A.apI,A.apJ,A.apK,A.apL,A.apM,A.apN,A.apO,A.azL,A.azK,A.apB,A.a9F,A.aCh,A.asj,A.ast,A.ash,A.asd,A.ase,A.asg,A.asf,A.asq,A.ask,A.asi,A.asl,A.ass,A.asp,A.asn,A.asm,A.aso,A.aDJ]) +p(A.N6,[A.a6t,A.aoH,A.aoI,A.aoJ,A.aoK,A.adw,A.adx,A.a8q,A.a9d,A.adm,A.acD,A.ajg,A.afd,A.apw,A.apx,A.aem,A.aen,A.a7Z,A.a8_,A.aE4,A.aE5,A.acU,A.aCm,A.agq,A.agr,A.ags,A.agl,A.agm,A.agn,A.acm,A.aE7,A.ajM,A.ayJ,A.ajT,A.akr,A.akt,A.a68,A.amM,A.a69,A.anG,A.acp,A.acs,A.acr,A.ahT,A.aqd,A.aqf,A.af9,A.afa,A.afb,A.amU,A.afp,A.acI,A.aq5,A.aca,A.acb,A.a8y,A.aEk,A.ak9,A.at5,A.at6,A.aBw,A.aBv,A.adF,A.adE,A.adD,A.avG,A.avN,A.avM,A.avJ,A.avI,A.avH,A.avQ,A.avP,A.avO,A.apm,A.apj,A.aAU,A.aAT,A.atz,A.ayC,A.aCn,A.aD6,A.azQ,A.azP,A.arQ,A.arP,A.a8B,A.a8C,A.agc,A.aDr,A.a81,A.aev,A.a8n,A.atl,A.a75,A.aAF,A.akW,A.akZ,A.axu,A.axv,A.agK,A.agL,A.ayE,A.aki,A.aAg,A.aAh,A.an8,A.a6Y,A.a8u,A.a6v,A.a6w,A.at_,A.at0,A.ay_,A.af1,A.a77,A.a76,A.a78,A.a7c,A.a7f,A.a7g,A.a7m,A.a7n,A.a7o,A.atd,A.ate,A.agP,A.agO,A.awE,A.awH,A.awG,A.awN,A.awM,A.awU,A.awV,A.awW,A.awT,A.awS,A.axc,A.ajv,A.ajj,A.ajy,A.ayW,A.ayV,A.ayZ,A.ayU,A.ayT,A.ayQ,A.ayR,A.ayS,A.ana,A.an9,A.aA8,A.a8D,A.auu,A.auv,A.auF,A.auE,A.auD,A.aa_,A.aa0,A.aa1,A.auC,A.azj,A.azk,A.auJ,A.auH,A.auI,A.auG,A.aDb,A.aCk,A.acV,A.a7I,A.a8z,A.adL,A.adK,A.adO,A.adP,A.adu,A.ads,A.adt,A.ahf,A.ahe,A.ahd,A.aaU,A.aaZ,A.ab_,A.aaV,A.aaW,A.aaX,A.aaY,A.ajZ,A.ak7,A.apW,A.apX,A.apY,A.apZ,A.aq_,A.a7D,A.a7E,A.a7B,A.a7C,A.a7z,A.a7A,A.a7y,A.adN,A.asA,A.a6q,A.asZ,A.aht,A.au2,A.atC,A.ab6,A.aCL,A.aCK,A.awh,A.awk,A.awm,A.awg,A.awj,A.aBf,A.aBe,A.aBg,A.ahw,A.ahx,A.avl,A.an0,A.an2,A.an1,A.axT,A.axS,A.axR,A.axP,A.axQ,A.axO,A.aAq,A.aAp,A.aAr,A.aAO,A.aAP,A.aAM,A.aAN,A.aAL,A.azu,A.axV,A.aBt,A.aBs,A.ar8,A.ard,A.are,A.arb,A.arc,A.arl,A.arm,A.arn,A.aro,A.arp,A.arq,A.ars,A.arr,A.arj,A.ark,A.arg,A.arh,A.ari,A.afw,A.afv,A.axA,A.afC,A.afD,A.ai8,A.aqI,A.aqK,A.aqJ,A.aqL,A.aqM,A.aqN,A.aqO,A.aqS,A.aqT,A.aqU,A.aqR,A.aqZ,A.ar_,A.akS,A.am4,A.am5,A.al6,A.al8,A.al7,A.ala,A.agz,A.agA,A.ai4,A.ai3,A.ai2,A.aj5,A.aj4,A.aj3,A.aln,A.alq,A.als,A.alC,A.anf,A.ang,A.anh,A.a8e,A.aoj,A.akn,A.amc,A.amd,A.amb,A.apT,A.aqC,A.aqD,A.asB,A.avw,A.avr,A.avs,A.avq,A.aC4,A.avD,A.avC,A.atb,A.at9,A.ata,A.at8,A.ami,A.amj,A.as4,A.aml,A.amm,A.abh,A.abA,A.abB,A.abC,A.abD,A.abE,A.abF,A.abG,A.abH,A.abI,A.abJ,A.abK,A.abL,A.abi,A.abj,A.abe,A.abg,A.abq,A.abs,A.abr,A.abO,A.abP,A.abQ,A.abm,A.abn,A.abo,A.abu,A.abw,A.abv,A.abt,A.avm,A.avn,A.avo,A.avp,A.a83,A.a9G,A.a9H,A.adQ,A.adS,A.adX,A.adZ,A.ae0,A.ae2,A.adU,A.auZ,A.auY,A.aw_,A.avZ,A.avY,A.aw8,A.awa,A.awb,A.a6p,A.awz,A.awA,A.awB,A.axB,A.axZ,A.ahU,A.azV,A.azU,A.azS,A.aix,A.aiy,A.aiz,A.aiA,A.aiu,A.ayt,A.aiW,A.aiV,A.aiX,A.aiU,A.aiT,A.ayu,A.ayw,A.ayv,A.avT,A.azM,A.amh,A.aA3,A.aA4,A.aA2,A.azY,A.aA1,A.aA_,A.au4,A.arv,A.arw,A.ay1,A.ahW,A.ahV,A.anl,A.aAu,A.ant,A.anB,A.anD,A.akC,A.aky,A.akA,A.aia,A.aib,A.aic,A.aid,A.aie,A.aif,A.aig,A.aih,A.aii,A.aoo,A.aoq,A.aor,A.aoR,A.aoS,A.aoQ,A.aoU,A.ar2,A.ar4,A.ar3,A.aAs,A.aBi,A.aBk,A.aBm,A.aBo,A.aBq,A.asW,A.aDc,A.aBT,A.atu,A.alN,A.alE,A.apG,A.ams,A.amt,A.ayx,A.acv,A.a9Z,A.ahs,A.ahE,A.awe,A.aeW,A.aeK,A.aeR,A.aeS,A.aeT,A.aeU,A.aeP,A.aeQ,A.aeL,A.aeM,A.aeN,A.aeO,A.aeV,A.aw0,A.aDB,A.ad1,A.aC1,A.aBU,A.aBX,A.aBW,A.ab2,A.azI,A.azH,A.azJ,A.aEg,A.aEf]) +p(A.av7,[A.AO,A.nb,A.ts,A.vu,A.CG,A.Na,A.tA,A.rb,A.An,A.Hb,A.kt,A.tY,A.a6c,A.rD,A.Fn,A.BO,A.p2,A.wi,A.He,A.Yc,A.yg,A.Gz,A.bT,A.dU,A.N1,A.Vb,A.DS,A.ajb,A.CP,A.y4,A.y5,A.Rf,A.cB,A.vC,A.a7O,A.rv,A.l5,A.Al,A.aa8,A.nh,A.lF,A.xh,A.OX,A.pn,A.kD,A.G5,A.pN,A.UA,A.m_,A.G4,A.Mr,A.a7T,A.uw,A.vr,A.vo,A.UP,A.vm,A.Os,A.akj,A.Cq,A.hM,A.l3,A.yH,A.LH,A.a3s,A.uK,A.Bs,A.lf,A.eh,A.P1,A.uN,A.HF,A.O1,A.Ci,A.HG,A.ar9,A.yM,A.a86,A.auf,A.O4,A.Yq,A.aw6,A.q4,A.acQ,A.aha,A.pa,A.cF,A.asC,A.ip,A.aAR,A.TL,A.zw,A.aot,A.FE,A.aB6,A.zB,A.tj,A.anj,A.xw,A.LX,A.Vc,A.vl,A.Mn,A.Mu,A.Mq,A.wv,A.Ge,A.ar1,A.FJ,A.xu,A.Zb,A.OO,A.Q9,A.wP,A.r7,A.Cp,A.NC,A.pE,A.Fj,A.yj,A.xN,A.Fk,A.Gj,A.P9,A.U7,A.a8b,A.F5,A.as6,A.as7,A.u5,A.aab,A.wE,A.PH,A.rV,A.iO,A.Un,A.aoX,A.aoY,A.hA,A.aq2,A.C8,A.jz,A.UZ,A.Bb,A.ld,A.oY,A.V1,A.oG,A.ad5,A.pS,A.UX,A.aAS,A.yS,A.wq,A.QT,A.f_,A.ait,A.K9,A.xD,A.fm,A.Jc,A.z_,A.a2A,A.zy,A.amF,A.Tg,A.u7,A.Tj,A.Th,A.Fb,A.TT,A.vG,A.ais,A.dT,A.agw,A.tM,A.SF,A.m9,A.Rl,A.x5,A.oP,A.Cl,A.eM,A.Rg,A.FP,A.FQ,A.Gq,A.kd,A.uq,A.ka,A.dx,A.nI]) +q(A.a8t,A.a1z) +p(A.MI,[A.AX,A.vz,A.MQ,A.MX,A.vy]) +p(A.n,[A.Dk,A.MV,A.eZ,A.nN,A.Uh,A.kS,A.a8,A.hr,A.ba,A.kb,A.uo,A.nv,A.FB,A.mQ,A.dG,A.uP,A.VG,A.a2B,A.fn,A.ta,A.BB,A.EY,A.hz,A.b5,A.Co,A.a4z,A.D8,A.Vt]) +p(A.MN,[A.Hc,A.Hd]) +q(A.AY,A.Mv) +p(A.fz,[A.vN,A.Rt]) +p(A.vN,[A.SQ,A.M3,A.N2,A.N4,A.N3,A.QS,A.Gy,A.Pr,A.N9]) +q(A.QQ,A.Gy) +p(A.TC,[A.ML,A.MM,A.MK]) +p(A.N7,[A.apz,A.aDx,A.aDv,A.ajf,A.aE3,A.aDT,A.ago,A.agk,A.acf,A.apc,A.ap1,A.aCv,A.aEt,A.afm,A.aa5,A.au5,A.a8x,A.a9L,A.ak8,A.ag8,A.aE_,A.aCj,A.aDh,A.adH,A.adC,A.avL,A.azO,A.avU,A.ah9,A.ahn,A.ahq,A.ap2,A.ap5,A.ap4,A.awt,A.awx,A.aiH,A.arK,A.arH,A.arI,A.arJ,A.aBO,A.aBN,A.aCz,A.ahN,A.ahO,A.ahP,A.ahQ,A.amP,A.amQ,A.apg,A.aph,A.api,A.asz,A.a6H,A.a6I,A.a8i,A.a8k,A.a8m,A.aCr,A.aCt,A.a71,A.a74,A.a6L,A.axt,A.agM,A.agN,A.ajp,A.ajr,A.akh,A.akg,A.akf,A.an7,A.a6V,A.a6Z,A.a6W,A.a6X,A.ael,A.a6x,A.at1,A.acL,A.a8E,A.af_,A.af2,A.af0,A.aDj,A.aDk,A.aDi,A.aDm,A.aDn,A.a79,A.a7h,A.a7l,A.a7p,A.atj,A.atk,A.atg,A.ax9,A.axa,A.ax3,A.axl,A.axi,A.axj,A.axh,A.axk,A.aEa,A.axm,A.axs,A.axr,A.ah4,A.ah1,A.ah2,A.ah3,A.ajw,A.ajk,A.ajz,A.az_,A.az0,A.az1,A.aAd,A.aAe,A.a9Y,A.ayh,A.azl,A.azd,A.ajY,A.ahr,A.axE,A.azo,A.azp,A.aC8,A.aC9,A.aui,A.an3,A.aA6,A.aBu,A.azy,A.ar5,A.aum,A.afx,A.afE,A.afB,A.a6B,A.aiP,A.ai9,A.am3,A.al5,A.ald,A.alg,A.alf,A.ai_,A.ajD,A.ajC,A.ajE,A.ajF,A.alj,A.alt,A.alw,A.alx,A.alX,A.ale,A.ali,A.alh,A.aly,A.alz,A.ane,A.aAw,A.aob,A.aoc,A.anT,A.a8g,A.auP,A.apd,A.avF,A.abf,A.abx,A.abz,A.aaz,A.aaB,A.aaA,A.aaC,A.aaD,A.aav,A.aay,A.aza,A.az7,A.akG,A.akH,A.abZ,A.aeA,A.avX,A.aex,A.aal,A.aw1,A.ayj,A.azB,A.aAV,A.aCf,A.aCg,A.ay5,A.ay4,A.ay2,A.anx,A.aAo,A.aAm,A.aAn,A.anA,A.aop,A.as_,A.azr,A.azq,A.atw,A.a7N,A.amr,A.amu,A.amv,A.amw,A.afL,A.aef,A.aeg,A.aee,A.a7u,A.ahG,A.aEl,A.aEm,A.aD3,A.aeI,A.am1,A.am0,A.am_,A.ad2,A.ad3,A.aBZ,A.asr]) +p(A.bX,[A.My,A.fa,A.iK,A.nD,A.PC,A.V2,A.Xn,A.SZ,A.Y0,A.wC,A.qA,A.jZ,A.QH,A.uA,A.uz,A.jE,A.Nd,A.Yt]) +q(A.Of,A.aaI) +p(A.fa,[A.OW,A.Cd,A.Ce]) +p(A.dJ,[A.ee,A.Rp]) +p(A.ee,[A.DV,A.a_B,A.a_A,A.DW,A.DY,A.DZ,A.E_,A.E0,A.E1,A.E2]) +p(A.ac9,[A.mu,A.XJ]) +q(A.DX,A.a_B) +q(A.Rn,A.a_A) +q(A.aaJ,A.XJ) +q(A.JT,A.apV) +q(A.Rq,A.Rp) +p(A.du,[A.BF,A.DO,A.Ra,A.Re,A.Rc,A.Rb,A.Rd]) +p(A.BF,[A.QY,A.QX,A.QW,A.R1,A.R3,A.R9,A.R7,A.R6,A.R_,A.R2,A.QZ,A.R5,A.R8,A.R0,A.R4]) +p(A.w5,[A.P8,A.wp]) +q(A.P7,A.wp) +p(A.lk,[A.H1,A.Ir]) +p(A.Oh,[A.wX,A.wV]) +q(A.Pg,A.Ph) +p(A.a7Y,[A.Dj,A.Fy]) +q(A.Ok,A.ajI) +p(A.atr,[A.a4L,A.aBA,A.a4E]) +q(A.ayH,A.a4L) +q(A.ay7,A.a4E) +p(A.RN,[A.a93,A.NS,A.afG,A.afP,A.ajP,A.anz,A.adI,A.a84,A.aq7]) +p(A.no,[A.xC,A.wg,A.CS,A.td,A.G3]) +p(A.ao_,[A.aam,A.ahR]) +q(A.Br,A.Xw) +p(A.Br,[A.aof,A.P5,A.T_]) +p(A.B,[A.mi,A.yy,A.nF]) +q(A.Z7,A.mi) +q(A.UY,A.Z7) +q(A.xe,A.aj6) +p(A.y6,[A.ME,A.SR]) +p(A.aqh,[A.agB,A.acz,A.arS]) +p(A.aqg,[A.aul,A.p1,A.qO]) +q(A.Zi,A.aul) +q(A.Zj,A.Zi) +q(A.Zk,A.Zj) +q(A.km,A.Zk) +q(A.O8,A.km) +p(A.acc,[A.aiG,A.act,A.aaT,A.ae6,A.aiE,A.ak6,A.anK,A.aoh]) +p(A.acd,[A.aiI,A.aqx,A.aiL,A.aac,A.aji,A.ac0,A.arL,A.Qz]) +p(A.P5,[A.afn,A.a6n,A.acH]) +p(A.aqk,[A.aqr,A.aqy,A.aqt,A.aqw,A.aqs,A.aqv,A.aqi,A.aqo,A.aqu,A.aqq,A.aqp,A.aqn]) +p(A.aaq,[A.Nu,A.P0]) +p(A.ac1,[A.aa6,A.adz]) +q(A.TE,A.wd) +q(A.Og,A.TE) +p(J.wz,[J.CJ,J.CL,J.e,J.rR,J.rS,J.oV,J.lr]) +p(J.e,[J.p_,J.q,A.Dl,A.Dq,A.ab,A.LA,A.AD,A.k4,A.cD,A.X8,A.hd,A.Nw,A.NX,A.XL,A.BA,A.XN,A.O0,A.aB,A.Y7,A.hS,A.Pd,A.YR,A.Q4,A.Qn,A.ZX,A.ZY,A.i2,A.ZZ,A.a_d,A.i4,A.a_J,A.a1w,A.ia,A.a2s,A.ib,A.a2y,A.fY,A.a3c,A.UK,A.ie,A.a3l,A.US,A.V5,A.a4r,A.a4x,A.a4G,A.a51,A.a53,A.iL,A.Zm,A.iS,A.a_n,A.RG,A.a2D,A.j4,A.a3t,A.LT,A.W_]) +p(J.p_,[J.RD,J.m4,J.ls]) +q(J.ag6,J.q) +p(J.oV,[J.wB,J.CM]) +p(A.kS,[A.qY,A.KC,A.mB,A.mA]) +q(A.HO,A.qY) +q(A.H9,A.KC) +q(A.ft,A.H9) +p(A.aM,[A.mz,A.yz,A.fx,A.nP,A.Zc]) +q(A.fu,A.yy) +p(A.a8,[A.af,A.hj,A.aX,A.uO,A.Il,A.nX,A.uW,A.JG]) +p(A.af,[A.ac,A.R,A.ZC,A.cO,A.CY,A.Zd,A.HX]) +q(A.rj,A.hr) +q(A.BM,A.uo) +q(A.w3,A.nv) +q(A.BL,A.mQ) +q(A.cw,A.yz) +p(A.io,[A.a0C,A.a0D,A.a0E]) +p(A.a0C,[A.dj,A.zq,A.a0F,A.a0G]) +p(A.a0D,[A.IQ,A.a0H,A.a0I,A.IR]) +p(A.a0E,[A.a0J,A.IS,A.a0K,A.a0L]) +q(A.Kj,A.wQ) +q(A.kH,A.Kj) +q(A.r5,A.kH) +p(A.vL,[A.bs,A.bz]) +p(A.jB,[A.Bc,A.zv]) +p(A.Bc,[A.fO,A.fb]) +q(A.mY,A.PA) +q(A.DC,A.nD) +p(A.Us,[A.U8,A.vq]) +p(A.fx,[A.CN,A.rT,A.Ii]) +p(A.Dq,[A.Dm,A.wZ]) +p(A.wZ,[A.Iz,A.IB]) +q(A.IA,A.Iz) +q(A.pc,A.IA) +q(A.IC,A.IB) +q(A.iR,A.IC) +p(A.pc,[A.Dn,A.QB]) +p(A.iR,[A.QC,A.Dp,A.QD,A.Dr,A.Ds,A.Dt,A.tt]) +q(A.Kd,A.Y0) +p(A.eg,[A.zx,A.FL,A.HP,A.yT]) +q(A.m8,A.zx) +q(A.j5,A.m8) +q(A.uJ,A.q1) +q(A.yJ,A.uJ) +p(A.q0,[A.JW,A.GS]) +q(A.bI,A.yK) +q(A.q_,A.JP) +q(A.ma,A.Xz) +q(A.a1q,A.a4k) +p(A.nP,[A.q5,A.Hw]) +p(A.zv,[A.mb,A.im]) +p(A.HD,[A.HC,A.HE]) +p(A.a2w,[A.hF,A.h3]) +p(A.a2v,[A.JH,A.JI]) +q(A.FH,A.JH) +p(A.mf,[A.nY,A.JK,A.uV]) +q(A.JJ,A.JI) +q(A.y_,A.JJ) +p(A.Ub,[A.JS,A.aBK,A.ato]) +q(A.Ia,A.JS) +p(A.N8,[A.rk,A.a7t,A.agb,A.amG]) +p(A.rk,[A.LM,A.PK,A.V7]) +p(A.bl,[A.a3R,A.a3Q,A.Mf,A.Me,A.HV,A.PF,A.PE,A.V8,A.GD,A.Pa,A.a1u,A.a1t,A.Vs]) +p(A.a3R,[A.LO,A.PM]) +p(A.a3Q,[A.LN,A.PL]) +p(A.a87,[A.av8,A.aAG,A.atq,A.H5,A.WA,A.Zg,A.a3W]) +q(A.aBQ,A.atq) +q(A.PD,A.wC) +q(A.aws,A.MF) +q(A.awv,A.aww) +q(A.awy,A.Zg) +q(A.a5p,A.a3V) +q(A.aBR,A.a5p) +p(A.jZ,[A.xp,A.CA]) +q(A.Xp,A.Km) +p(A.ab,[A.bE,A.Ox,A.rJ,A.i9,A.JE,A.id,A.fZ,A.K5,A.Ve,A.LV,A.ol]) +p(A.bE,[A.aN,A.la,A.mH]) +q(A.aR,A.aN) +p(A.aR,[A.LE,A.LK,A.OY,A.Tm]) +q(A.Ni,A.k4) +q(A.vP,A.X8) +p(A.hd,[A.Nj,A.Nk]) +q(A.XM,A.XL) +q(A.Bz,A.XM) +q(A.XO,A.XN) +q(A.NZ,A.XO) +q(A.hR,A.AD) +q(A.Y8,A.Y7) +q(A.Ov,A.Y8) +q(A.YS,A.YR) +q(A.rI,A.YS) +q(A.oM,A.rJ) +q(A.Qr,A.ZX) +q(A.Qs,A.ZY) +q(A.a__,A.ZZ) +q(A.Qt,A.a__) +q(A.a_e,A.a_d) +q(A.DB,A.a_e) +q(A.a_K,A.a_J) +q(A.RF,A.a_K) +q(A.lG,A.aB) +q(A.SW,A.a1w) +q(A.JF,A.JE) +q(A.TX,A.JF) +q(A.a2t,A.a2s) +q(A.U3,A.a2t) +q(A.U9,A.a2y) +q(A.a3d,A.a3c) +q(A.UH,A.a3d) +q(A.K6,A.K5) +q(A.UI,A.K6) +q(A.a3m,A.a3l) +q(A.UQ,A.a3m) +q(A.a4s,A.a4r) +q(A.X7,A.a4s) +q(A.HA,A.BA) +q(A.a4y,A.a4x) +q(A.YD,A.a4y) +q(A.a4H,A.a4G) +q(A.Iy,A.a4H) +q(A.a52,A.a51) +q(A.a2u,A.a52) +q(A.a54,A.a53) +q(A.a2H,A.a54) +q(A.asy,A.asx) +q(A.Zn,A.Zm) +q(A.PU,A.Zn) +q(A.a_o,A.a_n) +q(A.QN,A.a_o) +q(A.a2E,A.a2D) +q(A.Uc,A.a2E) +q(A.a3u,A.a3t) +q(A.UU,A.a3u) +p(A.QP,[A.k,A.G]) +q(A.LU,A.W_) +q(A.QO,A.ol) +q(A.auQ,A.a7L) +q(A.Be,A.on) +p(A.qj,[A.yA,A.xR]) +q(A.a22,A.Pa) +q(A.aAB,A.aes) +q(A.a23,A.aAB) +q(A.NP,A.XC) +p(A.NP,[A.i,A.aI,A.hV,A.aod]) +p(A.i,[A.X,A.av,A.ao,A.a_i,A.aV,A.EV,A.a_l]) +p(A.X,[A.Pt,A.ct,A.Am,A.to,A.qG,A.qH,A.qI,A.qJ,A.qK,A.qM,A.qN,A.t_,A.t0,A.t1,A.t2,A.t3,A.t5,A.t8,A.xa,A.xb,A.xc,A.tP,A.u3,A.xJ,A.Bf,A.r8,A.Bk,A.Ac,A.Bh,A.Bi,A.yP,A.xs,A.Ht,A.ox,A.wR,A.Ak,A.Ek,A.AQ,A.AT,A.BG,A.Js,A.I8,A.Gd,A.D9,A.ql,A.qm,A.RS,A.F_,A.HQ,A.u0,A.Fh,A.FC,A.Ip,A.K3,A.Gw,A.mq,A.rz,A.Aa,A.yD,A.wj,A.Aq,A.w0,A.w1,A.Jj,A.ry,A.Cb,A.lJ,A.mS,A.wt,A.D3,A.It,A.Dy,A.nT,A.x0,A.DJ,A.Cj,A.FM,A.pA,A.EU,A.xE,A.zd,A.Jw,A.F6,A.Fa,A.Jp,A.xM,A.Fr,A.uh,A.Fs,A.qh,A.Ju,A.Gh,A.yo,A.yv,A.yB,A.vp,A.pH,A.H3,A.GF]) +p(A.Pt,[A.qC,A.rX,A.E3,A.Ed,A.F1,A.I1,A.In,A.Ab,A.A5,A.A9,A.A6,A.A8]) +q(A.a9,A.a2x) +p(A.a9,[A.z4,A.JC,A.LJ,A.ZU,A.Aw,A.Ax,A.M9,A.Ay,A.Az,A.Wh,A.Av,A.PZ,A.Zv,A.Zw,A.Id,A.Ie,A.Zx,A.If,A.Ry,A.Rv,A.Rz,A.a0m,A.T8,A.a1E,A.KG,A.Ho,A.KH,A.Xe,A.Hp,A.yQ,A.zp,A.KI,A.Hs,A.Im,A.GQ,A.a4M,A.KB,A.KD,A.HI,A.a1U,A.KL,A.K0,A.a4C,A.L0,A.L1,A.KF,A.Jf,A.KJ,A.Jg,A.Jt,A.KZ,A.KM,A.a57,A.Ka,A.GN,A.HU,A.a4q,A.a5s,A.HW,A.GT,A.HJ,A.HL,A.a1L,A.yV,A.Yz,A.xq,A.z1,A.a4B,A.ZH,A.a4D,A.IF,A.zh,A.a_u,A.a_t,A.KK,A.L_,A.a4X,A.Jb,A.zI,A.nR,A.a50,A.F7,A.Jq,A.a1O,A.a5_,A.a26,A.JB,A.JA,A.KY,A.KX,A.K2,A.a3g,A.GO,A.Ke,A.zG,A.H_,A.xU,A.Wx,A.a3Y]) +q(A.wx,A.z4) +q(A.qy,A.wx) +p(A.qy,[A.GY,A.Ig,A.a_E,A.a0n,A.Ji,A.Z_,A.ZM,A.VP,A.VJ,A.VM,A.VK,A.VL]) +q(A.Mg,A.Wn) +p(A.Mg,[A.W2,A.a_D,A.a0l]) +q(A.LY,A.W2) +p(A.LY,[A.Wc,A.Zt,A.a1C]) +q(A.k0,A.Wc) +q(A.cJ,A.Wd) +q(A.db,A.Wf) +q(A.aL,A.Wg) +q(A.M4,A.W8) +q(A.C4,A.Yo) +p(A.C4,[A.Wj,A.ZA,A.a_F,A.a0q,A.a1I]) +q(A.Ma,A.Wj) +q(A.Mb,A.Wk) +q(A.k1,A.Wi) +p(A.a7F,[A.AA,A.t9,A.E4,A.Ee,A.u4]) +q(A.UR,A.a3o) +p(A.UR,[A.Wl,A.a0r]) +q(A.Md,A.Wl) +p(A.an,[A.ar,A.e3,A.fv,A.GA]) +p(A.ar,[A.qE,A.rY,A.tB,A.tO,A.u1,A.ES,A.f4,A.TF,A.pv,A.oT,A.vM,A.Db,A.ug,A.uu,A.og,A.qU,A.mG,A.BI,A.oz,A.qR,A.Mo,A.tm,A.m0,A.xt]) +q(A.ok,A.We) +p(A.AB,[A.Ar,A.ajq,A.ake]) +p(A.Ar,[A.a73,A.agJ,A.an6]) +p(A.av,[A.PR,A.fe,A.b3,A.Hv,A.ov,A.zi,A.TS,A.IP]) +p(A.PR,[A.M7,A.PX,A.RU,A.T6,A.a2l,A.a3X,A.S0,A.Op]) +q(A.r,A.a0Y) +p(A.r,[A.H,A.a1b,A.dL]) +p(A.H,[A.xv,A.W4,A.J7,A.KS,A.J4,A.KT,A.KV,A.a4V,A.IU,A.IV,A.a0S,A.Ev,A.a0V,A.Ez,A.J2,A.a12,A.a17,A.md,A.a1d,A.a4S,A.KU,A.a4U,A.SE,A.SC,A.Sp]) +p(A.xv,[A.S8,A.Sk,A.a10,A.Su,A.Sw]) +q(A.bw,A.a2e) +q(A.Ft,A.a2d) +q(A.br,A.W6) +q(A.df,A.Yn) +q(A.ad,A.Ym) +q(A.ew,A.Yj) +q(A.f9,A.Yl) +q(A.xo,A.a0t) +q(A.jl,A.YQ) +q(A.jM,A.a40) +p(A.f9,[A.YP,A.a4_]) +q(A.hU,A.YP) +q(A.ii,A.a4_) +q(A.OF,A.Yk) +p(A.OF,[A.YO,A.a3Z]) +q(A.Pf,A.YO) +q(A.Vd,A.a3Z) +q(A.pI,A.a2k) +q(A.oE,A.Y5) +p(A.ao,[A.vk,A.ui,A.GV,A.QA,A.VW,A.OE,A.XI,A.MD,A.Pe,A.GX,A.qL,A.Ic,A.Ha,A.t4,A.t6,A.t7,A.wH,A.uF,A.vw,A.kj,A.rW,A.PT,A.Nl,A.Nn,A.a_C,A.No,A.W7,A.GW,A.Kb,A.a_9,A.Np,A.Ns,A.Nt,A.VC,A.yG,A.M1,A.O6,A.Oc,A.LD,A.NM,A.vV,A.NW,A.O3,A.OP,A.Pm,A.CD,A.Q8,A.Jz,A.a4o,A.Wr,A.Tl,A.Um,A.UE,A.a32,A.a35,A.UG,A.Gm,A.a3j,A.a_j,A.RK,A.kl,A.f2,A.ow,A.a_k,A.NI,A.oK,A.oN,A.H7,A.Ej,A.ZJ,A.Qu,A.a_0,A.Dx,A.x3,A.T0,A.Ti,A.a_m,A.bW,A.UM,A.Vf,A.Vk,A.uk,A.tv,A.Uj,A.w7,A.vQ,A.wS,A.qb]) +p(A.fe,[A.TB,A.Rw,A.a33,A.Bn,A.y0,A.C5,A.Vp,A.SO,A.HK,A.K7,A.GH]) +q(A.W5,A.W4) +q(A.GU,A.W5) +q(A.LZ,A.GU) +q(A.h9,A.W3) +q(A.OD,A.Yf) +q(A.BY,A.Yg) +p(A.cL,[A.OI,A.OJ,A.OK,A.C0,A.C1,A.ON,A.C3,A.rw,A.OH,A.OG,A.C_,A.OL,A.OM,A.C2]) +q(A.lu,A.Zt) +q(A.cq,A.Zs) +q(A.CX,A.Zy) +q(A.M6,A.Wa) +q(A.jg,A.Wo) +q(A.vn,A.Wb) +q(A.iF,A.Yh) +q(A.oF,A.Yi) +p(A.oF,[A.iE,A.BZ]) +q(A.kn,A.ZA) +q(A.wI,A.ZB) +p(A.ad,[A.Zr,A.a1G]) +q(A.fT,A.Zr) +q(A.m2,A.fT) +q(A.fA,A.Zz) +q(A.fG,A.a3n) +q(A.lS,A.a2c) +q(A.rZ,A.Zu) +q(A.lD,A.a_D) +q(A.RA,A.a_F) +q(A.RB,A.a_G) +q(A.a11,A.a10) +q(A.Sq,A.a11) +q(A.lI,A.a0l) +q(A.i5,A.a0o) +q(A.fW,A.a0p) +q(A.RW,A.a0q) +q(A.RX,A.a0r) +q(A.lP,A.a1C) +q(A.dh,A.a1G) +q(A.Ta,A.a1I) +q(A.Tc,A.a1K) +q(A.Tb,A.a1J) +q(A.pB,A.a1H) +q(A.T9,A.a1F) +q(A.u2,A.a1D) +q(A.n4,A.ZF) +q(A.l4,A.Be) +q(A.iv,A.acu) +p(A.lb,[A.PY,A.M8,A.Rx,A.T7,A.RV]) +p(A.aj,[A.cv,A.Nv,A.GE,A.Iu,A.a2L,A.Bm,A.xF]) +p(A.cv,[A.VQ,A.VH,A.VI,A.a0i,A.a1l,A.Xm,A.a3p,A.Hf,A.KA]) +q(A.VR,A.VQ) +q(A.VS,A.VR) +q(A.vi,A.VS) +p(A.aoA,[A.awp,A.azE,A.P_,A.FI,A.av3,A.a7Q,A.a9f]) +q(A.a0j,A.a0i) +q(A.a0k,A.a0j) +q(A.Eb,A.a0k) +q(A.a1m,A.a1l) +q(A.kw,A.a1m) +q(A.Bl,A.Xm) +q(A.a3q,A.a3p) +q(A.a3r,A.a3q) +q(A.uy,A.a3r) +q(A.Hg,A.Hf) +q(A.Hh,A.Hg) +q(A.vK,A.Hh) +p(A.vK,[A.Af,A.GP]) +q(A.hf,A.DR) +p(A.hf,[A.Ih,A.EZ,A.hW,A.UJ,A.et,A.Go,A.mP,A.Xr]) +q(A.aP,A.KA) +q(A.Hn,A.KG) +p(A.m,[A.Xb,A.lc,A.Qg]) +q(A.dH,A.Xb) +p(A.aqW,[A.a9X,A.aa2,A.aao,A.ahz]) +q(A.a4t,A.a9X) +q(A.Xa,A.a4t) +q(A.dt,A.YZ) +q(A.Xc,A.dt) +q(A.Nm,A.Xc) +p(A.i_,[A.Xd,A.ZN,A.a4a]) +q(A.Hr,A.KH) +p(A.Ac,[A.Ye,A.LG,A.TK,A.Ql,A.E8,A.NB,A.NJ,A.D0]) +p(A.cx,[A.x1,A.a_f]) +q(A.fH,A.x1) +q(A.uR,A.fH) +q(A.jr,A.uR) +q(A.js,A.jr) +p(A.js,[A.KQ,A.KR,A.Hx]) +q(A.nU,A.KQ) +q(A.ey,A.i7) +p(A.ey,[A.he,A.iN,A.hg]) +q(A.iA,A.Xt) +p(A.iA,[A.kT,A.d3,A.i8]) +p(A.Ms,[A.auz,A.aty,A.a25]) +p(A.xs,[A.vR,A.zc]) +q(A.lL,A.zp) +p(A.lL,[A.Hq,A.ZO]) +p(A.Nv,[A.a30,A.X9,A.ZG,A.a24,A.WI,A.a3_,A.YG]) +q(A.Xf,A.aa2) +q(A.Nr,A.Xf) +p(A.b3,[A.Xh,A.VV,A.Z5,A.Z6,A.WG,A.Z3,A.a37,A.Di,A.VN,A.Ah,A.QR,A.M2,A.Bo,A.vF,A.vD,A.Rr,A.Rs,A.yr,A.r3,A.vJ,A.Oz,A.OZ,A.EW,A.bH,A.h8,A.mF,A.di,A.hN,A.PV,A.DE,A.cA,A.TR,A.Q1,A.iZ,A.wr,A.Lz,A.Tr,A.Qq,A.Ml,A.oC,A.Pw,A.r2,A.NA,A.WO,A.YF,A.ZI,A.Xx,A.a1N,A.TV,A.Ur,A.Uq,A.Ot,A.a43,A.W0,A.a0y,A.a0A,A.a0x]) +q(A.tU,A.J7) +p(A.tU,[A.a0Q,A.S5,A.IZ,A.J_,A.EC,A.Eu]) +q(A.Hu,A.KI) +p(A.X9,[A.Zl,A.a1n]) +p(A.aI,[A.bi,A.a_h,A.Ba,A.Ja,A.a_g]) +p(A.bi,[A.Xg,A.iQ,A.Fv,A.PQ,A.SB,A.z7,A.a_s,A.xX]) +q(A.a4P,A.KS) +q(A.uS,A.a4P) +q(A.ra,A.Xi) +p(A.aV,[A.b4,A.ez,A.e1]) +p(A.b4,[A.I4,A.HH,A.C7,A.dC,A.IM,A.Je,A.a1B,A.GM,A.a3N,A.jn,A.lq,A.Ik,A.rH,A.uT,A.xk,A.GC,A.a1v,A.Ix,A.F4,A.Jl,A.Jn,A.xO,A.a2a,A.HN,A.uY,A.IN,A.a44,A.oR,A.fJ]) +q(A.Xk,A.Dz) +q(A.vS,A.Xk) +q(A.auR,A.ra) +p(A.f6,[A.hP,A.rg,A.NR]) +q(A.q3,A.hP) +p(A.q3,[A.w6,A.Oo,A.Ol]) +q(A.bG,A.Ys) +q(A.rx,A.Yt) +p(A.rg,[A.Yr,A.NQ,A.a1Z]) +p(A.f3,[A.ca,A.Gt,A.TU,A.a1A,A.Wp,A.py,A.Qv,A.kL,A.Tw,A.EQ,A.PG,A.fg,A.HY,A.JQ,A.Tf,A.Fc,A.FG,A.wn]) +p(A.ho,[A.hq,A.hT]) +p(A.hq,[A.pU,A.dN]) +q(A.CV,A.jp) +p(A.aBG,[A.YB,A.q2,A.I_]) +q(A.C9,A.bG) +q(A.bg,A.a_T) +q(A.a5c,A.VB) +q(A.a5d,A.a5c) +q(A.a3z,A.a5d) +p(A.bg,[A.a_L,A.a05,A.a_W,A.a_R,A.a_U,A.a_P,A.a_Y,A.a0d,A.fV,A.a01,A.a03,A.a0_,A.a_N]) +q(A.a_M,A.a_L) +q(A.tD,A.a_M) +p(A.a3z,[A.a58,A.a5k,A.a5f,A.a5b,A.a5e,A.a5a,A.a5g,A.a5o,A.a5m,A.a5n,A.a5l,A.a5i,A.a5j,A.a5h,A.a59]) +q(A.a3v,A.a58) +q(A.a06,A.a05) +q(A.tI,A.a06) +q(A.a3G,A.a5k) +q(A.a_X,A.a_W) +q(A.nj,A.a_X) +q(A.a3B,A.a5f) +q(A.a_S,A.a_R) +q(A.po,A.a_S) +q(A.a3y,A.a5b) +q(A.a_V,A.a_U) +q(A.pp,A.a_V) +q(A.a3A,A.a5e) +q(A.a_Q,A.a_P) +q(A.ni,A.a_Q) +q(A.a3x,A.a5a) +q(A.a_Z,A.a_Y) +q(A.tF,A.a_Z) +q(A.a3C,A.a5g) +q(A.a0e,A.a0d) +q(A.tL,A.a0e) +q(A.a3K,A.a5o) +p(A.fV,[A.a09,A.a0b,A.a07]) +q(A.a0a,A.a09) +q(A.tJ,A.a0a) +q(A.a3I,A.a5m) +q(A.a0c,A.a0b) +q(A.tK,A.a0c) +q(A.a3J,A.a5n) +q(A.a08,A.a07) +q(A.RJ,A.a08) +q(A.a3H,A.a5l) +q(A.a02,A.a01) +q(A.nk,A.a02) +q(A.a3E,A.a5i) +q(A.a04,A.a03) +q(A.tH,A.a04) +q(A.a3F,A.a5j) +q(A.a00,A.a0_) +q(A.tG,A.a00) +q(A.a3D,A.a5h) +q(A.a_O,A.a_N) +q(A.tE,A.a_O) +q(A.a3w,A.a59) +p(A.dA,[A.YE,A.uI]) +q(A.dq,A.YE) +p(A.dq,[A.DG,A.k9]) +p(A.DG,[A.ke,A.xj,A.BE,A.GZ]) +p(A.zD,[A.Is,A.zg]) +p(A.xj,[A.i0,A.Mj]) +p(A.BE,[A.kK,A.kh,A.ks]) +p(A.Mj,[A.ic,A.yI]) +q(A.FZ,A.a2O) +q(A.G1,A.a2R) +q(A.G0,A.a2Q) +q(A.G2,A.a2S) +q(A.G_,A.a2P) +q(A.AC,A.GZ) +p(A.AC,[A.lY,A.lZ]) +q(A.rK,A.kJ) +q(A.wO,A.rK) +p(A.VC,[A.M_,A.O5,A.Ob]) +q(A.vf,A.VE) +q(A.ahv,A.Te) +p(A.aoB,[A.aBx,A.aBz,A.NN,A.UF]) +q(A.a0g,A.G) +p(A.S5,[A.a0N,A.a0O,A.S6,A.Ss]) +q(A.vj,A.VU) +q(A.asY,A.vj) +q(A.wT,A.pv) +q(A.Au,A.W9) +q(A.Da,A.ZL) +q(A.AI,A.Wt) +q(A.AJ,A.Wu) +q(A.AK,A.Wv) +q(A.a0w,A.a4M) +q(A.AP,A.Ww) +q(A.bJ,A.Wy) +q(A.H4,A.KB) +q(A.d0,A.a_2) +p(A.d0,[A.Qi,A.Xy,A.jH]) +p(A.Qi,[A.a_1,A.XX,A.Y_]) +q(A.Mw,A.Wz) +q(A.AR,A.WC) +q(A.KE,A.KD) +q(A.WE,A.KE) +p(A.Gt,[A.WD,A.JV]) +q(A.vx,A.WF) +q(A.au8,A.vx) +q(A.AV,A.WH) +q(A.vI,A.WL) +p(A.lc,[A.dP,A.Qd]) +q(A.Bp,A.Xo) +q(A.Bq,A.Xq) +q(A.a4u,A.aao) +q(A.XB,A.a4u) +q(A.Bt,A.XD) +q(A.vW,A.XH) +q(A.av4,A.vW) +q(A.vZ,A.HI) +q(A.w_,A.XS) +q(A.av5,A.w_) +q(A.BH,A.XT) +q(A.BN,A.XY) +q(A.BU,A.Y4) +q(A.BW,A.Y9) +q(A.wa,A.Yp) +q(A.avc,A.wa) +q(A.ap9,A.acP) +q(A.a4v,A.ap9) +q(A.a4w,A.a4v) +q(A.av6,A.a4w) +q(A.aA7,A.acO) +p(A.AQ,[A.YX,A.Ut]) +p(A.bA,[A.YT,A.YV,A.a4A,A.JZ,A.a2U,A.a56]) +q(A.YU,A.a4A) +p(A.bJ,[A.YW,A.Ya,A.Yb,A.a_r,A.a2V]) +q(A.rL,A.YY) +p(A.dC,[A.Cv,A.tc,A.I6,A.oy,A.rM,A.vT]) +q(A.oU,A.mW) +p(A.oU,[A.oS,A.CE,A.CF]) +p(A.wy,[A.awn,A.awo]) +q(A.I7,A.KL) +q(A.Py,A.CD) +q(A.Pz,A.Z4) +q(A.CZ,A.ZE) +q(A.ZP,A.a4C) +q(A.J5,A.J4) +q(A.St,A.J5) +p(A.St,[A.IY,A.a38,A.EE,A.Et,A.Er,A.Sj,A.Eq,A.Sm,A.a0M,A.S7,A.zr,A.Sc,A.SA,A.Ew,A.Sf,A.Sv,A.Ey,A.EB,A.Em,A.EG,A.S9,A.Sl,A.Sd,A.Sg,A.Si,A.Se,A.Ep,A.a0P,A.a0X,A.a4Q,A.J1,A.a13,A.zt,A.a1c]) +q(A.ZQ,A.Qg) +q(A.b_,A.Ws) +q(A.Qf,A.b_) +q(A.Io,A.Qf) +p(A.ca,[A.Qj,A.Uu,A.WK,A.V_]) +q(A.wW,A.ZW) +q(A.Qo,A.wW) +q(A.Df,A.ZT) +q(A.Qp,A.ZV) +q(A.Du,A.a_8) +q(A.Dv,A.a_a) +q(A.Dw,A.a_b) +q(A.DI,A.a_q) +q(A.IL,A.KR) +q(A.a4m,A.L0) +q(A.a4n,A.L1) +p(A.nd,[A.Vz,A.Nq]) +q(A.QV,A.a_w) +p(A.TU,[A.Ky,A.Kz]) +q(A.E6,A.a0f) +q(A.AW,A.RS) +q(A.WJ,A.KF) +q(A.xl,A.a0h) +q(A.auh,A.xl) +q(A.Ef,A.a0s) +q(A.T4,A.Jf) +p(A.a9M,[A.az,A.pJ]) +q(A.H2,A.az) +p(A.ai5,[A.aA5,A.aBy]) +q(A.HR,A.KJ) +q(A.Jh,A.Jg) +q(A.xI,A.Jh) +q(A.bk,A.VF) +p(A.bk,[A.NU,A.dz,A.cT,A.Vm,A.Bv,A.Hk,A.SH,A.QG,A.RM,A.Bu]) +p(A.NU,[A.XF,A.XG]) +q(A.Fd,A.a1P) +q(A.Fe,A.a1Q) +q(A.Ff,A.a1R) +q(A.Fg,A.a1S) +q(A.a39,A.Uu) +q(A.a1V,A.Gi) +q(A.JD,A.KZ) +q(A.zs,A.KT) +q(A.b6,A.Z9) +p(A.b6,[A.kQ,A.vh,A.vs,A.hQ,A.nl,A.tw,A.tN,A.eR,A.Bw,A.NT,A.nt,A.le,A.pk,A.pw,A.lM,A.pT,A.jK,A.pR]) +q(A.a1a,A.KV) +q(A.xV,A.a2m) +q(A.aAJ,A.xV) +q(A.a1r,A.aoO) +q(A.amq,A.a1r) +q(A.amp,A.aoN) +p(A.aoM,[A.amo,A.amn,A.akQ,A.ab7]) +q(A.FF,A.a2r) +q(A.KN,A.KM) +q(A.Iq,A.KN) +q(A.yc,A.a2K) +q(A.aB0,A.yc) +q(A.a2J,A.a55) +q(A.FY,A.a2N) +q(A.a2T,A.a56) +q(A.G7,A.a2W) +q(A.ZR,A.ahz) +q(A.Qk,A.ZR) +q(A.Gk,A.a31) +q(A.a36,A.a57) +p(A.iQ,[A.a34,A.a3e,A.a5q]) +q(A.a19,A.a4V) +q(A.dM,A.a3b) +q(A.jJ,A.a3f) +q(A.Qe,A.vS) +q(A.nH,A.a45) +q(A.Gr,A.a3h) +q(A.Gs,A.a3i) +q(A.Y3,A.Di) +p(A.EE,[A.EA,A.Sr,A.nn,A.IT,A.EJ,A.xx]) +q(A.a0U,A.EA) +q(A.yq,A.Ka) +q(A.Gx,A.a3k) +q(A.yt,A.a3L) +p(A.hK,[A.e8,A.hJ,A.Iv]) +p(A.AH,[A.cl,A.qQ,A.Iw]) +p(A.cs,[A.ed,A.jP,A.Mp]) +p(A.Mp,[A.d2,A.fN]) +q(A.ep,A.jC) +p(A.ed,[A.er,A.d8,A.h2,A.hy,A.h4,A.h5]) +p(A.de,[A.aG,A.f8,A.q9]) +q(A.dO,A.aek) +p(A.WB,[A.H6,A.z9]) +q(A.rN,A.Z0) +p(A.rN,[A.VA,A.av9,A.DF,A.Qx]) +p(A.ki,[A.LQ,A.F3]) +q(A.Ap,A.LQ) +q(A.afI,A.Z1) +p(A.hV,[A.RC,A.kF]) +q(A.FR,A.a2G) +p(A.j3,[A.yE,A.a3T,A.vv,A.wG,A.DQ,A.Bx]) +q(A.p,A.a3a) +q(A.u8,A.FI) +q(A.nf,A.a_H) +q(A.Xu,A.nf) +q(A.tV,A.a1b) +q(A.a1k,A.tV) +p(A.mT,[A.mx,A.xW]) +p(A.iI,[A.qV,A.TO]) +p(A.d6,[A.ha,A.K1,A.FD,A.pK]) +q(A.Hj,A.ha) +q(A.Bd,A.Hj) +p(A.Bd,[A.fd,A.ex,A.fj,A.m7,A.h_]) +q(A.a0R,A.IU) +q(A.Es,A.a0R) +q(A.IW,A.IV) +q(A.a0T,A.IW) +q(A.tT,A.a0T) +p(A.py,[A.K_,A.H8,A.yL]) +q(A.a0W,A.a0V) +q(A.IX,A.a0W) +q(A.Ex,A.IX) +q(A.eb,A.Zh) +p(A.eb,[A.Ru,A.eN]) +p(A.eN,[A.kq,A.r1,A.B5,A.vE,A.B8,A.At,A.CU,A.Cc,A.Ai]) +p(A.kq,[A.Cz,A.m3,A.DH]) +q(A.a_4,A.a4F) +q(A.ph,A.a9g) +p(A.aAv,[A.WQ,A.hE]) +p(A.hE,[A.a1p,A.I3,A.uX]) +q(A.ng,A.nu) +q(A.jI,A.K1) +q(A.a0Z,A.J2) +q(A.a1_,A.a0Z) +q(A.ED,A.a1_) +q(A.a4Z,A.a4Y) +q(A.nW,A.a4Z) +q(A.En,A.a0M) +p(A.Bm,[A.pG,A.Xs,A.XQ]) +p(A.zr,[A.Sb,A.Sa,A.J3]) +p(A.J3,[A.Sn,A.So]) +q(A.EF,A.a12) +p(A.anM,[A.B2,A.Fi]) +q(A.u9,A.a1X) +q(A.TN,A.a2n) +q(A.a2q,A.pK) +q(A.nx,A.a2q) +p(A.dL,[A.J8,A.a14]) +q(A.a15,A.J8) +q(A.a16,A.a15) +q(A.pz,A.a16) +p(A.pz,[A.Sx,A.Sy]) +q(A.a2o,A.FD) +q(A.a2p,A.a2o) +q(A.hx,A.a2p) +q(A.EH,A.a14) +q(A.Sz,A.EH) +q(A.a18,A.a17) +q(A.EI,A.a18) +q(A.tW,A.md) +q(A.EK,A.tW) +q(A.a1e,A.a1d) +q(A.EL,A.a1e) +q(A.Tu,A.a1Y) +q(A.cP,A.a20) +q(A.xP,A.a21) +q(A.x_,A.xP) +p(A.ao0,[A.arf,A.ahg,A.aq0]) +q(A.a8d,A.LP) +q(A.ajG,A.a8d) +p(A.a7H,[A.auN,A.S4]) +q(A.oX,A.Ze) +p(A.oX,[A.rU,A.oZ,A.CR]) +q(A.agv,A.Zf) +p(A.agv,[A.j,A.u]) +q(A.a2M,A.Dh) +q(A.kr,A.tp) +q(A.Ei,A.a0u) +q(A.kv,A.a0v) +p(A.kv,[A.lK,A.xr]) +q(A.S1,A.Ei) +q(A.hB,A.ce) +q(A.pO,A.a2Y) +p(A.pO,[A.Uw,A.Uv,A.Ux,A.yh]) +q(A.Oy,A.pP) +q(A.a_I,A.a4K) +q(A.a6d,A.VD) +p(A.dz,[A.RR,A.KO,A.KP,A.nL,A.Kk,A.Kl,A.a1T,A.X5,A.F2]) +q(A.II,A.KO) +q(A.IJ,A.KP) +q(A.VO,A.a4q) +q(A.Kq,A.a5s) +p(A.QK,[A.wD,A.tu,A.jo,A.IK,A.Jk]) +p(A.Ba,[A.Ec,A.y1,A.fk]) +p(A.Ec,[A.fS,A.pj,A.a4J]) +p(A.fS,[A.a3M,A.CB,A.z5,A.z6]) +q(A.ji,A.a3N) +q(A.qZ,A.h8) +p(A.ez,[A.CT,A.pq,A.C6,A.CO,A.a48]) +q(A.a_p,A.Fv) +p(A.C5,[A.xG,A.B9]) +q(A.Or,A.C6) +q(A.ET,A.Ja) +q(A.Kr,A.Mk) +q(A.Ks,A.Kr) +q(A.Kt,A.Ks) +q(A.Ku,A.Kt) +q(A.Kv,A.Ku) +q(A.Kw,A.Kv) +q(A.Kx,A.Kw) +q(A.Vo,A.Kx) +q(A.XU,A.HL) +q(A.HM,A.XU) +q(A.XV,A.HM) +q(A.XW,A.XV) +q(A.oA,A.XW) +q(A.yC,A.RC) +q(A.kX,A.yC) +q(A.N5,A.WK) +q(A.a46,A.N5) +q(A.Yx,A.Yw) +q(A.dI,A.Yx) +p(A.dI,[A.oH,A.HT]) +q(A.Yv,A.Yu) +q(A.Ca,A.Yv) +q(A.OT,A.ry) +q(A.Yy,A.yV) +p(A.jn,[A.HS,A.wo]) +q(A.OU,A.YA) +q(A.ek,A.a4O) +q(A.mc,A.a4N) +q(A.a0B,A.OU) +q(A.akF,A.a0B) +p(A.hT,[A.bp,A.rF,A.Hy]) +p(A.rE,[A.cM,A.VT]) +q(A.auU,A.ao1) +q(A.oL,A.pd) +q(A.I2,A.a4B) +q(A.n0,A.ov) +q(A.a4T,A.a4S) +q(A.J0,A.a4T) +q(A.D5,A.i8) +p(A.lq,[A.n9,A.a27]) +q(A.ZS,A.a4D) +q(A.NK,A.UW) +q(A.eI,A.np) +p(A.qa,[A.zf,A.ze,A.ID,A.IE]) +q(A.YM,A.a4z) +q(A.IG,A.IF) +q(A.ht,A.IG) +p(A.a1i,[A.a_7,A.aHn]) +p(A.fg,[A.YN,A.cN]) +q(A.IH,A.a4J) +q(A.x2,A.a_u) +q(A.zC,A.fj) +q(A.a4W,A.KU) +q(A.qg,A.a4W) +p(A.iM,[A.qc,A.q8]) +q(A.a4R,A.a4Q) +q(A.qf,A.a4R) +q(A.HZ,A.KK) +q(A.JR,A.L_) +q(A.DK,A.IK) +q(A.NH,A.ajK) +q(A.a1j,A.a4X) +p(A.cN,[A.kW,A.a1g,A.a1h]) +q(A.J9,A.kW) +p(A.J9,[A.EP,A.EO]) +q(A.zu,A.zI) +q(A.M0,A.jO) +q(A.a1o,A.M0) +q(A.SP,A.a1o) +q(A.SV,A.GE) +p(A.Td,[A.oO,A.aeZ,A.ab0,A.M5,A.O7]) +q(A.a1x,A.dN) +q(A.TM,A.aoP) +q(A.Jx,A.a50) +q(A.OB,A.Yd) +q(A.Jm,A.jo) +q(A.hw,A.Jm) +p(A.hw,[A.F9,A.kx,A.lA,A.pC,A.V6]) +p(A.xK,[A.RZ,A.AL,A.N_,A.A4]) +q(A.a1M,A.kL) +q(A.nr,A.a1M) +q(A.u6,A.Jk) +q(A.F8,A.nr) +q(A.Mt,A.Ti) +p(A.Mt,[A.Q_,A.Qb]) +q(A.Jr,A.Jq) +q(A.xL,A.Jr) +q(A.a_5,A.Tn) +q(A.wY,A.a_5) +q(A.Jo,A.wY) +q(A.mg,A.i0) +q(A.mh,A.ic) +q(A.KW,A.a5_) +q(A.a1W,A.KW) +q(A.a2h,A.a2g) +q(A.aW,A.a2h) +q(A.uD,A.a4p) +q(A.a29,A.a28) +q(A.xT,A.a29) +q(A.TA,A.a2b) +q(A.ul,A.TS) +p(A.ul,[A.TP,A.TQ]) +q(A.Uy,A.Uq) +p(A.NT,[A.rd,A.rf,A.re,A.fP,A.ns]) +p(A.fP,[A.mK,A.mM,A.rt,A.ro,A.rp,A.iD,A.oD,A.mN,A.rr,A.rs,A.mL]) +q(A.Jy,A.KY) +q(A.Jv,A.KX) +q(A.a49,A.yn) +p(A.Ql,[A.T5,A.SS]) +q(A.LF,A.D0) +q(A.yw,A.Ke) +q(A.a0z,A.SB) +q(A.a5r,A.a5q) +q(A.a42,A.a5r) +q(A.J6,A.a4U) +q(A.AE,A.vp) +q(A.qP,A.pH) +q(A.AF,A.qP) +q(A.H0,A.xU) +p(A.uk,[A.AG,A.CC]) +q(A.Qy,A.tv) +q(A.Qw,A.Qy) +q(A.nw,A.hx) +q(A.aoW,A.aoV) +q(A.jG,A.qW) +p(A.jG,[A.FV,A.FT]) +q(A.ajQ,A.S4) +q(A.YK,A.xF) +q(A.Ck,A.YK) +q(A.ayi,A.PB) +q(A.YI,A.SV) +q(A.YJ,A.YI) +q(A.P6,A.YJ) +q(A.iJ,A.fh) +q(A.DA,A.hg) +q(A.ae8,A.SU) +q(A.lO,A.a1s) +q(A.ln,A.lO) +q(A.AN,A.Mh) +q(A.vt,A.FL) +q(A.am7,A.Mi) +p(A.a7w,[A.xA,A.y2]) +q(A.AS,A.bO) +p(A.y1,[A.a4I,A.nS,A.a2j]) +q(A.a_c,A.a4I) +q(A.Fw,A.a2j) +q(A.a2i,A.fk) +q(A.TD,A.a2i) +p(A.ajJ,[A.aiY,A.arM]) +p(A.aiY,[A.aiZ,A.ahI]) +q(A.ag_,A.apr) +p(A.ag_,[A.ak3,A.arO,A.as5]) +q(A.SN,A.vO) +p(A.SN,[A.cd,A.bm]) +p(A.au,[A.aK,A.e_,A.tb,A.ud,A.ue,A.Fo,A.Fp,A.Fq,A.rm,A.QF,A.je,A.uj,A.RL,A.SG,A.yF]) +p(A.e_,[A.kc,A.D6,A.Gu,A.iT,A.FA,A.EM]) +p(A.eq,[A.Fu,A.r4,A.QI]) +q(A.r_,A.tb) +p(A.EM,[A.CW,A.E9]) +q(A.hY,A.CW) +q(A.I5,A.Fw) +q(A.yN,A.XA) +q(A.Hl,A.kU) +q(A.Ow,A.TZ) +p(A.xZ,[A.yU,A.U0]) +q(A.xY,A.U1) +q(A.ny,A.U0) +q(A.Ud,A.xY) +q(A.Z8,A.nF) +q(A.GB,A.Z8) +p(A.arM,[A.ahJ,A.arN]) +q(A.acZ,A.arX) +p(A.pl,[A.fc,A.iP,A.eO,A.B7]) +p(A.afH,[A.ajR,A.ae3,A.ag7,A.as1,A.a7P]) +p(A.kg,[A.p5,A.pu]) +p(A.cG,[A.XZ,A.UV,A.SM,A.SL,A.xz,A.SI,A.SJ,A.EN,A.SK]) +p(A.UV,[A.fr,A.B4,A.D7,A.DU]) +p(A.fr,[A.x4,A.x7,A.vU,A.UB,A.Ps]) +p(A.x4,[A.Vj,A.UC,A.T1]) +p(A.Vl,[A.am9,A.WN]) +q(A.a9E,A.WN) +q(A.Vr,A.pX) +q(A.a4i,A.Vw) +q(A.Vy,A.a4i) +q(A.a4e,A.a5t) +q(A.a4g,A.a4f) +q(A.a4h,A.a4g) +q(A.d1,A.a4h) +p(A.d1,[A.jN,A.kM,A.kN,A.kO,A.a4b,A.kP,A.a4j,A.pY]) +q(A.h0,A.a4b) +q(A.fI,A.a4j) +q(A.a4d,A.a4c) +q(A.eY,A.a4d) +s(A.Xw,A.Nc) +s(A.XJ,A.amY) +s(A.Zi,A.avA) +s(A.Zj,A.avB) +s(A.Zk,A.avz) +r(A.a_A,A.Hz) +r(A.a_B,A.Hz) +s(A.a4E,A.a47) +s(A.a4L,A.a47) +s(A.yy,A.V3) +s(A.KC,A.B) +s(A.Iz,A.B) +s(A.IA,A.BX) +s(A.IB,A.B) +s(A.IC,A.BX) +s(A.q_,A.VZ) +s(A.yz,A.qi) +s(A.JH,A.aM) +s(A.JI,A.n) +s(A.JJ,A.jB) +s(A.Kj,A.qi) +s(A.a5p,A.Ub) +s(A.X8,A.a9T) +s(A.XL,A.B) +s(A.XM,A.b0) +s(A.XN,A.B) +s(A.XO,A.b0) +s(A.Y7,A.B) +s(A.Y8,A.b0) +s(A.YR,A.B) +s(A.YS,A.b0) +s(A.ZX,A.aM) +s(A.ZY,A.aM) +s(A.ZZ,A.B) +s(A.a__,A.b0) +s(A.a_d,A.B) +s(A.a_e,A.b0) +s(A.a_J,A.B) +s(A.a_K,A.b0) +s(A.a1w,A.aM) +s(A.JE,A.B) +s(A.JF,A.b0) +s(A.a2s,A.B) +s(A.a2t,A.b0) +s(A.a2y,A.aM) +s(A.a3c,A.B) +s(A.a3d,A.b0) +s(A.K5,A.B) +s(A.K6,A.b0) +s(A.a3l,A.B) +s(A.a3m,A.b0) +s(A.a4r,A.B) +s(A.a4s,A.b0) +s(A.a4x,A.B) +s(A.a4y,A.b0) +s(A.a4G,A.B) +s(A.a4H,A.b0) +s(A.a51,A.B) +s(A.a52,A.b0) +s(A.a53,A.B) +s(A.a54,A.b0) +s(A.Zm,A.B) +s(A.Zn,A.b0) +s(A.a_n,A.B) +s(A.a_o,A.b0) +s(A.a2D,A.B) +s(A.a2E,A.b0) +s(A.a3t,A.B) +s(A.a3u,A.b0) +s(A.W_,A.aM) +s(A.W8,A.a5) +s(A.Wc,A.a5) +s(A.Wd,A.a5) +s(A.Wf,A.a5) +s(A.Wg,A.a5) +s(A.Wi,A.a5) +s(A.Wj,A.a5) +s(A.Wk,A.a5) +s(A.Wl,A.a5) +s(A.We,A.a5) +s(A.W2,A.a5) +s(A.W6,A.a5) +s(A.Y5,A.a5) +s(A.Yj,A.a5) +s(A.Yl,A.a5) +s(A.Ym,A.a5) +s(A.Yn,A.a5) +s(A.YP,A.a5) +s(A.YO,A.a5) +s(A.YQ,A.a5) +s(A.a0t,A.a5) +s(A.a2d,A.a5) +s(A.a2e,A.a5) +s(A.a2k,A.a5) +s(A.a3o,A.a5) +s(A.a4_,A.a5) +s(A.a3Z,A.a5) +s(A.a40,A.a5) +s(A.W3,A.a5) +r(A.W4,A.at) +s(A.W5,A.d7) +r(A.GU,A.Ny) +s(A.Wn,A.a5) +s(A.Yf,A.a5) +s(A.Yg,A.a5) +s(A.Yo,A.a5) +s(A.Wa,A.a5) +s(A.Wb,A.a5) +s(A.Wo,A.a5) +s(A.Yh,A.a5) +s(A.Yi,A.a5) +s(A.Yk,A.a5) +s(A.Zr,A.a5) +s(A.Zs,A.a5) +s(A.Zt,A.a5) +s(A.Zy,A.a5) +s(A.Zz,A.a5) +s(A.ZA,A.a5) +s(A.ZB,A.a5) +s(A.a2c,A.a5) +s(A.a3n,A.a5) +s(A.Zu,A.a5) +s(A.a_D,A.a5) +s(A.a_F,A.a5) +s(A.a_G,A.a5) +r(A.a10,A.at) +s(A.a11,A.d7) +s(A.a0l,A.a5) +s(A.a0o,A.a5) +s(A.a0p,A.a5) +s(A.a0q,A.a5) +s(A.a0r,A.a5) +s(A.a1C,A.a5) +s(A.a1F,A.a5) +s(A.a1G,A.a5) +s(A.a1H,A.a5) +s(A.a1I,A.a5) +s(A.a1J,A.a5) +s(A.a1K,A.a5) +s(A.a1D,A.a5) +s(A.ZF,A.a5) +s(A.VQ,A.Ad) +s(A.VR,A.qz) +s(A.VS,A.oi) +s(A.Hf,A.Ae) +s(A.Hg,A.qz) +s(A.Hh,A.oi) +s(A.Xm,A.Ag) +s(A.a0i,A.Ae) +s(A.a0j,A.qz) +s(A.a0k,A.oi) +s(A.a1l,A.Ae) +s(A.a1m,A.oi) +s(A.a3p,A.Ad) +s(A.a3q,A.qz) +s(A.a3r,A.oi) +s(A.KA,A.Ag) +r(A.KG,A.j1) +s(A.Xb,A.aq) +s(A.a4t,A.kE) +s(A.Xc,A.aq) +r(A.KH,A.j1) +r(A.KQ,A.Bj) +s(A.Xf,A.kE) +r(A.KI,A.ei) +r(A.KS,A.at) +s(A.a4P,A.d7) +s(A.Xi,A.aq) +s(A.Xk,A.aq) +s(A.Yt,A.k5) +s(A.Ys,A.aq) +s(A.XC,A.aq) +s(A.a_L,A.ej) +s(A.a_M,A.WR) +s(A.a_N,A.ej) +s(A.a_O,A.WS) +s(A.a_P,A.ej) +s(A.a_Q,A.WT) +s(A.a_R,A.ej) +s(A.a_S,A.WU) +s(A.a_T,A.aq) +s(A.a_U,A.ej) +s(A.a_V,A.WV) +s(A.a_W,A.ej) +s(A.a_X,A.WW) +s(A.a_Y,A.ej) +s(A.a_Z,A.WX) +s(A.a0_,A.ej) +s(A.a00,A.WY) +s(A.a01,A.ej) +s(A.a02,A.WZ) +s(A.a03,A.ej) +s(A.a04,A.X_) +s(A.a05,A.ej) +s(A.a06,A.X0) +s(A.a07,A.ej) +s(A.a08,A.X1) +s(A.a09,A.ej) +s(A.a0a,A.X2) +s(A.a0b,A.ej) +s(A.a0c,A.X3) +s(A.a0d,A.ej) +s(A.a0e,A.X4) +s(A.a58,A.WR) +s(A.a59,A.WS) +s(A.a5a,A.WT) +s(A.a5b,A.WU) +s(A.a5c,A.aq) +s(A.a5d,A.ej) +s(A.a5e,A.WV) +s(A.a5f,A.WW) +s(A.a5g,A.WX) +s(A.a5h,A.WY) +s(A.a5i,A.WZ) +s(A.a5j,A.X_) +s(A.a5k,A.X0) +s(A.a5l,A.X1) +s(A.a5m,A.X2) +s(A.a5n,A.X3) +s(A.a5o,A.X4) +s(A.YE,A.k5) +r(A.GZ,A.JX) +s(A.a2O,A.aq) +s(A.a2P,A.aq) +s(A.a2Q,A.aq) +s(A.a2R,A.aq) +s(A.a2S,A.aq) +s(A.VE,A.aq) +s(A.VU,A.aq) +s(A.W9,A.aq) +s(A.ZL,A.aq) +s(A.Wt,A.aq) +s(A.Wu,A.aq) +s(A.Wv,A.aq) +s(A.a4M,A.Qh) +s(A.Ww,A.aq) +s(A.Wy,A.aq) +r(A.KB,A.ei) +s(A.Wz,A.aq) +s(A.WC,A.aq) +r(A.KD,A.ei) +r(A.KE,A.yp) +s(A.WF,A.aq) +s(A.WH,A.aq) +s(A.WL,A.aq) +s(A.Xo,A.aq) +s(A.Xq,A.aq) +s(A.a4u,A.kE) +s(A.XD,A.aq) +s(A.XH,A.aq) +r(A.HI,A.j1) +s(A.XS,A.aq) +s(A.XT,A.aq) +s(A.XY,A.aq) +s(A.Y4,A.aq) +s(A.Y9,A.aq) +s(A.a4v,A.acA) +s(A.a4w,A.acB) +s(A.Yp,A.aq) +s(A.a4A,A.aq) +s(A.YY,A.aq) +r(A.KL,A.qB) +s(A.Z4,A.aq) +s(A.ZE,A.aq) +r(A.a4C,A.ei) +s(A.ZT,A.aq) +s(A.ZV,A.aq) +s(A.ZW,A.aq) +s(A.a_8,A.aq) +s(A.a_a,A.aq) +s(A.a_b,A.aq) +s(A.a_q,A.aq) +s(A.KR,A.Dc) +s(A.a_w,A.aq) +r(A.L0,A.zH) +r(A.L1,A.zH) +s(A.a0f,A.aq) +r(A.KF,A.j1) +s(A.a0h,A.aq) +s(A.a0s,A.aq) +r(A.Jf,A.ei) +r(A.Jg,A.ei) +r(A.Jh,A.lN) +r(A.KJ,A.ei) +s(A.a1P,A.aq) +s(A.a1Q,A.aq) +s(A.a1R,A.aq) +s(A.a1S,A.aq) +r(A.KT,A.px) +r(A.KV,A.px) +r(A.KZ,A.ei) +s(A.a1r,A.a7x) +s(A.a2m,A.aq) +s(A.a2r,A.aq) +r(A.KM,A.ei) +r(A.KN,A.yp) +s(A.a55,A.aAZ) +s(A.a2K,A.aq) +s(A.a2N,A.aq) +s(A.a56,A.aq) +s(A.a2W,A.aq) +s(A.ZR,A.kE) +s(A.a31,A.aq) +r(A.a4V,A.at) +r(A.a57,A.ei) +s(A.a3b,A.aq) +s(A.a3f,A.aq) +s(A.a45,A.aq) +s(A.a3h,A.aq) +s(A.a3i,A.aq) +r(A.Ka,A.j1) +s(A.a3k,A.aq) +s(A.a3L,A.aq) +s(A.Ws,A.aq) +s(A.Xt,A.aq) +s(A.Z1,A.aq) +s(A.Z0,A.aq) +s(A.a2G,A.aq) +s(A.a3a,A.aq) +r(A.Hj,A.es) +r(A.IU,A.at) +s(A.a0R,A.d7) +r(A.IV,A.px) +r(A.IW,A.at) +s(A.a0T,A.Sh) +r(A.a0V,A.at) +s(A.a0W,A.d7) +r(A.IX,A.Ny) +s(A.Zh,A.k5) +s(A.a4F,A.aq) +s(A.a_H,A.k5) +s(A.a0Y,A.k5) +r(A.J2,A.at) +s(A.a0Z,A.Sh) +r(A.a1_,A.px) +r(A.K1,A.es) +s(A.a4Y,A.eS) +s(A.a4Z,A.f3) +r(A.a0M,A.Eo) +r(A.J4,A.aT) +r(A.J5,A.fF) +r(A.a12,A.aT) +s(A.a1X,A.aq) +r(A.J7,A.aT) +s(A.a2n,A.aq) +r(A.a2q,A.es) +r(A.J8,A.at) +s(A.a15,A.alA) +s(A.a16,A.alS) +r(A.a2o,A.es) +s(A.a2p,A.kk) +r(A.a14,A.aT) +r(A.a17,A.at) +s(A.a18,A.d7) +r(A.a1b,A.aT) +r(A.md,A.at) +r(A.a1d,A.at) +s(A.a1e,A.d7) +s(A.a1Y,A.aq) +s(A.a20,A.k5) +s(A.a21,A.aq) +s(A.Ze,A.aq) +s(A.Zf,A.aq) +s(A.a_2,A.aq) +s(A.a0v,A.aq) +s(A.a0u,A.aq) +s(A.a2Y,A.aq) +s(A.a4K,A.Gb) +s(A.VF,A.aq) +s(A.VD,A.aq) +s(A.Z9,A.aq) +r(A.KO,A.zj) +r(A.KP,A.zj) +r(A.a4q,A.j1) +s(A.a5s,A.eH) +r(A.Ja,A.amk) +r(A.Kr,A.wl) +r(A.Ks,A.fi) +r(A.Kt,A.xQ) +r(A.Ku,A.DP) +r(A.Kv,A.Ts) +r(A.Kw,A.xy) +r(A.Kx,A.GI) +r(A.HL,A.qB) +s(A.XU,A.eH) +r(A.HM,A.ei) +s(A.XV,A.aqX) +s(A.XW,A.aqj) +s(A.Yu,A.k5) +s(A.Yv,A.f3) +s(A.Yw,A.k5) +s(A.Yx,A.f3) +s(A.YA,A.aq) +r(A.a0B,A.aar) +s(A.a4N,A.aq) +s(A.a4O,A.aq) +s(A.a2x,A.aq) +s(A.YZ,A.aq) +s(A.a4B,A.eH) +r(A.z4,A.j1) +r(A.a4S,A.aT) +s(A.a4T,A.iY) +s(A.a4D,A.eH) +r(A.IF,A.ei) +r(A.IG,A.lN) +s(A.a4z,A.f3) +s(A.a4J,A.QJ) +r(A.a_u,A.ei) +s(A.a4Q,A.uU) +s(A.a4R,A.iM) +r(A.KU,A.at) +s(A.a4W,A.uU) +r(A.IK,A.ij) +r(A.KK,A.ei) +r(A.L_,A.ei) +r(A.a4X,A.lN) +s(A.a1o,A.eH) +r(A.zI,A.lN) +r(A.uR,A.Q3) +r(A.a50,A.qB) +s(A.Yd,A.nq) +r(A.Jm,A.ij) +r(A.Jk,A.ij) +s(A.a1M,A.nq) +r(A.Jq,A.ei) +r(A.Jr,A.lN) +r(A.zp,A.ei) +s(A.a_5,A.f3) +s(A.a5_,A.eS) +r(A.KW,A.Tq) +s(A.a28,A.aq) +s(A.a29,A.f3) +s(A.a2b,A.f3) +s(A.a2g,A.aq) +s(A.a2h,A.ahH) +s(A.a4p,A.aq) +s(A.WK,A.eH) +r(A.KX,A.j1) +r(A.KY,A.j1) +s(A.Ke,A.arE) +s(A.a5q,A.QJ) +s(A.a5r,A.as0) +r(A.a4U,A.aT) +s(A.YK,A.f3) +s(A.YI,A.eH) +s(A.YJ,A.f3) +s(A.a1s,A.aq) +r(A.a2i,A.Fx) +r(A.a2j,A.Fx) +r(A.a4I,A.Fx) +s(A.WN,A.On) +s(A.a4i,A.asu) +s(A.a5t,A.Vv) +s(A.a4f,A.Vx) +s(A.a4g,A.asw) +s(A.a4h,A.asv) +s(A.a4b,A.GK) +s(A.a4j,A.GK) +s(A.a4c,A.GK) +s(A.a4d,A.Vx)})() +var v={typeUniverse:{eC:new Map(),tR:{},eT:{},tPV:{},sEA:[]},mangledGlobalNames:{l:"int",z:"double",cg:"num",f:"String",F:"bool",b7:"Null",v:"List"},mangledNames:{},types:["~()","~(e)","z(z)","~(b1)","i(z,kG)","F()","~(l3)","m(bV)","~(F)","F(z)","~(ph,k)","i(M)","~(I?)","~(lj)","f9(z)","~(r)","~(aI)","F(mx,k)","b7(e)","b7()","F(aI)","v()","~(bg)","~(f,@)","~(@)","F(dI)","~(kC,F)","~(ye)","~(iB)","b7(~)","F(na)","~(li)","ar(@)","~(c1?)","F(l)","F(I?)","F(f)","b7(@)","~(z)","F(lm)","l(dI,dI)","f()","l(l)","ae<~>()","b7(I,dw)","m?(bV)","~(pp)","jY(v,jY)","l()","~(pM)","f(th)","au()","~(eS)","~(l)","~(po)","~(ni)","F(eI)","~(~())","j3()","F(fS)","au<+(f,dx)>()","z(H)","m(m)","~(f,f)","jH(bV)","F(hV)","f(f)","l(@,@)","~(cL,AA?)","F(hw)","au<@>()","~(fg,~())","z()","fD(kC)","bA?(bJ?)","ae<@>(ly)","F(@)","iE(ad,z,cq,l)","~(pd)","z(cq,l)","l(r,r)","z?()","f(l)","~(wM)","~(rC)","l(f)","~(FZ)","i(M,i?)","~(wN)","f4(@)","~(D4)","F(ad)","v()","bA?(bJ?)","f(ti)","ea(M)","i(M)?(vf?)","dE(l)","eE(eE)","~(cL,E4?)","v(v)","G(H,az)","~(UL)","F(cP)","l(cP,cP)","b7(F)","k1(cJ,l,db,l)","e()","F(rz)","~(f)","~(l,cJ)","Gg?()","ae()","fA(fT)","oF(ad,z,cq,l)","fG(l)","~(cL,t9?)","bm(bm,bm)","~(mI)","ae<~>(I?)","z(z,z)","F(u6)","l(I?)","F(I?,I?)","~(I?,I?)","F(h1)","bV<0^>()","au()","~(I,dw)","@(@)","F(hX)","v(cq,v)","~(kK)","ae<~>(ly)","I()","iz()","am([e?])","l(m2,m2)","ae([e?])","hX()","z(dE)","k(z)","~(cL,u4?)","~(l,m)","ow(M,dr)","f(M,dr)","cJ(l)","m5?(l)","i(@,kG)","~(rD)","F(ad,cq)","rX(M,az)","~(uc)","~(@,@)","f(hU)","F(F?)","z(l)","~(G_)","~(G2)","~(G0)","F(eS)","F(eS,z)","z(db)","~(fV)","fD?(kC)","kJ(bg)","nK()","I?(I?)","~(aB)","n9(M)","ae(c1)","mG(@)","oz(@)","og(@)","ar<@>?(ar<@>?,@,ar<@>(@))","~(I,dw?)","~(fw,F)","i(M,cv,wq,M,M)","~(ke)","ke()","~(ks)","ks()","~(kh)","kh()","bd(z)","+(f,dx)(f,f,f)","~(eV,f,l)","kK()","~(i0)","0^(0^,0^)","i0()","~(ic)","ic()","l(ek,ek)","b9(b9,F,j3)","~([b1?])","F(tu)","aJ()","~(dR)","ae(c1?)","b7(lG)","@()","v(kY)","~(v)","~(pJ)","F(mx)","hE(ky)","~({curve:hf,descendant:r?,duration:b1,rect:w?})","ae<@>()","z(H,z)","~(aGW)","m_()","~(jm)","v>()","z(G)","G()","m?()","~(G1)","qm(M,cv,i?)","ql(M,cv,i?)","~(oG)","~([b6?])","w()","d0(bV)","@(f)","bA?(bJ?)","f(I?)","d9(d9)","F(aH)","oY(dI,kv)","ae()","~(aH)","b7(f)","eh()","F(fh)","f(f,f)","m?(m?)","k()","lO(fh)","d9/(f?)","v()","~(F?)","f(ii)","rN()","i(M,jf)","ae<+(f,fa?)>()","ad(z)","fa?()","~(lC)","ad(ad)","aH(l,jv)","~(cL,Ee?)","pt(l,z)","i5(aH)","fW(z)","dh(l)","~(km)","pB(dh)","rW(p0)","uv({from:z?})","~(yH)","~(ur,yk)","f(f,m)","mS(M)","i(M,f?,i?)","~(p2,l)","ll(lC)","~(f,e)","ae<~>(~)","jH(cL,t9?)","aC()","~(w2?,yi?)","qZ(i)","~(f?)","z(@)","lS(l)","eh?()","ad(aH)","w6(f)","fA?(fT)","~(G)","~(v,e)","f(dA)","yZ()","~(xf)","z?(l)","G(e)","F(lE)","ej?(lE)","f(z)","~(zz)","aJ<~(bg),bd?>()","~(~(bg),bd?)","uI()","v(v)","fG?(l)","ae()","ox(dZ)","vV(dZ)","r8(dZ)","wT(w?,w?)","i(M,~())","v(cq,v)","~(hw)","pV()","z(nM)","zo()","0^?(0^?(bJ?))","0^?(bA<0^>?(bJ?))","tP(M)","bA?(bJ?)","@(@,f)","bA?(bJ?)","xJ(M)","bA?(bJ?)","bA?(bJ?)","d0?(bV)","d0?(bJ?)","aH(aH)","m?(bJ?)","nH?(bJ?)","tj?(bJ?)","b1?(bJ?)","F?(bJ?)","hK?(bJ?)","wy?(bJ?)","u3(M)","b_(bV)","b7(~())","F(m?)","b7(v,e)","b_?(bV)","xc(M)","w()?(H)","F(M)","~(b6?)","xb(M)","xa(M)","F(oS?)","m(q4)","tc(M)","X?(M,te,ca)","F(jo)","f?(f)","h9(k_)","qN(M)","qM(M)","nd?(eh)","mq(M,i?)","b7(@,dw)","F(bV)","z(bV)","~(l,@)","qL(M)","~(hB,jz?)","~(kQ)","qK(M)","qJ(M)","vJ(M)","qI(M)","cv(F)","uu(@)","jJ()","aH>(I,m1<@>)","F(aH>)","~([pM?])","~(G?)","p()","d3()","vr()","dM()","ae(lp{allowUpscaling:F,cacheHeight:l?,cacheWidth:l?})","ae(lp{getTargetSize:b08(l,l)?})","de(de,cs)","cs(cs)","F(cs)","f(cs)","m(z)","z9()","~(fw?,F)","ae<~>(I,dw?)","qH(M)","b7(a6E)","qG(M)","d0(cL,u4?)","~(I,dw?)?(jm)","~(ix)","~(I[dw?])","ne(ep)","w(ep)","tz(ep)","F(l,F)","tS?(Mx,f,f)","kD()","t1(M)","p4(p4)","ne?()","t0(M)","mT(k,l)","f(z,z,f)","aD<@>(@)","~(hB)","F(mX)","w(w?,eE)","wH(M)","d0(fB)","~(fB,bd)","F(fB)","t8(M)","~(v{isMergeUp:F})","t7(M)","t6(M)","AU(v)","~(nW)","F(nW)","~(iw)","m3?(ph,k)","F(xW{crossAxisPosition!z,mainAxisPosition!z})","t5(M)","t4(M)","F(H)","b7(am)","F(dL)","t3(M)","~(l,yX)","~(ub)","~(cP)","iw(ot)","cP(nZ)","t2(M)","t_(M)","l(cP)","cP(l)","~(nu)","~(dv,~(I?))","ae()","c1(c1?)","ae(f)","oj(aJ)","eg()","ae(f?)","~(FX,@)","ae<~>(c1?,~(c1?))","eV(c1)","ae<~>(ae)","ae<~>(eV)","ae>(@)","~(kv)","cJ(aH)","Ei()","ug(@)","ct(z,kG)","bW(z,kG)","v()","v(v)","z(cg)","v<@>(f)","v(ua)","~([I?])","aJ(aJ,f)","~(bk)","~(f,l)","cJ(aH>)","cx<@>?(i7)","cx<@>(i7)","F(wD)","~(f,l?)","vD(M)","Gg()","ae<~>(@)","oy(M)","~(eb)","uH()","~(n)","l(l,l)","~(pR)","~(lM)","~(ns)","~(eR)","~(acy)","~(jK)","I?(hQ)","dF(dF,pP)","~(f,f?)","ae<~>(pk)","~(dF)","F(dF?,dF)","r3(M,kL)","F(iI)","~(l,l,l)","F(CQ)","~(yW)","F(yR)","eV(@,@)","F(pS)","bV(ek)","qC(M,az)","v(M)","w(ek)","l(mc,mc)","v(ek,n)","F(ek)","hP(aI)","aI?(aI)","I?(l,aI?)","db(db)","b7(cJ,l,db,l)","k9()","~(k9)","~(v,e)","F(l,l)","iN<~>(M,dr)","ln(hM)","b7(l,or)","u0(M,az)","or(l,hM)","vw(M,l)","xG(M,az)","ow(M,iv)","~(nk)","~(nn)","~(fk,I)","pq(M,i?)","~(nQ)","to(M,l)","F(nQ)","n9(M,i?)","rM(M)","l4(M)","~(l,F(lm))","z(cJ)","l(dh,dh)","u1(@)","qU(@)","tm(@)","m0(@)","qR(@)","ae<@>(zl)","aJ(v<@>)","aJ(aJ)","b7(aJ)","b7(M,te,ca)","~(l,k)","~(np?,F)","F(cx<@>?)","F(nc)","~(na)","~(l,tQ)","eI(cx<@>)","@(@,@)","aH>(@,@)","uT()","H(l)","~(az)","~(l,z)","vF(M,i?)","y0(M,az)","~(fg)","bK(F)","ae(F)","tO(@)","pA(M,i?)","mq(M)","wr(M,i?)","F(aMs)","rK(bg)","wO(bg)","dE(dE,dE)","ae<~>([e?])","~(I)","i(M,kL)","F(kx)","b7(v<~>)","~(aH)","F(dE)","~(f,I?)","F(nq?)","mg()","~(mg)","mh()","~(mh)","~(nj)","l(eS,eS)","w(w)","F(w)","tB(@)","~(xS,b6)","v()","I?()","~(H)","aI?()","qh(M)","~(v)","l(pf)","l(p3,p3)","F(cq)","lY()","~(lY)","lZ()","~(lZ)","~(pT)","~(pw)","uY(M,nf)","nw()","b7(c1)","ae()","ae<~>(f,c1?,~(c1?)?)","ey<~>({arguments!I?,child!i,key!hq,name!f?,restorationId!f})","wo(M)","F(hT,oL)","~(lU)","wS(M,dr)","vQ(M,dr)","w7(M,dr)","F(cx<@>,@)","v()","d9/(d9)","F(FS,iw)","f?/(f?)","f(d9)","F(cx,I?,fh?)","rY(@)","ae<~>(F)","0&(M,dr)","cq(cq)","b7(I?)","l(aH)","aJ(iJ)","b7(iH,iH)","~(eV)","b7(M,dr)","oR(M,i)","F(ey,dr)","F(~)","ae(N0)","F(f,f)","rB(@)","am()","~(v)","De()","f(f?)","l(e2,e2)","l(l,e2)","e2(f)","e2(f,f,f)","eq(v)","eq(f?,eq)","f?()","l(kV)","wh(@)","I(kV)","I(h1)","l(h1,h1)","v(aH>)","ny()","ae(f,aJ)","ae()","iV(~)","DF()","ae(lp)","l(qe,qe)","l(pg,pg)","nV(iV)","b7(nV)","z(bY,bY,bY,bY,z)","fr?(f)","v(f)","~(cG?)","fD(iU)","v()","v()","fr()","~(cG)","au()","au()","au()","au>()","au()","qE(@)","au()","au()","au()","au()","au()","au()","F(m)","y9()","F(cJ)","pY(f)","fI(f,f,v,f,f)","eY(f,f,+(f,dx))","+(f,dx)(f,f,f,+(f,dx))","~(z,z,z,z)","+(f,dx)(f)","h0(f,f,f,f)","kM(f,f,f)","jN(f,f,f)","kN(f,v,f,f)","k_(h9)","kP(f,f,f,f)","kO(f,f,f,eu?,f,f?,f,f)","eu(f,f,+(f,dx))","eu(f,f,+(f,dx),f,+(f,dx))","f(f,f,f)","au(pX)","~(d1)","~(l5)","e(l{params:I?})","~(uC?,aO4?,uC,~())","l(c8<@>,c8<@>)","v()","v(f,v)","h9(z)","G?(G?,G?,z)","z?(cg?,cg?,z)","m?(m?,m?,z)","l(l,@)","cJ(cJ,cJ,z)","db(db,db,z)","aL(aL,aL,z)","k1?(cJ,l,db,l)","ad(ad,ad,z)","jl(jl,jl,z)","jM(jM,jM,z)","hU(hU,hU,z)","ii(ii,ii,z)","cq(cq,cq,z)","jg(jg,jg,z)","oF(ad,z,cq,l{size:z?})","z(k,k)","dE(dE,dE,z)","i5(i5,i5,z)","fW(fW,fW,z)","dh(dh,dh,z)","pB?(dh)","p?(l,dh)","f(l,dh)","pv(w?,w?)","i(M,G,i)","i(M,k,k,i)","~(bG{forceReport:F})","kB?(f)","z(z,z,z)","F?(F?,F?,z)","i(M,oA)","i(M,i)","ed?(ed?,ed?,z)","de?(de?,de?,z)","p?(p?,p?,z)","l(JY<@>,JY<@>)","F({priority!l,scheduler!fi})","v(f)","~(dI{alignment:z?,alignmentPolicy:u7?,curve:hf?,duration:b1?})","l(aI,aI)","dt(dt?,dt?,z)","v>(ht,f)","l(i,l)","h9(aH)","~()(Px?>,um<@>)","he<~>({arguments!I?,child!i,key!hq,name!f?,restorationId!f})","i(M,cv,cv,i)","iN<~>({arguments!I?,child!i,key!hq,name!f?,restorationId!f})","~(l,db)","l(F)","i(k_)","e(l)","l(l,l,z)","~(f?{wrapWidth:l?})","b7(dR?)","~(fw)"],interceptorsByTag:null,leafTags:null,arrayRti:Symbol("$ti"),rttc:{"2;":(a,b)=>c=>c instanceof A.dj&&a.b(c.a)&&b.b(c.b),"2;cacheSize,maxTextLength":(a,b)=>c=>c instanceof A.zq&&a.b(c.a)&&b.b(c.b),"2;key,value":(a,b)=>c=>c instanceof A.a0F&&a.b(c.a)&&b.b(c.b),"2;wordEnd,wordStart":(a,b)=>c=>c instanceof A.a0G&&a.b(c.a)&&b.b(c.b),"3;":(a,b,c)=>d=>d instanceof A.IQ&&a.b(d.a)&&b.b(d.b)&&c.b(d.c),"3;breaks,graphemes,words":(a,b,c)=>d=>d instanceof A.a0H&&a.b(d.a)&&b.b(d.b)&&c.b(d.c),"3;large,medium,small":(a,b,c)=>d=>d instanceof A.a0I&&a.b(d.a)&&b.b(d.b)&&c.b(d.c),"3;x,y,z":(a,b,c)=>d=>d instanceof A.IR&&a.b(d.a)&&b.b(d.b)&&c.b(d.c),"4;":a=>b=>b instanceof A.a0J&&A.aEo(a,b.a),"4;domBlurListener,domFocusListener,element,semanticsNodeId":a=>b=>b instanceof A.IS&&A.aEo(a,b.a),"5;":a=>b=>b instanceof A.a0K&&A.aEo(a,b.a),"8;":a=>b=>b instanceof A.a0L&&A.aEo(a,b.a)}} +A.b2j(v.typeUniverse,JSON.parse('{"RD":"p_","m4":"p_","ls":"p_","b9t":"e","b9u":"e","b8m":"e","b8k":"aB","b98":"aB","b8o":"ol","b8l":"ab","b9B":"ab","b9Z":"ab","b9x":"aN","baY":"lG","b8p":"aR","b9z":"aR","ba_":"bE","b92":"bE","b9j":"mH","baA":"fZ","b8w":"la","bab":"la","b9o":"rJ","b9m":"rI","b8D":"cD","b8F":"k4","b8I":"fY","b8J":"hd","b8E":"hd","b8G":"hd","r0":{"aft":[]},"AY":{"ix":[]},"fa":{"bX":[]},"ee":{"dJ":[]},"ll":{"p4":[]},"MI":{"k3":[]},"AX":{"k3":[]},"vz":{"k3":[]},"MQ":{"k3":[]},"MX":{"k3":[]},"vy":{"k3":[]},"Dk":{"n":["kp"],"n.E":"kp"},"Po":{"c2":[]},"MN":{"k3":[]},"Hc":{"k3":[]},"Hd":{"k3":[]},"MH":{"ix":[]},"vN":{"fz":[]},"SQ":{"fz":[]},"M3":{"fz":[],"a6T":[]},"N2":{"fz":[],"a9l":[]},"N4":{"fz":[],"a9o":[]},"N3":{"fz":[],"a9n":[]},"QS":{"fz":[],"aiQ":[]},"Gy":{"fz":[],"UT":[]},"QQ":{"fz":[],"UT":[],"aiO":[]},"Pr":{"fz":[],"afy":[]},"Rt":{"fz":[]},"N9":{"fz":[],"a9C":[]},"vA":{"ne":[]},"B_":{"tz":[]},"MV":{"n":["x6"],"n.E":"x6"},"MJ":{"x6":[]},"TC":{"vB":[],"j0":[]},"ML":{"vB":[],"j0":[]},"MM":{"vB":[],"j0":[]},"MK":{"vB":[],"j0":[]},"MO":{"vB":[],"j0":[]},"MP":{"p4":[]},"My":{"bX":[]},"Pl":{"aLh":[]},"Pk":{"c2":[]},"Pj":{"c2":[]},"eZ":{"n":["1"],"n.E":"1"},"nN":{"n":["1"],"n.E":"1"},"OW":{"fa":[],"bX":[]},"Cd":{"fa":[],"bX":[]},"Ce":{"fa":[],"bX":[]},"DV":{"ee":[],"dJ":[],"a6T":[]},"DX":{"ee":[],"dJ":[],"a9o":[]},"Rn":{"ee":[],"dJ":[],"a9n":[]},"DW":{"ee":[],"dJ":[],"a9l":[]},"DY":{"ee":[],"dJ":[],"a9C":[]},"DZ":{"ee":[],"dJ":[],"afy":[]},"E_":{"ee":[],"dJ":[],"aiO":[]},"E0":{"ee":[],"dJ":[],"aiQ":[]},"y8":{"ne":[]},"pL":{"tz":[]},"Uh":{"n":["x6"],"n.E":"x6"},"Ug":{"x6":[]},"Rq":{"dJ":[]},"BF":{"du":[]},"DO":{"du":[]},"Ra":{"du":[]},"Re":{"du":[]},"Rc":{"du":[]},"Rb":{"du":[]},"Rd":{"du":[]},"QY":{"du":[]},"QX":{"du":[]},"QW":{"du":[]},"R1":{"du":[]},"R3":{"du":[]},"R9":{"du":[]},"R7":{"du":[]},"R6":{"du":[]},"R_":{"du":[]},"R2":{"du":[]},"QZ":{"du":[]},"R5":{"du":[]},"R8":{"du":[]},"R0":{"du":[]},"R4":{"du":[]},"E1":{"ee":[],"dJ":[]},"rl":{"j0":[]},"w5":{"j0":[]},"P8":{"j0":[]},"wp":{"j0":[]},"P7":{"j0":[]},"H1":{"lk":[]},"Ir":{"lk":[]},"Oh":{"lk":[]},"wX":{"lk":[]},"wV":{"lk":[]},"Rp":{"dJ":[]},"E2":{"ee":[],"dJ":[],"UT":[]},"Ph":{"ix":[]},"Pg":{"ix":[]},"Fz":{"Cg":[]},"Cs":{"aft":[]},"Mv":{"ix":[]},"A7":{"Cg":[]},"xC":{"no":[]},"wg":{"no":[]},"CS":{"no":[]},"td":{"no":[]},"Tx":{"aGW":[]},"G3":{"no":[]},"mi":{"B":["1"],"v":["1"],"a8":["1"],"n":["1"]},"Z7":{"mi":["l"],"B":["l"],"v":["l"],"a8":["l"],"n":["l"]},"UY":{"mi":["l"],"B":["l"],"v":["l"],"a8":["l"],"n":["l"],"B.E":"l","n.E":"l","mi.E":"l"},"xe":{"tx":[]},"ME":{"y6":[]},"SR":{"y6":[]},"O8":{"km":[]},"Og":{"wd":[]},"e":{"am":[]},"CJ":{"F":[],"cQ":[]},"CL":{"b7":[],"cQ":[]},"p_":{"e":[],"am":[]},"q":{"v":["1"],"e":[],"a8":["1"],"am":[],"n":["1"],"n.E":"1"},"ag6":{"q":["1"],"v":["1"],"e":[],"a8":["1"],"am":[],"n":["1"],"n.E":"1"},"oV":{"z":[],"cg":[],"c8":["cg"]},"wB":{"z":[],"l":[],"cg":[],"c8":["cg"],"cQ":[]},"CM":{"z":[],"cg":[],"c8":["cg"],"cQ":[]},"lr":{"f":[],"c8":["f"],"cQ":[]},"kS":{"n":["2"]},"qY":{"kS":["1","2"],"n":["2"],"n.E":"2"},"HO":{"qY":["1","2"],"kS":["1","2"],"a8":["2"],"n":["2"],"n.E":"2"},"H9":{"B":["2"],"v":["2"],"kS":["1","2"],"a8":["2"],"n":["2"]},"ft":{"H9":["1","2"],"B":["2"],"v":["2"],"kS":["1","2"],"a8":["2"],"n":["2"],"B.E":"2","n.E":"2"},"mB":{"bV":["2"],"kS":["1","2"],"a8":["2"],"n":["2"],"n.E":"2"},"mz":{"aM":["3","4"],"aJ":["3","4"],"aM.V":"4","aM.K":"3"},"mA":{"kS":["1","2"],"a8":["2"],"n":["2"],"n.E":"2"},"iK":{"bX":[]},"fu":{"B":["l"],"v":["l"],"a8":["l"],"n":["l"],"B.E":"l","n.E":"l"},"a8":{"n":["1"]},"af":{"a8":["1"],"n":["1"]},"ac":{"af":["1"],"a8":["1"],"n":["1"],"n.E":"1","af.E":"1"},"hr":{"n":["2"],"n.E":"2"},"rj":{"hr":["1","2"],"a8":["2"],"n":["2"],"n.E":"2"},"R":{"af":["2"],"a8":["2"],"n":["2"],"n.E":"2","af.E":"2"},"ba":{"n":["1"],"n.E":"1"},"kb":{"n":["2"],"n.E":"2"},"uo":{"n":["1"],"n.E":"1"},"BM":{"uo":["1"],"a8":["1"],"n":["1"],"n.E":"1"},"nv":{"n":["1"],"n.E":"1"},"w3":{"nv":["1"],"a8":["1"],"n":["1"],"n.E":"1"},"FB":{"n":["1"],"n.E":"1"},"hj":{"a8":["1"],"n":["1"],"n.E":"1"},"mQ":{"n":["1"],"n.E":"1"},"BL":{"mQ":["1"],"a8":["1"],"n":["1"],"n.E":"1"},"dG":{"n":["1"],"n.E":"1"},"yy":{"B":["1"],"v":["1"],"a8":["1"],"n":["1"]},"ZC":{"af":["l"],"a8":["l"],"n":["l"],"n.E":"l","af.E":"l"},"cw":{"aM":["l","1"],"qi":["l","1"],"aJ":["l","1"],"aM.V":"1","aM.K":"l"},"cO":{"af":["1"],"a8":["1"],"n":["1"],"n.E":"1","af.E":"1"},"lW":{"FX":[]},"r5":{"kH":["1","2"],"wQ":["1","2"],"qi":["1","2"],"aJ":["1","2"]},"vL":{"aJ":["1","2"]},"bs":{"vL":["1","2"],"aJ":["1","2"]},"uP":{"n":["1"],"n.E":"1"},"bz":{"vL":["1","2"],"aJ":["1","2"]},"Bc":{"jB":["1"],"bV":["1"],"a8":["1"],"n":["1"]},"fO":{"jB":["1"],"bV":["1"],"a8":["1"],"n":["1"],"n.E":"1"},"fb":{"jB":["1"],"bV":["1"],"a8":["1"],"n":["1"],"n.E":"1"},"PA":{"iH":[]},"mY":{"iH":[]},"DC":{"nD":[],"bX":[]},"PC":{"bX":[]},"V2":{"bX":[]},"QM":{"c2":[]},"JM":{"dw":[]},"ou":{"iH":[]},"N6":{"iH":[]},"N7":{"iH":[]},"Us":{"iH":[]},"U8":{"iH":[]},"vq":{"iH":[]},"Xn":{"bX":[]},"SZ":{"bX":[]},"fx":{"aM":["1","2"],"aJ":["1","2"],"aM.V":"2","aM.K":"1"},"aX":{"a8":["1"],"n":["1"],"n.E":"1"},"CN":{"fx":["1","2"],"aM":["1","2"],"aJ":["1","2"],"aM.V":"2","aM.K":"1"},"rT":{"fx":["1","2"],"aM":["1","2"],"aJ":["1","2"],"aM.V":"2","aM.K":"1"},"zb":{"S3":[],"th":[]},"VG":{"n":["S3"],"n.E":"S3"},"y3":{"th":[]},"a2B":{"n":["th"],"n.E":"th"},"Dl":{"e":[],"am":[],"Mx":[],"cQ":[]},"Dq":{"e":[],"am":[]},"Dm":{"e":[],"c1":[],"am":[],"cQ":[]},"wZ":{"bD":["1"],"e":[],"am":[]},"pc":{"B":["z"],"v":["z"],"bD":["z"],"e":[],"a8":["z"],"am":[],"n":["z"]},"iR":{"B":["l"],"v":["l"],"bD":["l"],"e":[],"a8":["l"],"am":[],"n":["l"]},"Dn":{"pc":[],"B":["z"],"acM":[],"v":["z"],"bD":["z"],"e":[],"a8":["z"],"am":[],"n":["z"],"cQ":[],"B.E":"z","n.E":"z"},"QB":{"pc":[],"B":["z"],"acN":[],"v":["z"],"bD":["z"],"e":[],"a8":["z"],"am":[],"n":["z"],"cQ":[],"B.E":"z","n.E":"z"},"QC":{"iR":[],"B":["l"],"afX":[],"v":["l"],"bD":["l"],"e":[],"a8":["l"],"am":[],"n":["l"],"cQ":[],"B.E":"l","n.E":"l"},"Dp":{"iR":[],"B":["l"],"afY":[],"v":["l"],"bD":["l"],"e":[],"a8":["l"],"am":[],"n":["l"],"cQ":[],"B.E":"l","n.E":"l"},"QD":{"iR":[],"B":["l"],"afZ":[],"v":["l"],"bD":["l"],"e":[],"a8":["l"],"am":[],"n":["l"],"cQ":[],"B.E":"l","n.E":"l"},"Dr":{"iR":[],"B":["l"],"arA":[],"v":["l"],"bD":["l"],"e":[],"a8":["l"],"am":[],"n":["l"],"cQ":[],"B.E":"l","n.E":"l"},"Ds":{"iR":[],"B":["l"],"yu":[],"v":["l"],"bD":["l"],"e":[],"a8":["l"],"am":[],"n":["l"],"cQ":[],"B.E":"l","n.E":"l"},"Dt":{"iR":[],"B":["l"],"arB":[],"v":["l"],"bD":["l"],"e":[],"a8":["l"],"am":[],"n":["l"],"cQ":[],"B.E":"l","n.E":"l"},"tt":{"iR":[],"B":["l"],"eV":[],"v":["l"],"bD":["l"],"e":[],"a8":["l"],"am":[],"n":["l"],"cQ":[],"B.E":"l","n.E":"l"},"Kc":{"ih":[]},"Y0":{"bX":[]},"Kd":{"nD":[],"bX":[]},"aD":{"ae":["1"]},"K8":{"UL":[]},"GR":{"Nb":["1"]},"fn":{"n":["1"],"n.E":"1"},"LR":{"bX":[]},"j5":{"m8":["1"],"zx":["1"],"eg":["1"],"eg.T":"1"},"yJ":{"uJ":["1"],"q1":["1"]},"JW":{"q0":["1"]},"GS":{"q0":["1"]},"yK":{"Nb":["1"]},"bI":{"yK":["1"],"Nb":["1"]},"FL":{"eg":["1"]},"q_":{"VZ":["1"],"JP":["1"]},"m8":{"zx":["1"],"eg":["1"],"eg.T":"1"},"uJ":{"q1":["1"]},"zx":{"eg":["1"]},"HP":{"eg":["1"],"eg.T":"1"},"a4k":{"uC":[]},"a1q":{"uC":[]},"nP":{"aM":["1","2"],"aJ":["1","2"],"aM.V":"2","aM.K":"1"},"q5":{"nP":["1","2"],"aM":["1","2"],"aJ":["1","2"],"aM.V":"2","aM.K":"1"},"Hw":{"nP":["1","2"],"aM":["1","2"],"aJ":["1","2"],"aM.V":"2","aM.K":"1"},"uO":{"a8":["1"],"n":["1"],"n.E":"1"},"Ii":{"fx":["1","2"],"aM":["1","2"],"aJ":["1","2"],"aM.V":"2","aM.K":"1"},"mb":{"zv":["1"],"jB":["1"],"bV":["1"],"a8":["1"],"n":["1"],"n.E":"1"},"im":{"zv":["1"],"jB":["1"],"aLF":["1"],"bV":["1"],"a8":["1"],"n":["1"],"n.E":"1"},"ta":{"n":["1"],"n.E":"1"},"B":{"v":["1"],"a8":["1"],"n":["1"]},"aM":{"aJ":["1","2"]},"yz":{"aM":["1","2"],"qi":["1","2"],"aJ":["1","2"]},"Il":{"a8":["2"],"n":["2"],"n.E":"2"},"wQ":{"aJ":["1","2"]},"kH":{"wQ":["1","2"],"qi":["1","2"],"aJ":["1","2"]},"HC":{"HD":["1"],"aKK":["1"]},"HE":{"HD":["1"]},"BB":{"a8":["1"],"n":["1"],"n.E":"1"},"CY":{"af":["1"],"a8":["1"],"n":["1"],"n.E":"1","af.E":"1"},"jB":{"bV":["1"],"a8":["1"],"n":["1"]},"zv":{"jB":["1"],"bV":["1"],"a8":["1"],"n":["1"]},"FH":{"aM":["1","2"],"aJ":["1","2"],"aM.V":"2","aM.K":"1"},"nX":{"a8":["1"],"n":["1"],"n.E":"1"},"uW":{"a8":["2"],"n":["2"],"n.E":"2"},"JG":{"a8":["aH<1,2>"],"n":["aH<1,2>"],"n.E":"aH<1,2>"},"nY":{"mf":["1","2","1"],"mf.T":"1"},"JK":{"mf":["1","h3<1,2>","2"],"mf.T":"2"},"uV":{"mf":["1","h3<1,2>","aH<1,2>"],"mf.T":"aH<1,2>"},"y_":{"jB":["1"],"bV":["1"],"a8":["1"],"n":["1"],"n.E":"1"},"Zc":{"aM":["f","@"],"aJ":["f","@"],"aM.V":"@","aM.K":"f"},"Zd":{"af":["f"],"a8":["f"],"n":["f"],"n.E":"f","af.E":"f"},"LM":{"rk":[]},"a3R":{"bl":["f","v"]},"LO":{"bl":["f","v"],"bl.S":"f","bl.T":"v"},"a3Q":{"bl":["v","f"]},"LN":{"bl":["v","f"],"bl.S":"v","bl.T":"f"},"Mf":{"bl":["v","f"],"bl.S":"v","bl.T":"f"},"Me":{"bl":["f","v"],"bl.S":"f","bl.T":"v"},"HV":{"bl":["1","3"],"bl.S":"1","bl.T":"3"},"wC":{"bX":[]},"PD":{"bX":[]},"PF":{"bl":["I?","f"],"bl.S":"I?","bl.T":"f"},"PE":{"bl":["f","I?"],"bl.S":"f","bl.T":"I?"},"PK":{"rk":[]},"PM":{"bl":["f","v"],"bl.S":"f","bl.T":"v"},"PL":{"bl":["v","f"],"bl.S":"v","bl.T":"f"},"V7":{"rk":[]},"V8":{"bl":["f","v"],"bl.S":"f","bl.T":"v"},"GD":{"bl":["v","f"],"bl.S":"v","bl.T":"f"},"iz":{"c8":["iz"]},"z":{"cg":[],"c8":["cg"]},"b1":{"c8":["b1"]},"l":{"cg":[],"c8":["cg"]},"v":{"a8":["1"],"n":["1"]},"cg":{"c8":["cg"]},"S3":{"th":[]},"bV":{"a8":["1"],"n":["1"]},"f":{"c8":["f"]},"qA":{"bX":[]},"nD":{"bX":[]},"jZ":{"bX":[]},"xp":{"bX":[]},"CA":{"bX":[]},"QH":{"bX":[]},"uA":{"bX":[]},"uz":{"uA":[],"bX":[]},"jE":{"bX":[]},"Nd":{"bX":[]},"QU":{"bX":[]},"FK":{"bX":[]},"Y2":{"c2":[]},"fR":{"c2":[]},"HX":{"af":["1"],"a8":["1"],"n":["1"],"n.E":"1","af.E":"1"},"a2F":{"dw":[]},"EY":{"n":["l"],"n.E":"l"},"Km":{"V4":[]},"jS":{"V4":[]},"Xp":{"V4":[]},"cD":{"e":[],"am":[]},"aB":{"e":[],"am":[]},"hR":{"e":[],"am":[]},"hS":{"e":[],"am":[]},"oM":{"e":[],"am":[]},"i2":{"e":[],"am":[]},"bE":{"e":[],"am":[]},"i4":{"e":[],"am":[]},"lG":{"aB":[],"e":[],"am":[]},"i9":{"e":[],"am":[]},"ia":{"e":[],"am":[]},"ib":{"e":[],"am":[]},"fY":{"e":[],"am":[]},"id":{"e":[],"am":[]},"fZ":{"e":[],"am":[]},"ie":{"e":[],"am":[]},"aR":{"bE":[],"e":[],"am":[]},"LA":{"e":[],"am":[]},"LE":{"bE":[],"e":[],"am":[]},"LK":{"bE":[],"e":[],"am":[]},"AD":{"e":[],"am":[]},"la":{"bE":[],"e":[],"am":[]},"Ni":{"e":[],"am":[]},"vP":{"e":[],"am":[]},"hd":{"e":[],"am":[]},"k4":{"e":[],"am":[]},"Nj":{"e":[],"am":[]},"Nk":{"e":[],"am":[]},"Nw":{"e":[],"am":[]},"mH":{"bE":[],"e":[],"am":[]},"NX":{"e":[],"am":[]},"Bz":{"B":["jw"],"b0":["jw"],"v":["jw"],"bD":["jw"],"e":[],"a8":["jw"],"am":[],"n":["jw"],"b0.E":"jw","B.E":"jw","n.E":"jw"},"BA":{"e":[],"jw":["cg"],"am":[]},"NZ":{"B":["f"],"b0":["f"],"v":["f"],"bD":["f"],"e":[],"a8":["f"],"am":[],"n":["f"],"b0.E":"f","B.E":"f","n.E":"f"},"O0":{"e":[],"am":[]},"aN":{"bE":[],"e":[],"am":[]},"ab":{"e":[],"am":[]},"Ov":{"B":["hR"],"b0":["hR"],"v":["hR"],"bD":["hR"],"e":[],"a8":["hR"],"am":[],"n":["hR"],"b0.E":"hR","B.E":"hR","n.E":"hR"},"Ox":{"e":[],"am":[]},"OY":{"bE":[],"e":[],"am":[]},"Pd":{"e":[],"am":[]},"rI":{"B":["bE"],"b0":["bE"],"v":["bE"],"bD":["bE"],"e":[],"a8":["bE"],"am":[],"n":["bE"],"b0.E":"bE","B.E":"bE","n.E":"bE"},"rJ":{"e":[],"am":[]},"Q4":{"e":[],"am":[]},"Qn":{"e":[],"am":[]},"Qr":{"e":[],"aM":["f","@"],"am":[],"aJ":["f","@"],"aM.V":"@","aM.K":"f"},"Qs":{"e":[],"aM":["f","@"],"am":[],"aJ":["f","@"],"aM.V":"@","aM.K":"f"},"Qt":{"B":["i2"],"b0":["i2"],"v":["i2"],"bD":["i2"],"e":[],"a8":["i2"],"am":[],"n":["i2"],"b0.E":"i2","B.E":"i2","n.E":"i2"},"DB":{"B":["bE"],"b0":["bE"],"v":["bE"],"bD":["bE"],"e":[],"a8":["bE"],"am":[],"n":["bE"],"b0.E":"bE","B.E":"bE","n.E":"bE"},"RF":{"B":["i4"],"b0":["i4"],"v":["i4"],"bD":["i4"],"e":[],"a8":["i4"],"am":[],"n":["i4"],"b0.E":"i4","B.E":"i4","n.E":"i4"},"SW":{"e":[],"aM":["f","@"],"am":[],"aJ":["f","@"],"aM.V":"@","aM.K":"f"},"Tm":{"bE":[],"e":[],"am":[]},"TX":{"B":["i9"],"b0":["i9"],"v":["i9"],"bD":["i9"],"e":[],"a8":["i9"],"am":[],"n":["i9"],"b0.E":"i9","B.E":"i9","n.E":"i9"},"U3":{"B":["ia"],"b0":["ia"],"v":["ia"],"bD":["ia"],"e":[],"a8":["ia"],"am":[],"n":["ia"],"b0.E":"ia","B.E":"ia","n.E":"ia"},"U9":{"e":[],"aM":["f","f"],"am":[],"aJ":["f","f"],"aM.V":"f","aM.K":"f"},"UH":{"B":["fZ"],"b0":["fZ"],"v":["fZ"],"bD":["fZ"],"e":[],"a8":["fZ"],"am":[],"n":["fZ"],"b0.E":"fZ","B.E":"fZ","n.E":"fZ"},"UI":{"B":["id"],"b0":["id"],"v":["id"],"bD":["id"],"e":[],"a8":["id"],"am":[],"n":["id"],"b0.E":"id","B.E":"id","n.E":"id"},"UK":{"e":[],"am":[]},"UQ":{"B":["ie"],"b0":["ie"],"v":["ie"],"bD":["ie"],"e":[],"a8":["ie"],"am":[],"n":["ie"],"b0.E":"ie","B.E":"ie","n.E":"ie"},"US":{"e":[],"am":[]},"V5":{"e":[],"am":[]},"Ve":{"e":[],"am":[]},"X7":{"B":["cD"],"b0":["cD"],"v":["cD"],"bD":["cD"],"e":[],"a8":["cD"],"am":[],"n":["cD"],"b0.E":"cD","B.E":"cD","n.E":"cD"},"HA":{"e":[],"jw":["cg"],"am":[]},"YD":{"B":["hS?"],"b0":["hS?"],"v":["hS?"],"bD":["hS?"],"e":[],"a8":["hS?"],"am":[],"n":["hS?"],"b0.E":"hS?","B.E":"hS?","n.E":"hS?"},"Iy":{"B":["bE"],"b0":["bE"],"v":["bE"],"bD":["bE"],"e":[],"a8":["bE"],"am":[],"n":["bE"],"b0.E":"bE","B.E":"bE","n.E":"bE"},"a2u":{"B":["ib"],"b0":["ib"],"v":["ib"],"bD":["ib"],"e":[],"a8":["ib"],"am":[],"n":["ib"],"b0.E":"ib","B.E":"ib","n.E":"ib"},"a2H":{"B":["fY"],"b0":["fY"],"v":["fY"],"bD":["fY"],"e":[],"a8":["fY"],"am":[],"n":["fY"],"b0.E":"fY","B.E":"fY","n.E":"fY"},"yT":{"eg":["1"],"eg.T":"1"},"QL":{"c2":[]},"jw":{"baX":["1"]},"iL":{"e":[],"am":[]},"iS":{"e":[],"am":[]},"j4":{"e":[],"am":[]},"PU":{"B":["iL"],"b0":["iL"],"v":["iL"],"e":[],"a8":["iL"],"am":[],"n":["iL"],"b0.E":"iL","B.E":"iL","n.E":"iL"},"QN":{"B":["iS"],"b0":["iS"],"v":["iS"],"e":[],"a8":["iS"],"am":[],"n":["iS"],"b0.E":"iS","B.E":"iS","n.E":"iS"},"RG":{"e":[],"am":[]},"Uc":{"B":["f"],"b0":["f"],"v":["f"],"e":[],"a8":["f"],"am":[],"n":["f"],"b0.E":"f","B.E":"f","n.E":"f"},"UU":{"B":["j4"],"b0":["j4"],"v":["j4"],"e":[],"a8":["j4"],"am":[],"n":["j4"],"b0.E":"j4","B.E":"j4","n.E":"j4"},"afZ":{"v":["l"],"a8":["l"],"n":["l"]},"eV":{"v":["l"],"a8":["l"],"n":["l"]},"arB":{"v":["l"],"a8":["l"],"n":["l"]},"afX":{"v":["l"],"a8":["l"],"n":["l"]},"arA":{"v":["l"],"a8":["l"],"n":["l"]},"afY":{"v":["l"],"a8":["l"],"n":["l"]},"yu":{"v":["l"],"a8":["l"],"n":["l"]},"acM":{"v":["z"],"a8":["z"],"n":["z"]},"acN":{"v":["z"],"a8":["z"],"n":["z"]},"TE":{"wd":[]},"LT":{"e":[],"am":[]},"LU":{"e":[],"aM":["f","@"],"am":[],"aJ":["f","@"],"aM.V":"@","aM.K":"f"},"LV":{"e":[],"am":[]},"ol":{"e":[],"am":[]},"QO":{"e":[],"am":[]},"on":{"um":["1"]},"Be":{"on":["1"],"um":["1"]},"hz":{"n":["f"],"n.E":"f"},"bO":{"aJ":["2","3"]},"yA":{"qj":["1","n<1>"],"qj.E":"1"},"xR":{"qj":["1","bV<1>"],"qj.E":"1"},"Pa":{"bl":["v","rh"]},"a22":{"bl":["v","rh"],"bl.S":"v","bl.T":"rh"},"qC":{"X":[],"i":[]},"GY":{"a9":["qC"]},"k0":{"a5":[]},"cJ":{"a5":[]},"db":{"a5":[]},"aL":{"a5":[]},"k1":{"a5":[]},"qE":{"ar":["k0"],"an":["k0"],"an.T":"k0","ar.T":"k0"},"M4":{"a5":[]},"Ma":{"a5":[]},"Mb":{"a5":[]},"Md":{"a5":[]},"ok":{"a5":[]},"M7":{"av":[],"i":[]},"S8":{"H":[],"r":[],"fB":[],"ah":[]},"ad":{"a5":[]},"f9":{"a5":[]},"jl":{"a5":[]},"jM":{"a5":[]},"hU":{"a5":[]},"ii":{"a5":[]},"pI":{"a5":[]},"LY":{"a5":[]},"bw":{"a5":[]},"Ft":{"a5":[]},"br":{"a5":[]},"df":{"a5":[]},"ew":{"a5":[]},"UR":{"a5":[]},"xo":{"a5":[]},"Pf":{"a5":[]},"Vd":{"a5":[]},"oE":{"a5":[]},"vk":{"ao":[],"i":[]},"ct":{"X":[],"i":[]},"JC":{"a9":["ct"]},"h9":{"a5":[]},"TB":{"fe":[],"av":[],"i":[]},"LZ":{"d7":["H","ex"],"H":[],"at":["H","ex"],"r":[],"ah":[],"at.1":"ex","d7.1":"ex","at.0":"H"},"ui":{"ao":[],"i":[]},"GV":{"ao":[],"i":[]},"Mg":{"a5":[]},"OD":{"a5":[]},"C4":{"a5":[]},"BY":{"a5":[]},"OI":{"cL":[]},"OJ":{"cL":[]},"OK":{"cL":[]},"C0":{"cL":[]},"C1":{"cL":[]},"ON":{"cL":[]},"C3":{"cL":[]},"rw":{"cL":[]},"OH":{"cL":[]},"OG":{"cL":[]},"C_":{"cL":[]},"OL":{"cL":[]},"OM":{"cL":[]},"C2":{"cL":[]},"xv":{"H":[],"r":[],"fB":[],"ah":[]},"rX":{"X":[],"i":[]},"Ig":{"a9":["rX"]},"lu":{"a5":[]},"cq":{"a5":[]},"jg":{"a5":[]},"oF":{"a5":[]},"iE":{"a5":[]},"fT":{"ad":[],"a5":[]},"m2":{"fT":[],"ad":[],"a5":[]},"fA":{"a5":[]},"fG":{"a5":[]},"lS":{"a5":[]},"rY":{"ar":["lu"],"an":["lu"],"an.T":"lu","ar.T":"lu"},"CX":{"a5":[]},"M6":{"a5":[]},"vn":{"a5":[]},"iF":{"a5":[]},"BZ":{"a5":[]},"OF":{"a5":[]},"kn":{"a5":[]},"wI":{"a5":[]},"rZ":{"a5":[]},"PX":{"av":[],"i":[]},"Sk":{"H":[],"r":[],"fB":[],"ah":[]},"E3":{"X":[],"i":[]},"a_E":{"a9":["E3"]},"lD":{"a5":[]},"tB":{"ar":["lD"],"an":["lD"],"an.T":"lD","ar.T":"lD"},"RA":{"a5":[]},"RB":{"a5":[]},"Rw":{"fe":[],"av":[],"i":[]},"Sq":{"d7":["H","fd"],"H":[],"at":["H","fd"],"r":[],"fB":[],"ah":[],"at.1":"fd","d7.1":"fd","at.0":"H"},"Ed":{"X":[],"i":[]},"a0n":{"a9":["Ed"]},"lI":{"a5":[]},"i5":{"a5":[]},"fW":{"a5":[]},"tO":{"ar":["lI"],"an":["lI"],"an.T":"lI","ar.T":"lI"},"RW":{"a5":[]},"RX":{"a5":[]},"RU":{"av":[],"i":[]},"Su":{"H":[],"r":[],"fB":[],"ah":[]},"F1":{"X":[],"i":[]},"Ji":{"a9":["F1"]},"lP":{"a5":[]},"dh":{"ad":[],"a5":[]},"pB":{"a5":[]},"u1":{"ar":["lP"],"an":["lP"],"an.T":"lP","ar.T":"lP"},"Ta":{"a5":[]},"Tc":{"a5":[]},"Tb":{"a5":[]},"T9":{"a5":[]},"u2":{"a5":[]},"T6":{"av":[],"i":[]},"Sw":{"H":[],"r":[],"fB":[],"ah":[]},"n4":{"a5":[]},"l4":{"on":["iv"],"um":["iv"],"on.0":"iv"},"QA":{"ao":[],"i":[]},"Am":{"X":[],"i":[]},"LJ":{"a9":["Am"]},"VW":{"ao":[],"i":[]},"OE":{"ao":[],"i":[]},"to":{"X":[],"i":[]},"ZU":{"a9":["to"]},"XI":{"ao":[],"i":[]},"MD":{"ao":[],"i":[]},"Pe":{"ao":[],"i":[]},"qG":{"X":[],"i":[]},"Aw":{"a9":["qG"]},"qH":{"X":[],"i":[]},"Ax":{"a9":["qH"]},"qI":{"X":[],"i":[]},"GX":{"ao":[],"i":[]},"M9":{"a9":["qI"]},"qJ":{"X":[],"i":[]},"Ay":{"a9":["qJ"]},"qK":{"X":[],"i":[]},"Az":{"a9":["qK"]},"qL":{"ao":[],"i":[]},"qM":{"X":[],"i":[]},"I1":{"X":[],"i":[]},"Wh":{"a9":["qM"]},"Z_":{"a9":["I1"]},"qN":{"X":[],"i":[]},"Av":{"a9":["qN"]},"PY":{"lb":[]},"M8":{"lb":[]},"Rx":{"lb":[]},"T7":{"lb":[]},"RV":{"lb":[]},"t_":{"X":[],"i":[]},"Ic":{"ao":[],"i":[]},"PZ":{"a9":["t_"]},"t0":{"X":[],"i":[]},"Zv":{"a9":["t0"]},"t1":{"X":[],"i":[]},"Zw":{"a9":["t1"]},"Ha":{"ao":[],"i":[]},"t2":{"X":[],"i":[]},"Id":{"a9":["t2"]},"t3":{"X":[],"i":[]},"Ie":{"a9":["t3"]},"t4":{"ao":[],"i":[]},"t5":{"X":[],"i":[]},"Zx":{"a9":["t5"]},"t6":{"ao":[],"i":[]},"t7":{"ao":[],"i":[]},"t8":{"X":[],"i":[]},"If":{"a9":["t8"]},"wH":{"ao":[],"i":[]},"xa":{"X":[],"i":[]},"Ry":{"a9":["X"]},"xb":{"X":[],"i":[]},"Rv":{"a9":["X"]},"xc":{"X":[],"i":[]},"Rz":{"a9":["X"]},"uF":{"ao":[],"i":[]},"tP":{"X":[],"i":[]},"a0m":{"a9":["tP"]},"u3":{"X":[],"i":[]},"T8":{"a9":["u3"]},"xJ":{"X":[],"i":[]},"a1E":{"a9":["X"]},"vw":{"ao":[],"i":[]},"kj":{"ao":[],"i":[]},"rW":{"ao":[],"i":[]},"PT":{"ao":[],"i":[]},"cv":{"aj":[]},"vi":{"cv":["z"],"aj":[]},"VH":{"cv":["z"],"aj":[]},"VI":{"cv":["z"],"aj":[]},"Eb":{"cv":["z"],"aj":[]},"kw":{"cv":["z"],"aj":[]},"Bl":{"cv":["z"],"aj":[]},"uy":{"cv":["z"],"aj":[]},"vK":{"cv":["1"],"aj":[]},"Af":{"cv":["1"],"aj":[]},"Ih":{"hf":[]},"EZ":{"hf":[]},"hW":{"hf":[]},"UJ":{"hf":[]},"et":{"hf":[]},"Go":{"hf":[]},"mP":{"hf":[]},"Xr":{"hf":[]},"ar":{"an":["1"],"an.T":"1","ar.T":"1"},"f4":{"ar":["m?"],"an":["m?"],"an.T":"m?","ar.T":"m?"},"pv":{"ar":["w?"],"an":["w?"],"an.T":"w?","ar.T":"w?"},"aP":{"cv":["1"],"aj":[]},"e3":{"an":["1"],"an.T":"1"},"ES":{"ar":["1"],"an":["1"],"an.T":"1","ar.T":"1"},"TF":{"ar":["G?"],"an":["G?"],"an.T":"G?","ar.T":"G?"},"oT":{"ar":["l"],"an":["l"],"an.T":"l","ar.T":"l"},"vM":{"ar":["1"],"an":["1"],"an.T":"1","ar.T":"1"},"fv":{"an":["z"],"an.T":"z"},"GA":{"an":["1"],"an.T":"1"},"Bf":{"X":[],"i":[]},"Hn":{"a9":["Bf"]},"dH":{"m":[]},"Xa":{"kE":[]},"Nl":{"ao":[],"i":[]},"r8":{"X":[],"i":[]},"Ho":{"a9":["r8"]},"Nm":{"dt":[]},"Xd":{"i_":["Bg"],"i_.T":"Bg"},"NE":{"Bg":[]},"Bk":{"X":[],"i":[]},"Hr":{"a9":["Bk"]},"Nn":{"ao":[],"i":[]},"Bh":{"X":[],"i":[]},"Ye":{"X":[],"i":[]},"Xe":{"a9":["Bh"]},"a_C":{"ao":[],"i":[]},"No":{"ao":[],"i":[]},"W7":{"ao":[],"i":[]},"GW":{"ao":[],"i":[]},"Kb":{"ao":[],"i":[]},"a_9":{"ao":[],"i":[]},"Bi":{"X":[],"i":[]},"Hp":{"a9":["Bi"]},"he":{"ey":["1"],"i7":[]},"yP":{"X":[],"i":[]},"nU":{"Bj":["1"],"jr":["1"],"fH":["1"],"cx":["1"]},"Np":{"ao":[],"i":[]},"yQ":{"a9":["yP<1>"]},"kT":{"iA":[]},"vR":{"X":[],"i":[]},"Hq":{"lL":["vR"],"a9":["vR"]},"a30":{"aj":[]},"Nr":{"kE":[]},"Ht":{"X":[],"i":[]},"Ns":{"ao":[],"i":[]},"Xh":{"b3":[],"av":[],"i":[]},"a0Q":{"H":[],"aT":["H"],"r":[],"ah":[]},"Hu":{"a9":["Ht"]},"Zl":{"aj":[]},"a1n":{"aj":[]},"X9":{"aj":[]},"Hv":{"av":[],"i":[]},"Xg":{"bi":[],"aI":[],"M":[]},"uS":{"d7":["H","h_"],"H":[],"at":["H","h_"],"r":[],"ah":[],"at.1":"h_","d7.1":"h_","at.0":"H"},"a_h":{"aI":[],"M":[]},"a_i":{"i":[]},"ox":{"X":[],"i":[]},"Hs":{"a9":["ox"]},"ZG":{"aj":[]},"I4":{"b4":[],"aV":[],"i":[]},"Nt":{"ao":[],"i":[]},"q3":{"hP":["v"],"f6":[]},"w6":{"q3":[],"hP":["v"],"f6":[]},"Oo":{"q3":[],"hP":["v"],"f6":[]},"Ol":{"q3":[],"hP":["v"],"f6":[]},"rx":{"qA":[],"bX":[]},"Yr":{"rg":["bG"],"f6":[]},"f3":{"aj":[]},"ca":{"aj":[]},"GE":{"aj":[]},"Iu":{"aj":[]},"hP":{"f6":[]},"rg":{"f6":[]},"NQ":{"rg":["NP"],"f6":[]},"NR":{"f6":[]},"hq":{"ho":[]},"dN":{"hq":[],"ho":[],"dN.T":"1"},"pU":{"hq":[],"ho":[]},"CV":{"jp":[]},"b5":{"n":["1"],"n.E":"1"},"Co":{"n":["1"],"n.E":"1"},"bK":{"ae":["1"]},"wl":{"ah":[]},"C9":{"bG":[]},"ej":{"bg":[]},"nj":{"bg":[]},"po":{"bg":[]},"pp":{"bg":[]},"ni":{"bg":[]},"fV":{"bg":[]},"nk":{"bg":[]},"VB":{"bg":[]},"a3z":{"bg":[]},"tD":{"bg":[]},"a3v":{"tD":[],"bg":[]},"tI":{"bg":[]},"a3G":{"tI":[],"bg":[]},"a3B":{"nj":[],"bg":[]},"a3y":{"po":[],"bg":[]},"a3A":{"pp":[],"bg":[]},"a3x":{"ni":[],"bg":[]},"tF":{"bg":[]},"a3C":{"tF":[],"bg":[]},"tL":{"bg":[]},"a3K":{"tL":[],"bg":[]},"tJ":{"fV":[],"bg":[]},"a3I":{"tJ":[],"fV":[],"bg":[]},"tK":{"fV":[],"bg":[]},"a3J":{"tK":[],"fV":[],"bg":[]},"RJ":{"fV":[],"bg":[]},"a3H":{"fV":[],"bg":[]},"a3E":{"nk":[],"bg":[]},"tH":{"bg":[]},"a3F":{"tH":[],"bg":[]},"tG":{"bg":[]},"a3D":{"tG":[],"bg":[]},"tE":{"bg":[]},"a3w":{"tE":[],"bg":[]},"ke":{"dq":[],"dA":[]},"Is":{"zD":[]},"zg":{"zD":[]},"i0":{"dq":[],"dA":[]},"kK":{"dq":[],"dA":[]},"kh":{"dq":[],"dA":[]},"ks":{"dq":[],"dA":[]},"BE":{"dq":[],"dA":[]},"k9":{"dq":[],"dA":[]},"dq":{"dA":[]},"DG":{"dq":[],"dA":[]},"xj":{"dq":[],"dA":[]},"ic":{"dq":[],"dA":[]},"Mj":{"dq":[],"dA":[]},"lY":{"dq":[],"dA":[]},"lZ":{"dq":[],"dA":[]},"AC":{"dq":[],"dA":[]},"uI":{"dA":[]},"WM":{"wk":[]},"rK":{"kJ":[]},"wO":{"kJ":[]},"VC":{"ao":[],"i":[]},"yG":{"ao":[],"i":[]},"M1":{"ao":[],"i":[]},"M_":{"ao":[],"i":[]},"O6":{"ao":[],"i":[]},"O5":{"ao":[],"i":[]},"Oc":{"ao":[],"i":[]},"Ob":{"ao":[],"i":[]},"aV6":{"dC":[],"b4":[],"aV":[],"i":[]},"LD":{"ao":[],"i":[]},"wR":{"X":[],"i":[]},"Im":{"a9":["wR"]},"Ak":{"X":[],"i":[]},"a0g":{"G":[]},"GQ":{"a9":["Ak"]},"VV":{"b3":[],"av":[],"i":[]},"a0N":{"H":[],"aT":["H"],"r":[],"ah":[]},"wT":{"ar":["w?"],"an":["w?"],"an.T":"w?","ar.T":"w?"},"Db":{"ar":["k"],"an":["k"],"an.T":"k","ar.T":"k"},"aYl":{"dC":[],"b4":[],"aV":[],"i":[]},"Ek":{"X":[],"i":[]},"a0w":{"a9":["Ek"]},"Z5":{"b3":[],"av":[],"i":[]},"IZ":{"H":[],"aT":["H"],"r":[],"ah":[]},"Zo":{"bA":["b_?"]},"AQ":{"X":[],"i":[]},"H4":{"a9":["AQ"]},"a_1":{"d0":[],"bA":["d0"]},"Z6":{"b3":[],"av":[],"i":[]},"J_":{"H":[],"aT":["H"],"r":[],"ah":[]},"AT":{"X":[],"i":[]},"WE":{"a9":["AT"]},"WD":{"aj":[]},"aVF":{"b4":[],"aV":[],"i":[]},"dP":{"lc":["l"],"m":[],"lc.T":"l"},"Qd":{"lc":["l"],"m":[],"lc.T":"l"},"XB":{"kE":[]},"NM":{"ao":[],"i":[]},"vV":{"ao":[],"i":[]},"NW":{"ao":[],"i":[]},"aWz":{"dC":[],"b4":[],"aV":[],"i":[]},"HH":{"b4":[],"aV":[],"i":[]},"BG":{"X":[],"i":[]},"vZ":{"a9":["BG"]},"O3":{"ao":[],"i":[]},"aWW":{"dC":[],"b4":[],"aV":[],"i":[]},"C7":{"b4":[],"aV":[],"i":[]},"OP":{"ao":[],"i":[]},"XX":{"d0":[],"bA":["d0"]},"WG":{"b3":[],"av":[],"i":[]},"a0O":{"H":[],"aT":["H"],"r":[],"ah":[]},"GP":{"cv":["1"],"aj":[]},"Js":{"X":[],"i":[]},"Pm":{"ao":[],"i":[]},"a1U":{"a9":["Js"]},"YX":{"X":[],"i":[]},"YT":{"bA":["m?"]},"YV":{"bA":["m?"]},"YU":{"bA":["d0?"]},"YW":{"bJ":[]},"Ya":{"bJ":[]},"Yb":{"bJ":[]},"a_r":{"bJ":[]},"Cv":{"dC":[],"b4":[],"aV":[],"i":[]},"oS":{"oU":[],"mW":[]},"CE":{"oU":[],"mW":[]},"CF":{"oU":[],"mW":[]},"oU":{"mW":[]},"IM":{"b4":[],"aV":[],"i":[]},"I8":{"X":[],"i":[]},"CD":{"ao":[],"i":[]},"I7":{"a9":["I8"],"aHw":[]},"Py":{"ao":[],"i":[]},"tc":{"dC":[],"b4":[],"aV":[],"i":[]},"Gd":{"X":[],"i":[]},"K0":{"a9":["Gd"]},"Q8":{"ao":[],"i":[]},"D9":{"X":[],"i":[]},"IY":{"H":[],"aT":["H"],"r":[],"ah":[]},"ug":{"ar":["cs?"],"an":["cs?"],"an.T":"cs?","ar.T":"cs?"},"In":{"X":[],"i":[]},"ZP":{"a9":["D9"]},"Z3":{"b3":[],"av":[],"i":[]},"ZM":{"a9":["In"]},"Jz":{"ao":[],"i":[]},"a24":{"aj":[]},"ZN":{"i_":["ti"],"i_.T":"ti"},"NG":{"ti":[]},"Qg":{"m":[],"bA":["m"]},"ZQ":{"m":[],"bA":["m"]},"Qi":{"d0":[],"bA":["d0"]},"Y_":{"d0":[],"bA":["d0"]},"Qf":{"b_":[],"bA":["b_?"]},"Io":{"b_":[],"bA":["b_?"]},"Ib":{"bA":["1?"]},"bB":{"bA":["1"]},"cr":{"bA":["1"]},"Qj":{"ca":["bV"],"aj":[]},"Zq":{"bA":["b_?"]},"iN":{"ey":["1"],"i7":[]},"IL":{"Dc":["1"],"jr":["1"],"fH":["1"],"cx":["1"]},"ql":{"X":[],"i":[]},"qm":{"X":[],"i":[]},"a4o":{"ao":[],"i":[]},"a4m":{"a9":["ql"]},"a4n":{"a9":["qm"]},"Vz":{"nd":[]},"Nq":{"nd":[]},"Ky":{"aj":[]},"Kz":{"aj":[]},"AW":{"X":[],"i":[]},"RS":{"X":[],"i":[]},"WI":{"aj":[]},"WJ":{"a9":["AW"]},"aZA":{"dC":[],"b4":[],"aV":[],"i":[]},"F_":{"X":[],"i":[]},"Je":{"b4":[],"aV":[],"i":[]},"HQ":{"X":[],"i":[]},"u0":{"X":[],"i":[]},"xI":{"a9":["u0"]},"b23":{"X":[],"i":[]},"T4":{"a9":["F_"]},"a1A":{"aj":[]},"H2":{"az":[]},"Wr":{"ao":[],"i":[]},"HR":{"a9":["HQ"]},"XF":{"bk":["hQ"],"bk.T":"hQ"},"a1B":{"b4":[],"aV":[],"i":[]},"zc":{"X":[],"i":[]},"Tl":{"ao":[],"i":[]},"ZO":{"lL":["zc"],"a9":["zc"]},"b_h":{"dC":[],"b4":[],"aV":[],"i":[]},"Zp":{"bA":["b_?"]},"Fh":{"X":[],"i":[]},"a39":{"ca":["dF"],"aj":[]},"Jt":{"a9":["Fh"]},"FC":{"X":[],"i":[]},"kQ":{"b6":[]},"JD":{"a9":["FC"]},"a2l":{"av":[],"i":[]},"zs":{"H":[],"r":[],"ah":[]},"a3X":{"av":[],"i":[]},"a1a":{"H":[],"r":[],"ah":[]},"b_J":{"dC":[],"b4":[],"aV":[],"i":[]},"b_M":{"X":[],"i":[]},"Ip":{"X":[],"i":[]},"Um":{"ao":[],"i":[]},"Iq":{"a9":["Ip"]},"JV":{"aj":[]},"b03":{"b4":[],"aV":[],"i":[]},"Ut":{"X":[],"i":[]},"JZ":{"bA":["m?"]},"a2U":{"bA":["m?"]},"a2T":{"bA":["d0?"]},"a2V":{"bJ":[]},"b0a":{"dC":[],"b4":[],"aV":[],"i":[]},"Qk":{"kE":[]},"a3_":{"aj":[]},"b0g":{"dC":[],"b4":[],"aV":[],"i":[]},"K3":{"X":[],"i":[]},"UE":{"ao":[],"i":[]},"a36":{"a9":["K3"]},"a37":{"b3":[],"av":[],"i":[]},"a38":{"H":[],"aT":["H"],"r":[],"ah":[]},"a33":{"fe":[],"av":[],"i":[]},"a34":{"bi":[],"aI":[],"M":[]},"a19":{"H":[],"at":["H","h_"],"r":[],"ah":[],"at.1":"h_","at.0":"H"},"a32":{"ao":[],"i":[]},"a35":{"ao":[],"i":[]},"UG":{"ao":[],"i":[]},"I6":{"dC":[],"b4":[],"aV":[],"i":[]},"uu":{"ar":["jJ"],"an":["jJ"],"an.T":"jJ","ar.T":"jJ"},"Ab":{"X":[],"i":[]},"Gm":{"ao":[],"i":[]},"VP":{"a9":["Ab"]},"Gt":{"aj":[]},"Gw":{"X":[],"i":[]},"yq":{"a9":["Gw"]},"Y3":{"b3":[],"av":[],"i":[]},"a0U":{"H":[],"aT":["H"],"r":[],"fB":[],"ah":[]},"a3j":{"ao":[],"i":[]},"b0z":{"dC":[],"b4":[],"aV":[],"i":[]},"e8":{"hK":[]},"hJ":{"hK":[]},"Iv":{"hK":[]},"DP":{"fi":[]},"a2L":{"aj":[]},"ed":{"cs":[]},"jP":{"cs":[]},"d2":{"cs":[]},"Mp":{"cs":[]},"fN":{"cs":[]},"d3":{"iA":[]},"ep":{"jC":[]},"er":{"ed":[],"cs":[]},"lc":{"m":[]},"aG":{"de":[]},"f8":{"de":[]},"q9":{"de":[]},"LQ":{"ki":["l6"]},"Ap":{"ki":["l6"],"ki.T":"l6"},"RC":{"hV":[]},"d8":{"ed":[],"cs":[]},"h2":{"ed":[],"cs":[]},"i8":{"iA":[]},"hy":{"ed":[],"cs":[]},"h4":{"ed":[],"cs":[]},"h5":{"ed":[],"cs":[]},"yE":{"j3":[]},"a3T":{"j3":[]},"fl":{"Gg":[]},"kF":{"hV":[],"fB":[],"ah":[]},"S6":{"H":[],"aT":["H"],"r":[],"ah":[]},"xy":{"fi":[],"ah":[]},"Wp":{"aj":[]},"Xu":{"nf":[]},"a1k":{"tV":[],"aT":["H"],"r":[],"ah":[]},"mx":{"mT":[]},"H":{"r":[],"ah":[]},"qV":{"iI":["H"]},"ha":{"d6":[]},"Bd":{"ha":[],"es":["1"],"d6":[]},"fd":{"ha":[],"es":["H"],"d6":[]},"Es":{"d7":["H","fd"],"H":[],"at":["H","fd"],"r":[],"ah":[],"at.1":"fd","d7.1":"fd","at.0":"H"},"Nv":{"aj":[]},"Et":{"H":[],"aT":["H"],"r":[],"ah":[]},"py":{"aj":[]},"tT":{"H":[],"at":["H","jI"],"r":[],"ah":[],"at.1":"jI","at.0":"H"},"a0S":{"H":[],"r":[],"ah":[]},"K_":{"py":[],"aj":[]},"H8":{"py":[],"aj":[]},"yL":{"py":[],"aj":[]},"Ev":{"H":[],"r":[],"ah":[]},"ex":{"ha":[],"es":["H"],"d6":[]},"Ex":{"d7":["H","ex"],"H":[],"at":["H","ex"],"r":[],"ah":[],"at.1":"ex","d7.1":"ex","at.0":"H"},"Ez":{"H":[],"r":[],"ah":[]},"eN":{"eb":[]},"r1":{"eN":[],"eb":[]},"vE":{"eN":[],"eb":[]},"B8":{"eN":[],"eb":[]},"m3":{"kq":[],"eN":[],"eb":[]},"DH":{"kq":[],"eN":[],"eb":[]},"Ru":{"eb":[]},"kq":{"eN":[],"eb":[]},"B5":{"eN":[],"eb":[]},"Cz":{"kq":[],"eN":[],"eb":[]},"At":{"eN":[],"eb":[]},"CU":{"eN":[],"eb":[]},"Cc":{"eN":[],"eb":[]},"Ai":{"eN":[],"eb":[]},"Qv":{"aj":[]},"r":{"ah":[]},"es":{"d6":[]},"a1p":{"hE":[]},"I3":{"hE":[]},"uX":{"hE":[]},"ng":{"nu":[]},"jI":{"es":["H"],"d6":[]},"nW":{"eS":[],"aj":[]},"ED":{"H":[],"at":["H","jI"],"r":[],"ah":[],"at.1":"jI","at.0":"H"},"En":{"H":[],"aT":["H"],"r":[],"ah":[]},"pG":{"aj":[]},"Em":{"H":[],"aT":["H"],"r":[],"ah":[]},"nn":{"H":[],"aT":["H"],"r":[],"ah":[]},"St":{"H":[],"aT":["H"],"r":[],"ah":[]},"EE":{"H":[],"aT":["H"],"r":[],"ah":[]},"Er":{"H":[],"aT":["H"],"r":[],"ah":[]},"Sj":{"H":[],"aT":["H"],"r":[],"ah":[]},"Eq":{"H":[],"aT":["H"],"r":[],"ah":[]},"Sm":{"H":[],"aT":["H"],"r":[],"ah":[]},"S7":{"H":[],"aT":["H"],"r":[],"ah":[]},"Bm":{"aj":[]},"zr":{"H":[],"aT":["H"],"r":[],"ah":[]},"Sb":{"H":[],"aT":["H"],"r":[],"ah":[]},"Sa":{"H":[],"aT":["H"],"r":[],"ah":[]},"J3":{"H":[],"aT":["H"],"r":[],"ah":[]},"Sn":{"H":[],"aT":["H"],"r":[],"ah":[]},"So":{"H":[],"aT":["H"],"r":[],"ah":[]},"Sc":{"H":[],"aT":["H"],"r":[],"ah":[]},"SA":{"H":[],"aT":["H"],"r":[],"ah":[]},"Ew":{"H":[],"aT":["H"],"r":[],"ah":[]},"Sf":{"H":[],"aT":["H"],"r":[],"ah":[]},"Sr":{"H":[],"aT":["H"],"r":[],"ah":[]},"EA":{"H":[],"aT":["H"],"r":[],"fB":[],"ah":[]},"Sv":{"H":[],"aT":["H"],"r":[],"ah":[]},"Ey":{"H":[],"aT":["H"],"r":[],"ah":[]},"EB":{"H":[],"aT":["H"],"r":[],"ah":[]},"EG":{"H":[],"aT":["H"],"r":[],"ah":[]},"S9":{"H":[],"aT":["H"],"r":[],"ah":[]},"Sl":{"H":[],"aT":["H"],"r":[],"ah":[]},"Sd":{"H":[],"aT":["H"],"r":[],"ah":[]},"Sg":{"H":[],"aT":["H"],"r":[],"ah":[]},"Si":{"H":[],"aT":["H"],"r":[],"ah":[]},"Se":{"H":[],"aT":["H"],"r":[],"ah":[]},"Ep":{"H":[],"aT":["H"],"r":[],"ah":[]},"EF":{"H":[],"aT":["H"],"r":[],"ah":[]},"eS":{"aj":[]},"tU":{"H":[],"aT":["H"],"r":[],"ah":[]},"EC":{"H":[],"aT":["H"],"r":[],"ah":[]},"S5":{"H":[],"aT":["H"],"r":[],"ah":[]},"Ss":{"H":[],"aT":["H"],"r":[],"ah":[]},"Eu":{"H":[],"aT":["H"],"r":[],"ah":[]},"xW":{"mT":[]},"nx":{"pK":[],"es":["dL"],"d6":[]},"dL":{"r":[],"ah":[]},"TO":{"iI":["dL"]},"FD":{"d6":[]},"pK":{"d6":[]},"Sx":{"pz":[],"dL":[],"at":["H","hx"],"r":[],"ah":[],"at.1":"hx","at.0":"H"},"kk":{"d6":[]},"hx":{"es":["H"],"kk":[],"d6":[]},"pz":{"dL":[],"at":["H","hx"],"r":[],"ah":[]},"EH":{"dL":[],"aT":["dL"],"r":[],"ah":[]},"Sz":{"dL":[],"aT":["dL"],"r":[],"ah":[]},"fj":{"ha":[],"es":["H"],"d6":[]},"EI":{"d7":["H","fj"],"H":[],"at":["H","fj"],"r":[],"ah":[],"at.1":"fj","d7.1":"fj","at.0":"H"},"og":{"ar":["hK?"],"an":["hK?"],"an.T":"hK?","ar.T":"hK?"},"tV":{"aT":["H"],"r":[],"ah":[]},"tW":{"md":["1"],"H":[],"at":["dL","1"],"r":[],"ah":[]},"EK":{"md":["nx"],"H":[],"at":["dL","nx"],"r":[],"ah":[],"at.1":"nx","md.0":"nx","at.0":"dL"},"kL":{"aj":[]},"m7":{"ha":[],"es":["H"],"d6":[]},"EL":{"d7":["H","m7"],"H":[],"at":["H","m7"],"r":[],"ah":[],"at.1":"m7","d7.1":"m7","at.0":"H"},"uv":{"ae":["~"]},"Gp":{"c2":[]},"nJ":{"c8":["nJ"]},"kY":{"c8":["kY"]},"nZ":{"c8":["nZ"]},"xP":{"c8":["xP"]},"a1Z":{"rg":["cP"],"f6":[]},"Tw":{"aj":[]},"x_":{"c8":["xP"]},"uE":{"a6E":[]},"xQ":{"fi":[]},"rU":{"oX":[]},"oZ":{"oX":[]},"CR":{"oX":[]},"E5":{"c2":[]},"Dg":{"c2":[]},"jH":{"d0":[]},"Xy":{"d0":[]},"a2M":{"Dh":[]},"lK":{"kv":[]},"xr":{"kv":[]},"EQ":{"aj":[]},"vv":{"j3":[]},"wG":{"j3":[]},"DQ":{"j3":[]},"Bx":{"j3":[]},"Uw":{"pO":[]},"Uv":{"pO":[]},"Ux":{"pO":[]},"yh":{"pO":[]},"Oy":{"pP":[]},"a_I":{"Gb":[]},"mq":{"X":[],"i":[]},"GM":{"b4":[],"aV":[],"i":[]},"rz":{"X":[],"i":[]},"aHl":{"b6":[]},"aWD":{"b6":[]},"aWC":{"b6":[]},"vh":{"b6":[]},"vs":{"b6":[]},"hQ":{"b6":[]},"nl":{"b6":[]},"dz":{"bk":["1"]},"cT":{"bk":["1"],"bk.T":"1"},"GN":{"a9":["mq"]},"HU":{"a9":["rz"]},"Vm":{"bk":["aHl"],"bk.T":"aHl"},"Bv":{"bk":["b6"],"bk.T":"b6"},"NU":{"bk":["hQ"]},"RR":{"dz":["nl"],"bk":["nl"],"bk.T":"nl","dz.T":"nl"},"II":{"KO":["1"],"dz":["1"],"zj":["1"],"bk":["1"],"bk.T":"1","dz.T":"1"},"IJ":{"KP":["1"],"dz":["1"],"zj":["1"],"bk":["1"],"bk.T":"1","dz.T":"1"},"Hk":{"bk":["1"],"bk.T":"1"},"Aa":{"X":[],"i":[]},"VO":{"a9":["Aa"]},"VN":{"b3":[],"av":[],"i":[]},"Ah":{"b3":[],"av":[],"i":[]},"yD":{"X":[],"i":[]},"Kq":{"a9":["yD"],"eH":[]},"wj":{"X":[],"i":[]},"HW":{"a9":["wj<1>"]},"Aq":{"X":[],"i":[]},"GT":{"a9":["Aq"]},"PG":{"aj":[]},"a_j":{"ao":[],"i":[]},"ji":{"b4":[],"aV":[],"i":[]},"vF":{"b3":[],"av":[],"i":[]},"vD":{"b3":[],"av":[],"i":[]},"r3":{"b3":[],"av":[],"i":[]},"vJ":{"b3":[],"av":[],"i":[]},"qZ":{"b3":[],"av":[],"i":[]},"CT":{"ez":["fd"],"aV":[],"i":[],"ez.T":"fd"},"y0":{"fe":[],"av":[],"i":[]},"pq":{"ez":["fj"],"aV":[],"i":[],"ez.T":"fj"},"xG":{"fe":[],"av":[],"i":[]},"aWl":{"b4":[],"aV":[],"i":[]},"wr":{"b3":[],"av":[],"i":[]},"a3M":{"fS":[],"aI":[],"M":[]},"a3N":{"b4":[],"aV":[],"i":[]},"QR":{"b3":[],"av":[],"i":[]},"M2":{"b3":[],"av":[],"i":[]},"Bo":{"b3":[],"av":[],"i":[]},"Rr":{"b3":[],"av":[],"i":[]},"Rs":{"b3":[],"av":[],"i":[]},"yr":{"b3":[],"av":[],"i":[]},"Oz":{"b3":[],"av":[],"i":[]},"OZ":{"b3":[],"av":[],"i":[]},"EW":{"b3":[],"av":[],"i":[]},"bH":{"b3":[],"av":[],"i":[]},"h8":{"b3":[],"av":[],"i":[]},"mF":{"b3":[],"av":[],"i":[]},"Bn":{"fe":[],"av":[],"i":[]},"di":{"b3":[],"av":[],"i":[]},"hN":{"b3":[],"av":[],"i":[]},"PV":{"b3":[],"av":[],"i":[]},"DE":{"b3":[],"av":[],"i":[]},"a_p":{"bi":[],"aI":[],"M":[]},"cA":{"b3":[],"av":[],"i":[]},"TR":{"b3":[],"av":[],"i":[]},"RK":{"ao":[],"i":[]},"C5":{"fe":[],"av":[],"i":[]},"B9":{"fe":[],"av":[],"i":[]},"C6":{"ez":["ex"],"aV":[],"i":[],"ez.T":"ex"},"Or":{"ez":["ex"],"aV":[],"i":[],"ez.T":"ex"},"Vp":{"fe":[],"av":[],"i":[]},"SO":{"fe":[],"av":[],"i":[]},"S0":{"av":[],"i":[]},"Q1":{"b3":[],"av":[],"i":[]},"Di":{"b3":[],"av":[],"i":[]},"iZ":{"b3":[],"av":[],"i":[]},"Lz":{"b3":[],"av":[],"i":[]},"Tr":{"b3":[],"av":[],"i":[]},"Qq":{"b3":[],"av":[],"i":[]},"Ml":{"b3":[],"av":[],"i":[]},"oC":{"b3":[],"av":[],"i":[]},"Pw":{"b3":[],"av":[],"i":[]},"kl":{"ao":[],"i":[]},"f2":{"ao":[],"i":[]},"r2":{"b3":[],"av":[],"i":[]},"IT":{"H":[],"aT":["H"],"r":[],"ah":[]},"GI":{"fi":[],"ah":[]},"EV":{"i":[]},"ET":{"aI":[],"M":[]},"Vo":{"fi":[],"ah":[]},"ow":{"ao":[],"i":[]},"NA":{"b3":[],"av":[],"i":[]},"Xs":{"aj":[]},"oy":{"dC":[],"b4":[],"aV":[],"i":[]},"a_k":{"ao":[],"i":[]},"NI":{"ao":[],"i":[]},"w0":{"X":[],"i":[]},"HJ":{"a9":["w0"]},"w1":{"X":[],"i":[]},"oA":{"a9":["w1"],"eH":[]},"Jj":{"X":[],"i":[]},"kX":{"yC":[],"hV":[]},"WO":{"b3":[],"av":[],"i":[]},"a0P":{"H":[],"aT":["H"],"r":[],"ah":[]},"Uu":{"ca":["dF"],"aj":[]},"HK":{"fe":[],"av":[],"i":[]},"a1L":{"a9":["Jj"],"aMW":[]},"nL":{"dz":["1"],"bk":["1"],"bk.T":"1","dz.T":"1"},"Kk":{"dz":["1"],"bk":["1"],"bk.T":"1","dz.T":"1"},"Kl":{"dz":["1"],"bk":["1"],"bk.T":"1","dz.T":"1"},"a1T":{"dz":["nt"],"bk":["nt"],"bk.T":"nt","dz.T":"nt"},"X5":{"dz":["le"],"bk":["le"],"bk.T":"le","dz.T":"le"},"a46":{"ca":["vG"],"aj":[],"eH":[]},"dI":{"aj":[]},"oH":{"dI":[],"aj":[]},"Ca":{"aj":[]},"ry":{"X":[],"i":[]},"HS":{"jn":["dI"],"b4":[],"aV":[],"i":[],"jn.T":"dI"},"yV":{"a9":["ry"]},"OT":{"X":[],"i":[]},"Yy":{"a9":["ry"]},"Cb":{"X":[],"i":[]},"aGP":{"b6":[]},"tw":{"b6":[]},"tN":{"b6":[]},"aFz":{"b6":[]},"HT":{"dI":[],"aj":[]},"Yz":{"a9":["Cb"]},"SH":{"bk":["aGP"],"bk.T":"aGP"},"QG":{"bk":["tw"],"bk.T":"tw"},"RM":{"bk":["tN"],"bk.T":"tN"},"Bu":{"bk":["aFz"],"bk.T":"aFz"},"hT":{"ho":[]},"bp":{"hT":["1"],"ho":[]},"X":{"i":[]},"aI":{"M":[]},"fk":{"aI":[],"M":[]},"pj":{"aI":[],"M":[]},"fS":{"aI":[],"M":[]},"rF":{"hT":["1"],"ho":[]},"ao":{"i":[]},"aV":{"i":[]},"ez":{"aV":[],"i":[]},"b4":{"aV":[],"i":[]},"av":{"i":[]},"PR":{"av":[],"i":[]},"b3":{"av":[],"i":[]},"fe":{"av":[],"i":[]},"Op":{"av":[],"i":[]},"Ba":{"aI":[],"M":[]},"y1":{"aI":[],"M":[]},"Ec":{"aI":[],"M":[]},"bi":{"aI":[],"M":[]},"PQ":{"bi":[],"aI":[],"M":[]},"Fv":{"bi":[],"aI":[],"M":[]},"iQ":{"bi":[],"aI":[],"M":[]},"SB":{"bi":[],"aI":[],"M":[]},"a_g":{"aI":[],"M":[]},"a_l":{"i":[]},"oK":{"ao":[],"i":[]},"lJ":{"X":[],"i":[]},"xq":{"a9":["lJ"]},"cM":{"rE":["1"]},"YF":{"b3":[],"av":[],"i":[]},"mS":{"X":[],"i":[]},"z1":{"a9":["mS"]},"oL":{"pd":[]},"oN":{"ao":[],"i":[]},"rM":{"dC":[],"b4":[],"aV":[],"i":[]},"wt":{"X":[],"i":[]},"I2":{"a9":["wt"],"eH":[]},"qU":{"ar":["az"],"an":["az"],"an.T":"az","ar.T":"az"},"mG":{"ar":["iA"],"an":["iA"],"an.T":"iA","ar.T":"iA"},"oz":{"ar":["de"],"an":["de"],"an.T":"de","ar.T":"de"},"qR":{"ar":["cl?"],"an":["cl?"],"an.T":"cl?","ar.T":"cl?"},"tm":{"ar":["bd"],"an":["bd"],"an.T":"bd","ar.T":"bd"},"m0":{"ar":["p"],"an":["p"],"an.T":"p","ar.T":"p"},"A5":{"X":[],"i":[]},"A9":{"X":[],"i":[]},"A6":{"X":[],"i":[]},"A8":{"X":[],"i":[]},"BI":{"ar":["aG"],"an":["aG"],"an.T":"aG","ar.T":"aG"},"Mo":{"ar":["d2?"],"an":["d2?"],"an.T":"d2?","ar.T":"d2?"},"Pt":{"X":[],"i":[]},"wx":{"a9":["1"]},"qy":{"a9":["1"]},"VJ":{"a9":["A5"]},"VM":{"a9":["A9"]},"VK":{"a9":["A6"]},"VL":{"a9":["A8"]},"lq":{"b4":[],"aV":[],"i":[]},"CB":{"fS":[],"aI":[],"M":[]},"jn":{"b4":[],"aV":[],"i":[]},"z5":{"fS":[],"aI":[],"M":[]},"dC":{"b4":[],"aV":[],"i":[]},"H7":{"ao":[],"i":[]},"ov":{"av":[],"i":[]},"z7":{"bi":[],"aI":[],"M":[]},"n0":{"ov":["az"],"av":[],"i":[],"ov.0":"az"},"J0":{"iY":["az","H"],"H":[],"aT":["H"],"r":[],"ah":[],"iY.0":"az"},"Ik":{"b4":[],"aV":[],"i":[]},"D3":{"X":[],"i":[]},"a4a":{"i_":["GJ"],"i_.T":"GJ"},"NL":{"GJ":[]},"ZH":{"a9":["D3"]},"aLJ":{"b4":[],"aV":[],"i":[]},"D5":{"i8":[],"iA":[]},"Ej":{"ao":[],"i":[]},"ZJ":{"ao":[],"i":[]},"XQ":{"aj":[]},"ZI":{"b3":[],"av":[],"i":[]},"a0X":{"H":[],"aT":["H"],"r":[],"ah":[]},"n9":{"lq":["f_"],"b4":[],"aV":[],"i":[],"lq.T":"f_"},"It":{"X":[],"i":[]},"ZS":{"a9":["It"],"eH":[]},"yI":{"dq":[],"dA":[]},"Qu":{"ao":[],"i":[]},"LG":{"X":[],"i":[]},"VT":{"rE":["yI"]},"a_0":{"ao":[],"i":[]},"Dx":{"ao":[],"i":[]},"ey":{"i7":[]},"rH":{"b4":[],"aV":[],"i":[]},"Dy":{"X":[],"i":[]},"eI":{"np":[]},"ht":{"a9":["Dy"]},"a_f":{"cx":["~"]},"zf":{"qa":[]},"ze":{"qa":[]},"ID":{"qa":[]},"IE":{"qa":[]},"YM":{"n":["eI"],"aj":[],"n.E":"eI"},"YN":{"fg":["aJ>?"],"aj":[]},"e1":{"aV":[],"i":[]},"IH":{"aI":[],"M":[]},"nc":{"aj":[]},"nT":{"X":[],"i":[]},"zh":{"a9":["nT"]},"x0":{"X":[],"i":[]},"x2":{"a9":["x0"]},"qg":{"H":[],"at":["H","fj"],"r":[],"ah":[],"at.1":"fj","at.0":"H"},"DJ":{"X":[],"i":[]},"qc":{"iM":["qc"],"iM.E":"qc"},"uT":{"b4":[],"aV":[],"i":[]},"qf":{"H":[],"aT":["H"],"r":[],"ah":[],"iM":["qf"],"iM.E":"qf"},"J1":{"H":[],"aT":["H"],"r":[],"ah":[]},"K7":{"fe":[],"av":[],"i":[]},"a3e":{"bi":[],"aI":[],"M":[]},"zC":{"fj":[],"ha":[],"es":["H"],"d6":[]},"a_t":{"a9":["DJ"]},"zi":{"av":[],"i":[]},"a_s":{"bi":[],"aI":[],"M":[]},"Xx":{"b3":[],"av":[],"i":[]},"Cj":{"X":[],"i":[]},"FM":{"X":[],"i":[]},"HZ":{"a9":["Cj"]},"HY":{"aj":[]},"YG":{"aj":[]},"JR":{"a9":["FM"]},"JQ":{"aj":[]},"DK":{"ij":[]},"aMg":{"dN":["1"],"hq":[],"ho":[]},"x3":{"ao":[],"i":[]},"js":{"jr":["1"],"fH":["1"],"cx":["1"]},"xk":{"b4":[],"aV":[],"i":[]},"pA":{"X":[],"i":[]},"GC":{"b4":[],"aV":[],"i":[]},"EU":{"X":[],"i":[]},"fg":{"aj":[]},"a1j":{"a9":["pA"]},"Jb":{"a9":["EU"]},"cN":{"fg":["1"],"aj":[]},"kW":{"fg":["1"],"aj":[]},"J9":{"kW":["1"],"fg":["1"],"aj":[]},"EP":{"kW":["1"],"fg":["1"],"aj":[],"cN.T":"1","kW.T":"1"},"EO":{"kW":["F"],"fg":["F"],"aj":[],"cN.T":"F","kW.T":"F"},"xE":{"X":[],"i":[]},"aJY":{"jO":["ae"]},"zu":{"a9":["xE<1>"]},"a1v":{"b4":[],"aV":[],"i":[]},"M0":{"jO":["ae"]},"SP":{"jO":["ae"],"eH":[],"jO.T":"ae"},"xF":{"aj":[]},"SV":{"aj":[]},"a1g":{"fg":["j_?"],"aj":[],"cN.T":"j_?"},"Ix":{"b4":[],"aV":[],"i":[]},"zd":{"X":[],"i":[]},"nR":{"a9":["zd<1>"]},"jr":{"fH":["1"],"cx":["1"]},"x1":{"cx":["1"]},"fH":{"cx":["1"]},"XG":{"bk":["hQ"],"bk.T":"hQ"},"T0":{"ao":[],"i":[]},"F3":{"ki":["1"],"ki.T":"1"},"F4":{"b4":[],"aV":[],"i":[]},"Tf":{"aj":[]},"Jw":{"X":[],"i":[]},"a1x":{"dN":["ho"],"hq":[],"ho":[],"dN.T":"ho"},"Jx":{"a9":["Jw"]},"OB":{"nq":[]},"hw":{"jo":[],"ij":[]},"kx":{"hw":[],"jo":[],"ij":[]},"F9":{"hw":[],"jo":[],"ij":[]},"lA":{"hw":[],"jo":[],"ij":[]},"pC":{"hw":[],"jo":[],"ij":[]},"V6":{"hw":[],"jo":[],"ij":[]},"Jl":{"b4":[],"aV":[],"i":[]},"q8":{"iM":["q8"],"iM.E":"q8"},"F6":{"X":[],"i":[]},"F7":{"a9":["F6"]},"nr":{"kL":[],"aj":[],"nq":[]},"u6":{"ij":[]},"F8":{"nr":[],"kL":[],"aj":[],"nq":[]},"Ti":{"ao":[],"i":[]},"Mt":{"ao":[],"i":[]},"Q_":{"ao":[],"i":[]},"Fa":{"X":[],"i":[]},"Jn":{"b4":[],"aV":[],"i":[]},"Jp":{"X":[],"i":[]},"xL":{"a9":["Fa"]},"a1O":{"a9":["Jp"]},"Jo":{"aj":[]},"a1N":{"b3":[],"av":[],"i":[]},"a13":{"H":[],"aT":["H"],"r":[],"ah":[]},"a1h":{"fg":["z?"],"aj":[],"cN.T":"z?"},"eR":{"b6":[]},"F2":{"dz":["eR"],"bk":["eR"],"bk.T":"eR","dz.T":"eR"},"xs":{"X":[],"i":[]},"mg":{"i0":[],"dq":[],"dA":[]},"mh":{"ic":[],"dq":[],"dA":[]},"Fc":{"aj":[]},"lL":{"a9":["1"]},"wY":{"aj":[]},"xM":{"X":[],"i":[]},"xO":{"b4":[],"aV":[],"i":[]},"a1W":{"eS":[],"a9":["xM"],"aj":[]},"Tn":{"aj":[]},"Fr":{"X":[],"i":[]},"a26":{"a9":["Fr"]},"a27":{"lq":["I"],"b4":[],"aV":[],"i":[],"lq.T":"I"},"aW":{"xS":[]},"uh":{"X":[],"i":[]},"Fs":{"X":[],"i":[]},"xT":{"aj":[]},"JB":{"a9":["uh"]},"TA":{"aj":[]},"JA":{"a9":["Fs"]},"a2a":{"b4":[],"aV":[],"i":[]},"TS":{"av":[],"i":[]},"ul":{"av":[],"i":[]},"TP":{"ul":[],"av":[],"i":[]},"xX":{"bi":[],"aI":[],"M":[]},"CO":{"ez":["kk"],"aV":[],"i":[],"ez.T":"kk"},"FG":{"aj":[]},"TV":{"b3":[],"av":[],"i":[]},"zt":{"H":[],"aT":["H"],"r":[],"ah":[]},"TU":{"aj":[]},"Xv":{"aj":[]},"EJ":{"H":[],"aT":["H"],"r":[],"ah":[]},"xx":{"H":[],"aT":["H"],"r":[],"ah":[]},"Ur":{"b3":[],"av":[],"i":[]},"Uq":{"b3":[],"av":[],"i":[]},"Uy":{"b3":[],"av":[],"i":[]},"vT":{"dC":[],"b4":[],"aV":[],"i":[]},"aWp":{"dC":[],"b4":[],"aV":[],"i":[]},"bW":{"ao":[],"i":[]},"a_m":{"ao":[],"i":[]},"Bw":{"b6":[]},"rd":{"b6":[]},"rf":{"b6":[]},"re":{"b6":[]},"fP":{"b6":[]},"mK":{"fP":[],"b6":[]},"mM":{"fP":[],"b6":[]},"rt":{"fP":[],"b6":[]},"ro":{"fP":[],"b6":[]},"rp":{"fP":[],"b6":[]},"iD":{"fP":[],"b6":[]},"oD":{"fP":[],"b6":[]},"mN":{"fP":[],"b6":[]},"rr":{"fP":[],"b6":[]},"rs":{"fP":[],"b6":[]},"mL":{"fP":[],"b6":[]},"ns":{"b6":[]},"acy":{"b6":[]},"nt":{"b6":[]},"le":{"b6":[]},"pk":{"b6":[]},"pw":{"b6":[]},"lM":{"b6":[]},"pT":{"b6":[]},"jK":{"b6":[]},"pR":{"b6":[]},"NT":{"b6":[]},"h_":{"ha":[],"es":["H"],"d6":[]},"qh":{"X":[],"i":[]},"Ju":{"X":[],"i":[]},"Gh":{"X":[],"i":[]},"Jy":{"a9":["qh"]},"Jv":{"a9":["Ju"]},"K2":{"a9":["Gh"]},"N5":{"ca":["vG"],"aj":[],"eH":[]},"yo":{"X":[],"i":[]},"HN":{"b4":[],"aV":[],"i":[]},"a3g":{"a9":["yo"]},"Hi":{"aj":[]},"UM":{"ao":[],"i":[]},"Ac":{"X":[],"i":[]},"GO":{"a9":["Ac"]},"TK":{"X":[],"i":[]},"Ql":{"X":[],"i":[]},"T5":{"X":[],"i":[]},"SS":{"X":[],"i":[]},"Ot":{"b3":[],"av":[],"i":[]},"xt":{"ar":["iX"],"an":["iX"],"an.T":"iX","ar.T":"iX"},"E8":{"X":[],"i":[]},"NB":{"X":[],"i":[]},"NJ":{"X":[],"i":[]},"D0":{"X":[],"i":[]},"LF":{"X":[],"i":[]},"yv":{"X":[],"i":[]},"yw":{"a9":["yv<1>"]},"V_":{"ca":["yx"],"aj":[]},"yB":{"X":[],"i":[]},"zG":{"a9":["yB<1>"]},"uY":{"b4":[],"aV":[],"i":[]},"IN":{"b4":[],"aV":[],"i":[]},"Vf":{"ao":[],"i":[]},"IP":{"av":[],"i":[]},"a0z":{"bi":[],"aI":[],"M":[]},"Hy":{"hT":["1"],"ho":[]},"GH":{"fe":[],"av":[],"i":[]},"a42":{"bi":[],"aI":[],"M":[]},"Vk":{"ao":[],"i":[]},"a44":{"b4":[],"aV":[],"i":[]},"a43":{"b3":[],"av":[],"i":[]},"a1c":{"H":[],"aT":["H"],"r":[],"ah":[]},"yC":{"hV":[]},"a48":{"ez":["jI"],"aV":[],"i":[],"ez.T":"jI"},"W0":{"b3":[],"av":[],"i":[]},"J6":{"H":[],"aT":["H"],"r":[],"ah":[]},"vp":{"X":[],"i":[]},"AE":{"vp":["1","2"],"X":[],"i":[]},"H_":{"a9":["vp<1,2>"]},"qP":{"pH":[],"X":[],"jD":[],"i":[]},"AF":{"qP":["1","2"],"pH":[],"X":[],"jD":[],"i":[]},"H0":{"xU":["qP<1,2>"],"a9":["qP<1,2>"]},"AG":{"uk":[],"ao":[],"jD":[],"i":[]},"Qw":{"tv":[],"ao":[],"jD":[],"i":[]},"nw":{"hx":[],"es":["H"],"kk":[],"d6":[]},"Sy":{"pz":[],"dL":[],"at":["H","hx"],"r":[],"ah":[],"at.1":"hx","at.0":"H"},"Qb":{"ao":[],"i":[]},"TQ":{"ul":[],"av":[],"i":[]},"jG":{"qW":[]},"FV":{"jG":["~"],"qW":[],"jG.T":"~"},"FT":{"jG":["c1"],"qW":[],"jG.T":"c1"},"Uj":{"ao":[],"i":[]},"Ck":{"aj":[]},"P6":{"aj":[],"eH":[]},"iJ":{"fh":[]},"a1u":{"bl":["d9","aJ"],"bl.S":"d9","bl.T":"aJ"},"a1t":{"bl":["aJ","d9"],"bl.S":"aJ","bl.T":"d9"},"w7":{"ao":[],"i":[]},"H3":{"X":[],"i":[]},"Wx":{"a9":["H3"]},"wm":{"c2":[]},"oR":{"b4":[],"aV":[],"i":[]},"vQ":{"ao":[],"i":[]},"hg":{"ey":["1"],"i7":[]},"Hx":{"jr":["1"],"fH":["1"],"cx":["1"]},"DA":{"hg":["1"],"ey":["1"],"i7":[]},"wS":{"ao":[],"i":[]},"ln":{"lO":[]},"b_X":{"lO":[]},"wo":{"jn":["wn"],"b4":[],"aV":[],"i":[],"jn.T":"wn"},"wn":{"aj":[]},"Mh":{"N0":[]},"AN":{"N0":[]},"vt":{"eg":["v"],"eg.T":"v"},"B3":{"c2":[]},"AS":{"bO":["f","f","1"],"aJ":["f","1"],"bO.V":"1","bO.K":"f","bO.C":"f"},"nS":{"aI":[],"M":[]},"jD":{"i":[]},"pH":{"X":[],"jD":[],"i":[]},"tv":{"ao":[],"jD":[],"i":[]},"a_c":{"aI":[],"M":[]},"qb":{"ao":[],"i":[]},"uk":{"ao":[],"jD":[],"i":[]},"Fw":{"aI":[],"M":[]},"xU":{"a9":["1"]},"TD":{"fk":[],"aI":[],"M":[]},"Rk":{"c2":[]},"Ri":{"fR":[],"c2":[]},"aK":{"am8":["1"],"au":["1"]},"D8":{"n":["1"],"n.E":"1"},"kc":{"e_":["1","f"],"au":["f"],"e_.R":"1"},"D6":{"e_":["1","2"],"au":["2"],"e_.R":"1"},"Gu":{"e_":["1","nC<1>"],"au":["nC<1>"],"e_.R":"1"},"Fu":{"eq":[]},"r4":{"eq":[]},"Q6":{"eq":[]},"QI":{"eq":[]},"e2":{"eq":[]},"Vn":{"eq":[]},"r_":{"tb":["1","1"],"au":["1"],"tb.R":"1"},"e_":{"au":["2"]},"ud":{"au":["+(1,2)"]},"ue":{"au":["+(1,2,3)"]},"Fo":{"au":["+(1,2,3,4)"]},"Fp":{"au":["+(1,2,3,4,5)"]},"Fq":{"au":["+(1,2,3,4,5,6,7,8)"]},"tb":{"au":["2"]},"iT":{"e_":["1","1"],"au":["1"],"e_.R":"1"},"FA":{"e_":["1","1"],"au":["1"],"e_.R":"1"},"rm":{"au":["1"]},"QF":{"au":["f"]},"je":{"au":["f"]},"uj":{"au":["f"]},"RL":{"au":["f"]},"SG":{"au":["f"]},"hY":{"e_":["1","v<1>"],"au":["v<1>"],"e_.R":"1"},"CW":{"e_":["1","v<1>"],"au":["v<1>"]},"E9":{"e_":["1","v<1>"],"au":["v<1>"],"e_.R":"1"},"EM":{"e_":["1","2"],"au":["2"]},"Px":{"M":[]},"fJ":{"b4":[],"aV":[],"i":[]},"CC":{"uk":[],"ao":[],"jD":[],"i":[]},"I5":{"aI":[],"M":[]},"z6":{"fS":[],"aI":[],"Px":["1"],"M":[]},"Hl":{"kU":["1","yN<1>"],"kU.D":"yN<1>"},"Qy":{"tv":[],"ao":[],"jD":[],"i":[]},"RT":{"c2":[]},"Ea":{"c2":[]},"Ow":{"kz":[],"c8":["kz"]},"yU":{"ny":[],"c8":["U_"]},"kz":{"c8":["kz"]},"TZ":{"kz":[],"c8":["kz"]},"U_":{"c8":["U_"]},"U0":{"c8":["U_"]},"U1":{"c2":[]},"xY":{"fR":[],"c2":[]},"xZ":{"c8":["U_"]},"ny":{"c8":["U_"]},"Ud":{"fR":[],"c2":[]},"nF":{"B":["1"],"v":["1"],"a8":["1"],"n":["1"]},"Z8":{"nF":["l"],"B":["l"],"v":["l"],"a8":["l"],"n":["l"]},"GB":{"nF":["l"],"B":["l"],"v":["l"],"a8":["l"],"n":["l"],"B.E":"l","n.E":"l","nF.E":"l"},"SE":{"H":[],"r":[],"ah":[]},"V9":{"c2":[]},"SC":{"H":[],"r":[],"ah":[]},"Sp":{"H":[],"r":[],"ah":[]},"GF":{"X":[],"i":[]},"a3Y":{"a9":["GF"]},"a0y":{"b3":[],"av":[],"i":[]},"a0A":{"b3":[],"av":[],"i":[]},"a0x":{"b3":[],"av":[],"i":[]},"fc":{"pl":[]},"iP":{"pl":[]},"eO":{"pl":[]},"B7":{"pl":[]},"p5":{"kg":[]},"pu":{"kg":[]},"fr":{"cG":[]},"XZ":{"cG":[]},"UV":{"cG":[]},"Vj":{"fr":[],"cG":[]},"x4":{"fr":[],"cG":[]},"UC":{"fr":[],"cG":[]},"T1":{"fr":[],"cG":[]},"B4":{"cG":[]},"D7":{"cG":[]},"x7":{"fr":[],"cG":[]},"vU":{"fr":[],"cG":[]},"UB":{"fr":[],"cG":[]},"Ps":{"fr":[],"cG":[]},"DU":{"cG":[]},"xz":{"cG":[]},"SM":{"cG":[]},"SL":{"cG":[]},"SI":{"cG":[]},"SJ":{"cG":[]},"EN":{"cG":[]},"SK":{"cG":[]},"Vr":{"pX":[]},"Vw":{"c2":[]},"Vy":{"fR":[],"c2":[]},"yF":{"au":["f"]},"Vs":{"bl":["v","f"],"bl.S":"v","bl.T":"f"},"jN":{"d1":[]},"kM":{"d1":[]},"kN":{"d1":[]},"kO":{"d1":[]},"h0":{"d1":[]},"kP":{"d1":[]},"fI":{"d1":[]},"GL":{"d1":[]},"pY":{"GL":[],"d1":[]},"Vt":{"n":["d1"],"n.E":"d1"},"aW5":{"X":[],"i":[]},"aWb":{"b4":[],"aV":[],"i":[]},"aYk":{"X":[],"i":[]},"b28":{"b4":[],"aV":[],"i":[]},"b0Z":{"b4":[],"aV":[],"i":[]},"aWn":{"dC":[],"b4":[],"aV":[],"i":[]},"am8":{"au":["1"]}}')) +A.b2i(v.typeUniverse,JSON.parse('{"BX":1,"V3":1,"yy":1,"KC":2,"Bc":1,"wZ":1,"FL":1,"Xz":1,"yz":2,"a2w":2,"a2v":2,"JH":2,"JI":1,"JJ":1,"Kj":2,"MF":1,"N8":2,"JS":1,"c8":1,"PB":1,"um":1,"Be":1,"Ar":1,"C4":1,"AB":1,"xv":1,"Ag":1,"vK":1,"Hf":1,"Hg":1,"Hh":1,"DR":1,"KA":1,"KQ":1,"GE":1,"Qh":1,"KR":1,"zH":1,"yp":1,"Bd":1,"Hj":1,"es":1,"fF":1,"Eo":1,"Bm":1,"zr":1,"J3":1,"tW":1,"JY":1,"qB":1,"wx":1,"qy":1,"z4":1,"ey":1,"UW":1,"aMg":1,"js":1,"fg":1,"lN":1,"cN":1,"J9":1,"SU":1,"xF":1,"zI":1,"x1":1,"Q3":1,"uR":1,"zp":1,"j1":1,"ei":1,"Ke":1,"SN":1,"CW":1,"EM":2,"Px":1,"XA":1,"Vl":2,"On":2}')) +var u={q:"\x10@\x100@@\xa0\x80 0P`pPP\xb1\x10@\x100@@\xa0\x80 0P`pPP\xb0\x11@\x100@@\xa0\x80 0P`pPP\xb0\x10@\x100@@\xa0\x80 1P`pPP\xb0\x10A\x101AA\xa1\x81 1QaqQQ\xb0\x10@\x100@@\xa0\x80 1Q`pPP\xb0\x10@\x100@@\xa0\x80 1QapQP\xb0\x10@\x100@@\xa0\x80 1PaqQQ\xb0\x10\xe0\x100@@\xa0\x80 1P`pPP\xb0\xb1\xb1\xb1\xb1\x91\xb1\xc1\x81\xb1\xb1\xb1\xb1\xb1\xb1\xb1\xb1\x10@\x100@@\xd0\x80 1P`pPP\xb0\x11A\x111AA\xa1\x81!1QaqQQ\xb1\x10@\x100@@\x90\x80 1P`pPP\xb0",S:" 0\x10000\xa0\x80\x10@P`p`p\xb1 0\x10000\xa0\x80\x10@P`p`p\xb0 0\x10000\xa0\x80\x11@P`p`p\xb0 1\x10011\xa0\x80\x10@P`p`p\xb0 1\x10111\xa1\x81\x10AQaqaq\xb0 1\x10011\xa0\x80\x10@Qapaq\xb0 1\x10011\xa0\x80\x10@Paq`p\xb0 1\x10011\xa0\x80\x10@P`q`p\xb0 \x91\x100\x811\xa0\x80\x10@P`p`p\xb0 1\x10011\xa0\x81\x10@P`p`p\xb0 1\x100111\x80\x10@P`p`p\xb0!1\x11111\xa1\x81\x11AQaqaq\xb1",D:" must not be greater than the number of characters in the file, ",r:'"recorder" must not already be associated with another Canvas.',T:"% of the way to being a CircleBorder that is ",N:"' has been assigned during initialization.",K:"00000008A0009!B000a!C000b000cD000d!E000e000vA000w!F000x!G000y!H000z!I0010!J0011!K0012!I0013!H0014!L0015!M0016!I0017!J0018!N0019!O001a!N001b!P001c001lQ001m001nN001o001qI001r!G001s002iI002j!L002k!J002l!M002m003eI003f!L003g!B003h!R003i!I003j003oA003p!D003q004fA004g!S004h!L004i!K004j004lJ004m004qI004r!H004s!I004t!B004u004vI004w!K004x!J004y004zI0050!T00510056I0057!H0058005aI005b!L005c00jrI00js!T00jt00jvI00jw!T00jx00keI00kf!T00kg00lbI00lc00niA00nj!S00nk00nvA00nw00o2S00o300ofA00og00otI00ou!N00ov00w2I00w300w9A00wa013cI013d!N013e!B013h013iI013j!J013l014tA014u!B014v!A014w!I014x014yA014z!I01500151A0152!G0153!A015c0162U0167016aU016b016wI016x016zK01700171N01720173I0174017eA017f!G017g!A017i017jG017k018qI018r019bA019c019lQ019m!K019n019oQ019p019rI019s!A019t01cjI01ck!G01cl!I01cm01csA01ct01cuI01cv01d0A01d101d2I01d301d4A01d5!I01d601d9A01da01dbI01dc01dlQ01dm01e8I01e9!A01ea01f3I01f401fuA01fx01idI01ie01ioA01ip!I01j401jdQ01je01kaI01kb01kjA01kk01knI01ko!N01kp!G01kq!I01kt!A01ku01kvJ01kw01lhI01li01llA01lm!I01ln01lvA01lw!I01lx01lzA01m0!I01m101m5A01m801ncI01nd01nfA01ni01qfI01qr01r5A01r6!I01r701s3A01s401tlI01tm01toA01tp!I01tq01u7A01u8!I01u901ufA01ug01upI01uq01urA01us01utB01uu01v3Q01v401vkI01vl01vnA01vp01x5I01x8!A01x9!I01xa01xgA01xj01xkA01xn01xpA01xq!I01xz!A01y401y9I01ya01ybA01ye01ynQ01yo01ypI01yq01yrK01ys01ywI01yx!K01yy!I01yz!J01z001z1I01z2!A01z501z7A01z9020pI020s!A020u020yA02130214A02170219A021d!A021l021qI021y0227Q02280229A022a022cI022d!A022e!I022p022rA022t0249I024c!A024d!I024e024lA024n024pA024r024tA024w025dI025e025fA025i025rQ025s!I025t!J0261!I02620267A0269026bA026d027tI027w!A027x!I027y0284A02870288A028b028dA028l028nA028s028xI028y028zA0292029bQ029c029jI029u!A029v02bdI02bi02bmA02bq02bsA02bu02bxA02c0!I02c7!A02cm02cvQ02cw02d4I02d5!J02d6!I02dc02dgA02dh02f1I02f202f8A02fa02fcA02fe02fhA02fp02fqA02fs02g1I02g202g3A02g602gfQ02gn!T02go02gwI02gx02gzA02h0!T02h102ihI02ik!A02il!I02im02isA02iu02iwA02iy02j1A02j902jaA02ji02jlI02jm02jnA02jq02jzQ02k102k2I02kg02kjA02kk02m2I02m302m4A02m5!I02m602mcA02me02mgA02mi02mlA02mm02muI02mv!A02mw02n5I02n602n7A02na02njQ02nk02nsI02nt!K02nu02nzI02o102o3A02o502pyI02q2!A02q702qcA02qe!A02qg02qnA02qu02r3Q02r602r7A02r802t6I02tb!J02tc02trI02ts02u1Q02u202u3B02v502x9I02xc02xlQ02xo02yoI02yp02ysT02yt!I02yu02yvT02yw!S02yx02yyT02yz!B02z0!S02z102z5G02z6!S02z7!I02z8!G02z902zbI02zc02zdA02ze02zjI02zk02ztQ02zu0303I0304!B0305!A0306!I0307!A0308!I0309!A030a!L030b!R030c!L030d!R030e030fA030g031oI031t0326A0327!B0328032cA032d!B032e032fA032g032kI032l032vA032x033wA033y033zB03400345I0346!A0347034fI034g034hT034i!B034j!T034k034oI034p034qS035s037jI037k037tQ037u037vB037w039rI039s03a1Q03a203cvI03cw03fjV03fk03hjW03hk03jzX03k003tmI03tp03trA03ts!I03tt!B03tu03y5I03y8!B03y904fzI04g0!B04g104gqI04gr!L04gs!R04gw04iyI04iz04j1B04j204k1I04k204k4A04kg04kxI04ky04l0A04l104l2B04lc04ltI04lu04lvA04m804moI04mq04mrA04n404pfI04pg04phB04pi!Y04pj!I04pk!B04pl!I04pm!B04pn!J04po04ppI04ps04q1Q04q804qpI04qq04qrG04qs04qtB04qu!T04qv!I04qw04qxG04qy!I04qz04r1A04r2!S04r404rdQ04rk04ucI04ud04ueA04uf04vcI04vd!A04ve04ymI04yo04yzA04z404zfA04zk!I04zo04zpG04zq04zzQ0500053dI053k053tQ053u055iI055j055nA055q058cI058f!A058g058pQ058w0595Q059c059pI059s05a8A05c005c4A05c505dfI05dg05dwA05dx05e3I05e805ehQ05ei05ejB05ek!I05el05eoB05ep05eyI05ez05f7A05f805fgI05fk05fmA05fn05ggI05gh05gtA05gu05gvI05gw05h5Q05h605idI05ie05irA05j005k3I05k405knA05kr05kvB05kw05l5Q05l905lbI05lc05llQ05lm05mlI05mm05mnB05mo05onI05ow05oyA05oz!I05p005pkA05pl05poI05pp!A05pq05pvI05pw!A05px05pyI05pz05q1A05q205vjI05vk05x5A05x705xbA05xc06bgI06bh!T06bi!I06bk06bqB06br!S06bs06buB06bv!Z06bw!A06bx!a06by06bzA06c0!B06c1!S06c206c3B06c4!b06c506c7I06c806c9H06ca!L06cb06cdH06ce!L06cf!H06cg06cjI06ck06cmc06cn!B06co06cpD06cq06cuA06cv!S06cw06d3K06d4!I06d506d6H06d7!I06d806d9Y06da06dfI06dg!N06dh!L06di!R06dj06dlY06dm06dxI06dy!B06dz!I06e006e3B06e4!I06e506e7B06e8!d06e906ecI06ee06enA06eo06f0I06f1!L06f2!R06f306fgI06fh!L06fi!R06fk06fwI06g006g6J06g7!K06g806glJ06gm!K06gn06gqJ06gr!K06gs06gtJ06gu!K06gv06hbJ06hc06i8A06io06iqI06ir!K06is06iwI06ix!K06iy06j9I06ja!J06jb06q9I06qa06qbJ06qc06weI06wf!c06wg06x3I06x4!L06x5!R06x6!L06x7!R06x806xlI06xm06xne06xo06y0I06y1!L06y2!R06y3073jI073k073ne073o07i7I07i807ibe07ic07irI07is07ite07iu07ivI07iw!e07ix!I07iy07j0e07j1!f07j207j3e07j407jsI07jt07jve07jw07l3I07l4!e07l507lqI07lr!e07ls07ngI07nh07nse07nt07nwI07nx!e07ny!I07nz07o1e07o2!I07o307o4e07o507o7I07o807o9e07oa07obI07oc!e07od07oeI07of07ohe07oi07opI07oq!e07or07owI07ox07p1e07p2!I07p307p4e07p5!f07p6!e07p707p8I07p907pge07ph07pjI07pk07ple07pm07ppf07pq07ruI07rv07s0H07s1!I07s207s3G07s4!e07s507s7I07s8!L07s9!R07sa!L07sb!R07sc!L07sd!R07se!L07sf!R07sg!L07sh!R07si!L07sj!R07sk!L07sl!R07sm07usI07ut!L07uu!R07uv07vpI07vq!L07vr!R07vs!L07vt!R07vu!L07vv!R07vw!L07vx!R07vy!L07vz!R07w00876I0877!L0878!R0879!L087a!R087b!L087c!R087d!L087e!R087f!L087g!R087h!L087i!R087j!L087k!R087l!L087m!R087n!L087o!R087p!L087q!R087r!L087s!R087t089jI089k!L089l!R089m!L089n!R089o08ajI08ak!L08al!R08am08viI08vj08vlA08vm08vnI08vt!G08vu08vwB08vx!I08vy!G08vz!B08w008z3I08z4!B08zj!A08zk0926I09280933A0934093hH093i093pB093q!I093r!B093s!L093t!B093u093vI093w093xH093y093zI09400941H0942!L0943!R0944!L0945!R0946!L0947!R0948!L0949!R094a094dB094e!G094f!I094g094hB094i!I094j094kB094l094pI094q094rb094s094uB094v!I094w094xB094y!L094z0956B0957!I0958!B0959!I095a095bB095c095eI096o097de097f099ve09a809g5e09gw09h7e09hc!B09hd09heR09hf09hge09hh!Y09hi09hje09hk!L09hl!R09hm!L09hn!R09ho!L09hp!R09hq!L09hr!R09hs!L09ht!R09hu09hve09hw!L09hx!R09hy!L09hz!R09i0!L09i1!R09i2!L09i3!R09i4!Y09i5!L09i609i7R09i809ihe09ii09inA09io09ise09it!A09iu09iye09iz09j0Y09j109j3e09j5!Y09j6!e09j7!Y09j8!e09j9!Y09ja!e09jb!Y09jc!e09jd!Y09je09k2e09k3!Y09k409kye09kz!Y09l0!e09l1!Y09l2!e09l3!Y09l409l9e09la!Y09lb09lge09lh09liY09ll09lmA09ln09lqY09lr!e09ls09ltY09lu!e09lv!Y09lw!e09lx!Y09ly!e09lz!Y09m0!e09m1!Y09m209mqe09mr!Y09ms09nme09nn!Y09no!e09np!Y09nq!e09nr!Y09ns09nxe09ny!Y09nz09o4e09o509o6Y09o709oae09ob09oeY09of!e09ol09pre09pt09see09sg09ure09v409vjY09vk09wee09wg09xje09xk09xrI09xs0fcve0fcw0fenI0feo0vmce0vmd!Y0vme0wi4e0wi80wjqe0wk00wl9I0wla0wlbB0wlc0wssI0wst!B0wsu!G0wsv!B0wsw0wtbI0wtc0wtlQ0wtm0wviI0wvj0wvmA0wvn!I0wvo0wvxA0wvy0wwtI0wwu0wwvA0www0wz3I0wz40wz5A0wz6!I0wz70wzbB0wzk0x6pI0x6q!A0x6r0x6tI0x6u!A0x6v0x6yI0x6z!A0x700x7mI0x7n0x7rA0x7s0x7vI0x7w!A0x800x87I0x88!K0x890x9vI0x9w0x9xT0x9y0x9zG0xa80xa9A0xaa0xbnI0xbo0xc5A0xce0xcfB0xcg0xcpQ0xcw0xddA0xde0xdnI0xdo!T0xdp0xdqI0xdr!A0xds0xe1Q0xe20xetI0xeu0xf1A0xf20xf3B0xf40xfqI0xfr0xg3A0xgf!I0xgg0xh8V0xhc0xhfA0xhg0xiqI0xir0xj4A0xj50xjaI0xjb0xjdB0xje0xjjI0xjk0xjtQ0xjy0xkfI0xkg0xkpQ0xkq0xm0I0xm10xmeA0xmo0xmqI0xmr!A0xms0xmzI0xn00xn1A0xn40xndQ0xng!I0xnh0xnjB0xnk0xreI0xrf0xrjA0xrk0xrlB0xrm0xroI0xrp0xrqA0xs10xyaI0xyb0xyiA0xyj!B0xyk0xylA0xyo0xyxQ0xz4!g0xz50xzvh0xzw!g0xzx0y0nh0y0o!g0y0p0y1fh0y1g!g0y1h0y27h0y28!g0y290y2zh0y30!g0y310y3rh0y3s!g0y3t0y4jh0y4k!g0y4l0y5bh0y5c!g0y5d0y63h0y64!g0y650y6vh0y6w!g0y6x0y7nh0y7o!g0y7p0y8fh0y8g!g0y8h0y97h0y98!g0y990y9zh0ya0!g0ya10yarh0yas!g0yat0ybjh0ybk!g0ybl0ycbh0ycc!g0ycd0yd3h0yd4!g0yd50ydvh0ydw!g0ydx0yenh0yeo!g0yep0yffh0yfg!g0yfh0yg7h0yg8!g0yg90ygzh0yh0!g0yh10yhrh0yhs!g0yht0yijh0yik!g0yil0yjbh0yjc!g0yjd0yk3h0yk4!g0yk50ykvh0ykw!g0ykx0ylnh0ylo!g0ylp0ymfh0ymg!g0ymh0yn7h0yn8!g0yn90ynzh0yo0!g0yo10yorh0yos!g0yot0ypjh0ypk!g0ypl0yqbh0yqc!g0yqd0yr3h0yr4!g0yr50yrvh0yrw!g0yrx0ysnh0yso!g0ysp0ytfh0ytg!g0yth0yu7h0yu8!g0yu90yuzh0yv0!g0yv10yvrh0yvs!g0yvt0ywjh0ywk!g0ywl0yxbh0yxc!g0yxd0yy3h0yy4!g0yy50yyvh0yyw!g0yyx0yznh0yzo!g0yzp0z0fh0z0g!g0z0h0z17h0z18!g0z190z1zh0z20!g0z210z2rh0z2s!g0z2t0z3jh0z3k!g0z3l0z4bh0z4c!g0z4d0z53h0z54!g0z550z5vh0z5w!g0z5x0z6nh0z6o!g0z6p0z7fh0z7g!g0z7h0z87h0z88!g0z890z8zh0z90!g0z910z9rh0z9s!g0z9t0zajh0zak!g0zal0zbbh0zbc!g0zbd0zc3h0zc4!g0zc50zcvh0zcw!g0zcx0zdnh0zdo!g0zdp0zefh0zeg!g0zeh0zf7h0zf8!g0zf90zfzh0zg0!g0zg10zgrh0zgs!g0zgt0zhjh0zhk!g0zhl0zibh0zic!g0zid0zj3h0zj4!g0zj50zjvh0zjw!g0zjx0zknh0zko!g0zkp0zlfh0zlg!g0zlh0zm7h0zm8!g0zm90zmzh0zn0!g0zn10znrh0zns!g0znt0zojh0zok!g0zol0zpbh0zpc!g0zpd0zq3h0zq4!g0zq50zqvh0zqw!g0zqx0zrnh0zro!g0zrp0zsfh0zsg!g0zsh0zt7h0zt8!g0zt90ztzh0zu0!g0zu10zurh0zus!g0zut0zvjh0zvk!g0zvl0zwbh0zwc!g0zwd0zx3h0zx4!g0zx50zxvh0zxw!g0zxx0zynh0zyo!g0zyp0zzfh0zzg!g0zzh1007h1008!g1009100zh1010!g1011101rh101s!g101t102jh102k!g102l103bh103c!g103d1043h1044!g1045104vh104w!g104x105nh105o!g105p106fh106g!g106h1077h1078!g1079107zh1080!g1081108rh108s!g108t109jh109k!g109l10abh10ac!g10ad10b3h10b4!g10b510bvh10bw!g10bx10cnh10co!g10cp10dfh10dg!g10dh10e7h10e8!g10e910ezh10f0!g10f110frh10fs!g10ft10gjh10gk!g10gl10hbh10hc!g10hd10i3h10i4!g10i510ivh10iw!g10ix10jnh10jo!g10jp10kfh10kg!g10kh10l7h10l8!g10l910lzh10m0!g10m110mrh10ms!g10mt10njh10nk!g10nl10obh10oc!g10od10p3h10p4!g10p510pvh10pw!g10px10qnh10qo!g10qp10rfh10rg!g10rh10s7h10s8!g10s910szh10t0!g10t110trh10ts!g10tt10ujh10uk!g10ul10vbh10vc!g10vd10w3h10w4!g10w510wvh10ww!g10wx10xnh10xo!g10xp10yfh10yg!g10yh10z7h10z8!g10z910zzh1100!g1101110rh110s!g110t111jh111k!g111l112bh112c!g112d1133h1134!g1135113vh113w!g113x114nh114o!g114p115fh115g!g115h1167h1168!g1169116zh1170!g1171117rh117s!g117t118jh118k!g118l119bh119c!g119d11a3h11a4!g11a511avh11aw!g11ax11bnh11bo!g11bp11cfh11cg!g11ch11d7h11d8!g11d911dzh11e0!g11e111erh11es!g11et11fjh11fk!g11fl11gbh11gc!g11gd11h3h11h4!g11h511hvh11hw!g11hx11inh11io!g11ip11jfh11jg!g11jh11k7h11k8!g11k911kzh11l0!g11l111lrh11ls!g11lt11mjh11mk!g11ml11nbh11nc!g11nd11o3h11o4!g11o511ovh11ow!g11ox11pnh11po!g11pp11qfh11qg!g11qh11r7h11r8!g11r911rzh11s0!g11s111srh11ss!g11st11tjh11tk!g11tl11ubh11uc!g11ud11v3h11v4!g11v511vvh11vw!g11vx11wnh11wo!g11wp11xfh11xg!g11xh11y7h11y8!g11y911yzh11z0!g11z111zrh11zs!g11zt120jh120k!g120l121bh121c!g121d1223h1224!g1225122vh122w!g122x123nh123o!g123p124fh124g!g124h1257h1258!g1259125zh1260!g1261126rh126s!g126t127jh127k!g127l128bh128c!g128d1293h1294!g1295129vh129w!g129x12anh12ao!g12ap12bfh12bg!g12bh12c7h12c8!g12c912czh12d0!g12d112drh12ds!g12dt12ejh12ek!g12el12fbh12fc!g12fd12g3h12g4!g12g512gvh12gw!g12gx12hnh12ho!g12hp12ifh12ig!g12ih12j7h12j8!g12j912jzh12k0!g12k112krh12ks!g12kt12ljh12lk!g12ll12mbh12mc!g12md12n3h12n4!g12n512nvh12nw!g12nx12onh12oo!g12op12pfh12pg!g12ph12q7h12q8!g12q912qzh12r0!g12r112rrh12rs!g12rt12sjh12sk!g12sl12tbh12tc!g12td12u3h12u4!g12u512uvh12uw!g12ux12vnh12vo!g12vp12wfh12wg!g12wh12x7h12x8!g12x912xzh12y0!g12y112yrh12ys!g12yt12zjh12zk!g12zl130bh130c!g130d1313h1314!g1315131vh131w!g131x132nh132o!g132p133fh133g!g133h1347h1348!g1349134zh1350!g1351135rh135s!g135t136jh136k!g136l137bh137c!g137d1383h1384!g1385138vh138w!g138x139nh139o!g139p13afh13ag!g13ah13b7h13b8!g13b913bzh13c0!g13c113crh13cs!g13ct13djh13dk!g13dl13ebh13ec!g13ed13f3h13f4!g13f513fvh13fw!g13fx13gnh13go!g13gp13hfh13hg!g13hh13i7h13i8!g13i913izh13j0!g13j113jrh13js!g13jt13kjh13kk!g13kl13lbh13lc!g13ld13m3h13m4!g13m513mvh13mw!g13mx13nnh13no!g13np13ofh13og!g13oh13p7h13p8!g13p913pzh13q0!g13q113qrh13qs!g13qt13rjh13rk!g13rl13sbh13sc!g13sd13t3h13t4!g13t513tvh13tw!g13tx13unh13uo!g13up13vfh13vg!g13vh13w7h13w8!g13w913wzh13x0!g13x113xrh13xs!g13xt13yjh13yk!g13yl13zbh13zc!g13zd1403h1404!g1405140vh140w!g140x141nh141o!g141p142fh142g!g142h1437h1438!g1439143zh1440!g1441144rh144s!g144t145jh145k!g145l146bh146c!g146d1473h1474!g1475147vh147w!g147x148nh148o!g148p149fh149g!g149h14a7h14a8!g14a914azh14b0!g14b114brh14bs!g14bt14cjh14ck!g14cl14dbh14dc!g14dd14e3h14e4!g14e514evh14ew!g14ex14fnh14fo!g14fp14gfh14gg!g14gh14h7h14h8!g14h914hzh14i0!g14i114irh14is!g14it14jjh14jk!g14jl14kbh14kc!g14kd14l3h14l4!g14l514lvh14lw!g14lx14mnh14mo!g14mp14nfh14ng!g14nh14o7h14o8!g14o914ozh14p0!g14p114prh14ps!g14pt14qjh14qk!g14ql14rbh14rc!g14rd14s3h14s4!g14s514svh14sw!g14sx14tnh14to!g14tp14ufh14ug!g14uh14v7h14v8!g14v914vzh14w0!g14w114wrh14ws!g14wt14xjh14xk!g14xl14ybh14yc!g14yd14z3h14z4!g14z514zvh14zw!g14zx150nh150o!g150p151fh151g!g151h1527h1528!g1529152zh1530!g1531153rh153s!g153t154jh154k!g154l155bh155c!g155d1563h1564!g1565156vh156w!g156x157nh157o!g157p158fh158g!g158h1597h1598!g1599159zh15a0!g15a115arh15as!g15at15bjh15bk!g15bl15cbh15cc!g15cd15d3h15d4!g15d515dvh15dw!g15dx15enh15eo!g15ep15ffh15fg!g15fh15g7h15g8!g15g915gzh15h0!g15h115hrh15hs!g15ht15ijh15ik!g15il15jbh15jc!g15jd15k3h15k4!g15k515kvh15kw!g15kx15lnh15lo!g15lp15mfh15mg!g15mh15n7h15n8!g15n915nzh15o0!g15o115orh15os!g15ot15pjh15pk!g15pl15qbh15qc!g15qd15r3h15r4!g15r515rvh15rw!g15rx15snh15so!g15sp15tfh15tg!g15th15u7h15u8!g15u915uzh15v0!g15v115vrh15vs!g15vt15wjh15wk!g15wl15xbh15xc!g15xd15y3h15y4!g15y515yvh15yw!g15yx15znh15zo!g15zp160fh160g!g160h1617h1618!g1619161zh1620!g1621162rh162s!g162t163jh163k!g163l164bh164c!g164d1653h1654!g1655165vh165w!g165x166nh166o!g166p167fh167g!g167h1687h1688!g1689168zh1690!g1691169rh169s!g169t16ajh16ak!g16al16bbh16bc!g16bd16c3h16c4!g16c516cvh16cw!g16cx16dnh16do!g16dp16efh16eg!g16eh16f7h16f8!g16f916fzh16g0!g16g116grh16gs!g16gt16hjh16hk!g16hl16ibh16ic!g16id16j3h16j4!g16j516jvh16jw!g16jx16knh16ko!g16kp16lfh16ls16meW16mj16nvX16o01d6nI1d6o1dkve1dkw1dljI1dlp!U1dlq!A1dlr1dm0U1dm1!I1dm21dmeU1dmg1dmkU1dmm!U1dmo1dmpU1dmr1dmsU1dmu1dn3U1dn41e0tI1e0u!R1e0v!L1e1c1e63I1e64!K1e65!I1e681e6nA1e6o!N1e6p1e6qR1e6r1e6sN1e6t1e6uG1e6v!L1e6w!R1e6x!c1e741e7jA1e7k1e7oe1e7p!L1e7q!R1e7r!L1e7s!R1e7t!L1e7u!R1e7v!L1e7w!R1e7x!L1e7y!R1e7z!L1e80!R1e81!L1e82!R1e83!L1e84!R1e851e86e1e87!L1e88!R1e891e8fe1e8g!R1e8h!e1e8i!R1e8k1e8lY1e8m1e8nG1e8o!e1e8p!L1e8q!R1e8r!L1e8s!R1e8t!L1e8u!R1e8v1e92e1e94!e1e95!J1e96!K1e97!e1e9c1ed8I1edb!d1edd!G1ede1edfe1edg!J1edh!K1edi1edje1edk!L1edl!R1edm1edne1edo!R1edp!e1edq!R1edr1ee1e1ee21ee3Y1ee41ee6e1ee7!G1ee81eeye1eez!L1ef0!e1ef1!R1ef21efue1efv!L1efw!e1efx!R1efy!e1efz!L1eg01eg1R1eg2!L1eg31eg4R1eg5!Y1eg6!e1eg71eggY1egh1ehpe1ehq1ehrY1ehs1eime1eiq1eive1eiy1ej3e1ej61ejbe1eje1ejge1ejk!K1ejl!J1ejm1ejoe1ejp1ejqJ1ejs1ejyI1ek91ekbA1ekc!i1ekd1ereI1erk1ermB1err1eykI1eyl!A1f281f4gI1f4w!A1f4x1f91I1f921f96A1f9c1fa5I1fa7!B1fa81fbjI1fbk!B1fbl1fh9I1fhc1fhlQ1fhs1g7pI1g7r!B1g7s1gd7I1gdb!B1gdc1gjkI1gjl1gjnA1gjp1gjqA1gjw1gjzA1gk01gl1I1gl41gl6A1glb!A1glc1glkI1gls1glzB1gm01gpwI1gpx1gpyA1gq31gq7I1gq81gqdB1gqe!c1gqo1gs5I1gs91gsfB1gsg1h5vI1h5w1h5zA1h681h6hQ1heo1hgpI1hgr1hgsA1hgt!B1hgw1hl1I1hl21hlcA1hld1hpyI1hq81hqaA1hqb1hrrI1hrs1hs6A1hs71hs8B1hs91ht1I1ht21htbQ1htr1htuA1htv1hv3I1hv41hveA1hvf1hvhI1hvi1hvlB1hvx1hwoI1hww1hx5Q1hxc1hxeA1hxf1hyeI1hyf1hysA1hyu1hz3Q1hz41hz7B1hz8!I1hz91hzaA1hzb1i0iI1i0j!A1i0k!I1i0l!T1i0m!I1i0w1i0yA1i0z1i2aI1i2b1i2oA1i2p1i2sI1i2t1i2uB1i2v!I1i2w!B1i2x1i30A1i31!I1i321i33A1i341i3dQ1i3e!I1i3f!T1i3g!I1i3h1i3jB1i3l1i5nI1i5o1i5zA1i601i61B1i62!I1i631i64B1i65!I1i66!A1i801i94I1i95!B1i9c1iamI1ian1iayA1ib41ibdQ1ibk1ibnA1ibp1id5I1id71id8A1id9!I1ida1idgA1idj1idkA1idn1idpA1ids!I1idz!A1ie51ie9I1iea1iebA1iee1iekA1ieo1iesA1iio1ik4I1ik51ikmA1ikn1ikqI1ikr1ikuB1ikv!I1ikw1il5Q1il61il7B1il9!I1ila!A1ilb1injI1ink1io3A1io41io7I1iog1iopQ1itc1iumI1iun1iutA1iuw1iv4A1iv5!T1iv61iv7B1iv81iv9G1iva1ivcI1ivd1ivrB1ivs1ivvI1ivw1ivxA1iww1iy7I1iy81iyoA1iyp1iyqB1iyr1iysI1iz41izdQ1izk1izwT1j0g1j1mI1j1n1j1zA1j20!I1j281j2hQ1j401j57I1j5c1j5lQ1j5m1j5nI1j5o1j5qB1j5r1jcbI1jcc1jcqA1jcr1jhbI1jhc1jhlQ1jhm1jjjI1jjk1jjpA1jjr1jjsA1jjv1jjyA1jjz!I1jk0!A1jk1!I1jk21jk3A1jk41jk6B1jkg1jkpQ1jmo1jo0I1jo11jo7A1joa1jogA1joh!I1joi!T1joj!I1jok!A1jpc!I1jpd1jpmA1jpn1jqqI1jqr1jqxA1jqy!I1jqz1jr2A1jr3!T1jr4!I1jr51jr8B1jr9!T1jra!I1jrb!A1jrk!I1jrl1jrvA1jrw1jt5I1jt61jtlA1jtm1jtoB1jtp!I1jtq1jtsT1jtt1jtuB1juo1k4uI1k4v1k52A1k541k5bA1k5c!I1k5d1k5hB1k5s1k61Q1k621k6kI1k6o!T1k6p!G1k6q1k7jI1k7m1k87A1k891k8mA1kao1kc0I1kc11kc6A1kca!A1kcc1kcdA1kcf1kclA1kcm!I1kcn!A1kcw1kd5Q1kdc1kehI1kei1kemA1keo1kepA1ker1kevA1kew!I1kf41kfdQ1ko01koiI1koj1komA1kon1kv0I1kv11kv4K1kv51kvlI1kvz!B1kw01lriI1lrk1lroB1ls01oifI1oig1oiiL1oij1oilR1oim1ojlI1ojm!R1ojn1ojpI1ojq!L1ojr!R1ojs!L1ojt!R1oju1oqgI1oqh!L1oqi1oqjR1oqk1oviI1ovk1ovqS1ovr!L1ovs!R1s001sctI1scu!L1scv!R1scw1zkuI1zkw1zl5Q1zla1zlbB1zo01zotI1zow1zp0A1zp1!B1zpc1zqnI1zqo1zquA1zqv1zqxB1zqy1zr7I1zr8!B1zr9!I1zrk1zrtQ1zrv20euI20ev20ewB20ex20juI20jz!A20k0!I20k120ljA20lr20luA20lv20m7I20o020o3Y20o4!S20og20ohA20ow25fbe25fk260ve260w26dxI26f426fce2dc02djye2dlc2dleY2dlw2dlzY2dm82dx7e2fpc2ftoI2ftp2ftqA2ftr!B2fts2ftvA2jnk2jxgI2jxh2jxlA2jxm2jxoI2jxp2jyaA2jyb2jycI2jyd2jyjA2jyk2jzdI2jze2jzhA2jzi2k3lI2k3m2k3oA2k3p2l6zI2l722l8fQ2l8g2lmnI2lmo2lo6A2lo72loaI2lob2lpoA2lpp2lpwI2lpx!A2lpy2lqbI2lqc!A2lqd2lqeI2lqf2lqiB2lqj!I2lqz2lr3A2lr52lrjA2mtc2mtiA2mtk2mu0A2mu32mu9A2mub2mucA2mue2muiA2n0g2n1oI2n1s2n1yA2n1z2n25I2n282n2hQ2n2m2ne3I2ne42ne7A2ne82nehQ2nen!J2oe82ojzI2ok02ok6A2olc2on7I2on82oneA2onf!I2onk2ontQ2ony2onzL2p9t2pbfI2pbg!K2pbh2pbjI2pbk!K2pbl2prlI2pz42q67e2q682q6kI2q6l2q6ne2q6o2q98I2q992q9be2q9c2qb0I2qb12qcle2qcm2qdbj2qdc2qo4e2qo5!f2qo62qore2qos2qotI2qou2qpge2qph2qpiI2qpj2qpne2qpo!I2qpp2qpte2qpu2qpwf2qpx2qpye2qpz!f2qq02qq1e2qq22qq4f2qq52qree2qrf2qrjk2qrk2qtde2qte2qtff2qtg2qthe2qti2qtsf2qtt2qude2que2quwf2qux2quze2qv0!f2qv12qv4e2qv52qv7f2qv8!e2qv92qvbf2qvc2qvie2qvj!f2qvk!e2qvl!f2qvm2qvze2qw0!I2qw1!e2qw2!I2qw3!e2qw4!I2qw52qw9e2qwa!f2qwb2qwee2qwf!I2qwg!e2qwh2qwiI2qwj2qyne2qyo2qyuI2qyv2qzae2qzb2qzoI2qzp2r01e2r022r0pI2r0q2r1ve2r1w2r1xf2r1y2r21e2r22!f2r232r2ne2r2o!f2r2p2r2se2r2t2r2uf2r2v2r4je2r4k2r4rI2r4s2r5fe2r5g2r5lI2r5m2r7oe2r7p2r7rf2r7s2r7ue2r7v2r7zf2r802r91I2r922r94H2r952r97Y2r982r9bI2r9c2raae2rab!f2rac2rare2ras2rauf2rav2rb3e2rb4!f2rb52rbfe2rbg!f2rbh2rcve2rcw2rg3I2rg42rgfe2rgg2risI2rit2rjze2rk02rkbI2rkc2rkfe2rkg2rlzI2rm02rm7e2rm82rmhI2rmi2rmne2rmo2rnrI2rns2rnze2ro02rotI2rou2rr3e2rr42rrfI2rrg!f2rrh2rrie2rrj!f2rrk2rrre2rrs2rrzf2rs02rs5e2rs6!f2rs72rsfe2rsg2rspf2rsq2rsre2rss2rsuf2rsv2ruee2ruf!f2rug2rw4e2rw52rw6f2rw7!e2rw82rw9f2rwa!e2rwb!f2rwc2rwse2rwt2rwvf2rww!e2rwx2rx9f2rxa2ry7e2ry82s0jI2s0k2s5be2s5c2sayI2sc02sc9Q2scg2t4te2t4w47p9e47pc5m9pejny9!Ajnz4jo1rAjo5cjobzAl2ionvnhI",L:": URI should have a non-empty host name: ",z:'',U:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",A:"Cannot extract a file path from a URI with a fragment component",B:"Cannot extract a file path from a URI with a query component",Q:"Cannot extract a non-Windows file path from a file URI with an authority",c:"Cannot fire new event. Controller is already firing an event",I:'E533333333333333333333333333DDDDDDD4333333333333333333334C43333CD53333333333333333333333UEDTE4\x933343333\x933333333333333333333333333D433333333333333333CDDEDDD43333333S5333333333333333333333C333333D533333333333333333333333SUDDDDT5\x9933CD4E333333333333333333333333UEDDDDE433333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333TUUS5CT\x94\x95E3333333333333333333333333333333333333333333333333333333333333333333333SUDD3DUU43533333333333333333C3333333333333w733337333333s3333333w7333333333w33333333333333333333CDDTETE43333ED4S5SE3333C33333D33333333333334E433C3333333C33333333333333333333333333333CETUTDT533333CDDDDDDDDDD3333333343333333D$433333333333333333333333SUDTEE433C34333333333333333333333333333333333333333333333333333333333333333333333333333333TUDDDD3333333333CT5333333333333333333333333333DCEUU3U3U5333343333S5CDDD3CDD333333333333333333333333333333333333333333333333333333333333333333333s73333s33333333333""""""""333333339433333333333333CDDDDDDDDDDDDDDDD3333333CDDDDDDDDDDD\x94DDDDDDDDDDDDDDDDDDDDDDDD33333333DDDDDDDD3333333373s333333333333333333333333333333CDTDDDCTE43C4CD3C333333333333333D3C33333\xee\xee\xed\xee\xee\xee\xee\xee\xee\xee\xee\xee\xee\xee\xee\xee\xed\xee\xee\xee\xee\xee\xee\xee\xee\xee\xee\xee\xee\xee\xed\xee\xee\xee\xee\xee\xee\xee\xee\xee\xee\xee\xee\xee333333\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb33\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc<3sww73333swwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww7333swwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww7333333w7333333333333333733333333333333333333333333333sww733333s7333333s3wwwww333333333wwwwwwwwwwwwwwwwwwwwwwwwwwwwgffffffffffffvww7wwwwwwswwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww733333333333333333333333swwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww7333333333333333333333333333333333333333333333333333333333swwwww7333333333333333333333333333333333333333333wwwwwwwwwwwwwwwwwwwww7swwwwwss33373733s33333w33333CT333333333333333EDTETD433333333#\x14"333333333333"""233333373ED4U5UE9333C33333D33333333333333www3333333s73333333333EEDDDCC3DDDDUUUDDDDD3T5333333333333333333333333333CCU3333333333333333333333333333334EDDD33SDD4D5U4333333333C43333333333CDDD9DDD3DCD433333333C433333333333333C433333333333334443SEUCUSE4333D33333C43333333533333CU33333333333333333333333333334EDDDD3CDDDDDDDDDDDDDDDDDDDDDDDDDDD33DDDDDDDDDDDDDDDDDDDDDDDDD33334333333C33333333333DD4DDDDDDD433333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333CSUUUUUUUUUUUUUUUUUUUUUUUUUUU333CD43333333333333333333333333333333333333333433333U3333333333333333333333333UUUUUUTEDDDDD3333C3333333333333333373333333333s333333333333swwwww33w733wwwwwww73333s33333333337swwwwsw73333wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwDD4D33CDDDDDCDDDDDDDDDDDDDDDDD43EDDDTUEUCDDD33333D33333333333333DDCDDDDCDCDD333333333DT33333333333333D5333333333333333333333333333CSUE4333333333333CDDDDDDDD4333333DT33333333333333333333333CUDDUDU3SUSU43333433333333333333333333ET533E3333SDD3U3U4333D43333C43333333333333s733333s33333333333CTE333333333333333333UUUUDDDDUD3333"""""(\x02"""""""""3333333333333333333DDDD333333333333333333333333CDDDD3333C3333T333333333333333333333334343C33333333333SET334333333333DDDDDDDDDDDDDDDDDDDDDD4DDDDDDDD4CDDDC4DD43333333333333333333333333333333333333333333333333C33333333333333333333333333333333333333333333333333333333333333333333333333333333DDD433333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333334333333333333333333333333333333DD3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333DD433333333333333333333333333333DDD43333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333DDDDDDD533333333333333333333333DDDTTU5D4DD333C433333D333333333333333333333DDD733333s373ss33w7733333ww733333333333ss33333333333333333333333333333ww3333333333333333333333333333wwww33333www33333333333333333333wwww333333333333333wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww333333wwwwwwwwwwwwwwwwwwwwwww7wwwwwswwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww73333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333C4""333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333DD3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333DDD4333333333333333333333333333333333333333333333333333333DDD4333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333UEDDDTEE43333333333333333333333333333333333333333333333333333CEUDDDE33333333333333333333333333333333333333333333333333CD3DDEDD3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333EDDDCDDT43333333333333333333333333333333333333333CDDDDDDDDDD4EDDDETD3333333333333333333333333333333333333333333333333333333333333DDD3CC4DDD\x94433333333333333333333333333333333SUUC4UT4333333333333333333333333333333333333333333333333333#"""""""B333DDDDDDD433333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333CED3SDD$"""BDDD4CDDD333333333333333DD33333333333333333333333333333333333333333DEDDDUE333333333333333333333333333CCD3D33CD533333333333333333333333333CESEU3333333333333333333DDDD433333CU33333333333333333333333333334DC44333333333333333333333333333CD4DDDDD33333333333333333333DDD\x95DD333343333DDDUD43333333333333333333\x93\x99\x99IDDDDDDE43333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333CDDDDDDDDDDDDDDDDDDDDDD4CDDDDDDDDDDD33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333CD3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333433333333333333333333333333333333333333333333333333333333333333333333333333DD4333333333333333333333333333333333333333333333333333333333333333333""""""33D4D33CD43333333333333333333CD3343333333333333333333333333333333333333333333333333333333333333333333333333333333333D33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333CT53333DY333333333333333333333333UDD43UT43333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333D3333333333333333333333333333333333333333D43333333333333333333333333333333333CDDDDD333333333333333333333333CD4333333333333333333333333333333333333333333333333333333333333SUDDDDUDT43333333333343333333333333333333333333333333333333333TEDDTTEETD333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333CUDD3UUDE43333333333333D3333333333333333343333333333SE43CD33333333DD33333C33TEDCSUUU433333333S533333CDDDDDU333333\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa:3\x99\x99\x9933333DDDDD4233333333333333333UTEUS433333333CDCDDDDDDEDDD33433C3E433#"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""BDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD$"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""BDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD$"""""""""""""""2333373r33333333\x93933CDDD4333333333333333CDUUDU53SEUUUD43\xa3\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xba\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xcb\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\f',w:"Error handler must accept one Object or one Object and a StackTrace as arguments, and return a value of the returned future's type",g:'PathMetricIterator is not pointing to a PathMetric. This can happen in two situations:\n- The iteration has not started yet. If so, call "moveNext" to start iteration.\n- The iterator ran out of elements. If so, check that "moveNext" returns true prior to calling "current".',V:"Stream has been disposed.\nAn ImageStream is considered disposed once at least one listener has been added and subsequently all listeners have been removed and no handles are outstanding from the keepAlive method.\nTo resolve this error, maintain at least one listener on the stream, or create an ImageStreamCompleterHandle from the keepAlive method, or create a new stream for the image.",p:"SystemChrome.setApplicationSwitcherDescription",s:"TextInputClient.updateEditingStateWithDeltas",l:"TextInputClient.updateEditingStateWithTag",u:"There was a problem trying to load FontManifest.json",y:"gl_Position = ((u_ctransform * position) * u_scale) + u_shift;",J:"vec2 center = 0.5 * (u_resolution + u_tile_offset);",E:"vec4 localCoord = m_gradient * vec4(gl_FragCoord.x - center.x, center.y - gl_FragCoord.y, 0, 1);",R:"\u1ac4\u2bb8\u411f\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u3f4f\u0814\u32b6\u32b6\u32b6\u32b6\u1f81\u32b6\u32b6\u32b6\u1bbb\u2f6f\u3cc2\u051e\u32b6\u11d3\u079b\u2c12\u3967\u1b18\u18aa\u392b\u414f\u07f1\u2eb5\u1880\u1123\u047a\u1909\u08c6\u1909\u11af\u2f32\u1a19\u04d1\u19c3\u2e6b\u209a\u1298\u1259\u0667\u108e\u1160\u3c49\u116f\u1b03\u12a3\u1f7c\u121b\u2023\u1840\u34b0\u088a\u3c13\u04b6\u32b6\u41af\u41cf\u41ef\u4217\u32b6\u32b6\u32b6\u32b6\u32b6\u3927\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u18d8\u1201\u2e2e\u15be\u0553\u32b6\u3be9\u32b6\u416f\u32b6\u32b6\u32b6\u1a68\u10e5\u2a59\u2c0e\u205e\u2ef3\u1019\u04e9\u1a84\u32b6\u32b6\u3d0f\u32b6\u32b6\u32b6\u3f4f\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u104e\u076a\u32b6\u07bb\u15dc\u32b6\u10ba\u32b6\u32b6\u32b6\u32b6\u32b6\u1a3f\u32b6\u0cf2\u1606\u32b6\u32b6\u32b6\u0877\u32b6\u32b6\u073d\u2139\u0dcb\u0bcb\u09b3\u0bcb\u0fd9\u20f7\u03e3\u32b6\u32b6\u32b6\u32b6\u32b6\u0733\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u041d\u0864\u32b6\u32b6\u32b6\u32b6\u32b6\u3915\u32b6\u3477\u32b6\u3193\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u20be\u32b6\u36b1\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u2120\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u2f80\u36ac\u369a\u32b6\u32b6\u32b6\u32b6\u1b8c\u32b6\u1584\u1947\u1ae4\u3c82\u1986\u03b8\u043a\u1b52\u2e77\u19d9\u32b6\u32b6\u32b6\u3cdf\u090a\u0912\u091a\u0906\u090e\u0916\u091e\u090a\u0912\u091a\u0906\u090e\u0916\u091e\u090a\u0912\u091a\u0906\u090e\u0916\u091e\u090a\u0912\u091a\u0906\u090e\u0916\u091e\u090a\u0912\u091a\u0906\u090e\u0916\u091e\u090a\u0912\u091a\u0906\u090e\u0916\u091e\u090a\u0912\u091a\u0906\u090e\u0916\u091e\u090a\u0912\u091a\u0906\u090e\u0916\u091e\u090a\u0912\u091a\u0906\u090e\u0916\u091e\u090a\u0912\u091a\u0906\u090e\u0916\u091e\u090a\u0912\u091a\u0906\u090e\u0916\u091e\u090a\u0912\u091a\u0906\u090e\u0916\u091e\u090a\u0912\u091a\u0906\u090e\u0916\u091e\u090a\u0912\u091a\u0906\u090e\u0916\u091e\u090a\u0912\u091a\u0906\u090e\u0916\u091e\u090a\u0912\u091a\u0906\u090e\u0916\u091e\u090a\u0912\u091a\u0906\u090e\u0916\u091e\u090a\u0912\u091a\u0906\u090e\u0916\u091e\u090a\u0912\u091a\u0906\u090e\u0916\u091e\u090a\u0912\u091a\u0906\u090e\u0916\u091e\u090a\u0912\u091a\u0906\u090e\u0916\u091e\u090a\u0912\u091a\u0906\u090e\u0916\u091e\u090a\u0912\u091a\u0906\u090e\u0916\u091e\u090a\u0912\u091a\u0906\u090e\u0916\u091e\u090a\u0912\u091a\u0906\u090e\u0916\u093a\u0973\u3d4f\u3d4f\u3d4f\u3d4f\u3d4f\u3d4f\u3d4f\u3d4f\u3d4f\u3d4f\u3d4f\u3d4f\u3d4f\u3d4f\u3d4f\u3d4f\u3d4f\u3d4f\u3d4f\u3d4f\u3d4f\u3d4f\u3d4f\u3d4f\u3d4f\u3d4f\u3d4f\u3d4f\u3d4f\u3d4f\u3d4f\u3d4f\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u3498\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u0834\u32b6\u32b6\u2bb8\u32b6\u32b6\u36ac\u35a6\u32b9\u33d6\u32b6\u32b6\u32b6\u35e5\u24ee\u3847\x00\u0567\u3a12\u2826\u01d4\u2fb3\u29f7\u36f2\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u2bc7\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u1e54\u32b6\u1394\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u2412\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u30b3\u2c62\u3271\u32b6\u32b6\u32b6\u12e3\u32b6\u32b6\u1bf2\u1d44\u2526\u32b6\u2656\u32b6\u32b6\u32b6\u0bcb\u1645\u0a85\u0ddf\u2168\u22af\u09c3\u09c5\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u3f2f\u3d4f\u3d4f\u3d4f\u3d4f\u3d4f\u3d4f\u3d4f\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6\u32b6"} +var t=(function rtii(){var s=A.a6 +return{vH:s("aV6"),od:s("bk"),pC:s("hK"),so:s("cv"),Jo:s("cv"),rb:s("cv

"),m:s("cv"),Bs:s("cv"),o2:s("l4"),s1:s("Al"),vp:s("qA"),S7:s("Ao"),jo:s("a6E"),pR:s("oj"),Pg:s("fr"),M1:s("LW"),sE:s("h9"),jF:s("k0"),DK:s("cJ"),vs:s("db"),Gu:s("aL"),Al:s("om"),d5:s("jg"),HE:s("AE"),Vt:s("AG"),m_:s("cl"),k:s("az"),r:s("ha"),pI:s("Mx"),V4:s("c1"),wY:s("cT"),nz:s("cT"),OZ:s("cT"),vr:s("cT"),gv:s("cT"),fN:s("cT"),Tx:s("cT"),fn:s("cT"),sl:s("cT"),j5:s("cT"),_n:s("cT"),ZQ:s("cT"),f6:s("cT"),zI:s("MA"),p7:s("ft?,cx<@>>"),vg:s("f3"),sL:s("or"),bv:s("hM"),ES:s("aVF"),Ox:s("aJY"),me:s("MG"),Lh:s("AY"),XY:s("r0"),p1:s("k3"),qo:s("vA"),z7:s("MS"),m6:s("MT"),E_:s("B_"),Bn:s("MW"),wW:s("ot"),S3:s("B0"),BQ:s("B1"),V1:s("MZ"),nR:s("B2"),Kb:s("N0()"),xG:s("vE"),O5:s("r1"),Hz:s("fu"),hP:s("ix"),n8:s("m"),Zn:s("B8"),IC:s("f4"),b8:s("c8<@>"),qO:s("r5"),li:s("bs"),eL:s("bs"),fF:s("fO"),Bx:s("vM"),vn:s("vN"),T:s("eN"),pU:s("at>"),VQ:s("Nf"),d1:s("Nh"),ZC:s("eO"),VD:s("aW5"),ho:s("Bg"),gF:s("he<~>"),My:s("Bj<@>"),H5:s("aWb"),HY:s("fv"),ip:s("Bo"),I7:s("b8L"),Hw:s("iA"),l4:s("aWl"),Uf:s("oy"),AG:s("aWn"),uy:s("aWp"),yS:s("vT"),Je:s("b8V"),JX:s("NS"),I:s("ji"),ra:s("b90"),xm:s("hQ"),uZ:s("NV>"),Jj:s("aWz"),VF:s("mH"),yN:s("NY"),uL:s("li"),zk:s("lj"),iG:s("O2"),ty:s("aWW"),aD:s("eu"),Tu:s("b1"),A0:s("de"),Ee:s("a8<@>"),h:s("aI"),m1:s("lk"),EM:s("rl"),IH:s("BP"),S9:s("Oi"),X8:s("Oj"),Q4:s("BR"),oy:s("rm"),TS:s("rm<~>"),T4:s("a5"),Lt:s("bX"),I3:s("aB"),VI:s("c2"),IX:s("kb"),bh:s("ro"),oB:s("rp"),ii:s("w8"),_w:s("mK"),HH:s("mL"),OO:s("iD"),cP:s("rr"),b6:s("rs"),P9:s("mM"),eI:s("rt"),Ie:s("BV"),fw:s("ad"),Ii:s("kc>"),vo:s("kc>"),TJ:s("kc<+(f,v)>"),US:s("ex"),N8:s("C7"),s4:s("acM"),OE:s("acN"),mx:s("dI"),l5:s("oH"),zq:s("wh"),ia:s("rA"),VW:s("rB"),FK:s("fa"),jU:s("Cf"),bE:s("fR"),Uy:s("Cg"),Nh:s("hl"),_8:s("iH"),xu:s("wj"),Z9:s("ae"),xd:s("ae(f,aJ)"),Ev:s("ae()"),L0:s("ae<@>"),T8:s("ae"),Yf:s("ae>?>"),uz:s("ae<~>"),Fp:s("bz"),o:s("bz"),b4:s("fb"),Lu:s("fb"),Ih:s("fb"),SP:s("wk"),tL:s("oK"),cD:s("dq"),uA:s("cM"),C1:s("cM"),Uv:s("cM"),jn:s("cM"),YC:s("cM"),hg:s("cM"),Qm:s("cM"),UN:s("cM"),ok:s("cM"),ff:s("cM"),Bk:s("cM"),xR:s("rE"),Bt:s("hT"),yi:s("hT>"),TX:s("rF"),bT:s("rF>"),Js:s("dr"),Ks:s("lo"),gm:s("kf"),R1:s("kg"),rQ:s("b9h"),op:s("Co<~(oG)>"),G7:s("Pb>"),rA:s("mS"),Pd:s("oL"),mS:s("rH"),AL:s("iI"),YX:s("mT"),zE:s("ah"),Am:s("hU"),K4:s("jl"),gc:s("Cs"),Lk:s("aLh"),Gf:s("oM"),g5:s("Cv"),Oh:s("rM"),ew:s("aft"),J2:s("Pp"),fE:s("Pq"),OX:s("fw"),dW:s("jm"),SG:s("lp"),Bc:s("oQ"),WR:s("b9p"),IS:s("fS"),q0:s("oR"),og:s("dC"),WB:s("b4"),Gb:s("mY"),JZ:s("afX"),XO:s("afY"),pT:s("afZ"),gD:s("oT"),vz:s("b6"),nQ:s("oU"),Ya:s("wy"),K9:s("CH<@>"),JY:s("n<@>"),VG:s("n"),QP:s("q"),NS:s("q"),dt:s("q"),hn:s("q"),UA:s("q"),Wo:s("q"),MS:s("q"),Pv:s("q"),sq:s("q"),iW:s("q"),qN:s("q"),Cu:s("q"),W:s("q"),Ai:s("q"),td:s("q"),KV:s("q"),ZD:s("q"),E:s("q"),vl:s("q"),Up:s("q"),SV:s("q"),lX:s("q"),_m:s("q"),A:s("q"),bp:s("q"),z8:s("q"),Pt:s("q"),uf:s("q"),kZ:s("q>"),no:s("q"),wQ:s("q>"),Rh:s("q>"),SR:s("q>"),mo:s("q>"),iQ:s("q"),AB:s("q"),OQ:s("q"),om:s("q>"),rx:s("q"),i1:s("q"),XZ:s("q"),Fa:s("q"),fJ:s("q"),VB:s("q"),VO:s("q"),O_:s("q"),J:s("q"),K0:s("q"),CE:s("q"),k5:s("q"),cN:s("q"),s9:s("q"),_I:s("q"),Y4:s("q"),V3:s("q"),_f:s("q"),F:s("q"),PL:s("q"),ER:s("q"),zS:s("q>"),X_:s("q>"),Oc:s("q>"),Eo:s("q"),u6:s("q"),ss:s("q"),a9:s("q>"),H7:s("q>"),n4:s("q>"),Xr:s("q"),rE:s("q"),YE:s("q"),tc:s("q"),f2:s("q"),Qg:s("q"),jl:s("q"),yv:s("q"),wi:s("q"),jT:s("q"),g8:s("q>"),Im:s("q>"),n9:s("q"),EO:s("q"),nx:s("q"),OB:s("q"),zY:s("q"),OM:s("q>"),Gv:s("q>"),AT:s("q>"),m5:s("q>"),sb:s("q>"),B3:s("q>"),Vz:s("q>"),hc:s("q"),Sd:s("q"),H9:s("q"),Cg:s("q"),wc:s("q"),l:s("q"),tZ:s("q"),Ic:s("q"),v:s("q"),kG:s("q"),zT:s("q"),kb:s("q"),Co:s("q<+(f,pV)>"),AO:s("q"),Pc:s("q"),xT:s("q"),TT:s("q"),Ry:s("q

"),QT:s("q"),VM:s("q"),yo:s("q"),i3:s("q"),k4:s("q"),Fm:s("q"),CK:s("q"),vj:s("q"),_F:s("q"),ZP:s("q"),D1:s("q"),u1:s("q"),q1:s("q"),QF:s("q"),o4:s("q"),Qo:s("q"),Qe:s("q"),zz:s("q"),fe:s("q"),kO:s("q"),N_:s("q"),Xv:s("q"),Ds:s("q"),X4:s("q"),s:s("q"),oU:s("q"),XT:s("q"),bt:s("q"),y1:s("q"),Lx:s("q"),J9:s("q"),sD:s("q"),VS:s("q"),Ap:s("q"),fm:s("q"),Ne:s("q"),FO:s("q>>"),NG:s("q"),q6:s("q>"),LX:s("q"),uM:s("q"),zO:s("q"),p:s("q"),GA:s("q"),Ec:s("q"),po:s("q"),Na:s("q"),SW:s("q"),LN:s("q"),TV:s("q"),Kj:s("q"),_Y:s("q

"),CZ:s("q"),mz:s("q"),Kx:s("q"),he:s("q"),zj:s("q"),ML:s("q"),_k:s("q"),QW:s("q"),m3:s("q"),Ei:s("q"),jE:s("q"),qi:s("q"),uD:s("q"),M6:s("q"),au:s("q"),s6:s("q"),lb:s("q"),YK:s("q"),Z5:s("q"),D8:s("q"),mg:s("q"),cR:s("q"),NM:s("q"),HZ:s("q"),n:s("q"),ee:s("q<@>"),t:s("q"),oA:s("q"),L:s("q"),JK:s("q"),cA:s("q"),ny:s("q?>"),Fi:s("q"),XS:s("q"),Z:s("q"),a0:s("q"),Zt:s("q()>"),iN:s("q()>"),sA:s("q"),U9:s("q<~(rD)?>"),b:s("q<~()>"),SM:s("q<~(I,dw?)>"),g:s("q<~(bk)>"),x8:s("q<~(l3)>"),j1:s("q<~(b1)>"),Jh:s("q<~(v)>"),bz:s("CL"),lT:s("ls"),dC:s("bD<@>"),e:s("e"),Hf:s("fx"),Cl:s("kk"),D2:s("ho"),SQ:s("wE"),LE:s("rV"),bR:s("bp"),NE:s("bp"),b7:s("bp"),ku:s("bp"),hA:s("bp"),B:s("bp>"),af:s("bp"),L6:s("fz"),h_:s("PP"),G:s("eb"),xj:s("hY"),Po:s("hY"),mT:s("hY<@>"),rf:s("CU"),FX:s("fT"),jQ:s("bT"),RR:s("cq"),X6:s("lu"),JO:s("fc"),iK:s("fA"),uF:s("aLF"),cS:s("iM>"),z_:s("ta"),oM:s("ta"),wO:s("n2<@>"),SH:s("cw"),NJ:s("tc"),ol:s("n4"),nk:s("n4"),Xa:s("n4"),Rk:s("v"),Px:s("v"),lf:s("v"),gS:s("v"),qC:s("v"),YN:s("v"),UX:s("v"),LF:s("v"),Uh:s("v>"),I1:s("v"),RS:s("v"),xc:s("v"),yp:s("v"),d0:s("v"),Xw:s("v"),Z4:s("v"),j:s("v<@>"),Cm:s("v"),Dn:s("v"),I_:s("aj"),f0:s("hq"),da:s("n6"),bd:s("j"),bS:s("aLJ"),tO:s("aH"),UH:s("aH"),tK:s("aH"),DC:s("aH"),q9:s("aH"),sw:s("aH>"),qE:s("aH>"),Dx:s("tf<@,@>"),kY:s("aJ"),GU:s("aJ"),a:s("aJ"),_P:s("aJ"),e3:s("aJ"),f:s("aJ<@,@>"),xE:s("aJ"),pE:s("aJ"),rr:s("aJ<~(bg),bd?>"),C9:s("hr"),OW:s("R"),a4:s("R"),cj:s("R"),OL:s("R"),rB:s("R"),bK:s("R"),qn:s("R"),Tr:s("R"),E0:s("D8>"),fc:s("wR"),iB:s("aYl"),c4:s("ti"),Le:s("Dc<@>"),ui:s("cF"),h9:s("cr"),Ak:s("cr"),kU:s("cr"),iL:s("cr"),XL:s("cr

"),QL:s("cr"),Il:s("cr"),hs:s("cr"),Od:s("tj"),xV:s("bd"),w:s("n9"),Pw:s("ly"),Kv:s("jr"),xS:s("iO"),Pb:s("d0"),ZA:s("Dh"),_h:s("fB"),wd:s("iP"),Wz:s("fd"),Lb:s("fe"),jW:s("pc"),A3:s("iR"),u9:s("tt"),JS:s("pd"),uK:s("ht"),SK:s("tv"),M8:s("DA<~>"),Jc:s("e1"),Tm:s("e1"),w3:s("e1"),ji:s("e1"),WA:s("e1"),ZE:s("e1"),Te:s("na"),P:s("b7"),K:s("I"),xA:s("I(l)"),_a:s("I(l{params:I?})"),yw:s("b5"),CT:s("b5()>"),fy:s("b5<~()>"),c:s("b5<~(bk)>"),jc:s("b5<~(l3)>"),EP:s("k"),gY:s("kq"),o0:s("DH"),Tq:s("iT<+(f,dx)>"),mA:s("iT"),Jd:s("iT"),Aw:s("iT"),Ms:s("nc"),N1:s("x2"),A9:s("DL"),BB:s("DM"),Mf:s("x3"),pw:s("ey<@>"),sd:s("ey"),Q2:s("ne"),xo:s("ff"),vJ:s("ff"),wy:s("ff"),rl:s("ff

  • "),eX:s("ff"),qA:s("lB"),Fw:s("ez"),IL:s("ez"),_X:s("au<@>"),ke:s("tz"),Nt:s("fD"),D3:s("DT"),zM:s("ee"),IF:s("E1"),ix:s("dJ"),v3:s("u"),YA:s("iV"),NV:s("lD"),Ka:s("dE"),sv:s("nf"),mX:s("xe"),qa:s("b9E"),ge:s("tD"),Ko:s("tE"),kf:s("xf"),C:s("lF"),pY:s("ni"),qL:s("bg"),GG:s("b9G"),XA:s("nj"),n2:s("tF"),WQ:s("tG"),w5:s("nk"),DB:s("tH"),PB:s("tI"),Mj:s("tJ"),xb:s("tK"),ks:s("fV"),oN:s("tL"),kj:s("aMs"),bb:s("xk"),C0:s("aZA"),yH:s("aV"),hp:s("lI"),Gc:s("i5"),Pu:s("tQ"),Ut:s("fW"),eg:s("e2"),jV:s("xs"),pK:s("b9L"),Rp:s("+()"),_0:s("+(f,dx)"),BZ:s("+(f,fa?)"),YT:s("w"),Bb:s("jw"),r0:s("aK"),u4:s("aK>"),VJ:s("aK<+(f,dx)>"),Q:s("aK"),nt:s("aK"),ZV:s("aK"),MC:s("aK"),Ly:s("aK"),OY:s("aK"),hq:s("aK"),vq:s("aK"),hC:s("aK"),MB:s("aK"),sF:s("aK"),lk:s("aK<@>"),n3:s("aK<~>"),Qz:s("S3"),MD:s("xt"),MY:s("Em"),re:s("En"),x:s("H"),DW:s("tT"),f1:s("Ey"),I9:s("r"),F5:s("av"),GM:s("aT"),Wx:s("nn"),nl:s("dL"),Ss:s("pz"),Cn:s("xx"),dw:s("EJ"),Ju:s("tV"),E1:s("EK"),UM:s("lM"),yk:s("am8<@>"),Wd:s("xA"),dZ:s("EP"),yb:s("fg"),z4:s("dR"),k2:s("ES"),MV:s("cO"),o_:s("cO"),ad:s("EV"),Qt:s("tZ<~>"),UV:s("fh"),LQ:s("d9"),oj:s("xD"),Kh:s("np"),pO:s("cx<@>(M,I?)"),SB:s("xE"),Dc:s("EY"),Sv:s("u_"),nY:s("b_8"),BL:s("b_8"),Np:s("xI"),VX:s("lP"),zi:s("dh"),JE:s("F3"),Cy:s("F4"),FS:s("F7"),gt:s("nr"),sm:s("Fc"),NF:s("b_h"),qd:s("b9T"),hI:s("b9U"),x9:s("eS"),mb:s("Fi"),Wu:s("xO"),_S:s("dv"),KL:s("ub"),ZX:s("ky"),bu:s("cP"),UF:s("uc"),g3:s("nu"),mM:s("Fq"),HS:s("pF"),n5:s("xR<@>"),hh:s("bV"),Ro:s("bV<@>"),RY:s("cs"),jH:s("pG"),zU:s("xS"),yE:s("ba0"),Mp:s("b3"),RZ:s("xU"),zL:s("pH"),k7:s("uk"),FW:s("G"),yx:s("pI"),Q3:s("FA"),Ws:s("FB"),Dj:s("b_J"),q:s("pJ"),Kn:s("nw"),Gt:s("xX"),D:s("hx"),M0:s("ul"),jB:s("pK"),y3:s("kz"),D_:s("ny"),Qv:s("fj"),Km:s("dw"),MF:s("fk"),d2:s("X"),Iz:s("ao"),ZG:s("y2"),N:s("f"),Vc:s("b_Z"),Xb:s("cd"),Vh:s("y8"),Ci:s("pL"),ky:s("y9"),Yu:s("Ui"),NW:s("b03"),WT:s("bK"),NP:s("bK"),Vr:s("bK"),rg:s("bK>"),az:s("bK"),AH:s("bK"),Zs:s("bK"),E8:s("bK"),d9:s("bK"),Zl:s("bK>?>"),hr:s("bK"),b5:s("bK<~>"),U8:s("jH"),lu:s("lX"),W7:s("G5"),if:s("b0a"),Qr:s("G9"),mi:s("nA"),ot:s("jI"),cu:s("Gf"),tp:s("Gg"),qY:s("kE"),bZ:s("b0g"),AS:s("kF"),em:s("p"),ta:s("m0"),we:s("jJ"),ZM:s("uu"),ZF:s("m1>"),Ag:s("m1<@>"),qe:s("UL"),ZL:s("Gu"),U:s("h_"),U2:s("b0z"),f5:s("m2"),Cx:s("fG"),bq:s("m3"),zW:s("cQ"),kS:s("ig"),Ni:s("ar"),qU:s("ar"),Y:s("ar"),u:s("ih"),ns:s("nD"),w7:s("arA"),rd:s("yu"),W1:s("arB"),H3:s("eV"),pm:s("yv"),MX:s("nG"),O:s("da"),R:s("eF"),Sc:s("eF"),kk:s("m4"),lQ:s("GC"),G5:s("kH"),N2:s("yA<@>"),fS:s("uA"),gU:s("jK"),Xu:s("V4"),Cv:s("dN"),xe:s("dN"),kK:s("dN"),Sj:s("yB"),kr:s("ca"),uh:s("ca"),XR:s("ca"),lG:s("ca"),GY:s("kJ"),K1:s("ii"),TE:s("jM"),Dg:s("GH"),rS:s("ij"),X3:s("nH"),Hd:s("ba"),uB:s("ik"),Tv:s("dG"),S6:s("dG"),FI:s("dG"),ZK:s("dG"),n0:s("dG"),Ri:s("dG"),ow:s("dG"),kE:s("dG<~(I,dw?)>"),Pi:s("m6"),l7:s("i"),a7:s("yC"),iM:s("yD"),X5:s("eH"),tt:s("GJ"),Qy:s("m7"),cL:s("jN"),mL:s("kM"),UR:s("kN"),RN:s("kO"),Gn:s("h0"),l1:s("d1"),wG:s("eY"),Mw:s("kP"),a1:s("fI"),JC:s("GL"),L1:s("GM"),CL:s("uE"),h8:s("bI"),eG:s("bI"),FL:s("bI"),gI:s("bI"),VY:s("bI"),yB:s("bI"),oe:s("bI"),EZ:s("bI"),gR:s("bI<~>"),qh:s("q_"),BY:s("b0Z"),ZW:s("uH"),B6:s("H6"),EG:s("uI"),bY:s("Hv"),TC:s("uK"),dA:s("nL"),Fb:s("nL"),Uz:s("nL"),Q8:s("Hy>"),UJ:s("XE"),qr:s("eZ"),VA:s("nN"),Vo:s("HH"),l3:s("HN"),Wt:s("uM"),fg:s("yT"),Eh:s("HS"),fk:s("yW"),h1:s("yX"),Lv:s("aD"),qc:s("aD"),EW:s("aD"),aP:s("aD"),tq:s("aD"),LR:s("aD<@>"),wJ:s("aD"),gg:s("aD"),Kw:s("aD"),HB:s("aD"),d:s("aD<~>"),cK:s("yZ"),Qu:s("nQ"),U3:s("z1"),wk:s("h1"),R9:s("q4"),Fy:s("q5"),WD:s("I4"),Nr:s("I6"),pp:s("hE"),oc:s("I9"),YL:s("uQ"),Sx:s("q8"),pt:s("z9"),Gk:s("Ik"),PJ:s("za"),h2:s("bB"),bN:s("bB"),Lf:s("bB"),pj:s("bB"),Sq:s("bB"),V:s("bB"),Y6:s("bB"),Fe:s("Ix"),xg:s("a_3"),Tp:s("qa"),Fn:s("qb"),ai:s("nS"),Vl:s("qc"),KJ:s("nT"),eU:s("zi"),sZ:s("IM"),VE:s("a_y"),j4:s("a_z"),Wa:s("nV"),Li:s("IN"),mm:s("zo"),mP:s("IP"),h7:s("mc"),zP:s("ek"),ri:s("IT"),l0:s("uS"),Lj:s("qf"),zd:s("IY"),SN:s("J1"),kd:s("zs"),xL:s("zt"),im:s("qg"),An:s("uT"),Ez:s("eI"),Wv:s("Je"),yd:s("Jl"),Wn:s("Jn"),kT:s("a2f"),S8:s("JO"),mf:s("JU"),c6:s("uX"),ij:s("fn"),bm:s("fn"),x_:s("fn"),fa:s("fn"),jj:s("zz"),f4:s("K7"),i9:s("zC"),tH:s("b28"),yW:s("Kb"),Wp:s("Kl"),_l:s("uY"),xs:s("mj>"),DH:s("a49"),y:s("F"),i:s("z"),z:s("@"),C_:s("@(I)"),Hg:s("@(I,dw)"),S:s("l"),s5:s("0&*"),ub:s("I*"),ZU:s("og?"),tX:s("a6T?"),m2:s("At?"),Xx:s("qE?"),VC:s("mu?"),r2:s("b8s?"),Vx:s("d2?"),sa:s("fN?"),eJ:s("qR?"),oI:s("b_?"),YY:s("qU?"),CD:s("c1?"),fz:s("k3?"),eQ:s("vA?"),I4:s("vB?"),L5:s("a9l?"),JG:s("vE?"),cW:s("a9n?"),xt:s("B5?"),GB:s("a9o?"),VZ:s("r1?"),_:s("m?"),C5:s("a9C?"),YJ:s("f4?"),ms:s("mG?"),V2:s("ji?"),dd:s("eu?"),pc:s("de?"),Om:s("oz?"),Dv:s("aI?"),fd:s("BQ?"),pk:s("dI?"),RC:s("Cc?"),U5:s("fa?"),ZY:s("ae?"),eS:s("P4?"),Mm:s("kg?"),ZH:s("rH?"),gx:s("kh?"),lF:s("dt?"),C6:s("afy?"),ET:s("oR?"),Pr:s("oS?"),SC:s("kl?"),i4:s("rY?"),mh:s("fA?"),kc:s("v<@>?"),wh:s("v?"),y6:s("j?"),DZ:s("i0?"),nA:s("aJ?"),Xy:s("aJ<@,@>?"),f9:s("aJ>?"),J1:s("aJ?"),iD:s("bd?"),ka:s("tm?"),WV:s("d0?"),X:s("I?"),Ff:s("aiO?"),dJ:s("kq?"),Zr:s("aiQ?"),KX:s("ed?"),uR:s("ks?"),xO:s("pj?"),CY:s("DV?"),Cp:s("DW?"),p9:s("DX?"),pA:s("DY?"),ev:s("DZ?"),Gr:s("E_?"),Ll:s("E0?"),mc:s("dJ?"),wb:s("E2?"),tM:s("tB?"),zQ:s("tO?"),aA:s("H?"),CA:s("tT?"),c_:s("bi?"),ym:s("nn?"),IT:s("dL?"),oV:s("np?"),O0:s("u1?"),_N:s("xL?"),Ef:s("cP?"),Zi:s("cs?"),TZ:s("ug?"),pg:s("i8?"),tW:s("G?"),MR:s("hx?"),lE:s("fk?"),ob:s("f?"),aE:s("y8?"),f3:s("ic?"),p8:s("p?"),Dh:s("m0?"),Si:s("fG?"),qf:s("UT?"),zV:s("m3?"),ir:s("ar?"),nc:s("eV?"),DX:s("kK?"),Xk:s("h1?"),Ej:s("nS?"),av:s("IO?"),Kp:s("qf?"),gW:s("qg?"),IA:s("eI?"),JI:s("JY<@>?"),X7:s("F?"),PM:s("z?"),Nw:s("~()?"),Jy:s("cg"),H:s("~"),M:s("~()"),CF:s("~(I,dw?)"),Vu:s("~(b1)"),Su:s("~(oG)"),ph:s("~(v)"),lO:s("~(I)"),hK:s("~(I,dw)"),Ld:s("~(bg)"),iS:s("~(kv)"),HT:s("~(I?)")}})();(function constants(){var s=hunkHelpers.makeConstList +B.NE=A.oM.prototype +B.Oj=J.wz.prototype +B.b=J.q.prototype +B.cx=J.CJ.prototype +B.f=J.wB.prototype +B.c=J.oV.prototype +B.d=J.lr.prototype +B.Or=J.ls.prototype +B.Os=J.e.prototype +B.vD=A.Dl.prototype +B.f_=A.Dm.prototype +B.f0=A.Dn.prototype +B.f1=A.Dp.prototype +B.U7=A.Dr.prototype +B.l4=A.Ds.prototype +B.O=A.tt.prototype +B.zh=J.RD.prototype +B.mc=J.m4.prototype +B.a79=new A.a6c(0,"unknown") +B.aL=new A.jY(1,0,0,1,0,0,1) +B.mF=new A.hJ(0,1) +B.mG=new A.hJ(0,-1) +B.mH=new A.hJ(1,0) +B.fH=new A.hJ(-1,0) +B.bM=new A.hJ(-1,-1) +B.ah=new A.e8(0,0) +B.bv=new A.e8(0,1) +B.bw=new A.e8(0,-1) +B.aV=new A.e8(1,0) +B.BO=new A.e8(1,1) +B.j3=new A.e8(1,-1) +B.aM=new A.e8(-1,0) +B.dt=new A.e8(-1,-1) +B.mI=new A.A4(null) +B.BP=new A.LH(0,"normal") +B.BQ=new A.LH(1,"preserve") +B.K=new A.l3(0,"dismissed") +B.aW=new A.l3(1,"forward") +B.aX=new A.l3(2,"reverse") +B.a7=new A.l3(3,"completed") +B.BR=new A.vj(null,null,null,null,null,null,null,null,null,null,null,null,null,null,null) +B.mJ=new A.Al(0,"exit") +B.mK=new A.Al(1,"cancel") +B.e5=new A.l5(0,"detached") +B.fI=new A.l5(1,"resumed") +B.j4=new A.l5(2,"inactive") +B.j5=new A.l5(3,"hidden") +B.fJ=new A.l5(4,"paused") +B.BS=new A.iv(null,"","") +B.BT=new A.LN(!1,127) +B.BU=new A.LO(127) +B.a5B=new A.GX(null) +B.BV=new A.cA(1.6,B.a5B,null) +B.j6=new A.An(0,"polite") +B.j7=new A.An(1,"assertive") +B.hA=A.a(s([]),t.s) +B.m=new A.G4(1,"downstream") +B.m1=new A.hB(-1,-1,B.m,!1,-1,-1) +B.c2=new A.ce(-1,-1) +B.Zp=new A.dF("",B.m1,B.c2) +B.BW=new A.a6J(!1,"",B.hA,B.Zp,null) +B.a8=new A.vl(0,"up") +B.du=new A.vl(1,"right") +B.a1=new A.vl(2,"down") +B.cm=new A.vl(3,"left") +B.j8=new A.vm(0,"left") +B.dv=new A.vm(1,"top") +B.j9=new A.vm(2,"right") +B.aY=new A.vm(3,"bottom") +B.Xs=new A.bw(!1,A.a5E(),22,null) +B.J=new A.br(16,null,B.Xs,!0) +B.Xu=new A.bw(!0,A.a5E(),30,null) +B.e6=new A.br(16,null,B.Xu,!0) +B.Bd=new A.bW("count",null,null,null,null,null,null) +B.A5=new A.bw(!1,A.a5E(),0,null) +B.BY=new A.br(16,B.Bd,B.A5,!0) +B.BX=new A.br(24,B.Bd,B.A5,!0) +B.ci=new A.kD(0,"left") +B.a3G=new A.bW("Wall clock",null,null,B.ci,null,null,null) +B.Xt=new A.bw(!0,A.a5E(),0,null) +B.BZ=new A.br(24,B.a3G,B.Xt,!0) +B.aI=new A.LX(0,"horizontal") +B.b2=new A.LX(1,"vertical") +B.C_=new A.M1(null) +B.C0=new A.M_(B.C_,null,null,null) +B.C1=new A.Au(null,null,null,null,null,null,null,null) +B.k=new A.m(4278190080) +B.Mi=new A.f9(B.k,null,2,null) +B.aN=new A.vn(!1,B.Mi,A.b6U(),!0) +B.mL=new A.vo(2,"center") +B.C2=new A.vo(3,"spaceEvenly") +B.C3=new A.vo(4,"spaceAround") +B.mM=new A.vo(5,"spaceBetween") +B.C4=new A.qI(null) +B.C5=new A.qK(null) +B.bP=new A.m(4285406207) +B.E=new A.m(4283491583) +B.l=new A.m(4280391411) +B.C6=new A.qL(null) +B.aC=new A.apb() +B.mN=new A.om("flutter/accessibility",B.aC,t.Al) +B.cP=new A.ag3() +B.C7=new A.om("flutter/keyevent",B.cP,t.Al) +B.jk=new A.apo() +B.C8=new A.om("flutter/lifecycle",B.jk,A.a6("om")) +B.C9=new A.om("flutter/system",B.cP,t.Al) +B.hj=new A.wi(2,"previous") +B.Ca=new A.qO(null,B.hj,0,0) +B.mO=new A.cB(12,"plus") +B.ja=new A.cB(13,"modulate") +B.mP=new A.cB(20,"hardLight") +B.mQ=new A.cB(24,"multiply") +B.jb=new A.cB(26,"saturation") +B.bN=new A.cB(3,"srcOver") +B.fL=new A.eM(3,"srcOver") +B.jc=new A.cB(5,"srcIn") +B.jd=new A.cB(6,"dstIn") +B.cn=new A.a7O(0,"normal") +B.cH=new A.aC(16,16) +B.w=new A.aC(0,0) +B.CL=new A.qQ(B.cH,B.w,B.cH,B.w) +B.CM=new A.qQ(B.w,B.cH,B.w,B.cH) +B.H=new A.cl(B.w,B.w,B.w,B.w) +B.i9=new A.aC(6,6) +B.mR=new A.cl(B.i9,B.i9,B.w,B.w) +B.f9=new A.aC(4,4) +B.je=new A.cl(B.f9,B.f9,B.f9,B.f9) +B.mS=new A.cl(B.w,B.w,B.i9,B.i9) +B.ia=new A.aC(7,7) +B.CN=new A.cl(B.ia,B.ia,B.ia,B.ia) +B.d9=new A.aC(8,8) +B.e7=new A.cl(B.d9,B.d9,B.d9,B.d9) +B.i5=new A.aC(22,22) +B.CQ=new A.cl(B.i5,B.i5,B.i5,B.i5) +B.i7=new A.aC(40,40) +B.CR=new A.cl(B.i7,B.i7,B.i7,B.i7) +B.i8=new A.aC(60,50) +B.CS=new A.cl(B.i8,B.i8,B.i8,B.i8) +B.Ix=new A.m(4293454056) +B.y=new A.Mn(1,"solid") +B.CU=new A.b_(B.Ix,1,B.y,-1) +B.aB=new A.Mn(0,"none") +B.r=new A.b_(B.k,0,B.aB,-1) +B.i=new A.m(4294967295) +B.CV=new A.b_(B.i,0,B.y,-1) +B.fM=new A.b_(B.i,6,B.y,-1) +B.n=new A.m(0) +B.CX=new A.b_(B.n,0,B.y,-1) +B.bx=new A.b_(B.n,1,B.y,-1) +B.CW=new A.b_(B.n,2,B.y,-1) +B.u=new A.b_(B.k,0,B.y,-1) +B.CZ=new A.d2(B.r,B.r,B.r,B.r) +B.EQ=new A.m(1291845632) +B.CY=new A.b_(B.EQ,0,B.y,-1) +B.mU=new A.d2(B.r,B.r,B.CY,B.r) +B.ee=new A.m(2332033023) +B.mT=new A.b_(B.ee,1,B.y,-1) +B.D_=new A.d2(B.mT,B.bx,B.bx,B.mT) +B.D0=new A.AI(null,null,null,null,null,null,null) +B.D1=new A.AJ(null,null,null,null,null,null,null,null,null,null,null,null,null,null) +B.D2=new A.AK(null,null,null,null,null,null,null,null,null,null,null,null,null) +B.Wy=new A.Tg(0,"normal") +B.ll=new A.RZ(null) +B.D3=new A.AL(B.Wy,B.ll) +B.zE=new A.Tg(1,"fast") +B.D4=new A.AL(B.zE,B.ll) +B.D5=new A.az(40,40,40,40) +B.D6=new A.az(56,56,56,56) +B.D7=new A.az(96,96,96,96) +B.mV=new A.az(1/0,1/0,1/0,1/0) +B.D8=new A.az(0,1/0,56,56) +B.cN=new A.az(0,1/0,0,1/0) +B.D9=new A.az(50,1/0,0,1/0) +B.Da=new A.az(36,1/0,36,1/0) +B.EO=new A.m(1006632960) +B.UB=new A.k(0,4) +B.Dh=new A.ep(0.5,B.cn,B.EO,B.UB,10) +B.R5=A.a(s([B.Dh]),t.sq) +B.aO=new A.Mu(0,"rectangle") +B.Db=new A.d3(null,null,null,B.e7,B.R5,null,B.aO) +B.nu=new A.m(4279968569) +B.Dc=new A.d3(B.nu,null,null,B.e7,null,null,B.aO) +B.Dd=new A.Mq(1,"contain") +B.De=new A.Mq(6,"scaleDown") +B.e8=new A.Mr(0,"tight") +B.mW=new A.Mr(5,"strut") +B.dw=new A.Mu(1,"circle") +B.cO=new A.a7T(0,"tight") +B.ao=new A.vr(0,"dark") +B.ad=new A.vr(1,"light") +B.co=new A.AO(0,"blink") +B.W=new A.AO(1,"webkit") +B.bO=new A.AO(2,"firefox") +B.Di=new A.AP(null,null,null,null,null,null,null,null,null) +B.Dj=new A.a86(0,"normal") +B.Eq=new A.HP(A.a6("HP>")) +B.Dk=new A.vt(B.Eq) +B.e9=new A.mY(A.aR3(),t.Gb) +B.Dl=new A.mY(A.aR3(),A.a6("mY")) +B.mX=new A.mY(A.b71(),t.Gb) +B.Dm=new A.a6d() +B.by=new A.LM() +B.a7a=new A.Mf() +B.Do=new A.a7t() +B.mY=new A.Me() +B.mZ=new A.a80() +B.Dp=new A.MQ() +B.Dq=new A.a9c() +B.Dr=new A.MX() +B.Ds=new A.aac() +B.Dt=new A.NE() +B.fN=new A.NF(A.a6("NF<0&>")) +B.Du=new A.NG() +B.Dv=new A.NK(A.a6("NK<@>")) +B.Dw=new A.NL() +B.B=new A.Bw() +B.Dx=new A.aaT() +B.Dy=new A.ab7() +B.Dz=new A.ac0() +B.DA=new A.hj(A.a6("hj")) +B.DC=new A.hj(A.a6("hj")) +B.DB=new A.hj(A.a6("hj")) +B.n2=new A.Oa(A.a6("Oa<0&>")) +B.jg=new A.Od() +B.av=new A.Od() +B.DD=new A.act() +B.DE=new A.C0() +B.DF=new A.C3() +B.jh=new A.OQ() +B.a7b=new A.P2() +B.DG=new A.ae6() +B.DH=new A.aet() +B.Nk=new A.acQ(1,"auto") +B.DI=new A.Pz() +B.ac=new A.ag2() +B.b3=new A.ag4() +B.n3=function getTagFallback(o) { + var s = Object.prototype.toString.call(o); + return s.substring(8, s.length - 1); +} +B.DJ=function() { + var toStringFunction = Object.prototype.toString; + function getTag(o) { + var s = toStringFunction.call(o); + return s.substring(8, s.length - 1); + } + function getUnknownTag(object, tag) { + if (/^HTML[A-Z].*Element$/.test(tag)) { + var name = toStringFunction.call(object); + if (name == "[object Object]") return null; + return "HTMLElement"; + } + } + function getUnknownTagGenericBrowser(object, tag) { + if (self.HTMLElement && object instanceof HTMLElement) return "HTMLElement"; + return getUnknownTag(object, tag); + } + function prototypeForTag(tag) { + if (typeof window == "undefined") return null; + if (typeof window[tag] == "undefined") return null; + var constructor = window[tag]; + if (typeof constructor != "function") return null; + return constructor.prototype; + } + function discriminator(tag) { return null; } + var isBrowser = typeof navigator == "object"; + return { + getTag: getTag, + getUnknownTag: isBrowser ? getUnknownTagGenericBrowser : getUnknownTag, + prototypeForTag: prototypeForTag, + discriminator: discriminator }; +} +B.DO=function(getTagFallback) { + return function(hooks) { + if (typeof navigator != "object") return hooks; + var ua = navigator.userAgent; + if (ua.indexOf("DumpRenderTree") >= 0) return hooks; + if (ua.indexOf("Chrome") >= 0) { + function confirm(p) { + return typeof window == "object" && window[p] && window[p].name == p; + } + if (confirm("Window") && confirm("HTMLElement")) return hooks; + } + hooks.getTag = getTagFallback; + }; +} +B.DK=function(hooks) { + if (typeof dartExperimentalFixupGetTag != "function") return hooks; + hooks.getTag = dartExperimentalFixupGetTag(hooks.getTag); +} +B.DL=function(hooks) { + var getTag = hooks.getTag; + var prototypeForTag = hooks.prototypeForTag; + function getTagFixed(o) { + var tag = getTag(o); + if (tag == "Document") { + if (!!o.xmlVersion) return "!Document"; + return "!HTMLDocument"; + } + return tag; + } + function prototypeForTagFixed(tag) { + if (tag == "Document") return null; + return prototypeForTag(tag); + } + hooks.getTag = getTagFixed; + hooks.prototypeForTag = prototypeForTagFixed; +} +B.DN=function(hooks) { + var userAgent = typeof navigator == "object" ? navigator.userAgent : ""; + if (userAgent.indexOf("Firefox") == -1) return hooks; + var getTag = hooks.getTag; + var quickMap = { + "BeforeUnloadEvent": "Event", + "DataTransfer": "Clipboard", + "GeoGeolocation": "Geolocation", + "Location": "!Location", + "WorkerMessageEvent": "MessageEvent", + "XMLDocument": "!Document"}; + function getTagFirefox(o) { + var tag = getTag(o); + return quickMap[tag] || tag; + } + hooks.getTag = getTagFirefox; +} +B.DM=function(hooks) { + var userAgent = typeof navigator == "object" ? navigator.userAgent : ""; + if (userAgent.indexOf("Trident/") == -1) return hooks; + var getTag = hooks.getTag; + var quickMap = { + "BeforeUnloadEvent": "Event", + "DataTransfer": "Clipboard", + "HTMLDDElement": "HTMLElement", + "HTMLDTElement": "HTMLElement", + "HTMLPhraseElement": "HTMLElement", + "Position": "Geoposition" + }; + function getTagIE(o) { + var tag = getTag(o); + var newTag = quickMap[tag]; + if (newTag) return newTag; + if (tag == "Object") { + if (window.DataView && (o instanceof window.DataView)) return "DataView"; + } + return tag; + } + function prototypeForTagIE(tag) { + var constructor = window[tag]; + if (constructor == null) return null; + return constructor.prototype; + } + hooks.getTag = getTagIE; + hooks.prototypeForTag = prototypeForTagIE; +} +B.n4=function(hooks) { return hooks; } + +B.c9=new A.agb() +B.bz=new A.PK() +B.DP=new A.ahv() +B.DQ=new A.Qz() +B.DR=new A.aiE() +B.DS=new A.aiG() +B.n6=new A.aiI() +B.DT=new A.aiL() +B.ji=new A.I() +B.DU=new A.QU() +B.ba=new A.eh(0,"android") +B.au=new A.eh(2,"iOS") +B.c1=new A.eh(4,"macOS") +B.ng=new A.Vz() +B.n0=new A.Nq() +B.hM=new A.bz([B.ba,B.ng,B.au,B.n0,B.c1,B.n0],A.a6("bz")) +B.DV=new A.QV() +B.DW=new A.Ra() +B.jj=new A.DO() +B.ak=new A.jz(4,"keyboard") +B.n7=new A.pk() +B.DX=new A.aji() +B.a7c=new A.ak0() +B.DY=new A.ak6() +B.n9=new A.pw() +B.E_=new A.amn() +B.E0=new A.amo() +B.E1=new A.amp() +B.E2=new A.amq() +B.E3=new A.ani() +B.E4=new A.Te() +B.E5=new A.anK() +B.na=new A.nt() +B.E6=new A.aoh() +B.a=new A.aoi() +B.E7=new A.aoW() +B.cp=new A.apa() +B.dx=new A.ape() +B.E8=new A.Uk() +B.E9=new A.aqi() +B.Ea=new A.aqo() +B.Eb=new A.aqp() +B.Ec=new A.aqq() +B.Ed=new A.aqu() +B.Ee=new A.aqw() +B.Ef=new A.aqx() +B.Eg=new A.aqy() +B.Eh=new A.UJ() +B.nb=new A.pR() +B.nc=new A.pT() +B.Ei=new A.arL() +B.a2=new A.V7() +B.ca=new A.V8() +B.Ej=new A.arT() +B.dy=new A.arW() +B.F=new A.w(0,0,0,0) +B.fx=new A.Vh(0,0,0,0) +B.Qw=A.a(s([]),A.a6("q")) +B.nd=new A.Vg() +B.bG={} +B.d5=new A.bs(B.bG,[],t.li) +B.a7d=new A.as2() +B.ne=new A.Vn() +B.Uh={amp:0,apos:1,gt:2,lt:3,quot:4} +B.Tk=new A.bs(B.Uh,["&","'",">","<",'"'],t.li) +B.nf=new A.Vr() +B.ea=new A.VH() +B.cQ=new A.VI() +B.Ek=new A.Hi(A.a6("Hi")) +B.El=new A.Xd() +B.eb=new A.Xr() +B.Em=new A.auN() +B.En=new A.auQ() +B.Eo=new A.auS() +B.Ep=new A.auT() +B.a7e=new A.Xv() +B.aP=new A.Xy() +B.fP=new A.av2() +B.jl=new A.XZ() +B.c0=new A.jH("click") +B.bK=new A.jH("basic") +B.ec=new A.Y_() +B.jm=new A.av6() +B.Er=new A.awn() +B.Es=new A.awo() +B.aw=new A.awq() +B.ae=new A.Ih() +B.Et=new A.ZN() +B.bl=new A.ayl() +B.nh=new A.azF() +B.ai=new A.a1q() +B.Eu=new A.a1u() +B.Ev=new A.aA7() +B.Ew=new A.a22() +B.Ex=new A.a2F() +B.Ey=new A.a4a() +B.ni=new A.a8b(0,"pixel") +B.EC=new A.AR(null,null,null,null,null,null,null) +B.jn=new A.hM(0,"line") +B.jo=new A.hM(1,"bar") +B.jp=new A.hM(2,"pie") +B.jq=new A.hM(3,"scatter") +B.jr=new A.hM(4,"radar") +B.ED=new A.vx(null,null,null,null,null,null,null,null,null) +B.EE=new A.AV(null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null) +B.nj=new A.er(0,B.r) +B.a7w=new A.asC(0,"material") +B.EF=new A.AW(null) +B.EG=new A.N_(B.ll) +B.WM=new A.Fj(2,"clear") +B.js=new A.B2(B.WM) +B.EH=new A.N1(0,"difference") +B.cr=new A.N1(1,"intersect") +B.o=new A.vC(0,"none") +B.a9=new A.vC(1,"hardEdge") +B.dz=new A.vC(2,"antiAlias") +B.dA=new A.vC(3,"antiAliasWithSaveLayer") +B.nk=new A.vG(0,"pasteable") +B.jt=new A.vG(1,"unknown") +B.Vk=new A.x5(3,"close") +B.fQ=new A.B7(B.Vk) +B.jG=new A.Y(4294967295) +B.EK=new A.mC(!1,B.jG) +B.EL=new A.mC(!1,null) +B.fR=new A.mC(!0,null) +B.jB=new A.m(4284960932) +B.nO=new A.m(4293582335) +B.FB=new A.m(4280352861) +B.Gp=new A.m(4284636017) +B.nN=new A.m(4293451512) +B.Fy=new A.m(4280097067) +B.GM=new A.m(4286403168) +B.nS=new A.m(4294957284) +B.FM=new A.m(4281405725) +B.HD=new A.m(4289930782) +B.nP=new A.m(4294565596) +B.FZ=new A.m(4282453515) +B.nT=new A.m(4294966270) +B.fW=new A.m(4280032031) +B.Iw=new A.m(4293386476) +B.jA=new A.m(4282991951) +B.GG=new A.m(4286149758) +B.nJ=new A.m(4291478736) +B.nx=new A.m(4281413683) +B.J0=new A.m(4294242292) +B.jD=new A.m(4291869951) +B.EM=new A.vI(B.ad,B.jB,B.i,B.nO,B.FB,B.Gp,B.i,B.nN,B.Fy,B.GM,B.i,B.nS,B.FM,B.HD,B.i,B.nP,B.FZ,B.nT,B.fW,B.nT,B.fW,B.Iw,B.jA,B.GG,B.nJ,B.k,B.k,B.nx,B.J0,B.jD,B.jB) +B.FS=new A.m(4281867890) +B.Ge=new A.m(4283381643) +B.HX=new A.m(4291609308) +B.FP=new A.m(4281544001) +B.G9=new A.m(4283057240) +B.IL=new A.m(4293900488) +B.G7=new A.m(4282983730) +B.Gq=new A.m(4284693320) +B.IV=new A.m(4294097077) +B.Go=new A.m(4284486672) +B.H5=new A.m(4287372568) +B.jF=new A.m(4293321189) +B.Hc=new A.m(4287860633) +B.EN=new A.vI(B.ao,B.jD,B.FS,B.Ge,B.nO,B.HX,B.FP,B.G9,B.nN,B.IL,B.G7,B.Gq,B.nS,B.IV,B.Go,B.H5,B.nP,B.fW,B.jF,B.fW,B.jF,B.jA,B.nJ,B.Hc,B.jA,B.k,B.k,B.jF,B.nx,B.jB,B.jD) +B.nl=new A.m(1087163596) +B.ER=new A.m(134217728) +B.ES=new A.m(144613022) +B.ET=new A.m(1627389952) +B.cR=new A.m(1660944383) +B.nn=new A.m(16777215) +B.ju=new A.m(1723645116) +B.EV=new A.m(1724434632) +B.EW=new A.m(2155905152) +B.R=new A.m(2315255808) +B.no=new A.m(2583691263) +B.M=new A.m(3019898879) +B.S=new A.m(3707764736) +B.EZ=new A.m(402653184) +B.F_=new A.m(4039164096) +B.cS=new A.Y(4278190080) +B.nt=new A.m(4279858898) +B.jx=new A.m(4280191205) +B.nv=new A.m(4280361249) +B.fY=new A.m(4280823365) +B.jy=new A.m(4281348144) +B.jz=new A.m(4281811789) +B.aq=new A.m(4282122057) +B.cb=new A.m(4282532418) +B.nz=new A.m(4283215696) +B.nA=new A.m(4284513675) +B.h_=new A.m(4284572001) +B.nB=new A.m(4284809178) +B.jC=new A.m(4287679225) +B.nG=new A.m(4288585374) +B.nI=new A.m(4290502395) +B.HY=new A.m(4291611852) +B.jE=new A.m(4292030255) +B.nL=new A.m(4292927712) +B.nM=new A.m(4293128957) +B.bQ=new A.m(4293394516) +B.h0=new A.m(4294309365) +B.nQ=new A.m(4294638330) +B.bm=new A.m(4294916850) +B.cc=new A.m(4294928443) +B.aQ=new A.m(4294951680) +B.Kj=new A.m(436207616) +B.Kk=new A.m(520093696) +B.Kl=new A.m(536870911) +B.vm=new A.wP(1,"end") +B.a3=new A.Q9(1,"max") +B.cT=new A.r7(0,"start") +B.cL=new A.Vc(1,"down") +B.Oe=new A.kj(B.l,"First",!0,16,null,null) +B.fp=new A.di(null,4,null,null) +B.Oh=new A.kj(B.aQ,"Second",!0,16,null,null) +B.Og=new A.kj(B.bP,"Third",!0,16,null,null) +B.Of=new A.kj(B.aq,"Fourth",!0,16,null,null) +B.iw=new A.di(null,18,null,null) +B.Pf=A.a(s([B.Oe,B.fp,B.Oh,B.fp,B.Og,B.fp,B.Of,B.iw]),t.p) +B.Kn=new A.B9(B.b2,B.vm,B.a3,B.cT,null,B.cL,null,B.Pf,null) +B.nX=new A.Bb(0,"none") +B.Ko=new A.Bb(1,"waiting") +B.h1=new A.Bb(3,"done") +B.Kp=new A.r4(!1) +B.Kq=new A.r4(!0) +B.nY=new A.ld(0,"cut") +B.nZ=new A.ld(1,"copy") +B.o_=new A.ld(2,"paste") +B.o0=new A.ld(3,"selectAll") +B.Kr=new A.ld(5,"lookUp") +B.Ks=new A.ld(6,"searchWeb") +B.Kt=new A.ld(7,"share") +B.Ku=new A.ld(8,"liveTextInput") +B.o1=new A.le(!1) +B.o2=new A.le(!0) +B.Kv=new A.r7(1,"end") +B.T=new A.r7(2,"center") +B.dC=new A.r7(3,"stretch") +B.jH=new A.r7(4,"baseline") +B.o3=new A.et(0.18,1,0.04,1) +B.Kw=new A.et(0.215,0.61,0.355,1) +B.o4=new A.et(0.2,0,0,1) +B.o5=new A.et(0.31,0,0.56,1) +B.Kx=new A.et(0.05,0,0.133333,0.06) +B.bA=new A.et(0.25,0.1,0.25,1) +B.cs=new A.et(0.42,0,1,1) +B.jI=new A.et(0.67,0.03,0.65,0.09) +B.o6=new A.et(0.175,0.885,0.32,1.275) +B.Ky=new A.et(0.075,0.82,0.165,1) +B.Kz=new A.et(0.208333,0.82,0.25,1) +B.ar=new A.et(0.4,0,0.2,1) +B.jJ=new A.et(0.35,0.91,0.33,0.97) +B.dD=new A.et(0,0,0.58,1) +B.jK=new A.et(0.42,0,0.58,1) +B.ef=new A.m(268435456) +B.fT=new A.m(285212671) +B.KA=new A.dH(B.ef,null,null,B.ef,B.fT,B.ef,B.fT,B.ef,B.fT,B.ef,B.fT,0) +B.ek=new A.m(4290295992) +B.fZ=new A.m(4284177243) +B.KB=new A.dH(B.ek,null,null,B.ek,B.fZ,B.ek,B.fZ,B.ek,B.fZ,B.ek,B.fZ,0) +B.el=new A.m(4294375158) +B.fX=new A.m(4280427042) +B.KC=new A.dH(B.el,null,null,B.el,B.fX,B.el,B.fX,B.el,B.fX,B.el,B.fX,0) +B.ej=new A.m(4288256409) +B.ei=new A.m(4285887861) +B.h2=new A.dH(B.ej,"inactiveGray",null,B.ej,B.ei,B.ej,B.ei,B.ej,B.ei,B.ej,B.ei,0) +B.h3=new A.dH(B.k,null,null,B.k,B.i,B.k,B.i,B.k,B.i,B.k,B.i,0) +B.eg=new A.m(3003121663) +B.fU=new A.m(2989502512) +B.KD=new A.dH(B.eg,null,null,B.eg,B.fU,B.eg,B.fU,B.eg,B.fU,B.eg,B.fU,0) +B.dB=new A.m(4292269782) +B.KE=new A.dH(B.dB,null,null,B.dB,B.cb,B.dB,B.cb,B.dB,B.cb,B.dB,B.cb,0) +B.dE=new A.dH(B.k,"label",null,B.k,B.i,B.k,B.i,B.k,B.i,B.k,B.i,0) +B.jv=new A.m(343176320) +B.nW=new A.m(762738304) +B.nV=new A.m(678720640) +B.nm=new A.m(1115059840) +B.jL=new A.dH(B.jv,"quaternarySystemFill",null,B.jv,B.nW,B.nV,B.nm,B.jv,B.nW,B.nV,B.nm,0) +B.ed=new A.m(1493172224) +B.fS=new A.m(2164260863) +B.KG=new A.dH(B.ed,null,null,B.ed,B.fS,B.ed,B.fS,B.ed,B.fS,B.ed,B.fS,0) +B.Ba=new A.bW("Page Not Found",null,null,null,null,null,null) +B.mr=new A.I0(null) +B.KH=new A.Bh(null) +B.jw=new A.m(4278221567) +B.ns=new A.m(4278879487) +B.nq=new A.m(4278206685) +B.ny=new A.m(4282424575) +B.o7=new A.dH(B.jw,"systemBlue",null,B.jw,B.ns,B.nq,B.ny,B.jw,B.ns,B.nq,B.ny,0) +B.Fx=new A.m(4280032286) +B.FD=new A.m(4280558630) +B.o8=new A.dH(B.i,"systemBackground",null,B.i,B.k,B.i,B.k,B.i,B.Fx,B.i,B.FD,0) +B.eh=new A.m(4042914297) +B.fV=new A.m(4028439837) +B.KF=new A.dH(B.eh,null,null,B.eh,B.fV,B.eh,B.fV,B.eh,B.fV,B.eh,B.fV,0) +B.a5Q=new A.Xj(B.dE,B.h2) +B.mo=new A.Xl(null,B.o7,B.o8,B.KF,B.o8,!1,B.a5Q) +B.ct=new A.vS(B.mo,null,null,null,null,null,null,null) +B.KI=new A.aa8(1,"latency") +B.KJ=new A.Bp(null,null,null,null,null,null,null,null,null,null,null,null,null,null) +B.KK=new A.Bq(null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null) +B.o9=new A.rb(0,"uninitialized") +B.KL=new A.rb(1,"initializingServices") +B.oa=new A.rb(2,"initializedServices") +B.KM=new A.rb(3,"initializingUi") +B.KN=new A.rb(4,"initialized") +B.KO=new A.aab(1,"traversalOrder") +B.KP=new A.Nz(!0,null) +B.cu=new A.NC(0,"background") +B.ob=new A.NC(1,"foreground") +B.jM=new A.ND(!1) +B.a6O=new A.a_k(null) +B.em=new A.oy(null,null,null,B.a6O,null) +B.B4=new A.p(!0,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null) +B.aK=new A.Ge(0,"clip") +B.a_=new A.ar1(0,"parent") +B.a6P=new A.a_m(null) +B.en=new A.vT(B.B4,null,!0,B.aK,null,B.a_,null,B.a6P,null) +B.jN=new A.rd(!1) +B.jO=new A.rd(!0) +B.jP=new A.re(!1) +B.jQ=new A.re(!0) +B.jR=new A.rf(!1) +B.jS=new A.rf(!0) +B.aR=new A.Bs(3,"info") +B.KQ=new A.Bs(5,"hint") +B.KR=new A.Bs(6,"summary") +B.a7f=new A.lf(1,"sparse") +B.KS=new A.lf(10,"shallow") +B.KT=new A.lf(11,"truncateChildren") +B.KU=new A.lf(5,"error") +B.KV=new A.lf(6,"whitespace") +B.jT=new A.lf(7,"flat") +B.jU=new A.lf(8,"singleLine") +B.bR=new A.lf(9,"errorProperty") +B.KW=new A.Bt(null,null,null,null,null,null,null,null,null,null) +B.KX=new A.vW(null,null,null,null,null) +B.KY=new A.NW(null) +B.oc=new A.O1(0,"down") +B.af=new A.O1(1,"start") +B.KZ=new A.ka(0,"path") +B.L_=new A.ka(2,"saveLayer") +B.L1=new A.ka(4,"clip") +B.L3=new A.ka(6,"text") +B.L4=new A.ka(7,"image") +B.L5=new A.ka(8,"pattern") +B.L6=new A.ka(9,"textPosition") +B.L2=new A.ka(5,"mask") +B.L7=new A.iC(null,B.L2,null,null,null,null) +B.L0=new A.ka(3,"restore") +B.eo=new A.iC(null,B.L0,null,null,null,null) +B.od=new A.O4(0,"start") +B.L8=new A.O4(1,"end") +B.L9=new A.O6(null) +B.La=new A.w_(null,null,null,null,null,null,null,null) +B.Lb=new A.BH(null,null,null) +B.z=new A.b1(0) +B.aD=new A.b1(1e5) +B.h4=new A.b1(1e6) +B.Lc=new A.b1(12e4) +B.Ld=new A.b1(12e5) +B.jV=new A.b1(125e3) +B.Le=new A.b1(14e4) +B.aj=new A.b1(15e4) +B.Lf=new A.b1(15e5) +B.Lg=new A.b1(16667) +B.oe=new A.b1(167e3) +B.Lh=new A.b1(18e4) +B.am=new A.b1(2e5) +B.jW=new A.b1(2e6) +B.Li=new A.b1(225e3) +B.Lj=new A.b1(246e3) +B.jX=new A.b1(25e4) +B.Lk=new A.b1(2961926e3) +B.bS=new A.b1(3e5) +B.Ll=new A.b1(3e6) +B.of=new A.b1(375e3) +B.og=new A.b1(4e4) +B.ep=new A.b1(4e5) +B.Lm=new A.b1(45e3) +B.eq=new A.b1(5e4) +B.cU=new A.b1(5e5) +B.dF=new A.b1(6e5) +B.oh=new A.b1(7e4) +B.h5=new A.b1(75e3) +B.Ln=new A.b1(-38e3) +B.Lp=new A.f8(6,0,2,0) +B.bB=new A.aG(0,0,0,0) +B.Lr=new A.aG(0,0,0,24) +B.Ls=new A.aG(0,0,22,20) +B.Lt=new A.aG(0,0,5,5) +B.Lu=new A.aG(0,0,6,0) +B.oi=new A.aG(0,16,0,0) +B.Lv=new A.aG(0,18,18,0) +B.Lw=new A.aG(0,2,0,2) +B.Lx=new A.aG(10,10,10,10) +B.Ly=new A.aG(10,10,18,4) +B.Lz=new A.aG(10,5,0,0) +B.LA=new A.aG(12,0,20,0) +B.LB=new A.aG(12,12,12,12) +B.LC=new A.aG(12,20,20,12) +B.LD=new A.aG(12,22,28,12) +B.oj=new A.aG(12,24,18,12) +B.LE=new A.aG(12,8,12,8) +B.LF=new A.aG(16,0,16,0) +B.er=new A.aG(16,16,16,16) +B.LG=new A.aG(16,18,16,18) +B.LH=new A.aG(16,4,16,4) +B.cv=new A.aG(16,8,16,8) +B.LI=new A.aG(20,0,20,3) +B.LJ=new A.aG(20,20,20,20) +B.LK=new A.aG(24,10,24,10) +B.ok=new A.aG(24,24,24,24) +B.LL=new A.aG(32,32,32,100) +B.LM=new A.aG(4,0,4,0) +B.jY=new A.aG(4,4,4,4) +B.a7g=new A.aG(4,4,4,5) +B.LN=new A.aG(64,14,64,14) +B.LO=new A.aG(6,0,16,0) +B.LP=new A.aG(6,4,6,4) +B.jZ=new A.aG(6,6,6,6) +B.ol=new A.aG(8,0,8,0) +B.LQ=new A.aG(8,2,8,5) +B.LR=new A.aG(8,4,8,4) +B.k_=new A.aG(8,8,8,8) +B.om=new A.aG(0.5,1,0.5,1) +B.LS=new A.BN(null) +B.LT=new A.BO(0,"noOpinion") +B.LU=new A.BO(1,"enabled") +B.h6=new A.BO(2,"disabled") +B.LV=new A.Oc(null) +B.a7h=new A.w4(0) +B.PB=A.a(s([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.2126,0.7152,0.0722,0,0]),t.n) +B.EJ=new A.Na(1,"matrix") +B.LW=new A.Oe(null,null,B.PB,B.EJ) +B.EI=new A.Na(0,"mode") +B.LX=new A.Oe(B.E,B.jc,null,B.EI) +B.k0=new A.ro(!1,!1,!1,!1) +B.k1=new A.ro(!1,!1,!1,!0) +B.on=new A.rp(!1,!1,!1,!1) +B.oo=new A.rp(!1,!1,!1,!0) +B.LY=new A.BU(null,null,null,null,null,null,null,null,null,null,null) +B.k2=new A.mK(!1,!1,!1,!1) +B.k3=new A.mK(!1,!1,!1,!0) +B.es=new A.mK(!0,!1,!1,!1) +B.et=new A.mK(!0,!1,!1,!0) +B.op=new A.mL(!1,!1,!1,!1) +B.oq=new A.mL(!1,!1,!1,!0) +B.h7=new A.mL(!0,!1,!1,!1) +B.h8=new A.mL(!0,!1,!1,!0) +B.or=new A.iD(!1,!1,!1,!1) +B.os=new A.iD(!1,!1,!1,!0) +B.LZ=new A.iD(!1,!1,!0,!1) +B.M_=new A.iD(!1,!1,!0,!0) +B.cV=new A.iD(!0,!1,!1,!1) +B.cW=new A.iD(!0,!1,!1,!0) +B.M0=new A.iD(!0,!1,!0,!1) +B.M1=new A.iD(!0,!1,!0,!0) +B.M2=new A.rr(!1,!1,!1,!1) +B.M3=new A.rr(!1,!1,!1,!0) +B.ot=new A.rs(!1,!0,!1,!1) +B.ou=new A.rs(!1,!0,!1,!0) +B.M4=new A.mM(!1,!1,!1,!1) +B.M5=new A.mM(!1,!1,!1,!0) +B.k4=new A.mM(!0,!1,!1,!1) +B.k5=new A.mM(!0,!1,!1,!0) +B.ov=new A.rt(!1,!0,!1,!1) +B.ow=new A.rt(!1,!0,!1,!0) +B.k6=new A.oD(!1,!1,!1,!1) +B.k7=new A.oD(!1,!1,!1,!0) +B.h9=new A.oD(!0,!1,!1,!1) +B.ha=new A.oD(!0,!1,!1,!0) +B.k8=new A.mN(!1,!1,!1,!1) +B.k9=new A.mN(!1,!1,!1,!0) +B.ox=new A.mN(!0,!1,!1,!1) +B.oy=new A.mN(!0,!1,!1,!0) +B.QB=A.a(s([]),t.rx) +B.kF=A.a(s([]),t.uM) +B.bd=new A.oE(B.QB,B.kF,!0) +B.hb=new A.Os(0,"center") +B.M6=new A.Os(2,"right") +B.M7=new A.ru(B.cS,null) +B.M8=new A.BW(null) +B.eu=new A.rv(0,"none") +B.hc=new A.rv(1,"low") +B.oz=new A.rv(2,"medium") +B.hd=new A.rv(3,"high") +B.Q=new A.G(0,0) +B.M9=new A.OA(B.Q,B.Q) +B.Ma=new A.OE(null) +B.b4=new A.BY(!1,!1,!1,!1) +B.Mb=new A.BY(!0,!0,!0,!0) +B.aZ=new A.iF(!1,A.v5(),A.aQV()) +B.oA=new A.iF(!0,A.v5(),A.aQV()) +B.Md=new A.ew(!0,!1,null,A.h6(),A.eJ(),!1,1,A.h6(),A.eJ()) +B.Mc=new A.ew(!0,!0,null,A.h6(),A.eJ(),!1,null,A.h6(),A.eJ()) +B.bT=new A.ew(!1,!0,null,A.h6(),A.eJ(),!0,null,A.h6(),A.eJ()) +B.a7i=new A.ew(!0,!0,null,A.h6(),A.eJ(),!0,null,A.h6(),A.eJ()) +B.Jx=new A.m(4294937216) +B.Jp=new A.m(4294922834) +B.Jn=new A.m(4294907716) +B.I7=new A.m(4292149248) +B.Tp=new A.bz([100,B.Jx,200,B.Jp,400,B.Jn,700,B.I7],t.o) +B.Ty=new A.Qd(B.Tp,4294922834) +B.Me=new A.f9(B.Ty,null,10,null) +B.ID=new A.m(4293718001) +B.I2=new A.m(4291811548) +B.Hx=new A.m(4289773253) +B.H9=new A.m(4287669422) +B.GE=new A.m(4286091420) +B.Gh=new A.m(4283723386) +B.G3=new A.m(4282735204) +B.FR=new A.m(4281812815) +B.FE=new A.m(4280693304) +B.T5=new A.bz([50,B.ID,100,B.I2,200,B.Hx,300,B.H9,400,B.GE,500,B.nA,600,B.Gh,700,B.G3,800,B.FR,900,B.FE],t.o) +B.bY=new A.dP(B.T5,4284513675) +B.pf=A.a(s([8,4]),t.t) +B.ka=new A.f9(B.bY,null,0.4,B.pf) +B.Mg=new A.f9(B.cc,null,2,null) +B.Mf=new A.f9(B.cc,null,3,null) +B.Ji=new A.m(4294763756) +B.J7=new A.m(4294491088) +B.IZ=new A.m(4294217649) +B.IN=new A.m(4293943954) +B.IC=new A.m(4293673082) +B.IA=new A.m(4293467747) +B.I9=new A.m(4292352864) +B.HR=new A.m(4290910299) +B.Hr=new A.m(4289533015) +B.H_=new A.m(4287106639) +B.SW=new A.bz([50,B.Ji,100,B.J7,200,B.IZ,300,B.IN,400,B.IC,500,B.IA,600,B.I9,700,B.HR,800,B.Hr,900,B.H_],t.o) +B.l2=new A.dP(B.SW,4293467747) +B.Mh=new A.f9(B.l2,null,2,null) +B.nU=new A.m(452984831) +B.oC=new A.f9(B.nU,null,1,null) +B.oB=new A.f9(B.nU,null,0.5,null) +B.EX=new A.m(301989887) +B.oD=new A.f9(B.EX,null,2,null) +B.oE=new A.f9(B.jz,null,1,null) +B.oF=new A.f9(B.M,null,1,B.pf) +B.aJ=new A.ad(0/0,0/0) +B.Xv=new A.bw(!0,A.a5E(),44,null) +B.fK=new A.br(16,null,B.Xv,!0) +B.kf=new A.df(!1,B.fK,B.e6,B.fK,B.e6) +B.a7j=new A.df(!0,B.fK,B.e6,B.fK,B.e6) +B.oP=new A.OO(0,"tight") +B.Ni=new A.OO(1,"loose") +B.Nj=new A.wa(null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null) +B.oQ=new A.C8(0,"Start") +B.kg=new A.C8(1,"Update") +B.kh=new A.C8(2,"End") +B.ki=new A.oG(0,"touch") +B.he=new A.oG(1,"traditional") +B.a7k=new A.ad5(0,"automatic") +B.bC=new A.OX(0,"normal") +B.hf=new A.OX(1,"italic") +B.Nl=new A.kd(0,"w100") +B.Nm=new A.kd(1,"w200") +B.Nn=new A.kd(2,"w300") +B.p=new A.iG(3) +B.kk=new A.kd(3,"w400") +B.a5=new A.iG(4) +B.No=new A.kd(4,"w500") +B.Np=new A.kd(5,"w600") +B.x=new A.iG(6) +B.oR=new A.kd(6,"w700") +B.Nq=new A.kd(7,"w800") +B.ev=new A.iG(8) +B.Nr=new A.kd(8,"w900") +B.oS=new A.fR("Invalid method call",null,null) +B.Ns=new A.fR("Expected envelope, got nothing",null,null) +B.bn=new A.fR("Message corrupted",null,null) +B.Nt=new A.fR("Invalid envelope",null,null) +B.oT=new A.wi(0,"ltr") +B.oU=new A.wi(1,"rtl") +B.km=new A.wi(3,"sandwich") +B.cd=new A.P1(0,"accepted") +B.an=new A.P1(1,"rejected") +B.oV=new A.rD(0,"pointerEvents") +B.cX=new A.rD(1,"browserGestures") +B.cw=new A.Ci(0,"ready") +B.hk=new A.Ci(1,"possible") +B.Nu=new A.Ci(2,"defunct") +B.kj=new A.iG(1) +B.Nv=new A.kf(B.kj,B.bC) +B.hh=new A.iG(2) +B.Nw=new A.kf(B.hh,B.bC) +B.Nx=new A.kf(B.p,B.bC) +B.Ny=new A.kf(B.a5,B.bC) +B.hi=new A.iG(5) +B.Nz=new A.kf(B.hi,B.bC) +B.NA=new A.kf(B.x,B.bC) +B.kl=new A.iG(7) +B.NB=new A.kf(B.kl,B.bC) +B.kn=new A.Cl(0,"objectBoundingBox") +B.NC=new A.Cl(1,"userSpaceOnUse") +B.oW=new A.Cl(2,"transformed") +B.oX=new A.P9(0,"forward") +B.oY=new A.P9(1,"reverse") +B.cY=new A.wq(0,"push") +B.cZ=new A.wq(1,"pop") +B.ce=new A.Cp(0,"deferToChild") +B.b_=new A.Cp(1,"opaque") +B.cf=new A.Cp(2,"translucent") +B.oZ=new A.Cq(0,"left") +B.ND=new A.Cq(1,"center") +B.p_=new A.Cq(2,"right") +B.NF=new A.rL(null) +B.p0=new A.ea(57490,"MaterialIcons",null,!0) +B.NI=new A.ea(57938,"MaterialIcons",null,!1) +B.NJ=new A.ea(57939,"MaterialIcons",null,!1) +B.p1=new A.ea(58332,"MaterialIcons",null,!1) +B.NL=new A.ea(58372,"MaterialIcons",null,!1) +B.NM=new A.ea(58492,"MaterialIcons",null,!1) +B.NN=new A.ea(58571,"MaterialIcons",null,!1) +B.NO=new A.ea(58644,"MaterialIcons",null,!1) +B.NQ=new A.ea(59087,"MaterialIcons",null,!1) +B.NR=new A.ea(59097,"MaterialIcons",null,!1) +B.NS=new A.ea(59107,"MaterialIcons",null,!1) +B.NT=new A.ea(60901,"MaterialIcons",null,!1) +B.NU=new A.dt(32,null,null,null,null,null,null,null) +B.NV=new A.dt(null,null,null,null,null,B.k,null,null) +B.ko=new A.dt(24,0,400,0,48,B.k,1,null) +B.NW=new A.dt(null,null,null,null,null,B.i,null,null) +B.NP=new A.ea(58727,"MaterialIcons",null,!1) +B.NX=new A.oN(B.NP,null,null,null,null) +B.NH=new A.ea(57718,"MaterialIcons",null,!1) +B.NY=new A.oN(B.NH,null,B.E,null,null) +B.NK=new A.ea(58083,"MaterialIcons",null,!1) +B.NZ=new A.oN(B.NK,null,null,null,null) +B.NG=new A.ea(57506,"MaterialIcons",null,!1) +B.O_=new A.oN(B.NG,null,B.i,null,null) +B.Oa=new A.wv(0,"repeat") +B.Ob=new A.wv(1,"repeatX") +B.Oc=new A.wv(2,"repeatY") +B.ew=new A.wv(3,"noRepeat") +B.Od=new A.Pu(!0,!0,B.d5) +B.ap=A.a(s([]),t.oU) +B.Oi=new A.mX("\ufffc",null,null,!0,!0,B.ap) +B.Ol=new A.hW(0,0.1,B.ae) +B.Ok=new A.hW(0.125,0.25,B.ae) +B.Om=new A.hW(0.6,1,B.ae) +B.p3=new A.hW(0.5,1,B.bA) +B.On=new A.hW(0.2075,0.4175,B.ae) +B.Op=new A.hW(0,0.5,B.ar) +B.Oo=new A.hW(0.5,1,B.ar) +B.Oq=new A.hW(0.0825,0.2075,B.ae) +B.p4=new A.CG(0,"grapheme") +B.p5=new A.CG(1,"word") +B.p6=new A.PE(null) +B.Ot=new A.PF(null) +B.Ou=new A.PH(0,"rawKeyData") +B.Ov=new A.PH(1,"keyDataThenRawKeyData") +B.bU=new A.CP(0,"down") +B.Ow=new A.hX(B.z,B.bU,0,0,null,!1) +B.ex=new A.oY(0,"handled") +B.ey=new A.oY(1,"ignored") +B.hl=new A.oY(2,"skipRemainingHandlers") +B.bo=new A.CP(1,"up") +B.Ox=new A.CP(2,"repeat") +B.hH=new A.j(4294967562) +B.Oy=new A.wE(B.hH,0,"numLock") +B.hI=new A.j(4294967564) +B.Oz=new A.wE(B.hI,1,"scrollLock") +B.eL=new A.j(4294967556) +B.OA=new A.wE(B.eL,2,"capsLock") +B.dG=new A.rV(0,"any") +B.cg=new A.rV(3,"all") +B.OB=new A.PL(!1,255) +B.OC=new A.PM(255) +B.OD=new A.agw(0,"platformDefault") +B.d_=new A.p2(0,"opportunity") +B.A=new A.p2(1,"prohibited") +B.cy=new A.p2(2,"mandatory") +B.cz=new A.p2(3,"endOfText") +B.kp=new A.bT(0,"CM") +B.ho=new A.bT(1,"BA") +B.d0=new A.bT(10,"PO") +B.ez=new A.bT(11,"OP") +B.eA=new A.bT(12,"CP") +B.hp=new A.bT(13,"IS") +B.eB=new A.bT(14,"HY") +B.kq=new A.bT(15,"SY") +B.cA=new A.bT(16,"NU") +B.kr=new A.bT(17,"CL") +B.ks=new A.bT(18,"GL") +B.p7=new A.bT(19,"BB") +B.eC=new A.bT(2,"LF") +B.bp=new A.bT(20,"HL") +B.hq=new A.bT(21,"JL") +B.eD=new A.bT(22,"JV") +B.eE=new A.bT(23,"JT") +B.kt=new A.bT(24,"NS") +B.ku=new A.bT(25,"ZW") +B.kv=new A.bT(26,"ZWJ") +B.kw=new A.bT(27,"B2") +B.p8=new A.bT(28,"IN") +B.kx=new A.bT(29,"WJ") +B.hr=new A.bT(3,"BK") +B.ky=new A.bT(30,"ID") +B.hs=new A.bT(31,"EB") +B.eF=new A.bT(32,"H2") +B.eG=new A.bT(33,"H3") +B.kz=new A.bT(34,"CB") +B.ht=new A.bT(35,"RI") +B.hu=new A.bT(36,"EM") +B.hv=new A.bT(4,"CR") +B.dH=new A.bT(5,"SP") +B.p9=new A.bT(6,"EX") +B.kA=new A.bT(7,"QU") +B.bq=new A.bT(8,"AL") +B.hw=new A.bT(9,"PR") +B.kB=new A.rZ(0,0,0,0,!1) +B.OE=new A.t0(null) +B.OF=new A.t1(null) +B.OG=new A.t_(null) +B.OH=new A.t2(null) +B.OI=new A.t5(null) +B.OJ=new A.t8(null) +B.as=new A.CX(0.5) +B.pb=new A.wI(B.nA,4,120,A.aIv()) +B.dI=new A.kn(B.pb,A.aEb(),10,A.zU(),!0,A.Lj(),A.Li(),!1,null,null,null) +B.pa=new A.kn(B.pb,A.aEb(),10,A.zU(),!0,A.Lj(),A.Li(),!0,null,null,null) +B.OK=new A.wI(B.l,4,120,A.aIv()) +B.OL=new A.n2(B.fN,A.a6("n2")) +B.hx=new A.n2(B.fN,A.a6("n2")) +B.OM=new A.aha(1,"drawer") +B.ON=new A.CZ(null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null) +B.Cb=new A.cB(0,"clear") +B.Cc=new A.cB(1,"src") +B.Cr=new A.cB(2,"dst") +B.CH=new A.cB(4,"dstOver") +B.CI=new A.cB(7,"srcOut") +B.CJ=new A.cB(8,"dstOut") +B.CK=new A.cB(9,"srcATop") +B.Cd=new A.cB(10,"dstATop") +B.Ce=new A.cB(11,"xor") +B.Cf=new A.cB(14,"screen") +B.Ch=new A.cB(15,"overlay") +B.Cj=new A.cB(16,"darken") +B.Cl=new A.cB(17,"lighten") +B.Cn=new A.cB(18,"colorDodge") +B.Cp=new A.cB(19,"colorBurn") +B.Ct=new A.cB(21,"softLight") +B.Cv=new A.cB(22,"difference") +B.Cx=new A.cB(23,"exclusion") +B.CA=new A.cB(25,"hue") +B.CD=new A.cB(27,"color") +B.CF=new A.cB(28,"luminosity") +B.OO=A.a(s([B.Cb,B.Cc,B.Cr,B.bN,B.CH,B.jc,B.jd,B.CI,B.CJ,B.CK,B.Cd,B.Ce,B.mO,B.ja,B.Cf,B.Ch,B.Cj,B.Cl,B.Cn,B.Cp,B.mP,B.Ct,B.Cv,B.Cx,B.mQ,B.CA,B.jb,B.CD,B.CF]),A.a6("q")) +B.OP=A.a(s([0,1]),t.n) +B.OQ=A.a(s([0,6,12,18]),t.t) +B.OR=A.a(s([192,193,194]),t.t) +B.Mj=new A.ad(0,4) +B.MQ=new A.ad(1,3.5) +B.MV=new A.ad(2,4.5) +B.Mv=new A.ad(3,1) +B.MA=new A.ad(4,4) +B.MD=new A.ad(5,6) +B.MO=new A.ad(6,6.5) +B.MJ=new A.ad(7,6) +B.oK=new A.ad(8,4) +B.ML=new A.ad(9,6) +B.Mm=new A.ad(10,6) +B.Mp=new A.ad(11,7) +B.pc=A.a(s([B.Mj,B.MQ,B.MV,B.Mv,B.MA,B.MD,B.MO,B.MJ,B.oK,B.ML,B.Mm,B.Mp]),t.A) +B.OS=A.a(s([239,191,189]),t.t) +B.V=new A.uw(0,"clamp") +B.fv=new A.uw(1,"repeated") +B.fw=new A.uw(2,"mirror") +B.dm=new A.uw(3,"decal") +B.pd=A.a(s([B.V,B.fv,B.fw,B.dm]),A.a6("q")) +B.oG=new A.ad(0,3) +B.Ng=new A.ad(2.6,2) +B.oN=new A.ad(4.9,5) +B.MX=new A.ad(6.8,3.1) +B.Nf=new A.ad(9.5,3) +B.Mo=new A.ad(11,4) +B.Pe=A.a(s([B.oG,B.Ng,B.oN,B.MX,B.oK,B.Nf,B.Mo]),t.A) +B.Qc=A.a(s([137,80,78,71,13,10,26,10]),t.Z) +B.O0=new A.mV(B.Qc,"image/png") +B.Pg=A.a(s([71,73,70,56,55,97]),t.Z) +B.O4=new A.mV(B.Pg,"image/gif") +B.Ph=A.a(s([71,73,70,56,57,97]),t.Z) +B.O5=new A.mV(B.Ph,"image/gif") +B.OT=A.a(s([255,216,255]),t.Z) +B.O1=new A.mV(B.OT,"image/jpeg") +B.PF=A.a(s([82,73,70,70,null,null,null,null,87,69,66,80]),t.Z) +B.O3=new A.mV(B.PF,"image/webp") +B.Pu=A.a(s([66,77]),t.Z) +B.O2=new A.mV(B.Pu,"image/bmp") +B.Pi=A.a(s([B.O0,B.O4,B.O5,B.O1,B.O3,B.O2]),A.a6("q")) +B.Pj=A.a(s([4,9,14,19]),t.t) +B.kC=A.a(s([0,0,65498,45055,65535,34815,65534,18431]),t.t) +B.Pt=A.a(s([65533]),t.t) +B.Ez=new A.vu(0,"auto") +B.EA=new A.vu(1,"full") +B.EB=new A.vu(2,"chromium") +B.Pv=A.a(s([B.Ez,B.EA,B.EB]),A.a6("q")) +B.pe=A.a(s([B.kp,B.ho,B.eC,B.hr,B.hv,B.dH,B.p9,B.kA,B.bq,B.hw,B.d0,B.ez,B.eA,B.hp,B.eB,B.kq,B.cA,B.kr,B.ks,B.p7,B.bp,B.hq,B.eD,B.eE,B.kt,B.ku,B.kv,B.kw,B.p8,B.kx,B.ky,B.hs,B.eF,B.eG,B.kz,B.ht,B.hu]),A.a6("q")) +B.a6d=new A.il(0,1) +B.a6j=new A.il(0.5,1) +B.a6k=new A.il(0.5375,0.75) +B.a6i=new A.il(0.575,0.5) +B.a6m=new A.il(0.6125,0.25) +B.a6n=new A.il(0.65,0) +B.a6l=new A.il(0.85,0) +B.a6h=new A.il(0.8875,0.25) +B.a6f=new A.il(0.925,0.5) +B.a6g=new A.il(0.9625,0.75) +B.a6e=new A.il(1,1) +B.Pw=A.a(s([B.a6d,B.a6j,B.a6k,B.a6i,B.a6m,B.a6n,B.a6l,B.a6h,B.a6f,B.a6g,B.a6e]),A.a6("q")) +B.Px=A.a(s([0.1,0.4,0.9]),t.n) +B.hy=A.a(s([B.e5,B.fI,B.j4,B.j5,B.fJ]),t.QP) +B.Pz=A.a(s([B.e5]),t.QP) +B.PA=A.a(s([B.j6,B.j7]),A.a6("q")) +B.pg=A.a(s([0,4,12,1,5,13,3,7,15]),t.t) +B.PC=A.a(s(["pointerdown","pointermove","pointerleave","pointerup","pointercancel","touchstart","touchend","touchmove","touchcancel","mousedown","mousemove","mouseleave","mouseup","keyup","keydown"]),t.s) +B.kb=new A.ad(0,1) +B.Mu=new A.ad(2,5) +B.oI=new A.ad(4,3) +B.ke=new A.ad(6,5) +B.dJ=A.a(s([B.kb,B.Mu,B.oI,B.ke]),t.A) +B.oH=new A.ad(2,1) +B.Mz=new A.ad(4,2) +B.ME=new A.ad(6,1) +B.PE=A.a(s([B.oG,B.oH,B.Mz,B.ME]),t.A) +B.kD=A.a(s([B.jn,B.jo,B.jp,B.jq,B.jr]),A.a6("q")) +B.PL=A.a(s([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),t.t) +B.PM=A.a(s([0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0]),t.n) +B.Mk=new A.ad(0,7) +B.Mr=new A.ad(1,3) +B.Mt=new A.ad(2,4) +B.Mw=new A.ad(3,2) +B.MB=new A.ad(5,4) +B.MH=new A.ad(7,3) +B.oJ=new A.ad(8,1) +B.MM=new A.ad(9,8) +B.Ml=new A.ad(10,1) +B.Mn=new A.ad(11,3) +B.PO=A.a(s([B.Mk,B.Mr,B.Mt,B.Mw,B.oI,B.MB,B.ke,B.MH,B.oJ,B.MM,B.Ml,B.Mn]),t.A) +B.Rf=new A.n6("en","US") +B.ph=A.a(s([B.Rf]),t.ss) +B.hz=A.a(s([0,0,24576,1023,65534,34815,65534,18431]),t.t) +B.pi=A.a(s([0,0,26624,1023,65534,2047,65534,2047]),t.t) +B.d1=A.a(s([B.bP,B.aQ,B.l,B.cc,B.bm,B.bQ]),t.W) +B.a60=new A.nO(0,0) +B.a65=new A.nO(1,0.05) +B.a64=new A.nO(3,0.08) +B.a61=new A.nO(6,0.11) +B.a62=new A.nO(8,0.12) +B.a63=new A.nO(12,0.14) +B.pj=A.a(s([B.a60,B.a65,B.a64,B.a61,B.a62,B.a63]),A.a6("q")) +B.PY=A.a(s([0,0,32722,12287,65534,34815,65534,18431]),t.t) +B.hg=new A.iG(0) +B.kE=A.a(s([B.hg,B.kj,B.hh,B.p,B.a5,B.hi,B.x,B.kl,B.ev]),A.a6("q")) +B.aG=new A.y4(0,"butt") +B.fq=new A.y4(1,"round") +B.AH=new A.y4(2,"square") +B.PZ=A.a(s([B.aG,B.fq,B.AH]),A.a6("q")) +B.bH=new A.DS(0,"nonZero") +B.d6=new A.DS(1,"evenOdd") +B.Q_=A.a(s([B.bH,B.d6]),A.a6("q")) +B.MS=new A.ad(1,2.8) +B.oO=new A.ad(3,1.9) +B.MF=new A.ad(6,3) +B.N3=new A.ad(10,1.3) +B.N1=new A.ad(13,2.5) +B.Q0=A.a(s([B.MS,B.oO,B.MF,B.N3,B.N1]),t.A) +B.K_=new A.m(4294962158) +B.JO=new A.m(4294954450) +B.IK=new A.m(4293892762) +B.Ir=new A.m(4293227379) +B.II=new A.m(4293874512) +B.IX=new A.m(4294198070) +B.Iq=new A.m(4293212469) +B.HU=new A.m(4291176488) +B.HG=new A.m(4290190364) +B.T8=new A.bz([50,B.K_,100,B.JO,200,B.IK,300,B.Ir,400,B.II,500,B.IX,600,B.Iq,700,B.jE,800,B.HU,900,B.HG],t.o) +B.TL=new A.dP(B.T8,4294198070) +B.IW=new A.m(4294174197) +B.Io=new A.m(4292984551) +B.I1=new A.m(4291728344) +B.HJ=new A.m(4290406600) +B.Hq=new A.m(4289415100) +B.Hi=new A.m(4288423856) +B.H7=new A.m(4287505578) +B.GI=new A.m(4286259106) +B.Gx=new A.m(4285143962) +B.G8=new A.m(4283045004) +B.T3=new A.bz([50,B.IW,100,B.Io,200,B.I1,300,B.HJ,400,B.Hq,500,B.Hi,600,B.H7,700,B.GI,800,B.Gx,900,B.G8],t.o) +B.TH=new A.dP(B.T3,4288423856) +B.IE=new A.m(4293781494) +B.I3=new A.m(4291937513) +B.HE=new A.m(4289961435) +B.He=new A.m(4287985101) +B.GN=new A.m(4286470082) +B.Gv=new A.m(4284955319) +B.Gm=new A.m(4284364209) +B.Gg=new A.m(4283510184) +B.G2=new A.m(4282722208) +B.FN=new A.m(4281408402) +B.T4=new A.bz([50,B.IE,100,B.I3,200,B.HE,300,B.He,400,B.GN,500,B.Gv,600,B.Gm,700,B.Gg,800,B.G2,900,B.FN],t.o) +B.TI=new A.dP(B.T4,4284955319) +B.Iy=new A.m(4293454582) +B.HS=new A.m(4291152617) +B.Hl=new A.m(4288653530) +B.GH=new A.m(4286154443) +B.Gk=new A.m(4284246976) +B.FX=new A.m(4282339765) +B.FU=new A.m(4281944491) +B.FL=new A.m(4281352095) +B.FH=new A.m(4280825235) +B.Fv=new A.m(4279903102) +B.T6=new A.bz([50,B.Iy,100,B.HS,200,B.Hl,300,B.GH,400,B.Gk,500,B.FX,600,B.FU,700,B.FL,800,B.FH,900,B.Fv],t.o) +B.TJ=new A.dP(B.T6,4282339765) +B.Gs=new A.m(4284790262) +B.G0=new A.m(4282557941) +B.Ft=new A.m(4279592384) +B.Fs=new A.m(4279060385) +B.SV=new A.bz([50,B.nM,100,B.nI,200,B.jC,300,B.Gs,400,B.G0,500,B.l,600,B.jx,700,B.nt,800,B.Ft,900,B.Fs],t.o) +B.eS=new A.dP(B.SV,4280391411) +B.Ip=new A.m(4292998654) +B.HF=new A.m(4289979900) +B.GW=new A.m(4286698746) +B.Gf=new A.m(4283417591) +B.FI=new A.m(4280923894) +B.Fr=new A.m(4278430196) +B.Fq=new A.m(4278426597) +B.Fp=new A.m(4278356177) +B.Fo=new A.m(4278351805) +B.Fn=new A.m(4278278043) +B.SY=new A.bz([50,B.Ip,100,B.HF,200,B.GW,300,B.Gf,400,B.FI,500,B.Fr,600,B.Fq,700,B.Fp,800,B.Fo,900,B.Fn],t.o) +B.TB=new A.dP(B.SY,4278430196) +B.Im=new A.m(4292933626) +B.HC=new A.m(4289915890) +B.GU=new A.m(4286635754) +B.Gc=new A.m(4283289825) +B.FG=new A.m(4280731354) +B.Fh=new A.m(4278238420) +B.Fg=new A.m(4278234305) +B.Ff=new A.m(4278228903) +B.Fb=new A.m(4278223759) +B.F5=new A.m(4278214756) +B.SU=new A.bz([50,B.Im,100,B.HC,200,B.GU,300,B.Gc,400,B.FG,500,B.Fh,600,B.Fg,700,B.Ff,800,B.Fb,900,B.F5],t.o) +B.eR=new A.dP(B.SU,4278238420) +B.Il=new A.m(4292932337) +B.HB=new A.m(4289912795) +B.GT=new A.m(4286630852) +B.Gb=new A.m(4283283116) +B.FF=new A.m(4280723098) +B.Fe=new A.m(4278228616) +B.Fc=new A.m(4278225275) +B.F8=new A.m(4278221163) +B.F7=new A.m(4278217052) +B.F4=new A.m(4278209856) +B.SX=new A.bz([50,B.Il,100,B.HB,200,B.GT,300,B.Gb,400,B.FF,500,B.Fe,600,B.Fc,700,B.F8,800,B.F7,900,B.F4],t.o) +B.TA=new A.dP(B.SX,4278228616) +B.Iz=new A.m(4293457385) +B.HW=new A.m(4291356361) +B.Hp=new A.m(4289058471) +B.GV=new A.m(4286695300) +B.Gt=new A.m(4284922730) +B.G1=new A.m(4282622023) +B.FT=new A.m(4281896508) +B.FJ=new A.m(4281236786) +B.Fw=new A.m(4279983648) +B.T2=new A.bz([50,B.Iz,100,B.HW,200,B.Hp,300,B.GV,400,B.Gt,500,B.nz,600,B.G1,700,B.FT,800,B.FJ,900,B.Fw],t.o) +B.TG=new A.dP(B.T2,4283215696) +B.IU=new A.m(4294047977) +B.Ii=new A.m(4292668872) +B.HT=new A.m(4291158437) +B.Hu=new A.m(4289648001) +B.Hj=new A.m(4288466021) +B.H4=new A.m(4287349578) +B.GK=new A.m(4286362434) +B.Gw=new A.m(4285046584) +B.Gj=new A.m(4283796271) +B.FQ=new A.m(4281559326) +B.T7=new A.bz([50,B.IU,100,B.Ii,200,B.HT,300,B.Hu,400,B.Hj,500,B.H4,600,B.GK,700,B.Gw,800,B.Gj,900,B.FQ],t.o) +B.TK=new A.dP(B.T7,4287349578) +B.Ja=new A.m(4294573031) +B.IQ=new A.m(4293981379) +B.Iv=new A.m(4293324444) +B.Ih=new A.m(4292667253) +B.I6=new A.m(4292141399) +B.I0=new A.m(4291681337) +B.HQ=new A.m(4290824755) +B.Hv=new A.m(4289705003) +B.Hk=new A.m(4288584996) +B.GX=new A.m(4286740247) +B.SZ=new A.bz([50,B.Ja,100,B.IQ,200,B.Iv,300,B.Ih,400,B.I6,500,B.I0,600,B.HQ,700,B.Hv,800,B.Hk,900,B.GX],t.o) +B.TC=new A.dP(B.SZ,4291681337) +B.Ke=new A.m(4294966759) +B.Ka=new A.m(4294965700) +B.K6=new A.m(4294964637) +B.K4=new A.m(4294963574) +B.K1=new A.m(4294962776) +B.JY=new A.m(4294961979) +B.Jj=new A.m(4294826037) +B.Jg=new A.m(4294688813) +B.J9=new A.m(4294551589) +B.J2=new A.m(4294278935) +B.T_=new A.bz([50,B.Ke,100,B.Ka,200,B.K6,300,B.K4,400,B.K1,500,B.JY,600,B.Jj,700,B.Jg,800,B.J9,900,B.J2],t.o) +B.TD=new A.dP(B.T_,4294961979) +B.K9=new A.m(4294965473) +B.K0=new A.m(4294962355) +B.JT=new A.m(4294959234) +B.JP=new A.m(4294956367) +B.JL=new A.m(4294953512) +B.JK=new A.m(4294951175) +B.JG=new A.m(4294947584) +B.JB=new A.m(4294942720) +B.Jz=new A.m(4294938368) +B.Jt=new A.m(4294930176) +B.T0=new A.bz([50,B.K9,100,B.K0,200,B.JT,300,B.JP,400,B.JL,500,B.JK,600,B.JG,700,B.JB,800,B.Jz,900,B.Jt],t.o) +B.TE=new A.dP(B.T0,4294951175) +B.K5=new A.m(4294964192) +B.JU=new A.m(4294959282) +B.JM=new A.m(4294954112) +B.JI=new A.m(4294948685) +B.JE=new A.m(4294944550) +B.JA=new A.m(4294940672) +B.Jf=new A.m(4294675456) +B.J1=new A.m(4294278144) +B.IJ=new A.m(4293880832) +B.It=new A.m(4293284096) +B.Ta=new A.bz([50,B.K5,100,B.JU,200,B.JM,300,B.JI,400,B.JE,500,B.JA,600,B.Jf,700,B.J1,800,B.IJ,900,B.It],t.o) +B.TN=new A.dP(B.Ta,4294940672) +B.Jh=new A.m(4294699495) +B.JN=new A.m(4294954172) +B.JF=new A.m(4294945681) +B.Jw=new A.m(4294937189) +B.Ju=new A.m(4294930499) +B.Jq=new A.m(4294924066) +B.IY=new A.m(4294201630) +B.Is=new A.m(4293282329) +B.Ia=new A.m(4292363029) +B.HO=new A.m(4290721292) +B.T1=new A.bz([50,B.Jh,100,B.JN,200,B.JF,300,B.Jw,400,B.Ju,500,B.Jq,600,B.IY,700,B.Is,800,B.Ia,900,B.HO],t.o) +B.TF=new A.dP(B.T1,4294924066) +B.IM=new A.m(4293913577) +B.I8=new A.m(4292332744) +B.HL=new A.m(4290554532) +B.Hn=new A.m(4288776319) +B.H6=new A.m(4287458915) +B.GF=new A.m(4286141768) +B.GA=new A.m(4285353025) +B.Gl=new A.m(4284301367) +B.Gd=new A.m(4283315246) +B.FW=new A.m(4282263331) +B.T9=new A.bz([50,B.IM,100,B.I8,200,B.HL,300,B.Hn,400,B.H6,500,B.GF,600,B.GA,700,B.Gl,800,B.Gd,900,B.FW],t.o) +B.TM=new A.dP(B.T9,4286141768) +B.Q7=A.a(s([B.TL,B.l2,B.TH,B.TI,B.TJ,B.eS,B.TB,B.eR,B.TA,B.TG,B.TK,B.TC,B.TD,B.TE,B.TN,B.TF,B.TM,B.bY]),A.a6("q")) +B.al=new A.G4(0,"upstream") +B.Q8=A.a(s([B.al,B.m]),A.a6("q")) +B.Z=new A.m_(0,"rtl") +B.q=new A.m_(1,"ltr") +B.pk=A.a(s([B.Z,B.q]),A.a6("q")) +B.Bt=new A.yM(0,"topLeft") +B.Bw=new A.yM(3,"bottomRight") +B.a5V=new A.nM(B.Bt,B.Bw) +B.a5Y=new A.nM(B.Bw,B.Bt) +B.Bu=new A.yM(1,"topRight") +B.Bv=new A.yM(2,"bottomLeft") +B.a5W=new A.nM(B.Bu,B.Bv) +B.a5X=new A.nM(B.Bv,B.Bu) +B.Q9=A.a(s([B.a5V,B.a5Y,B.a5W,B.a5X]),A.a6("q")) +B.Dn=new A.vh() +B.fc=new A.Th(1,"page") +B.ih=new A.eR(B.a1,B.fc) +B.Qa=A.a(s([B.Dn,B.ih]),A.a6("q")) +B.Nb=new A.ad(0,3.44) +B.N9=new A.ad(2.6,3.44) +B.N_=new A.ad(4.9,3.44) +B.N7=new A.ad(6.8,3.44) +B.Nc=new A.ad(8,3.44) +B.Na=new A.ad(9.5,3.44) +B.Nd=new A.ad(11,3.44) +B.Qb=A.a(s([B.Nb,B.N9,B.N_,B.N7,B.Nc,B.Na,B.Nd]),t.A) +B.pl=A.a(s([0,0,65490,12287,65535,34815,65534,18431]),t.t) +B.pm=A.a(s([0,0,32776,33792,1,10240,0,0]),t.t) +B.Qd=A.a(s([1.3,1,1.8,1.5,2.2,1.8,3]),t.n) +B.Qe=A.a(s(["click","scroll"]),t.s) +B.np=new A.m(419430400) +B.e=new A.k(0,0) +B.Dg=new A.ep(0.2,B.cn,B.np,B.e,11) +B.Qf=A.a(s([B.Dg]),t.sq) +B.Qh=A.a(s([0,0,32754,11263,65534,34815,65534,18431]),t.t) +B.QA=A.a(s([]),t.QP) +B.a7l=A.a(s([]),t.dt) +B.Qs=A.a(s([]),t.hn) +B.Qt=A.a(s([]),t.UA) +B.Qu=A.a(s([]),t.Wo) +B.br=A.a(s([]),t.MS) +B.Qv=A.a(s([]),t.sq) +B.pn=A.a(s([]),A.a6("q")) +B.Qi=A.a(s([]),t.E) +B.a7m=A.a(s([]),t.A) +B.Qk=A.a(s([]),t.fJ) +B.a7n=A.a(s([]),t.F) +B.Ql=A.a(s([]),t.ER) +B.a7o=A.a(s([]),t.ss) +B.a7p=A.a(s([]),t.tc) +B.hB=A.a(s([]),t.jl) +B.po=A.a(s([]),t.wi) +B.Qz=A.a(s([]),t.jT) +B.Qx=A.a(s([]),A.a6("q>")) +B.Qo=A.a(s([]),t.Vz) +B.Qm=A.a(s([]),t.H9) +B.Qr=A.a(s([]),A.a6("q")) +B.Qq=A.a(s([]),A.a6("q")) +B.Qp=A.a(s([]),A.a6("q")) +B.kG=A.a(s([]),t.AO) +B.QC=A.a(s([]),t.yo) +B.eI=A.a(s([]),t.i3) +B.eH=A.a(s([]),t._F) +B.Qy=A.a(s([]),t.D1) +B.kH=A.a(s([]),t.QF) +B.bs=A.a(s([]),t.Xv) +B.QH=A.a(s([]),t.Lx) +B.Qj=A.a(s([]),t.fm) +B.a7q=A.a(s([]),t.p) +B.Qn=A.a(s([]),t.n) +B.aa=A.a(s([]),t.t) +B.t=A.a(s([]),t.ee) +B.QG=A.a(s([]),t.XS) +B.kd=new A.ad(1,1) +B.MT=new A.ad(3,2.8) +B.N6=new A.ad(7,1.2) +B.MU=new A.ad(10,2.8) +B.MZ=new A.ad(12,2.6) +B.N8=new A.ad(13,3.9) +B.pp=A.a(s([B.kd,B.MT,B.N6,B.MU,B.MZ,B.N8]),t.A) +B.MK=new A.ad(6.8,5) +B.Nh=new A.ad(7.5,3.5) +B.N0=new A.ad(7.5,2) +B.kc=new A.ad(10,2) +B.N2=new A.ad(11,2.5) +B.QK=A.a(s([B.kb,B.oH,B.oN,B.MK,B.Nh,B.aJ,B.N0,B.oJ,B.kc,B.N2]),t.A) +B.Uy=new A.k(0,2) +B.Df=new A.ep(0.75,B.cn,B.np,B.Uy,1.5) +B.QM=A.a(s([B.Df]),t.sq) +B.dZ=new A.kD(1,"right") +B.aH=new A.kD(2,"center") +B.iy=new A.kD(3,"justify") +B.az=new A.kD(4,"start") +B.fr=new A.kD(5,"end") +B.QR=A.a(s([B.ci,B.dZ,B.aH,B.iy,B.az,B.fr]),A.a6("q")) +B.Mq=new A.ad(1,2) +B.N4=new A.ad(2,1.5) +B.Mx=new A.ad(3,3) +B.MR=new A.ad(4,3.5) +B.MC=new A.ad(5,5) +B.MG=new A.ad(6,8) +B.QS=A.a(s([B.kb,B.Mq,B.N4,B.Mx,B.MR,B.MC,B.MG]),t.A) +B.dd=new A.y5(0,"miter") +B.lM=new A.y5(1,"round") +B.Yv=new A.y5(2,"bevel") +B.QT=A.a(s([B.dd,B.lM,B.Yv]),A.a6("q")) +B.dL=new A.k(1,0) +B.UF=new A.k(1,1) +B.f3=new A.k(0,1) +B.V2=new A.k(-1,1) +B.vJ=new A.k(-1,0) +B.V3=new A.k(-1,-1) +B.vG=new A.k(0,-1) +B.UH=new A.k(1,-1) +B.hC=A.a(s([B.dL,B.UF,B.f3,B.V2,B.vJ,B.V3,B.vG,B.UH]),t.yv) +B.My=new A.ad(3,4) +B.MP=new A.ad(5,1.8) +B.MI=new A.ad(7,5) +B.oM=new A.ad(12,2.2) +B.oL=new A.ad(13,1.8) +B.R0=A.a(s([B.kd,B.My,B.MP,B.MI,B.kc,B.oM,B.oL]),t.A) +B.hD=A.a(s([0,0,65490,45055,65535,34815,65534,18431]),t.t) +B.N5=new A.ad(3,1.5) +B.Ne=new A.ad(5,1.4) +B.MN=new A.ad(7,3.4) +B.R1=A.a(s([B.kd,B.N5,B.Ne,B.MN,B.kc,B.oM,B.oL]),t.A) +B.eW=new A.iO(0,"controlModifier") +B.eX=new A.iO(1,"shiftModifier") +B.eY=new A.iO(2,"altModifier") +B.eZ=new A.iO(3,"metaModifier") +B.vz=new A.iO(4,"capsLockModifier") +B.vA=new A.iO(5,"numLockModifier") +B.vB=new A.iO(6,"scrollLockModifier") +B.vC=new A.iO(7,"functionModifier") +B.U0=new A.iO(8,"symbolModifier") +B.pq=A.a(s([B.eW,B.eX,B.eY,B.eZ,B.vz,B.vA,B.vB,B.vC,B.U0]),A.a6("q")) +B.pr=A.a(s(["text","multiline","number","phone","datetime","emailAddress","url","visiblePassword","name","address","none"]),t.s) +B.Zc=new A.pN(0,"solid") +B.AU=new A.pN(1,"double") +B.Zf=new A.pN(2,"dotted") +B.Zh=new A.pN(3,"dashed") +B.Zj=new A.pN(4,"wavy") +B.R2=A.a(s([B.Zc,B.AU,B.Zf,B.Zh,B.Zj]),A.a6("q")) +B.ps=A.a(s([0.1,1]),t.n) +B.R3=A.a(s([0.5,1]),t.n) +B.dg=new A.eh(1,"fuchsia") +B.dh=new A.eh(3,"linux") +B.di=new A.eh(5,"windows") +B.R4=A.a(s([B.ba,B.dg,B.au,B.dh,B.c1,B.di]),A.a6("q")) +B.kI=A.a(s([!0,!1]),t.HZ) +B.pt=A.a(s([1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536,131072,262144,524288,1048576,2097152,4194304,8388608,16777216,33554432,67108864,134217728,268435456,536870912,1073741824,2147483648]),t.t) +B.mg=new A.dU(0,"DoubleQuote") +B.e0=new A.dU(1,"SingleQuote") +B.b0=new A.dU(2,"HebrewLetter") +B.iF=new A.dU(3,"CR") +B.iG=new A.dU(4,"LF") +B.mk=new A.dU(5,"Newline") +B.fA=new A.dU(6,"Extend") +B.a5p=new A.dU(7,"RegionalIndicator") +B.fB=new A.dU(8,"Format") +B.fC=new A.dU(9,"Katakana") +B.bL=new A.dU(10,"ALetter") +B.mh=new A.dU(11,"MidLetter") +B.mi=new A.dU(12,"MidNum") +B.fy=new A.dU(13,"MidNumLet") +B.cl=new A.dU(14,"Numeric") +B.iE=new A.dU(15,"ExtendNumLet") +B.fz=new A.dU(16,"ZWJ") +B.mj=new A.dU(17,"WSegSpace") +B.Bo=new A.dU(18,"Unknown") +B.R6=A.a(s([B.mg,B.e0,B.b0,B.iF,B.iG,B.mk,B.fA,B.a5p,B.fB,B.fC,B.bL,B.mh,B.mi,B.fy,B.cl,B.iE,B.fz,B.mj,B.Bo]),A.a6("q")) +B.Xp=new A.jC(B.k,B.e,2) +B.cB=A.a(s([B.Xp]),t.kO) +B.EP=new A.m(1107296256) +B.Xq=new A.jC(B.EP,B.e,12) +B.R8=A.a(s([B.Xq]),t.kO) +B.MY=new A.ad(1,3.8) +B.Ms=new A.ad(10,3.3) +B.MW=new A.ad(13,4.5) +B.R9=A.a(s([B.MY,B.oO,B.ke,B.Ms,B.MW]),t.A) +B.pu=A.a(s(["Sat","Sun","Mon","Tue","Wed","Thu","Fri"]),t.s) +B.mx=new A.Jc(0,"named") +B.a6X=new A.Jc(1,"anonymous") +B.Ra=A.a(s([B.mx,B.a6X]),A.a6("q")) +B.Re=A.a(s([-1,0,0,1,0,0,-1,0,1,0,0,0,-1,1,0,1,1,1,1,0]),t.n) +B.Rg=new A.n6("und",null) +B.bt=new A.j(4294967304) +B.eK=new A.j(4294967323) +B.be=new A.j(4294967423) +B.kL=new A.j(4294967558) +B.eO=new A.j(8589934848) +B.hJ=new A.j(8589934849) +B.cC=new A.j(8589934850) +B.d4=new A.j(8589934851) +B.eP=new A.j(8589934852) +B.hK=new A.j(8589934853) +B.eQ=new A.j(8589934854) +B.hL=new A.j(8589934855) +B.dn=new A.jL(B.e) +B.SL=new A.wM(B.e,B.dn) +B.SM=new A.ahg("longPress") +B.SN=new A.wN(B.e,B.e) +B.SO=new A.lx(B.e,B.F,B.F,B.F) +B.U=new A.wP(0,"start") +B.cD=new A.wP(2,"center") +B.vn=new A.wP(5,"spaceEvenly") +B.bf=new A.Q9(0,"min") +B.SP=new A.tf(B.fN,B.fN,A.a6("tf")) +B.Uj={aliceblue:0,antiquewhite:1,aqua:2,aquamarine:3,azure:4,beige:5,bisque:6,black:7,blanchedalmond:8,blue:9,blueviolet:10,brown:11,burlywood:12,cadetblue:13,chartreuse:14,chocolate:15,coral:16,cornflowerblue:17,cornsilk:18,crimson:19,cyan:20,darkblue:21,darkcyan:22,darkgoldenrod:23,darkgray:24,darkgreen:25,darkgrey:26,darkkhaki:27,darkmagenta:28,darkolivegreen:29,darkorange:30,darkorchid:31,darkred:32,darksalmon:33,darkseagreen:34,darkslateblue:35,darkslategray:36,darkslategrey:37,darkturquoise:38,darkviolet:39,deeppink:40,deepskyblue:41,dimgray:42,dimgrey:43,dodgerblue:44,firebrick:45,floralwhite:46,forestgreen:47,fuchsia:48,gainsboro:49,ghostwhite:50,gold:51,goldenrod:52,gray:53,grey:54,green:55,greenyellow:56,honeydew:57,hotpink:58,indianred:59,indigo:60,ivory:61,khaki:62,lavender:63,lavenderblush:64,lawngreen:65,lemonchiffon:66,lightblue:67,lightcoral:68,lightcyan:69,lightgoldenrodyellow:70,lightgray:71,lightgreen:72,lightgrey:73,lightpink:74,lightsalmon:75,lightseagreen:76,lightskyblue:77,lightslategray:78,lightslategrey:79,lightsteelblue:80,lightyellow:81,lime:82,limegreen:83,linen:84,magenta:85,maroon:86,mediumaquamarine:87,mediumblue:88,mediumorchid:89,mediumpurple:90,mediumseagreen:91,mediumslateblue:92,mediumspringgreen:93,mediumturquoise:94,mediumvioletred:95,midnightblue:96,mintcream:97,mistyrose:98,moccasin:99,navajowhite:100,navy:101,oldlace:102,olive:103,olivedrab:104,orange:105,orangered:106,orchid:107,palegoldenrod:108,palegreen:109,paleturquoise:110,palevioletred:111,papayawhip:112,peachpuff:113,peru:114,pink:115,plum:116,powderblue:117,purple:118,red:119,rosybrown:120,royalblue:121,saddlebrown:122,salmon:123,sandybrown:124,seagreen:125,seashell:126,sienna:127,silver:128,skyblue:129,slateblue:130,slategray:131,slategrey:132,snow:133,springgreen:134,steelblue:135,tan:136,teal:137,thistle:138,tomato:139,transparent:140,turquoise:141,violet:142,wheat:143,white:144,whitesmoke:145,yellow:146,yellowgreen:147} +B.IR=new A.Y(4293982463) +B.Jc=new A.Y(4294634455) +B.nr=new A.Y(4278255615) +B.GP=new A.Y(4286578644) +B.IT=new A.Y(4293984255) +B.J4=new A.Y(4294309340) +B.JW=new A.Y(4294960324) +B.JZ=new A.Y(4294962125) +B.F3=new A.Y(4278190335) +B.H0=new A.Y(4287245282) +B.Ho=new A.Y(4289014314) +B.Ik=new A.Y(4292786311) +B.Gn=new A.Y(4284456608) +B.GO=new A.Y(4286578432) +B.I4=new A.Y(4291979550) +B.Jv=new A.Y(4294934352) +B.Gr=new A.Y(4284782061) +B.K8=new A.Y(4294965468) +B.If=new A.Y(4292613180) +B.F1=new A.Y(4278190219) +B.Fd=new A.Y(4278225803) +B.HH=new A.Y(4290283019) +B.nH=new A.Y(4289309097) +B.F6=new A.Y(4278215680) +B.HM=new A.Y(4290623339) +B.H2=new A.Y(4287299723) +B.Gi=new A.Y(4283788079) +B.Jy=new A.Y(4294937600) +B.Hg=new A.Y(4288230092) +B.H1=new A.Y(4287299584) +B.IB=new A.Y(4293498490) +B.H8=new A.Y(4287609999) +B.G5=new A.Y(4282924427) +B.nw=new A.Y(4281290575) +B.Fj=new A.Y(4278243025) +B.Hd=new A.Y(4287889619) +B.Jm=new A.Y(4294907027) +B.Fi=new A.Y(4278239231) +B.nC=new A.Y(4285098345) +B.Fz=new A.Y(4280193279) +B.HA=new A.Y(4289864226) +B.Kc=new A.Y(4294966e3) +B.FC=new A.Y(4280453922) +B.nR=new A.Y(4294902015) +B.Ig=new A.Y(4292664540) +B.J8=new A.Y(4294506751) +B.JQ=new A.Y(4294956800) +B.Id=new A.Y(4292519200) +B.nF=new A.Y(4286611584) +B.F9=new A.Y(4278222848) +B.Ht=new A.Y(4289593135) +B.IS=new A.Y(4293984240) +B.Js=new A.Y(4294928820) +B.HZ=new A.Y(4291648604) +B.Ga=new A.Y(4283105410) +B.Ki=new A.Y(4294967280) +B.IP=new A.Y(4293977740) +B.Iu=new A.Y(4293322490) +B.K3=new A.Y(4294963445) +B.GL=new A.Y(4286381056) +B.Kb=new A.Y(4294965965) +B.Hs=new A.Y(4289583334) +B.IO=new A.Y(4293951616) +B.In=new A.Y(4292935679) +B.Je=new A.Y(4294638290) +B.nK=new A.Y(4292072403) +B.Ha=new A.Y(4287688336) +B.JH=new A.Y(4294948545) +B.JC=new A.Y(4294942842) +B.FA=new A.Y(4280332970) +B.GZ=new A.Y(4287090426) +B.nE=new A.Y(4286023833) +B.Hy=new A.Y(4289774814) +B.Kh=new A.Y(4294967264) +B.Fl=new A.Y(4278255360) +B.FO=new A.Y(4281519410) +B.Jd=new A.Y(4294635750) +B.GQ=new A.Y(4286578688) +B.Gu=new A.Y(4284927402) +B.F2=new A.Y(4278190285) +B.HI=new A.Y(4290401747) +B.Hb=new A.Y(4287852763) +B.FV=new A.Y(4282168177) +B.GJ=new A.Y(4286277870) +B.Fk=new A.Y(4278254234) +B.G6=new A.Y(4282962380) +B.HV=new A.Y(4291237253) +B.Fu=new A.Y(4279834992) +B.J6=new A.Y(4294311930) +B.JX=new A.Y(4294960353) +B.JV=new A.Y(4294960309) +B.JS=new A.Y(4294958765) +B.F0=new A.Y(4278190208) +B.Jk=new A.Y(4294833638) +B.GS=new A.Y(4286611456) +B.Gz=new A.Y(4285238819) +B.JD=new A.Y(4294944e3) +B.Jo=new A.Y(4294919424) +B.Ic=new A.Y(4292505814) +B.IG=new A.Y(4293847210) +B.Hf=new A.Y(4288215960) +B.Hw=new A.Y(4289720046) +B.Ie=new A.Y(4292571283) +B.K2=new A.Y(4294963157) +B.JR=new A.Y(4294957753) +B.I_=new A.Y(4291659071) +B.JJ=new A.Y(4294951115) +B.Ij=new A.Y(4292714717) +B.Hz=new A.Y(4289781990) +B.GR=new A.Y(4286578816) +B.Jl=new A.Y(4294901760) +B.HK=new A.Y(4290547599) +B.G_=new A.Y(4282477025) +B.H3=new A.Y(4287317267) +B.Jb=new A.Y(4294606962) +B.J_=new A.Y(4294222944) +B.FK=new A.Y(4281240407) +B.K7=new A.Y(4294964718) +B.Hm=new A.Y(4288696877) +B.HP=new A.Y(4290822336) +B.GY=new A.Y(4287090411) +B.Gy=new A.Y(4285160141) +B.nD=new A.Y(4285563024) +B.Kd=new A.Y(4294966010) +B.Fm=new A.Y(4278255487) +B.G4=new A.Y(4282811060) +B.I5=new A.Y(4291998860) +B.Fa=new A.Y(4278222976) +B.Ib=new A.Y(4292394968) +B.Jr=new A.Y(4294927175) +B.EU=new A.Y(16777215) +B.FY=new A.Y(4282441936) +B.IF=new A.Y(4293821166) +B.J3=new A.Y(4294303411) +B.J5=new A.Y(4294309365) +B.Kf=new A.Y(4294967040) +B.Hh=new A.Y(4288335154) +B.SQ=new A.bs(B.Uj,[B.IR,B.Jc,B.nr,B.GP,B.IT,B.J4,B.JW,B.cS,B.JZ,B.F3,B.H0,B.Ho,B.Ik,B.Gn,B.GO,B.I4,B.Jv,B.Gr,B.K8,B.If,B.nr,B.F1,B.Fd,B.HH,B.nH,B.F6,B.nH,B.HM,B.H2,B.Gi,B.Jy,B.Hg,B.H1,B.IB,B.H8,B.G5,B.nw,B.nw,B.Fj,B.Hd,B.Jm,B.Fi,B.nC,B.nC,B.Fz,B.HA,B.Kc,B.FC,B.nR,B.Ig,B.J8,B.JQ,B.Id,B.nF,B.nF,B.F9,B.Ht,B.IS,B.Js,B.HZ,B.Ga,B.Ki,B.IP,B.Iu,B.K3,B.GL,B.Kb,B.Hs,B.IO,B.In,B.Je,B.nK,B.Ha,B.nK,B.JH,B.JC,B.FA,B.GZ,B.nE,B.nE,B.Hy,B.Kh,B.Fl,B.FO,B.Jd,B.nR,B.GQ,B.Gu,B.F2,B.HI,B.Hb,B.FV,B.GJ,B.Fk,B.G6,B.HV,B.Fu,B.J6,B.JX,B.JV,B.JS,B.F0,B.Jk,B.GS,B.Gz,B.JD,B.Jo,B.Ic,B.IG,B.Hf,B.Hw,B.Ie,B.K2,B.JR,B.I_,B.JJ,B.Ij,B.Hz,B.GR,B.Jl,B.HK,B.G_,B.H3,B.Jb,B.J_,B.FK,B.K7,B.Hm,B.HP,B.GY,B.Gy,B.nD,B.nD,B.Kd,B.Fm,B.G4,B.I5,B.Fa,B.Ib,B.Jr,B.EU,B.FY,B.IF,B.J3,B.jG,B.J5,B.Kf,B.Hh],A.a6("bs")) +B.vQ=new A.u(16) +B.vR=new A.u(17) +B.f4=new A.u(18) +B.vS=new A.u(19) +B.vT=new A.u(20) +B.vU=new A.u(21) +B.vV=new A.u(22) +B.vW=new A.u(23) +B.vX=new A.u(24) +B.yI=new A.u(65666) +B.yJ=new A.u(65667) +B.yK=new A.u(65717) +B.vY=new A.u(392961) +B.vZ=new A.u(392962) +B.w_=new A.u(392963) +B.w0=new A.u(392964) +B.w1=new A.u(392965) +B.w2=new A.u(392966) +B.w3=new A.u(392967) +B.w4=new A.u(392968) +B.w5=new A.u(392969) +B.w6=new A.u(392970) +B.w7=new A.u(392971) +B.w8=new A.u(392972) +B.w9=new A.u(392973) +B.wa=new A.u(392974) +B.wb=new A.u(392975) +B.wc=new A.u(392976) +B.wd=new A.u(392977) +B.we=new A.u(392978) +B.wf=new A.u(392979) +B.wg=new A.u(392980) +B.wh=new A.u(392981) +B.wi=new A.u(392982) +B.wj=new A.u(392983) +B.wk=new A.u(392984) +B.wl=new A.u(392985) +B.wm=new A.u(392986) +B.wn=new A.u(392987) +B.wo=new A.u(392988) +B.wp=new A.u(392989) +B.wq=new A.u(392990) +B.wr=new A.u(392991) +B.Vo=new A.u(458752) +B.Vp=new A.u(458753) +B.Vq=new A.u(458754) +B.Vr=new A.u(458755) +B.ws=new A.u(458756) +B.wt=new A.u(458757) +B.wu=new A.u(458758) +B.wv=new A.u(458759) +B.ww=new A.u(458760) +B.wx=new A.u(458761) +B.wy=new A.u(458762) +B.wz=new A.u(458763) +B.wA=new A.u(458764) +B.wB=new A.u(458765) +B.wC=new A.u(458766) +B.wD=new A.u(458767) +B.wE=new A.u(458768) +B.wF=new A.u(458769) +B.wG=new A.u(458770) +B.wH=new A.u(458771) +B.wI=new A.u(458772) +B.wJ=new A.u(458773) +B.wK=new A.u(458774) +B.wL=new A.u(458775) +B.wM=new A.u(458776) +B.wN=new A.u(458777) +B.wO=new A.u(458778) +B.wP=new A.u(458779) +B.wQ=new A.u(458780) +B.wR=new A.u(458781) +B.wS=new A.u(458782) +B.wT=new A.u(458783) +B.wU=new A.u(458784) +B.wV=new A.u(458785) +B.wW=new A.u(458786) +B.wX=new A.u(458787) +B.wY=new A.u(458788) +B.wZ=new A.u(458789) +B.x_=new A.u(458790) +B.x0=new A.u(458791) +B.x1=new A.u(458792) +B.la=new A.u(458793) +B.x2=new A.u(458794) +B.x3=new A.u(458795) +B.x4=new A.u(458796) +B.x5=new A.u(458797) +B.x6=new A.u(458798) +B.x7=new A.u(458799) +B.x8=new A.u(458800) +B.x9=new A.u(458801) +B.xa=new A.u(458803) +B.xb=new A.u(458804) +B.xc=new A.u(458805) +B.xd=new A.u(458806) +B.xe=new A.u(458807) +B.xf=new A.u(458808) +B.d7=new A.u(458809) +B.xg=new A.u(458810) +B.xh=new A.u(458811) +B.xi=new A.u(458812) +B.xj=new A.u(458813) +B.xk=new A.u(458814) +B.xl=new A.u(458815) +B.xm=new A.u(458816) +B.xn=new A.u(458817) +B.xo=new A.u(458818) +B.xp=new A.u(458819) +B.xq=new A.u(458820) +B.xr=new A.u(458821) +B.xs=new A.u(458822) +B.hX=new A.u(458823) +B.xt=new A.u(458824) +B.xu=new A.u(458825) +B.xv=new A.u(458826) +B.xw=new A.u(458827) +B.xx=new A.u(458828) +B.xy=new A.u(458829) +B.xz=new A.u(458830) +B.xA=new A.u(458831) +B.xB=new A.u(458832) +B.xC=new A.u(458833) +B.xD=new A.u(458834) +B.hY=new A.u(458835) +B.xE=new A.u(458836) +B.xF=new A.u(458837) +B.xG=new A.u(458838) +B.xH=new A.u(458839) +B.xI=new A.u(458840) +B.xJ=new A.u(458841) +B.xK=new A.u(458842) +B.xL=new A.u(458843) +B.xM=new A.u(458844) +B.xN=new A.u(458845) +B.xO=new A.u(458846) +B.xP=new A.u(458847) +B.xQ=new A.u(458848) +B.xR=new A.u(458849) +B.xS=new A.u(458850) +B.xT=new A.u(458851) +B.xU=new A.u(458852) +B.xV=new A.u(458853) +B.xW=new A.u(458854) +B.xX=new A.u(458855) +B.xY=new A.u(458856) +B.xZ=new A.u(458857) +B.y_=new A.u(458858) +B.y0=new A.u(458859) +B.y1=new A.u(458860) +B.y2=new A.u(458861) +B.y3=new A.u(458862) +B.y4=new A.u(458863) +B.y5=new A.u(458864) +B.y6=new A.u(458865) +B.y7=new A.u(458866) +B.y8=new A.u(458867) +B.y9=new A.u(458868) +B.ya=new A.u(458869) +B.yb=new A.u(458871) +B.yc=new A.u(458873) +B.yd=new A.u(458874) +B.ye=new A.u(458875) +B.yf=new A.u(458876) +B.yg=new A.u(458877) +B.yh=new A.u(458878) +B.yi=new A.u(458879) +B.yj=new A.u(458880) +B.yk=new A.u(458881) +B.yl=new A.u(458885) +B.ym=new A.u(458887) +B.yn=new A.u(458888) +B.yo=new A.u(458889) +B.yp=new A.u(458890) +B.yq=new A.u(458891) +B.yr=new A.u(458896) +B.ys=new A.u(458897) +B.yt=new A.u(458898) +B.yu=new A.u(458899) +B.yv=new A.u(458900) +B.yw=new A.u(458907) +B.yx=new A.u(458915) +B.yy=new A.u(458934) +B.yz=new A.u(458935) +B.yA=new A.u(458939) +B.yB=new A.u(458960) +B.yC=new A.u(458961) +B.yD=new A.u(458962) +B.yE=new A.u(458963) +B.yF=new A.u(458964) +B.Vs=new A.u(458967) +B.yG=new A.u(458968) +B.yH=new A.u(458969) +B.dN=new A.u(458976) +B.dO=new A.u(458977) +B.dP=new A.u(458978) +B.dQ=new A.u(458979) +B.f5=new A.u(458980) +B.f6=new A.u(458981) +B.dR=new A.u(458982) +B.f7=new A.u(458983) +B.Vt=new A.u(786528) +B.Vu=new A.u(786529) +B.yL=new A.u(786543) +B.yM=new A.u(786544) +B.Vv=new A.u(786546) +B.Vw=new A.u(786547) +B.Vx=new A.u(786548) +B.Vy=new A.u(786549) +B.Vz=new A.u(786553) +B.VA=new A.u(786554) +B.VB=new A.u(786563) +B.VC=new A.u(786572) +B.VD=new A.u(786573) +B.VE=new A.u(786580) +B.VF=new A.u(786588) +B.VG=new A.u(786589) +B.yN=new A.u(786608) +B.yO=new A.u(786609) +B.yP=new A.u(786610) +B.yQ=new A.u(786611) +B.yR=new A.u(786612) +B.yS=new A.u(786613) +B.yT=new A.u(786614) +B.yU=new A.u(786615) +B.yV=new A.u(786616) +B.yW=new A.u(786637) +B.VH=new A.u(786639) +B.VI=new A.u(786661) +B.yX=new A.u(786819) +B.VJ=new A.u(786820) +B.VK=new A.u(786822) +B.yY=new A.u(786826) +B.VL=new A.u(786829) +B.VM=new A.u(786830) +B.yZ=new A.u(786834) +B.z_=new A.u(786836) +B.VN=new A.u(786838) +B.VO=new A.u(786844) +B.VP=new A.u(786846) +B.z0=new A.u(786847) +B.z1=new A.u(786850) +B.VQ=new A.u(786855) +B.VR=new A.u(786859) +B.VS=new A.u(786862) +B.z2=new A.u(786865) +B.VT=new A.u(786871) +B.z3=new A.u(786891) +B.VU=new A.u(786945) +B.VV=new A.u(786947) +B.VW=new A.u(786951) +B.VX=new A.u(786952) +B.z4=new A.u(786977) +B.z5=new A.u(786979) +B.z6=new A.u(786980) +B.z7=new A.u(786981) +B.z8=new A.u(786982) +B.z9=new A.u(786983) +B.za=new A.u(786986) +B.VY=new A.u(786989) +B.VZ=new A.u(786990) +B.zb=new A.u(786994) +B.W_=new A.u(787065) +B.zc=new A.u(787081) +B.zd=new A.u(787083) +B.ze=new A.u(787084) +B.zf=new A.u(787101) +B.zg=new A.u(787103) +B.SR=new A.bz([16,B.vQ,17,B.vR,18,B.f4,19,B.vS,20,B.vT,21,B.vU,22,B.vV,23,B.vW,24,B.vX,65666,B.yI,65667,B.yJ,65717,B.yK,392961,B.vY,392962,B.vZ,392963,B.w_,392964,B.w0,392965,B.w1,392966,B.w2,392967,B.w3,392968,B.w4,392969,B.w5,392970,B.w6,392971,B.w7,392972,B.w8,392973,B.w9,392974,B.wa,392975,B.wb,392976,B.wc,392977,B.wd,392978,B.we,392979,B.wf,392980,B.wg,392981,B.wh,392982,B.wi,392983,B.wj,392984,B.wk,392985,B.wl,392986,B.wm,392987,B.wn,392988,B.wo,392989,B.wp,392990,B.wq,392991,B.wr,458752,B.Vo,458753,B.Vp,458754,B.Vq,458755,B.Vr,458756,B.ws,458757,B.wt,458758,B.wu,458759,B.wv,458760,B.ww,458761,B.wx,458762,B.wy,458763,B.wz,458764,B.wA,458765,B.wB,458766,B.wC,458767,B.wD,458768,B.wE,458769,B.wF,458770,B.wG,458771,B.wH,458772,B.wI,458773,B.wJ,458774,B.wK,458775,B.wL,458776,B.wM,458777,B.wN,458778,B.wO,458779,B.wP,458780,B.wQ,458781,B.wR,458782,B.wS,458783,B.wT,458784,B.wU,458785,B.wV,458786,B.wW,458787,B.wX,458788,B.wY,458789,B.wZ,458790,B.x_,458791,B.x0,458792,B.x1,458793,B.la,458794,B.x2,458795,B.x3,458796,B.x4,458797,B.x5,458798,B.x6,458799,B.x7,458800,B.x8,458801,B.x9,458803,B.xa,458804,B.xb,458805,B.xc,458806,B.xd,458807,B.xe,458808,B.xf,458809,B.d7,458810,B.xg,458811,B.xh,458812,B.xi,458813,B.xj,458814,B.xk,458815,B.xl,458816,B.xm,458817,B.xn,458818,B.xo,458819,B.xp,458820,B.xq,458821,B.xr,458822,B.xs,458823,B.hX,458824,B.xt,458825,B.xu,458826,B.xv,458827,B.xw,458828,B.xx,458829,B.xy,458830,B.xz,458831,B.xA,458832,B.xB,458833,B.xC,458834,B.xD,458835,B.hY,458836,B.xE,458837,B.xF,458838,B.xG,458839,B.xH,458840,B.xI,458841,B.xJ,458842,B.xK,458843,B.xL,458844,B.xM,458845,B.xN,458846,B.xO,458847,B.xP,458848,B.xQ,458849,B.xR,458850,B.xS,458851,B.xT,458852,B.xU,458853,B.xV,458854,B.xW,458855,B.xX,458856,B.xY,458857,B.xZ,458858,B.y_,458859,B.y0,458860,B.y1,458861,B.y2,458862,B.y3,458863,B.y4,458864,B.y5,458865,B.y6,458866,B.y7,458867,B.y8,458868,B.y9,458869,B.ya,458871,B.yb,458873,B.yc,458874,B.yd,458875,B.ye,458876,B.yf,458877,B.yg,458878,B.yh,458879,B.yi,458880,B.yj,458881,B.yk,458885,B.yl,458887,B.ym,458888,B.yn,458889,B.yo,458890,B.yp,458891,B.yq,458896,B.yr,458897,B.ys,458898,B.yt,458899,B.yu,458900,B.yv,458907,B.yw,458915,B.yx,458934,B.yy,458935,B.yz,458939,B.yA,458960,B.yB,458961,B.yC,458962,B.yD,458963,B.yE,458964,B.yF,458967,B.Vs,458968,B.yG,458969,B.yH,458976,B.dN,458977,B.dO,458978,B.dP,458979,B.dQ,458980,B.f5,458981,B.f6,458982,B.dR,458983,B.f7,786528,B.Vt,786529,B.Vu,786543,B.yL,786544,B.yM,786546,B.Vv,786547,B.Vw,786548,B.Vx,786549,B.Vy,786553,B.Vz,786554,B.VA,786563,B.VB,786572,B.VC,786573,B.VD,786580,B.VE,786588,B.VF,786589,B.VG,786608,B.yN,786609,B.yO,786610,B.yP,786611,B.yQ,786612,B.yR,786613,B.yS,786614,B.yT,786615,B.yU,786616,B.yV,786637,B.yW,786639,B.VH,786661,B.VI,786819,B.yX,786820,B.VJ,786822,B.VK,786826,B.yY,786829,B.VL,786830,B.VM,786834,B.yZ,786836,B.z_,786838,B.VN,786844,B.VO,786846,B.VP,786847,B.z0,786850,B.z1,786855,B.VQ,786859,B.VR,786862,B.VS,786865,B.z2,786871,B.VT,786891,B.z3,786945,B.VU,786947,B.VV,786951,B.VW,786952,B.VX,786977,B.z4,786979,B.z5,786980,B.z6,786981,B.z7,786982,B.z8,786983,B.z9,786986,B.za,786989,B.VY,786990,B.VZ,786994,B.zb,787065,B.W_,787081,B.zc,787083,B.zd,787084,B.ze,787101,B.zf,787103,B.zg],A.a6("bz")) +B.SS=new A.bz([0,"FontWeight.w100",1,"FontWeight.w200",2,"FontWeight.w300",3,"FontWeight.w400",4,"FontWeight.w500",5,"FontWeight.w600",6,"FontWeight.w700",7,"FontWeight.w800",8,"FontWeight.w900"],A.a6("bz")) +B.lN=new A.dT(1,"close") +B.lS=new A.dT(2,"moveToAbs") +B.lT=new A.dT(3,"moveToRel") +B.AI=new A.dT(4,"lineToAbs") +B.AJ=new A.dT(5,"lineToRel") +B.lU=new A.dT(6,"cubicToAbs") +B.lV=new A.dT(7,"cubicToRel") +B.lW=new A.dT(8,"quadToAbs") +B.lX=new A.dT(9,"quadToRel") +B.YZ=new A.dT(10,"arcToAbs") +B.Z_=new A.dT(11,"arcToRel") +B.Z0=new A.dT(12,"lineToHorizontalAbs") +B.Z1=new A.dT(13,"lineToHorizontalRel") +B.Z2=new A.dT(14,"lineToVerticalAbs") +B.Z3=new A.dT(15,"lineToVerticalRel") +B.lO=new A.dT(16,"smoothCubicToAbs") +B.lP=new A.dT(17,"smoothCubicToRel") +B.lQ=new A.dT(18,"smoothQuadToAbs") +B.lR=new A.dT(19,"smoothQuadToRel") +B.ST=new A.bz([90,B.lN,122,B.lN,77,B.lS,109,B.lT,76,B.AI,108,B.AJ,67,B.lU,99,B.lV,81,B.lW,113,B.lX,65,B.YZ,97,B.Z_,72,B.Z0,104,B.Z1,86,B.Z2,118,B.Z3,83,B.lO,115,B.lP,84,B.lQ,116,B.lR],A.a6("bz")) +B.Uv={BU:0,DD:1,FX:2,TP:3,YD:4,ZR:5} +B.ch=new A.bs(B.Uv,["MM","DE","FR","TL","YE","CD"],t.li) +B.Pk=A.a(s([2,3,2.5,8]),t.n) +B.Py=A.a(s([-1.8,-2.7,-3,-6.5]),t.n) +B.PP=A.a(s([1.5,2,3.5,6]),t.n) +B.R7=A.a(s([1.5,1.5,4,6.5]),t.n) +B.QZ=A.a(s([-2,-2,-5,-9]),t.n) +B.PG=A.a(s([-1.2,-1.5,-4.3,-10]),t.n) +B.OU=A.a(s([1.2,4.8,5,5]),t.n) +B.vo=new A.bz([0,B.Pk,1,B.Py,2,B.PP,3,B.R7,4,B.QZ,5,B.PG,6,B.OU],A.a6("bz>")) +B.Ue={alias:0,allScroll:1,basic:2,cell:3,click:4,contextMenu:5,copy:6,forbidden:7,grab:8,grabbing:9,help:10,move:11,none:12,noDrop:13,precise:14,progress:15,text:16,resizeColumn:17,resizeDown:18,resizeDownLeft:19,resizeDownRight:20,resizeLeft:21,resizeLeftRight:22,resizeRight:23,resizeRow:24,resizeUp:25,resizeUpDown:26,resizeUpLeft:27,resizeUpRight:28,resizeUpLeftDownRight:29,resizeUpRightDownLeft:30,verticalText:31,wait:32,zoomIn:33,zoomOut:34} +B.Tb=new A.bs(B.Ue,["alias","all-scroll","default","cell","pointer","context-menu","copy","not-allowed","grab","grabbing","help","move","none","no-drop","crosshair","progress","text","col-resize","s-resize","sw-resize","se-resize","w-resize","ew-resize","e-resize","row-resize","n-resize","ns-resize","nw-resize","ne-resize","nwse-resize","nesw-resize","vertical-text","wait","zoom-in","zoom-out"],t.li) +B.Uu={type:0} +B.Tc=new A.bs(B.Uu,["line"],t.li) +B.Ud={circle:0,path:1,rect:2,polygon:3,polyline:4,ellipse:5,line:6} +B.vp=new A.bs(B.Ud,[A.b7l(),A.b7o(),A.b7r(),A.b7p(),A.b7q(),A.b7m(),A.b7n()],A.a6("bs")) +B.vE={AVRInput:0,AVRPower:1,Accel:2,Accept:3,Again:4,AllCandidates:5,Alphanumeric:6,AltGraph:7,AppSwitch:8,ArrowDown:9,ArrowLeft:10,ArrowRight:11,ArrowUp:12,Attn:13,AudioBalanceLeft:14,AudioBalanceRight:15,AudioBassBoostDown:16,AudioBassBoostToggle:17,AudioBassBoostUp:18,AudioFaderFront:19,AudioFaderRear:20,AudioSurroundModeNext:21,AudioTrebleDown:22,AudioTrebleUp:23,AudioVolumeDown:24,AudioVolumeMute:25,AudioVolumeUp:26,Backspace:27,BrightnessDown:28,BrightnessUp:29,BrowserBack:30,BrowserFavorites:31,BrowserForward:32,BrowserHome:33,BrowserRefresh:34,BrowserSearch:35,BrowserStop:36,Call:37,Camera:38,CameraFocus:39,Cancel:40,CapsLock:41,ChannelDown:42,ChannelUp:43,Clear:44,Close:45,ClosedCaptionToggle:46,CodeInput:47,ColorF0Red:48,ColorF1Green:49,ColorF2Yellow:50,ColorF3Blue:51,ColorF4Grey:52,ColorF5Brown:53,Compose:54,ContextMenu:55,Convert:56,Copy:57,CrSel:58,Cut:59,DVR:60,Delete:61,Dimmer:62,DisplaySwap:63,Eisu:64,Eject:65,End:66,EndCall:67,Enter:68,EraseEof:69,Esc:70,Escape:71,ExSel:72,Execute:73,Exit:74,F1:75,F10:76,F11:77,F12:78,F13:79,F14:80,F15:81,F16:82,F17:83,F18:84,F19:85,F2:86,F20:87,F21:88,F22:89,F23:90,F24:91,F3:92,F4:93,F5:94,F6:95,F7:96,F8:97,F9:98,FavoriteClear0:99,FavoriteClear1:100,FavoriteClear2:101,FavoriteClear3:102,FavoriteRecall0:103,FavoriteRecall1:104,FavoriteRecall2:105,FavoriteRecall3:106,FavoriteStore0:107,FavoriteStore1:108,FavoriteStore2:109,FavoriteStore3:110,FinalMode:111,Find:112,Fn:113,FnLock:114,GoBack:115,GoHome:116,GroupFirst:117,GroupLast:118,GroupNext:119,GroupPrevious:120,Guide:121,GuideNextDay:122,GuidePreviousDay:123,HangulMode:124,HanjaMode:125,Hankaku:126,HeadsetHook:127,Help:128,Hibernate:129,Hiragana:130,HiraganaKatakana:131,Home:132,Hyper:133,Info:134,Insert:135,InstantReplay:136,JunjaMode:137,KanaMode:138,KanjiMode:139,Katakana:140,Key11:141,Key12:142,LastNumberRedial:143,LaunchApplication1:144,LaunchApplication2:145,LaunchAssistant:146,LaunchCalendar:147,LaunchContacts:148,LaunchControlPanel:149,LaunchMail:150,LaunchMediaPlayer:151,LaunchMusicPlayer:152,LaunchPhone:153,LaunchScreenSaver:154,LaunchSpreadsheet:155,LaunchWebBrowser:156,LaunchWebCam:157,LaunchWordProcessor:158,Link:159,ListProgram:160,LiveContent:161,Lock:162,LogOff:163,MailForward:164,MailReply:165,MailSend:166,MannerMode:167,MediaApps:168,MediaAudioTrack:169,MediaClose:170,MediaFastForward:171,MediaLast:172,MediaPause:173,MediaPlay:174,MediaPlayPause:175,MediaRecord:176,MediaRewind:177,MediaSkip:178,MediaSkipBackward:179,MediaSkipForward:180,MediaStepBackward:181,MediaStepForward:182,MediaStop:183,MediaTopMenu:184,MediaTrackNext:185,MediaTrackPrevious:186,MicrophoneToggle:187,MicrophoneVolumeDown:188,MicrophoneVolumeMute:189,MicrophoneVolumeUp:190,ModeChange:191,NavigateIn:192,NavigateNext:193,NavigateOut:194,NavigatePrevious:195,New:196,NextCandidate:197,NextFavoriteChannel:198,NextUserProfile:199,NonConvert:200,Notification:201,NumLock:202,OnDemand:203,Open:204,PageDown:205,PageUp:206,Pairing:207,Paste:208,Pause:209,PinPDown:210,PinPMove:211,PinPToggle:212,PinPUp:213,Play:214,PlaySpeedDown:215,PlaySpeedReset:216,PlaySpeedUp:217,Power:218,PowerOff:219,PreviousCandidate:220,Print:221,PrintScreen:222,Process:223,Props:224,RandomToggle:225,RcLowBattery:226,RecordSpeedNext:227,Redo:228,RfBypass:229,Romaji:230,STBInput:231,STBPower:232,Save:233,ScanChannelsToggle:234,ScreenModeNext:235,ScrollLock:236,Select:237,Settings:238,ShiftLevel5:239,SingleCandidate:240,Soft1:241,Soft2:242,Soft3:243,Soft4:244,Soft5:245,Soft6:246,Soft7:247,Soft8:248,SpeechCorrectionList:249,SpeechInputToggle:250,SpellCheck:251,SplitScreenToggle:252,Standby:253,Subtitle:254,Super:255,Symbol:256,SymbolLock:257,TV:258,TV3DMode:259,TVAntennaCable:260,TVAudioDescription:261,TVAudioDescriptionMixDown:262,TVAudioDescriptionMixUp:263,TVContentsMenu:264,TVDataService:265,TVInput:266,TVInputComponent1:267,TVInputComponent2:268,TVInputComposite1:269,TVInputComposite2:270,TVInputHDMI1:271,TVInputHDMI2:272,TVInputHDMI3:273,TVInputHDMI4:274,TVInputVGA1:275,TVMediaContext:276,TVNetwork:277,TVNumberEntry:278,TVPower:279,TVRadioService:280,TVSatellite:281,TVSatelliteBS:282,TVSatelliteCS:283,TVSatelliteToggle:284,TVTerrestrialAnalog:285,TVTerrestrialDigital:286,TVTimer:287,Tab:288,Teletext:289,Undo:290,Unidentified:291,VideoModeNext:292,VoiceDial:293,WakeUp:294,Wink:295,Zenkaku:296,ZenkakuHankaku:297,ZoomIn:298,ZoomOut:299,ZoomToggle:300} +B.rX=new A.j(4294970632) +B.rY=new A.j(4294970633) +B.pD=new A.j(4294967553) +B.pS=new A.j(4294968577) +B.pT=new A.j(4294968578) +B.qg=new A.j(4294969089) +B.qh=new A.j(4294969090) +B.hG=new A.j(4294967555) +B.uq=new A.j(4294971393) +B.bV=new A.j(4294968065) +B.bD=new A.j(4294968066) +B.bE=new A.j(4294968067) +B.bW=new A.j(4294968068) +B.pU=new A.j(4294968579) +B.rQ=new A.j(4294970625) +B.rR=new A.j(4294970626) +B.rS=new A.j(4294970627) +B.uh=new A.j(4294970882) +B.rT=new A.j(4294970628) +B.rU=new A.j(4294970629) +B.rV=new A.j(4294970630) +B.rW=new A.j(4294970631) +B.ui=new A.j(4294970884) +B.uj=new A.j(4294970885) +B.rr=new A.j(4294969871) +B.rt=new A.j(4294969873) +B.rs=new A.j(4294969872) +B.q5=new A.j(4294968833) +B.q6=new A.j(4294968834) +B.rJ=new A.j(4294970369) +B.rK=new A.j(4294970370) +B.rL=new A.j(4294970371) +B.rM=new A.j(4294970372) +B.rN=new A.j(4294970373) +B.rO=new A.j(4294970374) +B.rP=new A.j(4294970375) +B.ur=new A.j(4294971394) +B.q7=new A.j(4294968835) +B.us=new A.j(4294971395) +B.pV=new A.j(4294968580) +B.rZ=new A.j(4294970634) +B.t_=new A.j(4294970635) +B.kM=new A.j(4294968321) +B.re=new A.j(4294969857) +B.t6=new A.j(4294970642) +B.qi=new A.j(4294969091) +B.t0=new A.j(4294970636) +B.t1=new A.j(4294970637) +B.t2=new A.j(4294970638) +B.t3=new A.j(4294970639) +B.t4=new A.j(4294970640) +B.t5=new A.j(4294970641) +B.qj=new A.j(4294969092) +B.pW=new A.j(4294968581) +B.qk=new A.j(4294969093) +B.pK=new A.j(4294968322) +B.pL=new A.j(4294968323) +B.pM=new A.j(4294968324) +B.u4=new A.j(4294970703) +B.t7=new A.j(4294970643) +B.t8=new A.j(4294970644) +B.qz=new A.j(4294969108) +B.q8=new A.j(4294968836) +B.d2=new A.j(4294968069) +B.ut=new A.j(4294971396) +B.hF=new A.j(4294967309) +B.pN=new A.j(4294968325) +B.pO=new A.j(4294968326) +B.pX=new A.j(4294968582) +B.t9=new A.j(4294970645) +B.qJ=new A.j(4294969345) +B.qS=new A.j(4294969354) +B.qT=new A.j(4294969355) +B.qU=new A.j(4294969356) +B.qV=new A.j(4294969357) +B.qW=new A.j(4294969358) +B.qX=new A.j(4294969359) +B.qY=new A.j(4294969360) +B.qZ=new A.j(4294969361) +B.r_=new A.j(4294969362) +B.r0=new A.j(4294969363) +B.qK=new A.j(4294969346) +B.r1=new A.j(4294969364) +B.r2=new A.j(4294969365) +B.r3=new A.j(4294969366) +B.r4=new A.j(4294969367) +B.r5=new A.j(4294969368) +B.qL=new A.j(4294969347) +B.qM=new A.j(4294969348) +B.qN=new A.j(4294969349) +B.qO=new A.j(4294969350) +B.qP=new A.j(4294969351) +B.qQ=new A.j(4294969352) +B.qR=new A.j(4294969353) +B.ta=new A.j(4294970646) +B.tb=new A.j(4294970647) +B.tc=new A.j(4294970648) +B.td=new A.j(4294970649) +B.te=new A.j(4294970650) +B.tf=new A.j(4294970651) +B.tg=new A.j(4294970652) +B.th=new A.j(4294970653) +B.ti=new A.j(4294970654) +B.tj=new A.j(4294970655) +B.tk=new A.j(4294970656) +B.tl=new A.j(4294970657) +B.ql=new A.j(4294969094) +B.pY=new A.j(4294968583) +B.pE=new A.j(4294967559) +B.uu=new A.j(4294971397) +B.uv=new A.j(4294971398) +B.qm=new A.j(4294969095) +B.qn=new A.j(4294969096) +B.qo=new A.j(4294969097) +B.qp=new A.j(4294969098) +B.tm=new A.j(4294970658) +B.tn=new A.j(4294970659) +B.to=new A.j(4294970660) +B.qw=new A.j(4294969105) +B.qx=new A.j(4294969106) +B.qA=new A.j(4294969109) +B.uw=new A.j(4294971399) +B.pZ=new A.j(4294968584) +B.qd=new A.j(4294968841) +B.qB=new A.j(4294969110) +B.qC=new A.j(4294969111) +B.d3=new A.j(4294968070) +B.pF=new A.j(4294967560) +B.tp=new A.j(4294970661) +B.kN=new A.j(4294968327) +B.tq=new A.j(4294970662) +B.qy=new A.j(4294969107) +B.qD=new A.j(4294969112) +B.qE=new A.j(4294969113) +B.qF=new A.j(4294969114) +B.v1=new A.j(4294971905) +B.v2=new A.j(4294971906) +B.ux=new A.j(4294971400) +B.rz=new A.j(4294970118) +B.ru=new A.j(4294970113) +B.rH=new A.j(4294970126) +B.rv=new A.j(4294970114) +B.rF=new A.j(4294970124) +B.rI=new A.j(4294970127) +B.rw=new A.j(4294970115) +B.rx=new A.j(4294970116) +B.ry=new A.j(4294970117) +B.rG=new A.j(4294970125) +B.rA=new A.j(4294970119) +B.rB=new A.j(4294970120) +B.rC=new A.j(4294970121) +B.rD=new A.j(4294970122) +B.rE=new A.j(4294970123) +B.tr=new A.j(4294970663) +B.ts=new A.j(4294970664) +B.tt=new A.j(4294970665) +B.tu=new A.j(4294970666) +B.q9=new A.j(4294968837) +B.rf=new A.j(4294969858) +B.rg=new A.j(4294969859) +B.rh=new A.j(4294969860) +B.uz=new A.j(4294971402) +B.tv=new A.j(4294970667) +B.u5=new A.j(4294970704) +B.ug=new A.j(4294970715) +B.tw=new A.j(4294970668) +B.tx=new A.j(4294970669) +B.ty=new A.j(4294970670) +B.tz=new A.j(4294970671) +B.ri=new A.j(4294969861) +B.tA=new A.j(4294970672) +B.tB=new A.j(4294970673) +B.tC=new A.j(4294970674) +B.u6=new A.j(4294970705) +B.u7=new A.j(4294970706) +B.u8=new A.j(4294970707) +B.u9=new A.j(4294970708) +B.rj=new A.j(4294969863) +B.ua=new A.j(4294970709) +B.rk=new A.j(4294969864) +B.rl=new A.j(4294969865) +B.uk=new A.j(4294970886) +B.ul=new A.j(4294970887) +B.un=new A.j(4294970889) +B.um=new A.j(4294970888) +B.qq=new A.j(4294969099) +B.ub=new A.j(4294970710) +B.uc=new A.j(4294970711) +B.ud=new A.j(4294970712) +B.ue=new A.j(4294970713) +B.rm=new A.j(4294969866) +B.qr=new A.j(4294969100) +B.tD=new A.j(4294970675) +B.tE=new A.j(4294970676) +B.qs=new A.j(4294969101) +B.uy=new A.j(4294971401) +B.tF=new A.j(4294970677) +B.rn=new A.j(4294969867) +B.eM=new A.j(4294968071) +B.eN=new A.j(4294968072) +B.uf=new A.j(4294970714) +B.pP=new A.j(4294968328) +B.q_=new A.j(4294968585) +B.tG=new A.j(4294970678) +B.tH=new A.j(4294970679) +B.tI=new A.j(4294970680) +B.tJ=new A.j(4294970681) +B.q0=new A.j(4294968586) +B.tK=new A.j(4294970682) +B.tL=new A.j(4294970683) +B.tM=new A.j(4294970684) +B.qa=new A.j(4294968838) +B.qb=new A.j(4294968839) +B.qt=new A.j(4294969102) +B.ro=new A.j(4294969868) +B.qc=new A.j(4294968840) +B.qu=new A.j(4294969103) +B.q1=new A.j(4294968587) +B.tN=new A.j(4294970685) +B.tO=new A.j(4294970686) +B.tP=new A.j(4294970687) +B.pQ=new A.j(4294968329) +B.tQ=new A.j(4294970688) +B.qG=new A.j(4294969115) +B.tV=new A.j(4294970693) +B.tW=new A.j(4294970694) +B.rp=new A.j(4294969869) +B.tR=new A.j(4294970689) +B.tS=new A.j(4294970690) +B.q2=new A.j(4294968588) +B.tT=new A.j(4294970691) +B.pJ=new A.j(4294967569) +B.qv=new A.j(4294969104) +B.r6=new A.j(4294969601) +B.r7=new A.j(4294969602) +B.r8=new A.j(4294969603) +B.r9=new A.j(4294969604) +B.ra=new A.j(4294969605) +B.rb=new A.j(4294969606) +B.rc=new A.j(4294969607) +B.rd=new A.j(4294969608) +B.uo=new A.j(4294971137) +B.up=new A.j(4294971138) +B.rq=new A.j(4294969870) +B.tU=new A.j(4294970692) +B.qe=new A.j(4294968842) +B.tX=new A.j(4294970695) +B.pG=new A.j(4294967566) +B.pH=new A.j(4294967567) +B.pI=new A.j(4294967568) +B.tZ=new A.j(4294970697) +B.uB=new A.j(4294971649) +B.uC=new A.j(4294971650) +B.uD=new A.j(4294971651) +B.uE=new A.j(4294971652) +B.uF=new A.j(4294971653) +B.uG=new A.j(4294971654) +B.uH=new A.j(4294971655) +B.u_=new A.j(4294970698) +B.uI=new A.j(4294971656) +B.uJ=new A.j(4294971657) +B.uK=new A.j(4294971658) +B.uL=new A.j(4294971659) +B.uM=new A.j(4294971660) +B.uN=new A.j(4294971661) +B.uO=new A.j(4294971662) +B.uP=new A.j(4294971663) +B.uQ=new A.j(4294971664) +B.uR=new A.j(4294971665) +B.uS=new A.j(4294971666) +B.uT=new A.j(4294971667) +B.u0=new A.j(4294970699) +B.uU=new A.j(4294971668) +B.uV=new A.j(4294971669) +B.uW=new A.j(4294971670) +B.uX=new A.j(4294971671) +B.uY=new A.j(4294971672) +B.uZ=new A.j(4294971673) +B.v_=new A.j(4294971674) +B.v0=new A.j(4294971675) +B.hE=new A.j(4294967305) +B.tY=new A.j(4294970696) +B.pR=new A.j(4294968330) +B.pC=new A.j(4294967297) +B.u1=new A.j(4294970700) +B.uA=new A.j(4294971403) +B.qf=new A.j(4294968843) +B.u2=new A.j(4294970701) +B.qH=new A.j(4294969116) +B.qI=new A.j(4294969117) +B.q3=new A.j(4294968589) +B.q4=new A.j(4294968590) +B.u3=new A.j(4294970702) +B.Te=new A.bs(B.vE,[B.rX,B.rY,B.pD,B.pS,B.pT,B.qg,B.qh,B.hG,B.uq,B.bV,B.bD,B.bE,B.bW,B.pU,B.rQ,B.rR,B.rS,B.uh,B.rT,B.rU,B.rV,B.rW,B.ui,B.uj,B.rr,B.rt,B.rs,B.bt,B.q5,B.q6,B.rJ,B.rK,B.rL,B.rM,B.rN,B.rO,B.rP,B.ur,B.q7,B.us,B.pV,B.eL,B.rZ,B.t_,B.kM,B.re,B.t6,B.qi,B.t0,B.t1,B.t2,B.t3,B.t4,B.t5,B.qj,B.pW,B.qk,B.pK,B.pL,B.pM,B.u4,B.be,B.t7,B.t8,B.qz,B.q8,B.d2,B.ut,B.hF,B.pN,B.eK,B.eK,B.pO,B.pX,B.t9,B.qJ,B.qS,B.qT,B.qU,B.qV,B.qW,B.qX,B.qY,B.qZ,B.r_,B.r0,B.qK,B.r1,B.r2,B.r3,B.r4,B.r5,B.qL,B.qM,B.qN,B.qO,B.qP,B.qQ,B.qR,B.ta,B.tb,B.tc,B.td,B.te,B.tf,B.tg,B.th,B.ti,B.tj,B.tk,B.tl,B.ql,B.pY,B.kL,B.pE,B.uu,B.uv,B.qm,B.qn,B.qo,B.qp,B.tm,B.tn,B.to,B.qw,B.qx,B.qA,B.uw,B.pZ,B.qd,B.qB,B.qC,B.d3,B.pF,B.tp,B.kN,B.tq,B.qy,B.qD,B.qE,B.qF,B.v1,B.v2,B.ux,B.rz,B.ru,B.rH,B.rv,B.rF,B.rI,B.rw,B.rx,B.ry,B.rG,B.rA,B.rB,B.rC,B.rD,B.rE,B.tr,B.ts,B.tt,B.tu,B.q9,B.rf,B.rg,B.rh,B.uz,B.tv,B.u5,B.ug,B.tw,B.tx,B.ty,B.tz,B.ri,B.tA,B.tB,B.tC,B.u6,B.u7,B.u8,B.u9,B.rj,B.ua,B.rk,B.rl,B.uk,B.ul,B.un,B.um,B.qq,B.ub,B.uc,B.ud,B.ue,B.rm,B.qr,B.tD,B.tE,B.qs,B.uy,B.hH,B.tF,B.rn,B.eM,B.eN,B.uf,B.pP,B.q_,B.tG,B.tH,B.tI,B.tJ,B.q0,B.tK,B.tL,B.tM,B.qa,B.qb,B.qt,B.ro,B.qc,B.qu,B.q1,B.tN,B.tO,B.tP,B.pQ,B.tQ,B.qG,B.tV,B.tW,B.rp,B.tR,B.tS,B.hI,B.q2,B.tT,B.pJ,B.qv,B.r6,B.r7,B.r8,B.r9,B.ra,B.rb,B.rc,B.rd,B.uo,B.up,B.rq,B.tU,B.qe,B.tX,B.pG,B.pH,B.pI,B.tZ,B.uB,B.uC,B.uD,B.uE,B.uF,B.uG,B.uH,B.u_,B.uI,B.uJ,B.uK,B.uL,B.uM,B.uN,B.uO,B.uP,B.uQ,B.uR,B.uS,B.uT,B.u0,B.uU,B.uV,B.uW,B.uX,B.uY,B.uZ,B.v_,B.v0,B.hE,B.tY,B.pR,B.pC,B.u1,B.uA,B.qf,B.u2,B.qH,B.qI,B.q3,B.q4,B.u3],A.a6("bs")) +B.Tf=new A.bs(B.vE,[4294970632,4294970633,4294967553,4294968577,4294968578,4294969089,4294969090,4294967555,4294971393,4294968065,4294968066,4294968067,4294968068,4294968579,4294970625,4294970626,4294970627,4294970882,4294970628,4294970629,4294970630,4294970631,4294970884,4294970885,4294969871,4294969873,4294969872,4294967304,4294968833,4294968834,4294970369,4294970370,4294970371,4294970372,4294970373,4294970374,4294970375,4294971394,4294968835,4294971395,4294968580,4294967556,4294970634,4294970635,4294968321,4294969857,4294970642,4294969091,4294970636,4294970637,4294970638,4294970639,4294970640,4294970641,4294969092,4294968581,4294969093,4294968322,4294968323,4294968324,4294970703,4294967423,4294970643,4294970644,4294969108,4294968836,4294968069,4294971396,4294967309,4294968325,4294967323,4294967323,4294968326,4294968582,4294970645,4294969345,4294969354,4294969355,4294969356,4294969357,4294969358,4294969359,4294969360,4294969361,4294969362,4294969363,4294969346,4294969364,4294969365,4294969366,4294969367,4294969368,4294969347,4294969348,4294969349,4294969350,4294969351,4294969352,4294969353,4294970646,4294970647,4294970648,4294970649,4294970650,4294970651,4294970652,4294970653,4294970654,4294970655,4294970656,4294970657,4294969094,4294968583,4294967558,4294967559,4294971397,4294971398,4294969095,4294969096,4294969097,4294969098,4294970658,4294970659,4294970660,4294969105,4294969106,4294969109,4294971399,4294968584,4294968841,4294969110,4294969111,4294968070,4294967560,4294970661,4294968327,4294970662,4294969107,4294969112,4294969113,4294969114,4294971905,4294971906,4294971400,4294970118,4294970113,4294970126,4294970114,4294970124,4294970127,4294970115,4294970116,4294970117,4294970125,4294970119,4294970120,4294970121,4294970122,4294970123,4294970663,4294970664,4294970665,4294970666,4294968837,4294969858,4294969859,4294969860,4294971402,4294970667,4294970704,4294970715,4294970668,4294970669,4294970670,4294970671,4294969861,4294970672,4294970673,4294970674,4294970705,4294970706,4294970707,4294970708,4294969863,4294970709,4294969864,4294969865,4294970886,4294970887,4294970889,4294970888,4294969099,4294970710,4294970711,4294970712,4294970713,4294969866,4294969100,4294970675,4294970676,4294969101,4294971401,4294967562,4294970677,4294969867,4294968071,4294968072,4294970714,4294968328,4294968585,4294970678,4294970679,4294970680,4294970681,4294968586,4294970682,4294970683,4294970684,4294968838,4294968839,4294969102,4294969868,4294968840,4294969103,4294968587,4294970685,4294970686,4294970687,4294968329,4294970688,4294969115,4294970693,4294970694,4294969869,4294970689,4294970690,4294967564,4294968588,4294970691,4294967569,4294969104,4294969601,4294969602,4294969603,4294969604,4294969605,4294969606,4294969607,4294969608,4294971137,4294971138,4294969870,4294970692,4294968842,4294970695,4294967566,4294967567,4294967568,4294970697,4294971649,4294971650,4294971651,4294971652,4294971653,4294971654,4294971655,4294970698,4294971656,4294971657,4294971658,4294971659,4294971660,4294971661,4294971662,4294971663,4294971664,4294971665,4294971666,4294971667,4294970699,4294971668,4294971669,4294971670,4294971671,4294971672,4294971673,4294971674,4294971675,4294967305,4294970696,4294968330,4294967297,4294970700,4294971403,4294968843,4294970701,4294969116,4294969117,4294968589,4294968590,4294970702],t.eL) +B.Tg=new A.bz([B.hg,"Thin",B.kj,"ExtraLight",B.hh,"Light",B.p,"Regular",B.a5,"Medium",B.hi,"SemiBold",B.x,"Bold",B.kl,"ExtraBold",B.ev,"Black"],A.a6("bz")) +B.dX=new A.aW(B.bD,!1,!1,!1,!1) +B.dY=new A.aW(B.bE,!1,!1,!1,!1) +B.a70=new A.zw(1,"left") +B.Bs=new A.kQ(B.a70) +B.a7_=new A.zw(0,"right") +B.Br=new A.kQ(B.a7_) +B.Th=new A.bz([B.dX,B.Bs,B.dY,B.Br],t.Fp) +B.Uw={Abort:0,Again:1,AltLeft:2,AltRight:3,ArrowDown:4,ArrowLeft:5,ArrowRight:6,ArrowUp:7,AudioVolumeDown:8,AudioVolumeMute:9,AudioVolumeUp:10,Backquote:11,Backslash:12,Backspace:13,BracketLeft:14,BracketRight:15,BrightnessDown:16,BrightnessUp:17,BrowserBack:18,BrowserFavorites:19,BrowserForward:20,BrowserHome:21,BrowserRefresh:22,BrowserSearch:23,BrowserStop:24,CapsLock:25,Comma:26,ContextMenu:27,ControlLeft:28,ControlRight:29,Convert:30,Copy:31,Cut:32,Delete:33,Digit0:34,Digit1:35,Digit2:36,Digit3:37,Digit4:38,Digit5:39,Digit6:40,Digit7:41,Digit8:42,Digit9:43,DisplayToggleIntExt:44,Eject:45,End:46,Enter:47,Equal:48,Esc:49,Escape:50,F1:51,F10:52,F11:53,F12:54,F13:55,F14:56,F15:57,F16:58,F17:59,F18:60,F19:61,F2:62,F20:63,F21:64,F22:65,F23:66,F24:67,F3:68,F4:69,F5:70,F6:71,F7:72,F8:73,F9:74,Find:75,Fn:76,FnLock:77,GameButton1:78,GameButton10:79,GameButton11:80,GameButton12:81,GameButton13:82,GameButton14:83,GameButton15:84,GameButton16:85,GameButton2:86,GameButton3:87,GameButton4:88,GameButton5:89,GameButton6:90,GameButton7:91,GameButton8:92,GameButton9:93,GameButtonA:94,GameButtonB:95,GameButtonC:96,GameButtonLeft1:97,GameButtonLeft2:98,GameButtonMode:99,GameButtonRight1:100,GameButtonRight2:101,GameButtonSelect:102,GameButtonStart:103,GameButtonThumbLeft:104,GameButtonThumbRight:105,GameButtonX:106,GameButtonY:107,GameButtonZ:108,Help:109,Home:110,Hyper:111,Insert:112,IntlBackslash:113,IntlRo:114,IntlYen:115,KanaMode:116,KeyA:117,KeyB:118,KeyC:119,KeyD:120,KeyE:121,KeyF:122,KeyG:123,KeyH:124,KeyI:125,KeyJ:126,KeyK:127,KeyL:128,KeyM:129,KeyN:130,KeyO:131,KeyP:132,KeyQ:133,KeyR:134,KeyS:135,KeyT:136,KeyU:137,KeyV:138,KeyW:139,KeyX:140,KeyY:141,KeyZ:142,KeyboardLayoutSelect:143,Lang1:144,Lang2:145,Lang3:146,Lang4:147,Lang5:148,LaunchApp1:149,LaunchApp2:150,LaunchAssistant:151,LaunchControlPanel:152,LaunchMail:153,LaunchScreenSaver:154,MailForward:155,MailReply:156,MailSend:157,MediaFastForward:158,MediaPause:159,MediaPlay:160,MediaPlayPause:161,MediaRecord:162,MediaRewind:163,MediaSelect:164,MediaStop:165,MediaTrackNext:166,MediaTrackPrevious:167,MetaLeft:168,MetaRight:169,MicrophoneMuteToggle:170,Minus:171,NonConvert:172,NumLock:173,Numpad0:174,Numpad1:175,Numpad2:176,Numpad3:177,Numpad4:178,Numpad5:179,Numpad6:180,Numpad7:181,Numpad8:182,Numpad9:183,NumpadAdd:184,NumpadBackspace:185,NumpadClear:186,NumpadClearEntry:187,NumpadComma:188,NumpadDecimal:189,NumpadDivide:190,NumpadEnter:191,NumpadEqual:192,NumpadMemoryAdd:193,NumpadMemoryClear:194,NumpadMemoryRecall:195,NumpadMemoryStore:196,NumpadMemorySubtract:197,NumpadMultiply:198,NumpadParenLeft:199,NumpadParenRight:200,NumpadSubtract:201,Open:202,PageDown:203,PageUp:204,Paste:205,Pause:206,Period:207,Power:208,PrintScreen:209,PrivacyScreenToggle:210,Props:211,Quote:212,Resume:213,ScrollLock:214,Select:215,SelectTask:216,Semicolon:217,ShiftLeft:218,ShiftRight:219,ShowAllWindows:220,Slash:221,Sleep:222,Space:223,Super:224,Suspend:225,Tab:226,Turbo:227,Undo:228,WakeUp:229,ZoomToggle:230} +B.Ti=new A.bs(B.Uw,[458907,458873,458978,458982,458833,458832,458831,458834,458881,458879,458880,458805,458801,458794,458799,458800,786544,786543,786980,786986,786981,786979,786983,786977,786982,458809,458806,458853,458976,458980,458890,458876,458875,458828,458791,458782,458783,458784,458785,458786,458787,458788,458789,458790,65717,786616,458829,458792,458798,458793,458793,458810,458819,458820,458821,458856,458857,458858,458859,458860,458861,458862,458811,458863,458864,458865,458866,458867,458812,458813,458814,458815,458816,458817,458818,458878,18,19,392961,392970,392971,392972,392973,392974,392975,392976,392962,392963,392964,392965,392966,392967,392968,392969,392977,392978,392979,392980,392981,392982,392983,392984,392985,392986,392987,392988,392989,392990,392991,458869,458826,16,458825,458852,458887,458889,458888,458756,458757,458758,458759,458760,458761,458762,458763,458764,458765,458766,458767,458768,458769,458770,458771,458772,458773,458774,458775,458776,458777,458778,458779,458780,458781,787101,458896,458897,458898,458899,458900,786836,786834,786891,786847,786826,786865,787083,787081,787084,786611,786609,786608,786637,786610,786612,786819,786615,786613,786614,458979,458983,24,458797,458891,458835,458850,458841,458842,458843,458844,458845,458846,458847,458848,458849,458839,458939,458968,458969,458885,458851,458836,458840,458855,458963,458962,458961,458960,458964,458837,458934,458935,458838,458868,458830,458827,458877,458824,458807,458854,458822,23,458915,458804,21,458823,458871,786850,458803,458977,458981,787103,458808,65666,458796,17,20,458795,22,458874,65667,786994],t.eL) +B.Up={"deleteBackward:":0,"deleteWordBackward:":1,"deleteToBeginningOfLine:":2,"deleteForward:":3,"deleteWordForward:":4,"deleteToEndOfLine:":5,"moveLeft:":6,"moveRight:":7,"moveForward:":8,"moveBackward:":9,"moveUp:":10,"moveDown:":11,"moveLeftAndModifySelection:":12,"moveRightAndModifySelection:":13,"moveUpAndModifySelection:":14,"moveDownAndModifySelection:":15,"moveWordLeft:":16,"moveWordRight:":17,"moveToBeginningOfParagraph:":18,"moveToEndOfParagraph:":19,"moveWordLeftAndModifySelection:":20,"moveWordRightAndModifySelection:":21,"moveParagraphBackwardAndModifySelection:":22,"moveParagraphForwardAndModifySelection:":23,"moveToLeftEndOfLine:":24,"moveToRightEndOfLine:":25,"moveToBeginningOfDocument:":26,"moveToEndOfDocument:":27,"moveToLeftEndOfLineAndModifySelection:":28,"moveToRightEndOfLineAndModifySelection:":29,"moveToBeginningOfDocumentAndModifySelection:":30,"moveToEndOfDocumentAndModifySelection:":31,"transpose:":32,"scrollToBeginningOfDocument:":33,"scrollToEndOfDocument:":34,"scrollPageUp:":35,"scrollPageDown:":36,"pageUpAndModifySelection:":37,"pageDownAndModifySelection:":38,"cancelOperation:":39,"insertTab:":40,"insertBacktab:":41} +B.zF=new A.ns(!1) +B.zG=new A.ns(!0) +B.lu=new A.eR(B.a8,B.fc) +B.n1=new A.hQ() +B.n5=new A.tw() +B.n8=new A.tN() +B.Tj=new A.bs(B.Up,[B.jN,B.jR,B.jP,B.jO,B.jS,B.jQ,B.es,B.et,B.et,B.es,B.h9,B.ha,B.k2,B.k3,B.k6,B.k7,B.k4,B.k5,B.cV,B.cW,B.ov,B.ow,B.ot,B.ou,B.cV,B.cW,B.h7,B.h8,B.on,B.oo,B.k0,B.k1,B.nb,B.zF,B.zG,B.lu,B.ih,B.k8,B.k9,B.n1,B.n5,B.n8],A.a6("bs")) +B.pA=new A.j(32) +B.it=new A.aW(B.pA,!1,!1,!1,!1) +B.io=new A.aW(B.hF,!1,!1,!1,!1) +B.kO=new A.j(8589935117) +B.XR=new A.aW(B.kO,!1,!1,!1,!1) +B.Xw=new A.aW(B.eK,!1,!1,!1,!1) +B.Xx=new A.aW(B.hE,!1,!1,!1,!1) +B.Xy=new A.aW(B.hE,!1,!0,!1,!1) +B.fn=new A.aW(B.bW,!1,!1,!1,!1) +B.fo=new A.aW(B.bV,!1,!1,!1,!1) +B.fl=new A.aW(B.eN,!1,!1,!1,!1) +B.fm=new A.aW(B.eM,!1,!1,!1,!1) +B.DZ=new A.nl() +B.n_=new A.vs() +B.ig=new A.Th(0,"line") +B.WB=new A.eR(B.a8,B.ig) +B.Wz=new A.eR(B.a1,B.ig) +B.WA=new A.eR(B.cm,B.ig) +B.WC=new A.eR(B.du,B.ig) +B.Tl=new A.bz([B.it,B.DZ,B.io,B.n_,B.XR,B.n_,B.Xw,B.n1,B.Xx,B.n5,B.Xy,B.n8,B.fn,B.WB,B.fo,B.Wz,B.dX,B.WA,B.dY,B.WC,B.fl,B.lu,B.fm,B.ih],t.Fp) +B.RA=new A.j(33) +B.RB=new A.j(34) +B.RC=new A.j(35) +B.RD=new A.j(36) +B.RE=new A.j(37) +B.RF=new A.j(38) +B.RG=new A.j(39) +B.RH=new A.j(40) +B.RI=new A.j(41) +B.pB=new A.j(42) +B.v3=new A.j(43) +B.RJ=new A.j(44) +B.v4=new A.j(45) +B.v5=new A.j(46) +B.v6=new A.j(47) +B.v7=new A.j(48) +B.v8=new A.j(49) +B.v9=new A.j(50) +B.va=new A.j(51) +B.vb=new A.j(52) +B.vc=new A.j(53) +B.vd=new A.j(54) +B.ve=new A.j(55) +B.vf=new A.j(56) +B.vg=new A.j(57) +B.RK=new A.j(58) +B.RL=new A.j(59) +B.RM=new A.j(60) +B.RN=new A.j(61) +B.RO=new A.j(62) +B.RP=new A.j(63) +B.RQ=new A.j(64) +B.SF=new A.j(91) +B.SG=new A.j(92) +B.SH=new A.j(93) +B.SI=new A.j(94) +B.SJ=new A.j(95) +B.SK=new A.j(96) +B.l_=new A.j(97) +B.vl=new A.j(98) +B.l0=new A.j(99) +B.Rh=new A.j(100) +B.pv=new A.j(101) +B.pw=new A.j(102) +B.Ri=new A.j(103) +B.Rj=new A.j(104) +B.Rk=new A.j(105) +B.Rl=new A.j(106) +B.Rm=new A.j(107) +B.Rn=new A.j(108) +B.Ro=new A.j(109) +B.px=new A.j(110) +B.Rp=new A.j(111) +B.py=new A.j(112) +B.Rq=new A.j(113) +B.Rr=new A.j(114) +B.Rs=new A.j(115) +B.pz=new A.j(116) +B.Rt=new A.j(117) +B.kJ=new A.j(118) +B.Ru=new A.j(119) +B.kK=new A.j(120) +B.Rv=new A.j(121) +B.eJ=new A.j(122) +B.Rw=new A.j(123) +B.Rx=new A.j(124) +B.Ry=new A.j(125) +B.Rz=new A.j(126) +B.RR=new A.j(8589934592) +B.RS=new A.j(8589934593) +B.RT=new A.j(8589934594) +B.RU=new A.j(8589934595) +B.RV=new A.j(8589934608) +B.RW=new A.j(8589934609) +B.RX=new A.j(8589934610) +B.RY=new A.j(8589934611) +B.RZ=new A.j(8589934612) +B.S_=new A.j(8589934624) +B.S0=new A.j(8589934625) +B.S1=new A.j(8589934626) +B.S2=new A.j(8589935088) +B.S3=new A.j(8589935090) +B.S4=new A.j(8589935092) +B.S5=new A.j(8589935094) +B.S6=new A.j(8589935144) +B.S7=new A.j(8589935145) +B.vh=new A.j(8589935146) +B.vi=new A.j(8589935147) +B.S8=new A.j(8589935148) +B.vj=new A.j(8589935149) +B.kP=new A.j(8589935150) +B.vk=new A.j(8589935151) +B.kQ=new A.j(8589935152) +B.kR=new A.j(8589935153) +B.kS=new A.j(8589935154) +B.kT=new A.j(8589935155) +B.kU=new A.j(8589935156) +B.kV=new A.j(8589935157) +B.kW=new A.j(8589935158) +B.kX=new A.j(8589935159) +B.kY=new A.j(8589935160) +B.kZ=new A.j(8589935161) +B.S9=new A.j(8589935165) +B.Sa=new A.j(8589935361) +B.Sb=new A.j(8589935362) +B.Sc=new A.j(8589935363) +B.Sd=new A.j(8589935364) +B.Se=new A.j(8589935365) +B.Sf=new A.j(8589935366) +B.Sg=new A.j(8589935367) +B.Sh=new A.j(8589935368) +B.Si=new A.j(8589935369) +B.Sj=new A.j(8589935370) +B.Sk=new A.j(8589935371) +B.Sl=new A.j(8589935372) +B.Sm=new A.j(8589935373) +B.Sn=new A.j(8589935374) +B.So=new A.j(8589935375) +B.Sp=new A.j(8589935376) +B.Sq=new A.j(8589935377) +B.Sr=new A.j(8589935378) +B.Ss=new A.j(8589935379) +B.St=new A.j(8589935380) +B.Su=new A.j(8589935381) +B.Sv=new A.j(8589935382) +B.Sw=new A.j(8589935383) +B.Sx=new A.j(8589935384) +B.Sy=new A.j(8589935385) +B.Sz=new A.j(8589935386) +B.SA=new A.j(8589935387) +B.SB=new A.j(8589935388) +B.SC=new A.j(8589935389) +B.SD=new A.j(8589935390) +B.SE=new A.j(8589935391) +B.Tm=new A.bz([32,B.pA,33,B.RA,34,B.RB,35,B.RC,36,B.RD,37,B.RE,38,B.RF,39,B.RG,40,B.RH,41,B.RI,42,B.pB,43,B.v3,44,B.RJ,45,B.v4,46,B.v5,47,B.v6,48,B.v7,49,B.v8,50,B.v9,51,B.va,52,B.vb,53,B.vc,54,B.vd,55,B.ve,56,B.vf,57,B.vg,58,B.RK,59,B.RL,60,B.RM,61,B.RN,62,B.RO,63,B.RP,64,B.RQ,91,B.SF,92,B.SG,93,B.SH,94,B.SI,95,B.SJ,96,B.SK,97,B.l_,98,B.vl,99,B.l0,100,B.Rh,101,B.pv,102,B.pw,103,B.Ri,104,B.Rj,105,B.Rk,106,B.Rl,107,B.Rm,108,B.Rn,109,B.Ro,110,B.px,111,B.Rp,112,B.py,113,B.Rq,114,B.Rr,115,B.Rs,116,B.pz,117,B.Rt,118,B.kJ,119,B.Ru,120,B.kK,121,B.Rv,122,B.eJ,123,B.Rw,124,B.Rx,125,B.Ry,126,B.Rz,4294967297,B.pC,4294967304,B.bt,4294967305,B.hE,4294967309,B.hF,4294967323,B.eK,4294967423,B.be,4294967553,B.pD,4294967555,B.hG,4294967556,B.eL,4294967558,B.kL,4294967559,B.pE,4294967560,B.pF,4294967562,B.hH,4294967564,B.hI,4294967566,B.pG,4294967567,B.pH,4294967568,B.pI,4294967569,B.pJ,4294968065,B.bV,4294968066,B.bD,4294968067,B.bE,4294968068,B.bW,4294968069,B.d2,4294968070,B.d3,4294968071,B.eM,4294968072,B.eN,4294968321,B.kM,4294968322,B.pK,4294968323,B.pL,4294968324,B.pM,4294968325,B.pN,4294968326,B.pO,4294968327,B.kN,4294968328,B.pP,4294968329,B.pQ,4294968330,B.pR,4294968577,B.pS,4294968578,B.pT,4294968579,B.pU,4294968580,B.pV,4294968581,B.pW,4294968582,B.pX,4294968583,B.pY,4294968584,B.pZ,4294968585,B.q_,4294968586,B.q0,4294968587,B.q1,4294968588,B.q2,4294968589,B.q3,4294968590,B.q4,4294968833,B.q5,4294968834,B.q6,4294968835,B.q7,4294968836,B.q8,4294968837,B.q9,4294968838,B.qa,4294968839,B.qb,4294968840,B.qc,4294968841,B.qd,4294968842,B.qe,4294968843,B.qf,4294969089,B.qg,4294969090,B.qh,4294969091,B.qi,4294969092,B.qj,4294969093,B.qk,4294969094,B.ql,4294969095,B.qm,4294969096,B.qn,4294969097,B.qo,4294969098,B.qp,4294969099,B.qq,4294969100,B.qr,4294969101,B.qs,4294969102,B.qt,4294969103,B.qu,4294969104,B.qv,4294969105,B.qw,4294969106,B.qx,4294969107,B.qy,4294969108,B.qz,4294969109,B.qA,4294969110,B.qB,4294969111,B.qC,4294969112,B.qD,4294969113,B.qE,4294969114,B.qF,4294969115,B.qG,4294969116,B.qH,4294969117,B.qI,4294969345,B.qJ,4294969346,B.qK,4294969347,B.qL,4294969348,B.qM,4294969349,B.qN,4294969350,B.qO,4294969351,B.qP,4294969352,B.qQ,4294969353,B.qR,4294969354,B.qS,4294969355,B.qT,4294969356,B.qU,4294969357,B.qV,4294969358,B.qW,4294969359,B.qX,4294969360,B.qY,4294969361,B.qZ,4294969362,B.r_,4294969363,B.r0,4294969364,B.r1,4294969365,B.r2,4294969366,B.r3,4294969367,B.r4,4294969368,B.r5,4294969601,B.r6,4294969602,B.r7,4294969603,B.r8,4294969604,B.r9,4294969605,B.ra,4294969606,B.rb,4294969607,B.rc,4294969608,B.rd,4294969857,B.re,4294969858,B.rf,4294969859,B.rg,4294969860,B.rh,4294969861,B.ri,4294969863,B.rj,4294969864,B.rk,4294969865,B.rl,4294969866,B.rm,4294969867,B.rn,4294969868,B.ro,4294969869,B.rp,4294969870,B.rq,4294969871,B.rr,4294969872,B.rs,4294969873,B.rt,4294970113,B.ru,4294970114,B.rv,4294970115,B.rw,4294970116,B.rx,4294970117,B.ry,4294970118,B.rz,4294970119,B.rA,4294970120,B.rB,4294970121,B.rC,4294970122,B.rD,4294970123,B.rE,4294970124,B.rF,4294970125,B.rG,4294970126,B.rH,4294970127,B.rI,4294970369,B.rJ,4294970370,B.rK,4294970371,B.rL,4294970372,B.rM,4294970373,B.rN,4294970374,B.rO,4294970375,B.rP,4294970625,B.rQ,4294970626,B.rR,4294970627,B.rS,4294970628,B.rT,4294970629,B.rU,4294970630,B.rV,4294970631,B.rW,4294970632,B.rX,4294970633,B.rY,4294970634,B.rZ,4294970635,B.t_,4294970636,B.t0,4294970637,B.t1,4294970638,B.t2,4294970639,B.t3,4294970640,B.t4,4294970641,B.t5,4294970642,B.t6,4294970643,B.t7,4294970644,B.t8,4294970645,B.t9,4294970646,B.ta,4294970647,B.tb,4294970648,B.tc,4294970649,B.td,4294970650,B.te,4294970651,B.tf,4294970652,B.tg,4294970653,B.th,4294970654,B.ti,4294970655,B.tj,4294970656,B.tk,4294970657,B.tl,4294970658,B.tm,4294970659,B.tn,4294970660,B.to,4294970661,B.tp,4294970662,B.tq,4294970663,B.tr,4294970664,B.ts,4294970665,B.tt,4294970666,B.tu,4294970667,B.tv,4294970668,B.tw,4294970669,B.tx,4294970670,B.ty,4294970671,B.tz,4294970672,B.tA,4294970673,B.tB,4294970674,B.tC,4294970675,B.tD,4294970676,B.tE,4294970677,B.tF,4294970678,B.tG,4294970679,B.tH,4294970680,B.tI,4294970681,B.tJ,4294970682,B.tK,4294970683,B.tL,4294970684,B.tM,4294970685,B.tN,4294970686,B.tO,4294970687,B.tP,4294970688,B.tQ,4294970689,B.tR,4294970690,B.tS,4294970691,B.tT,4294970692,B.tU,4294970693,B.tV,4294970694,B.tW,4294970695,B.tX,4294970696,B.tY,4294970697,B.tZ,4294970698,B.u_,4294970699,B.u0,4294970700,B.u1,4294970701,B.u2,4294970702,B.u3,4294970703,B.u4,4294970704,B.u5,4294970705,B.u6,4294970706,B.u7,4294970707,B.u8,4294970708,B.u9,4294970709,B.ua,4294970710,B.ub,4294970711,B.uc,4294970712,B.ud,4294970713,B.ue,4294970714,B.uf,4294970715,B.ug,4294970882,B.uh,4294970884,B.ui,4294970885,B.uj,4294970886,B.uk,4294970887,B.ul,4294970888,B.um,4294970889,B.un,4294971137,B.uo,4294971138,B.up,4294971393,B.uq,4294971394,B.ur,4294971395,B.us,4294971396,B.ut,4294971397,B.uu,4294971398,B.uv,4294971399,B.uw,4294971400,B.ux,4294971401,B.uy,4294971402,B.uz,4294971403,B.uA,4294971649,B.uB,4294971650,B.uC,4294971651,B.uD,4294971652,B.uE,4294971653,B.uF,4294971654,B.uG,4294971655,B.uH,4294971656,B.uI,4294971657,B.uJ,4294971658,B.uK,4294971659,B.uL,4294971660,B.uM,4294971661,B.uN,4294971662,B.uO,4294971663,B.uP,4294971664,B.uQ,4294971665,B.uR,4294971666,B.uS,4294971667,B.uT,4294971668,B.uU,4294971669,B.uV,4294971670,B.uW,4294971671,B.uX,4294971672,B.uY,4294971673,B.uZ,4294971674,B.v_,4294971675,B.v0,4294971905,B.v1,4294971906,B.v2,8589934592,B.RR,8589934593,B.RS,8589934594,B.RT,8589934595,B.RU,8589934608,B.RV,8589934609,B.RW,8589934610,B.RX,8589934611,B.RY,8589934612,B.RZ,8589934624,B.S_,8589934625,B.S0,8589934626,B.S1,8589934848,B.eO,8589934849,B.hJ,8589934850,B.cC,8589934851,B.d4,8589934852,B.eP,8589934853,B.hK,8589934854,B.eQ,8589934855,B.hL,8589935088,B.S2,8589935090,B.S3,8589935092,B.S4,8589935094,B.S5,8589935117,B.kO,8589935144,B.S6,8589935145,B.S7,8589935146,B.vh,8589935147,B.vi,8589935148,B.S8,8589935149,B.vj,8589935150,B.kP,8589935151,B.vk,8589935152,B.kQ,8589935153,B.kR,8589935154,B.kS,8589935155,B.kT,8589935156,B.kU,8589935157,B.kV,8589935158,B.kW,8589935159,B.kX,8589935160,B.kY,8589935161,B.kZ,8589935165,B.S9,8589935361,B.Sa,8589935362,B.Sb,8589935363,B.Sc,8589935364,B.Sd,8589935365,B.Se,8589935366,B.Sf,8589935367,B.Sg,8589935368,B.Sh,8589935369,B.Si,8589935370,B.Sj,8589935371,B.Sk,8589935372,B.Sl,8589935373,B.Sm,8589935374,B.Sn,8589935375,B.So,8589935376,B.Sp,8589935377,B.Sq,8589935378,B.Sr,8589935379,B.Ss,8589935380,B.St,8589935381,B.Su,8589935382,B.Sv,8589935383,B.Sw,8589935384,B.Sx,8589935385,B.Sy,8589935386,B.Sz,8589935387,B.SA,8589935388,B.SB,8589935389,B.SC,8589935390,B.SD,8589935391,B.SE],A.a6("bz")) +B.dK=new A.pa(0,"canvas") +B.hT=new A.pa(1,"card") +B.TU=new A.pa(2,"circle") +B.l3=new A.pa(3,"button") +B.hU=new A.pa(4,"transparency") +B.dT=new A.aC(2,2) +B.jf=new A.cl(B.dT,B.dT,B.dT,B.dT) +B.Tn=new A.bz([B.dK,null,B.hT,B.jf,B.TU,null,B.l3,B.jf,B.hU,null],A.a6("bz")) +B.Us={matrix:0,translate:1,scale:2,rotate:3,skewX:4,skewY:5} +B.To=new A.bs(B.Us,[A.b7s(),A.b7x(),A.b7u(),A.b7t(),A.b7v(),A.b7w()],A.a6("bs,jY)>")) +B.vs=new A.bs(B.bG,[],A.a6("bs")) +B.Tr=new A.bs(B.bG,[],A.a6("bs")) +B.hN=new A.bs(B.bG,[],A.a6("bs")) +B.vr=new A.bs(B.bG,[],A.a6("bs>")) +B.vt=new A.bs(B.bG,[],A.a6("bs")) +B.vq=new A.bs(B.bG,[],A.a6("bs")) +B.Tq=new A.bs(B.bG,[],A.a6("bs")) +B.vu=new A.bs(B.bG,[],A.a6("bs>")) +B.a71=new A.zw(2,"up") +B.a5x=new A.kQ(B.a71) +B.a72=new A.zw(3,"down") +B.a5y=new A.kQ(B.a72) +B.Ts=new A.bz([B.fn,B.a5x,B.fo,B.a5y,B.dX,B.Bs,B.dY,B.Br],t.Fp) +B.lJ=new A.aW(B.bV,!1,!1,!0,!1) +B.lG=new A.aW(B.bD,!1,!1,!0,!1) +B.lH=new A.aW(B.bE,!1,!1,!0,!1) +B.lI=new A.aW(B.bW,!1,!1,!0,!1) +B.Al=new A.aW(B.bV,!1,!1,!1,!0) +B.Ai=new A.aW(B.bD,!1,!1,!1,!0) +B.Aj=new A.aW(B.bE,!1,!1,!1,!0) +B.Ak=new A.aW(B.bW,!1,!1,!1,!0) +B.lF=new A.aW(B.eN,!1,!0,!1,!1) +B.lK=new A.aW(B.eM,!1,!0,!1,!1) +B.is=new A.aW(B.d2,!1,!0,!1,!1) +B.ir=new A.aW(B.d3,!1,!0,!1,!1) +B.Ae=new A.aW(B.bD,!0,!1,!1,!1) +B.Af=new A.aW(B.bE,!0,!1,!1,!1) +B.Ag=new A.aW(B.bD,!0,!0,!1,!1) +B.Ah=new A.aW(B.bE,!0,!0,!1,!1) +B.iq=new A.aW(B.d2,!1,!1,!1,!1) +B.ip=new A.aW(B.d3,!1,!1,!1,!1) +B.An=new A.aW(B.d2,!0,!1,!1,!1) +B.Am=new A.aW(B.d3,!0,!1,!1,!1) +B.Tt=new A.bz([B.lJ,B.B,B.lG,B.B,B.lH,B.B,B.lI,B.B,B.Al,B.B,B.Ai,B.B,B.Aj,B.B,B.Ak,B.B,B.lF,B.B,B.lK,B.B,B.is,B.B,B.ir,B.B,B.fo,B.B,B.dX,B.B,B.dY,B.B,B.fn,B.B,B.Ae,B.B,B.Af,B.B,B.Ag,B.B,B.Ah,B.B,B.fl,B.B,B.fm,B.B,B.iq,B.B,B.ip,B.B,B.An,B.B,B.Am,B.B,B.it,B.B,B.io,B.B],t.Fp) +B.Uq={in:0,iw:1,ji:2,jw:3,mo:4,aam:5,adp:6,aue:7,ayx:8,bgm:9,bjd:10,ccq:11,cjr:12,cka:13,cmk:14,coy:15,cqu:16,drh:17,drw:18,gav:19,gfx:20,ggn:21,gti:22,guv:23,hrr:24,ibi:25,ilw:26,jeg:27,kgc:28,kgh:29,koj:30,krm:31,ktr:32,kvs:33,kwq:34,kxe:35,kzj:36,kzt:37,lii:38,lmm:39,meg:40,mst:41,mwj:42,myt:43,nad:44,ncp:45,nnx:46,nts:47,oun:48,pcr:49,pmc:50,pmu:51,ppa:52,ppr:53,pry:54,puz:55,sca:56,skk:57,tdu:58,thc:59,thx:60,tie:61,tkk:62,tlw:63,tmp:64,tne:65,tnf:66,tsf:67,uok:68,xba:69,xia:70,xkh:71,xsj:72,ybd:73,yma:74,ymt:75,yos:76,yuu:77} +B.bX=new A.bs(B.Uq,["id","he","yi","jv","ro","aas","dz","ktz","nun","bcg","drl","rki","mom","cmr","xch","pij","quh","khk","prs","dev","vaj","gvr","nyc","duz","jal","opa","gal","oyb","tdf","kml","kwv","bmf","dtp","gdj","yam","tvd","dtp","dtp","raq","rmx","cir","mry","vaj","mry","xny","kdz","ngv","pij","vaj","adx","huw","phr","bfy","lcq","prt","pub","hle","oyb","dtp","tpo","oyb","ras","twm","weo","tyj","kak","prs","taj","ema","cax","acn","waw","suj","rki","lrr","mtm","zom","yug"],t.li) +B.Um={Abort:0,Again:1,AltLeft:2,AltRight:3,ArrowDown:4,ArrowLeft:5,ArrowRight:6,ArrowUp:7,AudioVolumeDown:8,AudioVolumeMute:9,AudioVolumeUp:10,Backquote:11,Backslash:12,Backspace:13,BracketLeft:14,BracketRight:15,BrightnessDown:16,BrightnessUp:17,BrowserBack:18,BrowserFavorites:19,BrowserForward:20,BrowserHome:21,BrowserRefresh:22,BrowserSearch:23,BrowserStop:24,CapsLock:25,Comma:26,ContextMenu:27,ControlLeft:28,ControlRight:29,Convert:30,Copy:31,Cut:32,Delete:33,Digit0:34,Digit1:35,Digit2:36,Digit3:37,Digit4:38,Digit5:39,Digit6:40,Digit7:41,Digit8:42,Digit9:43,DisplayToggleIntExt:44,Eject:45,End:46,Enter:47,Equal:48,Escape:49,Esc:50,F1:51,F10:52,F11:53,F12:54,F13:55,F14:56,F15:57,F16:58,F17:59,F18:60,F19:61,F2:62,F20:63,F21:64,F22:65,F23:66,F24:67,F3:68,F4:69,F5:70,F6:71,F7:72,F8:73,F9:74,Find:75,Fn:76,FnLock:77,GameButton1:78,GameButton10:79,GameButton11:80,GameButton12:81,GameButton13:82,GameButton14:83,GameButton15:84,GameButton16:85,GameButton2:86,GameButton3:87,GameButton4:88,GameButton5:89,GameButton6:90,GameButton7:91,GameButton8:92,GameButton9:93,GameButtonA:94,GameButtonB:95,GameButtonC:96,GameButtonLeft1:97,GameButtonLeft2:98,GameButtonMode:99,GameButtonRight1:100,GameButtonRight2:101,GameButtonSelect:102,GameButtonStart:103,GameButtonThumbLeft:104,GameButtonThumbRight:105,GameButtonX:106,GameButtonY:107,GameButtonZ:108,Help:109,Home:110,Hyper:111,Insert:112,IntlBackslash:113,IntlRo:114,IntlYen:115,KanaMode:116,KeyA:117,KeyB:118,KeyC:119,KeyD:120,KeyE:121,KeyF:122,KeyG:123,KeyH:124,KeyI:125,KeyJ:126,KeyK:127,KeyL:128,KeyM:129,KeyN:130,KeyO:131,KeyP:132,KeyQ:133,KeyR:134,KeyS:135,KeyT:136,KeyU:137,KeyV:138,KeyW:139,KeyX:140,KeyY:141,KeyZ:142,KeyboardLayoutSelect:143,Lang1:144,Lang2:145,Lang3:146,Lang4:147,Lang5:148,LaunchApp1:149,LaunchApp2:150,LaunchAssistant:151,LaunchControlPanel:152,LaunchMail:153,LaunchScreenSaver:154,MailForward:155,MailReply:156,MailSend:157,MediaFastForward:158,MediaPause:159,MediaPlay:160,MediaPlayPause:161,MediaRecord:162,MediaRewind:163,MediaSelect:164,MediaStop:165,MediaTrackNext:166,MediaTrackPrevious:167,MetaLeft:168,MetaRight:169,MicrophoneMuteToggle:170,Minus:171,NonConvert:172,NumLock:173,Numpad0:174,Numpad1:175,Numpad2:176,Numpad3:177,Numpad4:178,Numpad5:179,Numpad6:180,Numpad7:181,Numpad8:182,Numpad9:183,NumpadAdd:184,NumpadBackspace:185,NumpadClear:186,NumpadClearEntry:187,NumpadComma:188,NumpadDecimal:189,NumpadDivide:190,NumpadEnter:191,NumpadEqual:192,NumpadMemoryAdd:193,NumpadMemoryClear:194,NumpadMemoryRecall:195,NumpadMemoryStore:196,NumpadMemorySubtract:197,NumpadMultiply:198,NumpadParenLeft:199,NumpadParenRight:200,NumpadSubtract:201,Open:202,PageDown:203,PageUp:204,Paste:205,Pause:206,Period:207,Power:208,PrintScreen:209,PrivacyScreenToggle:210,Props:211,Quote:212,Resume:213,ScrollLock:214,Select:215,SelectTask:216,Semicolon:217,ShiftLeft:218,ShiftRight:219,ShowAllWindows:220,Slash:221,Sleep:222,Space:223,Super:224,Suspend:225,Tab:226,Turbo:227,Undo:228,WakeUp:229,ZoomToggle:230} +B.vv=new A.bs(B.Um,[B.yw,B.yc,B.dP,B.dR,B.xC,B.xB,B.xA,B.xD,B.yk,B.yi,B.yj,B.xc,B.x9,B.x2,B.x7,B.x8,B.yM,B.yL,B.z6,B.za,B.z7,B.z5,B.z9,B.z4,B.z8,B.d7,B.xd,B.xV,B.dN,B.f5,B.yp,B.yf,B.ye,B.xx,B.x0,B.wS,B.wT,B.wU,B.wV,B.wW,B.wX,B.wY,B.wZ,B.x_,B.yK,B.yV,B.xy,B.x1,B.x6,B.la,B.la,B.xg,B.xp,B.xq,B.xr,B.xY,B.xZ,B.y_,B.y0,B.y1,B.y2,B.y3,B.xh,B.y4,B.y5,B.y6,B.y7,B.y8,B.xi,B.xj,B.xk,B.xl,B.xm,B.xn,B.xo,B.yh,B.f4,B.vS,B.vY,B.w6,B.w7,B.w8,B.w9,B.wa,B.wb,B.wc,B.vZ,B.w_,B.w0,B.w1,B.w2,B.w3,B.w4,B.w5,B.wd,B.we,B.wf,B.wg,B.wh,B.wi,B.wj,B.wk,B.wl,B.wm,B.wn,B.wo,B.wp,B.wq,B.wr,B.ya,B.xv,B.vQ,B.xu,B.xU,B.ym,B.yo,B.yn,B.ws,B.wt,B.wu,B.wv,B.ww,B.wx,B.wy,B.wz,B.wA,B.wB,B.wC,B.wD,B.wE,B.wF,B.wG,B.wH,B.wI,B.wJ,B.wK,B.wL,B.wM,B.wN,B.wO,B.wP,B.wQ,B.wR,B.zf,B.yr,B.ys,B.yt,B.yu,B.yv,B.z_,B.yZ,B.z3,B.z0,B.yY,B.z2,B.zd,B.zc,B.ze,B.yQ,B.yO,B.yN,B.yW,B.yP,B.yR,B.yX,B.yU,B.yS,B.yT,B.dQ,B.f7,B.vX,B.x5,B.yq,B.hY,B.xS,B.xJ,B.xK,B.xL,B.xM,B.xN,B.xO,B.xP,B.xQ,B.xR,B.xH,B.yA,B.yG,B.yH,B.yl,B.xT,B.xE,B.xI,B.xX,B.yE,B.yD,B.yC,B.yB,B.yF,B.xF,B.yy,B.yz,B.xG,B.y9,B.xz,B.xw,B.yg,B.xt,B.xe,B.xW,B.xs,B.vW,B.yx,B.xb,B.vU,B.hX,B.yb,B.z1,B.xa,B.dO,B.f6,B.zg,B.xf,B.yI,B.x4,B.vR,B.vT,B.x3,B.vV,B.yd,B.yJ,B.zb],A.a6("bs")) +B.Ul={svg:0,g:1,a:2,use:3,symbol:4,mask:5,pattern:6,radialGradient:7,linearGradient:8,clipPath:9,image:10,text:11,tspan:12} +B.Tu=new A.bs(B.Ul,[A.b7j(),A.aRg(),A.aRg(),A.b7k(),A.aRh(),A.aRh(),A.b7h(),A.b7i(),A.b7g(),A.b7e(),A.b7f(),A.aRi(),A.aRi()],A.a6("bs")) +B.Un={KeyA:0,KeyB:1,KeyC:2,KeyD:3,KeyE:4,KeyF:5,KeyG:6,KeyH:7,KeyI:8,KeyJ:9,KeyK:10,KeyL:11,KeyM:12,KeyN:13,KeyO:14,KeyP:15,KeyQ:16,KeyR:17,KeyS:18,KeyT:19,KeyU:20,KeyV:21,KeyW:22,KeyX:23,KeyY:24,KeyZ:25,Digit1:26,Digit2:27,Digit3:28,Digit4:29,Digit5:30,Digit6:31,Digit7:32,Digit8:33,Digit9:34,Digit0:35,Minus:36,Equal:37,BracketLeft:38,BracketRight:39,Backslash:40,Semicolon:41,Quote:42,Backquote:43,Comma:44,Period:45,Slash:46} +B.l1=new A.bs(B.Un,["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","1","2","3","4","5","6","7","8","9","0","-","=","[","]","\\",";","'","`",",",".","/"],t.li) +B.Ut={png:0,jpeg:1,jpg:2,webp:3,gif:4,bmp:5} +B.O6=new A.oP(0,"png") +B.p2=new A.oP(1,"jpeg") +B.O7=new A.oP(2,"webp") +B.O8=new A.oP(3,"gif") +B.O9=new A.oP(4,"bmp") +B.Tv=new A.bs(B.Ut,[B.O6,B.p2,B.p2,B.O7,B.O8,B.O9],A.a6("bs")) +B.P7=A.a(s([42,null,null,8589935146]),t.Z) +B.P8=A.a(s([43,null,null,8589935147]),t.Z) +B.P9=A.a(s([45,null,null,8589935149]),t.Z) +B.Pa=A.a(s([46,null,null,8589935150]),t.Z) +B.Pb=A.a(s([47,null,null,8589935151]),t.Z) +B.Pc=A.a(s([48,null,null,8589935152]),t.Z) +B.Pd=A.a(s([49,null,null,8589935153]),t.Z) +B.Pl=A.a(s([50,null,null,8589935154]),t.Z) +B.Pm=A.a(s([51,null,null,8589935155]),t.Z) +B.Pn=A.a(s([52,null,null,8589935156]),t.Z) +B.Po=A.a(s([53,null,null,8589935157]),t.Z) +B.Pp=A.a(s([54,null,null,8589935158]),t.Z) +B.Pq=A.a(s([55,null,null,8589935159]),t.Z) +B.Pr=A.a(s([56,null,null,8589935160]),t.Z) +B.Ps=A.a(s([57,null,null,8589935161]),t.Z) +B.PH=A.a(s([8589934852,8589934852,8589934853,null]),t.Z) +B.OX=A.a(s([4294967555,null,4294967555,null]),t.Z) +B.OY=A.a(s([4294968065,null,null,8589935154]),t.Z) +B.OZ=A.a(s([4294968066,null,null,8589935156]),t.Z) +B.P_=A.a(s([4294968067,null,null,8589935158]),t.Z) +B.P0=A.a(s([4294968068,null,null,8589935160]),t.Z) +B.P5=A.a(s([4294968321,null,null,8589935157]),t.Z) +B.PI=A.a(s([8589934848,8589934848,8589934849,null]),t.Z) +B.OW=A.a(s([4294967423,null,null,8589935150]),t.Z) +B.P1=A.a(s([4294968069,null,null,8589935153]),t.Z) +B.OV=A.a(s([4294967309,null,null,8589935117]),t.Z) +B.P2=A.a(s([4294968070,null,null,8589935159]),t.Z) +B.P6=A.a(s([4294968327,null,null,8589935152]),t.Z) +B.PJ=A.a(s([8589934854,8589934854,8589934855,null]),t.Z) +B.P3=A.a(s([4294968071,null,null,8589935155]),t.Z) +B.P4=A.a(s([4294968072,null,null,8589935161]),t.Z) +B.PK=A.a(s([8589934850,8589934850,8589934851,null]),t.Z) +B.vw=new A.bz(["*",B.P7,"+",B.P8,"-",B.P9,".",B.Pa,"/",B.Pb,"0",B.Pc,"1",B.Pd,"2",B.Pl,"3",B.Pm,"4",B.Pn,"5",B.Po,"6",B.Pp,"7",B.Pq,"8",B.Pr,"9",B.Ps,"Alt",B.PH,"AltGraph",B.OX,"ArrowDown",B.OY,"ArrowLeft",B.OZ,"ArrowRight",B.P_,"ArrowUp",B.P0,"Clear",B.P5,"Control",B.PI,"Delete",B.OW,"End",B.P1,"Enter",B.OV,"Home",B.P2,"Insert",B.P6,"Meta",B.PJ,"PageDown",B.P3,"PageUp",B.P4,"Shift",B.PK],A.a6("bz>")) +B.QU=A.a(s([B.pB,null,null,B.vh]),t.L) +B.QV=A.a(s([B.v3,null,null,B.vi]),t.L) +B.QW=A.a(s([B.v4,null,null,B.vj]),t.L) +B.QX=A.a(s([B.v5,null,null,B.kP]),t.L) +B.QY=A.a(s([B.v6,null,null,B.vk]),t.L) +B.PQ=A.a(s([B.v7,null,null,B.kQ]),t.L) +B.PR=A.a(s([B.v8,null,null,B.kR]),t.L) +B.PS=A.a(s([B.v9,null,null,B.kS]),t.L) +B.PT=A.a(s([B.va,null,null,B.kT]),t.L) +B.PU=A.a(s([B.vb,null,null,B.kU]),t.L) +B.PV=A.a(s([B.vc,null,null,B.kV]),t.L) +B.PW=A.a(s([B.vd,null,null,B.kW]),t.L) +B.PX=A.a(s([B.ve,null,null,B.kX]),t.L) +B.Rb=A.a(s([B.vf,null,null,B.kY]),t.L) +B.Rc=A.a(s([B.vg,null,null,B.kZ]),t.L) +B.QN=A.a(s([B.eP,B.eP,B.hK,null]),t.L) +B.Rd=A.a(s([B.hG,null,B.hG,null]),t.L) +B.Q1=A.a(s([B.bV,null,null,B.kS]),t.L) +B.Q2=A.a(s([B.bD,null,null,B.kU]),t.L) +B.Q3=A.a(s([B.bE,null,null,B.kW]),t.L) +B.Qg=A.a(s([B.bW,null,null,B.kY]),t.L) +B.QI=A.a(s([B.kM,null,null,B.kV]),t.L) +B.QO=A.a(s([B.eO,B.eO,B.hJ,null]),t.L) +B.PN=A.a(s([B.be,null,null,B.kP]),t.L) +B.Q4=A.a(s([B.d2,null,null,B.kR]),t.L) +B.R_=A.a(s([B.hF,null,null,B.kO]),t.L) +B.Q5=A.a(s([B.d3,null,null,B.kX]),t.L) +B.QJ=A.a(s([B.kN,null,null,B.kQ]),t.L) +B.QP=A.a(s([B.eQ,B.eQ,B.hL,null]),t.L) +B.Q6=A.a(s([B.eM,null,null,B.kT]),t.L) +B.QL=A.a(s([B.eN,null,null,B.kZ]),t.L) +B.QQ=A.a(s([B.cC,B.cC,B.d4,null]),t.L) +B.Tw=new A.bz(["*",B.QU,"+",B.QV,"-",B.QW,".",B.QX,"/",B.QY,"0",B.PQ,"1",B.PR,"2",B.PS,"3",B.PT,"4",B.PU,"5",B.PV,"6",B.PW,"7",B.PX,"8",B.Rb,"9",B.Rc,"Alt",B.QN,"AltGraph",B.Rd,"ArrowDown",B.Q1,"ArrowLeft",B.Q2,"ArrowRight",B.Q3,"ArrowUp",B.Qg,"Clear",B.QI,"Control",B.QO,"Delete",B.PN,"End",B.Q4,"Enter",B.R_,"Home",B.Q5,"Insert",B.QJ,"Meta",B.QP,"PageDown",B.Q6,"PageUp",B.QL,"Shift",B.QQ],A.a6("bz>")) +B.Uk={multiply:0,screen:1,overlay:2,darken:3,lighten:4,"color-dodge":5,"color-burn":6,"hard-light":7,"soft-light":8,difference:9,exclusion:10,hue:11,saturation:12,color:13,luminosity:14} +B.Cz=new A.eM(24,"multiply") +B.Cg=new A.eM(14,"screen") +B.Ci=new A.eM(15,"overlay") +B.Ck=new A.eM(16,"darken") +B.Cm=new A.eM(17,"lighten") +B.Co=new A.eM(18,"colorDodge") +B.Cq=new A.eM(19,"colorBurn") +B.Cs=new A.eM(20,"hardLight") +B.Cu=new A.eM(21,"softLight") +B.Cw=new A.eM(22,"difference") +B.Cy=new A.eM(23,"exclusion") +B.CB=new A.eM(25,"hue") +B.CC=new A.eM(26,"saturation") +B.CE=new A.eM(27,"color") +B.CG=new A.eM(28,"luminosity") +B.Tx=new A.bs(B.Uk,[B.Cz,B.Cg,B.Ci,B.Ck,B.Cm,B.Co,B.Cq,B.Cs,B.Cu,B.Cw,B.Cy,B.CB,B.CC,B.CE,B.CG],A.a6("bs")) +B.Tz=new A.Da(null,null,null,null,null,null,null,null) +B.IH=new A.m(4293848814) +B.HN=new A.m(4290624957) +B.Td=new A.bz([50,B.nQ,100,B.h0,200,B.IH,300,B.nL,350,B.dB,400,B.HN,500,B.nG,600,B.ei,700,B.h_,800,B.cb,850,B.jy,900,B.nv],t.o) +B.TO=new A.dP(B.Td,4288585374) +B.eT=new A.cr(0,t.QL) +B.TP=new A.cr(2,t.QL) +B.hO=new A.cr(24,t.QL) +B.bF=new A.cr(B.n,t.h9) +B.TQ=new A.cr(B.n,t.Il) +B.Aw=new A.G(40,40) +B.hP=new A.cr(B.Aw,t.iL) +B.XY=new A.G(64,40) +B.TR=new A.cr(B.XY,t.iL) +B.AG=new A.hy(B.r) +B.eU=new A.cr(B.AG,t.kU) +B.hQ=new A.cr(B.k_,t.Ak) +B.Y0=new A.G(1/0,1/0) +B.eV=new A.cr(B.Y0,t.iL) +B.I=new A.cF(0,"hovered") +B.N=new A.cF(1,"focused") +B.L=new A.cF(2,"pressed") +B.hR=new A.cF(3,"dragged") +B.G=new A.cF(4,"selected") +B.vx=new A.cF(5,"scrolledUnder") +B.P=new A.cF(6,"disabled") +B.hS=new A.cF(7,"error") +B.TS=new A.tj(0,"padded") +B.TT=new A.tj(1,"shrinkWrap") +B.TV=new A.Qo(null) +B.TW=new A.Df(null) +B.TX=new A.wW(null) +B.TY=new A.jq("popRoute",null) +B.cq=new A.apf() +B.TZ=new A.tp("dev.fluttercommunity.plus/package_info",B.cq) +B.vy=new A.tp("plugins.flutter.io/url_launcher",B.cq) +B.U_=new A.tp("flutter/service_worker",B.cq) +B.U1=new A.ts(0,"clipRect") +B.U2=new A.ts(1,"clipRRect") +B.U3=new A.ts(2,"clipPath") +B.U4=new A.ts(3,"transform") +B.U5=new A.ts(4,"opacity") +B.U6=new A.QA(null) +B.l5=new A.ais(3,"go") +B.U8=new A.Du(null,null,null,null,null,null,null,null,null,null) +B.U9=new A.Dv(null,null,null,null,null,null,null,null,null,null) +B.f2=new A.ait(0,"traditional") +B.Ua=new A.tu(!0) +B.Ub=new A.Dw(null,null,null,null,null,null,null,null,null,null,null,null,null) +B.vF=new A.fU(B.e,B.e) +B.Uz=new A.k(0,20) +B.UA=new A.k(0,26) +B.UC=new A.k(0,8) +B.UD=new A.k(11,-4) +B.UE=new A.k(14,14) +B.UG=new A.k(1,3) +B.UI=new A.k(22,0) +B.UJ=new A.k(3,0) +B.UK=new A.k(3,3) +B.UL=new A.k(3,-3) +B.UM=new A.k(6,6) +B.UN=new A.k(5,10.5) +B.vH=new A.k(9,9) +B.UP=new A.k(14.4,9) +B.a7r=new A.k(0,-0.005) +B.UT=new A.k(-0.3333333333333333,0) +B.UV=new A.k(2.6999999999999997,8.1) +B.UW=new A.k(1/0,1/0) +B.UX=new A.k(3.6,9) +B.vI=new A.k(7.2,12.6) +B.V0=new A.k(1/0,0) +B.V4=new A.k(-3,0) +B.V5=new A.k(-3,3) +B.V6=new A.k(-3,-3) +B.V8=new A.k(15.299999999999999,4.5) +B.aS=new A.nb(0,"iOs") +B.hV=new A.nb(1,"android") +B.l6=new A.nb(2,"linux") +B.vK=new A.nb(3,"windows") +B.bZ=new A.nb(4,"macOs") +B.V9=new A.nb(5,"unknown") +B.Va=new A.kr("flutter/spellcheck",B.cq) +B.fO=new A.ag5() +B.vL=new A.kr("flutter/textinput",B.fO) +B.Vb=new A.kr("flutter/keyboard",B.cq) +B.vM=new A.kr("flutter/menu",B.cq) +B.bg=new A.kr("flutter/platform",B.fO) +B.l7=new A.kr("flutter/restoration",B.cq) +B.Vc=new A.kr("flutter/mousecursor",B.cq) +B.Vd=new A.kr("flutter/undomanager",B.fO) +B.hW=new A.kr("flutter/navigation",B.fO) +B.Ve=new A.x_(0,null) +B.l8=new A.QT(0,"portrait") +B.l9=new A.QT(1,"landscape") +B.Vf=new A.DI(null) +B.Lo=new A.f8(6,0,0,0) +B.Vh=new A.bH(B.Lo,null,null) +B.Lq=new A.f8(8,0,0,0) +B.Vg=new A.bH(B.Lq,null,null) +B.a4=new A.Rf(0,"fill") +B.Vi=new A.Rg(0,"fill") +B.D=new A.Rf(1,"stroke") +B.Vj=new A.Rg(1,"stroke") +B.vN=new A.pi(1/0) +B.cE=new A.x5(0,"move") +B.bh=new A.x5(1,"line") +B.b5=new A.x5(2,"cubic") +B.bI=new A.Rl(0,"nonZero") +B.Vl=new A.Rl(1,"evenOdd") +B.vO=new A.ajb(0,"difference") +B.bi=new A.tA(0,"created") +B.ax=new A.tA(1,"active") +B.dM=new A.tA(2,"pendingRetention") +B.Vm=new A.tA(3,"pendingUpdate") +B.vP=new A.tA(4,"released") +B.Vn=new A.x9(null,A.a6("x9")) +B.W0=new A.xa(null) +B.W1=new A.xb(null) +B.W2=new A.xc(null) +B.hZ=new A.pn(0,"baseline") +B.i_=new A.pn(1,"aboveBaseline") +B.i0=new A.pn(2,"belowBaseline") +B.i1=new A.pn(3,"top") +B.cF=new A.pn(4,"bottom") +B.i2=new A.pn(5,"middle") +B.W3=new A.xd(B.Q,B.cF,null,null) +B.zi=new A.bY(0,0) +B.lb=new A.nh(0,"cancel") +B.lc=new A.nh(1,"add") +B.W4=new A.nh(2,"remove") +B.d8=new A.nh(3,"hover") +B.zj=new A.nh(4,"down") +B.f8=new A.nh(5,"move") +B.ld=new A.nh(6,"up") +B.aE=new A.lF(0,"touch") +B.bj=new A.lF(1,"mouse") +B.bu=new A.lF(2,"stylus") +B.cG=new A.lF(3,"invertedStylus") +B.b6=new A.lF(4,"trackpad") +B.c_=new A.lF(5,"unknown") +B.dS=new A.xh(0,"none") +B.W5=new A.xh(1,"scroll") +B.W6=new A.xh(3,"scale") +B.W7=new A.xh(4,"unknown") +B.W8=new A.E6(null,null,null,null,null,null,null,null,null,null,null,null) +B.le=new A.tM(0,"platformDefault") +B.zk=new A.tM(1,"inAppWebView") +B.zl=new A.tM(2,"inAppBrowserView") +B.W9=new A.tM(3,"externalApplication") +B.zm=new A.tM(4,"externalNonBrowserApplication") +B.zn=new A.kt(0,"incrementable") +B.lf=new A.kt(1,"scrollable") +B.lg=new A.kt(2,"button") +B.zo=new A.kt(3,"textField") +B.lh=new A.kt(4,"checkable") +B.zp=new A.kt(5,"image") +B.i3=new A.kt(6,"dialog") +B.li=new A.kt(7,"platformView") +B.lj=new A.kt(8,"generic") +B.Wa=new A.xl(null,null,null,null,null) +B.Wb=new A.pt("",0) +B.QD=A.a(s([]),t.yv) +B.Wc=new A.tQ(B.QD) +B.lk=new A.akj(0,"circle") +B.Wd=new A.Ef(null,null,null,null,null,null) +B.zq=new A.aC(1,1) +B.We=new A.aC(1.5,1.5) +B.QE=A.a(s([]),t.i1) +B.QF=A.a(s([]),t.zO) +B.b7=new A.xo(B.QE,B.QF) +B.ml=new A.dx('"',1,"DOUBLE_QUOTE") +B.Wf=new A.dj("",B.ml) +B.zr=new A.zq(1e5,10) +B.zs=new A.zq(1e4,100) +B.zt=new A.zq(20,5e4) +B.Wg=new A.dj(!1,null) +B.zu=new A.IR(0,0,1) +B.Wh=new A.i6(0,0,0,0) +B.Wi=new A.w(-1/0,-1/0,1/0,1/0) +B.fa=new A.w(-1e9,-1e9,1e9,1e9) +B.Wj=new A.i6(-1e9,-1e9,1e9,1e9) +B.zv=new A.xu(0,"start") +B.lm=new A.xu(1,"stable") +B.Wk=new A.xu(2,"changed") +B.Wl=new A.xu(3,"unstable") +B.cI=new A.xw(0,"identical") +B.Wm=new A.xw(1,"metadata") +B.Wn=new A.xw(2,"paint") +B.b8=new A.xw(3,"layout") +B.Wo=new A.SF(0,"raster") +B.Wp=new A.SF(1,"picture") +B.ln=new A.tY(0,"focusable") +B.zw=new A.tY(1,"tappable") +B.zx=new A.tY(2,"labelAndValue") +B.ib=new A.tY(3,"liveRegion") +B.lo=new A.tY(4,"routeName") +B.lp=new A.d8(B.H,B.r) +B.zz=new A.d8(B.jf,B.r) +B.i4=new A.aC(12,12) +B.CT=new A.cl(B.i4,B.i4,B.i4,B.i4) +B.Wq=new A.d8(B.CT,B.r) +B.CO=new A.cl(B.cH,B.cH,B.cH,B.cH) +B.zy=new A.d8(B.CO,B.r) +B.i6=new A.aC(28,28) +B.CP=new A.cl(B.i6,B.i6,B.i6,B.i6) +B.Wr=new A.d8(B.CP,B.r) +B.zA=new A.amF(0,"none") +B.lq=new A.j_("",null,null) +B.ic=new A.xD(0,"pop") +B.fb=new A.xD(1,"doNotPop") +B.zB=new A.xD(2,"bubble") +B.Ws=new A.i7(null,null) +B.Wt=new A.EZ(1333) +B.lr=new A.EZ(2222) +B.Wu=new A.T3(null,null) +B.Wv=new A.xJ(null) +B.dU=new A.u5(0,"idle") +B.Ww=new A.u5(1,"transientCallbacks") +B.Wx=new A.u5(2,"midFrameMicrotasks") +B.id=new A.u5(3,"persistentCallbacks") +B.zC=new A.u5(4,"postFrameCallbacks") +B.zD=new A.anj(0,"englishLike") +B.ie=new A.F5(0,"idle") +B.ls=new A.F5(1,"forward") +B.lt=new A.F5(2,"reverse") +B.a7s=new A.u7(0,"explicit") +B.da=new A.u7(1,"keepVisibleAtEnd") +B.db=new A.u7(2,"keepVisibleAtStart") +B.zH=new A.Tj(0,"manual") +B.WD=new A.Tj(1,"onDrag") +B.WE=new A.Fb(0,"left") +B.WF=new A.Fb(1,"right") +B.WG=new A.Fb(3,"bottom") +B.WH=new A.Fd(null,null,null,null,null,null,null,null,null,null,null,null) +B.WI=new A.Fe(null,null,null,null,null,null,null,null,null,null,null,null) +B.WJ=new A.Ff(null,null,null,null,null,null,null,null,null) +B.WK=new A.Fg(null,null) +B.bk=new A.jz(0,"tap") +B.zI=new A.jz(1,"doubleTap") +B.cJ=new A.jz(2,"longPress") +B.ii=new A.jz(3,"forcePress") +B.at=new A.jz(5,"toolbar") +B.ag=new A.jz(6,"drag") +B.lv=new A.jz(7,"scribble") +B.WL=new A.Fj(0,"startEdgeUpdate") +B.fd=new A.Fj(1,"endEdgeUpdate") +B.ij=new A.xN(0,"previousLine") +B.ik=new A.xN(1,"nextLine") +B.fe=new A.xN(2,"forward") +B.ff=new A.xN(3,"backward") +B.dV=new A.Fk(2,"none") +B.WN=new A.pD(null,null,B.dV,B.kG,!1) +B.zJ=new A.pD(null,null,B.dV,B.kG,!0) +B.aT=new A.pE(0,"next") +B.b9=new A.pE(1,"previous") +B.aU=new A.pE(2,"end") +B.lw=new A.pE(3,"pending") +B.fg=new A.pE(4,"none") +B.lx=new A.Fk(0,"uncollapsed") +B.WO=new A.Fk(1,"collapsed") +B.WP=new A.dv(1048576,"moveCursorBackwardByWord") +B.zK=new A.dv(128,"decrease") +B.WQ=new A.dv(16384,"paste") +B.fh=new A.dv(16,"scrollUp") +B.dW=new A.dv(1,"tap") +B.WR=new A.dv(2048,"setSelection") +B.WS=new A.dv(2097152,"setText") +B.WT=new A.dv(256,"showOnScreen") +B.WU=new A.dv(262144,"dismiss") +B.zL=new A.dv(2,"longPress") +B.ly=new A.dv(32768,"didGainAccessibilityFocus") +B.fi=new A.dv(32,"scrollDown") +B.WV=new A.dv(4096,"copy") +B.fj=new A.dv(4,"scrollLeft") +B.WW=new A.dv(512,"moveCursorForwardByCharacter") +B.WX=new A.dv(524288,"moveCursorForwardByWord") +B.zM=new A.dv(64,"increase") +B.lz=new A.dv(65536,"didLoseAccessibilityFocus") +B.WY=new A.dv(8192,"cut") +B.fk=new A.dv(8,"scrollRight") +B.WZ=new A.dv(1024,"moveCursorBackwardByCharacter") +B.zN=new A.cV(1024,"isObscured") +B.zO=new A.cV(1048576,"isReadOnly") +B.lA=new A.cV(128,"isEnabled") +B.zP=new A.cV(131072,"isToggled") +B.X_=new A.cV(134217728,"isExpanded") +B.zQ=new A.cV(16384,"isImage") +B.X0=new A.cV(16777216,"isKeyboardKey") +B.zR=new A.cV(16,"isTextField") +B.il=new A.cV(1,"hasCheckedState") +B.zS=new A.cV(2048,"scopesRoute") +B.zT=new A.cV(2097152,"isFocusable") +B.X1=new A.cV(256,"isInMutuallyExclusiveGroup") +B.X2=new A.cV(262144,"hasImplicitScrolling") +B.zU=new A.cV(2,"isChecked") +B.X3=new A.cV(32768,"isLiveRegion") +B.lB=new A.cV(32,"isFocused") +B.zV=new A.cV(33554432,"isCheckStateMixed") +B.zW=new A.cV(4096,"namesRoute") +B.lC=new A.cV(4194304,"isLink") +B.X4=new A.cV(4,"isSelected") +B.zX=new A.cV(512,"isHeader") +B.zY=new A.cV(524288,"isMultiline") +B.lD=new A.cV(64,"hasEnabledState") +B.zZ=new A.cV(65536,"hasToggledState") +B.X5=new A.cV(67108864,"hasExpandedState") +B.im=new A.cV(8192,"isHidden") +B.A_=new A.cV(8388608,"isSlider") +B.A0=new A.cV(8,"isButton") +B.A1=new A.nu("RenderViewport.twoPane") +B.X6=new A.nu("RenderViewport.excludeFromScrolling") +B.A2=new A.Fn(0,"idle") +B.X7=new A.Fn(1,"updating") +B.X8=new A.Fn(2,"postUpdate") +B.X9=new A.fb([B.ba,B.au,B.dg],A.a6("fb")) +B.A3=new A.fb([B.aE,B.bu,B.cG,B.b6,B.c_],t.Lu) +B.Xa=new A.fb([B.I],t.b4) +B.Uo={click:0,keyup:1,keydown:2,mouseup:3,mousedown:4,pointerdown:5,pointerup:6} +B.Xb=new A.fO(B.Uo,7,t.fF) +B.Xc=new A.fb([32,8203],t.Ih) +B.Uf={click:0,touchstart:1,touchend:2,pointerdown:3,pointermove:4,pointerup:5} +B.Xd=new A.fO(B.Uf,6,t.fF) +B.Ur={javascript:0} +B.Xe=new A.fO(B.Ur,1,t.fF) +B.Xf=new A.fb([B.cG,B.bu,B.aE,B.c_,B.b6],t.Lu) +B.Uc={"writing-mode":0,"glyph-orientation-vertical":1,"glyph-orientation-horizontal":2,direction:3,"text-anchor":4,"font-family":5,"font-style":6,"font-variant":7,"font-weight":8,"font-stretch":9,"font-size":10,"font-size-adjust":11,font:12,kerning:13,"letter-spacing":14,"word-spacing":15,fill:16,"fill-rule":17,"fill-opacity":18,stroke:19,"stroke-width":20,"stroke-linecap":21,"stroke-linejoin":22,"stroke-miterlimit":23,"stroke-dasharray":24,"stroke-dashoffset":25,"stroke-opacity":26,visibility:27,"marker-start":28,marker:29,"color-interpolation":30,"color-interpolation-filters":31,"color-rendering":32,"shape-rendering":33,"text-rendering":34,"image-rendering":35,color:36,"color-profile":37,"clip-rule":38,"pointer-events":39,cursor:40} +B.Xg=new A.fO(B.Uc,41,t.fF) +B.Xh=new A.fb([B.N],t.b4) +B.Ui={"canvaskit.js":0} +B.Xi=new A.fO(B.Ui,1,t.fF) +B.Xj=new A.fb([10,11,12,13,133,8232,8233],t.Ih) +B.Xl=new A.fO(B.bG,0,A.a6("fO")) +B.Xk=new A.fO(B.bG,0,A.a6("fO")) +B.Ug={mailto:0,tel:1,sms:2} +B.A4=new A.fO(B.Ug,3,t.fF) +B.Xm=new A.fb([B.L],t.b4) +B.Ux={serif:0,"sans-serif":1,monospace:2,cursive:3,fantasy:4,"system-ui":5,math:6,emoji:7,fangsong:8} +B.Xn=new A.fO(B.Ux,9,t.fF) +B.lE=new A.fb([B.bZ,B.l6,B.vK],A.a6("fb")) +B.ay=new A.jC(B.n,B.e,0) +B.Xo=new A.jC(B.k,B.e,8) +B.Xr=new A.aot(0,"onlyForDiscrete") +B.a6=new A.Ft(!1,0,0,0) +B.A9=new A.aW(B.bV,!1,!0,!1,!1) +B.A6=new A.aW(B.bD,!1,!0,!1,!1) +B.A7=new A.aW(B.bE,!1,!0,!1,!1) +B.A8=new A.aW(B.bW,!1,!0,!1,!1) +B.XE=new A.aW(B.bV,!1,!0,!1,!0) +B.XB=new A.aW(B.bD,!1,!0,!1,!0) +B.XC=new A.aW(B.bE,!1,!0,!1,!0) +B.XD=new A.aW(B.bW,!1,!0,!1,!0) +B.XA=new A.aW(B.bV,!0,!0,!1,!1) +B.Xz=new A.aW(B.bW,!0,!0,!1,!1) +B.XG=new A.aW(B.d2,!0,!0,!1,!1) +B.XF=new A.aW(B.d3,!0,!0,!1,!1) +B.Ad=new A.aW(B.bV,!1,!0,!0,!1) +B.Aa=new A.aW(B.bD,!1,!0,!0,!1) +B.Ab=new A.aW(B.bE,!1,!0,!0,!1) +B.Ac=new A.aW(B.bW,!1,!0,!0,!1) +B.Ar=new A.aW(B.l_,!1,!1,!1,!0) +B.At=new A.aW(B.l0,!1,!1,!1,!0) +B.Au=new A.aW(B.kJ,!1,!1,!1,!0) +B.As=new A.aW(B.kK,!1,!1,!1,!0) +B.XH=new A.aW(B.eJ,!1,!1,!1,!0) +B.XI=new A.aW(B.eJ,!1,!0,!1,!0) +B.lL=new A.aW(B.l_,!0,!1,!1,!1) +B.XL=new A.aW(B.vl,!0,!1,!1,!1) +B.Ap=new A.aW(B.l0,!0,!1,!1,!1) +B.XJ=new A.aW(B.pv,!0,!1,!1,!1) +B.XK=new A.aW(B.pw,!0,!1,!1,!1) +B.XM=new A.aW(B.px,!0,!1,!1,!1) +B.XN=new A.aW(B.py,!0,!1,!1,!1) +B.XQ=new A.aW(B.pz,!0,!1,!1,!1) +B.Aq=new A.aW(B.kJ,!0,!1,!1,!1) +B.Ao=new A.aW(B.kK,!0,!1,!1,!1) +B.XO=new A.aW(B.eJ,!0,!1,!1,!1) +B.XP=new A.aW(B.eJ,!0,!0,!1,!1) +B.XS=new A.G(1e5,1e5) +B.Av=new A.G(10,10) +B.XU=new A.G(18,18) +B.XV=new A.G(22,22) +B.XW=new A.G(34,22) +B.XX=new A.G(48,36) +B.Ax=new A.G(48,48) +B.XZ=new A.G(80,47.5) +B.Y_=new A.G(77.37,37.9) +B.aF=new A.di(0,0,null,null) +B.Ay=new A.di(18,null,null,null) +B.Y1=new A.di(28,null,null,null) +B.Y2=new A.di(32,null,null,null) +B.Y3=new A.di(36,null,null,null) +B.Y4=new A.di(38,null,null,null) +B.iu=new A.di(3.5,null,null,null) +B.Az=new A.di(4,null,null,null) +B.AA=new A.di(6,null,null,null) +B.Y5=new A.di(8,null,null,null) +B.AB=new A.di(null,10,null,null) +B.iv=new A.di(null,12,null,null) +B.Y6=new A.di(null,14,null,null) +B.AC=new A.di(null,16,null,null) +B.Y7=new A.di(null,28,null,null) +B.Y8=new A.di(null,2,null,null) +B.Y9=new A.di(null,32,null,null) +B.AD=new A.di(null,37,null,null) +B.AE=new A.di(null,38,null,null) +B.Ya=new A.di(null,8,null,null) +B.Yb=new A.TL(0,"tapAndSlide") +B.Yc=new A.TL(2,"slideOnly") +B.Yd=new A.xV(null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null) +B.ix=new A.TN(0,0,0,0,0,0,!1,!1,null,0) +B.Ye=new A.aoX(1,"enabled") +B.Yf=new A.aoY(1,"enabled") +B.a7t=new A.FE(3,"hide") +B.Yg=new A.FE(5,"timeout") +B.Yh=new A.FF(null,null,null,null,null,null,null,null,null,null,null,null,null) +B.AF=new A.TT(0,"permissive") +B.a7u=new A.TT(1,"normal") +B.Yi=new A.U4(null,null,null,null,!1) +B.Yj=new A.FJ(0,"criticallyDamped") +B.Yk=new A.FJ(1,"underDamped") +B.Yl=new A.FJ(2,"overDamped") +B.bJ=new A.U7(0,"loose") +B.Ym=new A.U7(2,"passthrough") +B.Yn=new A.kB("...",-1,"","","",-1,-1,"","...") +B.Yo=new A.kB("",-1,"","","",-1,-1,"","asynchronous suspension") +B.dc=new A.hz("") +B.Yp=new A.FP(0,"butt") +B.Yq=new A.FP(1,"round") +B.Yr=new A.FP(2,"square") +B.Ys=new A.FQ(0,"miter") +B.Yt=new A.FQ(1,"round") +B.Yu=new A.FQ(2,"bevel") +B.Yw=new A.FR(null,null,null,null,null,null,null,null,null) +B.de=new A.ya(B.d5,null,null,B.EL,null,null,B.aL,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null) +B.Yx=new A.cW(0) +B.YI=new A.cW(0) +B.YG=new A.cW(0) +B.YE=new A.cW(0) +B.YF=new A.cW(0) +B.YD=new A.cW(0) +B.YH=new A.cW(0) +B.YC=new A.cW(0) +B.Yz=new A.cW(0) +B.YB=new A.cW(0) +B.Yy=new A.cW(0) +B.YA=new A.cW(0) +B.YJ=new A.cW(1) +B.YK=new A.cW(10) +B.YL=new A.cW(11) +B.YM=new A.cW(12) +B.YN=new A.cW(13) +B.YO=new A.cW(14) +B.YP=new A.cW(15) +B.YQ=new A.cW(16) +B.YR=new A.cW(2) +B.YS=new A.cW(3) +B.YT=new A.cW(4) +B.YU=new A.cW(5) +B.YV=new A.cW(6) +B.YW=new A.cW(7) +B.YX=new A.cW(8) +B.YY=new A.cW(9) +B.df=new A.dT(0,"unknown") +B.Z4=new A.FV(null,null) +B.Z5=new A.yc(null,null,null,null,null,null,null,null,null) +B.AK=new A.lW("_clientToken") +B.Z6=new A.lW("call") +B.AL=new A.jH("text") +B.Z7=new A.Un(0,"click") +B.Z8=new A.Un(1,"alert") +B.AM=new A.lX(B.k,null,B.ad,null,null,B.ao,B.ad,null) +B.AN=new A.lX(B.k,null,B.ad,null,null,B.ad,B.ao,null) +B.Z9=new A.FY(null,null,null,null,null,null,null,null,null,null,null,null,null,null) +B.AO=new A.aq0("tap") +B.v=new A.G5(0,"alphabetic") +B.Za=new A.G7(null) +B.lY=new A.yg(3,"none") +B.AP=new A.G8(B.lY) +B.AQ=new A.yg(0,"words") +B.AR=new A.yg(1,"sentences") +B.AS=new A.yg(2,"characters") +B.Zb=new A.aq2(3,"none") +B.AT=new A.uq(0,"solid") +B.Zd=new A.uq(1,"double") +B.Ze=new A.uq(2,"dotted") +B.Zg=new A.uq(3,"dashed") +B.Zi=new A.uq(4,"wavy") +B.h=new A.nz(0) +B.AV=new A.up(0) +B.lZ=new A.nz(1) +B.Zk=new A.up(1) +B.Zl=new A.nz(2) +B.Zm=new A.up(2) +B.Zn=new A.nz(4) +B.Zo=new A.up(4) +B.m_=new A.yj(0,"character") +B.Zq=new A.yj(1,"word") +B.Zr=new A.yj(2,"line") +B.Zs=new A.yj(3,"document") +B.m0=new A.UA(0,"proportional") +B.AW=new A.Ga(B.m0) +B.Zt=new A.hA(0,"none") +B.Zu=new A.hA(1,"unspecified") +B.Zv=new A.hA(10,"route") +B.Zw=new A.hA(11,"emergencyCall") +B.AX=new A.hA(12,"newline") +B.AY=new A.hA(2,"done") +B.Zx=new A.hA(3,"go") +B.Zy=new A.hA(4,"search") +B.Zz=new A.hA(5,"send") +B.ZA=new A.hA(6,"next") +B.ZB=new A.hA(7,"previous") +B.ZC=new A.hA(8,"continueAction") +B.ZD=new A.hA(9,"join") +B.ZE=new A.Gc(0,null,null) +B.AZ=new A.Gc(1,null,null) +B.C=new A.UA(1,"even") +B.cj=new A.Ge(2,"ellipsis") +B.ZF=new A.Ge(3,"visible") +B.fs=new A.b9(0,B.m) +B.iz=new A.Gj(0,"left") +B.iA=new A.Gj(1,"right") +B.ft=new A.Gj(2,"collapsed") +B.ZG=new A.Gk(null,null,null) +B.ZH=new A.Gl(B.e,null) +B.ZI=new A.hB(0,0,B.m,!1,0,0) +B.B7=new A.p(!0,null,null,null,null,null,null,B.p,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null) +B.ZJ=new A.kF("calories",null,null,B.aP,B.B7) +B.a2y=new A.p(!0,null,null,null,null,null,null,B.ev,B.hf,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null) +B.ZK=new A.kF(" k ",null,null,B.aP,B.a2y) +B.ZL=new A.kF("App version: ",null,null,B.aP,null) +B.a_1=new A.p(!0,B.M,null,null,null,null,null,B.x,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null) +B.a_0=new A.p(!0,B.M,null,null,null,null,18,B.x,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null) +B.B_=new A.p(!1,B.dE,null,".SF Pro Text",null,null,17,B.hi,null,-0.41,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null) +B.B0=new A.p(!0,B.i,null,null,null,null,null,B.x,B.bC,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null) +B.EY=new A.m(3506372608) +B.Kg=new A.m(4294967040) +B.a_n=new A.p(!0,B.EY,null,"monospace",null,null,48,B.ev,null,null,null,null,null,null,null,null,null,B.lZ,B.Kg,B.AU,null,"fallback style; consider putting your text in a Material",null,null,null,null) +B.GB=new A.m(4285887377) +B.a_u=new A.p(!0,B.GB,null,null,null,null,12,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null) +B.a_y=new A.p(!0,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,B.lZ,null,null,null,null,null,null,null,null) +B.a_D=new A.p(!1,B.o7,null,".SF Pro Text",null,null,17,null,null,-0.41,null,null,null,null,null,null,null,B.h,null,null,null,null,null,null,null,null) +B.a0_=new A.p(!0,B.i,null,null,null,null,null,B.x,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null) +B.dj=new A.p(!0,B.i,null,null,null,null,14,B.x,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null) +B.m3=new A.p(!0,B.i,null,null,null,null,18,B.x,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null) +B.a_Z=new A.p(!0,B.i,null,null,null,null,32,B.hh,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null) +B.a0h=new A.p(!0,B.E,null,null,null,null,null,B.x,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null) +B.B1=new A.p(!0,B.E,null,null,null,null,12,B.x,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null) +B.a0g=new A.p(!0,B.E,null,null,null,null,18,B.x,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null) +B.GC=new A.m(4285893026) +B.B2=new A.p(!0,B.GC,null,null,null,null,14,B.x,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null) +B.B3=new A.p(!0,B.no,null,null,null,null,14,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null) +B.iB=new A.p(!0,null,null,null,null,null,10,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null) +B.B5=new A.p(!1,null,null,null,null,null,14,B.p,null,-0.15,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null) +B.a16=new A.p(!1,null,null,null,null,null,15,B.p,null,-0.15,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null) +B.B6=new A.p(!1,B.dE,null,".SF Pro Text",null,null,17,null,null,-0.41,null,null,null,null,null,null,null,B.h,null,null,null,null,null,null,null,null) +B.a1k=new A.p(!0,B.n,null,null,null,null,10,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null) +B.fu=new A.p(!0,B.i,null,null,null,null,10,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null) +B.dk=new A.p(!0,null,null,null,null,null,null,B.x,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null) +B.B8=new A.p(!0,null,null,null,null,null,9,B.x,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null) +B.a1Q=new A.p(!0,null,null,null,null,null,10,B.x,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null) +B.a1S=new A.p(!0,null,null,null,null,null,14,B.x,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null) +B.a1R=new A.p(!0,null,null,null,null,null,15,B.x,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null) +B.a2d=new A.p(!0,B.k,null,null,null,null,14,B.x,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null) +B.a2z=new A.p(!0,B.cR,null,null,null,null,12,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null) +B.a_e=new A.p(!0,B.R,null,".AppleSystemUIFont",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"blackRedwoodCity displayLarge",null,null,null,null) +B.a_P=new A.p(!0,B.R,null,".AppleSystemUIFont",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"blackRedwoodCity displayMedium",null,null,null,null) +B.a_f=new A.p(!0,B.R,null,".AppleSystemUIFont",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"blackRedwoodCity displaySmall",null,null,null,null) +B.a_b=new A.p(!0,B.R,null,".AppleSystemUIFont",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"blackRedwoodCity headlineLarge",null,null,null,null) +B.a0I=new A.p(!0,B.R,null,".AppleSystemUIFont",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"blackRedwoodCity headlineMedium",null,null,null,null) +B.a13=new A.p(!0,B.S,null,".AppleSystemUIFont",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"blackRedwoodCity headlineSmall",null,null,null,null) +B.a2e=new A.p(!0,B.S,null,".AppleSystemUIFont",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"blackRedwoodCity titleLarge",null,null,null,null) +B.a28=new A.p(!0,B.S,null,".AppleSystemUIFont",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"blackRedwoodCity titleMedium",null,null,null,null) +B.a2I=new A.p(!0,B.k,null,".AppleSystemUIFont",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"blackRedwoodCity titleSmall",null,null,null,null) +B.a2B=new A.p(!0,B.S,null,".AppleSystemUIFont",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"blackRedwoodCity bodyLarge",null,null,null,null) +B.a12=new A.p(!0,B.S,null,".AppleSystemUIFont",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"blackRedwoodCity bodyMedium",null,null,null,null) +B.a27=new A.p(!0,B.R,null,".AppleSystemUIFont",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"blackRedwoodCity bodySmall",null,null,null,null) +B.a19=new A.p(!0,B.S,null,".AppleSystemUIFont",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"blackRedwoodCity labelLarge",null,null,null,null) +B.a0L=new A.p(!0,B.k,null,".AppleSystemUIFont",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"blackRedwoodCity labelMedium",null,null,null,null) +B.a2q=new A.p(!0,B.k,null,".AppleSystemUIFont",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"blackRedwoodCity labelSmall",null,null,null,null) +B.a2Z=new A.dM(B.a_e,B.a_P,B.a_f,B.a_b,B.a0I,B.a13,B.a2e,B.a28,B.a2I,B.a2B,B.a12,B.a27,B.a19,B.a0L,B.a2q) +B.Y=new A.G5(1,"ideographic") +B.a17=new A.p(!1,null,null,null,null,null,112,B.hg,null,null,null,B.Y,null,null,null,null,null,null,null,null,null,"dense displayLarge 2014",null,null,null,null) +B.a_w=new A.p(!1,null,null,null,null,null,56,B.p,null,null,null,B.Y,null,null,null,null,null,null,null,null,null,"dense displayMedium 2014",null,null,null,null) +B.a1G=new A.p(!1,null,null,null,null,null,45,B.p,null,null,null,B.Y,null,null,null,null,null,null,null,null,null,"dense displaySmall 2014",null,null,null,null) +B.a_r=new A.p(!1,null,null,null,null,null,40,B.p,null,null,null,B.Y,null,null,null,null,null,null,null,null,null,"dense headlineLarge 2014",null,null,null,null) +B.a22=new A.p(!1,null,null,null,null,null,34,B.p,null,null,null,B.Y,null,null,null,null,null,null,null,null,null,"dense headlineMedium 2014",null,null,null,null) +B.a_G=new A.p(!1,null,null,null,null,null,24,B.p,null,null,null,B.Y,null,null,null,null,null,null,null,null,null,"dense headlineSmall 2014",null,null,null,null) +B.a2A=new A.p(!1,null,null,null,null,null,21,B.a5,null,null,null,B.Y,null,null,null,null,null,null,null,null,null,"dense titleLarge 2014",null,null,null,null) +B.a_6=new A.p(!1,null,null,null,null,null,17,B.p,null,null,null,B.Y,null,null,null,null,null,null,null,null,null,"dense titleMedium 2014",null,null,null,null) +B.a_8=new A.p(!1,null,null,null,null,null,15,B.a5,null,null,null,B.Y,null,null,null,null,null,null,null,null,null,"dense titleSmall 2014",null,null,null,null) +B.a0F=new A.p(!1,null,null,null,null,null,15,B.a5,null,null,null,B.Y,null,null,null,null,null,null,null,null,null,"dense bodyLarge 2014",null,null,null,null) +B.a0m=new A.p(!1,null,null,null,null,null,15,B.p,null,null,null,B.Y,null,null,null,null,null,null,null,null,null,"dense bodyMedium 2014",null,null,null,null) +B.a_V=new A.p(!1,null,null,null,null,null,13,B.p,null,null,null,B.Y,null,null,null,null,null,null,null,null,null,"dense bodySmall 2014",null,null,null,null) +B.a04=new A.p(!1,null,null,null,null,null,15,B.a5,null,null,null,B.Y,null,null,null,null,null,null,null,null,null,"dense labelLarge 2014",null,null,null,null) +B.a1m=new A.p(!1,null,null,null,null,null,12,B.p,null,null,null,B.Y,null,null,null,null,null,null,null,null,null,"dense labelMedium 2014",null,null,null,null) +B.ZV=new A.p(!1,null,null,null,null,null,11,B.p,null,null,null,B.Y,null,null,null,null,null,null,null,null,null,"dense labelSmall 2014",null,null,null,null) +B.a3_=new A.dM(B.a17,B.a_w,B.a1G,B.a_r,B.a22,B.a_G,B.a2A,B.a_6,B.a_8,B.a0F,B.a0m,B.a_V,B.a04,B.a1m,B.ZV) +B.a__=new A.p(!0,B.R,null,"Roboto",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"blackMountainView displayLarge",null,null,null,null) +B.a_B=new A.p(!0,B.R,null,"Roboto",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"blackMountainView displayMedium",null,null,null,null) +B.a09=new A.p(!0,B.R,null,"Roboto",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"blackMountainView displaySmall",null,null,null,null) +B.a2m=new A.p(!0,B.R,null,"Roboto",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"blackMountainView headlineLarge",null,null,null,null) +B.a2G=new A.p(!0,B.R,null,"Roboto",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"blackMountainView headlineMedium",null,null,null,null) +B.a2D=new A.p(!0,B.S,null,"Roboto",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"blackMountainView headlineSmall",null,null,null,null) +B.a_Y=new A.p(!0,B.S,null,"Roboto",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"blackMountainView titleLarge",null,null,null,null) +B.a2f=new A.p(!0,B.S,null,"Roboto",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"blackMountainView titleMedium",null,null,null,null) +B.a_L=new A.p(!0,B.k,null,"Roboto",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"blackMountainView titleSmall",null,null,null,null) +B.a_U=new A.p(!0,B.S,null,"Roboto",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"blackMountainView bodyLarge",null,null,null,null) +B.a_o=new A.p(!0,B.S,null,"Roboto",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"blackMountainView bodyMedium",null,null,null,null) +B.a08=new A.p(!0,B.R,null,"Roboto",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"blackMountainView bodySmall",null,null,null,null) +B.a2Q=new A.p(!0,B.S,null,"Roboto",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"blackMountainView labelLarge",null,null,null,null) +B.a1F=new A.p(!0,B.k,null,"Roboto",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"blackMountainView labelMedium",null,null,null,null) +B.a1d=new A.p(!0,B.k,null,"Roboto",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"blackMountainView labelSmall",null,null,null,null) +B.a30=new A.dM(B.a__,B.a_B,B.a09,B.a2m,B.a2G,B.a2D,B.a_Y,B.a2f,B.a_L,B.a_U,B.a_o,B.a08,B.a2Q,B.a1F,B.a1d) +B.ZW=new A.p(!0,B.M,null,".AppleSystemUIFont",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"whiteRedwoodCity displayLarge",null,null,null,null) +B.a03=new A.p(!0,B.M,null,".AppleSystemUIFont",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"whiteRedwoodCity displayMedium",null,null,null,null) +B.ZX=new A.p(!0,B.M,null,".AppleSystemUIFont",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"whiteRedwoodCity displaySmall",null,null,null,null) +B.a_d=new A.p(!0,B.M,null,".AppleSystemUIFont",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"whiteRedwoodCity headlineLarge",null,null,null,null) +B.a_i=new A.p(!0,B.M,null,".AppleSystemUIFont",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"whiteRedwoodCity headlineMedium",null,null,null,null) +B.a25=new A.p(!0,B.i,null,".AppleSystemUIFont",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"whiteRedwoodCity headlineSmall",null,null,null,null) +B.a0j=new A.p(!0,B.i,null,".AppleSystemUIFont",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"whiteRedwoodCity titleLarge",null,null,null,null) +B.a0u=new A.p(!0,B.i,null,".AppleSystemUIFont",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"whiteRedwoodCity titleMedium",null,null,null,null) +B.a0U=new A.p(!0,B.i,null,".AppleSystemUIFont",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"whiteRedwoodCity titleSmall",null,null,null,null) +B.a1u=new A.p(!0,B.i,null,".AppleSystemUIFont",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"whiteRedwoodCity bodyLarge",null,null,null,null) +B.a0C=new A.p(!0,B.i,null,".AppleSystemUIFont",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"whiteRedwoodCity bodyMedium",null,null,null,null) +B.a2a=new A.p(!0,B.M,null,".AppleSystemUIFont",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"whiteRedwoodCity bodySmall",null,null,null,null) +B.a23=new A.p(!0,B.i,null,".AppleSystemUIFont",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"whiteRedwoodCity labelLarge",null,null,null,null) +B.a0l=new A.p(!0,B.i,null,".AppleSystemUIFont",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"whiteRedwoodCity labelMedium",null,null,null,null) +B.a1w=new A.p(!0,B.i,null,".AppleSystemUIFont",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"whiteRedwoodCity labelSmall",null,null,null,null) +B.a31=new A.dM(B.ZW,B.a03,B.ZX,B.a_d,B.a_i,B.a25,B.a0j,B.a0u,B.a0U,B.a1u,B.a0C,B.a2a,B.a23,B.a0l,B.a1w) +B.X=A.a(s(["Ubuntu","Cantarell","DejaVu Sans","Liberation Sans","Arial"]),t.s) +B.a1b=new A.p(!0,B.R,null,"Roboto",B.X,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"blackHelsinki displayLarge",null,null,null,null) +B.a1E=new A.p(!0,B.R,null,"Roboto",B.X,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"blackHelsinki displayMedium",null,null,null,null) +B.a0Y=new A.p(!0,B.R,null,"Roboto",B.X,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"blackHelsinki displaySmall",null,null,null,null) +B.a_F=new A.p(!0,B.R,null,"Roboto",B.X,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"blackHelsinki headlineLarge",null,null,null,null) +B.a0k=new A.p(!0,B.R,null,"Roboto",B.X,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"blackHelsinki headlineMedium",null,null,null,null) +B.a0v=new A.p(!0,B.S,null,"Roboto",B.X,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"blackHelsinki headlineSmall",null,null,null,null) +B.a1Z=new A.p(!0,B.S,null,"Roboto",B.X,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"blackHelsinki titleLarge",null,null,null,null) +B.a_I=new A.p(!0,B.S,null,"Roboto",B.X,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"blackHelsinki titleMedium",null,null,null,null) +B.ZT=new A.p(!0,B.k,null,"Roboto",B.X,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"blackHelsinki titleSmall",null,null,null,null) +B.a2u=new A.p(!0,B.S,null,"Roboto",B.X,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"blackHelsinki bodyLarge",null,null,null,null) +B.ZM=new A.p(!0,B.S,null,"Roboto",B.X,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"blackHelsinki bodyMedium",null,null,null,null) +B.a1r=new A.p(!0,B.R,null,"Roboto",B.X,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"blackHelsinki bodySmall",null,null,null,null) +B.a_W=new A.p(!0,B.S,null,"Roboto",B.X,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"blackHelsinki labelLarge",null,null,null,null) +B.a1f=new A.p(!0,B.k,null,"Roboto",B.X,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"blackHelsinki labelMedium",null,null,null,null) +B.a2K=new A.p(!0,B.k,null,"Roboto",B.X,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"blackHelsinki labelSmall",null,null,null,null) +B.a32=new A.dM(B.a1b,B.a1E,B.a0Y,B.a_F,B.a0k,B.a0v,B.a1Z,B.a_I,B.ZT,B.a2u,B.ZM,B.a1r,B.a_W,B.a1f,B.a2K) +B.a_k=new A.p(!1,null,null,null,null,null,112,B.hg,null,null,null,B.v,null,null,null,null,null,null,null,null,null,"englishLike displayLarge 2014",null,null,null,null) +B.a2J=new A.p(!1,null,null,null,null,null,56,B.p,null,null,null,B.v,null,null,null,null,null,null,null,null,null,"englishLike displayMedium 2014",null,null,null,null) +B.a0X=new A.p(!1,null,null,null,null,null,45,B.p,null,null,null,B.v,null,null,null,null,null,null,null,null,null,"englishLike displaySmall 2014",null,null,null,null) +B.a1T=new A.p(!1,null,null,null,null,null,40,B.p,null,null,null,B.v,null,null,null,null,null,null,null,null,null,"englishLike headlineLarge 2014",null,null,null,null) +B.a1v=new A.p(!1,null,null,null,null,null,34,B.p,null,null,null,B.v,null,null,null,null,null,null,null,null,null,"englishLike headlineMedium 2014",null,null,null,null) +B.a_2=new A.p(!1,null,null,null,null,null,24,B.p,null,null,null,B.v,null,null,null,null,null,null,null,null,null,"englishLike headlineSmall 2014",null,null,null,null) +B.a0b=new A.p(!1,null,null,null,null,null,20,B.a5,null,null,null,B.v,null,null,null,null,null,null,null,null,null,"englishLike titleLarge 2014",null,null,null,null) +B.a_p=new A.p(!1,null,null,null,null,null,16,B.p,null,null,null,B.v,null,null,null,null,null,null,null,null,null,"englishLike titleMedium 2014",null,null,null,null) +B.a1C=new A.p(!1,null,null,null,null,null,14,B.a5,null,0.1,null,B.v,null,null,null,null,null,null,null,null,null,"englishLike titleSmall 2014",null,null,null,null) +B.a1c=new A.p(!1,null,null,null,null,null,14,B.a5,null,null,null,B.v,null,null,null,null,null,null,null,null,null,"englishLike bodyLarge 2014",null,null,null,null) +B.a1h=new A.p(!1,null,null,null,null,null,14,B.p,null,null,null,B.v,null,null,null,null,null,null,null,null,null,"englishLike bodyMedium 2014",null,null,null,null) +B.a0G=new A.p(!1,null,null,null,null,null,12,B.p,null,null,null,B.v,null,null,null,null,null,null,null,null,null,"englishLike bodySmall 2014",null,null,null,null) +B.a0J=new A.p(!1,null,null,null,null,null,14,B.a5,null,null,null,B.v,null,null,null,null,null,null,null,null,null,"englishLike labelLarge 2014",null,null,null,null) +B.a0p=new A.p(!1,null,null,null,null,null,12,B.p,null,null,null,B.v,null,null,null,null,null,null,null,null,null,"englishLike labelMedium 2014",null,null,null,null) +B.a1O=new A.p(!1,null,null,null,null,null,10,B.p,null,1.5,null,B.v,null,null,null,null,null,null,null,null,null,"englishLike labelSmall 2014",null,null,null,null) +B.a33=new A.dM(B.a_k,B.a2J,B.a0X,B.a1T,B.a1v,B.a_2,B.a0b,B.a_p,B.a1C,B.a1c,B.a1h,B.a0G,B.a0J,B.a0p,B.a1O) +B.a2E=new A.p(!1,null,null,null,null,null,57,B.p,null,-0.25,null,B.v,1.12,B.C,null,null,null,null,null,null,null,"tall displayLarge 2021",null,null,null,null) +B.a1o=new A.p(!1,null,null,null,null,null,45,B.p,null,0,null,B.v,1.16,B.C,null,null,null,null,null,null,null,"tall displayMedium 2021",null,null,null,null) +B.a0D=new A.p(!1,null,null,null,null,null,36,B.p,null,0,null,B.v,1.22,B.C,null,null,null,null,null,null,null,"tall displaySmall 2021",null,null,null,null) +B.a2Y=new A.p(!1,null,null,null,null,null,32,B.p,null,0,null,B.v,1.25,B.C,null,null,null,null,null,null,null,"tall headlineLarge 2021",null,null,null,null) +B.a2R=new A.p(!1,null,null,null,null,null,28,B.p,null,0,null,B.v,1.29,B.C,null,null,null,null,null,null,null,"tall headlineMedium 2021",null,null,null,null) +B.a1P=new A.p(!1,null,null,null,null,null,24,B.p,null,0,null,B.v,1.33,B.C,null,null,null,null,null,null,null,"tall headlineSmall 2021",null,null,null,null) +B.ZR=new A.p(!1,null,null,null,null,null,22,B.p,null,0,null,B.v,1.27,B.C,null,null,null,null,null,null,null,"tall titleLarge 2021",null,null,null,null) +B.a2F=new A.p(!1,null,null,null,null,null,16,B.a5,null,0.15,null,B.v,1.5,B.C,null,null,null,null,null,null,null,"tall titleMedium 2021",null,null,null,null) +B.a_H=new A.p(!1,null,null,null,null,null,14,B.a5,null,0.1,null,B.v,1.43,B.C,null,null,null,null,null,null,null,"tall titleSmall 2021",null,null,null,null) +B.ZN=new A.p(!1,null,null,null,null,null,16,B.p,null,0.5,null,B.v,1.5,B.C,null,null,null,null,null,null,null,"tall bodyLarge 2021",null,null,null,null) +B.a1t=new A.p(!1,null,null,null,null,null,14,B.p,null,0.25,null,B.v,1.43,B.C,null,null,null,null,null,null,null,"tall bodyMedium 2021",null,null,null,null) +B.a15=new A.p(!1,null,null,null,null,null,12,B.p,null,0.4,null,B.v,1.33,B.C,null,null,null,null,null,null,null,"tall bodySmall 2021",null,null,null,null) +B.a1N=new A.p(!1,null,null,null,null,null,14,B.a5,null,0.1,null,B.v,1.43,B.C,null,null,null,null,null,null,null,"tall labelLarge 2021",null,null,null,null) +B.a1s=new A.p(!1,null,null,null,null,null,12,B.a5,null,0.5,null,B.v,1.33,B.C,null,null,null,null,null,null,null,"tall labelMedium 2021",null,null,null,null) +B.a_K=new A.p(!1,null,null,null,null,null,11,B.a5,null,0.5,null,B.v,1.45,B.C,null,null,null,null,null,null,null,"tall labelSmall 2021",null,null,null,null) +B.a34=new A.dM(B.a2E,B.a1o,B.a0D,B.a2Y,B.a2R,B.a1P,B.ZR,B.a2F,B.a_H,B.ZN,B.a1t,B.a15,B.a1N,B.a1s,B.a_K) +B.a1H=new A.p(!0,B.M,null,"Segoe UI",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"whiteRedmond displayLarge",null,null,null,null) +B.a0M=new A.p(!0,B.M,null,"Segoe UI",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"whiteRedmond displayMedium",null,null,null,null) +B.a0f=new A.p(!0,B.M,null,"Segoe UI",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"whiteRedmond displaySmall",null,null,null,null) +B.a2C=new A.p(!0,B.M,null,"Segoe UI",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"whiteRedmond headlineLarge",null,null,null,null) +B.a_q=new A.p(!0,B.M,null,"Segoe UI",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"whiteRedmond headlineMedium",null,null,null,null) +B.a_7=new A.p(!0,B.i,null,"Segoe UI",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"whiteRedmond headlineSmall",null,null,null,null) +B.a0s=new A.p(!0,B.i,null,"Segoe UI",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"whiteRedmond titleLarge",null,null,null,null) +B.a18=new A.p(!0,B.i,null,"Segoe UI",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"whiteRedmond titleMedium",null,null,null,null) +B.a0z=new A.p(!0,B.i,null,"Segoe UI",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"whiteRedmond titleSmall",null,null,null,null) +B.a0Q=new A.p(!0,B.i,null,"Segoe UI",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"whiteRedmond bodyLarge",null,null,null,null) +B.a20=new A.p(!0,B.i,null,"Segoe UI",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"whiteRedmond bodyMedium",null,null,null,null) +B.a_9=new A.p(!0,B.M,null,"Segoe UI",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"whiteRedmond bodySmall",null,null,null,null) +B.a1q=new A.p(!0,B.i,null,"Segoe UI",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"whiteRedmond labelLarge",null,null,null,null) +B.a0E=new A.p(!0,B.i,null,"Segoe UI",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"whiteRedmond labelMedium",null,null,null,null) +B.a2i=new A.p(!0,B.i,null,"Segoe UI",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"whiteRedmond labelSmall",null,null,null,null) +B.a35=new A.dM(B.a1H,B.a0M,B.a0f,B.a2C,B.a_q,B.a_7,B.a0s,B.a18,B.a0z,B.a0Q,B.a20,B.a_9,B.a1q,B.a0E,B.a2i) +B.a0e=new A.p(!1,null,null,null,null,null,112,B.p,null,null,null,B.v,null,null,null,null,null,null,null,null,null,"tall displayLarge 2014",null,null,null,null) +B.a_x=new A.p(!1,null,null,null,null,null,56,B.p,null,null,null,B.v,null,null,null,null,null,null,null,null,null,"tall displayMedium 2014",null,null,null,null) +B.a2T=new A.p(!1,null,null,null,null,null,45,B.p,null,null,null,B.v,null,null,null,null,null,null,null,null,null,"tall displaySmall 2014",null,null,null,null) +B.a1J=new A.p(!1,null,null,null,null,null,40,B.p,null,null,null,B.v,null,null,null,null,null,null,null,null,null,"tall headlineLarge 2014",null,null,null,null) +B.a_X=new A.p(!1,null,null,null,null,null,34,B.p,null,null,null,B.v,null,null,null,null,null,null,null,null,null,"tall headlineMedium 2014",null,null,null,null) +B.a_S=new A.p(!1,null,null,null,null,null,24,B.p,null,null,null,B.v,null,null,null,null,null,null,null,null,null,"tall headlineSmall 2014",null,null,null,null) +B.a2O=new A.p(!1,null,null,null,null,null,21,B.x,null,null,null,B.v,null,null,null,null,null,null,null,null,null,"tall titleLarge 2014",null,null,null,null) +B.a06=new A.p(!1,null,null,null,null,null,17,B.p,null,null,null,B.v,null,null,null,null,null,null,null,null,null,"tall titleMedium 2014",null,null,null,null) +B.a2U=new A.p(!1,null,null,null,null,null,15,B.a5,null,null,null,B.v,null,null,null,null,null,null,null,null,null,"tall titleSmall 2014",null,null,null,null) +B.a2H=new A.p(!1,null,null,null,null,null,15,B.x,null,null,null,B.v,null,null,null,null,null,null,null,null,null,"tall bodyLarge 2014",null,null,null,null) +B.a0r=new A.p(!1,null,null,null,null,null,15,B.p,null,null,null,B.v,null,null,null,null,null,null,null,null,null,"tall bodyMedium 2014",null,null,null,null) +B.a1L=new A.p(!1,null,null,null,null,null,13,B.p,null,null,null,B.v,null,null,null,null,null,null,null,null,null,"tall bodySmall 2014",null,null,null,null) +B.a1l=new A.p(!1,null,null,null,null,null,15,B.x,null,null,null,B.v,null,null,null,null,null,null,null,null,null,"tall labelLarge 2014",null,null,null,null) +B.a1U=new A.p(!1,null,null,null,null,null,12,B.p,null,null,null,B.v,null,null,null,null,null,null,null,null,null,"tall labelMedium 2014",null,null,null,null) +B.a1i=new A.p(!1,null,null,null,null,null,11,B.p,null,null,null,B.v,null,null,null,null,null,null,null,null,null,"tall labelSmall 2014",null,null,null,null) +B.a36=new A.dM(B.a0e,B.a_x,B.a2T,B.a1J,B.a_X,B.a_S,B.a2O,B.a06,B.a2U,B.a2H,B.a0r,B.a1L,B.a1l,B.a1U,B.a1i) +B.a11=new A.p(!0,B.M,null,".SF UI Display",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"whiteCupertino displayLarge",null,null,null,null) +B.a2_=new A.p(!0,B.M,null,".SF UI Display",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"whiteCupertino displayMedium",null,null,null,null) +B.a0t=new A.p(!0,B.M,null,".SF UI Display",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"whiteCupertino displaySmall",null,null,null,null) +B.a0P=new A.p(!0,B.M,null,".SF UI Display",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"whiteCupertino headlineLarge",null,null,null,null) +B.a_O=new A.p(!0,B.M,null,".SF UI Display",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"whiteCupertino headlineMedium",null,null,null,null) +B.a0O=new A.p(!0,B.i,null,".SF UI Display",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"whiteCupertino headlineSmall",null,null,null,null) +B.a01=new A.p(!0,B.i,null,".SF UI Display",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"whiteCupertino titleLarge",null,null,null,null) +B.a1I=new A.p(!0,B.i,null,".SF UI Text",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"whiteCupertino titleMedium",null,null,null,null) +B.a0d=new A.p(!0,B.i,null,".SF UI Text",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"whiteCupertino titleSmall",null,null,null,null) +B.a0w=new A.p(!0,B.i,null,".SF UI Text",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"whiteCupertino bodyLarge",null,null,null,null) +B.a0N=new A.p(!0,B.i,null,".SF UI Text",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"whiteCupertino bodyMedium",null,null,null,null) +B.a_h=new A.p(!0,B.M,null,".SF UI Text",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"whiteCupertino bodySmall",null,null,null,null) +B.a1X=new A.p(!0,B.i,null,".SF UI Text",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"whiteCupertino labelLarge",null,null,null,null) +B.a0S=new A.p(!0,B.i,null,".SF UI Text",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"whiteCupertino labelMedium",null,null,null,null) +B.a1D=new A.p(!0,B.i,null,".SF UI Text",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"whiteCupertino labelSmall",null,null,null,null) +B.a37=new A.dM(B.a11,B.a2_,B.a0t,B.a0P,B.a_O,B.a0O,B.a01,B.a1I,B.a0d,B.a0w,B.a0N,B.a_h,B.a1X,B.a0S,B.a1D) +B.a2r=new A.p(!1,null,null,null,null,null,57,B.p,null,-0.25,null,B.Y,1.12,B.C,null,null,null,null,null,null,null,"dense displayLarge 2021",null,null,null,null) +B.a2s=new A.p(!1,null,null,null,null,null,45,B.p,null,0,null,B.Y,1.16,B.C,null,null,null,null,null,null,null,"dense displayMedium 2021",null,null,null,null) +B.a2n=new A.p(!1,null,null,null,null,null,36,B.p,null,0,null,B.Y,1.22,B.C,null,null,null,null,null,null,null,"dense displaySmall 2021",null,null,null,null) +B.a21=new A.p(!1,null,null,null,null,null,32,B.p,null,0,null,B.Y,1.25,B.C,null,null,null,null,null,null,null,"dense headlineLarge 2021",null,null,null,null) +B.a_j=new A.p(!1,null,null,null,null,null,28,B.p,null,0,null,B.Y,1.29,B.C,null,null,null,null,null,null,null,"dense headlineMedium 2021",null,null,null,null) +B.a14=new A.p(!1,null,null,null,null,null,24,B.p,null,0,null,B.Y,1.33,B.C,null,null,null,null,null,null,null,"dense headlineSmall 2021",null,null,null,null) +B.a_a=new A.p(!1,null,null,null,null,null,22,B.p,null,0,null,B.Y,1.27,B.C,null,null,null,null,null,null,null,"dense titleLarge 2021",null,null,null,null) +B.a_g=new A.p(!1,null,null,null,null,null,16,B.a5,null,0.15,null,B.Y,1.5,B.C,null,null,null,null,null,null,null,"dense titleMedium 2021",null,null,null,null) +B.a0c=new A.p(!1,null,null,null,null,null,14,B.a5,null,0.1,null,B.Y,1.43,B.C,null,null,null,null,null,null,null,"dense titleSmall 2021",null,null,null,null) +B.a2X=new A.p(!1,null,null,null,null,null,16,B.p,null,0.5,null,B.Y,1.5,B.C,null,null,null,null,null,null,null,"dense bodyLarge 2021",null,null,null,null) +B.a2g=new A.p(!1,null,null,null,null,null,14,B.p,null,0.25,null,B.Y,1.43,B.C,null,null,null,null,null,null,null,"dense bodyMedium 2021",null,null,null,null) +B.a_R=new A.p(!1,null,null,null,null,null,12,B.p,null,0.4,null,B.Y,1.33,B.C,null,null,null,null,null,null,null,"dense bodySmall 2021",null,null,null,null) +B.a1B=new A.p(!1,null,null,null,null,null,14,B.a5,null,0.1,null,B.Y,1.43,B.C,null,null,null,null,null,null,null,"dense labelLarge 2021",null,null,null,null) +B.a_s=new A.p(!1,null,null,null,null,null,12,B.a5,null,0.5,null,B.Y,1.33,B.C,null,null,null,null,null,null,null,"dense labelMedium 2021",null,null,null,null) +B.a2N=new A.p(!1,null,null,null,null,null,11,B.a5,null,0.5,null,B.Y,1.45,B.C,null,null,null,null,null,null,null,"dense labelSmall 2021",null,null,null,null) +B.a38=new A.dM(B.a2r,B.a2s,B.a2n,B.a21,B.a_j,B.a14,B.a_a,B.a_g,B.a0c,B.a2X,B.a2g,B.a_R,B.a1B,B.a_s,B.a2N) +B.a_v=new A.p(!1,null,null,null,null,null,57,B.p,null,-0.25,null,B.v,1.12,B.C,null,null,null,null,null,null,null,"englishLike displayLarge 2021",null,null,null,null) +B.a07=new A.p(!1,null,null,null,null,null,45,B.p,null,0,null,B.v,1.16,B.C,null,null,null,null,null,null,null,"englishLike displayMedium 2021",null,null,null,null) +B.a2t=new A.p(!1,null,null,null,null,null,36,B.p,null,0,null,B.v,1.22,B.C,null,null,null,null,null,null,null,"englishLike displaySmall 2021",null,null,null,null) +B.a0n=new A.p(!1,null,null,null,null,null,32,B.p,null,0,null,B.v,1.25,B.C,null,null,null,null,null,null,null,"englishLike headlineLarge 2021",null,null,null,null) +B.a0y=new A.p(!1,null,null,null,null,null,28,B.p,null,0,null,B.v,1.29,B.C,null,null,null,null,null,null,null,"englishLike headlineMedium 2021",null,null,null,null) +B.a24=new A.p(!1,null,null,null,null,null,24,B.p,null,0,null,B.v,1.33,B.C,null,null,null,null,null,null,null,"englishLike headlineSmall 2021",null,null,null,null) +B.a1W=new A.p(!1,null,null,null,null,null,22,B.p,null,0,null,B.v,1.27,B.C,null,null,null,null,null,null,null,"englishLike titleLarge 2021",null,null,null,null) +B.a_3=new A.p(!1,null,null,null,null,null,16,B.a5,null,0.15,null,B.v,1.5,B.C,null,null,null,null,null,null,null,"englishLike titleMedium 2021",null,null,null,null) +B.a_A=new A.p(!1,null,null,null,null,null,14,B.a5,null,0.1,null,B.v,1.43,B.C,null,null,null,null,null,null,null,"englishLike titleSmall 2021",null,null,null,null) +B.ZS=new A.p(!1,null,null,null,null,null,16,B.p,null,0.5,null,B.v,1.5,B.C,null,null,null,null,null,null,null,"englishLike bodyLarge 2021",null,null,null,null) +B.ZO=new A.p(!1,null,null,null,null,null,14,B.p,null,0.25,null,B.v,1.43,B.C,null,null,null,null,null,null,null,"englishLike bodyMedium 2021",null,null,null,null) +B.a1x=new A.p(!1,null,null,null,null,null,12,B.p,null,0.4,null,B.v,1.33,B.C,null,null,null,null,null,null,null,"englishLike bodySmall 2021",null,null,null,null) +B.a02=new A.p(!1,null,null,null,null,null,14,B.a5,null,0.1,null,B.v,1.43,B.C,null,null,null,null,null,null,null,"englishLike labelLarge 2021",null,null,null,null) +B.a2j=new A.p(!1,null,null,null,null,null,12,B.a5,null,0.5,null,B.v,1.33,B.C,null,null,null,null,null,null,null,"englishLike labelMedium 2021",null,null,null,null) +B.a0q=new A.p(!1,null,null,null,null,null,11,B.a5,null,0.5,null,B.v,1.45,B.C,null,null,null,null,null,null,null,"englishLike labelSmall 2021",null,null,null,null) +B.a39=new A.dM(B.a_v,B.a07,B.a2t,B.a0n,B.a0y,B.a24,B.a1W,B.a_3,B.a_A,B.ZS,B.ZO,B.a1x,B.a02,B.a2j,B.a0q) +B.a0Z=new A.p(!0,B.R,null,"Segoe UI",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"blackRedmond displayLarge",null,null,null,null) +B.a0a=new A.p(!0,B.R,null,"Segoe UI",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"blackRedmond displayMedium",null,null,null,null) +B.a2v=new A.p(!0,B.R,null,"Segoe UI",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"blackRedmond displaySmall",null,null,null,null) +B.a_l=new A.p(!0,B.R,null,"Segoe UI",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"blackRedmond headlineLarge",null,null,null,null) +B.a2b=new A.p(!0,B.R,null,"Segoe UI",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"blackRedmond headlineMedium",null,null,null,null) +B.ZY=new A.p(!0,B.S,null,"Segoe UI",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"blackRedmond headlineSmall",null,null,null,null) +B.a0A=new A.p(!0,B.S,null,"Segoe UI",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"blackRedmond titleLarge",null,null,null,null) +B.a0R=new A.p(!0,B.S,null,"Segoe UI",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"blackRedmond titleMedium",null,null,null,null) +B.ZP=new A.p(!0,B.k,null,"Segoe UI",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"blackRedmond titleSmall",null,null,null,null) +B.a1M=new A.p(!0,B.S,null,"Segoe UI",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"blackRedmond bodyLarge",null,null,null,null) +B.a_m=new A.p(!0,B.S,null,"Segoe UI",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"blackRedmond bodyMedium",null,null,null,null) +B.a2L=new A.p(!0,B.R,null,"Segoe UI",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"blackRedmond bodySmall",null,null,null,null) +B.a0T=new A.p(!0,B.S,null,"Segoe UI",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"blackRedmond labelLarge",null,null,null,null) +B.a_c=new A.p(!0,B.k,null,"Segoe UI",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"blackRedmond labelMedium",null,null,null,null) +B.a_t=new A.p(!0,B.k,null,"Segoe UI",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"blackRedmond labelSmall",null,null,null,null) +B.a3a=new A.dM(B.a0Z,B.a0a,B.a2v,B.a_l,B.a2b,B.ZY,B.a0A,B.a0R,B.ZP,B.a1M,B.a_m,B.a2L,B.a0T,B.a_c,B.a_t) +B.a0K=new A.p(!0,B.M,null,"Roboto",B.X,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"whiteHelsinki displayLarge",null,null,null,null) +B.a0V=new A.p(!0,B.M,null,"Roboto",B.X,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"whiteHelsinki displayMedium",null,null,null,null) +B.a2k=new A.p(!0,B.M,null,"Roboto",B.X,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"whiteHelsinki displaySmall",null,null,null,null) +B.a1V=new A.p(!0,B.M,null,"Roboto",B.X,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"whiteHelsinki headlineLarge",null,null,null,null) +B.a2M=new A.p(!0,B.M,null,"Roboto",B.X,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"whiteHelsinki headlineMedium",null,null,null,null) +B.a10=new A.p(!0,B.i,null,"Roboto",B.X,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"whiteHelsinki headlineSmall",null,null,null,null) +B.a_M=new A.p(!0,B.i,null,"Roboto",B.X,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"whiteHelsinki titleLarge",null,null,null,null) +B.a2V=new A.p(!0,B.i,null,"Roboto",B.X,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"whiteHelsinki titleMedium",null,null,null,null) +B.a_C=new A.p(!0,B.i,null,"Roboto",B.X,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"whiteHelsinki titleSmall",null,null,null,null) +B.ZU=new A.p(!0,B.i,null,"Roboto",B.X,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"whiteHelsinki bodyLarge",null,null,null,null) +B.a0x=new A.p(!0,B.i,null,"Roboto",B.X,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"whiteHelsinki bodyMedium",null,null,null,null) +B.a05=new A.p(!0,B.M,null,"Roboto",B.X,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"whiteHelsinki bodySmall",null,null,null,null) +B.a_4=new A.p(!0,B.i,null,"Roboto",B.X,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"whiteHelsinki labelLarge",null,null,null,null) +B.a1_=new A.p(!0,B.i,null,"Roboto",B.X,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"whiteHelsinki labelMedium",null,null,null,null) +B.a_5=new A.p(!0,B.i,null,"Roboto",B.X,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"whiteHelsinki labelSmall",null,null,null,null) +B.a3b=new A.dM(B.a0K,B.a0V,B.a2k,B.a1V,B.a2M,B.a10,B.a_M,B.a2V,B.a_C,B.ZU,B.a0x,B.a05,B.a_4,B.a1_,B.a_5) +B.a0H=new A.p(!0,B.R,null,".SF UI Display",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"blackCupertino displayLarge",null,null,null,null) +B.a1Y=new A.p(!0,B.R,null,".SF UI Display",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"blackCupertino displayMedium",null,null,null,null) +B.a1p=new A.p(!0,B.R,null,".SF UI Display",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"blackCupertino displaySmall",null,null,null,null) +B.a1y=new A.p(!0,B.R,null,".SF UI Display",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"blackCupertino headlineLarge",null,null,null,null) +B.ZZ=new A.p(!0,B.R,null,".SF UI Display",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"blackCupertino headlineMedium",null,null,null,null) +B.a1e=new A.p(!0,B.S,null,".SF UI Display",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"blackCupertino headlineSmall",null,null,null,null) +B.a_T=new A.p(!0,B.S,null,".SF UI Display",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"blackCupertino titleLarge",null,null,null,null) +B.a1j=new A.p(!0,B.S,null,".SF UI Text",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"blackCupertino titleMedium",null,null,null,null) +B.a_z=new A.p(!0,B.k,null,".SF UI Text",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"blackCupertino titleSmall",null,null,null,null) +B.a2p=new A.p(!0,B.S,null,".SF UI Text",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"blackCupertino bodyLarge",null,null,null,null) +B.a29=new A.p(!0,B.S,null,".SF UI Text",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"blackCupertino bodyMedium",null,null,null,null) +B.a1a=new A.p(!0,B.R,null,".SF UI Text",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"blackCupertino bodySmall",null,null,null,null) +B.a_Q=new A.p(!0,B.S,null,".SF UI Text",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"blackCupertino labelLarge",null,null,null,null) +B.a_J=new A.p(!0,B.k,null,".SF UI Text",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"blackCupertino labelMedium",null,null,null,null) +B.a26=new A.p(!0,B.k,null,".SF UI Text",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"blackCupertino labelSmall",null,null,null,null) +B.a3c=new A.dM(B.a0H,B.a1Y,B.a1p,B.a1y,B.ZZ,B.a1e,B.a_T,B.a1j,B.a_z,B.a2p,B.a29,B.a1a,B.a_Q,B.a_J,B.a26) +B.a1n=new A.p(!0,B.M,null,"Roboto",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"whiteMountainView displayLarge",null,null,null,null) +B.a2S=new A.p(!0,B.M,null,"Roboto",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"whiteMountainView displayMedium",null,null,null,null) +B.a2w=new A.p(!0,B.M,null,"Roboto",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"whiteMountainView displaySmall",null,null,null,null) +B.a_N=new A.p(!0,B.M,null,"Roboto",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"whiteMountainView headlineLarge",null,null,null,null) +B.a2o=new A.p(!0,B.M,null,"Roboto",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"whiteMountainView headlineMedium",null,null,null,null) +B.a1g=new A.p(!0,B.i,null,"Roboto",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"whiteMountainView headlineSmall",null,null,null,null) +B.a2W=new A.p(!0,B.i,null,"Roboto",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"whiteMountainView titleLarge",null,null,null,null) +B.a0o=new A.p(!0,B.i,null,"Roboto",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"whiteMountainView titleMedium",null,null,null,null) +B.a0W=new A.p(!0,B.i,null,"Roboto",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"whiteMountainView titleSmall",null,null,null,null) +B.a2h=new A.p(!0,B.i,null,"Roboto",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"whiteMountainView bodyLarge",null,null,null,null) +B.a_E=new A.p(!0,B.i,null,"Roboto",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"whiteMountainView bodyMedium",null,null,null,null) +B.a2x=new A.p(!0,B.M,null,"Roboto",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"whiteMountainView bodySmall",null,null,null,null) +B.a2l=new A.p(!0,B.i,null,"Roboto",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"whiteMountainView labelLarge",null,null,null,null) +B.a2c=new A.p(!0,B.i,null,"Roboto",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"whiteMountainView labelMedium",null,null,null,null) +B.a1K=new A.p(!0,B.i,null,"Roboto",null,null,null,null,null,null,null,null,null,null,null,null,null,B.h,null,null,null,"whiteMountainView labelSmall",null,null,null,null) +B.a3d=new A.dM(B.a1n,B.a2S,B.a2w,B.a_N,B.a2o,B.a1g,B.a2W,B.a0o,B.a0W,B.a2h,B.a_E,B.a2x,B.a2l,B.a2c,B.a1K) +B.m2=new A.p(!0,B.M,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null) +B.a3e=new A.bW("Title configuration",null,B.m2,null,null,null,null) +B.GD=new A.m(4286022554) +B.a2P=new A.p(!0,B.GD,null,null,null,null,16,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null) +B.a3f=new A.bW("state",null,B.a2P,null,null,null,null) +B.a3g=new A.bW("Value",null,B.m2,null,null,null,null) +B.dl=new A.p(!0,null,null,null,null,null,16,B.x,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null) +B.a3h=new A.bW("MAR",null,B.dl,null,null,null,null) +B.a0i=new A.p(!0,B.E,null,null,null,null,32,B.x,null,2,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null) +B.a3i=new A.bW("Monthly Sales",null,B.a0i,B.aH,null,null,null) +B.a3j=new A.bW("Back",null,null,null,null,null,null) +B.a3k=new A.bW("Left Title",null,null,null,null,null,null) +B.a3l=new A.bW("Bottom Title",null,null,null,null,null,null) +B.a3m=new A.bW("SEPT",null,B.dl,null,null,null,null) +B.a3n=new A.bW("JUN",null,B.dl,null,null,null,null) +B.a3o=new A.bW("Page Not Found",null,B.dk,null,null,null,null) +B.a1z=new A.p(!0,B.i,null,null,null,null,22,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null) +B.a3p=new A.bW("Transactions",null,B.a1z,null,null,null,null) +B.B9=new A.bW("S",null,B.dj,null,null,null,null) +B.a3q=new A.bW("M",null,B.dj,null,null,null,null) +B.a3r=new A.bW("DEC",null,B.dl,null,null,null,null) +B.a1A=new A.p(!0,B.i,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null) +B.a3s=new A.bW("Go to home page",null,B.a1A,null,null,null,null) +B.a3t=new A.bW("",null,B.dl,null,null,null,null) +B.a3u=new A.bW("F",null,B.dj,null,null,null,null) +B.a3v=new A.bW("About",null,B.B1,null,null,null,null) +B.a3w=new A.bW("Angle",null,B.m2,null,null,null,null) +B.Bb=new A.bW("T",null,B.dj,null,null,null,null) +B.a3x=new A.bW("W",null,B.dj,null,null,null,null) +B.a3y=new A.bW("",null,null,null,null,null,null) +B.a3z=new A.bW("",null,B.dj,null,null,null,null) +B.ZQ=new A.p(!0,B.l,null,null,null,null,16,B.x,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null) +B.a3A=new A.bW("Activity",null,B.ZQ,null,null,null,null) +B.a3B=new A.bW("Relative",null,null,null,null,null,null) +B.Bc=new A.bW("Home",null,null,null,null,null,null) +B.a3C=new A.bW("SEP",null,B.dl,null,null,null,null) +B.a00=new A.p(!0,B.i,null,null,null,null,16,B.x,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null) +B.a3D=new A.bW(" and ",null,B.a00,null,null,null,null) +B.a3E=new A.bW("OCT",null,B.dl,null,null,null,null) +B.a3F=new A.bW("Fit Inside Title Option",null,null,null,null,null,null) +B.a0B=new A.p(!0,B.aq,null,null,null,null,24,B.x,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null) +B.a3H=new A.bW("Mingguan",null,B.a0B,null,null,null,null) +B.a7v=new A.ar9(0,"system") +B.V1=new A.k(0.056,0.024) +B.UR=new A.k(0.108,0.3085) +B.V7=new A.k(0.198,0.541) +B.UU=new A.k(0.3655,1) +B.V_=new A.k(0.5465,0.989) +B.Be=new A.Go(B.V1,B.UR,B.V7,B.UU,B.V_) +B.UQ=new A.k(0.05,0) +B.UZ=new A.k(0.133333,0.06) +B.UO=new A.k(0.166666,0.4) +B.US=new A.k(0.208333,0.82) +B.UY=new A.k(0.25,1) +B.a3I=new A.Go(B.UQ,B.UZ,B.UO,B.US,B.UY) +B.a3J=new A.Gp(null) +B.m4=new A.Gq(0,"clamp") +B.a3K=new A.Gq(1,"repeated") +B.a3L=new A.Gq(2,"mirror") +B.a3M=new A.Gr(null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null) +B.a3N=new A.Gs(null,null,null,null,null,null,null,null,null,null,null,null,null,null,null) +B.c3=new A.Gv(0.001,0.001) +B.a3O=new A.Gv(0.01,1/0) +B.Bf=new A.UO(!1,!1,!1,!1) +B.a3P=new A.UO(!0,!1,!1,!0) +B.Bg=new A.UP(0,"auto") +B.a3Q=new A.UP(1,"top") +B.a3R=new A.Gx(null,null,null,null,null,null,null,null,null) +B.Bh=new A.Gz(0,"identity") +B.Bi=new A.Gz(1,"transform2d") +B.iC=new A.Gz(2,"complex") +B.c4=new A.pS(0,"up") +B.c5=new A.pS(1,"right") +B.c6=new A.pS(2,"down") +B.c7=new A.pS(3,"left") +B.a3S=new A.UX(0,"closedLoop") +B.a3T=new A.UX(1,"leaveFlutterView") +B.a3V=A.aU("mL") +B.a3U=A.aU("mM") +B.a3W=A.aU("iD") +B.a3X=A.aU("mK") +B.a3Y=A.aU("ns") +B.a3Z=A.aU("rr") +B.Bj=A.aU("vh") +B.a4_=A.aU("vs") +B.a40=A.aU("Mx") +B.a41=A.aU("c1") +B.a42=A.aU("le") +B.a43=A.aU("Bg") +B.a44=A.aU("rd") +B.a45=A.aU("re") +B.Bk=A.aU("aFz") +B.m5=A.aU("hQ") +B.a46=A.aU("aWD") +B.a47=A.aU("k9") +B.a48=A.aU("w1") +B.a49=A.aU("acy") +B.a4a=A.aU("acM") +B.a4b=A.aU("acN") +B.Bl=A.aU("ke") +B.a4c=A.aU("ng") +B.a4d=A.aU("afX") +B.a4e=A.aU("afY") +B.a4f=A.aU("afZ") +B.a4g=A.aU("am") +B.a4h=A.aU("bp>") +B.a4i=A.aU("km") +B.m6=A.aU("i0") +B.m7=A.aU("aLJ") +B.ck=A.aU("ti") +B.a4j=A.aU("tw") +B.a4k=A.aU("I") +B.a4l=A.aU("x0") +B.iD=A.aU("ks") +B.a4m=A.aU("lC") +B.a4n=A.aU("pk") +B.a4o=A.aU("tN") +B.a4p=A.aU("nl") +B.a4q=A.aU("pw") +B.a4r=A.aU("lM") +B.a4s=A.aU("aGP") +B.m8=A.aU("eR") +B.a4t=A.aU("nt") +B.a4u=A.aU("pG") +B.a4v=A.aU("uh") +B.a4w=A.aU("f") +B.a4x=A.aU("lZ") +B.m9=A.aU("ic") +B.a4y=A.aU("pR") +B.a4z=A.aU("arA") +B.a4A=A.aU("yu") +B.a4B=A.aU("arB") +B.a4C=A.aU("eV") +B.a4D=A.aU("pT") +B.a4E=A.aU("jK") +B.a4F=A.aU("aHl") +B.ma=A.aU("kh") +B.a4G=A.aU("GJ") +B.a4H=A.aU("kQ") +B.a4I=A.aU("yI") +B.a4J=A.aU("nR<@>") +B.a4K=A.aU("mg") +B.a4L=A.aU("mh") +B.a4M=A.aU("oD") +B.a4N=A.aU("mN") +B.a4O=A.aU("ro") +B.a4P=A.aU("lY") +B.mb=A.aU("kK") +B.a4Q=A.aU("Bw") +B.a4R=A.aU("rt") +B.a4S=A.aU("rp") +B.a4T=A.aU("rs") +B.a4U=A.aU("aWC") +B.a4V=A.aU("rf") +B.a4W=new A.UZ(0,"undo") +B.a4X=new A.UZ(1,"redo") +B.a4Y=new A.yx(!1,!1) +B.a4Z=new A.V1(0,"scope") +B.Bm=new A.V1(1,"previouslyFocusedChild") +B.a5_=new A.da(11264,55297,B.q,t.O) +B.a50=new A.da(1425,1775,B.Z,t.O) +B.a51=new A.da(1786,2303,B.Z,t.O) +B.a52=new A.da(192,214,B.q,t.O) +B.a53=new A.da(216,246,B.q,t.O) +B.a54=new A.da(2304,8191,B.q,t.O) +B.a55=new A.da(248,696,B.q,t.O) +B.a56=new A.da(55298,55299,B.Z,t.O) +B.a57=new A.da(55300,55353,B.q,t.O) +B.a58=new A.da(55354,55355,B.Z,t.O) +B.a59=new A.da(55356,56319,B.q,t.O) +B.a5a=new A.da(63744,64284,B.q,t.O) +B.a5b=new A.da(64285,65023,B.Z,t.O) +B.a5c=new A.da(65024,65135,B.q,t.O) +B.a5d=new A.da(65136,65276,B.Z,t.O) +B.a5e=new A.da(65277,65535,B.q,t.O) +B.a5f=new A.da(65,90,B.q,t.O) +B.a5g=new A.da(768,1424,B.q,t.O) +B.a5h=new A.da(8206,8206,B.q,t.O) +B.a5i=new A.da(8207,8207,B.Z,t.O) +B.a5j=new A.da(97,122,B.q,t.O) +B.cK=new A.GD(!1) +B.a5k=new A.GD(!0) +B.a5l=new A.dN("home_page",t.kK) +B.a5m=new A.dN("topLevel",t.kK) +B.Bn=new A.pW(B.e,0,B.z,B.e) +B.md=new A.pW(B.e,1,B.z,B.e) +B.me=new A.Vb(0,"triangles") +B.a5n=new A.Vb(2,"triangleFan") +B.mf=new A.Vc(0,"up") +B.e_=new A.nH(0,0) +B.a5o=new A.nH(-2,-2) +B.iH=new A.as6(0,"start") +B.Bp=new A.as7(0,"start") +B.a5q=new A.dx("'",0,"SINGLE_QUOTE") +B.a5r=new A.nI(1,"CDATA") +B.a5s=new A.nI(2,"COMMENT") +B.a5t=new A.nI(3,"DECLARATION") +B.a5u=new A.nI(4,"DOCUMENT_TYPE") +B.Bq=new A.nI(7,"ELEMENT") +B.a5v=new A.nI(8,"PROCESSING") +B.a5w=new A.nI(9,"TEXT") +B.aA=new A.yH(0,"forward") +B.iI=new A.yH(1,"reverse") +B.a5z=new A.VW(null) +B.a5A=new A.W7(null) +B.a5C=new A.kR(B.l,2,2.5) +B.a5D=new A.kR(B.aq,17,8) +B.a5E=new A.kR(B.bQ,2,2) +B.a5F=new A.kR(B.cc,10,15) +B.a5G=new A.kR(B.aQ,18,18) +B.a5H=new A.kR(B.bm,2.5,5) +B.a5I=new A.Hb(0,"checkbox") +B.a5J=new A.Hb(1,"radio") +B.a5K=new A.Hb(2,"toggle") +B.a7x=new A.auf(0,"material") +B.a5L=new A.He(0,"inside") +B.a5M=new A.He(1,"higher") +B.a5N=new A.He(2,"lower") +B.Km=new A.m(67108864) +B.PD=A.a(s([B.Km,B.n]),t.W) +B.a5O=new A.kT(B.PD) +B.a5P=new A.kT(null) +B.mm=new A.uK(0,"backButton") +B.mn=new A.uK(1,"nextButton") +B.a5R=new A.m9(0,"size") +B.Bx=new A.m9(1,"images") +B.By=new A.m9(2,"shaders") +B.Bz=new A.m9(3,"paints") +B.a5S=new A.m9(4,"paths") +B.a5T=new A.m9(5,"textPositions") +B.a5U=new A.m9(6,"text") +B.c8=new A.m9(7,"commands") +B.dp=new A.HF(0,"ready") +B.fD=new A.HG(0,"ready") +B.a5Z=new A.HF(1,"possible") +B.mp=new A.HG(1,"possible") +B.iJ=new A.HF(2,"accepted") +B.iK=new A.HG(2,"accepted") +B.a0=new A.yS(0,"initial") +B.dq=new A.yS(1,"active") +B.a6_=new A.yS(2,"inactive") +B.BA=new A.yS(3,"defunct") +B.BB=new A.uM(0) +B.a66=new A.Yc(1,0,"forward") +B.a67=new A.Yc(-1,1,"backward") +B.a68=new A.Yq(1,"small") +B.a69=new A.Yq(3,"extended") +B.mq=new A.uN(0,"ready") +B.iL=new A.uN(1,"possible") +B.BC=new A.uN(2,"accepted") +B.iM=new A.uN(3,"started") +B.a6a=new A.uN(4,"peaked") +B.iN=new A.z_(0,"idle") +B.a6b=new A.z_(1,"absorb") +B.iO=new A.z_(2,"pull") +B.BD=new A.z_(3,"recede") +B.dr=new A.q4(0,"pressed") +B.e1=new A.q4(1,"hover") +B.BE=new A.q4(2,"focus") +B.a6c=new A.aw6(0,"standard") +B.bb=new A.Zb(1,"maxWidth") +B.bc=new A.Zb(3,"maxHeight") +B.ab=new A.fl(1) +B.fE=new A.f_(0,"size") +B.a6o=new A.f_(1,"orientation") +B.BF=new A.f_(11,"accessibleNavigation") +B.a6p=new A.f_(12,"invertColors") +B.BG=new A.f_(13,"highContrast") +B.iP=new A.f_(16,"boldText") +B.fF=new A.f_(17,"navigationMode") +B.iQ=new A.f_(18,"gestureSettings") +B.cM=new A.f_(2,"devicePixelRatio") +B.fG=new A.f_(4,"textScaler") +B.ms=new A.f_(5,"platformBrightness") +B.b1=new A.f_(6,"padding") +B.mt=new A.f_(7,"viewInsets") +B.a6q=new A.f_(9,"viewPadding") +B.BH=new A.q9(1/0,1/0,1/0,1/0,1/0,1/0) +B.a6r=new A.dy(B.eW,B.dG) +B.hm=new A.rV(1,"left") +B.a6s=new A.dy(B.eW,B.hm) +B.hn=new A.rV(2,"right") +B.a6t=new A.dy(B.eW,B.hn) +B.a6u=new A.dy(B.eW,B.cg) +B.a6v=new A.dy(B.eX,B.dG) +B.a6w=new A.dy(B.eX,B.hm) +B.a6x=new A.dy(B.eX,B.hn) +B.a6y=new A.dy(B.eX,B.cg) +B.a6z=new A.dy(B.eY,B.dG) +B.a6A=new A.dy(B.eY,B.hm) +B.a6B=new A.dy(B.eY,B.hn) +B.a6C=new A.dy(B.eY,B.cg) +B.a6D=new A.dy(B.eZ,B.dG) +B.a6E=new A.dy(B.eZ,B.hm) +B.a6F=new A.dy(B.eZ,B.hn) +B.a6G=new A.dy(B.eZ,B.cg) +B.a6H=new A.dy(B.vz,B.cg) +B.a6I=new A.dy(B.vA,B.cg) +B.a6J=new A.dy(B.vB,B.cg) +B.a6K=new A.dy(B.vC,B.cg) +B.a6N=new A.a_i(null) +B.a6M=new A.a_j(null) +B.a6L=new A.a_l(null) +B.e2=new A.cu(0,0) +B.BI=new A.fm(0,"staging") +B.iR=new A.fm(1,"add") +B.a6Q=new A.fm(10,"remove") +B.a6R=new A.fm(11,"popping") +B.a6S=new A.fm(12,"removing") +B.mu=new A.fm(13,"dispose") +B.a6T=new A.fm(14,"disposing") +B.iS=new A.fm(15,"disposed") +B.a6U=new A.fm(2,"adding") +B.mv=new A.fm(3,"push") +B.BJ=new A.fm(4,"pushReplace") +B.BK=new A.fm(5,"pushing") +B.a6V=new A.fm(6,"replace") +B.e3=new A.fm(7,"idle") +B.mw=new A.fm(8,"pop") +B.a6W=new A.fm(9,"complete") +B.iT=new A.ip(0,"body") +B.iU=new A.ip(1,"appBar") +B.my=new A.ip(10,"endDrawer") +B.iV=new A.ip(11,"statusBar") +B.iW=new A.ip(2,"bodyScrim") +B.iX=new A.ip(3,"bottomSheet") +B.e4=new A.ip(4,"snackBar") +B.iY=new A.ip(5,"materialBanner") +B.mz=new A.ip(6,"persistentFooter") +B.mA=new A.ip(7,"bottomNavigationBar") +B.iZ=new A.ip(8,"floatingActionButton") +B.j_=new A.ip(9,"drawer") +B.a6Y=new A.kX(B.Q,B.aF,B.cF,null,null) +B.XT=new A.G(100,0) +B.a6Z=new A.kX(B.XT,B.aF,B.cF,null,null) +B.a7y=new A.aAR(0,"material") +B.j=new A.aAS(0,"created") +B.ds=new A.a2A(0,"trailing") +B.BL=new A.a2A(1,"leading") +B.mB=new A.zy(0,"idle") +B.a73=new A.zy(1,"absorb") +B.mC=new A.zy(2,"pull") +B.mD=new A.zy(3,"recede") +B.a7z=new A.aB6(0,"material") +B.BM=new A.zB(0,"first") +B.a74=new A.zB(1,"middle") +B.BN=new A.zB(2,"last") +B.mE=new A.zB(3,"only") +B.a75=new A.K4(B.dE,B.h2) +B.j0=new A.K9(0,"leading") +B.j1=new A.K9(1,"middle") +B.j2=new A.K9(2,"trailing") +B.a76=new A.a3s(0,"minimize") +B.a77=new A.a3s(1,"maximize") +B.a78=new A.a4l(B.ai,A.b4S(),A.a6("a4l<~(uC,aO4,uC,~())>"))})();(function staticFields(){$.dl=null +$.bx=A.bc("canvasKit") +$.e9=A.bc("_instance") +$.aVC=A.A(t.N,A.a6("ae")) +$.aNm=!1 +$.aNk=null +$.cR=null +$.aQu=0 +$.en=null +$.aHS=!1 +$.j9=A.a([],t.kZ) +$.aNo=0 +$.aCq=0 +$.o5=A.a([],A.a6("q")) +$.aEn=A.a([],t.nx) +$.jb=null +$.aXM=A.bc("_instance") +$.apv=null +$.aNV=null +$.aNW=null +$.aIA=A.a([],t.l) +$.aPx=B.Ll +$.qo=A.a([],t.b) +$.L4=B.o9 +$.zJ=null +$.agh=null +$.aMa=0 +$.aRx=null +$.aRp=null +$.aMp=null +$.aP1=null +$.aOu=0 +$.aHT=A.a([],t.no) +$.aI6=-1 +$.aHM=-1 +$.aHL=-1 +$.aI0=-1 +$.aPM=-1 +$.aGL=null +$.ae5=A.bc("_programCache") +$.aG_=0 +$.aFZ=0 +$.ae4=null +$.aG0=null +$.aMb=null +$.eP=null +$.Fm=null +$.aPy=null +$.ap0=A.A(A.a6("ur"),A.a6("yk")) +$.aCZ=null +$.aPB=-1 +$.aPA=-1 +$.aPC="" +$.aPz="" +$.aPD=-1 +$.Ld=A.A(t.N,t.e) +$.aPl=null +$.awr=null +$.v8=A.a([],t.jl) +$.aRr=null +$.aMu=null +$.akb=0 +$.RQ=A.b3Z() +$.aJP=null +$.aJO=null +$.aQM=null +$.aQ3=null +$.aRs=null +$.aDI=null +$.aE6=null +$.aIq=null +$.azc=A.a([],A.a6("q?>")) +$.zL=null +$.L5=null +$.L6=null +$.aHY=!1 +$.aw=B.ai +$.aNQ="" +$.aNR=null +$.aPo=A.A(t.N,t.xd) +$.aPL=A.A(t.C_,t.e) +$.aKT=null +$.aFg=A.A(t.ol,A.a6("ok")) +$.aGh=A.A(t.nk,A.a6("rZ")) +$.aGT=A.A(t.Xa,A.a6("u2")) +$.aXt=A.b4M() +$.aFS=0 +$.OR=A.a([],A.a6("q")) +$.aLB=null +$.a5u=0 +$.aCD=null +$.aHP=!1 +$.hm=null +$.aHA=!0 +$.aHz=!1 +$.ux=A.a([],A.a6("q")) +$.hu=null +$.tX=null +$.aLA=0 +$.c_=null +$.Tt=null +$.aKb=0 +$.aK9=A.A(t.S,t.I7) +$.aKa=A.A(t.I7,t.S) +$.ao5=0 +$.jA=null +$.yd=null +$.aH5=null +$.aNy=1 +$.aa=null +$.mD=null +$.r6=null +$.aOA=1 +$.aGw=-9007199254740992 +$.b3e=!1 +$.b4s=null +$.aJE=null +$.aHZ=A.aS(t.N) +$.aRo=A.aS(t.uz) +$.aMe=null +$.aPf=null +$.aCC=null +$.aY9=A.A(t.S,A.a6("b9v")) +$.b4j=A.A(A.a6("qW"),A.a6("Nb<~>")) +$.aCl=null +$.SD=A.A(A.a6("Eh"),A.a6("S_")) +$.aBV=A.A(A.a6("zn"),t.Wa) +$.aC2=A.A(A.a6("zn"),A.a6("ae")) +$.b02=A.aY(["xx-small",10,"x-small",12,"small",14,"medium",18,"large",22,"x-large",26,"xx-large",32],t.N,t.i) +$.aLT=null +$.aLR=null +$.aLS=null})();(function lazyInitializers(){var s=hunkHelpers.lazyFinal,r=hunkHelpers.lazy +s($,"bbk","cz",()=>{var q="navigator" +return A.b5X(A.aXY(A.E(A.E(self.window,q),"vendor")),B.d.avs(A.aWR(A.E(self.window,q))))}) +s($,"bc1","e6",()=>A.b5Z()) +s($,"b8x","aIJ",()=>A.Do(8)) +s($,"bbn","a5X",()=>A.E(A.E(A.al(),"ClipOp"),"Intersect")) +s($,"bcj","aTU",()=>{var q="FontSlant" +return A.a([A.E(A.E(A.al(),q),"Upright"),A.E(A.E(A.al(),q),"Italic")],t.J)}) +s($,"bck","aTV",()=>{var q="FontWeight" +return A.a([A.E(A.E(A.al(),q),"Thin"),A.E(A.E(A.al(),q),"ExtraLight"),A.E(A.E(A.al(),q),"Light"),A.E(A.E(A.al(),q),"Normal"),A.E(A.E(A.al(),q),"Medium"),A.E(A.E(A.al(),q),"SemiBold"),A.E(A.E(A.al(),q),"Bold"),A.E(A.E(A.al(),q),"ExtraBold"),A.E(A.E(A.al(),q),"ExtraBlack")],t.J)}) +s($,"bcv","aU4",()=>{var q="TextDirection" +return A.a([A.E(A.E(A.al(),q),"RTL"),A.E(A.E(A.al(),q),"LTR")],t.J)}) +s($,"bcs","aU2",()=>{var q="TextAlign" +return A.a([A.E(A.E(A.al(),q),"Left"),A.E(A.E(A.al(),q),"Right"),A.E(A.E(A.al(),q),"Center"),A.E(A.E(A.al(),q),"Justify"),A.E(A.E(A.al(),q),"Start"),A.E(A.E(A.al(),q),"End")],t.J)}) +s($,"bcw","aU5",()=>{var q="TextHeightBehavior" +return A.a([A.E(A.E(A.al(),q),"All"),A.E(A.E(A.al(),q),"DisableFirstAscent"),A.E(A.E(A.al(),q),"DisableLastDescent"),A.E(A.E(A.al(),q),"DisableAll")],t.J)}) +s($,"bco","aTZ",()=>{var q="RectHeightStyle" +return A.a([A.E(A.E(A.al(),q),"Tight"),A.E(A.E(A.al(),q),"Max"),A.E(A.E(A.al(),q),"IncludeLineSpacingMiddle"),A.E(A.E(A.al(),q),"IncludeLineSpacingTop"),A.E(A.E(A.al(),q),"IncludeLineSpacingBottom"),A.E(A.E(A.al(),q),"Strut")],t.J)}) +s($,"bcp","aU_",()=>{var q="RectWidthStyle" +return A.a([A.E(A.E(A.al(),q),"Tight"),A.E(A.E(A.al(),q),"Max")],t.J)}) +s($,"bcy","aU6",()=>{var q="VertexMode" +return A.a([A.E(A.E(A.al(),q),"Triangles"),A.E(A.E(A.al(),q),"TrianglesStrip"),A.E(A.E(A.al(),q),"TriangleFan")],t.J)}) +s($,"bch","aJ6",()=>A.a([A.E(A.E(A.al(),"ClipOp"),"Difference"),A.E(A.E(A.al(),"ClipOp"),"Intersect")],t.J)) +s($,"bci","A_",()=>{var q="FillType" +return A.a([A.E(A.E(A.al(),q),"Winding"),A.E(A.E(A.al(),q),"EvenOdd")],t.J)}) +s($,"bcm","aTX",()=>{var q="PathOp" +return A.a([A.E(A.E(A.al(),q),"Difference"),A.E(A.E(A.al(),q),"Intersect"),A.E(A.E(A.al(),q),"Union"),A.E(A.E(A.al(),q),"XOR"),A.E(A.E(A.al(),q),"ReverseDifference")],t.J)}) +s($,"bcg","aTT",()=>{var q="BlurStyle" +return A.a([A.E(A.E(A.al(),q),"Normal"),A.E(A.E(A.al(),q),"Solid"),A.E(A.E(A.al(),q),"Outer"),A.E(A.E(A.al(),q),"Inner")],t.J)}) +s($,"bcq","aU0",()=>{var q="StrokeCap" +return A.a([A.E(A.E(A.al(),q),"Butt"),A.E(A.E(A.al(),q),"Round"),A.E(A.E(A.al(),q),"Square")],t.J)}) +s($,"bcl","aTW",()=>{var q="PaintStyle" +return A.a([A.E(A.E(A.al(),q),"Fill"),A.E(A.E(A.al(),q),"Stroke")],t.J)}) +s($,"bcf","aES",()=>{var q="BlendMode" +return A.a([A.E(A.E(A.al(),q),"Clear"),A.E(A.E(A.al(),q),"Src"),A.E(A.E(A.al(),q),"Dst"),A.E(A.E(A.al(),q),"SrcOver"),A.E(A.E(A.al(),q),"DstOver"),A.E(A.E(A.al(),q),"SrcIn"),A.E(A.E(A.al(),q),"DstIn"),A.E(A.E(A.al(),q),"SrcOut"),A.E(A.E(A.al(),q),"DstOut"),A.E(A.E(A.al(),q),"SrcATop"),A.E(A.E(A.al(),q),"DstATop"),A.E(A.E(A.al(),q),"Xor"),A.E(A.E(A.al(),q),"Plus"),A.E(A.E(A.al(),q),"Modulate"),A.E(A.E(A.al(),q),"Screen"),A.E(A.E(A.al(),q),"Overlay"),A.E(A.E(A.al(),q),"Darken"),A.E(A.E(A.al(),q),"Lighten"),A.E(A.E(A.al(),q),"ColorDodge"),A.E(A.E(A.al(),q),"ColorBurn"),A.E(A.E(A.al(),q),"HardLight"),A.E(A.E(A.al(),q),"SoftLight"),A.E(A.E(A.al(),q),"Difference"),A.E(A.E(A.al(),q),"Exclusion"),A.E(A.E(A.al(),q),"Multiply"),A.E(A.E(A.al(),q),"Hue"),A.E(A.E(A.al(),q),"Saturation"),A.E(A.E(A.al(),q),"Color"),A.E(A.E(A.al(),q),"Luminosity")],t.J)}) +s($,"bcr","aU1",()=>{var q="StrokeJoin" +return A.a([A.E(A.E(A.al(),q),"Miter"),A.E(A.E(A.al(),q),"Round"),A.E(A.E(A.al(),q),"Bevel")],t.J)}) +s($,"bcx","A0",()=>{var q="TileMode" +return A.a([A.E(A.E(A.al(),q),"Clamp"),A.E(A.E(A.al(),q),"Repeat"),A.E(A.E(A.al(),q),"Mirror"),A.E(A.E(A.al(),q),"Decal")],t.J)}) +s($,"bbs","aJ_",()=>{var q="FilterMode",p="MipmapMode",o="Linear",n=t.e +return A.aY([B.eu,n.a({filter:A.E(A.E(A.al(),q),"Nearest"),mipmap:A.E(A.E(A.al(),p),"None")}),B.hc,n.a({filter:A.E(A.E(A.al(),q),o),mipmap:A.E(A.E(A.al(),p),"None")}),B.oz,n.a({filter:A.E(A.E(A.al(),q),o),mipmap:A.E(A.E(A.al(),p),o)}),B.hd,n.a({B:A.aKL(0.3333333333333333),C:A.aKL(0.3333333333333333)})],A.a6("rv"),n)}) +s($,"bbB","aTp",()=>{var q=A.Do(2) +q[0]=0 +q[1]=1 +return q}) +s($,"bcc","a60",()=>A.b7_(4)) +s($,"bcu","aU3",()=>{var q="DecorationStyle" +return A.a([A.E(A.E(A.al(),q),"Solid"),A.E(A.E(A.al(),q),"Double"),A.E(A.E(A.al(),q),"Dotted"),A.E(A.E(A.al(),q),"Dashed"),A.E(A.E(A.al(),q),"Wavy")],t.J)}) +s($,"bct","aJ7",()=>{var q="TextBaseline" +return A.a([A.E(A.E(A.al(),q),"Alphabetic"),A.E(A.E(A.al(),q),"Ideographic")],t.J)}) +s($,"bcn","aTY",()=>{var q="PlaceholderAlignment" +return A.a([A.E(A.E(A.al(),q),"Baseline"),A.E(A.E(A.al(),q),"AboveBaseline"),A.E(A.E(A.al(),q),"BelowBaseline"),A.E(A.E(A.al(),q),"Top"),A.E(A.E(A.al(),q),"Bottom"),A.E(A.E(A.al(),q),"Middle")],t.J)}) +r($,"b3G","aTl",()=>A.b2V()) +r($,"b9n","aEJ",()=>{var q=t.S,p=t.t +return new A.Pi(A.aX7(),A.A(q,A.a6("b93")),A.A(q,A.a6("baz")),A.A(q,A.a6("lU")),A.aS(q),A.a([],p),A.a([],p),$.cZ().gjd(),A.A(q,A.a6("bV")))}) +r($,"bbt","aTi",()=>{var q=A.aL8(new A.aCI()),p=self.window.FinalizationRegistry +p.toString +return A.b2I(p,q)}) +r($,"bd4","aUq",()=>new A.air()) +s($,"bby","aTn",()=>A.aYD(B.Re)) +s($,"bbx","aEQ",()=>A.ahm(A.aVO($.aTn()))) +s($,"bbm","aTf",()=>A.aN7(A.E(A.al(),"ParagraphBuilder"))) +s($,"b8B","aRS",()=>A.aP8(A.L3(A.L3(A.L3(A.aRD(),"window"),"flutterCanvasKit"),"Paint"))) +s($,"b8A","aRR",()=>{var q=A.aP8(A.L3(A.L3(A.L3(A.aRD(),"window"),"flutterCanvasKit"),"Paint")) +A.b_I(q,0) +return q}) +s($,"bdd","aUu",()=>{var q=t.N,p=A.a6("+breaks,graphemes,words(yu,yu,yu)"),o=A.aGj(B.zr.a,q,p),n=A.aGj(B.zs.a,q,p) +return new A.a0I(A.aGj(B.zt.a,q,p),n,o)}) +s($,"bbw","aTm",()=>A.aY([B.p4,A.aQp("grapheme"),B.p5,A.aQp("word")],A.a6("CG"),t.e)) +s($,"bcJ","aUf",()=>A.aQs()) +s($,"b96","c4",()=>{var q,p=A.E(self.window,"screen") +p=p==null?null:A.E(p,"width") +if(p==null)p=0 +q=A.E(self.window,"screen") +q=q==null?null:A.E(q,"height") +return new A.Of(A.b_F(p,q==null?0:q))}) +s($,"bcI","aUe",()=>{var q=A.E(self.window,"trustedTypes") +q.toString +return A.b2L(q,"createPolicy",A.b0_("flutter-engine"),t.e.a({createScriptURL:A.aL8(new A.aDe())}))}) +r($,"bcN","aUi",()=>self.window.FinalizationRegistry!=null) +s($,"bbu","aTj",()=>B.ac.cq(A.aY(["type","fontsChange"],t.N,t.z))) +s($,"baV","aIX",()=>A.Do(8)) +s($,"bd2","aJg",()=>{var q=A.aQq() +A.aKo(q,"width",0) +A.aKo(q,"height",0) +A.aKk(A.E(q,"style"),"absolute") +return q}) +s($,"baU","aEO",()=>A.Do(4)) +r($,"bcb","a6_",()=>new A.aon()) +s($,"bay","aSL",()=>A.aM3(A.a([0,1,2,2,3,0],t.t))) +s($,"bcz","aU7",()=>A.aIo(A.aIo(A.aIo(self.window,"Image"),"prototype"),"decode")!=null) +s($,"bbj","aTd",()=>A.aVZ("ftyp")) +s($,"bbD","aJ1",()=>8589934852) +s($,"bbE","aTr",()=>8589934853) +s($,"bbF","aJ2",()=>8589934848) +s($,"bbG","aTs",()=>8589934849) +s($,"bbK","aJ4",()=>8589934850) +s($,"bbL","aTv",()=>8589934851) +s($,"bbI","aJ3",()=>8589934854) +s($,"bbJ","aTu",()=>8589934855) +s($,"bbQ","aTA",()=>458978) +s($,"bbR","aTB",()=>458982) +s($,"bd0","aJe",()=>458976) +s($,"bd1","aJf",()=>458980) +s($,"bbU","aTE",()=>458977) +s($,"bbV","aTF",()=>458981) +s($,"bbS","aTC",()=>458979) +s($,"bbT","aTD",()=>458983) +s($,"bbH","aTt",()=>A.aY([$.aJ1(),new A.aCQ(),$.aTr(),new A.aCR(),$.aJ2(),new A.aCS(),$.aTs(),new A.aCT(),$.aJ4(),new A.aCU(),$.aTv(),new A.aCV(),$.aJ3(),new A.aCW(),$.aTu(),new A.aCX()],t.S,A.a6("F(lm)"))) +s($,"bd9","aEU",()=>A.b5A(new A.aEp())) +r($,"b9i","aEI",()=>new A.Pc(A.a([],A.a6("q<~(F)>")),A.aKJ(self.window,"(forced-colors: active)"))) +s($,"b97","b8",()=>{var q,p=A.aFL(),o=A.b6a(),n=A.aXa(0) +if(A.aWP($.aEI().b))n.sar7(!0) +p=A.aZ0(n.bk(),!1,"/",p,B.ad,!1,null,o) +o=A.a([$.c4()],A.a6("q")) +q=A.aKJ(self.window,"(prefers-color-scheme: dark)") +A.b5D() +q=new A.Ok(p,o,A.A(t.S,A.a6("wd")),A.A(t.K,A.a6("Vg")),q,B.ai) +q.a6I() +o=$.aEI() +p=o.a +if(B.b.ga7(p))A.aP9(o.b,"addListener",o.gQK()) +p.push(q.gTp()) +q.a6L() +q.a6P() +A.aRv(q.gvn()) +q.a0Q("flutter/lifecycle",A.a88(B.ca.cp(B.fI.I())),null) +return q}) +s($,"b9F","aEL",()=>{var q=t.N,p=t.S +q=new A.ajL(A.A(q,t._8),A.A(p,t.e),A.aS(q),A.A(p,q)) +q.auN("_default_document_create_element_visible",A.aPn()) +q.Kf("_default_document_create_element_invisible",A.aPn(),!1) +return q}) +r($,"b9R","aSl",()=>new A.amV()) +r($,"b3q","aTk",()=>A.L7()) +s($,"bc8","W",()=>(A.aQh().gZm()!=null?A.aQh().gZm()==="canvaskit":A.b6J())?new A.Mz():new A.afc()) +r($,"bcO","aUj",()=>{var q=self.window.ImageDecoder +q=(q==null?null:q)!=null&&A.b59()===B.co +return q}) +s($,"bd7","aUs",()=>A.apq(65532)) +s($,"b9k","aS8",()=>A.c3("[a-z0-9\\s]+",!1,!1)) +s($,"b9l","aS9",()=>A.c3("\\b\\d",!0,!1)) +s($,"bdf","va",()=>A.aWL(A.zO(0,0))) +s($,"ba1","aSq",()=>{var q=A.b5z("flt-ruler-host"),p=new A.SX(q),o=A.E(q,"style") +A.aKk(o,"fixed") +A.aWI(o,"hidden") +A.aWG(o,"hidden") +A.aWH(o,"0") +A.aWF(o,"0") +A.aWJ(o,"0") +A.aWE(o,"0") +A.aP9(A.b6f().gaaX(),"appendChild",q) +A.aRv(p.gvn()) +return p}) +s($,"bcE","aJ9",()=>A.b0F(A.a([B.a5f,B.a5j,B.a52,B.a53,B.a55,B.a5g,B.a50,B.a51,B.a54,B.a5h,B.a5i,B.a5_,B.a56,B.a57,B.a58,B.a59,B.a5a,B.a5b,B.a5c,B.a5d,B.a5e],A.a6("q>")),null,A.a6("m_?"))) +r($,"bdl","Lv",()=>A.b0G("000a!E000b000cF000d!D000w!R000y!A0013!B0018!M001a!N001c001lO001m!L001n!M001t002iK002n!P002p003eK003p!F004q!K004t!I0051!K0053!L0056!K005c005yK0060006uK006w00k7K00ke00lbK00lc00ofG00og00okK00om00onK00oq00otK00ou!M00ov!K00p2!K00p3!L00p400p6K00p8!K00pa00ptK00pv00s5K00s700w1K00w300w9G00wa010vK010x011yK01210124K0126!K0127!L0128013cK013d!M013e!K013l014tG014v!G014x014yG01500151G0153!G015c0162C0167016aC016b!K016c!L016o016tI01700171M0174017eG017g!I017k018qK018r019bG019c019lO019n!O019o!M019q019rK019s!G019t01cjK01cl!K01cm01csG01ct!I01cv01d0G01d101d2K01d301d4G01d601d9G01da01dbK01dc01dlO01dm01doK01dr!K01e7!I01e8!K01e9!G01ea01f3K01f401fuG01fx01idK01ie01ioG01ip!K01j401jdO01je01kaK01kb01kjG01kk01klK01ko!M01kq!K01kt!G01kw01lhK01li01llG01lm!K01ln01lvG01lw!K01lx01lzG01m0!K01m101m5G01mo01ncK01nd01nfG01nk01nuK01pc01pwK01py01qfK01qr01r5G01r6!I01r701s3G01s401tlK01tm01toG01tp!K01tq01u7G01u8!K01u901ufG01ug01upK01uq01urG01uu01v3O01v501vkK01vl01vnG01vp01vwK01vz01w0K01w301woK01wq01wwK01wy!K01x201x5K01x8!G01x9!K01xa01xgG01xj01xkG01xn01xpG01xq!K01xz!G01y401y5K01y701y9K01ya01ybG01ye01ynO01yo01ypK01z0!K01z2!G01z501z7G01z901zeK01zj01zkK01zn0208K020a020gK020i020jK020l020mK020o020pK020s!G020u020yG02130214G02170219G021d!G021l021oK021q!K021y0227O02280229G022a022cK022d!G022p022rG022t0231K02330235K0237023sK023u0240K02420243K02450249K024c!G024d!K024e024lG024n024pG024r024tG024w!K025c025dK025e025fG025i025rO0261!K02620267G0269026bG026d026kK026n026oK026r027cK027e027kK027m027nK027p027tK027w!G027x!K027y0284G02870288G028b028dG028l028nG028s028tK028v028xK028y028zG0292029bO029d!K029u!G029v!K029x02a2K02a602a8K02aa02adK02ah02aiK02ak!K02am02anK02ar02asK02aw02ayK02b202bdK02bi02bmG02bq02bsG02bu02bxG02c0!K02c7!G02cm02cvO02dc02dgG02dh02doK02dq02dsK02du02egK02ei02exK02f1!K02f202f8G02fa02fcG02fe02fhG02fp02fqG02fs02fuK02g002g1K02g202g3G02g602gfO02gw!K02gx02gzG02h102h8K02ha02hcK02he02i0K02i202ibK02id02ihK02ik!G02il!K02im02isG02iu02iwG02iy02j1G02j902jaG02ji!K02jk02jlK02jm02jnG02jq02jzO02k102k2K02kg02kjG02kk02ksK02ku02kwK02ky02m2K02m302m4G02m5!K02m602mcG02me02mgG02mi02mlG02mm!K02ms02muK02mv!G02n302n5K02n602n7G02na02njO02nu02nzK02o102o3G02o502omK02oq02pdK02pf02pnK02pp!K02ps02pyK02q2!G02q702qcG02qe!G02qg02qnG02qu02r3O02r602r7G02sx!G02t002t6G02tj02tqG02ts02u1O02wh!G02wk02wsG02x402x9G02xc02xlO02yo!K02zc02zdG02zk02ztO0305!G0307!G0309!G030e030fG030g030nK030p031oK031t032cG032e032fG032g032kK032l032vG032x033wG0346!G036z037iG037k037tO03860389G038e038gG038i038kG038n038tG038x0390G039e039pG039r!G039s03a1O03a203a5G03a803b9K03bb!K03bh!K03bk03cqK03cs03m0K03m203m5K03m803meK03mg!K03mi03mlK03mo03nsK03nu03nxK03o003owK03oy03p1K03p403paK03pc!K03pe03phK03pk03pyK03q003rkK03rm03rpK03rs03tmK03tp03trG03uo03v3K03vk03xxK03y003y5K03y904fgK04fj04fzK04g0!R04g104gqK04gw04iyK04j204jcK04jk04jwK04jy04k1K04k204k4G04kg04kxK04ky04l0G04lc04ltK04lu04lvG04m804mkK04mm04moK04mq04mrG04ok04pfG04pp!G04ps04q1O04qz04r1G04r2!I04r404rdO04rk04u0K04u804ucK04ud04ueG04uf04vcK04vd!G04ve!K04vk04xhK04xs04ymK04yo04yzG04z404zfG04zq04zzO053k053tO054w055iK055j055nG0579057iG057k058cG058f!G058g058pO058w0595O059s05a8G05c005c4G05c505dfK05dg05dwG05dx05e3K05e805ehO05ez05f7G05fk05fmG05fn05ggK05gh05gtG05gu05gvK05gw05h5O05h605idK05ie05irG05j405k3K05k405knG05kw05l5O05l905lbK05lc05llO05lm05mlK05mo05mwK05n405oaK05od05ofK05ow05oyG05p005pkG05pl05poK05pp!G05pq05pvK05pw!G05px05pyK05pz05q1G05q2!K05q805vjK05vk05x5G05x705xbG05xc0651K06540659K065c066dK066g066lK066o066vK066x!K066z!K0671!K0673067xK0680069gK069i069oK069q!K069u069wK069y06a4K06a806abK06ae06ajK06ao06b0K06b606b8K06ba06bgK06bk06bqR06bs06buR06bw!G06bx!Q06by06bzI06c806c9N06ck!N06cn!L06co06cpF06cq06cuI06cv!P06db06dcP06dg!M06dw!P06e7!R06e806ecI06ee06enI06ep!K06f3!K06fk06fwK06hc06i8G06iq!K06iv!K06iy06j7K06j9!K06jd06jhK06jo!K06jq!K06js!K06ju06jxK06jz06k9K06kc06kfK06kl06kpK06ku!K06lc06mgK079207ahK08ow08q6K08q808riK08rk08v8K08vf08viK08vj08vlG08vm08vnK08w008x1K08x3!K08x9!K08xc08yvK08z3!K08zj!G08zk0906K090g090mK090o090uK090w0912K0914091aK091c091iK091k091qK091s091yK09200926K09280933G094f!K09hc!R09hh!K09ii09inG09ip09itJ09iz09j0K09ll09lmG09ln09loJ09ls09oaJ09oc09ofJ09ol09prK09pt09seK09sw09trK09v409vjJ0a1c0a2mJ0a2o0a53J0vls0wi4K0wk00wl9K0wlc0wssK0wsw0wtbK0wtc0wtlO0wtm0wtnK0wu80wviK0wvj0wvmG0wvo0wvxG0wvz0wwtK0wwu0wwvG0www0wz3K0wz40wz5G0wzs0x4vK0x4y0x56K0x6d0x6pK0x6q!G0x6r0x6tK0x6u!G0x6v0x6yK0x6z!G0x700x7mK0x7n0x7rG0x7w!G0x8g0x9vK0xa80xa9G0xaa0xbnK0xbo0xc5G0xcg0xcpO0xcw0xddG0xde0xdjK0xdn!K0xdp0xdqK0xdr!G0xds0xe1O0xe20xetK0xeu0xf1G0xf40xfqK0xfr0xg3G0xgg0xh8K0xhc0xhfG0xhg0xiqK0xir0xj4G0xjj!K0xjk0xjtO0xk5!G0xkg0xkpO0xkw0xm0K0xm10xmeG0xmo0xmqK0xmr!G0xms0xmzK0xn00xn1G0xn40xndO0xob0xodG0xps!G0xpu0xpwG0xpz0xq0G0xq60xq7G0xq9!G0xr40xreK0xrf0xrjG0xrm0xroK0xrp0xrqG0xs10xs6K0xs90xseK0xsh0xsmK0xsw0xt2K0xt40xtaK0xtc0xuxK0xv40xyaK0xyb0xyiG0xyk0xylG0xyo0xyxO0xz416lfK16ls16meK16mj16nvK1dkw1dl2K1dlf1dljK1dlp!C1dlq!G1dlr1dm0C1dm21dmeC1dmg1dmkC1dmm!C1dmo1dmpC1dmr1dmsC1dmu1dn3C1dn41dptK1dqr1e0tK1e1c1e33K1e361e4nK1e5s1e63K1e681e6nG1e6o!M1e6r!L1e6s!M1e741e7jG1e7n1e7oP1e8d1e8fP1e8g!M1e8i!N1e8k!M1e8l!L1e9c1e9gK1e9i1ed8K1edb!I1edj!N1edo!M1edq!N1eds1ee1O1ee2!L1ee3!M1ee91eeyK1ef3!P1ef51efuK1eg61ehpJ1ehq1ehrG1ehs1eimK1eiq1eivK1eiy1ej3K1ej61ejbK1eje1ejgK1ek91ekbI1ekg1ekrK1ekt1eliK1elk1em2K1em41em5K1em71emlK1emo1en1K1eo01ereK1etc1eusK1eyl!G1f281f30K1f341f4gK1f4w!G1f5s1f6nK1f711f7uK1f801f91K1f921f96G1f9c1fa5K1fa81fb7K1fbc1fbjK1fbl1fbpK1fcw1fh9K1fhc1fhlO1fhs1firK1fiw1fjvK1fk01fl3K1flc1fmrK1fr41fzqK1g001g0lK1g0w1g13K1g5c1g5hK1g5k!K1g5m1g6tK1g6v1g6wK1g70!K1g731g7pK1g801g8mK1g8w1g9qK1gbk1gc2K1gc41gc5K1gcg1gd1K1gdc1ge1K1gg01ghjK1ghq1ghrK1gjk!K1gjl1gjnG1gjp1gjqG1gjw1gjzG1gk01gk3K1gk51gk7K1gk91gl1K1gl41gl6G1glb!G1gm81gn0K1gn41gnwK1gow1gp3K1gp51gpwK1gpx1gpyG1gqo1gs5K1gsg1gt1K1gtc1gtuK1gu81gupK1gxs1gzsK1h1c1h2qK1h341h4iK1h4w1h5vK1h5w1h5zG1h681h6hO1hfk1hgpK1hgr1hgsG1hgw1hgxK1hj41hjwK1hk7!K1hkg1hl1K1hl21hlcG1ho01hokK1hpc1hpyK1hq81hqaG1hqb1hrrK1hrs1hs6G1ht21htbO1htr1htuG1htv1hv3K1hv41hveG1hvh!I1hvx!I1hw01hwoK1hww1hx5O1hxc1hxeG1hxf1hyeK1hyf1hysG1hyu1hz3O1hz8!K1hz91hzaG1hzb!K1hzk1i0iK1i0j!G1i0m!K1i0w1i0yG1i0z1i2aK1i2b1i2oG1i2p1i2sK1i2x1i30G1i321i33G1i341i3dO1i3e!K1i3g!K1i4g1i4xK1i4z1i5nK1i5o1i5zG1i66!G1i801i86K1i88!K1i8a1i8dK1i8f1i8tK1i8v1i94K1i9c1iamK1ian1iayG1ib41ibdO1ibk1ibnG1ibp1ibwK1ibz1ic0K1ic31icoK1icq1icwK1icy1iczK1id11id5K1id71id8G1id9!K1ida1idgG1idj1idkG1idn1idpG1ids!K1idz!G1ie51ie9K1iea1iebG1iee1iekG1ieo1iesG1iio1ik4K1ik51ikmG1ikn1ikqK1ikw1il5O1ila!G1ilb1ildK1im81injK1ink1io3G1io41io5K1io7!K1iog1iopO1itc1iumK1iun1iutG1iuw1iv4G1ivs1ivvK1ivw1ivxG1iww1iy7K1iy81iyoG1iys!K1iz41izdO1j0g1j1mK1j1n1j1zG1j20!K1j281j2hO1j4t1j57G1j5c1j5lO1jb41jcbK1jcc1jcqG1jfk1jhbK1jhc1jhlO1ji71jieK1jih!K1jik1jirK1jit1jiuK1jiw1jjjK1jjk1jjpG1jjr1jjsG1jjv1jjyG1jjz!K1jk0!G1jk1!K1jk21jk3G1jkg1jkpO1jmo1jmvK1jmy1jo0K1jo11jo7G1joa1jogG1joh!K1joj!K1jok!G1jpc!K1jpd1jpmG1jpn1jqqK1jqr1jqxG1jqy!K1jqz1jr2G1jrb!G1jrk!K1jrl1jrvG1jrw1jt5K1jt61jtlG1jtp!K1juo1jw8K1k3k1k3sK1k3u1k4uK1k4v1k52G1k541k5bG1k5c!K1k5s1k61O1k6q1k7jK1k7m1k87G1k891k8mG1kao1kauK1kaw1kaxK1kaz1kc0K1kc11kc6G1kca!G1kcc1kcdG1kcf1kclG1kcm!K1kcn!G1kcw1kd5O1kdc1kdhK1kdj1kdkK1kdm1kehK1kei1kemG1keo1kepG1ker1kevG1kew!K1kf41kfdO1ko01koiK1koj1komG1kts!K1kw01lllK1log1lriK1ls01lxfK1o1s1oviK1ovk1ovsI1s001sg6K1z401zjsK1zk01zkuK1zkw1zl5O1zo01zotK1zow1zp0G1zpc1zqnK1zqo1zquG1zr41zr7K1zrk1zrtO1zs31zsnK1zst1ztbK20cg20e7K20hs20juK20jz!G20k0!K20k120ljG20lr20luG20lv20m7K20o020o1K20o3!K20o4!G20og20ohG2dc0!J2dlw2dlzJ2fpc2fsaK2fsg2fssK2fsw2ft4K2ftc2ftlK2ftp2ftqG2fts2ftvI2jxh2jxlG2jxp2jxuG2jxv2jy2I2jy32jyaG2jyd2jyjG2jze2jzhG2k3m2k3oG2kg02kicK2kie2kkcK2kke2kkfK2kki!K2kkl2kkmK2kkp2kksK2kku2kl5K2kl7!K2kl92klfK2klh2kn9K2knb2kneK2knh2knoK2knq2knwK2kny2kopK2kor2kouK2kow2kp0K2kp2!K2kp62kpcK2kpe2kytK2kyw2kzkK2kzm2l0aK2l0c2l16K2l182l1wK2l1y2l2sK2l2u2l3iK2l3k2l4eK2l4g2l54K2l562l60K2l622l6qK2l6s2l6zK2l722l8fO2lmo2lo6G2lob2lpoG2lpx!G2lqc!G2lqz2lr3G2lr52lrjG2mtc2mtiG2mtk2mu0G2mu32mu9G2mub2mucG2mue2muiG2n0g2n1oK2n1s2n1yG2n1z2n25K2n282n2hO2n2m!K2ncw2ne3K2ne42ne7G2ne82nehO2oe82ojoK2ok02ok6G2olc2on7K2on82oneG2onf!K2onk2ontO2pkw2pkzK2pl12plrK2plt2pluK2plw!K2plz!K2pm12pmaK2pmc2pmfK2pmh!K2pmj!K2pmq!K2pmv!K2pmx!K2pmz!K2pn12pn3K2pn52pn6K2pn8!K2pnb!K2pnd!K2pnf!K2pnh!K2pnj!K2pnl2pnmK2pno!K2pnr2pnuK2pnw2po2K2po42po7K2po92pocK2poe!K2pog2popK2por2pp7K2ppd2ppfK2pph2pplK2ppn2pq3K2q7k2q89K2q8g2q95K2q9c2qa1K2qcm2qdbH2qrf2qrjG2sc02sc9Ojny9!Ijnz4jo1rGjo5cjobzG",231,B.R6,B.Bo,A.a6("dU"))) +s($,"b8u","aRO",()=>{var q=t.N +return new A.a7U(A.aY(["birthday","bday","birthdayDay","bday-day","birthdayMonth","bday-month","birthdayYear","bday-year","countryCode","country","countryName","country-name","creditCardExpirationDate","cc-exp","creditCardExpirationMonth","cc-exp-month","creditCardExpirationYear","cc-exp-year","creditCardFamilyName","cc-family-name","creditCardGivenName","cc-given-name","creditCardMiddleName","cc-additional-name","creditCardName","cc-name","creditCardNumber","cc-number","creditCardSecurityCode","cc-csc","creditCardType","cc-type","email","email","familyName","family-name","fullStreetAddress","street-address","gender","sex","givenName","given-name","impp","impp","jobTitle","organization-title","language","language","middleName","middleName","name","name","namePrefix","honorific-prefix","nameSuffix","honorific-suffix","newPassword","new-password","nickname","nickname","oneTimeCode","one-time-code","organizationName","organization","password","current-password","photo","photo","postalCode","postal-code","streetAddressLevel1","address-level1","streetAddressLevel2","address-level2","streetAddressLevel3","address-level3","streetAddressLevel4","address-level4","streetAddressLine1","address-line1","streetAddressLine2","address-line2","streetAddressLine3","address-line3","telephoneNumber","tel","telephoneNumberAreaCode","tel-area-code","telephoneNumberCountryCode","tel-country-code","telephoneNumberExtension","tel-extension","telephoneNumberLocal","tel-local","telephoneNumberLocalPrefix","tel-local-prefix","telephoneNumberLocalSuffix","tel-local-suffix","telephoneNumberNational","tel-national","transactionAmount","transaction-amount","transactionCurrency","transaction-currency","url","url","username","username"],q,q))}) +s($,"bdg","a62",()=>new A.afk()) +s($,"bcC","aU9",()=>A.Do(4)) +s($,"bcA","aJ8",()=>A.Do(16)) +s($,"bcB","aU8",()=>A.aYn($.aJ8())) +r($,"bda","e7",()=>A.aWM(A.E(self.window,"console"))) +s($,"bdk","cZ",()=>A.aXc(0,$.b8())) +s($,"b8M","aIK",()=>A.b6q("_$dart_dartClosure")) +s($,"bd6","aET",()=>B.ai.Kn(new A.aEk(),A.a6("ae"))) +s($,"bah","aSy",()=>A.nE(A.arz({ +toString:function(){return"$receiver$"}}))) +s($,"bai","aSz",()=>A.nE(A.arz({$method$:null, +toString:function(){return"$receiver$"}}))) +s($,"baj","aSA",()=>A.nE(A.arz(null))) +s($,"bak","aSB",()=>A.nE(function(){var $argumentsExpr$="$arguments$" +try{null.$method$($argumentsExpr$)}catch(q){return q.message}}())) +s($,"ban","aSE",()=>A.nE(A.arz(void 0))) +s($,"bao","aSF",()=>A.nE(function(){var $argumentsExpr$="$arguments$" +try{(void 0).$method$($argumentsExpr$)}catch(q){return q.message}}())) +s($,"bam","aSD",()=>A.nE(A.aNN(null))) +s($,"bal","aSC",()=>A.nE(function(){try{null.$method$}catch(q){return q.message}}())) +s($,"baq","aSH",()=>A.nE(A.aNN(void 0))) +s($,"bap","aSG",()=>A.nE(function(){try{(void 0).$method$}catch(q){return q.message}}())) +s($,"bc_","aTJ",()=>A.apq(254)) +s($,"bbM","aTw",()=>97) +s($,"bbY","aTH",()=>65) +s($,"bbN","aTx",()=>122) +s($,"bbZ","aTI",()=>90) +s($,"bbO","aTy",()=>48) +s($,"baD","aIU",()=>A.b0V()) +s($,"b9f","Ls",()=>A.a6("aD").a($.aET())) +s($,"bau","aSJ",()=>new A.arQ().$0()) +s($,"bav","aSK",()=>new A.arP().$0()) +s($,"baF","aIV",()=>A.aYF(A.em(A.a([-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-1,-2,-2,-2,-2,-2,62,-2,62,-2,63,52,53,54,55,56,57,58,59,60,61,-2,-2,-2,-1,-2,-2,-2,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,-2,-2,-2,-2,63,-2,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,-2,-2,-2,-2,-2],t.t)))) +r($,"baE","aSO",()=>A.aGt(0)) +s($,"b94","aS2",()=>A.aY(["iso_8859-1:1987",B.bz,"iso-ir-100",B.bz,"iso_8859-1",B.bz,"iso-8859-1",B.bz,"latin1",B.bz,"l1",B.bz,"ibm819",B.bz,"cp819",B.bz,"csisolatin1",B.bz,"iso-ir-6",B.by,"ansi_x3.4-1968",B.by,"ansi_x3.4-1986",B.by,"iso_646.irv:1991",B.by,"iso646-us",B.by,"us-ascii",B.by,"us",B.by,"ibm367",B.by,"cp367",B.by,"csascii",B.by,"ascii",B.by,"csutf8",B.a2,"utf-8",B.a2],t.N,A.a6("rk"))) +s($,"bb2","aIY",()=>typeof process!="undefined"&&Object.prototype.toString.call(process)=="[object process]"&&process.platform=="win32") +s($,"bb3","aT3",()=>A.c3("^[\\-\\.0-9A-Z_a-z~]*$",!0,!1)) +s($,"bbv","eL",()=>A.mo(B.a4k)) +s($,"ba4","mp",()=>{A.aZx() +return $.akb}) +s($,"bc9","aTP",()=>A.b34()) +s($,"b8H","aRT",()=>({})) +s($,"b8Z","aIN",()=>B.d.A5(A.aFx(),"Opera",0)) +s($,"b8Y","aS0",()=>!$.aIN()&&B.d.A5(A.aFx(),"Trident/",0)) +s($,"b8X","aS_",()=>B.d.A5(A.aFx(),"Firefox",0)) +s($,"b8W","aRZ",()=>"-"+$.aS1()+"-") +s($,"b9_","aS1",()=>{if($.aS_())var q="moz" +else if($.aS0())q="ms" +else q=$.aIN()?"o":"webkit" +return q}) +s($,"bbA","aJ0",()=>Symbol("jsBoxedDartObjectProperty")) +s($,"b95","e5",()=>A.aVA(A.aM3(A.a([1],t.t)).buffer).getInt8(0)===1?B.av:B.jg) +s($,"bcP","a61",()=>new A.a8A(A.A(t.N,A.a6("nK")))) +r($,"bc7","aER",()=>B.DH) +s($,"bd8","aUt",()=>new A.ajO()) +s($,"b8t","aRN",()=>new A.I()) +s($,"b8q","a5S",()=>new A.a6K()) +r($,"baw","cY",()=>new A.arR()) +s($,"bcL","aUg",()=>{var q=A.a([A.ae7(new A.aDj(),null,"/",new A.aDk())],t.yo) +B.b.E(q,B.b.eQ(B.kD,new A.aDl(),A.a6("ln")).dI(0)) +q.push(A.ae7(new A.aDm(),null,"/:any",new A.aDn())) +return A.aXE(q)}) +s($,"b8z","aRQ",()=>{var q=A.a6("q") +return A.aY([B.jn,A.a([A.lv(1,new A.a8F()),A.lv(2,new A.a8G()),A.lv(3,new A.a8H()),A.lv(4,new A.a8S()),A.lv(5,new A.a8X()),A.lv(6,new A.a8Y()),A.lv(7,new A.a8Z()),A.lv(8,new A.a9_()),A.lv(9,new A.a90()),A.lv(10,new A.a91()),A.lv(11,new A.a92())],q),B.jo,A.a([A.qF(1,new A.a8I()),A.qF(2,new A.a8J()),A.qF(3,new A.a8K()),A.qF(4,new A.a8L()),A.qF(5,new A.a8M()),A.qF(6,new A.a8N()),A.qF(7,new A.a8O()),A.qF(8,new A.a8P())],q),B.jp,A.a([A.aGD(1,new A.a8Q()),A.aGD(2,new A.a8R()),A.aGD(3,new A.a8T())],q),B.jq,A.a([A.aMS(1,new A.a8U()),A.aMS(2,new A.a8V())],q),B.jr,A.a([new A.RV(1,new A.a8W())],q)],t.bv,A.a6("v"))}) +s($,"b8n","zZ",()=>new A.a6y()) +s($,"bbC","aTq",()=>A.aH1(1,1,500)) +s($,"bcS","aUk",()=>new A.Xa()) +s($,"baR","aSZ",()=>A.hC(1,0,t.i)) +s($,"baQ","aSY",()=>A.hC(0,1,t.i)) +s($,"bbW","aTG",()=>A.hC(B.dL,B.e,t.EP)) +s($,"bbP","aTz",()=>A.hC(B.e,B.UT,t.EP)) +r($,"baM","aSU",()=>A.aWk(B.a5P,B.a5O)) +s($,"bcT","aUl",()=>new A.Nr()) +r($,"baS","aT_",()=>new A.a_h(B.a6N,B.a0)) +s($,"bcD","aUa",()=>new A.aDb().$0()) +s($,"bbl","aTe",()=>new A.aCk().$0()) +r($,"b9b","jW",()=>$.aXt) +s($,"b8y","aO",()=>A.bf(0,null,!1,t.Nw)) +s($,"baL","Lu",()=>new A.q2(0,$.aST())) +s($,"baK","aST",()=>A.b42(0)) +s($,"bbo","a5Y",()=>A.n3(null,t.N)) +s($,"bbp","aIZ",()=>A.b_Y()) +s($,"baC","aSN",()=>A.aGt(8)) +s($,"ba3","aSr",()=>A.c3("^\\s*at ([^\\s]+).*$",!0,!1)) +s($,"bd_","aJd",()=>A.aK0(4294967295)) +s($,"bcZ","aJc",()=>A.aK0(3707764736)) +s($,"bcV","aUm",()=>new A.XB()) +s($,"bb_","aT0",()=>A.hC(0.75,1,t.i)) +s($,"bb0","aT1",()=>A.hO(B.Eh)) +s($,"b9q","aSa",()=>A.hO(B.bA)) +s($,"b9r","aSb",()=>A.hO(B.Om)) +r($,"bad","aSu",()=>new A.aqE(new A.aqG(),A.by()===B.au)) +s($,"bbd","aTc",()=>{var q=t.i +return A.a([A.aNM(A.hC(0,0.4,q).iQ(A.hO(B.Kx)),0.166666,q),A.aNM(A.hC(0.4,1,q).iQ(A.hO(B.Kz)),0.833334,q)],A.a6("q>"))}) +s($,"bbc","a5W",()=>A.aNL($.aTc(),t.i)) +s($,"bb5","aT5",()=>A.hC(0,1,t.i).iQ(A.hO(B.Ok))) +s($,"bb6","aT6",()=>A.hC(1.1,1,t.i).iQ($.a5W())) +s($,"bb7","aT7",()=>A.hC(0.85,1,t.i).iQ($.a5W())) +s($,"bb8","aT8",()=>A.hC(0,0.6,t.PM).iQ(A.hO(B.On))) +s($,"bb9","aT9",()=>A.hC(1,0,t.i).iQ(A.hO(B.Oq))) +s($,"bbb","aTb",()=>A.hC(1,1.05,t.i).iQ($.a5W())) +s($,"bba","aTa",()=>A.hC(1,0.9,t.i).iQ($.a5W())) +s($,"baI","aSR",()=>A.hO(B.Op).iQ(A.hO(B.lr))) +s($,"baJ","aSS",()=>A.hO(B.Oo).iQ(A.hO(B.lr))) +s($,"baG","aSP",()=>A.hO(B.lr)) +s($,"baH","aSQ",()=>A.hO(B.Wt)) +s($,"baN","aSV",()=>A.hC(0.875,1,t.i).iQ(A.hO(B.cs))) +s($,"bd3","aUp",()=>new A.Qk()) +s($,"baf","aSw",()=>A.b0q()) +s($,"bae","aSv",()=>new A.Y6(A.A(A.a6("z3"),t.we),5,A.a6("Y6"))) +s($,"b9y","aEK",()=>A.aYE(4)) +r($,"b9M","aSg",()=>B.F_) +r($,"b9O","aSi",()=>{var q=null +return A.aH8(q,B.jy,q,q,q,q,"sans-serif",q,q,18,q,q,q,q,q,q,q,q,q,q,q)}) +r($,"b9N","aSh",()=>{var q=null +return A.aj7(q,q,q,q,q,q,q,q,q,B.ci,B.q,q)}) +s($,"bb1","aT2",()=>A.aYo()) +s($,"b9P","aSj",()=>A.apq(65532)) +s($,"bbX","a5Z",()=>98304) +s($,"b9W","aEN",()=>A.lQ()) +s($,"b9V","aSn",()=>A.aM2(0)) +s($,"b9X","aSo",()=>A.aM2(0)) +s($,"b9Y","aSp",()=>A.aYp().a) +s($,"bdb","qv",()=>{var q=t.N,p=t.L0 +return new A.ajG(A.A(q,A.a6("ae")),A.A(q,p),A.A(q,p))}) +s($,"b8v","aRP",()=>new A.a7X()) +s($,"b9s","aSc",()=>A.aY([4294967562,B.Oy,4294967564,B.Oz,4294967556,B.OA],t.S,t.SQ)) +s($,"b9K","aEM",()=>new A.aks(A.a([],A.a6("q<~(kv)>")),A.A(t.v3,t.bd))) +s($,"b9J","aSf",()=>{var q=t.v3 +return A.aY([B.a6A,A.dg([B.dP],q),B.a6B,A.dg([B.dR],q),B.a6C,A.dg([B.dP,B.dR],q),B.a6z,A.dg([B.dP],q),B.a6w,A.dg([B.dO],q),B.a6x,A.dg([B.f6],q),B.a6y,A.dg([B.dO,B.f6],q),B.a6v,A.dg([B.dO],q),B.a6s,A.dg([B.dN],q),B.a6t,A.dg([B.f5],q),B.a6u,A.dg([B.dN,B.f5],q),B.a6r,A.dg([B.dN],q),B.a6E,A.dg([B.dQ],q),B.a6F,A.dg([B.f7],q),B.a6G,A.dg([B.dQ,B.f7],q),B.a6D,A.dg([B.dQ],q),B.a6H,A.dg([B.d7],q),B.a6I,A.dg([B.hY],q),B.a6J,A.dg([B.hX],q),B.a6K,A.dg([B.f4],q)],A.a6("dy"),A.a6("bV"))}) +s($,"b9I","aIP",()=>A.aY([B.dP,B.eP,B.dR,B.hK,B.dO,B.cC,B.f6,B.d4,B.dN,B.eO,B.f5,B.hJ,B.dQ,B.eQ,B.f7,B.hL,B.d7,B.eL,B.hY,B.hH,B.hX,B.hI],t.v3,t.bd)) +s($,"b9H","aSe",()=>{var q=A.A(t.v3,t.bd) +q.n(0,B.f4,B.kL) +q.E(0,$.aIP()) +return q}) +s($,"b9a","aS4",()=>new A.Oy("\n",!1,"")) +s($,"bac","cI",()=>{var q=$.aEP() +q=new A.Uz(q,A.dg([q],A.a6("Gb")),A.A(t.N,A.a6("aMW"))) +q.c=B.vL +q.ga7T().pn(q.gaeC()) +return q}) +s($,"baW","aEP",()=>new A.a_I()) +s($,"bar","aIR",()=>{var q=new A.V0() +q.a=B.Vd +q.gajF().pn(q.gadH()) +return q}) +r($,"baB","aSM",()=>{var q=A.a6("~(bk)") +return A.aY([B.a46,A.aKj(!0),B.a4U,A.aKj(!1),B.a4s,new A.SH(A.DD(q)),B.a4j,new A.QG(A.DD(q)),B.a4o,new A.RM(A.DD(q)),B.Bk,new A.Bu(!1,A.DD(q)),B.m8,A.b_d(),B.a4p,new A.RR(A.DD(q)),B.a4F,new A.Vm(A.DD(q))],t.u,t.od)}) +s($,"b8O","aEH",()=>{var q,p,o,n=t.vz,m=A.A(t.zU,n) +for(q=A.a6("aW"),p=0;p<2;++p){o=B.kI[p] +m.E(0,A.aY([A.eT(B.bt,!1,!1,!1,o),B.jN,A.eT(B.bt,!1,!0,!1,o),B.jR,A.eT(B.bt,!0,!1,!1,o),B.jP,A.eT(B.be,!1,!1,!1,o),B.jO,A.eT(B.be,!1,!0,!1,o),B.jS,A.eT(B.be,!0,!1,!1,o),B.jQ],q,n))}m.n(0,B.dX,B.es) +m.n(0,B.dY,B.et) +m.n(0,B.fn,B.h9) +m.n(0,B.fo,B.ha) +m.n(0,B.A6,B.k2) +m.n(0,B.A7,B.k3) +m.n(0,B.A8,B.k6) +m.n(0,B.A9,B.k7) +m.n(0,B.lG,B.cV) +m.n(0,B.lH,B.cW) +m.n(0,B.lI,B.h7) +m.n(0,B.lJ,B.h8) +m.n(0,B.Aa,B.or) +m.n(0,B.Ab,B.os) +m.n(0,B.Ac,B.op) +m.n(0,B.Ad,B.oq) +m.n(0,B.Ae,B.k4) +m.n(0,B.Af,B.k5) +m.n(0,B.Ag,B.M4) +m.n(0,B.Ah,B.M5) +m.n(0,B.Xz,B.M2) +m.n(0,B.XA,B.M3) +m.n(0,B.fl,B.ox) +m.n(0,B.fm,B.oy) +m.n(0,B.lF,B.k8) +m.n(0,B.lK,B.k9) +m.n(0,B.Ao,B.o2) +m.n(0,B.Ap,B.o1) +m.n(0,B.Aq,B.n7) +m.n(0,B.lL,B.na) +m.n(0,B.XO,B.nc) +m.n(0,B.XP,B.n9) +m.n(0,B.it,B.B) +m.n(0,B.io,B.B) +return m}) +s($,"b8N","aIL",()=>$.aEH()) +s($,"b8P","aRU",()=>$.aIL()) +s($,"b8R","aRW",()=>{var q=A.p6($.aEH(),t.zU,t.vz) +q.n(0,B.ip,B.cV) +q.n(0,B.iq,B.cW) +q.n(0,B.ir,B.or) +q.n(0,B.is,B.os) +return q}) +s($,"b8S","aIM",()=>{var q,p,o,n=t.vz,m=A.A(t.zU,n) +for(q=A.a6("aW"),p=0;p<2;++p){o=B.kI[p] +m.E(0,A.aY([A.eT(B.bt,!1,!1,!1,o),B.jN,A.eT(B.bt,!0,!1,!1,o),B.jR,A.eT(B.bt,!1,!1,!0,o),B.jP,A.eT(B.be,!1,!1,!1,o),B.jO,A.eT(B.be,!0,!1,!1,o),B.jS,A.eT(B.be,!1,!1,!0,o),B.jQ],q,n))}m.n(0,B.dX,B.es) +m.n(0,B.dY,B.et) +m.n(0,B.fn,B.h9) +m.n(0,B.fo,B.ha) +m.n(0,B.A6,B.k2) +m.n(0,B.A7,B.k3) +m.n(0,B.A8,B.k6) +m.n(0,B.A9,B.k7) +m.n(0,B.lG,B.k4) +m.n(0,B.lH,B.k5) +m.n(0,B.lI,B.cV) +m.n(0,B.lJ,B.cW) +m.n(0,B.Aa,B.ov) +m.n(0,B.Ab,B.ow) +m.n(0,B.Ac,B.ot) +m.n(0,B.Ad,B.ou) +m.n(0,B.Ai,B.cV) +m.n(0,B.Aj,B.cW) +m.n(0,B.Ak,B.h7) +m.n(0,B.Al,B.h8) +m.n(0,B.XB,B.on) +m.n(0,B.XC,B.oo) +m.n(0,B.XD,B.k0) +m.n(0,B.XE,B.k1) +m.n(0,B.XQ,B.nb) +m.n(0,B.ip,B.zF) +m.n(0,B.iq,B.zG) +m.n(0,B.ir,B.k0) +m.n(0,B.is,B.k1) +m.n(0,B.fl,B.lu) +m.n(0,B.fm,B.ih) +m.n(0,B.lF,B.k8) +m.n(0,B.lK,B.k9) +m.n(0,B.As,B.o2) +m.n(0,B.At,B.o1) +m.n(0,B.Au,B.n7) +m.n(0,B.Ar,B.na) +m.n(0,B.XH,B.nc) +m.n(0,B.XI,B.n9) +m.n(0,B.XJ,B.cW) +m.n(0,B.lL,B.cV) +m.n(0,B.XK,B.et) +m.n(0,B.XL,B.es) +m.n(0,B.XM,B.ha) +m.n(0,B.XN,B.h9) +m.n(0,B.it,B.B) +m.n(0,B.io,B.B) +return m}) +s($,"b8Q","aRV",()=>$.aIM()) +s($,"b8U","aRY",()=>{var q=A.p6($.aEH(),t.zU,t.vz) +q.n(0,B.fl,B.ox) +q.n(0,B.fm,B.oy) +q.n(0,B.ip,B.M0) +q.n(0,B.iq,B.M1) +q.n(0,B.ir,B.LZ) +q.n(0,B.is,B.M_) +q.n(0,B.Am,B.h7) +q.n(0,B.An,B.h8) +q.n(0,B.XF,B.op) +q.n(0,B.XG,B.oq) +return q}) +s($,"b8T","aRX",()=>{var q,p,o,n=t.vz,m=A.A(t.zU,n) +for(q=A.a6("aW"),p=0;p<2;++p){o=B.kI[p] +m.E(0,A.aY([A.eT(B.bt,!1,!1,!1,o),B.B,A.eT(B.be,!1,!1,!1,o),B.B,A.eT(B.bt,!0,!1,!1,o),B.B,A.eT(B.be,!0,!1,!1,o),B.B,A.eT(B.bt,!1,!0,!1,o),B.B,A.eT(B.be,!1,!0,!1,o),B.B,A.eT(B.bt,!1,!1,!0,o),B.B,A.eT(B.be,!1,!1,!0,o),B.B],q,n))}m.E(0,B.Tt) +m.n(0,B.Ao,B.B) +m.n(0,B.As,B.B) +m.n(0,B.Ap,B.B) +m.n(0,B.At,B.B) +m.n(0,B.Aq,B.B) +m.n(0,B.Au,B.B) +m.n(0,B.lL,B.B) +m.n(0,B.Ar,B.B) +return m}) +r($,"baT","aIW",()=>new A.a_g(B.a6L,B.a0)) +s($,"baP","aSX",()=>A.hC(1,0,t.i)) +s($,"b9A","l0",()=>A.aKV(t.uK)) +s($,"baZ","a5V",()=>{var q=A.b0M(null,t.ob),p=A.aW1(t.H) +return new A.a_f(B.Ws,q,p)}) +s($,"baO","aSW",()=>A.dp(16667,0)) +s($,"b9S","aSm",()=>A.aH1(0.5,1.1,100)) +s($,"b8C","aEG",()=>A.aQW(0.78)/A.aQW(0.9)) +s($,"bde","aUv",()=>{var q=t.K +return new A.apA(new A.a8a(A.A(q,A.a6("ae")),A.A(q,t.V4)))}) +s($,"bdi","aUx",()=>new A.ajQ(A.A(t.N,A.a6("ae?(c1?)")))) +r($,"b9Q","aSk",()=>{var q=null +return A.b_2(q,q,B.eI,B.d5,A.zE(q,q,q))}) +s($,"bc2","aJ5",()=>A.c3(":(\\w+)(\\((?:\\\\.|[^\\\\()])+\\))?",!0,!1)) +s($,"b9g","aS7",()=>new A.auq()) +r($,"bcY","aUo",()=>A.aVS()) +r($,"bcM","aUh",()=>new A.a6D()) +s($,"b8r","aRM",()=>A.c3("^[\\w!#%&'*+\\-.^`|~]+$",!0,!1)) +s($,"bbr","aTh",()=>A.c3('["\\x00-\\x1F\\x7F]',!0,!1)) +s($,"bdh","aUw",()=>A.c3('[^()<>@,;:"\\\\/[\\]?={} \\t\\x00-\\x1F\\x7F]+',!0,!1)) +s($,"bc0","aTK",()=>A.c3("(?:\\r\\n)?[ \\t]+",!0,!1)) +s($,"bc5","aTN",()=>A.c3('"(?:[^"\\x00-\\x1F\\x7F]|\\\\.)*"',!0,!1)) +s($,"bc4","aTM",()=>A.c3("\\\\(.)",!0,!1)) +s($,"bd5","aUr",()=>A.c3('[()<>@,;:"\\\\/\\[\\]?={} \\t\\x00-\\x1F\\x7F]',!0,!1)) +s($,"bdj","aUy",()=>A.c3("(?:"+$.aTK().a+")*",!0,!1)) +s($,"b9C","aIO",()=>new A.I()) +r($,"aYQ","aSd",()=>{var q=new A.ahI() +q.MH($.aIO()) +return q}) +s($,"bcQ","aJb",()=>new A.a9N($.aIQ(),null)) +s($,"ba7","aSs",()=>new A.ak3(A.c3("/",!0,!1),A.c3("[^/]$",!0,!1),A.c3("^/",!0,!1))) +s($,"ba9","a5U",()=>new A.as5(A.c3("[/\\\\]",!0,!1),A.c3("[^/\\\\]$",!0,!1),A.c3("^(\\\\\\\\[^\\\\]+\\\\[^\\\\/]+|[a-zA-Z]:[/\\\\])",!0,!1),A.c3("^[/\\\\](?![/\\\\])",!0,!1))) +s($,"ba8","Lt",()=>new A.arO(A.c3("/",!0,!1),A.c3("(^[a-zA-Z][-+.a-zA-Z\\d]*://|[^/])$",!0,!1),A.c3("[a-zA-Z][-+.a-zA-Z\\d]*://[^/]*",!0,!1),A.c3("^/",!0,!1))) +s($,"ba6","aIQ",()=>A.b01()) +s($,"bag","aSx",()=>new A.QF("newline expected")) +s($,"bce","aTS",()=>A.p8(A.aI8(),new A.aDa(),!1,t.N,t.eg)) +s($,"bc6","aTO",()=>{var q=t.N +return A.tR(A.b_u(A.aI8(),A.aIa("-",null),A.aI8(),q,q,q),new A.aD5(),q,q,q,t.eg)}) +s($,"bca","aTQ",()=>{var q=t.eg +return A.p8(A.aZk(A.aVM(A.a([$.aTO(),$.aTS()],A.a6("q>")),null,q),q),new A.aD9(),!1,A.a6("v"),A.a6("eq"))}) +s($,"bc3","aTL",()=>{var q=t.ob,p=A.a6("eq") +return A.aMF(A.b_t(A.aYO(A.aIa("^",null),t.N),$.aTQ(),q,p),new A.aD3(),q,p,p)}) +s($,"b9D","a5T",()=>A.aKV(t.K)) +s($,"bbz","aTo",()=>!t.Cm.b(A.a([],t.Z))) +s($,"bas","aIT",()=>new A.I()) +r($,"b0J","aIS",()=>{var q=new A.ahJ() +q.MH($.aIT()) +return q}) +s($,"bat","aSI",()=>{var q=A.dg(["http","https"],t.N).iw(0) +q.E(0,B.A4) +return q}) +s($,"b9c","aS5",()=>A.aMi()) +s($,"b9d","aS6",()=>{var q=A.aMi() +q.slo(B.jd) +q.siU(B.LW) +return q}) +s($,"bb4","aT4",()=>A.b8h()) +s($,"b99","aS3",()=>{var q=A.aYC(4) +B.f_.a17(q,0,1056964608) +return q}) +s($,"bax","v9",()=>A.aGt(8)) +s($,"bcK","aJa",()=>A.c3("\\s",!0,!1)) +s($,"baa","aSt",()=>A.c3(" +",!0,!1)) +s($,"bcH","aUd",()=>A.c3("^( *,?([^(]+)\\(([^)]*)\\))*$",!0,!1)) +s($,"bcG","aUc",()=>A.c3(" *,?([^(]+)\\(([^)]*)\\)",!0,!1)) +s($,"bcF","aUb",()=>A.c3("[&<\\u0001-\\u0008\\u000b\\u000c\\u000e-\\u001f\\u007f-\\u0084\\u0086-\\u009f]|]]>",!0,!1)) +s($,"bcd","aTR",()=>A.c3("['&<\\n\\r\\t\\u0001-\\u0008\\u000b\\u000c\\u000e-\\u001f\\u007f-\\u0084\\u0086-\\u009f]",!0,!1)) +s($,"bbq","aTg",()=>A.c3('["&<\\n\\r\\t\\u0001-\\u0008\\u000b\\u000c\\u000e-\\u001f\\u007f-\\u0084\\u0086-\\u009f]',!0,!1)) +s($,"bcW","aUn",()=>new A.Vq(new A.aDJ(),5,A.A(A.a6("pX"),A.a6("au")),A.a6("Vq>")))})();(function nativeSupport(){!function(){var s=function(a){var m={} +m[a]=1 +return Object.keys(hunkHelpers.convertToFastObject(m))[0]} +v.getIsolateTag=function(a){return s("___dart_"+a+v.isolateTag)} +var r="___dart_isolate_tags_" +var q=Object[r]||(Object[r]=Object.create(null)) +var p="_ZxYxX" +for(var o=0;;o++){var n=s(p+"_"+o+"_") +if(!(n in q)){q[n]=1 +v.isolateTag=n +break}}v.dispatchPropertyName=v.getIsolateTag("dispatch_record")}() +hunkHelpers.setOrUpdateInterceptorsByTag({WebGL:J.wz,AnimationEffectReadOnly:J.e,AnimationEffectTiming:J.e,AnimationEffectTimingReadOnly:J.e,AnimationTimeline:J.e,AnimationWorkletGlobalScope:J.e,AuthenticatorAssertionResponse:J.e,AuthenticatorAttestationResponse:J.e,AuthenticatorResponse:J.e,BackgroundFetchFetch:J.e,BackgroundFetchManager:J.e,BackgroundFetchSettledFetch:J.e,BarProp:J.e,BarcodeDetector:J.e,BluetoothRemoteGATTDescriptor:J.e,Body:J.e,BudgetState:J.e,CacheStorage:J.e,CanvasGradient:J.e,CanvasPattern:J.e,CanvasRenderingContext2D:J.e,Client:J.e,Clients:J.e,CookieStore:J.e,Coordinates:J.e,Credential:J.e,CredentialUserData:J.e,CredentialsContainer:J.e,Crypto:J.e,CryptoKey:J.e,CSS:J.e,CSSVariableReferenceValue:J.e,CustomElementRegistry:J.e,DataTransfer:J.e,DataTransferItem:J.e,DeprecatedStorageInfo:J.e,DeprecatedStorageQuota:J.e,DeprecationReport:J.e,DetectedBarcode:J.e,DetectedFace:J.e,DetectedText:J.e,DeviceAcceleration:J.e,DeviceRotationRate:J.e,DirectoryEntry:J.e,webkitFileSystemDirectoryEntry:J.e,FileSystemDirectoryEntry:J.e,DirectoryReader:J.e,WebKitDirectoryReader:J.e,webkitFileSystemDirectoryReader:J.e,FileSystemDirectoryReader:J.e,DocumentOrShadowRoot:J.e,DocumentTimeline:J.e,DOMError:J.e,DOMImplementation:J.e,Iterator:J.e,DOMMatrix:J.e,DOMMatrixReadOnly:J.e,DOMParser:J.e,DOMPoint:J.e,DOMPointReadOnly:J.e,DOMQuad:J.e,DOMStringMap:J.e,Entry:J.e,webkitFileSystemEntry:J.e,FileSystemEntry:J.e,External:J.e,FaceDetector:J.e,FederatedCredential:J.e,FileEntry:J.e,webkitFileSystemFileEntry:J.e,FileSystemFileEntry:J.e,DOMFileSystem:J.e,WebKitFileSystem:J.e,webkitFileSystem:J.e,FileSystem:J.e,FontFace:J.e,FontFaceSource:J.e,FormData:J.e,GamepadButton:J.e,GamepadPose:J.e,Geolocation:J.e,Position:J.e,GeolocationPosition:J.e,Headers:J.e,HTMLHyperlinkElementUtils:J.e,IdleDeadline:J.e,ImageBitmap:J.e,ImageBitmapRenderingContext:J.e,ImageCapture:J.e,ImageData:J.e,InputDeviceCapabilities:J.e,IntersectionObserver:J.e,IntersectionObserverEntry:J.e,InterventionReport:J.e,KeyframeEffect:J.e,KeyframeEffectReadOnly:J.e,MediaCapabilities:J.e,MediaCapabilitiesInfo:J.e,MediaDeviceInfo:J.e,MediaError:J.e,MediaKeyStatusMap:J.e,MediaKeySystemAccess:J.e,MediaKeys:J.e,MediaKeysPolicy:J.e,MediaMetadata:J.e,MediaSession:J.e,MediaSettingsRange:J.e,MemoryInfo:J.e,MessageChannel:J.e,Metadata:J.e,MutationObserver:J.e,WebKitMutationObserver:J.e,MutationRecord:J.e,NavigationPreloadManager:J.e,Navigator:J.e,NavigatorAutomationInformation:J.e,NavigatorConcurrentHardware:J.e,NavigatorCookies:J.e,NavigatorUserMediaError:J.e,NodeFilter:J.e,NodeIterator:J.e,NonDocumentTypeChildNode:J.e,NonElementParentNode:J.e,NoncedElement:J.e,OffscreenCanvasRenderingContext2D:J.e,OverconstrainedError:J.e,PaintRenderingContext2D:J.e,PaintSize:J.e,PaintWorkletGlobalScope:J.e,PasswordCredential:J.e,Path2D:J.e,PaymentAddress:J.e,PaymentInstruments:J.e,PaymentManager:J.e,PaymentResponse:J.e,PerformanceEntry:J.e,PerformanceLongTaskTiming:J.e,PerformanceMark:J.e,PerformanceMeasure:J.e,PerformanceNavigation:J.e,PerformanceNavigationTiming:J.e,PerformanceObserver:J.e,PerformanceObserverEntryList:J.e,PerformancePaintTiming:J.e,PerformanceResourceTiming:J.e,PerformanceServerTiming:J.e,PerformanceTiming:J.e,Permissions:J.e,PhotoCapabilities:J.e,PositionError:J.e,GeolocationPositionError:J.e,Presentation:J.e,PresentationReceiver:J.e,PublicKeyCredential:J.e,PushManager:J.e,PushMessageData:J.e,PushSubscription:J.e,PushSubscriptionOptions:J.e,Range:J.e,RelatedApplication:J.e,ReportBody:J.e,ReportingObserver:J.e,ResizeObserver:J.e,ResizeObserverEntry:J.e,RTCCertificate:J.e,RTCIceCandidate:J.e,mozRTCIceCandidate:J.e,RTCLegacyStatsReport:J.e,RTCRtpContributingSource:J.e,RTCRtpReceiver:J.e,RTCRtpSender:J.e,RTCSessionDescription:J.e,mozRTCSessionDescription:J.e,RTCStatsResponse:J.e,Screen:J.e,ScrollState:J.e,ScrollTimeline:J.e,Selection:J.e,SharedArrayBuffer:J.e,SpeechRecognitionAlternative:J.e,SpeechSynthesisVoice:J.e,StaticRange:J.e,StorageManager:J.e,StyleMedia:J.e,StylePropertyMap:J.e,StylePropertyMapReadonly:J.e,SyncManager:J.e,TaskAttributionTiming:J.e,TextDetector:J.e,TextMetrics:J.e,TrackDefault:J.e,TreeWalker:J.e,TrustedHTML:J.e,TrustedScriptURL:J.e,TrustedURL:J.e,UnderlyingSourceBase:J.e,URLSearchParams:J.e,VRCoordinateSystem:J.e,VRDisplayCapabilities:J.e,VREyeParameters:J.e,VRFrameData:J.e,VRFrameOfReference:J.e,VRPose:J.e,VRStageBounds:J.e,VRStageBoundsPoint:J.e,VRStageParameters:J.e,ValidityState:J.e,VideoPlaybackQuality:J.e,VideoTrack:J.e,VTTRegion:J.e,WindowClient:J.e,WorkletAnimation:J.e,WorkletGlobalScope:J.e,XPathEvaluator:J.e,XPathExpression:J.e,XPathNSResolver:J.e,XPathResult:J.e,XMLSerializer:J.e,XSLTProcessor:J.e,Bluetooth:J.e,BluetoothCharacteristicProperties:J.e,BluetoothRemoteGATTServer:J.e,BluetoothRemoteGATTService:J.e,BluetoothUUID:J.e,BudgetService:J.e,Cache:J.e,DOMFileSystemSync:J.e,DirectoryEntrySync:J.e,DirectoryReaderSync:J.e,EntrySync:J.e,FileEntrySync:J.e,FileReaderSync:J.e,FileWriterSync:J.e,HTMLAllCollection:J.e,Mojo:J.e,MojoHandle:J.e,MojoWatcher:J.e,NFC:J.e,PagePopupController:J.e,Report:J.e,Request:J.e,Response:J.e,SubtleCrypto:J.e,USBAlternateInterface:J.e,USBConfiguration:J.e,USBDevice:J.e,USBEndpoint:J.e,USBInTransferResult:J.e,USBInterface:J.e,USBIsochronousInTransferPacket:J.e,USBIsochronousInTransferResult:J.e,USBIsochronousOutTransferPacket:J.e,USBIsochronousOutTransferResult:J.e,USBOutTransferResult:J.e,WorkerLocation:J.e,WorkerNavigator:J.e,Worklet:J.e,IDBCursor:J.e,IDBCursorWithValue:J.e,IDBFactory:J.e,IDBIndex:J.e,IDBKeyRange:J.e,IDBObjectStore:J.e,IDBObservation:J.e,IDBObserver:J.e,IDBObserverChanges:J.e,SVGAngle:J.e,SVGAnimatedAngle:J.e,SVGAnimatedBoolean:J.e,SVGAnimatedEnumeration:J.e,SVGAnimatedInteger:J.e,SVGAnimatedLength:J.e,SVGAnimatedLengthList:J.e,SVGAnimatedNumber:J.e,SVGAnimatedNumberList:J.e,SVGAnimatedPreserveAspectRatio:J.e,SVGAnimatedRect:J.e,SVGAnimatedString:J.e,SVGAnimatedTransformList:J.e,SVGMatrix:J.e,SVGPoint:J.e,SVGPreserveAspectRatio:J.e,SVGRect:J.e,SVGUnitTypes:J.e,AudioListener:J.e,AudioParam:J.e,AudioTrack:J.e,AudioWorkletGlobalScope:J.e,AudioWorkletProcessor:J.e,PeriodicWave:J.e,WebGLActiveInfo:J.e,ANGLEInstancedArrays:J.e,ANGLE_instanced_arrays:J.e,WebGLBuffer:J.e,WebGLCanvas:J.e,WebGLColorBufferFloat:J.e,WebGLCompressedTextureASTC:J.e,WebGLCompressedTextureATC:J.e,WEBGL_compressed_texture_atc:J.e,WebGLCompressedTextureETC1:J.e,WEBGL_compressed_texture_etc1:J.e,WebGLCompressedTextureETC:J.e,WebGLCompressedTexturePVRTC:J.e,WEBGL_compressed_texture_pvrtc:J.e,WebGLCompressedTextureS3TC:J.e,WEBGL_compressed_texture_s3tc:J.e,WebGLCompressedTextureS3TCsRGB:J.e,WebGLDebugRendererInfo:J.e,WEBGL_debug_renderer_info:J.e,WebGLDebugShaders:J.e,WEBGL_debug_shaders:J.e,WebGLDepthTexture:J.e,WEBGL_depth_texture:J.e,WebGLDrawBuffers:J.e,WEBGL_draw_buffers:J.e,EXTsRGB:J.e,EXT_sRGB:J.e,EXTBlendMinMax:J.e,EXT_blend_minmax:J.e,EXTColorBufferFloat:J.e,EXTColorBufferHalfFloat:J.e,EXTDisjointTimerQuery:J.e,EXTDisjointTimerQueryWebGL2:J.e,EXTFragDepth:J.e,EXT_frag_depth:J.e,EXTShaderTextureLOD:J.e,EXT_shader_texture_lod:J.e,EXTTextureFilterAnisotropic:J.e,EXT_texture_filter_anisotropic:J.e,WebGLFramebuffer:J.e,WebGLGetBufferSubDataAsync:J.e,WebGLLoseContext:J.e,WebGLExtensionLoseContext:J.e,WEBGL_lose_context:J.e,OESElementIndexUint:J.e,OES_element_index_uint:J.e,OESStandardDerivatives:J.e,OES_standard_derivatives:J.e,OESTextureFloat:J.e,OES_texture_float:J.e,OESTextureFloatLinear:J.e,OES_texture_float_linear:J.e,OESTextureHalfFloat:J.e,OES_texture_half_float:J.e,OESTextureHalfFloatLinear:J.e,OES_texture_half_float_linear:J.e,OESVertexArrayObject:J.e,OES_vertex_array_object:J.e,WebGLProgram:J.e,WebGLQuery:J.e,WebGLRenderbuffer:J.e,WebGLRenderingContext:J.e,WebGL2RenderingContext:J.e,WebGLSampler:J.e,WebGLShader:J.e,WebGLShaderPrecisionFormat:J.e,WebGLSync:J.e,WebGLTexture:J.e,WebGLTimerQueryEXT:J.e,WebGLTransformFeedback:J.e,WebGLUniformLocation:J.e,WebGLVertexArrayObject:J.e,WebGLVertexArrayObjectOES:J.e,WebGL2RenderingContextBase:J.e,ArrayBuffer:A.Dl,ArrayBufferView:A.Dq,DataView:A.Dm,Float32Array:A.Dn,Float64Array:A.QB,Int16Array:A.QC,Int32Array:A.Dp,Int8Array:A.QD,Uint16Array:A.Dr,Uint32Array:A.Ds,Uint8ClampedArray:A.Dt,CanvasPixelArray:A.Dt,Uint8Array:A.tt,HTMLAudioElement:A.aR,HTMLBRElement:A.aR,HTMLBaseElement:A.aR,HTMLBodyElement:A.aR,HTMLButtonElement:A.aR,HTMLCanvasElement:A.aR,HTMLContentElement:A.aR,HTMLDListElement:A.aR,HTMLDataElement:A.aR,HTMLDataListElement:A.aR,HTMLDetailsElement:A.aR,HTMLDialogElement:A.aR,HTMLDivElement:A.aR,HTMLEmbedElement:A.aR,HTMLFieldSetElement:A.aR,HTMLHRElement:A.aR,HTMLHeadElement:A.aR,HTMLHeadingElement:A.aR,HTMLHtmlElement:A.aR,HTMLIFrameElement:A.aR,HTMLImageElement:A.aR,HTMLInputElement:A.aR,HTMLLIElement:A.aR,HTMLLabelElement:A.aR,HTMLLegendElement:A.aR,HTMLLinkElement:A.aR,HTMLMapElement:A.aR,HTMLMediaElement:A.aR,HTMLMenuElement:A.aR,HTMLMetaElement:A.aR,HTMLMeterElement:A.aR,HTMLModElement:A.aR,HTMLOListElement:A.aR,HTMLObjectElement:A.aR,HTMLOptGroupElement:A.aR,HTMLOptionElement:A.aR,HTMLOutputElement:A.aR,HTMLParagraphElement:A.aR,HTMLParamElement:A.aR,HTMLPictureElement:A.aR,HTMLPreElement:A.aR,HTMLProgressElement:A.aR,HTMLQuoteElement:A.aR,HTMLScriptElement:A.aR,HTMLShadowElement:A.aR,HTMLSlotElement:A.aR,HTMLSourceElement:A.aR,HTMLSpanElement:A.aR,HTMLStyleElement:A.aR,HTMLTableCaptionElement:A.aR,HTMLTableCellElement:A.aR,HTMLTableDataCellElement:A.aR,HTMLTableHeaderCellElement:A.aR,HTMLTableColElement:A.aR,HTMLTableElement:A.aR,HTMLTableRowElement:A.aR,HTMLTableSectionElement:A.aR,HTMLTemplateElement:A.aR,HTMLTextAreaElement:A.aR,HTMLTimeElement:A.aR,HTMLTitleElement:A.aR,HTMLTrackElement:A.aR,HTMLUListElement:A.aR,HTMLUnknownElement:A.aR,HTMLVideoElement:A.aR,HTMLDirectoryElement:A.aR,HTMLFontElement:A.aR,HTMLFrameElement:A.aR,HTMLFrameSetElement:A.aR,HTMLMarqueeElement:A.aR,HTMLElement:A.aR,AccessibleNodeList:A.LA,HTMLAnchorElement:A.LE,HTMLAreaElement:A.LK,Blob:A.AD,CDATASection:A.la,CharacterData:A.la,Comment:A.la,ProcessingInstruction:A.la,Text:A.la,CSSPerspective:A.Ni,CSSCharsetRule:A.cD,CSSConditionRule:A.cD,CSSFontFaceRule:A.cD,CSSGroupingRule:A.cD,CSSImportRule:A.cD,CSSKeyframeRule:A.cD,MozCSSKeyframeRule:A.cD,WebKitCSSKeyframeRule:A.cD,CSSKeyframesRule:A.cD,MozCSSKeyframesRule:A.cD,WebKitCSSKeyframesRule:A.cD,CSSMediaRule:A.cD,CSSNamespaceRule:A.cD,CSSPageRule:A.cD,CSSRule:A.cD,CSSStyleRule:A.cD,CSSSupportsRule:A.cD,CSSViewportRule:A.cD,CSSStyleDeclaration:A.vP,MSStyleCSSProperties:A.vP,CSS2Properties:A.vP,CSSImageValue:A.hd,CSSKeywordValue:A.hd,CSSNumericValue:A.hd,CSSPositionValue:A.hd,CSSResourceValue:A.hd,CSSUnitValue:A.hd,CSSURLImageValue:A.hd,CSSStyleValue:A.hd,CSSMatrixComponent:A.k4,CSSRotation:A.k4,CSSScale:A.k4,CSSSkew:A.k4,CSSTranslation:A.k4,CSSTransformComponent:A.k4,CSSTransformValue:A.Nj,CSSUnparsedValue:A.Nk,DataTransferItemList:A.Nw,Document:A.mH,HTMLDocument:A.mH,XMLDocument:A.mH,DOMException:A.NX,ClientRectList:A.Bz,DOMRectList:A.Bz,DOMRectReadOnly:A.BA,DOMStringList:A.NZ,DOMTokenList:A.O0,MathMLElement:A.aN,SVGAElement:A.aN,SVGAnimateElement:A.aN,SVGAnimateMotionElement:A.aN,SVGAnimateTransformElement:A.aN,SVGAnimationElement:A.aN,SVGCircleElement:A.aN,SVGClipPathElement:A.aN,SVGDefsElement:A.aN,SVGDescElement:A.aN,SVGDiscardElement:A.aN,SVGEllipseElement:A.aN,SVGFEBlendElement:A.aN,SVGFEColorMatrixElement:A.aN,SVGFEComponentTransferElement:A.aN,SVGFECompositeElement:A.aN,SVGFEConvolveMatrixElement:A.aN,SVGFEDiffuseLightingElement:A.aN,SVGFEDisplacementMapElement:A.aN,SVGFEDistantLightElement:A.aN,SVGFEFloodElement:A.aN,SVGFEFuncAElement:A.aN,SVGFEFuncBElement:A.aN,SVGFEFuncGElement:A.aN,SVGFEFuncRElement:A.aN,SVGFEGaussianBlurElement:A.aN,SVGFEImageElement:A.aN,SVGFEMergeElement:A.aN,SVGFEMergeNodeElement:A.aN,SVGFEMorphologyElement:A.aN,SVGFEOffsetElement:A.aN,SVGFEPointLightElement:A.aN,SVGFESpecularLightingElement:A.aN,SVGFESpotLightElement:A.aN,SVGFETileElement:A.aN,SVGFETurbulenceElement:A.aN,SVGFilterElement:A.aN,SVGForeignObjectElement:A.aN,SVGGElement:A.aN,SVGGeometryElement:A.aN,SVGGraphicsElement:A.aN,SVGImageElement:A.aN,SVGLineElement:A.aN,SVGLinearGradientElement:A.aN,SVGMarkerElement:A.aN,SVGMaskElement:A.aN,SVGMetadataElement:A.aN,SVGPathElement:A.aN,SVGPatternElement:A.aN,SVGPolygonElement:A.aN,SVGPolylineElement:A.aN,SVGRadialGradientElement:A.aN,SVGRectElement:A.aN,SVGScriptElement:A.aN,SVGSetElement:A.aN,SVGStopElement:A.aN,SVGStyleElement:A.aN,SVGElement:A.aN,SVGSVGElement:A.aN,SVGSwitchElement:A.aN,SVGSymbolElement:A.aN,SVGTSpanElement:A.aN,SVGTextContentElement:A.aN,SVGTextElement:A.aN,SVGTextPathElement:A.aN,SVGTextPositioningElement:A.aN,SVGTitleElement:A.aN,SVGUseElement:A.aN,SVGViewElement:A.aN,SVGGradientElement:A.aN,SVGComponentTransferFunctionElement:A.aN,SVGFEDropShadowElement:A.aN,SVGMPathElement:A.aN,Element:A.aN,AbortPaymentEvent:A.aB,AnimationEvent:A.aB,AnimationPlaybackEvent:A.aB,ApplicationCacheErrorEvent:A.aB,BackgroundFetchClickEvent:A.aB,BackgroundFetchEvent:A.aB,BackgroundFetchFailEvent:A.aB,BackgroundFetchedEvent:A.aB,BeforeInstallPromptEvent:A.aB,BeforeUnloadEvent:A.aB,BlobEvent:A.aB,CanMakePaymentEvent:A.aB,ClipboardEvent:A.aB,CloseEvent:A.aB,CompositionEvent:A.aB,CustomEvent:A.aB,DeviceMotionEvent:A.aB,DeviceOrientationEvent:A.aB,ErrorEvent:A.aB,ExtendableEvent:A.aB,ExtendableMessageEvent:A.aB,FetchEvent:A.aB,FocusEvent:A.aB,FontFaceSetLoadEvent:A.aB,ForeignFetchEvent:A.aB,GamepadEvent:A.aB,HashChangeEvent:A.aB,InstallEvent:A.aB,KeyboardEvent:A.aB,MediaEncryptedEvent:A.aB,MediaKeyMessageEvent:A.aB,MediaQueryListEvent:A.aB,MediaStreamEvent:A.aB,MediaStreamTrackEvent:A.aB,MessageEvent:A.aB,MIDIConnectionEvent:A.aB,MIDIMessageEvent:A.aB,MouseEvent:A.aB,DragEvent:A.aB,MutationEvent:A.aB,NotificationEvent:A.aB,PageTransitionEvent:A.aB,PaymentRequestEvent:A.aB,PaymentRequestUpdateEvent:A.aB,PointerEvent:A.aB,PopStateEvent:A.aB,PresentationConnectionAvailableEvent:A.aB,PresentationConnectionCloseEvent:A.aB,PromiseRejectionEvent:A.aB,PushEvent:A.aB,RTCDataChannelEvent:A.aB,RTCDTMFToneChangeEvent:A.aB,RTCPeerConnectionIceEvent:A.aB,RTCTrackEvent:A.aB,SecurityPolicyViolationEvent:A.aB,SensorErrorEvent:A.aB,SpeechRecognitionError:A.aB,SpeechRecognitionEvent:A.aB,SpeechSynthesisEvent:A.aB,StorageEvent:A.aB,SyncEvent:A.aB,TextEvent:A.aB,TouchEvent:A.aB,TrackEvent:A.aB,TransitionEvent:A.aB,WebKitTransitionEvent:A.aB,UIEvent:A.aB,VRDeviceEvent:A.aB,VRDisplayEvent:A.aB,VRSessionEvent:A.aB,WheelEvent:A.aB,MojoInterfaceRequestEvent:A.aB,USBConnectionEvent:A.aB,IDBVersionChangeEvent:A.aB,AudioProcessingEvent:A.aB,OfflineAudioCompletionEvent:A.aB,WebGLContextEvent:A.aB,Event:A.aB,InputEvent:A.aB,SubmitEvent:A.aB,AbsoluteOrientationSensor:A.ab,Accelerometer:A.ab,AccessibleNode:A.ab,AmbientLightSensor:A.ab,Animation:A.ab,ApplicationCache:A.ab,DOMApplicationCache:A.ab,OfflineResourceList:A.ab,BackgroundFetchRegistration:A.ab,BatteryManager:A.ab,BroadcastChannel:A.ab,CanvasCaptureMediaStreamTrack:A.ab,DedicatedWorkerGlobalScope:A.ab,EventSource:A.ab,FileReader:A.ab,FontFaceSet:A.ab,Gyroscope:A.ab,LinearAccelerationSensor:A.ab,Magnetometer:A.ab,MediaDevices:A.ab,MediaKeySession:A.ab,MediaQueryList:A.ab,MediaRecorder:A.ab,MediaSource:A.ab,MediaStream:A.ab,MediaStreamTrack:A.ab,MessagePort:A.ab,MIDIAccess:A.ab,MIDIInput:A.ab,MIDIOutput:A.ab,MIDIPort:A.ab,NetworkInformation:A.ab,Notification:A.ab,OffscreenCanvas:A.ab,OrientationSensor:A.ab,PaymentRequest:A.ab,Performance:A.ab,PermissionStatus:A.ab,PresentationAvailability:A.ab,PresentationConnection:A.ab,PresentationConnectionList:A.ab,PresentationRequest:A.ab,RelativeOrientationSensor:A.ab,RemotePlayback:A.ab,RTCDataChannel:A.ab,DataChannel:A.ab,RTCDTMFSender:A.ab,RTCPeerConnection:A.ab,webkitRTCPeerConnection:A.ab,mozRTCPeerConnection:A.ab,ScreenOrientation:A.ab,Sensor:A.ab,ServiceWorker:A.ab,ServiceWorkerContainer:A.ab,ServiceWorkerGlobalScope:A.ab,ServiceWorkerRegistration:A.ab,SharedWorker:A.ab,SharedWorkerGlobalScope:A.ab,SpeechRecognition:A.ab,webkitSpeechRecognition:A.ab,SpeechSynthesis:A.ab,SpeechSynthesisUtterance:A.ab,VR:A.ab,VRDevice:A.ab,VRDisplay:A.ab,VRSession:A.ab,VisualViewport:A.ab,WebSocket:A.ab,Window:A.ab,DOMWindow:A.ab,Worker:A.ab,WorkerGlobalScope:A.ab,WorkerPerformance:A.ab,BluetoothDevice:A.ab,BluetoothRemoteGATTCharacteristic:A.ab,Clipboard:A.ab,MojoInterfaceInterceptor:A.ab,USB:A.ab,IDBDatabase:A.ab,IDBOpenDBRequest:A.ab,IDBVersionChangeRequest:A.ab,IDBRequest:A.ab,IDBTransaction:A.ab,AnalyserNode:A.ab,RealtimeAnalyserNode:A.ab,AudioBufferSourceNode:A.ab,AudioDestinationNode:A.ab,AudioNode:A.ab,AudioScheduledSourceNode:A.ab,AudioWorkletNode:A.ab,BiquadFilterNode:A.ab,ChannelMergerNode:A.ab,AudioChannelMerger:A.ab,ChannelSplitterNode:A.ab,AudioChannelSplitter:A.ab,ConstantSourceNode:A.ab,ConvolverNode:A.ab,DelayNode:A.ab,DynamicsCompressorNode:A.ab,GainNode:A.ab,AudioGainNode:A.ab,IIRFilterNode:A.ab,MediaElementAudioSourceNode:A.ab,MediaStreamAudioDestinationNode:A.ab,MediaStreamAudioSourceNode:A.ab,OscillatorNode:A.ab,Oscillator:A.ab,PannerNode:A.ab,AudioPannerNode:A.ab,webkitAudioPannerNode:A.ab,ScriptProcessorNode:A.ab,JavaScriptAudioNode:A.ab,StereoPannerNode:A.ab,WaveShaperNode:A.ab,EventTarget:A.ab,File:A.hR,FileList:A.Ov,FileWriter:A.Ox,HTMLFormElement:A.OY,Gamepad:A.hS,History:A.Pd,HTMLCollection:A.rI,HTMLFormControlsCollection:A.rI,HTMLOptionsCollection:A.rI,XMLHttpRequest:A.oM,XMLHttpRequestUpload:A.rJ,XMLHttpRequestEventTarget:A.rJ,Location:A.Q4,MediaList:A.Qn,MIDIInputMap:A.Qr,MIDIOutputMap:A.Qs,MimeType:A.i2,MimeTypeArray:A.Qt,DocumentFragment:A.bE,ShadowRoot:A.bE,Attr:A.bE,DocumentType:A.bE,Node:A.bE,NodeList:A.DB,RadioNodeList:A.DB,Plugin:A.i4,PluginArray:A.RF,ProgressEvent:A.lG,ResourceProgressEvent:A.lG,RTCStatsReport:A.SW,HTMLSelectElement:A.Tm,SourceBuffer:A.i9,SourceBufferList:A.TX,SpeechGrammar:A.ia,SpeechGrammarList:A.U3,SpeechRecognitionResult:A.ib,Storage:A.U9,CSSStyleSheet:A.fY,StyleSheet:A.fY,TextTrack:A.id,TextTrackCue:A.fZ,VTTCue:A.fZ,TextTrackCueList:A.UH,TextTrackList:A.UI,TimeRanges:A.UK,Touch:A.ie,TouchList:A.UQ,TrackDefaultList:A.US,URL:A.V5,VideoTrackList:A.Ve,CSSRuleList:A.X7,ClientRect:A.HA,DOMRect:A.HA,GamepadList:A.YD,NamedNodeMap:A.Iy,MozNamedAttrMap:A.Iy,SpeechRecognitionResultList:A.a2u,StyleSheetList:A.a2H,SVGLength:A.iL,SVGLengthList:A.PU,SVGNumber:A.iS,SVGNumberList:A.QN,SVGPointList:A.RG,SVGStringList:A.Uc,SVGTransform:A.j4,SVGTransformList:A.UU,AudioBuffer:A.LT,AudioParamMap:A.LU,AudioTrackList:A.LV,AudioContext:A.ol,webkitAudioContext:A.ol,BaseAudioContext:A.ol,OfflineAudioContext:A.QO}) +hunkHelpers.setOrUpdateLeafTags({WebGL:true,AnimationEffectReadOnly:true,AnimationEffectTiming:true,AnimationEffectTimingReadOnly:true,AnimationTimeline:true,AnimationWorkletGlobalScope:true,AuthenticatorAssertionResponse:true,AuthenticatorAttestationResponse:true,AuthenticatorResponse:true,BackgroundFetchFetch:true,BackgroundFetchManager:true,BackgroundFetchSettledFetch:true,BarProp:true,BarcodeDetector:true,BluetoothRemoteGATTDescriptor:true,Body:true,BudgetState:true,CacheStorage:true,CanvasGradient:true,CanvasPattern:true,CanvasRenderingContext2D:true,Client:true,Clients:true,CookieStore:true,Coordinates:true,Credential:true,CredentialUserData:true,CredentialsContainer:true,Crypto:true,CryptoKey:true,CSS:true,CSSVariableReferenceValue:true,CustomElementRegistry:true,DataTransfer:true,DataTransferItem:true,DeprecatedStorageInfo:true,DeprecatedStorageQuota:true,DeprecationReport:true,DetectedBarcode:true,DetectedFace:true,DetectedText:true,DeviceAcceleration:true,DeviceRotationRate:true,DirectoryEntry:true,webkitFileSystemDirectoryEntry:true,FileSystemDirectoryEntry:true,DirectoryReader:true,WebKitDirectoryReader:true,webkitFileSystemDirectoryReader:true,FileSystemDirectoryReader:true,DocumentOrShadowRoot:true,DocumentTimeline:true,DOMError:true,DOMImplementation:true,Iterator:true,DOMMatrix:true,DOMMatrixReadOnly:true,DOMParser:true,DOMPoint:true,DOMPointReadOnly:true,DOMQuad:true,DOMStringMap:true,Entry:true,webkitFileSystemEntry:true,FileSystemEntry:true,External:true,FaceDetector:true,FederatedCredential:true,FileEntry:true,webkitFileSystemFileEntry:true,FileSystemFileEntry:true,DOMFileSystem:true,WebKitFileSystem:true,webkitFileSystem:true,FileSystem:true,FontFace:true,FontFaceSource:true,FormData:true,GamepadButton:true,GamepadPose:true,Geolocation:true,Position:true,GeolocationPosition:true,Headers:true,HTMLHyperlinkElementUtils:true,IdleDeadline:true,ImageBitmap:true,ImageBitmapRenderingContext:true,ImageCapture:true,ImageData:true,InputDeviceCapabilities:true,IntersectionObserver:true,IntersectionObserverEntry:true,InterventionReport:true,KeyframeEffect:true,KeyframeEffectReadOnly:true,MediaCapabilities:true,MediaCapabilitiesInfo:true,MediaDeviceInfo:true,MediaError:true,MediaKeyStatusMap:true,MediaKeySystemAccess:true,MediaKeys:true,MediaKeysPolicy:true,MediaMetadata:true,MediaSession:true,MediaSettingsRange:true,MemoryInfo:true,MessageChannel:true,Metadata:true,MutationObserver:true,WebKitMutationObserver:true,MutationRecord:true,NavigationPreloadManager:true,Navigator:true,NavigatorAutomationInformation:true,NavigatorConcurrentHardware:true,NavigatorCookies:true,NavigatorUserMediaError:true,NodeFilter:true,NodeIterator:true,NonDocumentTypeChildNode:true,NonElementParentNode:true,NoncedElement:true,OffscreenCanvasRenderingContext2D:true,OverconstrainedError:true,PaintRenderingContext2D:true,PaintSize:true,PaintWorkletGlobalScope:true,PasswordCredential:true,Path2D:true,PaymentAddress:true,PaymentInstruments:true,PaymentManager:true,PaymentResponse:true,PerformanceEntry:true,PerformanceLongTaskTiming:true,PerformanceMark:true,PerformanceMeasure:true,PerformanceNavigation:true,PerformanceNavigationTiming:true,PerformanceObserver:true,PerformanceObserverEntryList:true,PerformancePaintTiming:true,PerformanceResourceTiming:true,PerformanceServerTiming:true,PerformanceTiming:true,Permissions:true,PhotoCapabilities:true,PositionError:true,GeolocationPositionError:true,Presentation:true,PresentationReceiver:true,PublicKeyCredential:true,PushManager:true,PushMessageData:true,PushSubscription:true,PushSubscriptionOptions:true,Range:true,RelatedApplication:true,ReportBody:true,ReportingObserver:true,ResizeObserver:true,ResizeObserverEntry:true,RTCCertificate:true,RTCIceCandidate:true,mozRTCIceCandidate:true,RTCLegacyStatsReport:true,RTCRtpContributingSource:true,RTCRtpReceiver:true,RTCRtpSender:true,RTCSessionDescription:true,mozRTCSessionDescription:true,RTCStatsResponse:true,Screen:true,ScrollState:true,ScrollTimeline:true,Selection:true,SharedArrayBuffer:true,SpeechRecognitionAlternative:true,SpeechSynthesisVoice:true,StaticRange:true,StorageManager:true,StyleMedia:true,StylePropertyMap:true,StylePropertyMapReadonly:true,SyncManager:true,TaskAttributionTiming:true,TextDetector:true,TextMetrics:true,TrackDefault:true,TreeWalker:true,TrustedHTML:true,TrustedScriptURL:true,TrustedURL:true,UnderlyingSourceBase:true,URLSearchParams:true,VRCoordinateSystem:true,VRDisplayCapabilities:true,VREyeParameters:true,VRFrameData:true,VRFrameOfReference:true,VRPose:true,VRStageBounds:true,VRStageBoundsPoint:true,VRStageParameters:true,ValidityState:true,VideoPlaybackQuality:true,VideoTrack:true,VTTRegion:true,WindowClient:true,WorkletAnimation:true,WorkletGlobalScope:true,XPathEvaluator:true,XPathExpression:true,XPathNSResolver:true,XPathResult:true,XMLSerializer:true,XSLTProcessor:true,Bluetooth:true,BluetoothCharacteristicProperties:true,BluetoothRemoteGATTServer:true,BluetoothRemoteGATTService:true,BluetoothUUID:true,BudgetService:true,Cache:true,DOMFileSystemSync:true,DirectoryEntrySync:true,DirectoryReaderSync:true,EntrySync:true,FileEntrySync:true,FileReaderSync:true,FileWriterSync:true,HTMLAllCollection:true,Mojo:true,MojoHandle:true,MojoWatcher:true,NFC:true,PagePopupController:true,Report:true,Request:true,Response:true,SubtleCrypto:true,USBAlternateInterface:true,USBConfiguration:true,USBDevice:true,USBEndpoint:true,USBInTransferResult:true,USBInterface:true,USBIsochronousInTransferPacket:true,USBIsochronousInTransferResult:true,USBIsochronousOutTransferPacket:true,USBIsochronousOutTransferResult:true,USBOutTransferResult:true,WorkerLocation:true,WorkerNavigator:true,Worklet:true,IDBCursor:true,IDBCursorWithValue:true,IDBFactory:true,IDBIndex:true,IDBKeyRange:true,IDBObjectStore:true,IDBObservation:true,IDBObserver:true,IDBObserverChanges:true,SVGAngle:true,SVGAnimatedAngle:true,SVGAnimatedBoolean:true,SVGAnimatedEnumeration:true,SVGAnimatedInteger:true,SVGAnimatedLength:true,SVGAnimatedLengthList:true,SVGAnimatedNumber:true,SVGAnimatedNumberList:true,SVGAnimatedPreserveAspectRatio:true,SVGAnimatedRect:true,SVGAnimatedString:true,SVGAnimatedTransformList:true,SVGMatrix:true,SVGPoint:true,SVGPreserveAspectRatio:true,SVGRect:true,SVGUnitTypes:true,AudioListener:true,AudioParam:true,AudioTrack:true,AudioWorkletGlobalScope:true,AudioWorkletProcessor:true,PeriodicWave:true,WebGLActiveInfo:true,ANGLEInstancedArrays:true,ANGLE_instanced_arrays:true,WebGLBuffer:true,WebGLCanvas:true,WebGLColorBufferFloat:true,WebGLCompressedTextureASTC:true,WebGLCompressedTextureATC:true,WEBGL_compressed_texture_atc:true,WebGLCompressedTextureETC1:true,WEBGL_compressed_texture_etc1:true,WebGLCompressedTextureETC:true,WebGLCompressedTexturePVRTC:true,WEBGL_compressed_texture_pvrtc:true,WebGLCompressedTextureS3TC:true,WEBGL_compressed_texture_s3tc:true,WebGLCompressedTextureS3TCsRGB:true,WebGLDebugRendererInfo:true,WEBGL_debug_renderer_info:true,WebGLDebugShaders:true,WEBGL_debug_shaders:true,WebGLDepthTexture:true,WEBGL_depth_texture:true,WebGLDrawBuffers:true,WEBGL_draw_buffers:true,EXTsRGB:true,EXT_sRGB:true,EXTBlendMinMax:true,EXT_blend_minmax:true,EXTColorBufferFloat:true,EXTColorBufferHalfFloat:true,EXTDisjointTimerQuery:true,EXTDisjointTimerQueryWebGL2:true,EXTFragDepth:true,EXT_frag_depth:true,EXTShaderTextureLOD:true,EXT_shader_texture_lod:true,EXTTextureFilterAnisotropic:true,EXT_texture_filter_anisotropic:true,WebGLFramebuffer:true,WebGLGetBufferSubDataAsync:true,WebGLLoseContext:true,WebGLExtensionLoseContext:true,WEBGL_lose_context:true,OESElementIndexUint:true,OES_element_index_uint:true,OESStandardDerivatives:true,OES_standard_derivatives:true,OESTextureFloat:true,OES_texture_float:true,OESTextureFloatLinear:true,OES_texture_float_linear:true,OESTextureHalfFloat:true,OES_texture_half_float:true,OESTextureHalfFloatLinear:true,OES_texture_half_float_linear:true,OESVertexArrayObject:true,OES_vertex_array_object:true,WebGLProgram:true,WebGLQuery:true,WebGLRenderbuffer:true,WebGLRenderingContext:true,WebGL2RenderingContext:true,WebGLSampler:true,WebGLShader:true,WebGLShaderPrecisionFormat:true,WebGLSync:true,WebGLTexture:true,WebGLTimerQueryEXT:true,WebGLTransformFeedback:true,WebGLUniformLocation:true,WebGLVertexArrayObject:true,WebGLVertexArrayObjectOES:true,WebGL2RenderingContextBase:true,ArrayBuffer:true,ArrayBufferView:false,DataView:true,Float32Array:true,Float64Array:true,Int16Array:true,Int32Array:true,Int8Array:true,Uint16Array:true,Uint32Array:true,Uint8ClampedArray:true,CanvasPixelArray:true,Uint8Array:false,HTMLAudioElement:true,HTMLBRElement:true,HTMLBaseElement:true,HTMLBodyElement:true,HTMLButtonElement:true,HTMLCanvasElement:true,HTMLContentElement:true,HTMLDListElement:true,HTMLDataElement:true,HTMLDataListElement:true,HTMLDetailsElement:true,HTMLDialogElement:true,HTMLDivElement:true,HTMLEmbedElement:true,HTMLFieldSetElement:true,HTMLHRElement:true,HTMLHeadElement:true,HTMLHeadingElement:true,HTMLHtmlElement:true,HTMLIFrameElement:true,HTMLImageElement:true,HTMLInputElement:true,HTMLLIElement:true,HTMLLabelElement:true,HTMLLegendElement:true,HTMLLinkElement:true,HTMLMapElement:true,HTMLMediaElement:true,HTMLMenuElement:true,HTMLMetaElement:true,HTMLMeterElement:true,HTMLModElement:true,HTMLOListElement:true,HTMLObjectElement:true,HTMLOptGroupElement:true,HTMLOptionElement:true,HTMLOutputElement:true,HTMLParagraphElement:true,HTMLParamElement:true,HTMLPictureElement:true,HTMLPreElement:true,HTMLProgressElement:true,HTMLQuoteElement:true,HTMLScriptElement:true,HTMLShadowElement:true,HTMLSlotElement:true,HTMLSourceElement:true,HTMLSpanElement:true,HTMLStyleElement:true,HTMLTableCaptionElement:true,HTMLTableCellElement:true,HTMLTableDataCellElement:true,HTMLTableHeaderCellElement:true,HTMLTableColElement:true,HTMLTableElement:true,HTMLTableRowElement:true,HTMLTableSectionElement:true,HTMLTemplateElement:true,HTMLTextAreaElement:true,HTMLTimeElement:true,HTMLTitleElement:true,HTMLTrackElement:true,HTMLUListElement:true,HTMLUnknownElement:true,HTMLVideoElement:true,HTMLDirectoryElement:true,HTMLFontElement:true,HTMLFrameElement:true,HTMLFrameSetElement:true,HTMLMarqueeElement:true,HTMLElement:false,AccessibleNodeList:true,HTMLAnchorElement:true,HTMLAreaElement:true,Blob:false,CDATASection:true,CharacterData:true,Comment:true,ProcessingInstruction:true,Text:true,CSSPerspective:true,CSSCharsetRule:true,CSSConditionRule:true,CSSFontFaceRule:true,CSSGroupingRule:true,CSSImportRule:true,CSSKeyframeRule:true,MozCSSKeyframeRule:true,WebKitCSSKeyframeRule:true,CSSKeyframesRule:true,MozCSSKeyframesRule:true,WebKitCSSKeyframesRule:true,CSSMediaRule:true,CSSNamespaceRule:true,CSSPageRule:true,CSSRule:true,CSSStyleRule:true,CSSSupportsRule:true,CSSViewportRule:true,CSSStyleDeclaration:true,MSStyleCSSProperties:true,CSS2Properties:true,CSSImageValue:true,CSSKeywordValue:true,CSSNumericValue:true,CSSPositionValue:true,CSSResourceValue:true,CSSUnitValue:true,CSSURLImageValue:true,CSSStyleValue:false,CSSMatrixComponent:true,CSSRotation:true,CSSScale:true,CSSSkew:true,CSSTranslation:true,CSSTransformComponent:false,CSSTransformValue:true,CSSUnparsedValue:true,DataTransferItemList:true,Document:true,HTMLDocument:true,XMLDocument:true,DOMException:true,ClientRectList:true,DOMRectList:true,DOMRectReadOnly:false,DOMStringList:true,DOMTokenList:true,MathMLElement:true,SVGAElement:true,SVGAnimateElement:true,SVGAnimateMotionElement:true,SVGAnimateTransformElement:true,SVGAnimationElement:true,SVGCircleElement:true,SVGClipPathElement:true,SVGDefsElement:true,SVGDescElement:true,SVGDiscardElement:true,SVGEllipseElement:true,SVGFEBlendElement:true,SVGFEColorMatrixElement:true,SVGFEComponentTransferElement:true,SVGFECompositeElement:true,SVGFEConvolveMatrixElement:true,SVGFEDiffuseLightingElement:true,SVGFEDisplacementMapElement:true,SVGFEDistantLightElement:true,SVGFEFloodElement:true,SVGFEFuncAElement:true,SVGFEFuncBElement:true,SVGFEFuncGElement:true,SVGFEFuncRElement:true,SVGFEGaussianBlurElement:true,SVGFEImageElement:true,SVGFEMergeElement:true,SVGFEMergeNodeElement:true,SVGFEMorphologyElement:true,SVGFEOffsetElement:true,SVGFEPointLightElement:true,SVGFESpecularLightingElement:true,SVGFESpotLightElement:true,SVGFETileElement:true,SVGFETurbulenceElement:true,SVGFilterElement:true,SVGForeignObjectElement:true,SVGGElement:true,SVGGeometryElement:true,SVGGraphicsElement:true,SVGImageElement:true,SVGLineElement:true,SVGLinearGradientElement:true,SVGMarkerElement:true,SVGMaskElement:true,SVGMetadataElement:true,SVGPathElement:true,SVGPatternElement:true,SVGPolygonElement:true,SVGPolylineElement:true,SVGRadialGradientElement:true,SVGRectElement:true,SVGScriptElement:true,SVGSetElement:true,SVGStopElement:true,SVGStyleElement:true,SVGElement:true,SVGSVGElement:true,SVGSwitchElement:true,SVGSymbolElement:true,SVGTSpanElement:true,SVGTextContentElement:true,SVGTextElement:true,SVGTextPathElement:true,SVGTextPositioningElement:true,SVGTitleElement:true,SVGUseElement:true,SVGViewElement:true,SVGGradientElement:true,SVGComponentTransferFunctionElement:true,SVGFEDropShadowElement:true,SVGMPathElement:true,Element:false,AbortPaymentEvent:true,AnimationEvent:true,AnimationPlaybackEvent:true,ApplicationCacheErrorEvent:true,BackgroundFetchClickEvent:true,BackgroundFetchEvent:true,BackgroundFetchFailEvent:true,BackgroundFetchedEvent:true,BeforeInstallPromptEvent:true,BeforeUnloadEvent:true,BlobEvent:true,CanMakePaymentEvent:true,ClipboardEvent:true,CloseEvent:true,CompositionEvent:true,CustomEvent:true,DeviceMotionEvent:true,DeviceOrientationEvent:true,ErrorEvent:true,ExtendableEvent:true,ExtendableMessageEvent:true,FetchEvent:true,FocusEvent:true,FontFaceSetLoadEvent:true,ForeignFetchEvent:true,GamepadEvent:true,HashChangeEvent:true,InstallEvent:true,KeyboardEvent:true,MediaEncryptedEvent:true,MediaKeyMessageEvent:true,MediaQueryListEvent:true,MediaStreamEvent:true,MediaStreamTrackEvent:true,MessageEvent:true,MIDIConnectionEvent:true,MIDIMessageEvent:true,MouseEvent:true,DragEvent:true,MutationEvent:true,NotificationEvent:true,PageTransitionEvent:true,PaymentRequestEvent:true,PaymentRequestUpdateEvent:true,PointerEvent:true,PopStateEvent:true,PresentationConnectionAvailableEvent:true,PresentationConnectionCloseEvent:true,PromiseRejectionEvent:true,PushEvent:true,RTCDataChannelEvent:true,RTCDTMFToneChangeEvent:true,RTCPeerConnectionIceEvent:true,RTCTrackEvent:true,SecurityPolicyViolationEvent:true,SensorErrorEvent:true,SpeechRecognitionError:true,SpeechRecognitionEvent:true,SpeechSynthesisEvent:true,StorageEvent:true,SyncEvent:true,TextEvent:true,TouchEvent:true,TrackEvent:true,TransitionEvent:true,WebKitTransitionEvent:true,UIEvent:true,VRDeviceEvent:true,VRDisplayEvent:true,VRSessionEvent:true,WheelEvent:true,MojoInterfaceRequestEvent:true,USBConnectionEvent:true,IDBVersionChangeEvent:true,AudioProcessingEvent:true,OfflineAudioCompletionEvent:true,WebGLContextEvent:true,Event:false,InputEvent:false,SubmitEvent:false,AbsoluteOrientationSensor:true,Accelerometer:true,AccessibleNode:true,AmbientLightSensor:true,Animation:true,ApplicationCache:true,DOMApplicationCache:true,OfflineResourceList:true,BackgroundFetchRegistration:true,BatteryManager:true,BroadcastChannel:true,CanvasCaptureMediaStreamTrack:true,DedicatedWorkerGlobalScope:true,EventSource:true,FileReader:true,FontFaceSet:true,Gyroscope:true,LinearAccelerationSensor:true,Magnetometer:true,MediaDevices:true,MediaKeySession:true,MediaQueryList:true,MediaRecorder:true,MediaSource:true,MediaStream:true,MediaStreamTrack:true,MessagePort:true,MIDIAccess:true,MIDIInput:true,MIDIOutput:true,MIDIPort:true,NetworkInformation:true,Notification:true,OffscreenCanvas:true,OrientationSensor:true,PaymentRequest:true,Performance:true,PermissionStatus:true,PresentationAvailability:true,PresentationConnection:true,PresentationConnectionList:true,PresentationRequest:true,RelativeOrientationSensor:true,RemotePlayback:true,RTCDataChannel:true,DataChannel:true,RTCDTMFSender:true,RTCPeerConnection:true,webkitRTCPeerConnection:true,mozRTCPeerConnection:true,ScreenOrientation:true,Sensor:true,ServiceWorker:true,ServiceWorkerContainer:true,ServiceWorkerGlobalScope:true,ServiceWorkerRegistration:true,SharedWorker:true,SharedWorkerGlobalScope:true,SpeechRecognition:true,webkitSpeechRecognition:true,SpeechSynthesis:true,SpeechSynthesisUtterance:true,VR:true,VRDevice:true,VRDisplay:true,VRSession:true,VisualViewport:true,WebSocket:true,Window:true,DOMWindow:true,Worker:true,WorkerGlobalScope:true,WorkerPerformance:true,BluetoothDevice:true,BluetoothRemoteGATTCharacteristic:true,Clipboard:true,MojoInterfaceInterceptor:true,USB:true,IDBDatabase:true,IDBOpenDBRequest:true,IDBVersionChangeRequest:true,IDBRequest:true,IDBTransaction:true,AnalyserNode:true,RealtimeAnalyserNode:true,AudioBufferSourceNode:true,AudioDestinationNode:true,AudioNode:true,AudioScheduledSourceNode:true,AudioWorkletNode:true,BiquadFilterNode:true,ChannelMergerNode:true,AudioChannelMerger:true,ChannelSplitterNode:true,AudioChannelSplitter:true,ConstantSourceNode:true,ConvolverNode:true,DelayNode:true,DynamicsCompressorNode:true,GainNode:true,AudioGainNode:true,IIRFilterNode:true,MediaElementAudioSourceNode:true,MediaStreamAudioDestinationNode:true,MediaStreamAudioSourceNode:true,OscillatorNode:true,Oscillator:true,PannerNode:true,AudioPannerNode:true,webkitAudioPannerNode:true,ScriptProcessorNode:true,JavaScriptAudioNode:true,StereoPannerNode:true,WaveShaperNode:true,EventTarget:false,File:true,FileList:true,FileWriter:true,HTMLFormElement:true,Gamepad:true,History:true,HTMLCollection:true,HTMLFormControlsCollection:true,HTMLOptionsCollection:true,XMLHttpRequest:true,XMLHttpRequestUpload:true,XMLHttpRequestEventTarget:false,Location:true,MediaList:true,MIDIInputMap:true,MIDIOutputMap:true,MimeType:true,MimeTypeArray:true,DocumentFragment:true,ShadowRoot:true,Attr:true,DocumentType:true,Node:false,NodeList:true,RadioNodeList:true,Plugin:true,PluginArray:true,ProgressEvent:true,ResourceProgressEvent:true,RTCStatsReport:true,HTMLSelectElement:true,SourceBuffer:true,SourceBufferList:true,SpeechGrammar:true,SpeechGrammarList:true,SpeechRecognitionResult:true,Storage:true,CSSStyleSheet:true,StyleSheet:true,TextTrack:true,TextTrackCue:true,VTTCue:true,TextTrackCueList:true,TextTrackList:true,TimeRanges:true,Touch:true,TouchList:true,TrackDefaultList:true,URL:true,VideoTrackList:true,CSSRuleList:true,ClientRect:true,DOMRect:true,GamepadList:true,NamedNodeMap:true,MozNamedAttrMap:true,SpeechRecognitionResultList:true,StyleSheetList:true,SVGLength:true,SVGLengthList:true,SVGNumber:true,SVGNumberList:true,SVGPointList:true,SVGStringList:true,SVGTransform:true,SVGTransformList:true,AudioBuffer:true,AudioParamMap:true,AudioTrackList:true,AudioContext:true,webkitAudioContext:true,BaseAudioContext:false,OfflineAudioContext:true}) +A.wZ.$nativeSuperclassTag="ArrayBufferView" +A.Iz.$nativeSuperclassTag="ArrayBufferView" +A.IA.$nativeSuperclassTag="ArrayBufferView" +A.pc.$nativeSuperclassTag="ArrayBufferView" +A.IB.$nativeSuperclassTag="ArrayBufferView" +A.IC.$nativeSuperclassTag="ArrayBufferView" +A.iR.$nativeSuperclassTag="ArrayBufferView" +A.JE.$nativeSuperclassTag="EventTarget" +A.JF.$nativeSuperclassTag="EventTarget" +A.K5.$nativeSuperclassTag="EventTarget" +A.K6.$nativeSuperclassTag="EventTarget"})() +Function.prototype.$0=function(){return this()} +Function.prototype.$1=function(a){return this(a)} +Function.prototype.$2=function(a,b){return this(a,b)} +Function.prototype.$3$1=function(a){return this(a)} +Function.prototype.$2$1=function(a){return this(a)} +Function.prototype.$1$1=function(a){return this(a)} +Function.prototype.$3=function(a,b,c){return this(a,b,c)} +Function.prototype.$4=function(a,b,c,d){return this(a,b,c,d)} +Function.prototype.$3$3=function(a,b,c){return this(a,b,c)} +Function.prototype.$2$2=function(a,b){return this(a,b)} +Function.prototype.$1$2=function(a,b){return this(a,b)} +Function.prototype.$1$0=function(){return this()} +Function.prototype.$5=function(a,b,c,d,e){return this(a,b,c,d,e)} +Function.prototype.$1$5=function(a,b,c,d,e){return this(a,b,c,d,e)} +Function.prototype.$2$0=function(){return this()} +Function.prototype.$6=function(a,b,c,d,e,f){return this(a,b,c,d,e,f)} +Function.prototype.$8=function(a,b,c,d,e,f,g,h){return this(a,b,c,d,e,f,g,h)} +convertAllToFastObject(w) +convertToFastObject($);(function(a){if(typeof document==="undefined"){a(null) +return}if(typeof document.currentScript!="undefined"){a(document.currentScript) +return}var s=document.scripts +function onLoad(b){for(var q=0;q - -### How to use -```dart -BarChart( - BarChartData( - // read about it in the BarChartData section - ), - swapAnimationDuration: Duration(milliseconds: 150), // Optional - swapAnimationCurve: Curves.linear, // Optional -); -``` - -### Implicit Animations -When you change the chart's state, it animates to the new state internally (using [implicit animations](https://flutter.dev/docs/development/ui/animations/implicit-animations)). You can control the animation [duration](https://api.flutter.dev/flutter/dart-core/Duration-class.html) and [curve](https://api.flutter.dev/flutter/animation/Curves-class.html) using optional `swapAnimationDuration` and `swapAnimationCurve` properties, respectively. - -### BarChartData -|PropName |Description |default value| -|:---------------|:---------------|:-------| -|barGroups| list of [BarChartGroupData ](#BarChartGroupData) to show the bar lines together, you can provide one item per group to show normal bar chart|[]| -|groupsSpace| space between groups, it applies only when the [alignment](#BarChartAlignment) is `BarChartAlignment.start`, `BarChartAlignment.center` or `BarChartAlignment.end`|16| -|alignment| a [BarChartAlignment](#BarChartAlignment) that determines the alignment of the barGroups, inspired by [Flutter MainAxisAlignment](https://docs.flutter.io/flutter/rendering/MainAxisAlignment-class.html)| BarChartAlignment.spaceBetween| -|titlesData| check the [FlTitlesData](base_chart.md#FlTitlesData)|FlTitlesData()| -|axisTitleData| check the [FlAxisTitleData](base_chart.md#FlAxisTitleData)| FlAxisTitleData()| -|rangeAnnotations| show range annotations behind the chart, check [RangeAnnotations](base_chart.md#RangeAnnotations) | RangeAnnotations()| -|backgroundColor| a background color which is drawn behind the chart| null | -|barTouchData| [BarTouchData](#BarTouchData) holds the touch interactivity details|BarTouchData()| -|gridData| check the [FlGridData](base_chart.md#FlGridData)|FlGridData()| -|borderData| check the [FlBorderData](base_chart.md#FlBorderData)|FlBorderData()| -|maxY| gets maximum y of y axis, if null, value will be read from the input barGroups | null| -|minY| gets minimum y of y axis, if null, value will be read from the input barGroups | null| -|baselineY| defines the baseline of y-axis | 0| -|extraLinesData| allows extra horizontal lines to be drawn on the chart. Vertical lines are ignored when used with BarChartData, please see [#1149](https://github.com/imaNNeo/fl_chart/issues/1149), check [ExtraLinesData](base_chart.md#ExtraLinesData)|ExtraLinesData()| - - -### BarChartGroupData -|PropName |Description |default value| -|:---------------|:---------------|:-------| -|x| x position of the group on horizontal axis|null| -|barRods| list of [BarChartRodData](#BarChartRodData) that are a bar line| [] -|barsSpace| the space between barRods of the group|2| -|showingTooltipIndicators| indexes of barRods to show the tooltip on top of them | []| - - -### BarChartAlignment -enum values {`start`, `end`, `center`, `spaceEvenly`, `spaceAround`, `spaceBetween`} - - -### BarChartRodData -|PropName|Description|default value| -|:-------|:----------|:------------| -|fromY|Position that this bar starts from|0| -|toY|This rod is from `fromY` to `toY` in the vertical axis|null| -|color|color of the rod bar|[Colors.cyan]| -|gradient| You can use any [Gradient](https://api.flutter.dev/flutter/dart-ui/Gradient-class.html) here. such as [LinearGradient](https://api.flutter.dev/flutter/painting/LinearGradient-class.html) or [RadialGradient](https://api.flutter.dev/flutter/painting/RadialGradient-class.html)|null| -|width|stroke width of the rod bar|8| -|borderRadius|Determines the edge rounding of the bar corners, see [BorderRadius](https://api.flutter.dev/flutter/painting/BorderRadius-class.html). When `null`, it defaults to completely round bars. |null| -|borderDashArray|Determines wether the border stroke is dashed. It is a circular array of dash offsets and lengths. For example, the array `[5, 10]` would result in dashes 5 pixels long followed by blank spaces 10 pixels long. The array `[5, 10, 5]` would result in a 5 pixel dash, a 10 pixel gap, a 5 pixel dash, a 5 pixel gap, a 10 pixel dash, etc.|null| -|borderSide|Determines the border stroke around of the bar, see [BorderSide](https://api.flutter.dev/flutter/painting/BorderSide-class.html). When `null`, it defaults to draw no stroke. |null| -|backDrawRodData|if provided, draws a rod in the background of the line bar, check the [BackgroundBarChartRodData](#BackgroundBarChartRodData)|null| -|rodStackItem|if you want to have stacked bar chart, provide a list of [BarChartRodStackItem](#BarChartRodStackItem), it will draw over your rod.|[]| - - -### BackgroundBarChartRodData -|PropName|Description|default value| -|:-------|:----------|:------------| -|fromY|same as [BarChartRodData](#BarChartRodData)'s fromY|0| -|toY|same as [BarChartRodData](#BarChartRodData)'s y|8| -|show|determines to show or hide this section|false| -|color|same as [BarChartRodData](#BarChartRodData)'s colors|[Colors.blueGrey]| -|gradient|same as [BarChartRodData](#BarChartRodData)'s gradient|null| - -### BarChartRodStackItem -|PropName|Description|default value| -|:-------|:----------|:------------| -|fromY|draw stack item from this value|null| -|toY|draw stack item to this value|null| -|color|color of the stack item|null| -|borderSide|draw border stroke for each stack item|null| - -### BarTouchData ([read about touch handling](handle_touches.md)) -|PropName|Description|default value| -|:-------|:----------|:------------| -|enabled|determines to enable or disable touch behaviors|true| -|mouseCursorResolver|you can change the mouse cursor based on the provided [FlTouchEvent](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/base_chart.md#fltouchevent) and [BarTouchResponse](#BarTouchResponse)|MouseCursor.defer| -|touchTooltipData|a [BarTouchTooltipData](#BarTouchTooltipData), that determines how show the tooltip on top of touched spots (appearance of the showing tooltip bubble)|BarTouchTooltipData()| -|touchExtraThreshold|an [EdgeInsets](https://api.flutter.dev/flutter/painting/EdgeInsets-class.html) class to hold a bounding threshold of touch accuracy|EdgeInsets.all(4)| -|allowTouchBarBackDraw| if sets true, touch works on backdraw bar line| false | -|handleBuiltInTouches| set this true if you want the built in touch handling (show a tooltip bubble and an indicator on touched spots) | true| -|touchCallback| listen to this callback to retrieve touch/pointer events and responses, it gives you a [FlTouchEvent](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/base_chart.md#fltouchevent) and [BarTouchResponse](#BarTouchResponse)| null| -|longPressDuration| allows to customize the duration of the longPress gesture. If null, the duration of the longPressGesture is [kLongPressTimeout](https://api.flutter.dev/flutter/gestures/kLongPressTimeout-constant.html)| null| - -### BarTouchTooltipData - |PropName|Description|default value| - |:-------|:----------|:------------| - |tooltipBgColor|background color of the tooltip bubble|Colors.white| - |tooltipBorder|border of the tooltip bubble|BorderSide.none| - |tooltipRoundedRadius|background corner radius of the tooltip bubble|4| - |tooltipPadding|padding of the tooltip|EdgeInsets.symmetric(horizontal: 16, vertical: 8)| - |tooltipMargin|margin between the tooltip and the touched spot|16| - |tooltipHorizontalAlignment|horizontal alginment of tooltip relative to the bar|FLHorizontalAlignment.center| - |tooltipHorizontalOffset|horizontal offset of tooltip|0| - |maxContentWidth|maximum width of the tooltip (if a text row is wider than this, then the text breaks to a new line|120| - |getTooltipItems|a callback that retrieve [BarTooltipItem](#BarTooltipItem) by the given [BarChartGroupData](#BarChartGroupData), groupIndex, [BarChartRodData](#BarChartRodData) and rodIndex |defaultBarTooltipItem| - |fitInsideHorizontally| forces tooltip to horizontally shift inside the chart's bounding box| false| - |fitInsideVertically| forces tooltip to vertically shift inside the chart's bounding box| false| - |direction| Controls showing tooltip on top or bottom, default is auto.| auto| - -### BarTooltipItem -|PropName|Description|default value| -|:-------|:----------|:------------| -|text|text string of each row in the tooltip bubble|null| -|textStyle|[TextStyle](https://api.flutter.dev/flutter/dart-ui/TextStyle-class.html) of the showing text row|null| -|textAlign|[TextAlign](https://api.flutter.dev/flutter/dart-ui/TextAlign-class.html) of the showing text row|TextAlign.center| -|textDirection|[TextDirection](https://api.flutter.dev/flutter/dart-ui/TextDirection-class.html) of the showing text row|TextDirection.ltr| -|children|[List](https://api.flutter.dev/flutter/painting/InlineSpan-class.html) pass additional InlineSpan children for a more advance tooltip|null| - - -### BarTouchResponse -|PropName|Description|default value| -|:-------|:----------|:------------| -|spot|a [BarTouchedSpot](#BarTouchedSpot) class to hold data about touched spot| null | - -### BarTouchedSpot -|PropName|Description|default value| -|:-------|:----------|:------------| -|touchedBarGroup|the [BarChartGroupData](#BarChartGroupData) that user touched its rod's spot| null | -|touchedBarGroupIndex| index of touched barGroup| null| -|touchedRodData|the [BarChartRodData](#BarChartRodData) that user touched its spot|null| -|touchedRodDataIndex| index of touchedRod | null| -|touchedStackItem| [BarChartRodStackItem](#BarChartRodStackItem) is the touched stack (if you have stacked bar chart) |null| -|touchedStackItemIndex| index of barChartRodStackItem, -1 if nothing found | -1| - - -### Some Samples ----- -##### Sample 1 ([Source Code](/example/lib/presentation/samples/bar/bar_chart_sample1.dart)) - - - - - - -##### Sample 2 ([Source Code](/example/lib/presentation/samples/bar/bar_chart_sample2.dart)) - - -##### Sample 3 ([Source Code](/example/lib/presentation/samples/bar/bar_chart_sample3.dart)) - - -##### Sample 4 ([Source Code](/example/lib/presentation/samples/bar/bar_chart_sample4.dart)) - - -##### Sample 5 ([Source Code](/example/lib/presentation/samples/bar/bar_chart_sample5.dart)) - - -##### Sample 6 ([Source Code](/example/lib/presentation/samples/bar/bar_chart_sample6.dart)) - - -##### Sample 7 ([Source Code](/example/lib/presentation/samples/bar/bar_chart_sample7.dart)) - - -##### Gist - Toggleable Tooltip ([Source Code](https://gist.github.com/imaNNeo/bce3f0169ff3fd6c3f137cdeb5005c0e)) -https://user-images.githubusercontent.com/7009300/156784816-53f95dd9-f387-4600-8a92-d05b1aeea3da.mov diff --git a/repo_files/documentations/base_chart.md b/repo_files/documentations/base_chart.md deleted file mode 100644 index c41ed5c504..0000000000 --- a/repo_files/documentations/base_chart.md +++ /dev/null @@ -1,181 +0,0 @@ -# BaseChart - -### FlBorderData -|PropName |Description |default value| -|:---------------|:---------------|:-------| -|show| determines to show or hide the border |true| -|border| [Border](https://api.flutter.dev/flutter/painting/Border-class.html) details that determines which border should be drawn with which color| Border.all(color: Colors.black, width: 1.0, style: BorderStyle.solid)| - - -### FlTitlesData -|PropName |Description |default value| -|:---------------|:---------------|:-------| -|show| determines to show or hide the titles Around the chart|true| -|leftTitles| an [AxisTitle](#AxisTitle) that holds data to draw left titles | AxisTitles(sideTitles: SideTitles(reservedSize: 40, showTitles: true))| -|topTitles| an [AxisTitle](#AxisTitle) that holds data to draw top titles | AxisTitles(sideTitles: SideTitles(reservedSize: 6, showTitles: true))| -|rightTitles| an [AxisTitle](#AxisTitle) that holds data to draw right titles | AxisTitles(sideTitles: SideTitles(reservedSize: 40, showTitles: true))| -|bottomTitles| an [AxisTitle](#AxisTitle) that holds data to draw bottom titles | AxisTitles(sideTitles: SideTitles(reservedSize: 6, showTitles: true))| - -### AxisTitle -|PropName |Description |default value| -|:---------------|:---------------|:-------| -|axisNameSize| Determines the size of [axisName] | `16`| -|axisNameWidget| It shows the name of axis (you can pass a Widget)| `null`| -|sideTitles| It accepts a [SideTitles](#SideTitles) which is responsible to show your axis side titles| `SideTitles()`| -|drawBehindEverything| If titles are showing on top of your tooltip, you can draw them behind everything.| `true`| - -### SideTitles -|PropName |Description |default value| -|:---------------|:---------------|:-------| -|showTitles| determines whether to show or hide the titles | false| -|getTitlesWidget| A function to retrieve the title widget with given value on the related axis.|defaultGetTitle| -|reservedSize| It determines the maximum space that your titles need, |22| -|interval| Texts are showing with provided `interval`. If you don't provide anything, we try to find a suitable value to set as `interval` under the hood. | null | - -### SideTitleFitInsideData -|PropName |Description |default value| -|:---------------|:---------------|:-------| -|enabled| determines whether to enable fit inside to SideTitleWidget |true| -|axisPosition| position (in pixel) that applied to the center of child widget along its corresponding axis |null| -|parentAxisSize| child widget's corresponding axis maximum width/height |null| -|distanceFromEdge| distance between child widget and its closest corresponding axis edge | 6 | - -### FlGridData -|PropName|Description|default value| -|:-------|:----------|:------------| -|show|determines to show or hide the background grid data|true| -|drawHorizontalLine|determines to show or hide the horizontal grid lines|true| -|horizontalInterval|interval space of grid, left it null to be calculate automatically |null| -|getDrawingHorizontalLine|a function to get the line style of each grid line by giving the related axis value|defaultGridLine| -|checkToShowHorizontalLine|a function to check whether to show or hide the horizontal grid by giving the related axis value |showAllGrids| -|drawVerticalLine|determines to show or hide the vertical grid lines|true| -|verticalInterval|interval space of grid, left it null to be calculate automatically |null| -|getDrawingVerticalLine|a function to get the line style of each grid line by giving the related axis value|defaultGridLine| -|checkToShowVerticalLine|a function to determine whether to show or hide the vertical grid by giving the related axis value |showAllGrids| - - - -### FlSpot -|PropName|Description|default value| -|:-------|:----------|:------------| -|x|represents x on the coordinate system (x starts from left)|null| -|y|represents y on the coordinate system (y starts from bottom)|null| - - - -### FlLine -|propName|Description|default value| -|:-------|:----------|:------------| -|color|determines the color of line|Colors.black| -|gradient|gradient of the line|null| -|strokeWidth|determines the stroke width of the line|2| -|dashArray|A circular array of dash offsets and lengths. For example, the array `[5, 10]` would result in dashes 5 pixels long followed by blank spaces 10 pixels long. The array `[5, 10, 5]` would result in a 5 pixel dash, a 10 pixel gap, a 5 pixel dash, a 5 pixel gap, a 10 pixel dash, etc.|null| - - -### TouchedSpot -|PropName|Description|default value| -|:-------|:----------|:------------| -|spot|the touched [FlSpot](#FlSpot)|null| -|offset|[Offset](https://api.flutter.dev/flutter/dart-ui/Offset-class.html) of the touched spot|null| - -### RangeAnnotations -|PropName|Description|default value| -|:-------|:----------|:------------| -|horizontalRangeAnnotations|list of [horizontalRangeAnnotation](#HorizontalRangeAnnotation) to draw on the chart|[]| -|verticalRangeAnnotations|list of [VerticalRangeAnnotation](#VerticalRangeAnnotation) to draw on the chart|[]| - - -### HorizontalRangeAnnotation -|PropName|Description|default value| -|:-------|:----------|:------------| -|y1|start interval of horizontal rectangle|null| -|y2|end interval of horizontal rectangle|null| -|color|color of the rectangle|Colors.white| -|gradient|gradient of the rectangle|null| - - -### VerticalRangeAnnotation -|PropName|Description|default value| -|:-------|:----------|:------------| -|x1|start interval of vertical rectangle|null| -|x2|end interval of vertical rectangle|null| -|color|color of the rectangle|Colors.white| -|gradient|gradient of the rectangle|null| - -### FlTouchEvent -Base class for all supported touch/pointer events. - -|PropName|Description|Inspired from| -|:-------|:----------|:----------| -|FlPanDownEvent|Contains information of happened touch gesture|[GestureDragDownCallback](https://api.flutter.dev/flutter/gestures/GestureDragDownCallback.html)| -|FlPanStartEvent|When a pointer has contacted the screen and has begun to move.|[GestureDragStartCallback](https://api.flutter.dev/flutter/gestures/GestureDragStartCallback.html)| -|FlPanUpdateEvent|When a pointer that is in contact with the screen and moving has moved again.|[GestureDragUpdateCallback](https://api.flutter.dev/flutter/gestures/GestureDragUpdateCallback.html)| -|FlPanCancelEvent|When the pointer that previously triggered a `FlPanStartEvent` did not complete.|[GestureDragCancelCallback](https://api.flutter.dev/flutter/gestures/GestureDragCancelCallback.html)| -|FlPanEndEvent|When a pointer that was previously in contact with the screen and moving is no longer in contact with the screen.|[GestureDragEndCallback](https://api.flutter.dev/flutter/gestures/GestureDragEndCallback.html)| -|FlTapDownEvent|When a pointer that might cause a tap has contacted the screen.|[GestureTapDownCallback](https://api.flutter.dev/flutter/gestures/GestureTapDownCallback.html)| -|FlTapCancelEvent|When the pointer that previously triggered a `FlTapDownEvent` will not end up causing a tap.|[GestureTapCancelCallback](https://api.flutter.dev/flutter/gestures/GestureTapCancelCallback.html)| -|FlTapUpEvent|When a pointer that will trigger a tap has stopped contacting the screen.|[GestureTapUpCallback](https://api.flutter.dev/flutter/gestures/GestureTapUpCallback.html)| -|FlLongPressStart|Called When a pointer has remained in contact with the screen at the same location for a long period of time.|[GestureLongPressStartCallback](https://api.flutter.dev/flutter/gestures/GestureLongPressStartCallback.html)| -|FlLongPressMoveUpdate|When a pointer is moving after being held in contact at the same location for a long period of time. Reports the new position and its offset from the original down position.|[GestureLongPressMoveUpdateCallback](https://api.flutter.dev/flutter/gestures/GestureLongPressMoveUpdateCallback.html)| -|FlLongPressEnd|When a pointer stops contacting the screen after a long press gesture was detected. Also reports the position where the pointer stopped contacting the screen.|[GestureLongPressEndCallback](https://api.flutter.dev/flutter/gestures/GestureLongPressEndCallback.html)| -|FlPointerEnterEvent|The pointer has moved with respect to the device while the pointer is or is not in contact with the device, and it has entered our chart.|[PointerEnterEventListener](https://api.flutter.dev/flutter/services/PointerEnterEventListener.html)| -|FlPointerHoverEvent|The pointer has moved with respect to the device while the pointer is not in contact with the device.|[PointerHoverEventListener](https://api.flutter.dev/flutter/services/PointerHoverEventListener.html)| -|FlPointerExitEvent|The pointer has moved with respect to the device while the pointer is or is not in contact with the device, and exited our chart.|[PointerExitEventListener](https://api.flutter.dev/flutter/services/PointerExitEventListener.html)| - -### ExtraLinesData -|PropName|Description|default value| -|:-------|:----------|:------------| -|extraLinesOnTop|determines to paint the extraLines over the trendline or below it|true| -|horizontalLines|list of [HorizontalLine](#HorizontalLine) to draw on the chart|[]| -|verticalLines|list of [VerticalLine](#VerticalLine) to draw on the chart|[]| - - -### HorizontalLine -|PropName|Description|default value| -|:-------|:----------|:------------| -|y|draw straight line from left to right of the chart with dynamic y value|null| -|color|color of the line|Colors.black| -|strokeWidth|strokeWidth of the line|2| -|strokeCap|strokeCap of the line,e.g. Setting to StrokeCap.round will draw the tow ends of line rounded. NOTE: this might not work on dash lines.|StrokeCap.butt| -|image|image to annotate the line. the Future must be complete at the time this is received by the chart|null| -|sizedPicture|[SizedPicture](#Sizedpicture) uses an svg to annotate the line with a picture. the Future must be complete at the time this is received by the chart|null| -|label|a [HorizontalLineLabel](#HorizontalLineLabel) object with label parameters|null - -### VerticalLine -|PropName|Description|default value| -|:-------|:----------|:------------| -|x|draw straight line from bottom to top of the chart with dynamic x value|null| -|color|color of the line|Colors.black| -|strokeWidth|strokeWidth of the line|2| -|strokeCap|strokeCap of the line,e.g. Setting to StrokeCap.round will draw the tow ends of line rounded. NOTE: this might not work on dash lines.|StrokeCap.butt| -|image|image to annotate the line. the Future must be complete at the time this is received by the chart|null| -|sizedPicture|[SizedPicture](#SizedPicture) uses an svg to annotate the line with a picture. the Future must be complete at the time this is received by the chart|null| -|label|a [VerticalLineLabel](#VerticalLineLabel) object with label parameters|null - -### SizedPicture -|PropName|Description|default value| -|:-------|:----------|:------------| -|Picture|a Dart UI Picture which should be derived from the svg. see example for how to get a Picture from an svg.|null| -|width|the width of the picture|null| -|height|the height of the picture|null| - -### HorizontalLineLabel -|PropName|Description|default value| -|:-------|:----------|:------------| -|show| Determines showing or not showing label|false| -|padding|[EdgeInsets](https://api.flutter.dev/flutter/painting/EdgeInsets-class.html) object with label padding configuration|EdgeInsets.zero| -|style|[TextStyle](https://api.flutter.dev/flutter/dart-ui/TextStyle-class.html) which determines label text style|TextStyle(fontSize: 11, color: line.color)| -|alignment|[Alignment](https://api.flutter.dev/flutter/painting/Alignment-class.html) with label position relative to line|Alignment.topLeft| -|labelResolver|Getter function returning label title|defaultLineLabelResolver| - -### VerticalLineLabel -|PropName|Description|default value| -|:-------|:----------|:------------| -|show| Determines showing or not showing label|false| -|padding|[EdgeInsets](https://api.flutter.dev/flutter/painting/EdgeInsets-class.html) object with label padding configuration|EdgeInsets.zero| -|style|[TextStyle](https://api.flutter.dev/flutter/dart-ui/TextStyle-class.html) which determines label text style|TextStyle(fontSize: 11, color: line.color)| -|alignment|[Alignment](https://api.flutter.dev/flutter/painting/Alignment-class.html) with label position relative to line|Alignment.topLeft| -|labelResolver|Getter function returning label title|defaultLineLabelResolver| - -### FLHorizontalAlignment -enum values {`center`, `left`, `right`} diff --git a/repo_files/documentations/handle_animations.md b/repo_files/documentations/handle_animations.md deleted file mode 100644 index 6ce792268b..0000000000 --- a/repo_files/documentations/handle_animations.md +++ /dev/null @@ -1,25 +0,0 @@ -### Animations -|Sample1 |Sample2 |Sample3 | -|:------------:|:------------:|:-------------:| -| [![](https://github.com/imaNNeo/fl_chart/raw/master/repo_files/images/line_chart/line_chart_sample_1_anim.gif)](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/line_chart.md#sample-1-source-code) | [![](https://github.com/imaNNeo/fl_chart/raw/master/repo_files/images/line_chart/line_chart_sample_2_anim.gif)](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/line_chart.md#sample-2-source-code) | [![](https://github.com/imaNNeo/fl_chart/raw/master/repo_files/images/bar_chart/bar_chart_sample_1_anim.gif)](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/bar_chart.md#sample-1-source-code) | - -##### How? -We handle all animations Implicitly, This is power of the [ImplicitlyAnimatedWidget](https://api.flutter.dev/flutter/widgets/ImplicitlyAnimatedWidget-class.html), just like [AnimatedContainer](https://api.flutter.dev/flutter/widgets/AnimatedContainer-class.html). It means you don't need to do anything, just change any value and the animation is handled under the hood, if you are curious about it, check the source code, reading the source code is the best way to learn things. - - -##### Properties -You can change the [Duration](https://api.flutter.dev/flutter/dart-core/Duration-class.html) and [Curve](https://api.flutter.dev/flutter/animation/Curves-class.html) of animation using `swapAnimationDuration` and `swapAnimationCurve` properties respectively. - -```dart -LineChart( - swapAnimationDuration: Duration(milliseconds: 150), - swapAnimationCurve: Curves.linear, - LineChartData( - isShowingMainData ? sampleData1() : sampleData2(), - ), -) -``` - -##### How to disable - -If you want to disable the animations, you can set `Duration.zero` as `swapAnimationDuration`. diff --git a/repo_files/documentations/handle_touches.md b/repo_files/documentations/handle_touches.md deleted file mode 100644 index fb29591666..0000000000 --- a/repo_files/documentations/handle_touches.md +++ /dev/null @@ -1,51 +0,0 @@ -### Touch Interactivity - -|LineChart |BarChart |PieChart | -|:------------:|:------------:|:-------------:| -| [![](https://github.com/imaNNeo/fl_chart/raw/master/repo_files/images/line_chart/line_chart_sample_1.gif)](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/line_chart.md#sample-1-source-code) [![](https://github.com/imaNNeo/fl_chart/raw/master/repo_files/images/line_chart/line_chart_sample_2.gif)](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/line_chart.md#sample-2-source-code) | [![](https://github.com/imaNNeo/fl_chart/raw/master/repo_files/images/bar_chart/bar_chart_sample_1.gif)](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/bar_chart.md#sample-1-source-code) [![](https://github.com/imaNNeo/fl_chart/raw/master/repo_files/images/bar_chart/bar_chart_sample_2.gif)](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/bar_chart.md#sample-2-source-code) | [![](https://github.com/imaNNeo/fl_chart/raw/master/repo_files/images/pie_chart/pie_chart_sample_1.gif)](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/pie_chart.md#sample-1-source-code) [![](https://github.com/imaNNeo/fl_chart/raw/master/repo_files/images/pie_chart/pie_chart_sample_2.gif)](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/pie_chart.md#sample-2-source-code) | - - - -#### The Interaction Flow -When an interaction happens, our renderers give us a [FlTouchEvent](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/base_chart.md#fltouchevent). -We pass it to correspond painter class. Then it calculates and gives us a TouchResponse (per interaction). -Then we call the touchCallback function that provided through the chart's data. - -If you set `handleBuiltInTouches` true, it will handle touch by showing a tooltip or an indicator on the touched spot (in the line, bar and scatter charts), you can also handle your own touch handling along with the built in touches. - - -#### How to use? (for example in `LineChart`) -##### In the Line and Bar Charts we show a built in tooltip on the touched spots, then you just need to config how to show it, just fill the `touchTooltipData` in the `LineTouchData`. -##### -```dart -LineChart( - LineChartData( - lineTouchData: LineTouchData( - touchTooltipData: TouchTooltipData ( - tooltipBgColor: Colors.blueGrey.withOpacity(0.8), - . - . - . - ) - ) - ) -) -``` -##### But if you want more customization on touch behaviors, implement the `touchCallback` and handle it. -```dart - -LineChart( - LineChartData( - lineTouchData: LineTouchData( - touchCallback: (FlTouchEvent event, LineTouchResponse touchResponse) { - if (event is FlTapUpEvent) { - // handle tap here - } - }, - . - . - . - ) - ) -) -``` diff --git a/repo_files/documentations/index.md b/repo_files/documentations/index.md deleted file mode 100644 index aada95361b..0000000000 --- a/repo_files/documentations/index.md +++ /dev/null @@ -1,21 +0,0 @@ -## FL Chart Documentation -FlChart allows you to draw your charts in the Flutter, currently we support these type of charts, -click and learn more about them. - -- [LineChart](line_chart.md) - -- [BarChart](bar_chart.md) - -- [PieChart](pie_chart.md) - -- [ScatterChart](scatter_chart.md) - -- [RadarChart](radar_chart.md) - ------------ - -- [Migration Guides](migration_guides/INDEX.md) - -- [Handle Touches](handle_touches.md) - -- [Handle Animations](handle_animations.md) \ No newline at end of file diff --git a/repo_files/documentations/line_chart.md b/repo_files/documentations/line_chart.md deleted file mode 100644 index 7a0f41cd99..0000000000 --- a/repo_files/documentations/line_chart.md +++ /dev/null @@ -1,223 +0,0 @@ -# LineChart - - - -### How to use -```dart -LineChart( - LineChartData( - // read about it in the LineChartData section - ), - swapAnimationDuration: Duration(milliseconds: 150), // Optional - swapAnimationCurve: Curves.linear, // Optional -); -``` - -### Implicit Animations -When you change the chart's state, it animates to the new state internally (using [implicit animations](https://flutter.dev/docs/development/ui/animations/implicit-animations)). You can control the animation [duration](https://api.flutter.dev/flutter/dart-core/Duration-class.html) and [curve](https://api.flutter.dev/flutter/animation/Curves-class.html) using optional `swapAnimationDuration` and `swapAnimationCurve` properties, respectively. - -### LineChartData -|PropName |Description |default value| -|:---------------|:---------------|:-------| -|lineBarsData| list of [LineChartBarData ](#LineChartBarData ) to show the chart's lines, they stack and can be drawn on top of each other|[]| -|betweenBarsData| list of [BetweenBarsData](#BetweenBarsData ) to fill the area between 2 chart lines|[]| -|titlesData| check the [FlTitlesData](base_chart.md#FlTitlesData)| FlTitlesData()| -|extraLinesData| [ExtraLinesData](base_chart.md#ExtraLinesData) object to hold drawing details of extra horizontal and vertical lines. Check [ExtraLinesData](base_chart.md#ExtraLinesData)|ExtraLinesData()| -|lineTouchData| [LineTouchData](#linetouchdata-read-about-touch-handling) holds the touch interactivity details| LineTouchData()| -|rangeAnnotations| show range annotations behind the chart, check [RangeAnnotations](base_chart.md#RangeAnnotations) | RangeAnnotations()| -|showingTooltipIndicators| show the tooltip based on provided list of [LineBarSpot](#LineBarSpot)| [] | -|gridData| check the [FlGridData](base_chart.md#FlGridData)|FlGridData()| -|borderData| check the [FlBorderData](base_chart.md#FlBorderData)|FlBorderData()| -|minX| gets minimum x of x axis, if null, value will read from the input lineBars |null| -|maxX| gets maximum x of x axis, if null, value will read from the input lineBars | null| -|baselineX| defines the baseline of x-axis | 0| -|minY| gets minimum y of y axis, if null, value will read from the input lineBars | null| -|maxY| gets maximum y of y axis, if null, value will read from the input lineBars | null| -|baselineY| defines the baseline of y-axis | 0| -|clipData| clip the chart to the border (prevent drawing outside the border) | FlClipData.none()| -|backgroundColor| a background color which is drawn behind th chart| null | - - -### LineChartBarData -|PropName |Description |default value| -|:---------------|:---------------|:-------| -|show| determines to show or hide the bar line|true| -|spots| list of [FlSpot](base_chart.md#FlSpot)'s x and y coordinates that the line go through it| [] -|color|color of the line|[Colors.redAccent]| -|gradient| You can use any [Gradient](https://api.flutter.dev/flutter/dart-ui/Gradient-class.html) here. such as [LinearGradient](https://api.flutter.dev/flutter/painting/LinearGradient-class.html) or [RadialGradient](https://api.flutter.dev/flutter/painting/RadialGradient-class.html)|null| -|barWidth| gets the stroke width of the line bar|2.0| -|isCurved| curves the corners of the line on the spot's positions| false| -|curveSmoothness| smoothness radius of the curve corners (works when isCurved is true) | 0.35| -|preventCurveOverShooting|prevent overshooting when draw curve line on linear sequence spots, check this [issue](https://github.com/imaNNeo/fl_chart/issues/25)| false| -|preventCurveOvershootingThreshold|threshold for applying prevent overshooting algorithm | 10.0| -|isStrokeCapRound| determines whether start and end of the bar line is Qubic or Round | false| -|isStrokeJoinRound| determines whether stroke joins have a round shape or a sharp edge | false| -|belowBarData| check the [BarAreaData](#BarAreaData) |BarAreaData| -|aboveBarData| check the [BarAreaData](#BarAreaData) |BarAreaData| -|dotData| check the [FlDotData](#FlDotData) | FlDotData()| -|showingIndicators| show indicators based on provided indexes | []| -|dashArray|A circular array of dash offsets and lengths. For example, the array `[5, 10]` would result in dashes 5 pixels long followed by blank spaces 10 pixels long. The array `[5, 10, 5]` would result in a 5 pixel dash, a 10 pixel gap, a 5 pixel dash, a 5 pixel gap, a 10 pixel dash, etc.|null| -|shadow|It drops a shadow behind your bar, see [Shadow](https://api.flutter.dev/flutter/dart-ui/Shadow-class.html).|Shadow()| -|isStepLineChart|If sets true, it draws the chart in Step Line Chart style, using `lineChartStepData`.|false| -|lineChartStepData|Holds data for representing a Step Line Chart, and works only if [isStepChart] is true.|[LineChartStepData](#LineChartStepData)()| - -### LineChartStepData -|PropName|Description|default value| -|:-------|:----------|:------------| -|stepDirection|Determines the direction of each step, could be between 0.0 (forward), and 1.0 (backward)|LineChartStepData.stepDirectionMiddle| - -### BetweenBarsData -|PropName|Description|default value| -|:-------|:----------|:------------| -|fromIndex|index of the first LineChartBarData inside LineChartData (zero-based index)|required| -|toIndex|index of the second LineChartBarData inside LineChartData (zero-based index)|required| -|color|color of the area|[Colors.blueGrey]| -|gradient| You can use any [Gradient](https://api.flutter.dev/flutter/dart-ui/Gradient-class.html) here. such as [LinearGradient](https://api.flutter.dev/flutter/painting/LinearGradient-class.html) or [RadialGradient](https://api.flutter.dev/flutter/painting/RadialGradient-class.html)|null| - -### BarAreaData -|PropName|Description|default value| -|:-------|:----------|:------------| -|show|determines to show or hide the below, or above bar area|false| -|color|color of the below, or above bar area|[Colors.blueGrey]| -|gradient| You can use any [Gradient](https://api.flutter.dev/flutter/dart-ui/Gradient-class.html) here. such as [LinearGradient](https://api.flutter.dev/flutter/painting/LinearGradient-class.html) or [RadialGradient](https://api.flutter.dev/flutter/painting/RadialGradient-class.html)|null| -|spotsLine| draw a line from each spot the the bottom, or top of the chart|[BarAreaSpotsLine](#BarAreaSpotsLine)()| -|cutOffY| cut the drawing below or above area to this y value (set `applyCutOffY` true if you want to set it)|null| -|applyCutOffY| determines should or shouldn't apply cutOffY (`scutOffY` should be provided)|false| - - -### BarAreaSpotsLine -|PropName|Description|default value| -|:-------|:----------|:------------| -|show|determines show or hide the below, or above spots line|true| -|flLineStyle|a [FlLine](base_chart.md#FlLine) object that determines style of the line|[Colors.blueGrey]| -|checkToShowSpotLine|a function to determine whether to show or hide the below or above line on the given spot|showAllSpotsBelowLine| -|applyCutOffY|Determines to inherit the cutOff properties from its parent [BarAreaData](#BarAreaData)|true| - -### FlDotData -|PropName|Description|default value| -|:-------|:----------|:------------| -|show|determines to show or hide the dots|true| -|checkToShowDot|a function to determine whether to show or hide the dot on the given spot|showAllDots| -|getDotPainter|a function to determine how the dot is drawn on the given spot|_defaultGetDotPainter| - -### LineTouchData ([read about touch handling](handle_touches.md)) -|PropName|Description|default value| -|:-------|:----------|:------------| -|enabled|determines to enable or disable touch behaviors|true| -|mouseCursorResolver|you can change the mouse cursor based on the provided [FlTouchEvent](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/base_chart.md#fltouchevent) and [LineTouchResponse](#LineTouchResponse)|MouseCursor.defer| -|touchTooltipData|a [LineTouchTooltipData](#LineTouchTooltipData), that determines how show the tooltip on top of touched spots (appearance of the showing tooltip bubble)|LineTouchTooltipData| -|getTouchedSpotIndicator| a callback that retrieves list of [TouchedSpotIndicatorData](#TouchedSpotIndicatorData) by the given list of [LineBarSpot](#LineBarSpot) for showing the indicators on touched spots|defaultTouchedIndicators| -|touchSpotThreshold|the threshold of the touch accuracy|10| -|distanceCalculator| a function to calculate the distance between a spot and a touch event| _xDistance| -|handleBuiltInTouches| set this true if you want the built in touch handling (show a tooltip bubble and an indicator on touched spots) | true| -|getTouchLineStart| controls where the line starts, default is bottom of the chart| defaultGetTouchLineStart| -|getTouchLineEnd| controls where the line ends, default is the touch point| defaultGetTouchLineEnd| -|touchCallback| listen to this callback to retrieve touch/pointer events and responses, it gives you a [FlTouchEvent](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/base_chart.md#fltouchevent) and [LineTouchResponse](#LineTouchResponse)| null| -|longPressDuration| allows to customize the duration of the longPress gesture. If null, the duration of the longPressGesture is [kLongPressTimeout](https://api.flutter.dev/flutter/gestures/kLongPressTimeout-constant.html)| null| - - -### LineTouchTooltipData - |PropName|Description|default value| - |:-------|:----------|:------------| - |tooltipBgColor|background color of the tooltip bubble|Colors.white| - |tooltipBorder|border of the tooltip bubble|BorderSide.none| - |tooltipRoundedRadius|background corner radius of the tooltip bubble|4| - |tooltipPadding|padding of the tooltip|EdgeInsets.symmetric(horizontal: 16, vertical: 8)| - |tooltipMargin|margin between the tooltip and the touched spot|16| - |tooltipHorizontalAlignment|horizontal alginment of tooltip relative to the spot|FLHorizontalAlignment.center| - |tooltipHorizontalOffset|horizontal offset of tooltip|0| - |maxContentWidth|maximum width of the tooltip (if a text row is wider than this, then the text breaks to a new line|120| - |getTooltipItems|a callback that retrieve list of [LineTooltipItem](#LineTooltipItem) by the given list of [LineBarSpot](#LineBarSpot) |defaultLineTooltipItem| - |fitInsideHorizontally| forces tooltip to horizontally shift inside the chart's bounding box| false| - |fitInsideVertically| forces tooltip to vertically shift inside the chart's bounding box| false| - |showOnTopOfTheChartBoxArea| forces the tooltip container to top of the line| false| - -### LineTooltipItem -|PropName|Description|default value| -|:-------|:----------|:------------| -|text|text string of each row in the tooltip bubble|null| -|textStyle|[TextStyle](https://api.flutter.dev/flutter/dart-ui/TextStyle-class.html) of the showing text row|null| -|textAlign|[TextStyle](https://api.flutter.dev/flutter/dart-ui/TextAlign-class.html) of the showing text row|TextAlign.center| -|textDirection|[TextDirection](https://api.flutter.dev/flutter/dart-ui/TextDirection-class.html) of the showing text row|TextDirection.ltr| -|children|[List](https://api.flutter.dev/flutter/painting/InlineSpan-class.html) pass additional InlineSpan children for a more advance tooltip|null| - -### TouchedSpotIndicatorData -|PropName|Description|default value| -|:-------|:----------|:------------| -|indicatorBelowLine|a [FlLine](base_chart.md#FlLine) to show the below line indicator on the touched spot|null| -|touchedSpotDotData|a [FlDotData](#FlDotData) to show a dot indicator on the touched spot|null| - - -### LineBarSpot -|PropName|Description|default value| -|:-------|:----------|:------------| -|bar|the [LineChartBarData](#LineChartBarData) that contains a spot|null| -|barIndex|index of the target [LineChartBarData](#LineChartBarData) inside [LineChartData](#LineChartData)|null| -|spotIndex|index of the target [FlSpot](base_chart.md#FlSpot) inside [LineChartBarData](#LineChartBarData)|null| - - -### TouchLineBarSpot -|PropName|Description|default value| -|:-------|:----------|:------------| -|bar|the [LineChartBarData](#LineChartBarData) that contains a spot|null| -|barIndex|index of the target [LineChartBarData](#LineChartBarData) inside [LineChartData](#LineChartData)|null| -|spotIndex|index of the target [FlSpot](base_chart.md#FlSpot) inside [LineChartBarData](#LineChartBarData)|null| -|distance|distance to the touch event|null| - - -### LineTouchResponse -|PropName|Description|default value| -|:-------|:----------|:------------| -|lineBarSpots|a list of [TouchLineBarSpot](#TouchLineBarSpot)|null| - -### ShowingTooltipIndicators -|PropName|Description|default value| -|:-------|:----------|:------------| -|showingSpots|Determines the spots that each tooltip should be shown.|null| - - -### some samples ----- -##### Sample 1 ([Source Code](/example/lib/presentation/samples/line/line_chart_sample1.dart)) - - - - - -##### Sample 2 ([Source Code](/example/lib/presentation/samples/line/line_chart_sample2.dart)) - - - - - -##### Sample 3 ([Source Code](/example/lib/presentation/samples/line/line_chart_sample3.dart)) - - - -##### Sample 4 ([Source Code](/example/lib/presentation/samples/line/line_chart_sample4.dart)) - - - -##### Sample 5 ([Source Code](/example/lib/presentation/samples/line/line_chart_sample5.dart)) - - - -##### Sample 6 - Reversed ([Source Code](/example/lib/presentation/samples/line/line_chart_sample6.dart)) - - - -##### Sample 7 ([Source Code](/example/lib/presentation/samples/line/line_chart_sample7.dart)) - - - -##### Sample 8 ([Source Code](/example/lib/presentation/samples/line/line_chart_sample8.dart)) - - -##### Sample 9 ([Source Code](/example/lib/presentation/samples/line/line_chart_sample9.dart)) - - -##### Sample 10 ([Source Code](/example/lib/presentation/samples/line/line_chart_sample10.dart)) - - -##### Sample 11 ([Source Code](/example/lib/presentation/samples/line/line_chart_sample11.dart)) -https://user-images.githubusercontent.com/7009300/152555425-3b53ac8c-257f-49b0-8d75-1a878c03ccaa.mp4 diff --git a/repo_files/documentations/migration_guides/0.50.0/MIGRATION_00_50_00.md b/repo_files/documentations/migration_guides/0.50.0/MIGRATION_00_50_00.md deleted file mode 100644 index 23103549da..0000000000 --- a/repo_files/documentations/migration_guides/0.50.0/MIGRATION_00_50_00.md +++ /dev/null @@ -1,184 +0,0 @@ -# Migrate to 0.50.0 - -## Widgets as titles (instead of boring strings) [#183](https://github.com/imaNNeo/fl_chart/issues/183) -We did a lot of hard-work to bring widgets to our titles around the axis-based charts. -It means that you can now put a widget as a title instead of a string. -Look at the below samples: - -**LineChartSample 8** ([Source Code](https://github.com/imaNNeo/fl_chart/blob/master/example/lib/presentation/samples/line/line_chart_sample8.dart)) - - - -**BarChartSample 7** ([Source Code](https://github.com/imaNNeo/fl_chart/blob/master/example/lib/presentation/samples/bar/bar_chart_sample7.dart)) - - - -**Breaking:** -Previously in [FlTitlesData](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/base_chart.md#FlTitlesData), there were four [SideTitles](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/base_chart.md#sidetitles). Now we have four [AxisTitle](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/base_chart.md#axistitle) instead and [SideTitles](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/base_chart.md#sidetitles) can be placed inside [AxisTitle](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/base_chart.md#AxisTitle). -In fact, we removed `AxisTitlesData` class (which used to hold four `AxisTitle`). Now you can put them in [FlTitlesData](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/base_chart.md#fltitlesdata). - - bool? showTitle, - String? titleText, - double? reservedSize, - TextStyle? textStyle, - TextDirection? textDirection, - TextAlign? textAlign, - -Look at the below sample. - -Previously: -```dart -AxisBasedChartData( // Line, Bar and Scatter - axisTitleData: FlAxisTitleData( - bottomTitle: AxisTitle( - showTitle: true, - margin: 0, - titleText: '2019', - reservedSize: 80, - textStyle: TextStyle(color: Colors.green), - textAlign: TextAlign.right, - textDirection: TextDirection.rtl, - ), - ), - titlesData: FlTitlesData( - bottomTitles: SideTitles( - showTitles: true, - getTitles: (value) { - return 'My Text' - }, - reservedSize: 14, - interval: 1, - margin: 8, - getTextStyles: (context, value) => TextStyle(color: Colors.red), - textDirection: TextDirection.rtl, - textAlign: TextAlign.center, - ), - ) -) -``` - -Now in `0.50.0`: -```dart -AxisBasedChartData( // Line, Bar and Scatter - titlesData: FlTitlesData( - show: true, - bottomTitles: AxisTitles( - axisNameWidget: Text( // You can use any widget here - '2019', - style: TextStyle(color: Colors.green), - textAlign: TextAlign.right, - textDirection: TextDirection.rtl, - ), - axisNameSize: 80, - sideTitles: SideTitles( - showTitles: true, - getTitlesWidget: (value, titleMeta) { - return Padding( // You can use any widget here - padding: EdgeInsets.only(top: 8.0), - child: Text( - 'My Text', - style: TextStyle(color: Colors.red), - textDirection: TextDirection.rtl, - textAlign: TextAlign.center, - ), - ); - }, - reservedSize: 14, - interval: 1, - ), - ), - ) -) -``` - -* Instead of setting `rotateAngle` property, now you can wrap your widget with [RotatedBox](https://api.flutter.dev/flutter/widgets/RotatedBox-class.html) to rotate it. -* Instead of setting `checkToShowTitle` property, you can pass an empty [SizedBox](https://api.flutter.dev/flutter/widgets/SizedBox-class.html) wherever you want to skip drawing a title. - ------ - -## Gradient and solid color #948 -We made some changes on our approach for handling `solid` color and `gradient` colors. - -Previously, we had these properties to handle gradient or solid color: -```dart -List colors, -List stops, -Offset gradientFrom, -Offset gradientTo, -``` -It was supposed to work on both solid color and gradient color. -If you pass just one color in the `colors` property, it was a solid color. -On the other hand, if you provide more than one color, it was a linear gradient. - -Now we are using a new approach with the properties below: -```dart -Color? color, -Gradient? gradient, -``` - -* If you fill `color` property, it will be a solid color. -* If you fill `gradient` property, it would be any [Gradient](https://api.flutter.dev/flutter/dart-ui/Gradient-class.html) you want. Such as [LinearGradient](https://api.flutter.dev/flutter/painting/LinearGradient-class.html) and [RadialGradient](https://api.flutter.dev/flutter/painting/RadialGradient-class.html). -* You need to fill one of them. - -These are the affected classes: -* [BarChartRodData](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/bar_chart.md#barchartroddata) -* [BackgroundBarChartRodData](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/bar_chart.md#backgroundbarchartroddata) -* [BarAreaData](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/line_chart.md#BarAreaData) -* [BetweenBarsData](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/line_chart.md#betweenbarsdata) -* [LineChartBarData](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/line_chart.md#linechartbardata) - -Check the below sample: - -Previously: -```dart -LineChartBarData( - colors: [Colors.red] -) -``` - -Now in `0.50.0`: -```dart -LineChartBarData( - color: Colors.red -) -``` ------ -Previously: -```dart -LineChartBarData( - colors: [Colors.green, Colors.blue], -) -``` - -Now in `0.50.0`: -```dart -LineChartBarData( - gradient: LinearGradient( - colors: [Colors.green, Colors.blue], - begin: Alignment.centerLeft, - end: Alignment.centerRight, - ) -) -``` ------ -Previously: -```dart -LineChartBarData( - colors: [Colors.green, Colors.blue], - colorStops: [0.1, 0.10], - gradientFrom: Offset(0, 0), // topLeft - gradientTo: Offset(1, 1), // bottomRight -) -``` - -Now in `0.50.0`: -```dart -LineChartBarData( - gradient: LinearGradient( - colors: [Colors.green, Colors.blue], - stops: [0.1, 0.10], - begin: Alignment.topLeft, - end: Alignment.bottomRight, - ) -) -``` \ No newline at end of file diff --git a/repo_files/documentations/migration_guides/0.55.0/MIGRATION_00_55_00.md b/repo_files/documentations/migration_guides/0.55.0/MIGRATION_00_55_00.md deleted file mode 100644 index 3bfc02fcf9..0000000000 --- a/repo_files/documentations/migration_guides/0.55.0/MIGRATION_00_55_00.md +++ /dev/null @@ -1,57 +0,0 @@ -# Migrate to new version - -## The ability to rotate the RadarChart titles [#1057](https://github.com/imaNNeo/fl_chart/issues/1057) - -We added the ability to customize the rotation angles of the RadarChart titles. -To do that we add to break one thing and added a new type. - - - -**Breaking:** - -We only changed [RadarChartData.getTitle](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/radar_chart.md#RadarChartData). -Its type [GetTitleByIndexFunction] changed from `string Function(int index)` to `RadarChartTitle Function(int index, double angle)`. - -To reuse the example from the code: - -Previously: -```dart -getTitle: (index) { - switch (index) { - case 0: - return 'Mobile or Tablet'; - case 2: - return 'Desktop'; - case 1: - return 'TV'; - default: - return ''; - } -} -``` - -Now in new version: - -```dart -getTitle: (index, angle) { - switch (index) { - case 0: - return RadarChartTitle(text: 'Mobile or Tablet', angle: angle); - case 2: - return RadarChartTitle(text: 'Desktop', angle: angle); - case 1: - return RadarChartTitle(text: 'TV', angle: angle); - default: - return const RadarChartTitle(text: ''); - } -} -``` - -If you take the provided `angle` and forward it to the [RadarChartTitle] it will behave like in previous versions. -But you can now render all the titles horizontally by avoiding the [RadarChartTitle.angle] prop (`0` by default). - -Apply a relative angle, for example: `RadarChartTitle(text: 'Desktop', angle: angle + 90);` - - -or an absolute angle, for example: `RadarChartTitle(text: 'Desktop', angle: 90);` - \ No newline at end of file diff --git a/repo_files/documentations/migration_guides/0.55.0/attachments/radar_chart_sample_1.gif b/repo_files/documentations/migration_guides/0.55.0/attachments/radar_chart_sample_1.gif deleted file mode 100644 index 98e555b676..0000000000 Binary files a/repo_files/documentations/migration_guides/0.55.0/attachments/radar_chart_sample_1.gif and /dev/null differ diff --git a/repo_files/documentations/migration_guides/0.55.0/attachments/radar_chart_sample_2.png b/repo_files/documentations/migration_guides/0.55.0/attachments/radar_chart_sample_2.png deleted file mode 100644 index 82776167c1..0000000000 Binary files a/repo_files/documentations/migration_guides/0.55.0/attachments/radar_chart_sample_2.png and /dev/null differ diff --git a/repo_files/documentations/migration_guides/0.55.0/attachments/radar_chart_sample_3.png b/repo_files/documentations/migration_guides/0.55.0/attachments/radar_chart_sample_3.png deleted file mode 100644 index da8df18610..0000000000 Binary files a/repo_files/documentations/migration_guides/0.55.0/attachments/radar_chart_sample_3.png and /dev/null differ diff --git a/repo_files/documentations/migration_guides/INDEX.md b/repo_files/documentations/migration_guides/INDEX.md deleted file mode 100644 index f05914444c..0000000000 --- a/repo_files/documentations/migration_guides/INDEX.md +++ /dev/null @@ -1,5 +0,0 @@ -Here are fl_chart's migration guides: - -#### [Migrate to 0.50.0](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/migration_guides/0.50.0/MIGRATION_00_50_00.md) - -#### [Migrate to 0.55.0](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/migration_guides/0.55.0/MIGRATION_00_55_00.md) \ No newline at end of file diff --git a/repo_files/documentations/pie_chart.md b/repo_files/documentations/pie_chart.md deleted file mode 100644 index a551d3c3a8..0000000000 --- a/repo_files/documentations/pie_chart.md +++ /dev/null @@ -1,81 +0,0 @@ -# PieChart - - - -### How to use -```dart -PieChart( - PieChartData( - // read about it in the PieChartData section - ), - swapAnimationDuration: Duration(milliseconds: 150), // Optional - swapAnimationCurve: Curves.linear, // Optional -); -``` - -**If you have a padding widget around the PieChart, make sure to set `PieChartData.centerSpaceRadius` to `double.infinity`** - - -### Implicit Animations -When you change the chart's state, it animates to the new state internally (using [implicit animations](https://flutter.dev/docs/development/ui/animations/implicit-animations)). You can control the animation [duration](https://api.flutter.dev/flutter/dart-core/Duration-class.html) and [curve](https://api.flutter.dev/flutter/animation/Curves-class.html) using optional `swapAnimationDuration` and `swapAnimationCurve` properties, respectively. - -### PieChartData -|PropName |Description |default value| -|:---------------|:---------------|:-------| -|sections| list of [PieChartSectionData ](#PieChartSectionData) that is shown on the pie chart|[]| -|centerSpaceRadius| free space in the middle of the PieChart, set `double.infinity` if you want it to be calculated according to the view size| double.nan| -|centerSpaceColor| colors the free space in the middle of the PieChart|Colors.transparent| -|sectionsSpace| space between the sections (margin of them). It does not work on html-rendere, read more about it [here](https://github.com/imaNNeo/fl_chart/issues/955) |2| -|startDegreeOffset| degree offset of the sections around the pie chart, should be between 0 and 360|0| -|pieTouchData| [PieTouchData](#PieTouchData) holds the touch interactivity details| PieTouchData()| -|borderData| shows a border around the chart, check the [FlBorderData](base_chart.md#FlBorderData)|FlBorderData()| - - -### PieChartSectionData -|PropName |Description |default value| -|:---------------|:---------------|:-------| -|value| value is the weight of each section, for example if all values is 25, and we have 4 section, then the sum is 100 and each section takes 1/4 of the whole circle (360/4) degree|10| -|color| colors the section| Colors.red -|radius| the width radius of each section|40| -|showTitle| determines to show or hide the titles on each section|true| -|titleStyle| TextStyle of the titles| TextStyle(color: Colors.white, fontSize: 16, fontWeight: FontWeight.bold)| -|title| title of the section| value| -|borderSide| Defines border stroke around the section | BorderSide(width: 0)| -|badgeWidget| badge component of the section| null| -|titlePositionPercentageOffset|the place of the title in the section, this field should be between 0 and 1|0.5| -|badgePositionPercentageOffset|the place of the badge component in the section, this field should be between 0 and 1|0.5| - - -### PieTouchData ([read about touch handling](handle_touches.md)) -|PropName|Description|default value| -|:-------|:----------|:------------| -|enabled|determines to enable or disable touch behaviors|true| -|mouseCursorResolver|you can change the mouse cursor based on the provided [FlTouchEvent](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/base_chart.md#fltouchevent) and [PieTouchResponse](#PieTouchResponse)|MouseCursor.defer| -|touchCallback| listen to this callback to retrieve touch/pointer events and responses, it gives you a [FlTouchEvent](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/base_chart.md#fltouchevent) and [PieTouchResponse](#PieTouchResponse)| null| -|longPressDuration| allows to customize the duration of the longPress gesture. If null, the duration of the longPressGesture is [kLongPressTimeout](https://api.flutter.dev/flutter/gestures/kLongPressTimeout-constant.html)| null| - -### PieTouchResponse -|PropName|Description|default value| -|:-------|:----------|:------------| -|touchedSection|Instance of [PieTouchedSection](#PieTouchedSection) which holds data about the touched section|null| - -### PieTouchedSection -|PropName|Description|default value| -|:-------|:----------|:------------| -|touchedSection|the [PieChartSectionData](#PieChartSectionData) that user touched| null | -|touchedSectionIndex| index of the touched section | null| -|touchAngle|the angle of the touch|null| -|touchRadius| the radius of the touch|null| - -### some samples ----- -##### Sample 1 ([Source Code](/example/lib/presentation/samples/pie/pie_chart_sample1.dart)) - - - -##### Sample 2 ([Source Code](/example/lib/presentation/samples/pie/pie_chart_sample2.dart)) - - - -##### Sample 3 ([Source Code](/example/lib/presentation/samples/pie/pie_chart_sample3.dart)) - diff --git a/repo_files/documentations/radar_chart.md b/repo_files/documentations/radar_chart.md deleted file mode 100644 index ba04065801..0000000000 --- a/repo_files/documentations/radar_chart.md +++ /dev/null @@ -1,82 +0,0 @@ -# RadarChart - - -### How to use -```dart -RadarChart( - RadarChartData( - // read about it in the RadarChartData section - ), - swapAnimationDuration: Duration(milliseconds: 150), // Optional - swapAnimationCurve: Curves.linear, // Optional -); -``` - -### Implicit Animations -When you change the chart's state, it animates to the new state internally (using [implicit animations](https://flutter.dev/docs/development/ui/animations/implicit-animations)). You can control the animation [duration](https://api.flutter.dev/flutter/dart-core/Duration-class.html) and [curve](https://api.flutter.dev/flutter/animation/Curves-class.html) using optional `swapAnimationDuration` and `swapAnimationCurve` properties, respectively. - - -### RadarChartData -|PropName |Description |default value| -|:---------------|:---------------|:-------| -|dataSets| list of [RadarDataSet ](#RadarDataSet) that is shown on the radar chart|[]| -|radarBackgroundColor| This property fills the background of the radar with the specified color.| Colors.transparent| -|radarShape| the shape of the border and background |RadarShape.circle| -|radarBorderData| shows a border for radar chart|BorderSide(color: Colors.black, width: 2)| -|getTitle| This function helps the radar chart to draw titles outside the chart. The default angle provided when called is making the title tangent to the radar chart. |null| -|titleTextStyle|TextStyle of the titles|TextStyle(color: Colors.black, fontSize: 12)| -|titlePositionPercentageOffset|this field is the place of showing title on the RadarChart. The higher the value of this field, the more titles move away from the chart. this field should be between 0 and 1.|0.2| -|tickCount|Defines the number of ticks that should be paint in RadarChart|1| -|ticksTextStyle|TextStyle of the tick titles|TextStyle(fontSize: 10, color: Colors.black)| -|tickBorderData|Style of the tick borders|BorderSide(color: Colors.black, width: 2)| -|gridBorderData|Style of the grid borders|BorderSide(color: Colors.black, width: 2)| -|radarTouchData|Handles touch behaviors and responses.|RadarTouchData()| - -### RadarDataSet -|PropName |Description |default value| -|:---------------|:---------------|:-------| -|dataEntries|Each RadarDataSet contains list of [RadarEntries ](#RadarEntry) that is shown in RadarChart.|[]| -|fillColor|fills the DataSet with the specified color.|Colors.black12| -|borderColor|Paint the DataSet border with the specified color.|Colors.blueAccent| -|borderWidth|defines the width of [RadarDataSet](#RadarDataSet) border.|2.0| -|entryRadius|defines the radius of each [RadarEntries ](#RadarEntry).|5.0| - -### RadarEntry -|PropName |Description |default value| -|:---------------|:---------------|:-------| -|value| RadarChart uses this field to render every point in chart.| null | - -### RadarTouchData ([read about touch handling](handle_touches.md)) -|PropName|Description|default value| -|:-------|:----------|:------------| -|enabled|determines to enable or disable touch behaviors|true| -|mouseCursorResolver|you can change the mouse cursor based on the provided [FlTouchEvent](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/base_chart.md#fltouchevent) and [RadarTouchResponse](#RadarTouchResponse)|MouseCursor.defer| -|touchCallback| listen to this callback to retrieve touch/pointer events and responses, it gives you a [FlTouchEvent](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/base_chart.md#fltouchevent) and [RadarTouchResponse](#RadarTouchResponse)| null| -|longPressDuration| allows to customize the duration of the longPress gesture. If null, the duration of the longPressGesture is [kLongPressTimeout](https://api.flutter.dev/flutter/gestures/kLongPressTimeout-constant.html)| null| -|touchSpotThreshold|the threshold of the touch accuracy. we find the nearest spots on touched position based on this field.|10| - - -### RadarTouchResponse -|PropName|Description|default value| -|:-------|:----------|:------------| -|touchedSpot|the [RadarTouchedSpot](#RadarTouchedSpot) that user touched| null | - -### RadarTouchedSpot -|PropName|Description|default value| -|:-------|:----------|:------------| -|touchedDataSet|the [RadarDataSet](#RadarDataSet) that user touched| null | -|touchedDataSetIndex| index of the [RadarDataSet](#RadarDataSet) that user touched| null | -|touchedRadarEntry|the [RadarEntry](#RadarEntry) that user touched| null | -|touchedRadarEntryIndex| index of the [RadarEntry](#RadarEntry) that user touched| null | - -### RadarChartTitle -|PropName|Description|default value| -|:-------|:----------|:------------| -|text|the text of the title|required| -|angle|the angle used to rotate the title (in degree)|0| -|positionPercentageOffset|this field is the place of showing title. The higher the value of this field, the more titles move away from the chart. this field should be between 0 and 1|null| - -### some samples ----- -##### Sample 1 ([Source Code](/example/lib/presentation/samples/radar/radar_chart_sample1.dart)) - diff --git a/repo_files/documentations/scatter_chart.md b/repo_files/documentations/scatter_chart.md deleted file mode 100644 index fef371f611..0000000000 --- a/repo_files/documentations/scatter_chart.md +++ /dev/null @@ -1,100 +0,0 @@ -# ScatterChart - - - -### How to use -```dart -ScatterChart( - ScatterChartData( - // read about it in the ScatterChartData section - ), - swapAnimationDuration: Duration(milliseconds: 150), // Optional - swapAnimationCurve: Curves.linear, // Optional -); -``` - -### Implicit Animations -When you change the chart's state, it animates to the new state internally (using [implicit animations](https://flutter.dev/docs/development/ui/animations/implicit-animations)). You can control the animation [duration](https://api.flutter.dev/flutter/dart-core/Duration-class.html) and [curve](https://api.flutter.dev/flutter/animation/Curves-class.html) using optional `swapAnimationDuration` and `swapAnimationCurve` properties, respectively. - -### ScatterChartData -|PropName |Description |default value| -|:---------------|:---------------|:-------| -|scatterSpots| list of [ScatterSpot ](#ScatterSpot ) to show the scatter spots on the chart|[]| -|titlesData| check the [FlTitlesData](base_chart.md#FlTitlesData)| FlTitlesData()| -|axisTitleData| check the [FlAxisTitleData](base_chart.md#FlAxisTitleData)| FlAxisTitleData()| -|scatterTouchData| [ScatterTouchData](#scattertouchdata-read-about-touch-handling) holds the touch interactivity details| ScatterTouchData()| -|showingTooltipIndicators| indices of showing tooltip|[]| - - - -### ScatterSpot -|PropName |Description |default value| -|:---------------|:---------------|:-------| -|show| determines to show or hide the spot|true| -|radius| radius of the showing spot| [8] -|color| colors of the spot|// a color based on the values| - - -### ScatterTouchData ([read about touch handling](handle_touches.md)) -|PropName|Description|default value| -|:-------|:----------|:------------| -|enabled|determines to enable or disable touch behaviors|true| -|mouseCursorResolver|you can change the mouse cursor based on the provided [FlTouchEvent](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/base_chart.md#fltouchevent) and [ScatterTouchResponse](#ScatterTouchResponse)|MouseCursor.defer| -|touchTooltipData|a [ScatterTouchTooltipData](#ScatterTouchTooltipData), that determines how show the tooltip on top of touched spot (appearance of the showing tooltip bubble)|ScatterTouchTooltipData()| -|touchSpotThreshold|the threshold of the touch accuracy|0| -|handleBuiltInTouches| set this true if you want the built in touch handling (show a tooltip bubble and an indicator on touched spots) | true| -|touchCallback| listen to this callback to retrieve touch/pointer events and responses, it gives you a [FlTouchEvent](https://github.com/imaNNeo/fl_chart/blob/master/repo_files/documentations/base_chart.md#fltouchevent) and [ScatterTouchResponse](#ScatterTouchResponse)| null| -|longPressDuration| allows to customize the duration of the longPress gesture. If null, the duration of the longPressGesture is [kLongPressTimeout](https://api.flutter.dev/flutter/gestures/kLongPressTimeout-constant.html)| null| - -### ScatterTouchTooltipData -|PropName|Description|default value| -|:-------|:----------|:------------| -|tooltipBgColor|background color of the tooltip bubble|Colors.white| -|tooltipBorder|border of the tooltip bubble|BorderSide.none| -|tooltipRoundedRadius|background corner radius of the tooltip bubble|4| -|tooltipPadding|padding of the tooltip|EdgeInsets.symmetric(horizontal: 16, vertical: 8)| -|tooltipHorizontalAlignment|horizontal alginment of tooltip relative to the spot|FLHorizontalAlignment.center| -|tooltipHorizontalOffset|horizontal offset of tooltip|0| -|maxContentWidth|maximum width of the tooltip (if a text row is wider than this, then the text breaks to a new line|120| -|getTooltipItems|a callback that retrieve a [ScatterTooltipItem](#ScatterTooltipItem) by the given [ScatterSpot](#ScatterSpot) |defaultScatterTooltipItem| -|fitInsideHorizontally| forces tooltip to horizontally shift inside the chart's bounding box| false| -|fitInsideVertically| forces tooltip to vertically shift inside the chart's bounding box| false| - -### ScatterTooltipItem -|PropName|Description|default value| -|:-------|:----------|:------------| -|text|text string of each row in the tooltip bubble|null| -|textStyle|[TextStyle](https://api.flutter.dev/flutter/dart-ui/TextStyle-class.html) of the showing text row|null| -|textDirection|[TextDirection](https://api.flutter.dev/flutter/dart-ui/TextDirection-class.html) of the showing text row|TextDirection.ltr| -|bottomMargin| bottom margin of the tooltip (to the top of most top spot) | 0| -|children|[List](https://api.flutter.dev/flutter/painting/InlineSpan-class.html) pass additional InlineSpan children for a more advance tooltip|null| - - -### ScatterTouchResponse -###### you can listen to touch behaviors callback and retrieve this object when any touch action happened. -|PropName|Description|default value| -|:-------|:----------|:------------| -|touchedSpot|Instance of [ScatterTouchedSpot](#ScatterTouchedSpot) which holds data about the touched section|null| - -### ScatterTouchedSpot -|PropName|Description|default value| -|:-------|:----------|:------------| -|spot|touched [ScatterSpot](#ScatterSpot)|null| -|spotIndex|index of touched [ScatterSpot](#ScatterSpot)|null| - -### ScatterLabelSettings -|PropName|Description|default value| -|:-------|:----------|:------------| -|showLabel|Determines whether to show or hide the labels.|false| -|getLabelTextStyleFunction|This function gives you the index value of the spot in the list and returns the text style.|null| -|getLabelFunction|This function gives you the index value of the spot in the list and returns the label.|spot.radius.toString()| -|textDirection|Determines the direction of the text for the labels.|TextDirection.ltr| - -### some samples ----- -##### Sample 1 ([Source Code](/example/lib/presentation/samples/scatter/scatter_chart_sample1.dart)) - - - -##### Sample 2 ([Source Code](/example/lib/presentation/samples/scatter/scatter_chart_sample2.dart)) - diff --git a/repo_files/drawio/flchart.drawio b/repo_files/drawio/flchart.drawio deleted file mode 100644 index 73ef866b2a..0000000000 --- a/repo_files/drawio/flchart.drawio +++ /dev/null @@ -1 +0,0 @@ -7V1Jk+I2FP41XZUc6PKCF44N3WRSNanqyhySzk3YAjxjLMaIBvLrI9mSV9lsNjZEfZixnp5kLU/f+7SZJ32y2v8WgvXyD+RC/0lT3P2T/vqkaZqhauQ/KjnEkpGixIJF6LmxSE0F37x/IRNyta3nwk1OESPkY2+dFzooCKCDczIQhmiXV5sjP//WNVjAkuCbA/yy9C/PxUsmVXk1aMQX6C2W7NW2wSJmwPmxCNE2YO970vR59BdHrwDPi+lvlsBFu4xIf3vSJyFCOH5a7SfQp23Lmy1ON62ITcodwgCfksD5oU787+//fHzR0O7ny3SxU/UB770NPvAGgS5pHxZEIV6iBQqA/5ZKx1GlIc1WIaFU5ytCayJUifA7xPjAOhtsMSKiJV75LBbuPfx35vmDZvVssNDrnuUcBQ4ssMEh+gEnyEdhVE5dUdTX8YSqBe4LNQQidnyw2XhOLJx6Pn/hnDzmkhoKnCeZ8n4nXTKOm4O2QWUzM9EGbUOHaWlDazSc2aYCZo7uaO6AWzIIFxBX6ViJFZDRBdEK4vBAEoXQB9j7zBcAMDNfJHppV5MH1tvinq8q3Sfwt5Abr+mTco7XOVswf26pdY5XpBpe8KS/kFhlvSf/Ri2lxPIBpt1O44aZOAz3eAB8b8HSOaT9YJiPdqGDQlJXxHSoWYW+F8D01eRpwf6PCjjjgqk/WYIQczlpg1lRl8jWRdkyLEouqrIP5ziOtGlksbRjsIGseIqTLeas9Pp8IQtj8ROG2CNY9RK342vU0mPWqq9xIcaIaM39yP7nkcmP5yjAbPCpGgtPwcrz6WD6Av1PSHPNj8n8oE7AigYctKJjKnr2wQz64wT6+KAKUADFg5T+lUaaYEwy7OSNIBhwtDHgPiMqDx0WOxgxzGU+SdU0gi6RZJfB+CHTWmbg3TCuH29CpO0UaJVni6PrRxZchUhL2j08xKk0g4c/eI40kKaLQjxhoUddW1EsXWQV06mi2GWraBJ/zX4DsPkACPyy9zY9xmAJubeEXFXLQ67Ow8cAV1daAlz+sisQ9/t2teb6rLkbY7vaMbpLBhantUlXExljtcppxLeaNZehl5qsCKSbguRr0ZYlfUdegFPDswuGpyoFDx67AJaqYFNJMa4ws+sde5tmVm9lqavP+nmWqsbTP6p15gmDuL8rcPAGpMF6ANIAZqRrgUMHcGaS1Ef+kBTvHXisDdbx0y+/Hilgq8V5BRjQdTMYPdWURRKbJoiNZuT9iyngNSMBr1HttoiN0e1MUrvBTPKcGaMLNsuoZmqD3sA+Zfpo3sgTiP2Q3jPeoWTNIl1vkMTjfFMTL9XfarVCbG7DXpubtLamre1acIuSkpYBh4zCms7CNtWTuYGVd7aGbmQt96i+qRgFS49LcOmMr7L97pqDfyVqPSbePO/NGgRcljJvmhd9FVhR+soSKEmV3lPFpB7ZjE5dFWyveilxP1IVSe9vsVU0LCCOIuD3toDfW23Re/se6X2f2b2wlU/aH+qW4F8/z5ME//aU61RrE28Sd2txZq8t7jKD06TF1Vqc0QXPTzzqiTy/pD+yG+X5dU1411R/DMIHY/q8RvdP9HlNJM8/jeeXSL0AGauX8dW+8Xz1LtfxzyL6l7jNxBkKqMTtpgfq8JT5Qbcrslav2ZqcH1xpbmK6NurU5Ea9NjlpcW1YnN3FBGGonzdBKOo3vRFQ24Z3PUN49x5tL4DX6P5nCLwmcoZwgxnC0OzbDIGfPOqNu73saOnZZ3/a8bc1mwxV/ra12cWpq3P6tXTvstU5s9aZHtW3VKVW3zbtOv2WnPUjLOcVt7n77bTlzZtb+K0Bo8bp2rjAb6kCv9XazRujb2fFzrp5k3Fcpm7lPNezouv3472igr3D0CO9CkP27tZc2s3uT1zk0qz8GLGseg9l6Wqdfkse6hHud+ROL0n3JN1T0T2Zw67dk3r9Kub/85snjd/dHKiF03daoc9jt1O6u1nOyKjPp+U7oPx1AuSmw53CbNIRKRrp9I9+LigVCbCOZjDYRFZFEU01RZD2J5xD0lkOzCBZ/OYKMKM4n7fPvK0xDMnaEBNxwGOOQx8XcXHluW40ZHZLD8NvaxDxhl0I1qVh1AS8DPPwopbRRbRmUzSQ5rivWmrrPnHfRi+dM40UdoSY1aN1l2YOO5U3HxTx+sfN4Md4AOJYONcjqaOkjqUzO92vbPTtTLZE9wYPT4vRXS9wS6u439M2uj/CwjVB9zpETwRy6UDifyX+d790YGgS//uL/42cVCrhvznqmN0/wpXjwpkcie4S3Uvnbbpn9327/ybRvcGTzxXornbM7kcPhO6SuEtoF0F798Rdv35Z/hIcb/3+06kA2/7WHb8bcu3WnXEa/p79ZaGRUSju85FPCx1J0M4ZEF2rdAdsJ/HCHcLfgyUMPQzubo+w/i7MdXuHBdMToJToy46t7R3qj8AFRB94lbM+SQ0qPtc9Ev4yh2jYtfeh+Ef4ORzRsJN0XI450RxX1dsbciSY/qRZzIrS343T3/4D \ No newline at end of file diff --git a/repo_files/images/architecture/fl_chart_architecture.jpg b/repo_files/images/architecture/fl_chart_architecture.jpg deleted file mode 100644 index a70c56916d..0000000000 Binary files a/repo_files/images/architecture/fl_chart_architecture.jpg and /dev/null differ diff --git a/repo_files/images/architecture/fl_chart_architecture.txt b/repo_files/images/architecture/fl_chart_architecture.txt deleted file mode 100644 index cecae6cd67..0000000000 --- a/repo_files/images/architecture/fl_chart_architecture.txt +++ /dev/null @@ -1 +0,0 @@ -https://drive.google.com/file/d/1bj-2TqTRUh80dRKJk10drPNeA3fp3EA8/view \ No newline at end of file diff --git a/repo_files/images/bar_chart/bar_chart.jpg b/repo_files/images/bar_chart/bar_chart.jpg deleted file mode 100644 index 06b348a8f4..0000000000 Binary files a/repo_files/images/bar_chart/bar_chart.jpg and /dev/null differ diff --git a/repo_files/images/bar_chart/bar_chart_sample_1.gif b/repo_files/images/bar_chart/bar_chart_sample_1.gif deleted file mode 100644 index 46eaff4f9f..0000000000 Binary files a/repo_files/images/bar_chart/bar_chart_sample_1.gif and /dev/null differ diff --git a/repo_files/images/bar_chart/bar_chart_sample_1_anim.gif b/repo_files/images/bar_chart/bar_chart_sample_1_anim.gif deleted file mode 100644 index 19438920a0..0000000000 Binary files a/repo_files/images/bar_chart/bar_chart_sample_1_anim.gif and /dev/null differ diff --git a/repo_files/images/bar_chart/bar_chart_sample_2.gif b/repo_files/images/bar_chart/bar_chart_sample_2.gif deleted file mode 100644 index 5def9f5f29..0000000000 Binary files a/repo_files/images/bar_chart/bar_chart_sample_2.gif and /dev/null differ diff --git a/repo_files/images/bar_chart/bar_chart_sample_3.png b/repo_files/images/bar_chart/bar_chart_sample_3.png deleted file mode 100644 index 4f6915db5e..0000000000 Binary files a/repo_files/images/bar_chart/bar_chart_sample_3.png and /dev/null differ diff --git a/repo_files/images/bar_chart/bar_chart_sample_4.png b/repo_files/images/bar_chart/bar_chart_sample_4.png deleted file mode 100644 index 092f873681..0000000000 Binary files a/repo_files/images/bar_chart/bar_chart_sample_4.png and /dev/null differ diff --git a/repo_files/images/bar_chart/bar_chart_sample_5.gif b/repo_files/images/bar_chart/bar_chart_sample_5.gif deleted file mode 100644 index c3810e52f2..0000000000 Binary files a/repo_files/images/bar_chart/bar_chart_sample_5.gif and /dev/null differ diff --git a/repo_files/images/bar_chart/bar_chart_sample_6.png b/repo_files/images/bar_chart/bar_chart_sample_6.png deleted file mode 100644 index 657ad7b7b2..0000000000 Binary files a/repo_files/images/bar_chart/bar_chart_sample_6.png and /dev/null differ diff --git a/repo_files/images/bar_chart/bar_chart_sample_7.gif b/repo_files/images/bar_chart/bar_chart_sample_7.gif deleted file mode 100644 index 46771971da..0000000000 Binary files a/repo_files/images/bar_chart/bar_chart_sample_7.gif and /dev/null differ diff --git a/repo_files/images/bitcoin_public_key.jpg b/repo_files/images/bitcoin_public_key.jpg deleted file mode 100644 index 60be877398..0000000000 Binary files a/repo_files/images/bitcoin_public_key.jpg and /dev/null differ diff --git a/repo_files/images/blank.jpg b/repo_files/images/blank.jpg deleted file mode 100644 index 91291efe10..0000000000 Binary files a/repo_files/images/blank.jpg and /dev/null differ diff --git a/repo_files/images/buy_me_a_coffee.jpeg b/repo_files/images/buy_me_a_coffee.jpeg deleted file mode 100644 index 02e29e4b6f..0000000000 Binary files a/repo_files/images/buy_me_a_coffee.jpeg and /dev/null differ diff --git a/repo_files/images/landing_logo.jpg b/repo_files/images/landing_logo.jpg deleted file mode 100644 index b994fbb838..0000000000 Binary files a/repo_files/images/landing_logo.jpg and /dev/null differ diff --git a/repo_files/images/line_chart/line_chart.jpg b/repo_files/images/line_chart/line_chart.jpg deleted file mode 100644 index 2710ff12a3..0000000000 Binary files a/repo_files/images/line_chart/line_chart.jpg and /dev/null differ diff --git a/repo_files/images/line_chart/line_chart_sample_1.gif b/repo_files/images/line_chart/line_chart_sample_1.gif deleted file mode 100644 index 22b70edc9c..0000000000 Binary files a/repo_files/images/line_chart/line_chart_sample_1.gif and /dev/null differ diff --git a/repo_files/images/line_chart/line_chart_sample_10.gif b/repo_files/images/line_chart/line_chart_sample_10.gif deleted file mode 100644 index eaee8280f3..0000000000 Binary files a/repo_files/images/line_chart/line_chart_sample_10.gif and /dev/null differ diff --git a/repo_files/images/line_chart/line_chart_sample_1_anim.gif b/repo_files/images/line_chart/line_chart_sample_1_anim.gif deleted file mode 100644 index c3407a7543..0000000000 Binary files a/repo_files/images/line_chart/line_chart_sample_1_anim.gif and /dev/null differ diff --git a/repo_files/images/line_chart/line_chart_sample_2.gif b/repo_files/images/line_chart/line_chart_sample_2.gif deleted file mode 100644 index ea931460f9..0000000000 Binary files a/repo_files/images/line_chart/line_chart_sample_2.gif and /dev/null differ diff --git a/repo_files/images/line_chart/line_chart_sample_2_anim.gif b/repo_files/images/line_chart/line_chart_sample_2_anim.gif deleted file mode 100644 index 64dca4addf..0000000000 Binary files a/repo_files/images/line_chart/line_chart_sample_2_anim.gif and /dev/null differ diff --git a/repo_files/images/line_chart/line_chart_sample_3.gif b/repo_files/images/line_chart/line_chart_sample_3.gif deleted file mode 100644 index 5a995855c8..0000000000 Binary files a/repo_files/images/line_chart/line_chart_sample_3.gif and /dev/null differ diff --git a/repo_files/images/line_chart/line_chart_sample_4.png b/repo_files/images/line_chart/line_chart_sample_4.png deleted file mode 100644 index a85c99f039..0000000000 Binary files a/repo_files/images/line_chart/line_chart_sample_4.png and /dev/null differ diff --git a/repo_files/images/line_chart/line_chart_sample_5.png b/repo_files/images/line_chart/line_chart_sample_5.png deleted file mode 100644 index 36a1991bc5..0000000000 Binary files a/repo_files/images/line_chart/line_chart_sample_5.png and /dev/null differ diff --git a/repo_files/images/line_chart/line_chart_sample_6.png b/repo_files/images/line_chart/line_chart_sample_6.png deleted file mode 100644 index 5f771c6805..0000000000 Binary files a/repo_files/images/line_chart/line_chart_sample_6.png and /dev/null differ diff --git a/repo_files/images/line_chart/line_chart_sample_7.png b/repo_files/images/line_chart/line_chart_sample_7.png deleted file mode 100644 index 7818b064d0..0000000000 Binary files a/repo_files/images/line_chart/line_chart_sample_7.png and /dev/null differ diff --git a/repo_files/images/line_chart/line_chart_sample_8.png b/repo_files/images/line_chart/line_chart_sample_8.png deleted file mode 100644 index 0d339d80ed..0000000000 Binary files a/repo_files/images/line_chart/line_chart_sample_8.png and /dev/null differ diff --git a/repo_files/images/line_chart/line_chart_sample_9.gif b/repo_files/images/line_chart/line_chart_sample_9.gif deleted file mode 100644 index fc41b75dd4..0000000000 Binary files a/repo_files/images/line_chart/line_chart_sample_9.gif and /dev/null differ diff --git a/repo_files/images/pie_chart/pie_chart.jpg b/repo_files/images/pie_chart/pie_chart.jpg deleted file mode 100644 index ee1cefac97..0000000000 Binary files a/repo_files/images/pie_chart/pie_chart.jpg and /dev/null differ diff --git a/repo_files/images/pie_chart/pie_chart_sample_1.gif b/repo_files/images/pie_chart/pie_chart_sample_1.gif deleted file mode 100644 index d890cf8f17..0000000000 Binary files a/repo_files/images/pie_chart/pie_chart_sample_1.gif and /dev/null differ diff --git a/repo_files/images/pie_chart/pie_chart_sample_2.gif b/repo_files/images/pie_chart/pie_chart_sample_2.gif deleted file mode 100644 index c98d3c12c2..0000000000 Binary files a/repo_files/images/pie_chart/pie_chart_sample_2.gif and /dev/null differ diff --git a/repo_files/images/pie_chart/pie_chart_sample_3.gif b/repo_files/images/pie_chart/pie_chart_sample_3.gif deleted file mode 100644 index f2747d17ff..0000000000 Binary files a/repo_files/images/pie_chart/pie_chart_sample_3.gif and /dev/null differ diff --git a/repo_files/images/radar_chart/radar_chart_sample_1.jpg b/repo_files/images/radar_chart/radar_chart_sample_1.jpg deleted file mode 100644 index efa442db11..0000000000 Binary files a/repo_files/images/radar_chart/radar_chart_sample_1.jpg and /dev/null differ diff --git a/repo_files/images/scatter_chart/scatter_chart.png b/repo_files/images/scatter_chart/scatter_chart.png deleted file mode 100644 index 4021af818b..0000000000 Binary files a/repo_files/images/scatter_chart/scatter_chart.png and /dev/null differ diff --git a/repo_files/images/scatter_chart/scatter_chart_sample_1.gif b/repo_files/images/scatter_chart/scatter_chart_sample_1.gif deleted file mode 100644 index f4d6729ebd..0000000000 Binary files a/repo_files/images/scatter_chart/scatter_chart_sample_1.gif and /dev/null differ diff --git a/repo_files/images/scatter_chart/scatter_chart_sample_2.gif b/repo_files/images/scatter_chart/scatter_chart_sample_2.gif deleted file mode 100644 index 68144c7f9a..0000000000 Binary files a/repo_files/images/scatter_chart/scatter_chart_sample_2.gif and /dev/null differ diff --git a/scripts/makefile_scripts.sh b/scripts/makefile_scripts.sh deleted file mode 100644 index ec26e3c926..0000000000 --- a/scripts/makefile_scripts.sh +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/bash - -# Opens a link with the default browser of OS (It works cross-platform) -# -## You can call it like `open_link balad.ir` to open balad website on your default browser -open_link () { - case "$(uname -s)" in - Darwin) - # macOS - open "$1" - ;; - - Linux) - # Linux: - xdg-open "$1" - ;; - - CYGWIN*|MINGW32*|MSYS*|MINGW*) - # Windows - start "$1" - ;; - - *) - echo 'Not supported OS' - ;; - esac -} diff --git a/test/chart/bar_chart/bar_chart_data_test.dart b/test/chart/bar_chart/bar_chart_data_test.dart deleted file mode 100644 index 28921d9794..0000000000 --- a/test/chart/bar_chart/bar_chart_data_test.dart +++ /dev/null @@ -1,147 +0,0 @@ -import 'package:fl_chart/fl_chart.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_test/flutter_test.dart'; - -import '../data_pool.dart'; - -void main() { - group('BarChart data equality check', () { - test('BarChartGroupData equality test', () { - expect(barChartGroupData1 == barChartGroupData1Clone, true); - expect(barChartGroupData1 == barChartGroupData2, false); - expect(barChartGroupData1 == barChartGroupData3, false); - expect(barChartGroupData1 == barChartGroupData4, false); - expect(barChartGroupData1 == barChartGroupData5, false); - expect(barChartGroupData1 == barChartGroupData6, false); - expect(barChartGroupData1 == barChartGroupData7, false); - expect(barChartGroupData1 == barChartGroupData8, false); - expect(barChartGroupData1 == barChartGroupData9, false); - }); - - test('BarChartRodData equality test', () { - expect(barChartRodData1 == barChartRodData1Clone, true); - expect(barChartRodData1 == barChartRodData2, false); - expect(barChartRodData1 == barChartRodData3, false); - expect(barChartRodData1 == barChartRodData4, false); - expect(barChartRodData1 == barChartRodData5, false); - expect(barChartRodData1 == barChartRodData6, false); - expect(barChartRodData1 == barChartRodData7, false); - expect(barChartRodData1 == barChartRodData8, false); - }); - - test('BarChartRodStackItem equality test', () { - expect(barChartRodStackItem1 == barChartRodStackItem1Clone, true); - expect( - barChartRodStackItem1 == barChartRodStackItem1Clone.copyWith(fromY: 2), - false, - ); - expect( - barChartRodStackItem1 == barChartRodStackItem1Clone.copyWith(toY: 2), - true, - ); - expect( - barChartRodStackItem1 == barChartRodStackItem1Clone.copyWith(toY: 3), - false, - ); - expect( - barChartRodStackItem1 == - barChartRodStackItem1Clone.copyWith(color: Colors.red), - false, - ); - expect( - barChartRodStackItem1 == - barChartRodStackItem1Clone.copyWith(color: Colors.green), - true, - ); - expect(barChartRodStackItem1 == barChartRodStackItem2, false); - }); - - test('BackgroundBarChartRodData equality test', () { - expect( - backgroundBarChartRodData1 == backgroundBarChartRodData1Clone, - true, - ); - expect(backgroundBarChartRodData1 == backgroundBarChartRodData2, false); - expect(backgroundBarChartRodData2 == backgroundBarChartRodData3, false); - - final changed = BackgroundBarChartRodData( - toY: 21, - color: Colors.blue, - show: false, - ); - - expect(backgroundBarChartRodData1 == changed, false); - - final changed2 = BackgroundBarChartRodData( - toY: 22, - color: Colors.blue, - show: true, - ); - - expect(backgroundBarChartRodData1 == changed2, false); - }); - - test('BarTouchData equality test', () { - expect(barTouchData1 == barTouchData1Clone, true); - expect(barTouchData1 == barTouchData2, false); - expect(barTouchData1 == barTouchData3, false); - expect(barTouchData1 == barTouchData4, false); - expect(barTouchData1 == barTouchData5, false); - expect(barTouchData1 == barTouchData6, false); - expect(barTouchData1 == barTouchData7, false); - expect(barTouchData1 == barTouchData8, false); - expect(barTouchData1 == barTouchData9, false); - expect(barTouchData1 == barTouchData10, false); - }); - - test('BarTouchTooltipData equality test', () { - expect(barTouchTooltipData1 == barTouchTooltipData1Clone, true); - expect(barTouchTooltipData1 == barTouchTooltipData2, false); - expect(barTouchTooltipData1 == barTouchTooltipData3, false); - expect(barTouchTooltipData1 == barTouchTooltipData4, false); - expect(barTouchTooltipData1 == barTouchTooltipData5, false); - expect(barTouchTooltipData1 == barTouchTooltipData6, false); - expect(barTouchTooltipData1 == barTouchTooltipData7, false); - expect(barTouchTooltipData1 == barTouchTooltipData8, false); - expect(barTouchTooltipData1 == barTouchTooltipData9, false); - expect(barTouchTooltipData1 == barTouchTooltipData10, false); - expect(barTouchTooltipData1 == barTouchTooltipData11, false); - }); - - test('BarTooltipItem equality test', () { - expect(barTooltipItem1 == barTooltipItem1Clone, true); - expect(barTooltipItem1 == barTooltipItem2, false); - expect(barTooltipItem1 == barTooltipItem3, false); - expect(barTooltipItem1 == barTooltipItem4, false); - expect(barTooltipItem1 == barTooltipItem5, false); - }); - - test('BarTouchedSpot equality test', () { - expect(barTouchedSpot1 == barTouchedSpot1Clone, true); - expect(barTouchedSpot1 == barTouchedSpot2, false); - expect(barTouchedSpot1 == barTouchedSpot3, false); - expect(barTouchedSpot1 == barTouchedSpot4, false); - expect(barTouchedSpot1 == barTouchedSpot5, false); - expect(barTouchedSpot1 == barTouchedSpot6, false); - expect(barTouchedSpot1 == barTouchedSpot7, false); - }); - - test('BarChartData equality test', () { - expect(barChartData1 == barChartData1Clone, true); - expect(barChartData1 == barChartData2, false); - expect(barChartData1 == barChartData3, false); - expect(barChartData1 == barChartData4, false); - expect(barChartData1 == barChartData5, false); - expect(barChartData1 == barChartData6, false); - expect(barChartData1 == barChartData7, false); - expect(barChartData1 == barChartData8, false); - expect(barChartData1 == barChartData9, false); - expect(barChartData1 == barChartData10, false); - expect(barChartData1 == barChartData11, false); - expect(barChartData1 == barChartData12, false); - expect(barChartData1 == barChartData13, false); - expect(barChartData1 == barChartData14, false); - expect(barChartData1 == barChartData15, false); - }); - }); -} diff --git a/test/chart/bar_chart/bar_chart_helper_test.dart b/test/chart/bar_chart/bar_chart_helper_test.dart deleted file mode 100644 index 6588547546..0000000000 --- a/test/chart/bar_chart/bar_chart_helper_test.dart +++ /dev/null @@ -1,145 +0,0 @@ -import 'package:fl_chart/fl_chart.dart'; -import 'package:fl_chart/src/chart/bar_chart/bar_chart_helper.dart'; -import 'package:flutter_test/flutter_test.dart'; - -import '../data_pool.dart'; - -void main() { - group('Check caching of BarChartHelper.calculateMaxAxisValues', () { - test('Test read from cache1', () { - final barGroups1 = [barChartGroupData1]; - final result1 = BarChartHelper.calculateMaxAxisValues(barGroups1); - - final barGroups2 = [barChartGroupData2]; - final result2 = BarChartHelper.calculateMaxAxisValues(barGroups2); - expect(result1.readFromCache, false); - expect(result2.readFromCache, false); - }); - - test('Test read from cache2', () { - final barGroups = [barChartGroupData1, barChartGroupData2]; - final result1 = BarChartHelper.calculateMaxAxisValues(barGroups); - final result2 = BarChartHelper.calculateMaxAxisValues(barGroups); - expect(result1.readFromCache, false); - expect(result2.readFromCache, true); - }); - - test('Test validity 1', () { - final barGroups = [barChartGroupData1, barChartGroupData2]; - final result = BarChartHelper.calculateMaxAxisValues(barGroups); - expect(result.minY, 0); - expect(result.maxY, 1132); - }); - - test('Test validity 2', () { - final barGroups = [ - barChartGroupData1.copyWith( - barRods: [ - BarChartRodData(toY: -10), - BarChartRodData(toY: -40), - BarChartRodData(toY: 0), - BarChartRodData(toY: 10), - BarChartRodData(toY: 5), - ], - ), - ]; - final result = BarChartHelper.calculateMaxAxisValues(barGroups); - expect(result.minY, -40); - expect(result.maxY, 10); - }); - - test('Test validity 3', () { - final barGroups = [ - barChartGroupData1.copyWith(barRods: []), - ]; - final result = BarChartHelper.calculateMaxAxisValues(barGroups); - expect(result.minY, 0); - expect(result.maxY, 0); - }); - - test('Test validity 4', () { - final barGroups = [ - barChartGroupData1.copyWith( - barRods: [ - BarChartRodData(fromY: 0, toY: -10), - BarChartRodData(fromY: -10, toY: -40), - BarChartRodData(toY: 0), - BarChartRodData(toY: 10), - BarChartRodData(toY: 5), - BarChartRodData(fromY: 10, toY: -50), - BarChartRodData(fromY: 39, toY: -50), - ], - ), - ]; - final result = BarChartHelper.calculateMaxAxisValues(barGroups); - expect(result.minY, -50); - expect(result.maxY, 39); - }); - - test('Test equality', () { - final barGroups = [barChartGroupData1, barChartGroupData2]; - final result1 = BarChartHelper.calculateMaxAxisValues(barGroups); - final result2 = BarChartHelper.calculateMaxAxisValues(barGroups); - expect(result1, result2); - }); - - test('Test equality2', () { - final barGroups = [barChartGroupData1, barChartGroupData2]; - final result1 = BarChartHelper.calculateMaxAxisValues(barGroups) - .copyWith(readFromCache: true); - final result2 = result1.copyWith(readFromCache: false); - expect(result1 != result2, true); - }); - - test('Test BarChartMinMaxAxisValues class', () { - final result1 = BarChartMinMaxAxisValues(0, 10) - .copyWith(minY: 1, maxY: 11, readFromCache: true); - final result2 = BarChartMinMaxAxisValues(1, 11, readFromCache: true); - expect(result1, result2); - }); - - test('Test calculateMaxAxisValues with all positive values', () { - final barGroups = [ - barChartGroupData1.copyWith( - barRods: barChartGroupData1.barRods - .map( - (rod) => rod.copyWith( - fromY: 5, - backDrawRodData: BackgroundBarChartRodData(show: false), - ), - ) - .toList(), - ), - barChartGroupData2.copyWith( - barRods: barChartGroupData2.barRods - .map( - (rod) => rod.copyWith( - fromY: 8, - backDrawRodData: BackgroundBarChartRodData(show: false), - ), - ) - .toList(), - ), - ]; - final result1 = BarChartHelper.calculateMaxAxisValues(barGroups); - expect(result1.minY, 5); - }); - - test('Test calculateMaxAxisValues with all negative values', () { - final barGroups = [ - barChartGroupData1.copyWith( - barRods: barChartGroupData1.barRods - .map((rod) => rod.copyWith(fromY: -5)) - .toList(), - ), - barChartGroupData2.copyWith( - barRods: barChartGroupData2.barRods - .map((rod) => rod.copyWith(fromY: -8)) - .toList(), - ), - ]; - final result1 = BarChartHelper.calculateMaxAxisValues(barGroups); - expect(result1.minY, -8); - }); - }); -} diff --git a/test/chart/bar_chart/bar_chart_painter_test.dart b/test/chart/bar_chart/bar_chart_painter_test.dart deleted file mode 100644 index ef7684efbf..0000000000 --- a/test/chart/bar_chart/bar_chart_painter_test.dart +++ /dev/null @@ -1,2427 +0,0 @@ -import 'package:fl_chart/fl_chart.dart'; -import 'package:fl_chart/src/chart/bar_chart/bar_chart_painter.dart'; -import 'package:fl_chart/src/chart/base/base_chart/base_chart_painter.dart'; -import 'package:fl_chart/src/extensions/bar_chart_data_extension.dart'; -import 'package:fl_chart/src/extensions/path_extension.dart'; -import 'package:fl_chart/src/utils/canvas_wrapper.dart'; -import 'package:fl_chart/src/utils/utils.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_test/flutter_test.dart'; -import 'package:mockito/annotations.dart'; -import 'package:mockito/mockito.dart'; - -import '../../helper_methods.dart'; -import '../data_pool.dart'; -import 'bar_chart_painter_test.mocks.dart'; - -@GenerateMocks([Canvas, CanvasWrapper, BuildContext, Utils]) -void main() { - const tolerance = 0.01; - group('paint()', () { - test('test 1', () { - final utilsMainInstance = Utils(); - const viewSize = Size(400, 400); - final data = BarChartData( - barGroups: [ - BarChartGroupData( - x: 1, - barRods: [ - BarChartRodData(fromY: 1, toY: 10), - BarChartRodData(fromY: 2, toY: 10), - ], - showingTooltipIndicators: [ - 1, - 2, - ], - ), - BarChartGroupData( - x: 2, - barRods: [ - BarChartRodData(fromY: 3, toY: 10), - BarChartRodData(fromY: 4, toY: 10), - ], - ), - ], - ); - - final barChartPainter = BarChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - - final mockUtils = MockUtils(); - Utils.changeInstance(mockUtils); - when(mockUtils.getThemeAwareTextStyle(any, any)) - .thenAnswer((realInvocation) => textStyle1); - when(mockUtils.calculateRotationOffset(any, any)) - .thenAnswer((realInvocation) => Offset.zero); - when(mockUtils.convertRadiusToSigma(any)) - .thenAnswer((realInvocation) => 4.0); - when(mockUtils.getEfficientInterval(any, any)) - .thenAnswer((realInvocation) => 1.0); - when(mockUtils.getBestInitialIntervalValue(any, any, any)) - .thenAnswer((realInvocation) => 1.0); - when(mockUtils.normalizeBorderRadius(any, any)) - .thenAnswer((realInvocation) => BorderRadius.zero); - when(mockUtils.normalizeBorderSide(any, any)).thenAnswer( - (realInvocation) => const BorderSide(color: MockData.color0), - ); - - final mockBuildContext = MockBuildContext(); - final mockCanvasWrapper = MockCanvasWrapper(); - when(mockCanvasWrapper.size).thenAnswer((realInvocation) => viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - barChartPainter.paint( - mockBuildContext, - mockCanvasWrapper, - holder, - ); - Utils.changeInstance(utilsMainInstance); - }); - }); - - group('calculateGroupsX()', () { - test('test 1', () { - const viewSize = Size(200, 100); - - final barGroups = [ - BarChartGroupData( - x: 0, - barRods: [ - BarChartRodData(toY: 10, width: 10), - BarChartRodData(toY: 8, width: 10), - BarChartRodData(toY: 8, width: 10), - ], - barsSpace: 5, - ), - BarChartGroupData( - x: 1, - barRods: [ - BarChartRodData(toY: 10, width: 10), - BarChartRodData(toY: 8, width: 10), - ], - barsSpace: 5, - ), - BarChartGroupData( - x: 2, - barRods: [ - BarChartRodData(toY: 10, width: 10), - BarChartRodData(toY: 8, width: 10), - BarChartRodData(toY: 8, width: 10), - BarChartRodData(toY: 8, width: 10), - ], - barsSpace: 5, - ), - ]; - - final data = BarChartData( - titlesData: const FlTitlesData(show: false), - groupsSpace: 10, - barGroups: barGroups, - ); - - List callWithAlignment(BarChartAlignment alignment) { - return data - .copyWith(alignment: alignment) - .calculateGroupsX(viewSize.width); - } - - expect(callWithAlignment(BarChartAlignment.center), [50, 92.5, 142.5]); - expect(callWithAlignment(BarChartAlignment.start), [20, 62.5, 112.5]); - expect(callWithAlignment(BarChartAlignment.end), [80.0, 122.5, 172.5]); - expect( - callWithAlignment(BarChartAlignment.spaceEvenly), - [40, 92.5, 152.5], - ); - expect( - callWithAlignment(BarChartAlignment.spaceAround), - [ - closeTo(33.33, tolerance), - 92.5, - closeTo(159.16, tolerance), - ], - ); - expect( - callWithAlignment(BarChartAlignment.spaceBetween), - [20, 92.5, 172.5], - ); - }); - }); - - group('calculateGroupAndBarsPosition()', () { - test('test 1', () { - const viewSize = Size(200, 100); - - final barGroups = [ - BarChartGroupData( - x: 0, - barRods: [ - BarChartRodData(toY: 10, width: 10), - BarChartRodData(toY: 8, width: 10), - BarChartRodData(toY: 8, width: 10), - ], - barsSpace: 5, - ), - BarChartGroupData( - x: 1, - barRods: [ - BarChartRodData(toY: 10, width: 10), - BarChartRodData(toY: 8, width: 10), - ], - barsSpace: 5, - ), - ]; - - final data = BarChartData( - titlesData: const FlTitlesData(show: false), - groupsSpace: 10, - alignment: BarChartAlignment.center, - barGroups: barGroups, - ); - - final barChartPainter = BarChartPainter(); - - final groupsX = data.calculateGroupsX(viewSize.width); - late Exception exception; - try { - barChartPainter.calculateGroupAndBarsPosition( - viewSize, - groupsX + [groupsX.last], - barGroups, - ); - } catch (e) { - exception = e as Exception; - } - - expect(true, exception.toString().contains('inconsistent')); - }); - - test('test 2', () { - const viewSize = Size(200, 100); - - final barGroups = [ - BarChartGroupData( - x: 0, - barRods: [ - BarChartRodData(toY: 10, width: 10), - BarChartRodData(toY: 8, width: 10), - BarChartRodData(toY: 8, width: 10), - ], - barsSpace: 5, - ), - BarChartGroupData( - x: 1, - barRods: [ - BarChartRodData(toY: 10, width: 10), - BarChartRodData(toY: 8, width: 10), - ], - barsSpace: 5, - ), - BarChartGroupData( - x: 2, - barRods: [ - BarChartRodData(toY: 10, width: 10), - BarChartRodData(toY: 8, width: 10), - BarChartRodData(toY: 8, width: 10), - BarChartRodData(toY: 8, width: 10), - ], - barsSpace: 5, - ), - ]; - - final data = BarChartData( - titlesData: const FlTitlesData(show: false), - groupsSpace: 10, - barGroups: barGroups, - ); - - final barChartPainter = BarChartPainter(); - - List callWithAlignment(BarChartAlignment alignment) { - final groupsX = data - .copyWith(alignment: alignment) - .calculateGroupsX(viewSize.width); - return barChartPainter.calculateGroupAndBarsPosition( - viewSize, - groupsX, - barGroups, - ); - } - - final centerResult = callWithAlignment(BarChartAlignment.center); - expect(centerResult.map((e) => e.groupX).toList(), [50, 92.5, 142.5]); - expect(centerResult[0].barsX, [35, 50, 65]); - expect(centerResult[1].barsX, [85, 100]); - expect(centerResult[2].barsX, [120, 135, 150, 165]); - - final startResult = callWithAlignment(BarChartAlignment.start); - expect(startResult.map((e) => e.groupX).toList(), [20.0, 62.5, 112.5]); - expect(startResult[0].barsX, [5, 20, 35]); - expect(startResult[1].barsX, [55, 70]); - expect(startResult[2].barsX, [90, 105, 120, 135]); - }); - }); - - group('drawBars()', () { - test('test 1', () { - const viewSize = Size(200, 100); - - final barGroups = [ - BarChartGroupData( - x: 0, - barRods: [ - BarChartRodData( - toY: 10, - width: 10, - color: const Color(0x00000000), - borderRadius: const BorderRadius.all(Radius.circular(0.1)), - ), - BarChartRodData( - toY: 8, - width: 11, - color: const Color(0x11111111), - borderRadius: const BorderRadius.all(Radius.circular(0.2)), - ), - BarChartRodData( - toY: 8, - width: 12, - color: const Color(0x22222222), - borderRadius: const BorderRadius.all(Radius.circular(0.3)), - ), - ], - barsSpace: 5, - ), - BarChartGroupData( - x: 1, - barRods: [ - BarChartRodData( - toY: 10, - width: 10, - borderRadius: const BorderRadius.all(Radius.circular(0.4)), - ), - BarChartRodData(toY: 8, width: 10), - ], - barsSpace: 5, - ), - BarChartGroupData( - x: 2, - barRods: [ - BarChartRodData( - toY: 10, - width: 10, - backDrawRodData: BackgroundBarChartRodData( - toY: 8, - show: true, - ), - ), - BarChartRodData( - toY: 8, - width: 10, - backDrawRodData: BackgroundBarChartRodData( - show: false, - ), - ), - BarChartRodData( - toY: 8, - width: 10, - backDrawRodData: BackgroundBarChartRodData( - toY: -3, - show: true, - ), - ), - BarChartRodData( - toY: 8, - width: 10, - backDrawRodData: BackgroundBarChartRodData( - toY: 0, - ), - ), - ], - barsSpace: 5, - ), - ]; - - final data = BarChartData( - titlesData: const FlTitlesData(show: false), - groupsSpace: 10, - barGroups: barGroups, - alignment: BarChartAlignment.center, - ); - - final barChartPainter = BarChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - - final mockCanvasWrapper = MockCanvasWrapper(); - when(mockCanvasWrapper.size).thenAnswer((realInvocation) => viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - - final groupsX = data.calculateGroupsX(viewSize.width); - final barGroupsPosition = barChartPainter.calculateGroupAndBarsPosition( - viewSize, - groupsX, - barGroups, - ); - - final results = >[]; - when(mockCanvasWrapper.drawRRect(captureAny, captureAny)) - .thenAnswer((inv) { - final rRect = inv.positionalArguments[0] as RRect; - final paint = inv.positionalArguments[1] as Paint; - results.add({ - 'rRect': RRect.fromLTRBAndCorners( - rRect.left, - rRect.top, - rRect.right, - rRect.bottom, - topLeft: rRect.tlRadius, - topRight: rRect.trRadius, - bottomRight: rRect.brRadius, - bottomLeft: rRect.blRadius, - ), - 'paint_color': paint.color, - }); - }); - - barChartPainter.drawBars(mockCanvasWrapper, barGroupsPosition, holder); - expect(results.length, 11); - - expect( - HelperMethods.equalsRRects( - results[0]['rRect'] as RRect, - RRect.fromLTRBR( - 28.5, - 0, - 38.5, - 76.923, - const Radius.circular(0.1), - ), - ), - true, - ); - expect(results[0]['paint_color'] as Color, const Color(0x00000000)); - - expect( - HelperMethods.equalsRRects( - results[1]['rRect'] as RRect, - RRect.fromLTRBR( - 43.5, - 15.384, - 54.5, - 76.923, - const Radius.circular(0.2), - ), - ), - true, - ); - expect(results[1]['paint_color'] as Color, const Color(0x11111111)); - - expect( - HelperMethods.equalsRRects( - results[2]['rRect'] as RRect, - RRect.fromLTRBR( - 59.5, - 15.384, - 71.5, - 76.923, - const Radius.circular(0.3), - ), - ), - true, - ); - expect(results[2]['paint_color'] as Color, const Color(0x22222222)); - - expect( - HelperMethods.equalsRRects( - results[3]['rRect'] as RRect, - RRect.fromLTRBR( - 81.5, - 0, - 91.5, - 76.923, - const Radius.circular(0.4), - ), - ), - true, - ); - expect( - HelperMethods.equalsRRects( - results[4]['rRect'] as RRect, - RRect.fromLTRBR( - 96.5, - 15.384, - 106.5, - 76.923, - const Radius.circular(5), - ), - ), - true, - ); - - expect( - HelperMethods.equalsRRects( - results[5]['rRect'] as RRect, - RRect.fromLTRBR( - 116.5, - 15.384, - 126.5, - 76.923, - const Radius.circular(5), - ), - ), - true, - ); - - expect( - HelperMethods.equalsRRects( - results[6]['rRect'] as RRect, - RRect.fromLTRBR( - 116.5, - 0, - 126.5, - 76.923, - const Radius.circular(5), - ), - ), - true, - ); - expect( - HelperMethods.equalsRRects( - results[7]['rRect'] as RRect, - RRect.fromLTRBR( - 131.5, - 15.384, - 141.5, - 76.923, - const Radius.circular(5), - ), - ), - true, - ); - - expect( - HelperMethods.equalsRRects( - results[8]['rRect'] as RRect, - RRect.fromLTRBR( - 146.5, - 76.923, - 156.5, - 100, - const Radius.circular(5), - ), - ), - true, - ); - - expect( - HelperMethods.equalsRRects( - results[9]['rRect'] as RRect, - RRect.fromLTRBR( - 146.5, - 15.384, - 156.5, - 76.923, - const Radius.circular(5), - ), - ), - true, - ); - expect( - HelperMethods.equalsRRects( - results[10]['rRect'] as RRect, - RRect.fromLTRBR( - 161.5, - 15.384, - 171.5, - 76.923, - const Radius.circular(5), - ), - ), - true, - ); - }); - test('test 2', () { - const viewSize = Size(200, 100); - - final barGroups = [ - BarChartGroupData( - x: 0, - groupVertically: true, - barRods: [ - BarChartRodData( - fromY: -9, - toY: -10, - width: 10, - color: const Color(0x00000000), - borderRadius: const BorderRadius.all(Radius.circular(0.1)), - ), - BarChartRodData( - fromY: -11, - toY: -20, - width: 11, - color: const Color(0x11111111), - borderRadius: const BorderRadius.all(Radius.circular(0.2)), - ), - BarChartRodData( - fromY: -21, - toY: -30, - width: 12, - color: const Color(0x22222222), - borderRadius: const BorderRadius.all(Radius.circular(0.3)), - ), - ], - barsSpace: 5, - ), - BarChartGroupData( - x: 1, - groupVertically: true, - barRods: [ - BarChartRodData( - fromY: 9, - toY: 10, - width: 10, - color: const Color(0x00000000), - borderRadius: const BorderRadius.all(Radius.circular(0.1)), - ), - BarChartRodData( - fromY: 11, - toY: 20, - width: 11, - color: const Color(0x11111111), - borderRadius: const BorderRadius.all(Radius.circular(0.2)), - ), - BarChartRodData( - fromY: 21, - toY: 30, - width: 12, - color: const Color(0x22222222), - borderRadius: const BorderRadius.all(Radius.circular(0.3)), - ), - ], - barsSpace: 5, - ), - ]; - - final data = BarChartData( - titlesData: const FlTitlesData(show: false), - groupsSpace: 10, - barGroups: barGroups, - alignment: BarChartAlignment.center, - ); - - final barChartPainter = BarChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - - final mockCanvasWrapper = MockCanvasWrapper(); - when(mockCanvasWrapper.size).thenAnswer((realInvocation) => viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - - final groupsX = data.calculateGroupsX(viewSize.width); - final barGroupsPosition = barChartPainter.calculateGroupAndBarsPosition( - viewSize, - groupsX, - barGroups, - ); - - final results = >[]; - when(mockCanvasWrapper.drawRRect(captureAny, captureAny)) - .thenAnswer((inv) { - final rrect = inv.positionalArguments[0] as RRect; - final paint = inv.positionalArguments[1] as Paint; - results.add({ - 'rrect': RRect.fromLTRBAndCorners( - rrect.left, - rrect.top, - rrect.right, - rrect.bottom, - topLeft: rrect.tlRadius, - topRight: rrect.trRadius, - bottomRight: rrect.brRadius, - bottomLeft: rrect.blRadius, - ), - 'paint_color': paint.color, - }); - }); - - barChartPainter.drawBars(mockCanvasWrapper, barGroupsPosition, holder); - expect(results.length, 6); - - expect( - HelperMethods.equalsRRects( - results[0]['rrect'] as RRect, - RRect.fromLTRBR( - 84, - 65, - 94, - 66.666, - const Radius.circular(0.1), - ), - ), - true, - ); - expect(results[0]['paint_color'] as Color, const Color(0x00000000)); - - expect( - HelperMethods.equalsRRects( - results[1]['rrect'] as RRect, - RRect.fromLTRBR( - 83.5, - 68.333, - 94.5, - 83.333, - const Radius.circular(0.2), - ), - ), - true, - ); - expect(results[1]['paint_color'] as Color, const Color(0x11111111)); - - expect( - HelperMethods.equalsRRects( - results[2]['rrect'] as RRect, - RRect.fromLTRBR( - 83, - 85, - 95, - 100, - const Radius.circular(0.3), - ), - ), - true, - ); - expect(results[2]['paint_color'] as Color, const Color(0x22222222)); - - expect( - HelperMethods.equalsRRects( - results[3]['rrect'] as RRect, - RRect.fromLTRBR( - 106, - 33.333, - 116, - 35, - const Radius.circular(0.1), - ), - ), - true, - ); - expect( - HelperMethods.equalsRRects( - results[4]['rrect'] as RRect, - RRect.fromLTRBR( - 105.5, - 16.666, - 116.5, - 31.666, - const Radius.circular(0.2), - ), - ), - true, - ); - - expect( - HelperMethods.equalsRRects( - results[5]['rrect'] as RRect, - RRect.fromLTRBR( - 105, - 0, - 117, - 15, - const Radius.circular(0.3), - ), - ), - true, - ); - }); - - test('test 3', () { - const viewSize = Size(200, 100); - - final barGroups = [ - BarChartGroupData( - x: 0, - barRods: [ - BarChartRodData( - fromY: -10, - toY: 10, - color: const Color(0x00000000), - rodStackItems: [ - BarChartRodStackItem(-5, -10, const Color(0x11111111)), - BarChartRodStackItem(0, -5, const Color(0x22222222)), - BarChartRodStackItem(0, 5, const Color(0x33333333)), - BarChartRodStackItem(5, 10, const Color(0x44444444)), - ], - ), - ], - ), - ]; - - final data = BarChartData(barGroups: barGroups); - - final barChartPainter = BarChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - - final mockCanvasWrapper = MockCanvasWrapper(); - when(mockCanvasWrapper.size).thenAnswer((realInvocation) => viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - - final groupsX = data.calculateGroupsX(viewSize.width); - final barGroupsPosition = barChartPainter.calculateGroupAndBarsPosition( - viewSize, - groupsX, - barGroups, - ); - - final results = >[]; - when(mockCanvasWrapper.drawRRect(captureAny, captureAny)) - .thenAnswer((inv) { - final paint = inv.positionalArguments[1] as Paint; - results.add({ - 'paint_color': paint.color, - }); - }); - - barChartPainter.drawBars(mockCanvasWrapper, barGroupsPosition, holder); - expect(results.length, 5); - expect(results[1]['paint_color'], const Color(0x11111111)); - expect(results[2]['paint_color'], const Color(0x22222222)); - expect(results[3]['paint_color'], const Color(0x33333333)); - expect(results[4]['paint_color'], const Color(0x44444444)); - }); - - test('test 4', () { - const viewSize = Size(200, 100); - - final barGroups = [ - BarChartGroupData( - x: 0, - barRods: [ - BarChartRodData( - fromY: 0, - toY: 5, - borderRadius: BorderRadius.zero, - color: Colors.white, - ), - ], - ), - BarChartGroupData( - x: 1, - barRods: [ - BarChartRodData( - fromY: 0, - toY: 10, - borderRadius: BorderRadius.zero, - color: Colors.white, - ), - ], - ), - BarChartGroupData( - x: 3, - barRods: [ - BarChartRodData( - fromY: 0, - toY: 15, - borderDashArray: [4, 4], - borderSide: const BorderSide( - color: Colors.white, - width: 2, - ), - borderRadius: BorderRadius.zero, - color: Colors.transparent, - ), - ], - ), - ]; - - final data = BarChartData(barGroups: barGroups); - - final barChartPainter = BarChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - - final mockCanvasWrapper = MockCanvasWrapper(); - when(mockCanvasWrapper.size).thenAnswer((realInvocation) => viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - - final groupsX = data.calculateGroupsX(viewSize.width); - final barGroupsPosition = barChartPainter.calculateGroupAndBarsPosition( - viewSize, - groupsX, - barGroups, - ); - - final rodDataResults = >[]; - final borderResult = >[]; - - when(mockCanvasWrapper.drawRRect(captureAny, captureAny)) - .thenAnswer((inv) { - final rrect = inv.positionalArguments[0] as RRect; - final paint = inv.positionalArguments[1] as Paint; - rodDataResults.add({ - 'rrect': rrect, - 'paint_color': paint.color, - }); - }); - - when(mockCanvasWrapper.drawPath(captureAny, captureAny)) - .thenAnswer((inv) { - final path = inv.positionalArguments[0] as Path; - final paint = inv.positionalArguments[1] as Paint; - borderResult.add({ - 'path': path, - 'paint_color': paint.color, - }); - }); - - barChartPainter.drawBars(mockCanvasWrapper, barGroupsPosition, holder); - expect(rodDataResults.length, 3); - expect(rodDataResults[0]['paint_color'], Colors.white); - expect(rodDataResults[1]['paint_color'], Colors.white); - expect(rodDataResults[2]['paint_color'], Colors.transparent); - - expect(borderResult.length, 1); - expect(borderResult[0]['paint_color'], Colors.white); - final rrect = rodDataResults[2]['rrect'] as RRect; - final path = Path()..addRRect(rrect); - final expectedPath = path.toDashedPath([4, 4]); - final currentPath = borderResult[0]['path'] as Path; - - expect(HelperMethods.equalsPaths(expectedPath, currentPath), true); - }); - - test('test 5', () { - const viewSize = Size(200, 100); - - final barGroups = [ - BarChartGroupData( - x: 0, - barRods: [ - BarChartRodData( - fromY: 0, - toY: 5, - borderRadius: BorderRadius.zero, - color: Colors.white, - ), - ], - ), - BarChartGroupData( - x: 1, - barRods: [ - BarChartRodData( - fromY: 0, - toY: 10, - borderRadius: BorderRadius.zero, - color: Colors.white, - ), - ], - ), - BarChartGroupData( - x: 3, - barRods: [ - BarChartRodData( - fromY: 0, - toY: 15, - borderSide: const BorderSide( - color: Colors.white, - width: 2, - ), - borderRadius: BorderRadius.zero, - color: Colors.transparent, - ), - ], - ), - ]; - - final data = BarChartData(barGroups: barGroups); - - final barChartPainter = BarChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - - final mockCanvasWrapper = MockCanvasWrapper(); - when(mockCanvasWrapper.size).thenAnswer((realInvocation) => viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - - final groupsX = data.calculateGroupsX(viewSize.width); - final barGroupsPosition = barChartPainter.calculateGroupAndBarsPosition( - viewSize, - groupsX, - barGroups, - ); - - final rodDataResults = >[]; - final borderResult = >[]; - - when(mockCanvasWrapper.drawRRect(captureAny, captureAny)) - .thenAnswer((inv) { - final rrect = inv.positionalArguments[0] as RRect; - final paint = inv.positionalArguments[1] as Paint; - rodDataResults.add({ - 'rrect': rrect, - 'paint_color': paint.color, - }); - }); - - when(mockCanvasWrapper.drawPath(captureAny, captureAny)) - .thenAnswer((inv) { - final path = inv.positionalArguments[0] as Path; - final paint = inv.positionalArguments[1] as Paint; - borderResult.add({ - 'path': path, - 'paint_color': paint.color, - }); - }); - - barChartPainter.drawBars(mockCanvasWrapper, barGroupsPosition, holder); - expect(rodDataResults.length, 3); - expect(rodDataResults[0]['paint_color'], Colors.white); - expect(rodDataResults[1]['paint_color'], Colors.white); - expect(rodDataResults[2]['paint_color'], Colors.transparent); - - expect(borderResult.length, 1); - expect(borderResult[0]['paint_color'], Colors.white); - final rrect = rodDataResults[2]['rrect'] as RRect; - final path = Path()..addRRect(rrect); - final expectedPath = path.toDashedPath(null); - final currentPath = borderResult[0]['path'] as Path; - - expect(HelperMethods.equalsPaths(expectedPath, currentPath), true); - }); - }); - - group('drawTouchTooltip()', () { - test('test 1', () { - final mockUtils = MockUtils(); - when(mockUtils.getThemeAwareTextStyle(any, any)).thenReturn(textStyle1); - when(mockUtils.getEfficientInterval(any, any)).thenReturn(11); - when(mockUtils.normalizeBorderRadius(any, any)) - .thenReturn(BorderRadius.zero); - when(mockUtils.normalizeBorderSide(any, any)).thenReturn(BorderSide.none); - when(mockUtils.calculateRotationOffset(any, any)).thenReturn(Offset.zero); - when(mockUtils.getBestInitialIntervalValue(any, any, any)).thenReturn(0); - when(mockUtils.formatNumber(any, any, captureAny)).thenAnswer((inv) { - final value = inv.positionalArguments[0] as double; - return '${value.toInt()}'; - }); - Utils.changeInstance(mockUtils); - - const viewSize = Size(200, 100); - - final barGroups = [ - BarChartGroupData( - x: 0, - barRods: [ - BarChartRodData( - toY: 10, - width: 10, - color: const Color(0x00000000), - borderRadius: const BorderRadius.all(Radius.circular(0.1)), - ), - BarChartRodData( - toY: 8, - width: 11, - color: const Color(0x11111111), - borderRadius: const BorderRadius.all(Radius.circular(0.2)), - ), - BarChartRodData( - toY: 8, - width: 12, - color: const Color(0x22222222), - borderRadius: const BorderRadius.all(Radius.circular(0.3)), - ), - ], - barsSpace: 5, - ), - BarChartGroupData( - x: 1, - barRods: [ - BarChartRodData( - toY: 10, - width: 10, - borderRadius: const BorderRadius.all(Radius.circular(0.4)), - ), - BarChartRodData(toY: 8, width: 10), - ], - barsSpace: 5, - ), - BarChartGroupData( - x: 2, - barRods: [ - BarChartRodData(toY: 10, width: 10), - BarChartRodData(toY: 8, width: 10), - BarChartRodData(toY: 8, width: 10), - BarChartRodData(toY: 8, width: 10), - ], - barsSpace: 5, - ), - ]; - - final tooltipData = BarTouchTooltipData( - tooltipRoundedRadius: 8, - tooltipBgColor: const Color(0xf33f33f3), - maxContentWidth: 80, - rotateAngle: 12, - tooltipBorder: const BorderSide(color: Color(0xf33f33f3), width: 2), - getTooltipItem: ( - group, - groupIndex, - rod, - rodIndex, - ) { - return BarTooltipItem( - 'helllo1', - textStyle1, - textAlign: TextAlign.right, - textDirection: TextDirection.rtl, - children: [ - const TextSpan(text: 'helllo2'), - const TextSpan(text: 'helllo3'), - ], - ); - }, - ); - - final data = BarChartData( - groupsSpace: 10, - barGroups: barGroups, - barTouchData: BarTouchData( - touchTooltipData: tooltipData, - ), - alignment: BarChartAlignment.center, - ); - - final barChartPainter = BarChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - - final mockCanvasWrapper = MockCanvasWrapper(); - when(mockCanvasWrapper.size).thenAnswer((realInvocation) => viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - - final mockBuildContext = MockBuildContext(); - - final groupsX = data.calculateGroupsX(viewSize.width); - final barGroupsPosition = barChartPainter.calculateGroupAndBarsPosition( - viewSize, - groupsX, - barGroups, - ); - - final angles = []; - when( - mockCanvasWrapper.drawRotated( - size: anyNamed('size'), - rotationOffset: anyNamed('rotationOffset'), - drawOffset: anyNamed('drawOffset'), - angle: anyNamed('angle'), - drawCallback: anyNamed('drawCallback'), - ), - ).thenAnswer((inv) { - final callback = - inv.namedArguments[const Symbol('drawCallback')] as DrawCallback; - callback(); - angles.add(inv.namedArguments[const Symbol('angle')] as double); - }); - - barChartPainter.drawTouchTooltip( - mockBuildContext, - mockCanvasWrapper, - barGroupsPosition, - tooltipData, - barGroups[0], - 0, - barGroups[0].barRods[0], - 0, - holder, - ); - final result1 = - verify(mockCanvasWrapper.drawRRect(captureAny, captureAny)) - ..called(2); - final rrect = result1.captured[0] as RRect; - expect(rrect.blRadius, const Radius.circular(8)); - expect(rrect.width, 112); - expect(rrect.height, 90); - expect(rrect.left, -22.5); - expect(rrect.top, -106); - - final bgTooltipPaint = result1.captured[1] as Paint; - expect(bgTooltipPaint.color, const Color(0xf33f33f3)); - expect(bgTooltipPaint.style, PaintingStyle.fill); - - final rRectBorder = result1.captured[2] as RRect; - final paintBorder = result1.captured[3] as Paint; - - expect(rRectBorder.blRadius, const Radius.circular(8)); - expect(rRectBorder.width, 112); - expect(rRectBorder.height, 90); - expect(rRectBorder.left, -22.5); - expect(rRectBorder.top, -106); - expect(paintBorder.color, const Color(0xf33f33f3)); - expect(paintBorder.strokeWidth, 2); - expect(paintBorder.style, PaintingStyle.stroke); - - expect(angles.length, 1); - expect(angles[0], 12); - - final result2 = verify(mockCanvasWrapper.drawText(captureAny, captureAny)) - ..called(1); - final textPainter = result2.captured[0] as TextPainter; - expect((textPainter.text as TextSpan?)!.text, 'helllo1'); - expect((textPainter.text as TextSpan?)!.style, textStyle1); - expect(textPainter.textAlign, TextAlign.right); - expect(textPainter.textDirection, TextDirection.rtl); - expect( - (textPainter.text as TextSpan?)!.children![0], - const TextSpan(text: 'helllo2'), - ); - expect( - (textPainter.text as TextSpan?)!.children![1], - const TextSpan(text: 'helllo3'), - ); - - final drawOffset = result2.captured[1] as Offset; - expect(drawOffset, const Offset(-6.5, -98)); - }); - - test('test 2', () { - final mockUtils = MockUtils(); - when(mockUtils.getThemeAwareTextStyle(any, any)).thenReturn(textStyle1); - when(mockUtils.getEfficientInterval(any, any)).thenReturn(11); - when(mockUtils.normalizeBorderRadius(any, any)) - .thenReturn(BorderRadius.zero); - when(mockUtils.normalizeBorderSide(any, any)).thenReturn(BorderSide.none); - when(mockUtils.calculateRotationOffset(any, any)).thenReturn(Offset.zero); - when(mockUtils.getBestInitialIntervalValue(any, any, any)).thenReturn(0); - when(mockUtils.formatNumber(any, any, captureAny)).thenAnswer((inv) { - final value = inv.positionalArguments[0] as double; - return '${value.toInt()}'; - }); - Utils.changeInstance(mockUtils); - - const viewSize = Size(200, 100); - - final barGroups = [ - BarChartGroupData( - x: 0, - barRods: [ - BarChartRodData( - toY: 10, - width: 10, - color: const Color(0x00000000), - borderRadius: const BorderRadius.all(Radius.circular(0.1)), - ), - BarChartRodData( - toY: 8, - width: 11, - color: const Color(0x11111111), - borderRadius: const BorderRadius.all(Radius.circular(0.2)), - ), - BarChartRodData( - toY: 8, - width: 12, - color: const Color(0x22222222), - borderRadius: const BorderRadius.all(Radius.circular(0.3)), - ), - ], - barsSpace: 5, - ), - BarChartGroupData( - x: 1, - barRods: [ - BarChartRodData( - toY: 10, - width: 10, - borderRadius: const BorderRadius.all(Radius.circular(0.4)), - ), - BarChartRodData(toY: 8, width: 10), - ], - barsSpace: 5, - ), - BarChartGroupData( - x: 2, - barRods: [ - BarChartRodData(toY: 10, width: 10), - BarChartRodData(toY: 8, width: 10), - BarChartRodData(toY: 8, width: 10), - BarChartRodData(toY: 8, width: 10), - ], - barsSpace: 5, - ), - ]; - - final tooltipData = BarTouchTooltipData( - tooltipRoundedRadius: 8, - tooltipBgColor: const Color(0xf33f33f3), - maxContentWidth: 80, - rotateAngle: 12, - direction: TooltipDirection.bottom, - tooltipBorder: const BorderSide(color: Color(0xf33f33f3), width: 2), - tooltipHorizontalAlignment: FLHorizontalAlignment.left, - tooltipHorizontalOffset: -1.5, - getTooltipItem: ( - group, - groupIndex, - rod, - rodIndex, - ) { - return BarTooltipItem( - 'helllo1', - textStyle1, - textAlign: TextAlign.right, - textDirection: TextDirection.rtl, - children: [ - const TextSpan(text: 'helllo2'), - const TextSpan(text: 'helllo3'), - ], - ); - }, - ); - - final data = BarChartData( - groupsSpace: 10, - barGroups: barGroups, - barTouchData: BarTouchData( - touchTooltipData: tooltipData, - ), - alignment: BarChartAlignment.center, - ); - - final barChartPainter = BarChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - - final mockCanvasWrapper = MockCanvasWrapper(); - when(mockCanvasWrapper.size).thenAnswer((realInvocation) => viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - - final mockBuildContext = MockBuildContext(); - - final groupsX = data.calculateGroupsX(viewSize.width); - final barGroupsPosition = barChartPainter.calculateGroupAndBarsPosition( - viewSize, - groupsX, - barGroups, - ); - - final angles = []; - when( - mockCanvasWrapper.drawRotated( - size: anyNamed('size'), - rotationOffset: anyNamed('rotationOffset'), - drawOffset: anyNamed('drawOffset'), - angle: anyNamed('angle'), - drawCallback: anyNamed('drawCallback'), - ), - ).thenAnswer((inv) { - final callback = - inv.namedArguments[const Symbol('drawCallback')] as DrawCallback; - callback(); - angles.add(inv.namedArguments[const Symbol('angle')] as double); - }); - - barChartPainter.drawTouchTooltip( - mockBuildContext, - mockCanvasWrapper, - barGroupsPosition, - tooltipData, - barGroups[0], - 0, - barGroups[0].barRods[0], - 0, - holder, - ); - final result1 = - verify(mockCanvasWrapper.drawRRect(captureAny, captureAny)) - ..called(2); - final rrect = result1.captured[0] as RRect; - expect(rrect.blRadius, const Radius.circular(8)); - expect(rrect.width, 112); - expect(rrect.height, 90); - expect(rrect.left, -80); - expect(rrect.top, 116); - - final bgTooltipPaint = result1.captured[1] as Paint; - expect(bgTooltipPaint.color, const Color(0xf33f33f3)); - expect(bgTooltipPaint.style, PaintingStyle.fill); - - final rRectBorder = result1.captured[2] as RRect; - final paintBorder = result1.captured[3] as Paint; - - expect(rRectBorder.blRadius, const Radius.circular(8)); - expect(rRectBorder.width, 112); - expect(rRectBorder.height, 90); - expect(rRectBorder.left, -80); - expect(rRectBorder.top, 116); - expect(paintBorder.color, const Color(0xf33f33f3)); - expect(paintBorder.strokeWidth, 2); - expect(paintBorder.style, PaintingStyle.stroke); - - expect(angles.length, 1); - expect(angles[0], 12); - - final result2 = verify(mockCanvasWrapper.drawText(captureAny, captureAny)) - ..called(1); - final textPainter = result2.captured[0] as TextPainter; - expect((textPainter.text as TextSpan?)!.text, 'helllo1'); - expect((textPainter.text as TextSpan?)!.style, textStyle1); - expect(textPainter.textAlign, TextAlign.right); - expect(textPainter.textDirection, TextDirection.rtl); - expect( - (textPainter.text as TextSpan?)!.children![0], - const TextSpan(text: 'helllo2'), - ); - expect( - (textPainter.text as TextSpan?)!.children![1], - const TextSpan(text: 'helllo3'), - ); - - final drawOffset = result2.captured[1] as Offset; - expect(drawOffset, const Offset(-64, 124)); - }); - - test('test 3', () { - final mockUtils = MockUtils(); - when(mockUtils.getThemeAwareTextStyle(any, any)).thenReturn(textStyle1); - when(mockUtils.getEfficientInterval(any, any)).thenReturn(11); - when(mockUtils.normalizeBorderRadius(any, any)) - .thenReturn(BorderRadius.zero); - when(mockUtils.normalizeBorderSide(any, any)).thenReturn(BorderSide.none); - when(mockUtils.calculateRotationOffset(any, any)).thenReturn(Offset.zero); - when(mockUtils.getBestInitialIntervalValue(any, any, any)).thenReturn(0); - when(mockUtils.formatNumber(any, any, captureAny)).thenAnswer((inv) { - final value = inv.positionalArguments[0] as double; - return '${value.toInt()}'; - }); - Utils.changeInstance(mockUtils); - - const viewSize = Size(200, 100); - - final barGroups = [ - BarChartGroupData( - x: 0, - barRods: [ - BarChartRodData( - toY: 10, - width: 10, - color: const Color(0x00000000), - borderRadius: const BorderRadius.all(Radius.circular(0.1)), - ), - BarChartRodData( - toY: -10, - width: 10, - color: const Color(0x11111111), - borderRadius: const BorderRadius.all(Radius.circular(0.2)), - ), - ], - ), - ]; - - final tooltipData = BarTouchTooltipData( - tooltipRoundedRadius: 8, - tooltipBgColor: const Color(0xf33f33f3), - maxContentWidth: 8000, - rotateAngle: 12, - fitInsideHorizontally: true, - fitInsideVertically: true, - direction: TooltipDirection.top, - tooltipHorizontalAlignment: FLHorizontalAlignment.right, - tooltipBorder: const BorderSide(color: Color(0xf33f33f3), width: 2), - getTooltipItem: ( - group, - groupIndex, - rod, - rodIndex, - ) { - return BarTooltipItem( - 'helllo1asdfasdfasdfasdfasdfasdfhelllo1asdfasdfasdfasd' - 'fasdfasdfhelllo1asdfasdfasdfasdfasdfasdfhelllo1asdf' - 'asdfasdfasdfasdfasdfhelllo1asdfasdfasdfasdfasdfasdfh' - 'elllo1asdfasdfasdfasdfasdfasdf', - textStyle1, - textAlign: TextAlign.right, - textDirection: TextDirection.rtl, - children: List.generate( - 500, - (index) => const TextSpan(text: '\nhelllo3'), - ), - ); - }, - ); - final data = BarChartData( - groupsSpace: 10, - barGroups: barGroups, - barTouchData: BarTouchData( - touchTooltipData: tooltipData, - ), - alignment: BarChartAlignment.center, - ); - - final barChartPainter = BarChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - - final mockCanvasWrapper = MockCanvasWrapper(); - when(mockCanvasWrapper.size).thenAnswer((realInvocation) => viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - - final mockBuildContext = MockBuildContext(); - - final groupsX = data.calculateGroupsX(viewSize.width); - final barGroupsPosition = barChartPainter.calculateGroupAndBarsPosition( - viewSize, - groupsX, - barGroups, - ); - - final angles = []; - when( - mockCanvasWrapper.drawRotated( - size: anyNamed('size'), - rotationOffset: anyNamed('rotationOffset'), - drawOffset: anyNamed('drawOffset'), - angle: anyNamed('angle'), - drawCallback: anyNamed('drawCallback'), - ), - ).thenAnswer((inv) { - final callback = - inv.namedArguments[const Symbol('drawCallback')] as DrawCallback; - callback(); - angles.add(inv.namedArguments[const Symbol('angle')] as double); - }); - - barChartPainter.drawTouchTooltip( - mockBuildContext, - mockCanvasWrapper, - barGroupsPosition, - tooltipData, - barGroups[0], - 0, - barGroups[0].barRods[1], - 1, - holder, - ); - final result1 = - verify(mockCanvasWrapper.drawRRect(captureAny, captureAny)) - ..called(2); - final rrect = result1.captured[0] as RRect; - expect(rrect.blRadius, const Radius.circular(8)); - expect(rrect.width, 2636); - expect(rrect.height, 7034.0); - expect(rrect.left, -2436); - expect(rrect.top, -6934.0); - - final bgTooltipPaint = result1.captured[1] as Paint; - expect(bgTooltipPaint.color, const Color(0xf33f33f3)); - expect(bgTooltipPaint.style, PaintingStyle.fill); - - final rRectBorder = result1.captured[2] as RRect; - final paintBorder = result1.captured[3] as Paint; - - expect(rRectBorder.blRadius, const Radius.circular(8)); - expect(rRectBorder.width, 2636); - expect(rRectBorder.height, 7034.0); - expect(rRectBorder.left, -2436); - expect(rRectBorder.top, -6934.0); - expect(paintBorder.color, const Color(0xf33f33f3)); - expect(paintBorder.strokeWidth, 2); - expect(paintBorder.style, PaintingStyle.stroke); - - expect(angles.length, 1); - expect(angles[0], 12); - - final result2 = verify(mockCanvasWrapper.drawText(captureAny, captureAny)) - ..called(1); - - final drawOffset = result2.captured[1] as Offset; - expect(drawOffset, const Offset(-2420, -6926)); - }); - }); - - group('drawStackItemBorderStroke()', () { - test('test 1', () { - const viewSize = Size(200, 100); - - final rodStackItems = [ - BarChartRodStackItem( - 0, - 3, - const Color(0x11111110), - const BorderSide(color: Color(0x11111111)), - ), - BarChartRodStackItem( - 3, - 8, - const Color(0x22222220), - const BorderSide(color: Color(0x22222221), width: 2), - ), - BarChartRodStackItem( - 8, - 10, - const Color(0x33333330), - const BorderSide(color: Color(0x33333331), width: 3), - ), - ]; - - final barRod = BarChartRodData( - toY: 10, - width: 10, - color: const Color(0x00000000), - borderRadius: const BorderRadius.all(Radius.circular(0.1)), - rodStackItems: rodStackItems, - ); - - final barGroups = [ - BarChartGroupData(x: 0, barRods: [barRod], barsSpace: 5), - ]; - - final data = BarChartData( - groupsSpace: 10, - barGroups: barGroups, - barTouchData: BarTouchData(), - ); - - final barChartPainter = BarChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - - final mockCanvasWrapper = MockCanvasWrapper(); - when(mockCanvasWrapper.size).thenAnswer((realInvocation) => viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - - final results = >[]; - when( - mockCanvasWrapper.drawRRect( - captureAny, - captureAny, - ), - ).thenAnswer((inv) { - final rrect = inv.positionalArguments[0] as RRect; - final paint = inv.positionalArguments[1] as Paint; - results.add({ - 'rRect': rrect, - 'paint.color': paint.color, - 'paint.strokeWidth': paint.strokeWidth, - }); - }); - - barChartPainter - ..drawStackItemBorderStroke( - mockCanvasWrapper, - rodStackItems[0], - 0, - 3, - barRod.width, - RRect.fromLTRBAndCorners( - 0, - 0, - 10, - 100, - bottomRight: const Radius.circular(12), - ), - viewSize, - holder, - ) - ..drawStackItemBorderStroke( - mockCanvasWrapper, - rodStackItems[1], - 1, - 3, - barRod.width, - RRect.fromLTRBAndCorners( - 0, - 0, - 10, - 100, - bottomRight: const Radius.circular(12), - ), - viewSize, - holder, - ) - ..drawStackItemBorderStroke( - mockCanvasWrapper, - rodStackItems[2], - 2, - 3, - barRod.width, - RRect.fromLTRBAndCorners( - 0, - 0, - 10, - 100, - bottomRight: const Radius.circular(12), - ), - viewSize, - holder, - ); - - expect(results.length, 3); - - expect( - results[0]['rRect'], - RRect.fromLTRBAndCorners( - 0, - 70, - 10, - 100, - bottomRight: const Radius.circular(12), - ), - ); - expect(results[0]['paint.color'], const Color(0x11111111)); - expect(results[0]['paint.strokeWidth'], 1.0); - - expect( - results[1]['rRect'], - RRect.fromLTRBAndCorners( - 0, - 20, - 10, - 70, - ), - ); - expect(results[1]['paint.color'], const Color(0x22222221)); - expect(results[1]['paint.strokeWidth'], 2.0); - - expect( - results[2]['rRect'], - RRect.fromLTRBAndCorners( - 0, - 0, - 10, - 20, - ), - ); - expect(results[2]['paint.color'], const Color(0x33333331)); - expect(results[2]['paint.strokeWidth'], 3.0); - }); - }); - - group('handleTouch()', () { - test('test 1', () { - const viewSize = Size(200, 100); - - final barGroups = [ - BarChartGroupData( - x: 0, - barRods: [ - BarChartRodData( - toY: 10, - width: 10, - color: const Color(0x00000000), - borderRadius: const BorderRadius.all(Radius.circular(0.1)), - ), - BarChartRodData( - toY: 8, - width: 11, - color: const Color(0x11111111), - borderRadius: const BorderRadius.all(Radius.circular(0.2)), - ), - BarChartRodData( - toY: 8, - width: 12, - color: const Color(0x22222222), - borderRadius: const BorderRadius.all(Radius.circular(0.3)), - ), - ], - barsSpace: 5, - ), - BarChartGroupData( - x: 1, - barRods: [ - BarChartRodData( - toY: 10, - width: 10, - borderRadius: const BorderRadius.all(Radius.circular(0.4)), - ), - BarChartRodData(toY: 8, width: 10), - ], - barsSpace: 5, - ), - BarChartGroupData( - x: 2, - barRods: [ - BarChartRodData(toY: 10, width: 10), - BarChartRodData(toY: 8, width: 10), - BarChartRodData(toY: 8, width: 10), - BarChartRodData(toY: 8, width: 10), - ], - barsSpace: 5, - ), - ]; - - final data = BarChartData( - barGroups: barGroups, - titlesData: const FlTitlesData(show: false), - alignment: BarChartAlignment.center, - groupsSpace: 10, - barTouchData: BarTouchData( - handleBuiltInTouches: true, - touchExtraThreshold: const EdgeInsets.all(1), - ), - ); - - final painter = BarChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - - expect(painter.handleTouch(const Offset(10, 10), viewSize, holder), null); - expect( - painter.handleTouch(const Offset(27.49, 10), viewSize, holder), - null, - ); - - // Group 0 - // 28.5, 0.0, 38.5, 100.0 - // 43.5, 20.0, 54.5, 100.0 - // 59.5, 20.0, 71.5, 100.0 - final result1 = - painter.handleTouch(const Offset(27.5, 10), viewSize, holder); - expect(result1!.touchedBarGroupIndex, 0); - expect(result1.touchedRodDataIndex, 0); - - final result11 = - painter.handleTouch(const Offset(39.5, 10), viewSize, holder); - expect(result11!.touchedBarGroupIndex, 0); - expect(result11.touchedRodDataIndex, 0); - - expect( - painter.handleTouch(const Offset(39.51, 10), viewSize, holder), - null, - ); - - // Group 1 - // 81.5, 0.0, 91.5, 100.0 - // 96.5, 20.0, 106.5, 100.0 - expect( - painter.handleTouch(const Offset(100, 18.99), viewSize, holder), - null, - ); - final result2 = - painter.handleTouch(const Offset(100, 19), viewSize, holder); - expect(result2!.touchedBarGroupIndex, 1); - expect(result2.touchedRodDataIndex, 1); - - // Group 2 - // 116.5, 0.0, 126.5, 100.0 - // 131.5, 20.0, 141.5, 100.0 - // 146.5, 20.0, 156.5, 100.0 - // 161.5, 20.0, 171.5, 100.0 - expect( - painter.handleTouch(const Offset(165, 101.1), viewSize, holder), - null, - ); - final result3 = - painter.handleTouch(const Offset(165, 101), viewSize, holder); - expect(result3!.touchedBarGroupIndex, 2); - expect(result3.touchedRodDataIndex, 3); - }); - - test('test 2', () { - const viewSize = Size(200, 100); - - final barGroups = [ - BarChartGroupData( - x: 0, - barRods: [ - BarChartRodData( - toY: 10, - width: 10, - color: const Color(0x00000000), - borderRadius: const BorderRadius.all(Radius.circular(0.1)), - rodStackItems: [ - BarChartRodStackItem(0, 5, const Color(0xFF0F0F0F)), - ], - ), - ], - barsSpace: 5, - ), - BarChartGroupData( - x: 1, - barRods: [ - BarChartRodData( - toY: -10, - width: 10, - borderRadius: const BorderRadius.all(Radius.circular(0.4)), - ), - ], - barsSpace: 5, - ), - ]; - - final data = BarChartData( - barGroups: barGroups, - titlesData: const FlTitlesData(show: false), - alignment: BarChartAlignment.center, - groupsSpace: 10, - barTouchData: BarTouchData( - handleBuiltInTouches: true, - touchExtraThreshold: const EdgeInsets.all(1), - ), - ); - - final painter = BarChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - - expect( - painter.handleTouch(const Offset(134, 48.6), viewSize, holder), - null, - ); - expect( - painter.handleTouch(const Offset(111.2, 31.1), viewSize, holder), - null, - ); - - expect( - painter.handleTouch(const Offset(103.2, 74.8), viewSize, holder), - null, - ); - expect( - painter.handleTouch(const Offset(100.4, 21.2), viewSize, holder), - null, - ); - expect( - painter.handleTouch(const Offset(80.1, 22), viewSize, holder), - null, - ); - - final result1 = - painter.handleTouch(const Offset(89, 38.5), viewSize, holder); - expect(result1!.touchedBarGroupIndex, 0); - expect(result1.touchedRodDataIndex, 0); - expect(result1.touchedStackItemIndex, 0); - - final result2 = - painter.handleTouch(const Offset(88.8, 16.5), viewSize, holder); - expect(result2!.touchedBarGroupIndex, 0); - expect(result2.touchedRodDataIndex, 0); - expect(result2.touchedStackItemIndex, -1); - }); - - test('test 3', () { - const viewSize = Size(200, 100); - - final barGroups = [ - BarChartGroupData( - x: 1, - barRods: [ - BarChartRodData( - toY: 5, - backDrawRodData: BackgroundBarChartRodData( - show: true, - fromY: -5, - toY: 5, - ), - ), - ], - ), - BarChartGroupData( - x: 1, - barRods: [ - BarChartRodData( - toY: -6, - backDrawRodData: BackgroundBarChartRodData( - show: true, - fromY: 5, - toY: -6, - ), - ), - ], - ), - ]; - - final data = BarChartData( - barGroups: barGroups, - titlesData: const FlTitlesData(show: false), - alignment: BarChartAlignment.start, - groupsSpace: 10, - minY: -10, - maxY: 15, - barTouchData: BarTouchData( - enabled: true, - handleBuiltInTouches: true, - allowTouchBarBackDraw: true, - touchExtraThreshold: const EdgeInsets.all(1), - ), - ); - - final painter = BarChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - - final result1 = - painter.handleTouch(const Offset(4, 60), viewSize, holder); - expect(result1!.touchedBarGroupIndex, 0); - expect(result1.touchedRodDataIndex, 0); - - // tap below the positive bar - final result11 = - painter.handleTouch(const Offset(4, 61.1), viewSize, holder); - expect(result11!.touchedBarGroupIndex, 0); - expect(result11.touchedRodDataIndex, 0); - - final result2 = - painter.handleTouch(const Offset(22, 60), viewSize, holder); - expect(result2!.touchedBarGroupIndex, 1); - expect(result2.touchedRodDataIndex, 0); - - final result22 = - painter.handleTouch(const Offset(22, 58.9), viewSize, holder); - expect(result22!.touchedBarGroupIndex, 1); - expect(result22.touchedRodDataIndex, 0); - }); - }); - - group('drawExtraLines()', () { - test( - 'should not draw lines when constructor is called with empty ExtraLinesData object', - () { - const viewSize = Size(400, 400); - final data = BarChartData( - barGroups: [ - BarChartGroupData( - x: 1, - barRods: [ - BarChartRodData(fromY: 1, toY: 10), - BarChartRodData(fromY: 2, toY: 10), - ], - showingTooltipIndicators: [ - 1, - 2, - ], - ), - BarChartGroupData( - x: 2, - barRods: [ - BarChartRodData(fromY: 3, toY: 10), - BarChartRodData(fromY: 4, toY: 10), - ], - ), - ], - extraLinesData: const ExtraLinesData(), - ); - - final barChartPainter = BarChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - final mockBuildContext = MockBuildContext(); - final mockCanvasWrapper = MockCanvasWrapper(); - - when(mockCanvasWrapper.size).thenAnswer((realInvocation) => viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - - barChartPainter.drawExtraLines( - mockBuildContext, - mockCanvasWrapper, - holder, - ); - - verifyNever( - mockCanvasWrapper.drawDashedLine( - any, - any, - any, - any, - ), - ); - }); - - test('should not draw lines when constructor is not passed extraLinesData', - () { - const viewSize = Size(400, 400); - final data = BarChartData( - barGroups: [ - BarChartGroupData( - x: 1, - barRods: [ - BarChartRodData(fromY: 1, toY: 10), - BarChartRodData(fromY: 2, toY: 10), - ], - showingTooltipIndicators: [ - 1, - 2, - ], - ), - BarChartGroupData( - x: 2, - barRods: [ - BarChartRodData(fromY: 3, toY: 10), - BarChartRodData(fromY: 4, toY: 10), - ], - ), - ], - ); - - final barChartPainter = BarChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - final mockBuildContext = MockBuildContext(); - final mockCanvasWrapper = MockCanvasWrapper(); - - when(mockCanvasWrapper.size).thenAnswer((realInvocation) => viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - - barChartPainter.drawExtraLines( - mockBuildContext, - mockCanvasWrapper, - holder, - ); - - verifyNever( - mockCanvasWrapper.drawDashedLine( - any, - any, - any, - any, - ), - ); - }); - - test('bar chart should not paint vertical lines', () { - final utilsMainInstance = Utils(); - const viewSize = Size(400, 400); - final data = BarChartData( - barGroups: [ - BarChartGroupData( - x: 1, - barRods: [ - BarChartRodData(fromY: 1, toY: 10), - BarChartRodData(fromY: 2, toY: 10), - ], - showingTooltipIndicators: [ - 1, - 2, - ], - ), - BarChartGroupData( - x: 2, - barRods: [ - BarChartRodData(fromY: 3, toY: 10), - BarChartRodData(fromY: 4, toY: 10), - ], - ), - ], - extraLinesData: ExtraLinesData( - verticalLines: [verticalLine1], - ), - ); - - final barChartPainter = BarChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - - final mockUtils = MockUtils(); - Utils.changeInstance(mockUtils); - when(mockUtils.getThemeAwareTextStyle(any, any)) - .thenAnswer((realInvocation) => textStyle1); - when(mockUtils.calculateRotationOffset(any, any)) - .thenAnswer((realInvocation) => Offset.zero); - when(mockUtils.convertRadiusToSigma(any)) - .thenAnswer((realInvocation) => 4.0); - when(mockUtils.getEfficientInterval(any, any)) - .thenAnswer((realInvocation) => 1.0); - when(mockUtils.getBestInitialIntervalValue(any, any, any)) - .thenAnswer((realInvocation) => 1.0); - when(mockUtils.normalizeBorderRadius(any, any)) - .thenAnswer((realInvocation) => BorderRadius.zero); - when(mockUtils.normalizeBorderSide(any, any)).thenAnswer( - (realInvocation) => const BorderSide(color: MockData.color0), - ); - - final mockBuildContext = MockBuildContext(); - final mockCanvasWrapper = MockCanvasWrapper(); - when(mockCanvasWrapper.size).thenAnswer((realInvocation) => viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - - barChartPainter.paint( - mockBuildContext, - mockCanvasWrapper, - holder, - ); - - verifyNever( - mockCanvasWrapper.drawDashedLine( - any, - any, - argThat( - const TypeMatcher().having( - (p0) => p0.color.value, - 'colors match', - equals(Colors.red), - ), - ), - holder.data.extraLinesData.verticalLines[0].dashArray, - ), - ); - - Utils.changeInstance(utilsMainInstance); - }); - - test( - 'should not paint horizontal line if Y value is greater or less than Y axis', - () { - final utilsMainInstance = Utils(); - const viewSize = Size(400, 400); - - final horizontalLine1 = HorizontalLine( - y: 10.1, - color: Colors.red, - dashArray: [0, 1], - ); - - final horizontalLine2 = HorizontalLine( - y: -10.1, - color: Colors.red, - dashArray: [0, 1], - ); - - final data = BarChartData( - minY: -10, - maxY: 10, - barGroups: [ - BarChartGroupData( - x: 1, - barRods: [ - BarChartRodData(fromY: 1, toY: 10), - BarChartRodData(fromY: 2, toY: 10), - ], - showingTooltipIndicators: [ - 1, - 2, - ], - ), - BarChartGroupData( - x: 2, - barRods: [ - BarChartRodData(fromY: 3, toY: 10), - BarChartRodData(fromY: 4, toY: 10), - ], - ), - ], - extraLinesData: ExtraLinesData( - horizontalLines: [horizontalLine1, horizontalLine2], - ), - ); - - final barChartPainter = BarChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - - final mockUtils = MockUtils(); - Utils.changeInstance(mockUtils); - when(mockUtils.getThemeAwareTextStyle(any, any)) - .thenAnswer((realInvocation) => textStyle1); - when(mockUtils.calculateRotationOffset(any, any)) - .thenAnswer((realInvocation) => Offset.zero); - when(mockUtils.convertRadiusToSigma(any)) - .thenAnswer((realInvocation) => 4.0); - when(mockUtils.getEfficientInterval(any, any)) - .thenAnswer((realInvocation) => 1.0); - when(mockUtils.getBestInitialIntervalValue(any, any, any)) - .thenAnswer((realInvocation) => 1.0); - when(mockUtils.normalizeBorderRadius(any, any)) - .thenAnswer((realInvocation) => BorderRadius.zero); - when(mockUtils.normalizeBorderSide(any, any)).thenAnswer( - (realInvocation) => const BorderSide(color: MockData.color0), - ); - - final mockBuildContext = MockBuildContext(); - final mockCanvasWrapper = MockCanvasWrapper(); - when(mockCanvasWrapper.size).thenAnswer((realInvocation) => viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - - barChartPainter.paint( - mockBuildContext, - mockCanvasWrapper, - holder, - ); - - verifyNever( - mockCanvasWrapper.drawDashedLine( - any, - any, - argThat( - const TypeMatcher().having( - (p0) => p0.color.value, - 'colors match', - equals(Colors.red.value), - ), - ), - holder.data.extraLinesData.horizontalLines[0].dashArray, - ), - ); - - Utils.changeInstance(utilsMainInstance); - }); - - test('should paint horizontal lines', () { - final horizontalLine = HorizontalLine( - y: 2.5, - strokeWidth: 90, - color: Colors.cyanAccent, - dashArray: [100, 20], - ); - final horizontalLine1 = HorizontalLine( - y: 0.2, - strokeWidth: 100, - color: Colors.cyanAccent, - dashArray: [100, 20], - ); - final utilsMainInstance = Utils(); - const viewSize = Size(400, 400); - final data = BarChartData( - barGroups: [ - BarChartGroupData( - x: 1, - barRods: [ - BarChartRodData(fromY: 1, toY: 10), - BarChartRodData(fromY: 2, toY: 10), - ], - showingTooltipIndicators: [ - 1, - 2, - ], - ), - BarChartGroupData( - x: 2, - barRods: [ - BarChartRodData(fromY: 3, toY: 10), - BarChartRodData(fromY: 4, toY: 10), - ], - ), - ], - extraLinesData: ExtraLinesData( - horizontalLines: [horizontalLine, horizontalLine1], - ), - ); - - final barChartPainter = BarChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - - final mockUtils = MockUtils(); - Utils.changeInstance(mockUtils); - when(mockUtils.getThemeAwareTextStyle(any, any)) - .thenAnswer((realInvocation) => textStyle1); - when(mockUtils.calculateRotationOffset(any, any)) - .thenAnswer((realInvocation) => Offset.zero); - when(mockUtils.convertRadiusToSigma(any)) - .thenAnswer((realInvocation) => 4.0); - when(mockUtils.getEfficientInterval(any, any)) - .thenAnswer((realInvocation) => 1.0); - when(mockUtils.getBestInitialIntervalValue(any, any, any)) - .thenAnswer((realInvocation) => 1.0); - when(mockUtils.normalizeBorderRadius(any, any)) - .thenAnswer((realInvocation) => BorderRadius.zero); - when(mockUtils.normalizeBorderSide(any, any)).thenAnswer( - (realInvocation) => const BorderSide(color: MockData.color0), - ); - - final mockBuildContext = MockBuildContext(); - final mockCanvasWrapper = MockCanvasWrapper(); - - when(mockCanvasWrapper.size).thenAnswer((realInvocation) => viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - - final results = >[]; - - when( - mockCanvasWrapper.drawDashedLine( - any, - any, - captureThat( - const TypeMatcher().having( - (p0) => p0.color.value, - 'colors match', - equals(Colors.cyanAccent.value), - ), - ), - [100, 20], - ), - ).thenAnswer((inv) { - results.add({ - 'from': inv.positionalArguments[0] as Offset, - 'to': inv.positionalArguments[1] as Offset, - 'paint_color': (inv.positionalArguments[2] as Paint).color.value, - 'paint_stroke_width': - (inv.positionalArguments[2] as Paint).strokeWidth, - }); - }); - - barChartPainter.paint( - mockBuildContext, - mockCanvasWrapper, - holder, - ); - - expect(results.length, 1); - - expect(results[0]['paint_color'], Colors.cyanAccent.value); - expect(results[0]['paint_stroke_width'], 90); - - Utils.changeInstance(utilsMainInstance); - }); - - test('should draw extra horizontal lines under chart', () { - const viewSize = Size(100, 100); - final data = BarChartData( - minY: -10, - maxY: 10, - barGroups: [ - BarChartGroupData( - x: 1, - barRods: [ - BarChartRodData(fromY: 1, toY: 10), - BarChartRodData(fromY: 2, toY: 10), - ], - ), - ], - titlesData: const FlTitlesData(show: false), - extraLinesData: ExtraLinesData( - horizontalLines: [ - HorizontalLine( - y: -9.9, - color: Colors.cyanAccent, - dashArray: [12, 22], - ), - HorizontalLine( - y: -.5, - color: Colors.cyanAccent, - dashArray: [12, 22], - ), - ], - extraLinesOnTop: false, - ), - ); - - final barChartPainter = BarChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - final mockCanvasWrapper = MockCanvasWrapper(); - when(mockCanvasWrapper.size).thenAnswer((realInvocation) => viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - - final mockBuildContext = MockBuildContext(); - - barChartPainter.paint( - mockBuildContext, - mockCanvasWrapper, - holder, - ); - - verify( - mockCanvasWrapper.drawDashedLine( - any, - any, - argThat( - const TypeMatcher().having( - (p0) => p0.color.value, - 'colors match', - equals(Colors.cyanAccent.value), - ), - ), - holder.data.extraLinesData.horizontalLines[0].dashArray, - ), - ).called(2); - }); - }); -} diff --git a/test/chart/bar_chart/bar_chart_painter_test.mocks.dart b/test/chart/bar_chart/bar_chart_painter_test.mocks.dart deleted file mode 100644 index 87f099ca98..0000000000 --- a/test/chart/bar_chart/bar_chart_painter_test.mocks.dart +++ /dev/null @@ -1,1435 +0,0 @@ -// Mocks generated by Mockito 5.4.2 from annotations -// in fl_chart/test/chart/bar_chart/bar_chart_painter_test.dart. -// Do not manually edit this file. - -// ignore_for_file: no_leading_underscores_for_library_prefixes -import 'dart:typed_data' as _i5; -import 'dart:ui' as _i2; - -import 'package:fl_chart/fl_chart.dart' as _i7; -import 'package:fl_chart/src/utils/canvas_wrapper.dart' as _i6; -import 'package:fl_chart/src/utils/utils.dart' as _i8; -import 'package:flutter/cupertino.dart' as _i3; -import 'package:flutter/foundation.dart' as _i4; -import 'package:mockito/mockito.dart' as _i1; - -// ignore_for_file: type=lint -// ignore_for_file: avoid_redundant_argument_values -// ignore_for_file: avoid_setters_without_getters -// ignore_for_file: comment_references -// ignore_for_file: implementation_imports -// ignore_for_file: invalid_use_of_visible_for_testing_member -// ignore_for_file: prefer_const_constructors -// ignore_for_file: unnecessary_parenthesis -// ignore_for_file: camel_case_types -// ignore_for_file: subtype_of_sealed_class - -class _FakeRect_0 extends _i1.SmartFake implements _i2.Rect { - _FakeRect_0( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); -} - -class _FakeCanvas_1 extends _i1.SmartFake implements _i2.Canvas { - _FakeCanvas_1( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); -} - -class _FakeSize_2 extends _i1.SmartFake implements _i2.Size { - _FakeSize_2( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); -} - -class _FakeWidget_3 extends _i1.SmartFake implements _i3.Widget { - _FakeWidget_3( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); - - @override - String toString({_i3.DiagnosticLevel? minLevel = _i3.DiagnosticLevel.info}) => - super.toString(); -} - -class _FakeInheritedWidget_4 extends _i1.SmartFake - implements _i3.InheritedWidget { - _FakeInheritedWidget_4( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); - - @override - String toString({_i3.DiagnosticLevel? minLevel = _i3.DiagnosticLevel.info}) => - super.toString(); -} - -class _FakeDiagnosticsNode_5 extends _i1.SmartFake - implements _i3.DiagnosticsNode { - _FakeDiagnosticsNode_5( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); - - @override - String toString({ - _i4.TextTreeConfiguration? parentConfiguration, - _i3.DiagnosticLevel? minLevel = _i3.DiagnosticLevel.info, - }) => - super.toString(); -} - -class _FakeOffset_6 extends _i1.SmartFake implements _i2.Offset { - _FakeOffset_6( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); -} - -class _FakeBorderSide_7 extends _i1.SmartFake implements _i3.BorderSide { - _FakeBorderSide_7( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); - - @override - String toString({_i3.DiagnosticLevel? minLevel = _i3.DiagnosticLevel.info}) => - super.toString(); -} - -class _FakeTextStyle_8 extends _i1.SmartFake implements _i3.TextStyle { - _FakeTextStyle_8( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); - - @override - String toString({_i3.DiagnosticLevel? minLevel = _i3.DiagnosticLevel.info}) => - super.toString(); -} - -/// A class which mocks [Canvas]. -/// -/// See the documentation for Mockito's code generation for more information. -class MockCanvas extends _i1.Mock implements _i2.Canvas { - MockCanvas() { - _i1.throwOnMissingStub(this); - } - - @override - void save() => super.noSuchMethod( - Invocation.method( - #save, - [], - ), - returnValueForMissingStub: null, - ); - - @override - void saveLayer( - _i2.Rect? bounds, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #saveLayer, - [ - bounds, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void restore() => super.noSuchMethod( - Invocation.method( - #restore, - [], - ), - returnValueForMissingStub: null, - ); - - @override - void restoreToCount(int? count) => super.noSuchMethod( - Invocation.method( - #restoreToCount, - [count], - ), - returnValueForMissingStub: null, - ); - - @override - int getSaveCount() => (super.noSuchMethod( - Invocation.method( - #getSaveCount, - [], - ), - returnValue: 0, - ) as int); - - @override - void translate( - double? dx, - double? dy, - ) => - super.noSuchMethod( - Invocation.method( - #translate, - [ - dx, - dy, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void scale( - double? sx, [ - double? sy, - ]) => - super.noSuchMethod( - Invocation.method( - #scale, - [ - sx, - sy, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void rotate(double? radians) => super.noSuchMethod( - Invocation.method( - #rotate, - [radians], - ), - returnValueForMissingStub: null, - ); - - @override - void skew( - double? sx, - double? sy, - ) => - super.noSuchMethod( - Invocation.method( - #skew, - [ - sx, - sy, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void transform(_i5.Float64List? matrix4) => super.noSuchMethod( - Invocation.method( - #transform, - [matrix4], - ), - returnValueForMissingStub: null, - ); - - @override - _i5.Float64List getTransform() => (super.noSuchMethod( - Invocation.method( - #getTransform, - [], - ), - returnValue: _i5.Float64List(0), - ) as _i5.Float64List); - - @override - void clipRect( - _i2.Rect? rect, { - _i2.ClipOp? clipOp = _i2.ClipOp.intersect, - bool? doAntiAlias = true, - }) => - super.noSuchMethod( - Invocation.method( - #clipRect, - [rect], - { - #clipOp: clipOp, - #doAntiAlias: doAntiAlias, - }, - ), - returnValueForMissingStub: null, - ); - - @override - void clipRRect( - _i2.RRect? rrect, { - bool? doAntiAlias = true, - }) => - super.noSuchMethod( - Invocation.method( - #clipRRect, - [rrect], - {#doAntiAlias: doAntiAlias}, - ), - returnValueForMissingStub: null, - ); - - @override - void clipPath( - _i2.Path? path, { - bool? doAntiAlias = true, - }) => - super.noSuchMethod( - Invocation.method( - #clipPath, - [path], - {#doAntiAlias: doAntiAlias}, - ), - returnValueForMissingStub: null, - ); - - @override - _i2.Rect getLocalClipBounds() => (super.noSuchMethod( - Invocation.method( - #getLocalClipBounds, - [], - ), - returnValue: _FakeRect_0( - this, - Invocation.method( - #getLocalClipBounds, - [], - ), - ), - ) as _i2.Rect); - - @override - _i2.Rect getDestinationClipBounds() => (super.noSuchMethod( - Invocation.method( - #getDestinationClipBounds, - [], - ), - returnValue: _FakeRect_0( - this, - Invocation.method( - #getDestinationClipBounds, - [], - ), - ), - ) as _i2.Rect); - - @override - void drawColor( - _i2.Color? color, - _i2.BlendMode? blendMode, - ) => - super.noSuchMethod( - Invocation.method( - #drawColor, - [ - color, - blendMode, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawLine( - _i2.Offset? p1, - _i2.Offset? p2, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawLine, - [ - p1, - p2, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawPaint(_i2.Paint? paint) => super.noSuchMethod( - Invocation.method( - #drawPaint, - [paint], - ), - returnValueForMissingStub: null, - ); - - @override - void drawRect( - _i2.Rect? rect, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawRect, - [ - rect, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawRRect( - _i2.RRect? rrect, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawRRect, - [ - rrect, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawDRRect( - _i2.RRect? outer, - _i2.RRect? inner, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawDRRect, - [ - outer, - inner, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawOval( - _i2.Rect? rect, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawOval, - [ - rect, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawCircle( - _i2.Offset? c, - double? radius, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawCircle, - [ - c, - radius, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawArc( - _i2.Rect? rect, - double? startAngle, - double? sweepAngle, - bool? useCenter, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawArc, - [ - rect, - startAngle, - sweepAngle, - useCenter, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawPath( - _i2.Path? path, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawPath, - [ - path, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawImage( - _i2.Image? image, - _i2.Offset? offset, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawImage, - [ - image, - offset, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawImageRect( - _i2.Image? image, - _i2.Rect? src, - _i2.Rect? dst, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawImageRect, - [ - image, - src, - dst, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawImageNine( - _i2.Image? image, - _i2.Rect? center, - _i2.Rect? dst, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawImageNine, - [ - image, - center, - dst, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawPicture(_i2.Picture? picture) => super.noSuchMethod( - Invocation.method( - #drawPicture, - [picture], - ), - returnValueForMissingStub: null, - ); - - @override - void drawParagraph( - _i2.Paragraph? paragraph, - _i2.Offset? offset, - ) => - super.noSuchMethod( - Invocation.method( - #drawParagraph, - [ - paragraph, - offset, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawPoints( - _i2.PointMode? pointMode, - List<_i2.Offset>? points, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawPoints, - [ - pointMode, - points, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawRawPoints( - _i2.PointMode? pointMode, - _i5.Float32List? points, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawRawPoints, - [ - pointMode, - points, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawVertices( - _i2.Vertices? vertices, - _i2.BlendMode? blendMode, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawVertices, - [ - vertices, - blendMode, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawAtlas( - _i2.Image? atlas, - List<_i2.RSTransform>? transforms, - List<_i2.Rect>? rects, - List<_i2.Color>? colors, - _i2.BlendMode? blendMode, - _i2.Rect? cullRect, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawAtlas, - [ - atlas, - transforms, - rects, - colors, - blendMode, - cullRect, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawRawAtlas( - _i2.Image? atlas, - _i5.Float32List? rstTransforms, - _i5.Float32List? rects, - _i5.Int32List? colors, - _i2.BlendMode? blendMode, - _i2.Rect? cullRect, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawRawAtlas, - [ - atlas, - rstTransforms, - rects, - colors, - blendMode, - cullRect, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawShadow( - _i2.Path? path, - _i2.Color? color, - double? elevation, - bool? transparentOccluder, - ) => - super.noSuchMethod( - Invocation.method( - #drawShadow, - [ - path, - color, - elevation, - transparentOccluder, - ], - ), - returnValueForMissingStub: null, - ); -} - -/// A class which mocks [CanvasWrapper]. -/// -/// See the documentation for Mockito's code generation for more information. -class MockCanvasWrapper extends _i1.Mock implements _i6.CanvasWrapper { - MockCanvasWrapper() { - _i1.throwOnMissingStub(this); - } - - @override - _i2.Canvas get canvas => (super.noSuchMethod( - Invocation.getter(#canvas), - returnValue: _FakeCanvas_1( - this, - Invocation.getter(#canvas), - ), - ) as _i2.Canvas); - - @override - _i2.Size get size => (super.noSuchMethod( - Invocation.getter(#size), - returnValue: _FakeSize_2( - this, - Invocation.getter(#size), - ), - ) as _i2.Size); - - @override - void drawRRect( - _i2.RRect? rrect, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawRRect, - [ - rrect, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void save() => super.noSuchMethod( - Invocation.method( - #save, - [], - ), - returnValueForMissingStub: null, - ); - - @override - void restore() => super.noSuchMethod( - Invocation.method( - #restore, - [], - ), - returnValueForMissingStub: null, - ); - - @override - void clipRect( - _i2.Rect? rect, { - _i2.ClipOp? clipOp = _i2.ClipOp.intersect, - bool? doAntiAlias = true, - }) => - super.noSuchMethod( - Invocation.method( - #clipRect, - [rect], - { - #clipOp: clipOp, - #doAntiAlias: doAntiAlias, - }, - ), - returnValueForMissingStub: null, - ); - - @override - void translate( - double? dx, - double? dy, - ) => - super.noSuchMethod( - Invocation.method( - #translate, - [ - dx, - dy, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void rotate(double? radius) => super.noSuchMethod( - Invocation.method( - #rotate, - [radius], - ), - returnValueForMissingStub: null, - ); - - @override - void drawPath( - _i2.Path? path, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawPath, - [ - path, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void saveLayer( - _i2.Rect? bounds, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #saveLayer, - [ - bounds, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawPicture(_i2.Picture? picture) => super.noSuchMethod( - Invocation.method( - #drawPicture, - [picture], - ), - returnValueForMissingStub: null, - ); - - @override - void drawImage( - _i2.Image? image, - _i2.Offset? offset, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawImage, - [ - image, - offset, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void clipPath( - _i2.Path? path, { - bool? doAntiAlias = true, - }) => - super.noSuchMethod( - Invocation.method( - #clipPath, - [path], - {#doAntiAlias: doAntiAlias}, - ), - returnValueForMissingStub: null, - ); - - @override - void drawRect( - _i2.Rect? rect, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawRect, - [ - rect, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawLine( - _i2.Offset? p1, - _i2.Offset? p2, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawLine, - [ - p1, - p2, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawCircle( - _i2.Offset? center, - double? radius, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawCircle, - [ - center, - radius, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawArc( - _i2.Rect? rect, - double? startAngle, - double? sweepAngle, - bool? useCenter, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawArc, - [ - rect, - startAngle, - sweepAngle, - useCenter, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawText( - _i3.TextPainter? tp, - _i2.Offset? offset, [ - double? rotateAngle, - ]) => - super.noSuchMethod( - Invocation.method( - #drawText, - [ - tp, - offset, - rotateAngle, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawDot( - _i7.FlDotPainter? painter, - _i7.FlSpot? spot, - _i2.Offset? offset, - ) => - super.noSuchMethod( - Invocation.method( - #drawDot, - [ - painter, - spot, - offset, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawRotated({ - required _i2.Size? size, - _i2.Offset? rotationOffset = _i2.Offset.zero, - _i2.Offset? drawOffset = _i2.Offset.zero, - required double? angle, - required _i6.DrawCallback? drawCallback, - }) => - super.noSuchMethod( - Invocation.method( - #drawRotated, - [], - { - #size: size, - #rotationOffset: rotationOffset, - #drawOffset: drawOffset, - #angle: angle, - #drawCallback: drawCallback, - }, - ), - returnValueForMissingStub: null, - ); - - @override - void drawDashedLine( - _i2.Offset? from, - _i2.Offset? to, - _i2.Paint? painter, - List? dashArray, - ) => - super.noSuchMethod( - Invocation.method( - #drawDashedLine, - [ - from, - to, - painter, - dashArray, - ], - ), - returnValueForMissingStub: null, - ); -} - -/// A class which mocks [BuildContext]. -/// -/// See the documentation for Mockito's code generation for more information. -class MockBuildContext extends _i1.Mock implements _i3.BuildContext { - MockBuildContext() { - _i1.throwOnMissingStub(this); - } - - @override - _i3.Widget get widget => (super.noSuchMethod( - Invocation.getter(#widget), - returnValue: _FakeWidget_3( - this, - Invocation.getter(#widget), - ), - ) as _i3.Widget); - - @override - bool get mounted => (super.noSuchMethod( - Invocation.getter(#mounted), - returnValue: false, - ) as bool); - - @override - bool get debugDoingBuild => (super.noSuchMethod( - Invocation.getter(#debugDoingBuild), - returnValue: false, - ) as bool); - - @override - _i3.InheritedWidget dependOnInheritedElement( - _i3.InheritedElement? ancestor, { - Object? aspect, - }) => - (super.noSuchMethod( - Invocation.method( - #dependOnInheritedElement, - [ancestor], - {#aspect: aspect}, - ), - returnValue: _FakeInheritedWidget_4( - this, - Invocation.method( - #dependOnInheritedElement, - [ancestor], - {#aspect: aspect}, - ), - ), - ) as _i3.InheritedWidget); - - @override - void visitAncestorElements(_i3.ConditionalElementVisitor? visitor) => - super.noSuchMethod( - Invocation.method( - #visitAncestorElements, - [visitor], - ), - returnValueForMissingStub: null, - ); - - @override - void visitChildElements(_i3.ElementVisitor? visitor) => super.noSuchMethod( - Invocation.method( - #visitChildElements, - [visitor], - ), - returnValueForMissingStub: null, - ); - - @override - void dispatchNotification(_i3.Notification? notification) => - super.noSuchMethod( - Invocation.method( - #dispatchNotification, - [notification], - ), - returnValueForMissingStub: null, - ); - - @override - _i3.DiagnosticsNode describeElement( - String? name, { - _i4.DiagnosticsTreeStyle? style = _i4.DiagnosticsTreeStyle.errorProperty, - }) => - (super.noSuchMethod( - Invocation.method( - #describeElement, - [name], - {#style: style}, - ), - returnValue: _FakeDiagnosticsNode_5( - this, - Invocation.method( - #describeElement, - [name], - {#style: style}, - ), - ), - ) as _i3.DiagnosticsNode); - - @override - _i3.DiagnosticsNode describeWidget( - String? name, { - _i4.DiagnosticsTreeStyle? style = _i4.DiagnosticsTreeStyle.errorProperty, - }) => - (super.noSuchMethod( - Invocation.method( - #describeWidget, - [name], - {#style: style}, - ), - returnValue: _FakeDiagnosticsNode_5( - this, - Invocation.method( - #describeWidget, - [name], - {#style: style}, - ), - ), - ) as _i3.DiagnosticsNode); - - @override - List<_i3.DiagnosticsNode> describeMissingAncestor( - {required Type? expectedAncestorType}) => - (super.noSuchMethod( - Invocation.method( - #describeMissingAncestor, - [], - {#expectedAncestorType: expectedAncestorType}, - ), - returnValue: <_i3.DiagnosticsNode>[], - ) as List<_i3.DiagnosticsNode>); - - @override - _i3.DiagnosticsNode describeOwnershipChain(String? name) => - (super.noSuchMethod( - Invocation.method( - #describeOwnershipChain, - [name], - ), - returnValue: _FakeDiagnosticsNode_5( - this, - Invocation.method( - #describeOwnershipChain, - [name], - ), - ), - ) as _i3.DiagnosticsNode); -} - -/// A class which mocks [Utils]. -/// -/// See the documentation for Mockito's code generation for more information. -class MockUtils extends _i1.Mock implements _i8.Utils { - MockUtils() { - _i1.throwOnMissingStub(this); - } - - @override - double radians(double? degrees) => (super.noSuchMethod( - Invocation.method( - #radians, - [degrees], - ), - returnValue: 0.0, - ) as double); - - @override - double degrees(double? radians) => (super.noSuchMethod( - Invocation.method( - #degrees, - [radians], - ), - returnValue: 0.0, - ) as double); - - @override - _i2.Size getDefaultSize(_i2.Size? screenSize) => (super.noSuchMethod( - Invocation.method( - #getDefaultSize, - [screenSize], - ), - returnValue: _FakeSize_2( - this, - Invocation.method( - #getDefaultSize, - [screenSize], - ), - ), - ) as _i2.Size); - - @override - double translateRotatedPosition( - double? size, - double? degree, - ) => - (super.noSuchMethod( - Invocation.method( - #translateRotatedPosition, - [ - size, - degree, - ], - ), - returnValue: 0.0, - ) as double); - - @override - _i2.Offset calculateRotationOffset( - _i2.Size? size, - double? degree, - ) => - (super.noSuchMethod( - Invocation.method( - #calculateRotationOffset, - [ - size, - degree, - ], - ), - returnValue: _FakeOffset_6( - this, - Invocation.method( - #calculateRotationOffset, - [ - size, - degree, - ], - ), - ), - ) as _i2.Offset); - - @override - _i3.BorderRadius? normalizeBorderRadius( - _i3.BorderRadius? borderRadius, - double? width, - ) => - (super.noSuchMethod(Invocation.method( - #normalizeBorderRadius, - [ - borderRadius, - width, - ], - )) as _i3.BorderRadius?); - - @override - _i3.BorderSide normalizeBorderSide( - _i3.BorderSide? borderSide, - double? width, - ) => - (super.noSuchMethod( - Invocation.method( - #normalizeBorderSide, - [ - borderSide, - width, - ], - ), - returnValue: _FakeBorderSide_7( - this, - Invocation.method( - #normalizeBorderSide, - [ - borderSide, - width, - ], - ), - ), - ) as _i3.BorderSide); - - @override - double getEfficientInterval( - double? axisViewSize, - double? diffInAxis, { - double? pixelPerInterval = 40.0, - }) => - (super.noSuchMethod( - Invocation.method( - #getEfficientInterval, - [ - axisViewSize, - diffInAxis, - ], - {#pixelPerInterval: pixelPerInterval}, - ), - returnValue: 0.0, - ) as double); - - @override - double roundInterval(double? input) => (super.noSuchMethod( - Invocation.method( - #roundInterval, - [input], - ), - returnValue: 0.0, - ) as double); - - @override - int getFractionDigits(double? value) => (super.noSuchMethod( - Invocation.method( - #getFractionDigits, - [value], - ), - returnValue: 0, - ) as int); - - @override - String formatNumber( - double? axisMin, - double? axisMax, - double? axisValue, - ) => - (super.noSuchMethod( - Invocation.method( - #formatNumber, - [ - axisMin, - axisMax, - axisValue, - ], - ), - returnValue: '', - ) as String); - - @override - _i3.TextStyle getThemeAwareTextStyle( - _i3.BuildContext? context, - _i3.TextStyle? providedStyle, - ) => - (super.noSuchMethod( - Invocation.method( - #getThemeAwareTextStyle, - [ - context, - providedStyle, - ], - ), - returnValue: _FakeTextStyle_8( - this, - Invocation.method( - #getThemeAwareTextStyle, - [ - context, - providedStyle, - ], - ), - ), - ) as _i3.TextStyle); - - @override - double getBestInitialIntervalValue( - double? min, - double? max, - double? interval, { - double? baseline = 0.0, - }) => - (super.noSuchMethod( - Invocation.method( - #getBestInitialIntervalValue, - [ - min, - max, - interval, - ], - {#baseline: baseline}, - ), - returnValue: 0.0, - ) as double); - - @override - double convertRadiusToSigma(double? radius) => (super.noSuchMethod( - Invocation.method( - #convertRadiusToSigma, - [radius], - ), - returnValue: 0.0, - ) as double); -} diff --git a/test/chart/bar_chart/bar_chart_renderer_test.dart b/test/chart/bar_chart/bar_chart_renderer_test.dart deleted file mode 100644 index f36210c48f..0000000000 --- a/test/chart/bar_chart/bar_chart_renderer_test.dart +++ /dev/null @@ -1,124 +0,0 @@ -import 'package:fl_chart/fl_chart.dart'; -import 'package:fl_chart/src/chart/bar_chart/bar_chart_painter.dart'; -import 'package:fl_chart/src/chart/bar_chart/bar_chart_renderer.dart'; -import 'package:fl_chart/src/chart/base/base_chart/base_chart_painter.dart'; -import 'package:fl_chart/src/utils/canvas_wrapper.dart'; -import 'package:flutter/cupertino.dart'; -import 'package:flutter_test/flutter_test.dart'; -import 'package:mockito/annotations.dart'; -import 'package:mockito/mockito.dart'; - -import '../data_pool.dart'; -import 'bar_chart_renderer_test.mocks.dart'; - -@GenerateMocks([Canvas, PaintingContext, BuildContext, BarChartPainter]) -void main() { - group('BarChartRenderer', () { - final data = BarChartData( - titlesData: const FlTitlesData( - leftTitles: AxisTitles( - sideTitles: SideTitles(reservedSize: 20, showTitles: true), - ), - rightTitles: AxisTitles( - sideTitles: SideTitles(reservedSize: 64, showTitles: true), - ), - topTitles: AxisTitles(), - bottomTitles: AxisTitles(), - ), - ); - - final targetData = BarChartData( - titlesData: const FlTitlesData( - leftTitles: AxisTitles( - sideTitles: SideTitles(reservedSize: 8, showTitles: true), - ), - rightTitles: AxisTitles( - sideTitles: SideTitles(reservedSize: 20, showTitles: true), - ), - topTitles: AxisTitles(), - bottomTitles: AxisTitles(), - ), - ); - - const textScaler = TextScaler.linear(4); - - final mockBuildContext = MockBuildContext(); - final renderBarChart = RenderBarChart( - mockBuildContext, - data, - targetData, - textScaler, - ); - - final mockPainter = MockBarChartPainter(); - final mockPaintingContext = MockPaintingContext(); - final mockCanvas = MockCanvas(); - const mockSize = Size(44, 44); - when(mockPaintingContext.canvas).thenAnswer((realInvocation) => mockCanvas); - renderBarChart - ..mockTestSize = mockSize - ..painter = mockPainter; - - test('test 1 correct data set', () { - expect(renderBarChart.data == data, true); - expect(renderBarChart.data == targetData, false); - expect(renderBarChart.targetData == targetData, true); - expect(renderBarChart.textScaler == textScaler, true); - expect(renderBarChart.paintHolder.data == data, true); - expect(renderBarChart.paintHolder.targetData == targetData, true); - expect(renderBarChart.paintHolder.textScaler == textScaler, true); - }); - - test('test 2 check paint function', () { - renderBarChart.paint(mockPaintingContext, const Offset(10, 10)); - verify(mockCanvas.save()).called(1); - verify(mockCanvas.translate(10, 10)).called(1); - final result = verify(mockPainter.paint(any, captureAny, captureAny)); - expect(result.callCount, 1); - - final canvasWrapper = result.captured[0] as CanvasWrapper; - expect(canvasWrapper.size, const Size(44, 44)); - expect(canvasWrapper.canvas, mockCanvas); - - final paintHolder = result.captured[1] as PaintHolder; - expect(paintHolder.data, data); - expect(paintHolder.targetData, targetData); - expect(paintHolder.textScaler, textScaler); - - verify(mockCanvas.restore()).called(1); - }); - - test('test 3 check getResponseAtLocation function', () { - final results = >[]; - when(mockPainter.handleTouch(captureAny, captureAny, captureAny)) - .thenAnswer((inv) { - results.add({ - 'local_position': inv.positionalArguments[0] as Offset, - 'size': inv.positionalArguments[1] as Size, - 'paint_holder': inv.positionalArguments[2] as PaintHolder, - }); - return MockData.barTouchedSpot; - }); - final touchResponse = - renderBarChart.getResponseAtLocation(MockData.offset1); - expect(touchResponse.spot, MockData.barTouchedSpot); - expect(results[0]['local_position'] as Offset, MockData.offset1); - expect(results[0]['size'] as Size, mockSize); - final paintHolder = results[0]['paint_holder'] as PaintHolder; - expect(paintHolder.data, data); - expect(paintHolder.targetData, targetData); - expect(paintHolder.textScaler, textScaler); - }); - - test('test 4 check setters', () { - renderBarChart - ..data = targetData - ..targetData = data - ..textScaler = const TextScaler.linear(22); - - expect(renderBarChart.data, targetData); - expect(renderBarChart.targetData, data); - expect(renderBarChart.textScaler, const TextScaler.linear(22)); - }); - }); -} diff --git a/test/chart/bar_chart/bar_chart_renderer_test.mocks.dart b/test/chart/bar_chart/bar_chart_renderer_test.mocks.dart deleted file mode 100644 index ba3fc058dc..0000000000 --- a/test/chart/bar_chart/bar_chart_renderer_test.mocks.dart +++ /dev/null @@ -1,1529 +0,0 @@ -// Mocks generated by Mockito 5.4.2 from annotations -// in fl_chart/test/chart/bar_chart/bar_chart_renderer_test.dart. -// Do not manually edit this file. - -// ignore_for_file: no_leading_underscores_for_library_prefixes -import 'dart:typed_data' as _i7; -import 'dart:ui' as _i2; - -import 'package:fl_chart/fl_chart.dart' as _i13; -import 'package:fl_chart/src/chart/bar_chart/bar_chart_painter.dart' as _i10; -import 'package:fl_chart/src/chart/base/base_chart/base_chart_painter.dart' - as _i12; -import 'package:fl_chart/src/utils/canvas_wrapper.dart' as _i11; -import 'package:flutter/foundation.dart' as _i5; -import 'package:flutter/gestures.dart' as _i8; -import 'package:flutter/material.dart' as _i6; -import 'package:flutter/rendering.dart' as _i3; -import 'package:flutter/src/rendering/layer.dart' as _i4; -import 'package:flutter/src/widgets/notification_listener.dart' as _i9; -import 'package:mockito/mockito.dart' as _i1; - -// ignore_for_file: type=lint -// ignore_for_file: avoid_redundant_argument_values -// ignore_for_file: avoid_setters_without_getters -// ignore_for_file: comment_references -// ignore_for_file: implementation_imports -// ignore_for_file: invalid_use_of_visible_for_testing_member -// ignore_for_file: prefer_const_constructors -// ignore_for_file: unnecessary_parenthesis -// ignore_for_file: camel_case_types -// ignore_for_file: subtype_of_sealed_class - -class _FakeRect_0 extends _i1.SmartFake implements _i2.Rect { - _FakeRect_0( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); -} - -class _FakeCanvas_1 extends _i1.SmartFake implements _i2.Canvas { - _FakeCanvas_1( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); -} - -class _FakePaintingContext_2 extends _i1.SmartFake - implements _i3.PaintingContext { - _FakePaintingContext_2( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); -} - -class _FakeColorFilterLayer_3 extends _i1.SmartFake - implements _i4.ColorFilterLayer { - _FakeColorFilterLayer_3( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); - - @override - String toString({_i5.DiagnosticLevel? minLevel = _i5.DiagnosticLevel.info}) => - super.toString(); -} - -class _FakeOpacityLayer_4 extends _i1.SmartFake implements _i4.OpacityLayer { - _FakeOpacityLayer_4( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); - - @override - String toString({_i5.DiagnosticLevel? minLevel = _i5.DiagnosticLevel.info}) => - super.toString(); -} - -class _FakeWidget_5 extends _i1.SmartFake implements _i6.Widget { - _FakeWidget_5( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); - - @override - String toString({_i5.DiagnosticLevel? minLevel = _i5.DiagnosticLevel.info}) => - super.toString(); -} - -class _FakeInheritedWidget_6 extends _i1.SmartFake - implements _i6.InheritedWidget { - _FakeInheritedWidget_6( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); - - @override - String toString({_i5.DiagnosticLevel? minLevel = _i5.DiagnosticLevel.info}) => - super.toString(); -} - -class _FakeDiagnosticsNode_7 extends _i1.SmartFake - implements _i5.DiagnosticsNode { - _FakeDiagnosticsNode_7( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); - - @override - String toString({ - _i5.TextTreeConfiguration? parentConfiguration, - _i5.DiagnosticLevel? minLevel = _i5.DiagnosticLevel.info, - }) => - super.toString(); -} - -/// A class which mocks [Canvas]. -/// -/// See the documentation for Mockito's code generation for more information. -class MockCanvas extends _i1.Mock implements _i2.Canvas { - MockCanvas() { - _i1.throwOnMissingStub(this); - } - - @override - void save() => super.noSuchMethod( - Invocation.method( - #save, - [], - ), - returnValueForMissingStub: null, - ); - - @override - void saveLayer( - _i2.Rect? bounds, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #saveLayer, - [ - bounds, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void restore() => super.noSuchMethod( - Invocation.method( - #restore, - [], - ), - returnValueForMissingStub: null, - ); - - @override - void restoreToCount(int? count) => super.noSuchMethod( - Invocation.method( - #restoreToCount, - [count], - ), - returnValueForMissingStub: null, - ); - - @override - int getSaveCount() => (super.noSuchMethod( - Invocation.method( - #getSaveCount, - [], - ), - returnValue: 0, - ) as int); - - @override - void translate( - double? dx, - double? dy, - ) => - super.noSuchMethod( - Invocation.method( - #translate, - [ - dx, - dy, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void scale( - double? sx, [ - double? sy, - ]) => - super.noSuchMethod( - Invocation.method( - #scale, - [ - sx, - sy, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void rotate(double? radians) => super.noSuchMethod( - Invocation.method( - #rotate, - [radians], - ), - returnValueForMissingStub: null, - ); - - @override - void skew( - double? sx, - double? sy, - ) => - super.noSuchMethod( - Invocation.method( - #skew, - [ - sx, - sy, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void transform(_i7.Float64List? matrix4) => super.noSuchMethod( - Invocation.method( - #transform, - [matrix4], - ), - returnValueForMissingStub: null, - ); - - @override - _i7.Float64List getTransform() => (super.noSuchMethod( - Invocation.method( - #getTransform, - [], - ), - returnValue: _i7.Float64List(0), - ) as _i7.Float64List); - - @override - void clipRect( - _i2.Rect? rect, { - _i2.ClipOp? clipOp = _i2.ClipOp.intersect, - bool? doAntiAlias = true, - }) => - super.noSuchMethod( - Invocation.method( - #clipRect, - [rect], - { - #clipOp: clipOp, - #doAntiAlias: doAntiAlias, - }, - ), - returnValueForMissingStub: null, - ); - - @override - void clipRRect( - _i2.RRect? rrect, { - bool? doAntiAlias = true, - }) => - super.noSuchMethod( - Invocation.method( - #clipRRect, - [rrect], - {#doAntiAlias: doAntiAlias}, - ), - returnValueForMissingStub: null, - ); - - @override - void clipPath( - _i2.Path? path, { - bool? doAntiAlias = true, - }) => - super.noSuchMethod( - Invocation.method( - #clipPath, - [path], - {#doAntiAlias: doAntiAlias}, - ), - returnValueForMissingStub: null, - ); - - @override - _i2.Rect getLocalClipBounds() => (super.noSuchMethod( - Invocation.method( - #getLocalClipBounds, - [], - ), - returnValue: _FakeRect_0( - this, - Invocation.method( - #getLocalClipBounds, - [], - ), - ), - ) as _i2.Rect); - - @override - _i2.Rect getDestinationClipBounds() => (super.noSuchMethod( - Invocation.method( - #getDestinationClipBounds, - [], - ), - returnValue: _FakeRect_0( - this, - Invocation.method( - #getDestinationClipBounds, - [], - ), - ), - ) as _i2.Rect); - - @override - void drawColor( - _i2.Color? color, - _i2.BlendMode? blendMode, - ) => - super.noSuchMethod( - Invocation.method( - #drawColor, - [ - color, - blendMode, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawLine( - _i2.Offset? p1, - _i2.Offset? p2, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawLine, - [ - p1, - p2, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawPaint(_i2.Paint? paint) => super.noSuchMethod( - Invocation.method( - #drawPaint, - [paint], - ), - returnValueForMissingStub: null, - ); - - @override - void drawRect( - _i2.Rect? rect, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawRect, - [ - rect, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawRRect( - _i2.RRect? rrect, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawRRect, - [ - rrect, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawDRRect( - _i2.RRect? outer, - _i2.RRect? inner, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawDRRect, - [ - outer, - inner, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawOval( - _i2.Rect? rect, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawOval, - [ - rect, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawCircle( - _i2.Offset? c, - double? radius, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawCircle, - [ - c, - radius, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawArc( - _i2.Rect? rect, - double? startAngle, - double? sweepAngle, - bool? useCenter, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawArc, - [ - rect, - startAngle, - sweepAngle, - useCenter, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawPath( - _i2.Path? path, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawPath, - [ - path, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawImage( - _i2.Image? image, - _i2.Offset? offset, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawImage, - [ - image, - offset, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawImageRect( - _i2.Image? image, - _i2.Rect? src, - _i2.Rect? dst, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawImageRect, - [ - image, - src, - dst, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawImageNine( - _i2.Image? image, - _i2.Rect? center, - _i2.Rect? dst, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawImageNine, - [ - image, - center, - dst, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawPicture(_i2.Picture? picture) => super.noSuchMethod( - Invocation.method( - #drawPicture, - [picture], - ), - returnValueForMissingStub: null, - ); - - @override - void drawParagraph( - _i2.Paragraph? paragraph, - _i2.Offset? offset, - ) => - super.noSuchMethod( - Invocation.method( - #drawParagraph, - [ - paragraph, - offset, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawPoints( - _i2.PointMode? pointMode, - List<_i2.Offset>? points, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawPoints, - [ - pointMode, - points, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawRawPoints( - _i2.PointMode? pointMode, - _i7.Float32List? points, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawRawPoints, - [ - pointMode, - points, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawVertices( - _i2.Vertices? vertices, - _i2.BlendMode? blendMode, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawVertices, - [ - vertices, - blendMode, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawAtlas( - _i2.Image? atlas, - List<_i2.RSTransform>? transforms, - List<_i2.Rect>? rects, - List<_i2.Color>? colors, - _i2.BlendMode? blendMode, - _i2.Rect? cullRect, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawAtlas, - [ - atlas, - transforms, - rects, - colors, - blendMode, - cullRect, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawRawAtlas( - _i2.Image? atlas, - _i7.Float32List? rstTransforms, - _i7.Float32List? rects, - _i7.Int32List? colors, - _i2.BlendMode? blendMode, - _i2.Rect? cullRect, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawRawAtlas, - [ - atlas, - rstTransforms, - rects, - colors, - blendMode, - cullRect, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawShadow( - _i2.Path? path, - _i2.Color? color, - double? elevation, - bool? transparentOccluder, - ) => - super.noSuchMethod( - Invocation.method( - #drawShadow, - [ - path, - color, - elevation, - transparentOccluder, - ], - ), - returnValueForMissingStub: null, - ); -} - -/// A class which mocks [PaintingContext]. -/// -/// See the documentation for Mockito's code generation for more information. -class MockPaintingContext extends _i1.Mock implements _i3.PaintingContext { - MockPaintingContext() { - _i1.throwOnMissingStub(this); - } - - @override - _i2.Rect get estimatedBounds => (super.noSuchMethod( - Invocation.getter(#estimatedBounds), - returnValue: _FakeRect_0( - this, - Invocation.getter(#estimatedBounds), - ), - ) as _i2.Rect); - - @override - _i2.Canvas get canvas => (super.noSuchMethod( - Invocation.getter(#canvas), - returnValue: _FakeCanvas_1( - this, - Invocation.getter(#canvas), - ), - ) as _i2.Canvas); - - @override - void paintChild( - _i3.RenderObject? child, - _i2.Offset? offset, - ) => - super.noSuchMethod( - Invocation.method( - #paintChild, - [ - child, - offset, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void appendLayer(_i4.Layer? layer) => super.noSuchMethod( - Invocation.method( - #appendLayer, - [layer], - ), - returnValueForMissingStub: null, - ); - - @override - _i2.VoidCallback addCompositionCallback(_i4.CompositionCallback? callback) => - (super.noSuchMethod( - Invocation.method( - #addCompositionCallback, - [callback], - ), - returnValue: () {}, - ) as _i2.VoidCallback); - - @override - void stopRecordingIfNeeded() => super.noSuchMethod( - Invocation.method( - #stopRecordingIfNeeded, - [], - ), - returnValueForMissingStub: null, - ); - - @override - void setIsComplexHint() => super.noSuchMethod( - Invocation.method( - #setIsComplexHint, - [], - ), - returnValueForMissingStub: null, - ); - - @override - void setWillChangeHint() => super.noSuchMethod( - Invocation.method( - #setWillChangeHint, - [], - ), - returnValueForMissingStub: null, - ); - - @override - void addLayer(_i4.Layer? layer) => super.noSuchMethod( - Invocation.method( - #addLayer, - [layer], - ), - returnValueForMissingStub: null, - ); - - @override - void pushLayer( - _i4.ContainerLayer? childLayer, - _i3.PaintingContextCallback? painter, - _i2.Offset? offset, { - _i2.Rect? childPaintBounds, - }) => - super.noSuchMethod( - Invocation.method( - #pushLayer, - [ - childLayer, - painter, - offset, - ], - {#childPaintBounds: childPaintBounds}, - ), - returnValueForMissingStub: null, - ); - - @override - _i3.PaintingContext createChildContext( - _i4.ContainerLayer? childLayer, - _i2.Rect? bounds, - ) => - (super.noSuchMethod( - Invocation.method( - #createChildContext, - [ - childLayer, - bounds, - ], - ), - returnValue: _FakePaintingContext_2( - this, - Invocation.method( - #createChildContext, - [ - childLayer, - bounds, - ], - ), - ), - ) as _i3.PaintingContext); - - @override - _i4.ClipRectLayer? pushClipRect( - bool? needsCompositing, - _i2.Offset? offset, - _i2.Rect? clipRect, - _i3.PaintingContextCallback? painter, { - _i2.Clip? clipBehavior = _i2.Clip.hardEdge, - _i4.ClipRectLayer? oldLayer, - }) => - (super.noSuchMethod(Invocation.method( - #pushClipRect, - [ - needsCompositing, - offset, - clipRect, - painter, - ], - { - #clipBehavior: clipBehavior, - #oldLayer: oldLayer, - }, - )) as _i4.ClipRectLayer?); - - @override - _i4.ClipRRectLayer? pushClipRRect( - bool? needsCompositing, - _i2.Offset? offset, - _i2.Rect? bounds, - _i2.RRect? clipRRect, - _i3.PaintingContextCallback? painter, { - _i2.Clip? clipBehavior = _i2.Clip.antiAlias, - _i4.ClipRRectLayer? oldLayer, - }) => - (super.noSuchMethod(Invocation.method( - #pushClipRRect, - [ - needsCompositing, - offset, - bounds, - clipRRect, - painter, - ], - { - #clipBehavior: clipBehavior, - #oldLayer: oldLayer, - }, - )) as _i4.ClipRRectLayer?); - - @override - _i4.ClipPathLayer? pushClipPath( - bool? needsCompositing, - _i2.Offset? offset, - _i2.Rect? bounds, - _i2.Path? clipPath, - _i3.PaintingContextCallback? painter, { - _i2.Clip? clipBehavior = _i2.Clip.antiAlias, - _i4.ClipPathLayer? oldLayer, - }) => - (super.noSuchMethod(Invocation.method( - #pushClipPath, - [ - needsCompositing, - offset, - bounds, - clipPath, - painter, - ], - { - #clipBehavior: clipBehavior, - #oldLayer: oldLayer, - }, - )) as _i4.ClipPathLayer?); - - @override - _i4.ColorFilterLayer pushColorFilter( - _i2.Offset? offset, - _i2.ColorFilter? colorFilter, - _i3.PaintingContextCallback? painter, { - _i4.ColorFilterLayer? oldLayer, - }) => - (super.noSuchMethod( - Invocation.method( - #pushColorFilter, - [ - offset, - colorFilter, - painter, - ], - {#oldLayer: oldLayer}, - ), - returnValue: _FakeColorFilterLayer_3( - this, - Invocation.method( - #pushColorFilter, - [ - offset, - colorFilter, - painter, - ], - {#oldLayer: oldLayer}, - ), - ), - ) as _i4.ColorFilterLayer); - - @override - _i4.TransformLayer? pushTransform( - bool? needsCompositing, - _i2.Offset? offset, - _i8.Matrix4? transform, - _i3.PaintingContextCallback? painter, { - _i4.TransformLayer? oldLayer, - }) => - (super.noSuchMethod(Invocation.method( - #pushTransform, - [ - needsCompositing, - offset, - transform, - painter, - ], - {#oldLayer: oldLayer}, - )) as _i4.TransformLayer?); - - @override - _i4.OpacityLayer pushOpacity( - _i2.Offset? offset, - int? alpha, - _i3.PaintingContextCallback? painter, { - _i4.OpacityLayer? oldLayer, - }) => - (super.noSuchMethod( - Invocation.method( - #pushOpacity, - [ - offset, - alpha, - painter, - ], - {#oldLayer: oldLayer}, - ), - returnValue: _FakeOpacityLayer_4( - this, - Invocation.method( - #pushOpacity, - [ - offset, - alpha, - painter, - ], - {#oldLayer: oldLayer}, - ), - ), - ) as _i4.OpacityLayer); - - @override - void clipPathAndPaint( - _i2.Path? path, - _i2.Clip? clipBehavior, - _i2.Rect? bounds, - _i2.VoidCallback? painter, - ) => - super.noSuchMethod( - Invocation.method( - #clipPathAndPaint, - [ - path, - clipBehavior, - bounds, - painter, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void clipRRectAndPaint( - _i2.RRect? rrect, - _i2.Clip? clipBehavior, - _i2.Rect? bounds, - _i2.VoidCallback? painter, - ) => - super.noSuchMethod( - Invocation.method( - #clipRRectAndPaint, - [ - rrect, - clipBehavior, - bounds, - painter, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void clipRectAndPaint( - _i2.Rect? rect, - _i2.Clip? clipBehavior, - _i2.Rect? bounds, - _i2.VoidCallback? painter, - ) => - super.noSuchMethod( - Invocation.method( - #clipRectAndPaint, - [ - rect, - clipBehavior, - bounds, - painter, - ], - ), - returnValueForMissingStub: null, - ); -} - -/// A class which mocks [BuildContext]. -/// -/// See the documentation for Mockito's code generation for more information. -class MockBuildContext extends _i1.Mock implements _i6.BuildContext { - MockBuildContext() { - _i1.throwOnMissingStub(this); - } - - @override - _i6.Widget get widget => (super.noSuchMethod( - Invocation.getter(#widget), - returnValue: _FakeWidget_5( - this, - Invocation.getter(#widget), - ), - ) as _i6.Widget); - - @override - bool get mounted => (super.noSuchMethod( - Invocation.getter(#mounted), - returnValue: false, - ) as bool); - - @override - bool get debugDoingBuild => (super.noSuchMethod( - Invocation.getter(#debugDoingBuild), - returnValue: false, - ) as bool); - - @override - _i6.InheritedWidget dependOnInheritedElement( - _i6.InheritedElement? ancestor, { - Object? aspect, - }) => - (super.noSuchMethod( - Invocation.method( - #dependOnInheritedElement, - [ancestor], - {#aspect: aspect}, - ), - returnValue: _FakeInheritedWidget_6( - this, - Invocation.method( - #dependOnInheritedElement, - [ancestor], - {#aspect: aspect}, - ), - ), - ) as _i6.InheritedWidget); - - @override - void visitAncestorElements(_i6.ConditionalElementVisitor? visitor) => - super.noSuchMethod( - Invocation.method( - #visitAncestorElements, - [visitor], - ), - returnValueForMissingStub: null, - ); - - @override - void visitChildElements(_i6.ElementVisitor? visitor) => super.noSuchMethod( - Invocation.method( - #visitChildElements, - [visitor], - ), - returnValueForMissingStub: null, - ); - - @override - void dispatchNotification(_i9.Notification? notification) => - super.noSuchMethod( - Invocation.method( - #dispatchNotification, - [notification], - ), - returnValueForMissingStub: null, - ); - - @override - _i5.DiagnosticsNode describeElement( - String? name, { - _i5.DiagnosticsTreeStyle? style = _i5.DiagnosticsTreeStyle.errorProperty, - }) => - (super.noSuchMethod( - Invocation.method( - #describeElement, - [name], - {#style: style}, - ), - returnValue: _FakeDiagnosticsNode_7( - this, - Invocation.method( - #describeElement, - [name], - {#style: style}, - ), - ), - ) as _i5.DiagnosticsNode); - - @override - _i5.DiagnosticsNode describeWidget( - String? name, { - _i5.DiagnosticsTreeStyle? style = _i5.DiagnosticsTreeStyle.errorProperty, - }) => - (super.noSuchMethod( - Invocation.method( - #describeWidget, - [name], - {#style: style}, - ), - returnValue: _FakeDiagnosticsNode_7( - this, - Invocation.method( - #describeWidget, - [name], - {#style: style}, - ), - ), - ) as _i5.DiagnosticsNode); - - @override - List<_i5.DiagnosticsNode> describeMissingAncestor( - {required Type? expectedAncestorType}) => - (super.noSuchMethod( - Invocation.method( - #describeMissingAncestor, - [], - {#expectedAncestorType: expectedAncestorType}, - ), - returnValue: <_i5.DiagnosticsNode>[], - ) as List<_i5.DiagnosticsNode>); - - @override - _i5.DiagnosticsNode describeOwnershipChain(String? name) => - (super.noSuchMethod( - Invocation.method( - #describeOwnershipChain, - [name], - ), - returnValue: _FakeDiagnosticsNode_7( - this, - Invocation.method( - #describeOwnershipChain, - [name], - ), - ), - ) as _i5.DiagnosticsNode); -} - -/// A class which mocks [BarChartPainter]. -/// -/// See the documentation for Mockito's code generation for more information. -class MockBarChartPainter extends _i1.Mock implements _i10.BarChartPainter { - MockBarChartPainter() { - _i1.throwOnMissingStub(this); - } - - @override - void paint( - _i6.BuildContext? context, - _i11.CanvasWrapper? canvasWrapper, - _i12.PaintHolder<_i13.BarChartData>? holder, - ) => - super.noSuchMethod( - Invocation.method( - #paint, - [ - context, - canvasWrapper, - holder, - ], - ), - returnValueForMissingStub: null, - ); - - @override - List<_i10.GroupBarsPosition> calculateGroupAndBarsPosition( - _i2.Size? viewSize, - List? groupsX, - List<_i13.BarChartGroupData>? barGroups, - ) => - (super.noSuchMethod( - Invocation.method( - #calculateGroupAndBarsPosition, - [ - viewSize, - groupsX, - barGroups, - ], - ), - returnValue: <_i10.GroupBarsPosition>[], - ) as List<_i10.GroupBarsPosition>); - - @override - void drawBars( - _i11.CanvasWrapper? canvasWrapper, - List<_i10.GroupBarsPosition>? groupBarsPosition, - _i12.PaintHolder<_i13.BarChartData>? holder, - ) => - super.noSuchMethod( - Invocation.method( - #drawBars, - [ - canvasWrapper, - groupBarsPosition, - holder, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawTouchTooltip( - _i6.BuildContext? context, - _i11.CanvasWrapper? canvasWrapper, - List<_i10.GroupBarsPosition>? groupPositions, - _i13.BarTouchTooltipData? tooltipData, - _i13.BarChartGroupData? showOnBarGroup, - int? barGroupIndex, - _i13.BarChartRodData? showOnRodData, - int? barRodIndex, - _i12.PaintHolder<_i13.BarChartData>? holder, - ) => - super.noSuchMethod( - Invocation.method( - #drawTouchTooltip, - [ - context, - canvasWrapper, - groupPositions, - tooltipData, - showOnBarGroup, - barGroupIndex, - showOnRodData, - barRodIndex, - holder, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawStackItemBorderStroke( - _i11.CanvasWrapper? canvasWrapper, - _i13.BarChartRodStackItem? stackItem, - int? index, - int? rodStacksSize, - double? barThickSize, - _i2.RRect? barRRect, - _i2.Size? drawSize, - _i12.PaintHolder<_i13.BarChartData>? holder, - ) => - super.noSuchMethod( - Invocation.method( - #drawStackItemBorderStroke, - [ - canvasWrapper, - stackItem, - index, - rodStacksSize, - barThickSize, - barRRect, - drawSize, - holder, - ], - ), - returnValueForMissingStub: null, - ); - - @override - _i13.BarTouchedSpot? handleTouch( - _i2.Offset? localPosition, - _i2.Size? viewSize, - _i12.PaintHolder<_i13.BarChartData>? holder, - ) => - (super.noSuchMethod(Invocation.method( - #handleTouch, - [ - localPosition, - viewSize, - holder, - ], - )) as _i13.BarTouchedSpot?); - - @override - void drawGrid( - _i11.CanvasWrapper? canvasWrapper, - _i12.PaintHolder<_i13.BarChartData>? holder, - ) => - super.noSuchMethod( - Invocation.method( - #drawGrid, - [ - canvasWrapper, - holder, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawBackground( - _i11.CanvasWrapper? canvasWrapper, - _i12.PaintHolder<_i13.BarChartData>? holder, - ) => - super.noSuchMethod( - Invocation.method( - #drawBackground, - [ - canvasWrapper, - holder, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawRangeAnnotation( - _i11.CanvasWrapper? canvasWrapper, - _i12.PaintHolder<_i13.BarChartData>? holder, - ) => - super.noSuchMethod( - Invocation.method( - #drawRangeAnnotation, - [ - canvasWrapper, - holder, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawExtraLines( - _i6.BuildContext? context, - _i11.CanvasWrapper? canvasWrapper, - _i12.PaintHolder<_i13.BarChartData>? holder, - ) => - super.noSuchMethod( - Invocation.method( - #drawExtraLines, - [ - context, - canvasWrapper, - holder, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawHorizontalLines( - _i6.BuildContext? context, - _i11.CanvasWrapper? canvasWrapper, - _i12.PaintHolder<_i13.BarChartData>? holder, - _i2.Size? viewSize, - ) => - super.noSuchMethod( - Invocation.method( - #drawHorizontalLines, - [ - context, - canvasWrapper, - holder, - viewSize, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawVerticalLines( - _i6.BuildContext? context, - _i11.CanvasWrapper? canvasWrapper, - _i12.PaintHolder<_i13.BarChartData>? holder, - _i2.Size? viewSize, - ) => - super.noSuchMethod( - Invocation.method( - #drawVerticalLines, - [ - context, - canvasWrapper, - holder, - viewSize, - ], - ), - returnValueForMissingStub: null, - ); - - @override - double getPixelX( - double? spotX, - _i2.Size? viewSize, - _i12.PaintHolder<_i13.BarChartData>? holder, - ) => - (super.noSuchMethod( - Invocation.method( - #getPixelX, - [ - spotX, - viewSize, - holder, - ], - ), - returnValue: 0.0, - ) as double); - - @override - double getPixelY( - double? spotY, - _i2.Size? viewSize, - _i12.PaintHolder<_i13.BarChartData>? holder, - ) => - (super.noSuchMethod( - Invocation.method( - #getPixelY, - [ - spotY, - viewSize, - holder, - ], - ), - returnValue: 0.0, - ) as double); - - @override - double getTooltipLeft( - double? dx, - double? tooltipWidth, - _i13.FLHorizontalAlignment? tooltipHorizontalAlignment, - double? tooltipHorizontalOffset, - ) => - (super.noSuchMethod( - Invocation.method( - #getTooltipLeft, - [ - dx, - tooltipWidth, - tooltipHorizontalAlignment, - tooltipHorizontalOffset, - ], - ), - returnValue: 0.0, - ) as double); -} diff --git a/test/chart/base/axis_chart/axis_chart_data_test.dart b/test/chart/base/axis_chart/axis_chart_data_test.dart deleted file mode 100644 index dbe5eef6b4..0000000000 --- a/test/chart/base/axis_chart/axis_chart_data_test.dart +++ /dev/null @@ -1,279 +0,0 @@ -import 'package:fl_chart/fl_chart.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_test/flutter_test.dart'; -import '../../data_pool.dart'; - -void main() { - group('AxisChartData data equality check', () { - test('AxisTitle equality test', () { - expect(MockData.axisTitles1 == MockData.axisTitles1Clone, true); - expect(MockData.axisTitles1 == MockData.axisTitles2, false); - expect(MockData.axisTitles1 == MockData.axisTitles3, false); - expect(MockData.axisTitles1 == MockData.axisTitles4, false); - expect(MockData.axisTitles1 == MockData.axisTitles5, false); - }); - - test('FlTitlesData equality test', () { - expect(MockData.flTitlesData1 == MockData.flTitlesData1Clone, true); - expect(MockData.flTitlesData1 == MockData.flTitlesData2, false); - expect(MockData.flTitlesData1 == MockData.flTitlesData3, false); - expect(MockData.flTitlesData1 == MockData.flTitlesData4, false); - expect(MockData.flTitlesData1 == MockData.flTitlesData5, false); - expect(MockData.flTitlesData1 == MockData.flTitlesData6, false); - }); - - test('SideTitles equality test', () { - expect(MockData.sideTitles1 == MockData.sideTitles1Clone, true); - expect(MockData.sideTitles1 == MockData.sideTitles2, false); - expect(MockData.sideTitles1 == MockData.sideTitles3, false); - expect(MockData.sideTitles1 == MockData.sideTitles4, false); - expect(MockData.sideTitles1 == MockData.sideTitles5, false); - expect(MockData.sideTitles1 == MockData.sideTitles6, false); - }); - - test('SideTitleFitInsideData equality test', () { - expect( - MockData.sideTitleFitInsideData1 == - MockData.sideTitleFitInsideData1Clone, - true, - ); - expect( - MockData.sideTitleFitInsideData1 == MockData.sideTitleFitInsideData2, - false, - ); - expect( - MockData.sideTitleFitInsideData1 == MockData.sideTitleFitInsideData3, - false, - ); - expect( - MockData.sideTitleFitInsideData1 == MockData.sideTitleFitInsideData4, - false, - ); - expect( - MockData.sideTitleFitInsideData1 == MockData.sideTitleFitInsideData5, - false, - ); - expect( - MockData.sideTitleFitInsideData1 == MockData.sideTitleFitInsideData6, - false, - ); - }); - - test('FlSpot equality test', () { - expect(flSpot1 == flSpot1Clone, true); - - expect(flSpot1 == flSpot2, false); - - expect(flSpot2 == flSpot2Clone, true); - }); - - test('FlGridData equality test', () { - expect(flGridData1 == flGridData1Clone, true); - expect(flGridData1 == flGridData2, false); - expect(flGridData1 == flGridData3, false); - expect(flGridData1 == flGridData4, false); - expect(flGridData1 == flGridData5, false); - }); - - test('FlLine equality test', () { - expect(flLine1 == flLine1Clone, true); - - expect( - flLine1 == - const FlLine( - color: Colors.green, - strokeWidth: 1.001, - dashArray: [1, 2, 3], - ), - false, - ); - - expect( - flLine1 == - const FlLine( - color: Colors.green, - strokeWidth: 1, - dashArray: [ - 1, - ], - ), - false, - ); - - expect( - flLine1 == - const FlLine(color: Colors.green, strokeWidth: 1, dashArray: []), - false, - ); - - expect( - flLine1 == const FlLine(color: Colors.green, strokeWidth: 1), - false, - ); - - expect( - flLine1 == - const FlLine( - color: Colors.white, - strokeWidth: 1, - dashArray: [1, 2, 3], - ), - false, - ); - - expect( - flLine1 == - const FlLine( - color: Colors.green, - strokeWidth: 100, - dashArray: [1, 2, 3], - ), - false, - ); - }); - - test('RangeAnnotations equality test', () { - expect(rangeAnnotations1 == rangeAnnotations1Clone, true); - - expect(rangeAnnotations1 == rangeAnnotations2, false); - - expect( - rangeAnnotations1 == - RangeAnnotations( - horizontalRangeAnnotations: [ - horizontalRangeAnnotation1Clone, - horizontalRangeAnnotation1, - ], - verticalRangeAnnotations: [ - verticalRangeAnnotation1Clone, - verticalRangeAnnotation1, - ], - ), - true, - ); - - expect( - rangeAnnotations1 == - RangeAnnotations( - horizontalRangeAnnotations: [ - horizontalRangeAnnotation1Clone, - ], - verticalRangeAnnotations: [ - verticalRangeAnnotation1Clone, - ], - ), - false, - ); - - expect( - rangeAnnotations1 == - RangeAnnotations( - horizontalRangeAnnotations: [], - verticalRangeAnnotations: [ - verticalRangeAnnotation1, - verticalRangeAnnotation1Clone, - ], - ), - false, - ); - - expect( - rangeAnnotations1 == - RangeAnnotations( - horizontalRangeAnnotations: [ - horizontalRangeAnnotation1, - horizontalRangeAnnotation1Clone, - ], - verticalRangeAnnotations: [ - verticalRangeAnnotation1, - VerticalRangeAnnotation( - color: Colors.green, - x2: 12.01, - x1: 12.1, - ), - ], - ), - false, - ); - }); - - test('HorizontalRangeAnnotation equality test', () { - expect( - horizontalRangeAnnotation1 == horizontalRangeAnnotation1Clone, - true, - ); - - expect( - horizontalRangeAnnotation1 == - HorizontalRangeAnnotation( - color: Colors.green, - y2: 12.1, - y1: 12.1, - ), - false, - ); - - expect( - horizontalRangeAnnotation1 == - HorizontalRangeAnnotation( - color: Colors.green, - y2: 12, - y1: 12.1, - ), - true, - ); - - expect( - horizontalRangeAnnotation1 == - HorizontalRangeAnnotation( - color: Colors.green, - y2: 12.1, - y1: 12, - ), - false, - ); - - expect( - horizontalRangeAnnotation1 == - HorizontalRangeAnnotation( - color: Colors.green.withOpacity(0.5), - y2: 12, - y1: 12.1, - ), - false, - ); - }); - - test('VerticalRangeAnnotation equality test', () { - expect(verticalRangeAnnotation1 == verticalRangeAnnotation1Clone, true); - - expect( - verticalRangeAnnotation1 == - VerticalRangeAnnotation(color: Colors.green, x2: 12.1, x1: 12.1), - false, - ); - - expect( - verticalRangeAnnotation1 == - VerticalRangeAnnotation(color: Colors.green, x2: 12, x1: 12.1), - true, - ); - - expect( - verticalRangeAnnotation1 == - VerticalRangeAnnotation(color: Colors.green, x2: 12.1, x1: 12), - false, - ); - - expect( - verticalRangeAnnotation1 == - VerticalRangeAnnotation( - color: Colors.green.withOpacity(0.5), - x2: 12, - x1: 12.1, - ), - false, - ); - }); - }); -} diff --git a/test/chart/base/axis_chart/axis_chart_extensions_test.dart b/test/chart/base/axis_chart/axis_chart_extensions_test.dart deleted file mode 100644 index 424f4328ba..0000000000 --- a/test/chart/base/axis_chart/axis_chart_extensions_test.dart +++ /dev/null @@ -1,113 +0,0 @@ -import 'package:fl_chart/fl_chart.dart'; -import 'package:fl_chart/src/chart/base/axis_chart/axis_chart_extensions.dart'; -import 'package:flutter_test/flutter_test.dart'; - -import '../../data_pool.dart'; - -void main() { - group('splitByNullSpots()', () { - test('test 1 - null spots start', () { - final spots = [ - FlSpot.nullSpot, - FlSpot.nullSpot, - FlSpot.nullSpot, - FlSpot.nullSpot, - FlSpot.nullSpot, - MockData.flSpot1, - MockData.flSpot2, - MockData.flSpot3, - ]; - final result = spots.splitByNullSpots(); - expect( - result, - [ - [ - MockData.flSpot1, - MockData.flSpot2, - MockData.flSpot3, - ] - ], - ); - }); - test('test 2 - null spots end', () { - final spots = [ - MockData.flSpot1, - MockData.flSpot2, - MockData.flSpot3, - FlSpot.nullSpot, - FlSpot.nullSpot, - FlSpot.nullSpot, - ]; - final result = spots.splitByNullSpots(); - expect( - result, - [ - [ - MockData.flSpot1, - MockData.flSpot2, - MockData.flSpot3, - ] - ], - ); - }); - test('test 3 - null spots around', () { - final spots = [ - FlSpot.nullSpot, - FlSpot.nullSpot, - FlSpot.nullSpot, - FlSpot.nullSpot, - FlSpot.nullSpot, - MockData.flSpot1, - MockData.flSpot2, - MockData.flSpot3, - FlSpot.nullSpot, - FlSpot.nullSpot, - FlSpot.nullSpot, - ]; - final result = spots.splitByNullSpots(); - expect( - result, - [ - [ - MockData.flSpot1, - MockData.flSpot2, - MockData.flSpot3, - ] - ], - ); - }); - test('test 4 - null spots between', () { - final spots = [ - MockData.flSpot1, - MockData.flSpot2, - FlSpot.nullSpot, - MockData.flSpot3, - FlSpot.nullSpot, - MockData.flSpot4, - MockData.flSpot5, - FlSpot.nullSpot, - MockData.flSpot1, - ]; - final result = spots.splitByNullSpots(); - expect( - result, - [ - [ - MockData.flSpot1, - MockData.flSpot2, - ], - [ - MockData.flSpot3, - ], - [ - MockData.flSpot4, - MockData.flSpot5, - ], - [ - MockData.flSpot1, - ] - ], - ); - }); - }); -} diff --git a/test/chart/base/axis_chart/axis_chart_helper_test.dart b/test/chart/base/axis_chart/axis_chart_helper_test.dart deleted file mode 100644 index 8bdb4201ab..0000000000 --- a/test/chart/base/axis_chart/axis_chart_helper_test.dart +++ /dev/null @@ -1,204 +0,0 @@ -import 'package:fl_chart/fl_chart.dart'; -import 'package:fl_chart/src/chart/base/axis_chart/axis_chart_helper.dart'; -import 'package:flutter_test/flutter_test.dart'; - -void main() { - const tolerance = 0.0001; - group('iterateThroughAxis()', () { - test('test 1', () { - final results = []; - final axisValues = AxisChartHelper().iterateThroughAxis( - min: 0, - max: 0.1, - interval: 0.001, - baseLine: 0, - ); - for (final axisValue in axisValues) { - results.add(axisValue); - } - expect(results.length, 101); - }); - - test('test 2', () { - final results = []; - final axisValues = AxisChartHelper().iterateThroughAxis( - min: 0, - minIncluded: false, - max: 0.1, - maxIncluded: false, - interval: 0.001, - baseLine: 0, - ); - for (final axisValue in axisValues) { - results.add(axisValue); - } - expect(results.length, 99); - expect(results[0], closeTo(0.001, tolerance)); - expect(results[98], closeTo(0.099, tolerance)); - }); - - test('test 3', () { - final results = []; - final axisValues = AxisChartHelper().iterateThroughAxis( - min: 0, - max: 1000, - interval: 200, - baseLine: 0, - ); - for (final axisValue in axisValues) { - results.add(axisValue); - } - expect(results.length, 6); - expect(results[0], 0); - expect(results[1], 200); - expect(results[2], 400); - expect(results[3], 600); - expect(results[4], 800); - expect(results[5], 1000); - }); - - test('test 4', () { - final results = []; - final axisValues = AxisChartHelper().iterateThroughAxis( - min: 0, - max: 10, - interval: 3, - baseLine: 0, - ); - for (final axisValue in axisValues) { - results.add(axisValue); - } - expect(results.length, 5); - expect(results[0], 0); - expect(results[1], 3); - expect(results[2], 6); - expect(results[3], 9); - expect(results[4], 10); - }); - - test('test 4', () { - final results = []; - final axisValues = AxisChartHelper().iterateThroughAxis( - min: 0, - minIncluded: false, - max: 10, - maxIncluded: false, - interval: 3, - baseLine: 0, - ); - for (final axisValue in axisValues) { - results.add(axisValue); - } - expect(results.length, 3); - expect(results[0], 3); - expect(results[1], 6); - expect(results[2], 9); - }); - - test('test 4', () { - final results = []; - final axisValues = AxisChartHelper().iterateThroughAxis( - min: 35, - max: 130, - interval: 50, - baseLine: 0, - ); - for (final axisValue in axisValues) { - results.add(axisValue); - } - expect(results.length, 4); - expect(results[0], 35); - expect(results[1], 50); - expect(results[2], 100); - expect(results[3], 130); - }); - }); - - group('calcFitInsideOffset', () { - group('not overflowed', () { - test('vertical axis', () { - const result = Offset.zero; - - final offset = AxisChartHelper().calcFitInsideOffset( - axisSide: AxisSide.left, - childSize: 10, - parentAxisSize: 100, - axisPosition: 20, - distanceFromEdge: 0, - ); - - expect(offset, result); - }); - - test('horizontal axis', () { - const result = Offset.zero; - - final offset = AxisChartHelper().calcFitInsideOffset( - axisSide: AxisSide.bottom, - childSize: 10, - parentAxisSize: 100, - axisPosition: 20, - distanceFromEdge: 0, - ); - - expect(offset, result); - }); - }); - - group('overflowed', () { - test('vertical axis at start', () { - const result = Offset(0, 5); - - final offset = AxisChartHelper().calcFitInsideOffset( - axisSide: AxisSide.left, - childSize: 10, - parentAxisSize: 100, - axisPosition: 0, - distanceFromEdge: 0, - ); - - expect(offset, result); - }); - test('vertical axis at end', () { - const result = Offset(0, -5); - - final offset = AxisChartHelper().calcFitInsideOffset( - axisSide: AxisSide.left, - childSize: 10, - parentAxisSize: 100, - axisPosition: 100, - distanceFromEdge: 0, - ); - - expect(offset, result); - }); - - test('horizontal axis at start', () { - const result = Offset(5, 0); - - final offset = AxisChartHelper().calcFitInsideOffset( - axisSide: AxisSide.bottom, - childSize: 10, - parentAxisSize: 100, - axisPosition: 0, - distanceFromEdge: 0, - ); - - expect(offset, result); - }); - test('horizontal axis at end', () { - const result = Offset(-5, 0); - - final offset = AxisChartHelper().calcFitInsideOffset( - axisSide: AxisSide.bottom, - childSize: 10, - parentAxisSize: 100, - axisPosition: 100, - distanceFromEdge: 0, - ); - - expect(offset, result); - }); - }); - }); -} diff --git a/test/chart/base/axis_chart/axis_chart_scaffold_widget_test.dart b/test/chart/base/axis_chart/axis_chart_scaffold_widget_test.dart deleted file mode 100644 index 75774e4be3..0000000000 --- a/test/chart/base/axis_chart/axis_chart_scaffold_widget_test.dart +++ /dev/null @@ -1,359 +0,0 @@ -import 'package:fl_chart/fl_chart.dart'; -import 'package:fl_chart/src/chart/base/axis_chart/axis_chart_scaffold_widget.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_test/flutter_test.dart'; - -void main() { - const viewSize = Size(400, 400); - - final lineChartDataBase = LineChartData( - minX: 0, - maxX: 10, - minY: 0, - maxY: 10, - ); - - final lineChartDataWithNoTitles = lineChartDataBase.copyWith( - titlesData: const FlTitlesData( - show: false, - leftTitles: AxisTitles(), - topTitles: AxisTitles(), - rightTitles: AxisTitles(), - bottomTitles: AxisTitles(), - ), - borderData: FlBorderData(show: false), - ); - - final lineChartDataWithAllTitles = lineChartDataBase.copyWith( - borderData: FlBorderData( - show: true, - border: Border.all( - color: Colors.red, - width: 10, - ), - ), - titlesData: FlTitlesData( - leftTitles: AxisTitles( - axisNameWidget: const Icon(Icons.arrow_left), - axisNameSize: 10, - sideTitles: SideTitles( - showTitles: true, - reservedSize: 10, - getTitlesWidget: (double value, TitleMeta meta) { - return Text('L-${value.toInt()}'); - }, - interval: 1, - ), - ), - topTitles: AxisTitles( - axisNameWidget: const Icon(Icons.arrow_drop_up), - axisNameSize: 20, - sideTitles: SideTitles( - showTitles: true, - reservedSize: 20, - getTitlesWidget: (double value, TitleMeta meta) { - return Text('T-${value.toInt()}'); - }, - interval: 1, - ), - ), - rightTitles: AxisTitles( - axisNameWidget: const Icon(Icons.arrow_right), - axisNameSize: 30, - sideTitles: SideTitles( - showTitles: true, - reservedSize: 30, - getTitlesWidget: (double value, TitleMeta meta) { - return Text('R-${value.toInt()}'); - }, - interval: 1, - ), - ), - bottomTitles: AxisTitles( - axisNameWidget: const Icon(Icons.arrow_drop_down), - axisNameSize: 40, - sideTitles: SideTitles( - showTitles: true, - reservedSize: 40, - getTitlesWidget: (double value, TitleMeta meta) { - return Text('B-${value.toInt()}'); - }, - interval: 1, - ), - ), - ), - ); - - final lineChartDataWithOnlyLeftTitles = lineChartDataBase.copyWith( - borderData: FlBorderData( - show: true, - border: const Border( - left: BorderSide( - color: Colors.red, - width: 6, - ), - ), - ), - titlesData: FlTitlesData( - leftTitles: AxisTitles( - axisNameWidget: const Icon(Icons.arrow_left), - axisNameSize: 10, - sideTitles: SideTitles( - showTitles: true, - reservedSize: 10, - getTitlesWidget: (double value, TitleMeta meta) { - return Text('L-${value.toInt()}'); - }, - interval: 1, - ), - ), - topTitles: const AxisTitles(), - rightTitles: const AxisTitles(), - bottomTitles: const AxisTitles(), - ), - ); - - final lineChartDataWithOnlyLeftTitlesWithoutAxisName = - lineChartDataBase.copyWith( - borderData: FlBorderData(show: false), - titlesData: FlTitlesData( - leftTitles: AxisTitles( - axisNameSize: 10, - sideTitles: SideTitles( - showTitles: true, - reservedSize: 10, - getTitlesWidget: (double value, TitleMeta meta) { - return Text('L-${value.toInt()}'); - }, - interval: 1, - ), - ), - topTitles: const AxisTitles(), - rightTitles: const AxisTitles(), - bottomTitles: const AxisTitles(), - ), - ); - - final lineChartDataWithOnlyLeftAxisNameWithoutSideTitles = - lineChartDataBase.copyWith( - borderData: FlBorderData(show: false), - titlesData: FlTitlesData( - leftTitles: AxisTitles( - axisNameSize: 10, - axisNameWidget: const Icon(Icons.arrow_left), - sideTitles: SideTitles( - reservedSize: 10, - getTitlesWidget: (double value, TitleMeta meta) { - return Text('L-${value.toInt()}'); - }, - interval: 1, - ), - ), - topTitles: const AxisTitles(), - rightTitles: const AxisTitles(), - bottomTitles: const AxisTitles(), - ), - ); - - testWidgets( - 'LineChart with no titles', - (WidgetTester tester) async { - Size? chartDrawingSize; - await tester.pumpWidget( - MaterialApp( - home: Scaffold( - body: Center( - child: SizedBox( - width: viewSize.width, - height: viewSize.height, - child: AxisChartScaffoldWidget( - chart: LayoutBuilder( - builder: (context, constraints) { - chartDrawingSize = constraints.biggest; - return const ColoredBox( - color: Colors.red, - ); - }, - ), - data: lineChartDataWithNoTitles, - ), - ), - ), - ), - ), - ); - expect(chartDrawingSize, viewSize); - expect(find.byType(Text), findsNothing); - expect(find.byType(Icon), findsNothing); - }, - ); - - testWidgets( - 'LineChart with all titles', - (WidgetTester tester) async { - Size? chartDrawingSize; - await tester.pumpWidget( - MaterialApp( - home: Scaffold( - body: Center( - child: SizedBox( - width: viewSize.width, - height: viewSize.height, - child: AxisChartScaffoldWidget( - chart: LayoutBuilder( - builder: (context, constraints) { - chartDrawingSize = constraints.biggest; - return const ColoredBox( - color: Colors.red, - ); - }, - ), - data: lineChartDataWithAllTitles, - ), - ), - ), - ), - ), - ); - - Future checkSide(AxisSide side) async { - final axisChar = switch (side) { - AxisSide.left => 'L', - AxisSide.top => 'T', - AxisSide.right => 'R', - AxisSide.bottom => 'B', - }; - for (var i = 0; i <= 10; i++) { - expect(find.text('$axisChar-$i'), findsOneWidget); - } - } - - expect(chartDrawingSize, const Size(300, 260)); - expect(find.byIcon(Icons.arrow_left), findsOneWidget); - await checkSide(AxisSide.left); - - expect(find.byIcon(Icons.arrow_drop_up), findsOneWidget); - await checkSide(AxisSide.top); - - expect(find.byIcon(Icons.arrow_right), findsOneWidget); - await checkSide(AxisSide.right); - - expect(find.byIcon(Icons.arrow_drop_down), findsOneWidget); - await checkSide(AxisSide.bottom); - - expect(find.byType(Text), findsNWidgets(44)); - expect(find.byType(Icon), findsNWidgets(4)); - }, - ); - - testWidgets( - 'LineChart with only left titles', - (WidgetTester tester) async { - Size? chartDrawingSize; - await tester.pumpWidget( - MaterialApp( - home: Scaffold( - body: Center( - child: SizedBox( - width: viewSize.width, - height: viewSize.height, - child: AxisChartScaffoldWidget( - chart: LayoutBuilder( - builder: (context, constraints) { - chartDrawingSize = constraints.biggest; - return const ColoredBox( - color: Colors.red, - ); - }, - ), - data: lineChartDataWithOnlyLeftTitles, - ), - ), - ), - ), - ), - ); - - expect(chartDrawingSize, const Size(374, 400)); - expect(find.byIcon(Icons.arrow_left), findsOneWidget); - for (var i = 0; i <= 10; i++) { - expect(find.text('L-$i'), findsOneWidget); - } - - expect(find.byType(Text), findsNWidgets(11)); - expect(find.byType(Icon), findsNWidgets(1)); - }, - ); - - testWidgets( - 'LineChart with only left titles without axis name', - (WidgetTester tester) async { - Size? chartDrawingSize; - await tester.pumpWidget( - MaterialApp( - home: Scaffold( - body: Center( - child: SizedBox( - width: viewSize.width, - height: viewSize.height, - child: AxisChartScaffoldWidget( - chart: LayoutBuilder( - builder: (context, constraints) { - chartDrawingSize = constraints.biggest; - return const ColoredBox( - color: Colors.red, - ); - }, - ), - data: lineChartDataWithOnlyLeftTitlesWithoutAxisName, - ), - ), - ), - ), - ), - ); - - expect(chartDrawingSize, const Size(390, 400)); - for (var i = 0; i <= 10; i++) { - expect(find.text('L-$i'), findsOneWidget); - } - - expect(find.byType(Text), findsNWidgets(11)); - expect(find.byType(Icon), findsNothing); - }, - ); - - testWidgets( - 'LineChart with only left axis name without side titles', - (WidgetTester tester) async { - Size? chartDrawingSize; - await tester.pumpWidget( - MaterialApp( - home: Scaffold( - body: Center( - child: SizedBox( - width: viewSize.width, - height: viewSize.height, - child: AxisChartScaffoldWidget( - chart: LayoutBuilder( - builder: (context, constraints) { - chartDrawingSize = constraints.biggest; - return const ColoredBox( - color: Colors.red, - ); - }, - ), - data: lineChartDataWithOnlyLeftAxisNameWithoutSideTitles, - ), - ), - ), - ), - ), - ); - - expect(chartDrawingSize, const Size(390, 400)); - expect(find.byType(Text), findsNothing); - expect(find.byType(Icon), findsOneWidget); - }, - ); -} diff --git a/test/chart/base/axis_chart/axis_chart_widgets_test.dart b/test/chart/base/axis_chart/axis_chart_widgets_test.dart deleted file mode 100644 index 90328166fe..0000000000 --- a/test/chart/base/axis_chart/axis_chart_widgets_test.dart +++ /dev/null @@ -1,247 +0,0 @@ -import 'package:fl_chart/fl_chart.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_test/flutter_test.dart'; - -void main() { - group( - 'SideTitle without FitInside enabled', - () { - testWidgets( - 'SideTitleWidget left', - (WidgetTester tester) async { - await tester.pumpWidget( - const MaterialApp( - home: Scaffold( - body: SideTitleWidget( - axisSide: AxisSide.left, - child: Text('1s'), - ), - ), - ), - ); - expect(find.byType(Transform), findsAtLeastNWidgets(2)); - expect(find.byType(Container), findsOneWidget); - expect(find.text('1s'), findsOneWidget); - }, - ); - - testWidgets( - 'SideTitleWidget top', - (WidgetTester tester) async { - await tester.pumpWidget( - const MaterialApp( - home: Scaffold( - body: SideTitleWidget( - axisSide: AxisSide.top, - child: Text('1s'), - ), - ), - ), - ); - expect(find.byType(Transform), findsAtLeastNWidgets(2)); - expect(find.byType(Container), findsOneWidget); - expect(find.text('1s'), findsOneWidget); - }, - ); - - testWidgets( - 'SideTitleWidget right', - (WidgetTester tester) async { - await tester.pumpWidget( - const MaterialApp( - home: Scaffold( - body: SideTitleWidget( - axisSide: AxisSide.right, - child: Text('1s'), - ), - ), - ), - ); - expect(find.byType(Transform), findsAtLeastNWidgets(2)); - expect(find.byType(Container), findsOneWidget); - expect(find.text('1s'), findsOneWidget); - }, - ); - - testWidgets( - 'SideTitleWidget bottom', - (WidgetTester tester) async { - const widgetKey = Key('SideTitleWidget'); - const sideTitleWidget = SideTitleWidget( - key: widgetKey, - axisSide: AxisSide.bottom, - child: Text('1s'), - ); - - await tester.pumpWidget( - const MaterialApp( - home: Scaffold( - body: sideTitleWidget, - ), - ), - ); - - final element = - tester.element(find.byKey(widgetKey)) as StatefulElement; - final state = element.state as State; - expect(state.widget, equals(sideTitleWidget)); - expect(element.renderObject!.attached, isTrue); - - expect(find.byType(Transform), findsAtLeastNWidgets(2)); - expect(find.byType(Container), findsOneWidget); - expect(find.text('1s'), findsOneWidget); - - await tester.pump(); - }, - ); - }, - ); - group( - 'SideTitle with FitInside enabled', - () { - testWidgets( - 'SideTitleWidget left with FitInsideEnabled on Top Side', - (WidgetTester tester) async { - const widgetKey = Key('SideTitleWidget'); - const sideTitleWidget = SideTitleWidget( - key: widgetKey, - axisSide: AxisSide.left, - fitInside: SideTitleFitInsideData( - enabled: true, - axisPosition: 0, - parentAxisSize: 100, - distanceFromEdge: 0, - ), - child: Text('A Long Text'), - ); - - await tester.pumpWidget( - const MaterialApp( - home: Scaffold( - body: sideTitleWidget, - ), - ), - ); - - final element = - tester.element(find.byKey(widgetKey)) as StatefulElement; - final state = element.state as State; - expect(state.widget, equals(sideTitleWidget)); - expect(element.renderObject!.attached, isTrue); - - expect(find.byType(Transform), findsAtLeastNWidgets(2)); - expect(find.byType(Container), findsOneWidget); - expect(find.text('A Long Text'), findsOneWidget); - }, - ); - - testWidgets( - 'SideTitleWidget left with FitInsideEnabled on Bottom Side', - (WidgetTester tester) async { - const widgetKey = Key('SideTitleWidget'); - const sideTitleWidget = SideTitleWidget( - key: widgetKey, - axisSide: AxisSide.left, - fitInside: SideTitleFitInsideData( - enabled: true, - axisPosition: 100, - parentAxisSize: 100, - distanceFromEdge: 0, - ), - child: Text('A Long Text'), - ); - - await tester.pumpWidget( - const MaterialApp( - home: Scaffold( - body: sideTitleWidget, - ), - ), - ); - - final element = - tester.element(find.byKey(widgetKey)) as StatefulElement; - final state = element.state as State; - expect(state.widget, equals(sideTitleWidget)); - expect(element.renderObject!.attached, isTrue); - - expect(find.byType(Transform), findsAtLeastNWidgets(2)); - expect(find.byType(Container), findsOneWidget); - expect(find.text('A Long Text'), findsOneWidget); - }, - ); - - testWidgets( - 'SideTitleWidget bottom with FitInsideEnabled on Left Side', - (WidgetTester tester) async { - const widgetKey = Key('SideTitleWidget'); - const sideTitleWidget = SideTitleWidget( - key: widgetKey, - axisSide: AxisSide.bottom, - fitInside: SideTitleFitInsideData( - enabled: true, - axisPosition: 0, - parentAxisSize: 100, - distanceFromEdge: 0, - ), - child: Text('A Long Text'), - ); - - await tester.pumpWidget( - const MaterialApp( - home: Scaffold( - body: sideTitleWidget, - ), - ), - ); - - final element = - tester.element(find.byKey(widgetKey)) as StatefulElement; - final state = element.state as State; - expect(state.widget, equals(sideTitleWidget)); - expect(element.renderObject!.attached, isTrue); - - expect(find.byType(Transform), findsAtLeastNWidgets(2)); - expect(find.byType(Container), findsOneWidget); - expect(find.text('A Long Text'), findsOneWidget); - }, - ); - - testWidgets( - 'SideTitleWidget bottom with FitInsideEnabled on Right Side', - (WidgetTester tester) async { - const widgetKey = Key('SideTitleWidget'); - const sideTitleWidget = SideTitleWidget( - key: widgetKey, - axisSide: AxisSide.bottom, - fitInside: SideTitleFitInsideData( - enabled: true, - axisPosition: 100, - parentAxisSize: 100, - distanceFromEdge: 0, - ), - child: Text('A Long Text'), - ); - - await tester.pumpWidget( - const MaterialApp( - home: Scaffold( - body: sideTitleWidget, - ), - ), - ); - - final element = - tester.element(find.byKey(widgetKey)) as StatefulElement; - final state = element.state as State; - expect(state.widget, equals(sideTitleWidget)); - expect(element.renderObject!.attached, isTrue); - - expect(find.byType(Transform), findsAtLeastNWidgets(2)); - expect(find.byType(Container), findsOneWidget); - expect(find.text('A Long Text'), findsOneWidget); - }, - ); - }, - ); -} diff --git a/test/chart/base/axis_chart/base_chart_data_test.dart b/test/chart/base/axis_chart/base_chart_data_test.dart deleted file mode 100644 index 80f27fecd1..0000000000 --- a/test/chart/base/axis_chart/base_chart_data_test.dart +++ /dev/null @@ -1,29 +0,0 @@ -import 'package:fl_chart/fl_chart.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_test/flutter_test.dart'; -import '../../data_pool.dart'; - -void main() { - group('BaseChartData data equality check', () { - test('FlBorderData equality test', () { - expect(borderData1 == borderData1Clone, true); - - expect( - borderData1 == - FlBorderData( - show: false, - border: Border.all(color: Colors.green), - ), - false, - ); - - expect( - borderData1 == - FlBorderData( - show: true, - ), - false, - ); - }); - }); -} diff --git a/test/chart/base/axis_chart/side_titles/side_titles_flex_test.dart b/test/chart/base/axis_chart/side_titles/side_titles_flex_test.dart deleted file mode 100644 index 89ac64d64e..0000000000 --- a/test/chart/base/axis_chart/side_titles/side_titles_flex_test.dart +++ /dev/null @@ -1,254 +0,0 @@ -import 'package:fl_chart/src/chart/base/axis_chart/side_titles/side_titles_flex.dart'; -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter/rendering.dart'; -import 'package:flutter_test/flutter_test.dart'; - -void main() { - group('SideTitlesFlex test', () { - testWidgets( - 'Test vertical mode', - (WidgetTester tester) async { - const viewHeight = 400.0; - await tester.pumpWidget( - MaterialApp( - home: Scaffold( - body: Center( - child: SizedBox( - width: 40, - height: viewHeight, - child: SideTitlesFlex( - direction: Axis.vertical, - axisSideMetaData: AxisSideMetaData( - 0, - 10, - viewHeight, - ), - widgetHolders: oneToNineWidgetHolders(viewHeight), - ), - ), - ), - ), - ), - ); - - for (var i = 1; i <= 9; i++) { - expect(find.text(i.toDouble().toString()), findsOneWidget); - } - expect(find.text('10.0'), findsNothing); - expect(find.text('11.0'), findsNothing); - expect(find.text('0.0'), findsNothing); - }, - ); - - testWidgets( - 'Test horizontal mode', - (WidgetTester tester) async { - const viewWidth = 400.0; - await tester.pumpWidget( - MaterialApp( - home: Scaffold( - body: Center( - child: SizedBox( - width: viewWidth, - height: 40, - child: SideTitlesFlex( - direction: Axis.horizontal, - axisSideMetaData: AxisSideMetaData( - 0, - 10, - viewWidth, - ), - widgetHolders: List.generate(9, (index) => index.toDouble()) - .map( - (value) => AxisSideTitleWidgetHolder( - AxisSideTitleMetaData( - value + 1, - (value / 10) * viewWidth, - ), - Text((value + 1).toString()), - ), - ) - .toList(), - ), - ), - ), - ), - ), - ); - - for (var i = 1; i <= 9; i++) { - expect(find.text(i.toDouble().toString()), findsOneWidget); - } - expect(find.text('10.0'), findsNothing); - expect(find.text('11.0'), findsNothing); - expect(find.text('0.0'), findsNothing); - }, - ); - - testWidgets( - 'Test update from horizontal to vertical', - (WidgetTester tester) async { - const valueKey = ValueKey('asdf'); - - const viewSize = 400.0; - await tester.pumpWidget( - MaterialApp( - home: Scaffold( - body: Center( - child: SizedBox( - width: viewSize, - height: 40, - child: SideTitlesFlex( - key: valueKey, - direction: Axis.horizontal, - axisSideMetaData: AxisSideMetaData( - 0, - 10, - viewSize, - ), - widgetHolders: oneToNineWidgetHolders(viewSize), - ), - ), - ), - ), - ), - ); - - for (var i = 1; i <= 9; i++) { - expect(find.text(i.toDouble().toString()), findsOneWidget); - } - expect(find.text('10.0'), findsNothing); - expect(find.text('11.0'), findsNothing); - expect(find.text('0.0'), findsNothing); - - await tester.pumpWidget( - MaterialApp( - home: Scaffold( - body: Center( - child: SizedBox( - width: 40, - height: viewSize, - child: SideTitlesFlex( - key: valueKey, - direction: Axis.vertical, - axisSideMetaData: AxisSideMetaData( - 0, - 10, - viewSize, - ), - widgetHolders: oneToNineWidgetHolders(viewSize), - ), - ), - ), - ), - ), - ); - for (var i = 1; i <= 9; i++) { - expect(find.text(i.toDouble().toString()), findsOneWidget); - } - expect(find.text('10.0'), findsNothing); - expect(find.text('11.0'), findsNothing); - expect(find.text('0.0'), findsNothing); - }, - ); - }); - - test('AxisSideTitlesRenderFlex horizontal', () { - const viewSize = 400.0; - final axisSideMetaData = AxisSideMetaData( - 0, - 10, - viewSize, - ); - final sideTitlesMetaData = oneToNineSideTitleMetaData(viewSize); - final renderFlex = AxisSideTitlesRenderFlex( - axisSideMetaData: axisSideMetaData, - axisSideTitlesMetaData: sideTitlesMetaData, - ); - - final builder = DiagnosticPropertiesBuilder(); - renderFlex.debugFillProperties(builder); - expect(builder.properties.length > 1, true); - expect( - (builder.properties.last as EnumProperty).value, - Axis.horizontal, - ); - expect(renderFlex.direction, Axis.horizontal); - expect(renderFlex.axisSideMetaData, axisSideMetaData); - expect(renderFlex.axisSideTitlesMetaData, sideTitlesMetaData); - expect(renderFlex.debugNeedsLayout, false); - expect( - renderFlex.hitTestChildren(BoxHitTestResult(), position: Offset.zero), - false, - ); - expect( - renderFlex - .computeDryLayout(BoxConstraints.tight(const Size(viewSize, 40))), - const Size(viewSize, 40), - ); - expect( - // ignore: invalid_use_of_protected_member - renderFlex.computeDistanceToActualBaseline(TextBaseline.alphabetic), - null, - ); - }); - - test('AxisSideTitlesRenderFlex vertical', () { - const viewSize = 400.0; - final axisSideMetaData = AxisSideMetaData( - 0, - 10, - viewSize, - ); - final sideTitlesMetaData = oneToNineSideTitleMetaData(viewSize); - final renderFlex = AxisSideTitlesRenderFlex( - direction: Axis.vertical, - axisSideMetaData: axisSideMetaData, - axisSideTitlesMetaData: sideTitlesMetaData, - ); - expect( - renderFlex - .computeDryLayout(BoxConstraints.tight(const Size(viewSize, 40))), - const Size(viewSize, 40), - ); - expect( - // ignore: invalid_use_of_protected_member - renderFlex.computeDistanceToActualBaseline(TextBaseline.alphabetic), - null, - ); - }); - - test('AxisSideTitleMetaData equality test', () { - final data1 = AxisSideTitleMetaData(0, 0); - final data1Clone = AxisSideTitleMetaData(0, 0); - final data2 = AxisSideTitleMetaData(2, 0); - expect(data1 == data1Clone, true); - expect(data1 == data2, false); - }); - - test('AxisSideMetaData diff', () { - expect(AxisSideMetaData(5, 10, 100).diff, 5); - expect(AxisSideMetaData(5, 10, 0).diff, 5); - expect(AxisSideMetaData(9, 10, 0).diff, 1); - }); -} - -List oneToNineWidgetHolders(double viewSize) { - return oneToNineSideTitleMetaData(viewSize).asMap().entries.map((e) { - final index = e.key; - final sideTitlesMetaData = e.value; - return AxisSideTitleWidgetHolder( - sideTitlesMetaData, - Text((index + 1).toDouble().toString()), - ); - }).toList(); -} - -List oneToNineSideTitleMetaData(double viewSize) { - return List.generate(9, (index) => index.toDouble()) - .map( - (value) => AxisSideTitleMetaData(value + 1, (value / 10) * viewSize), - ) - .toList(); -} diff --git a/test/chart/base/axis_chart/side_titles/side_titles_widget_test.dart b/test/chart/base/axis_chart/side_titles/side_titles_widget_test.dart deleted file mode 100644 index 1ebb87b5dc..0000000000 --- a/test/chart/base/axis_chart/side_titles/side_titles_widget_test.dart +++ /dev/null @@ -1,423 +0,0 @@ -import 'package:fl_chart/fl_chart.dart'; -import 'package:fl_chart/src/chart/base/axis_chart/side_titles/side_titles_widget.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_test/flutter_test.dart'; - -void main() { - const viewSize = Size(400, 400); - - final lineChartDataBase = LineChartData( - minX: 0, - maxX: 10, - minY: 0, - maxY: 10, - ); - - final lineChartDataWithNoTitles = lineChartDataBase.copyWith( - titlesData: const FlTitlesData( - show: false, - leftTitles: AxisTitles(), - topTitles: AxisTitles(), - rightTitles: AxisTitles(), - bottomTitles: AxisTitles(), - ), - ); - - final lineChartDataWithAllTitles = lineChartDataBase.copyWith( - titlesData: FlTitlesData( - leftTitles: AxisTitles( - axisNameWidget: const Text('Left Titles'), - sideTitles: SideTitles( - showTitles: true, - getTitlesWidget: (double value, TitleMeta meta) { - return Text('L-${value.toInt()}'); - }, - interval: 1, - ), - ), - topTitles: AxisTitles( - axisNameWidget: const Text('Top Titles'), - sideTitles: SideTitles( - showTitles: true, - getTitlesWidget: (double value, TitleMeta meta) { - return Text('T-${value.toInt()}'); - }, - interval: 1, - ), - ), - rightTitles: AxisTitles( - axisNameWidget: const Text('Right Titles'), - sideTitles: SideTitles( - showTitles: true, - getTitlesWidget: (double value, TitleMeta meta) { - return Text('R-${value.toInt()}'); - }, - interval: 1, - ), - ), - bottomTitles: AxisTitles( - axisNameWidget: const Text('Bottom Titles'), - sideTitles: SideTitles( - showTitles: true, - getTitlesWidget: (double value, TitleMeta meta) { - return Text('B-${value.toInt()}'); - }, - interval: 1, - ), - ), - ), - ); - - final lineChartDataWithOnlyLeftTitles = lineChartDataBase.copyWith( - titlesData: FlTitlesData( - leftTitles: AxisTitles( - axisNameWidget: const Text('Left Titles'), - sideTitles: SideTitles( - showTitles: true, - getTitlesWidget: (double value, TitleMeta meta) { - return Text('L-${value.toInt()}'); - }, - interval: 1, - ), - ), - topTitles: const AxisTitles(), - rightTitles: const AxisTitles(), - bottomTitles: const AxisTitles(), - ), - ); - - final lineChartDataWithOnlyLeftTitlesWithoutAxisName = - lineChartDataBase.copyWith( - titlesData: FlTitlesData( - leftTitles: AxisTitles( - sideTitles: SideTitles( - showTitles: true, - getTitlesWidget: (double value, TitleMeta meta) { - return Text('L-${value.toInt()}'); - }, - interval: 1, - ), - ), - topTitles: const AxisTitles(), - rightTitles: const AxisTitles(), - bottomTitles: const AxisTitles(), - ), - ); - - final barChartDataWithOnlyBottomTitles = BarChartData( - barGroups: [ - BarChartGroupData( - x: 0, - barRods: [ - BarChartRodData(toY: 10), - ], - ), - BarChartGroupData( - x: 1, - barRods: [ - BarChartRodData(toY: 10), - ], - ), - BarChartGroupData( - x: 2, - barRods: [ - BarChartRodData(toY: 10), - ], - ), - ], - titlesData: FlTitlesData( - leftTitles: const AxisTitles(), - topTitles: const AxisTitles(), - rightTitles: const AxisTitles(), - bottomTitles: AxisTitles( - axisNameWidget: const Icon(Icons.check), - sideTitles: SideTitles( - showTitles: true, - getTitlesWidget: (value, meta) { - return TextButton( - onPressed: () {}, - child: Text( - value.toInt().toString(), - ), - ); - }, - ), - ), - ), - ); - - final barChartDataWithOnlyRightTitles = BarChartData( - barGroups: [ - BarChartGroupData( - x: 0, - barRods: [ - BarChartRodData(toY: 10), - ], - ), - BarChartGroupData( - x: 1, - barRods: [ - BarChartRodData(toY: 10), - ], - ), - BarChartGroupData( - x: 2, - barRods: [ - BarChartRodData(toY: 10), - ], - ), - ], - titlesData: FlTitlesData( - leftTitles: const AxisTitles(), - topTitles: const AxisTitles(), - rightTitles: AxisTitles( - axisNameWidget: const Icon(Icons.arrow_right), - sideTitles: SideTitles( - showTitles: true, - interval: 1, - getTitlesWidget: (value, meta) { - return TextButton( - onPressed: () {}, - child: Text( - value.toInt().toString(), - ), - ); - }, - ), - ), - bottomTitles: const AxisTitles(), - ), - ); - - final barChartDataWithEmptyGroups = BarChartData( - barGroups: [], - titlesData: FlTitlesData( - leftTitles: const AxisTitles(), - topTitles: const AxisTitles(), - rightTitles: AxisTitles( - axisNameWidget: const Icon(Icons.arrow_right), - sideTitles: SideTitles( - showTitles: true, - interval: 1, - getTitlesWidget: (value, meta) { - return TextButton( - onPressed: () {}, - child: Text( - value.toInt().toString(), - ), - ); - }, - ), - ), - bottomTitles: const AxisTitles(), - ), - ); - - testWidgets( - 'LineChart with no titles', - (WidgetTester tester) async { - await tester.pumpWidget( - MaterialApp( - home: Scaffold( - body: Center( - child: SizedBox( - width: viewSize.width, - height: viewSize.height, - child: SideTitlesWidget( - side: AxisSide.left, - axisChartData: lineChartDataWithNoTitles, - parentSize: viewSize, - ), - ), - ), - ), - ), - ); - - expect(find.byType(Text), findsNothing); - }, - ); - - testWidgets( - 'LineChart with all titles', - (WidgetTester tester) async { - Future checkSide(AxisSide side) async { - await tester.pumpWidget( - MaterialApp( - home: Scaffold( - body: Center( - child: SizedBox( - width: viewSize.width, - height: viewSize.height, - child: SideTitlesWidget( - side: side, - axisChartData: lineChartDataWithAllTitles, - parentSize: viewSize, - ), - ), - ), - ), - ), - ); - - final axisName = switch (side) { - AxisSide.left => 'Left', - AxisSide.top => 'Top', - AxisSide.right => 'Right', - AxisSide.bottom => 'Bottom', - }; - expect(find.text('$axisName Titles'), findsOneWidget); - for (var i = 0; i <= 10; i++) { - expect(find.text('${axisName.characters.first}-$i'), findsOneWidget); - } - } - - await checkSide(AxisSide.left); - await checkSide(AxisSide.top); - await checkSide(AxisSide.right); - await checkSide(AxisSide.bottom); - }, - ); - - testWidgets( - 'LineChart with Only left titles', - (WidgetTester tester) async { - await tester.pumpWidget( - MaterialApp( - home: Scaffold( - body: Center( - child: SizedBox( - width: viewSize.width, - height: viewSize.height, - child: SideTitlesWidget( - side: AxisSide.left, - axisChartData: lineChartDataWithOnlyLeftTitles, - parentSize: viewSize, - ), - ), - ), - ), - ), - ); - expect(find.text('Left Titles'), findsOneWidget); - for (var i = 0; i <= 10; i++) { - expect(find.text('L-$i'), findsOneWidget); - } - - expect(find.byType(Text), findsNWidgets(12)); - }, - ); - - testWidgets( - 'LineChart with Only left titles without axis name', - (WidgetTester tester) async { - await tester.pumpWidget( - MaterialApp( - home: Scaffold( - body: Center( - child: SizedBox( - width: viewSize.width, - height: viewSize.height, - child: SideTitlesWidget( - side: AxisSide.left, - axisChartData: lineChartDataWithOnlyLeftTitlesWithoutAxisName, - parentSize: viewSize, - ), - ), - ), - ), - ), - ); - for (var i = 0; i <= 10; i++) { - expect(find.text('L-$i'), findsOneWidget); - } - - expect(find.byType(Text), findsNWidgets(11)); - }, - ); - - testWidgets( - 'BarChart with Only bottom titles', - (WidgetTester tester) async { - await tester.pumpWidget( - MaterialApp( - home: Scaffold( - body: Center( - child: SizedBox( - width: viewSize.width, - height: viewSize.height, - child: SideTitlesWidget( - side: AxisSide.bottom, - axisChartData: barChartDataWithOnlyBottomTitles, - parentSize: viewSize, - ), - ), - ), - ), - ), - ); - - expect(find.byIcon(Icons.check), findsOneWidget); - expect(find.text('0'), findsOneWidget); - expect(find.text('1'), findsOneWidget); - expect(find.text('2'), findsOneWidget); - expect(find.byType(TextButton), findsNWidgets(3)); - }, - ); - - testWidgets( - 'BarChart with Only right titles', - (WidgetTester tester) async { - await tester.pumpWidget( - MaterialApp( - home: Scaffold( - body: Center( - child: SizedBox( - width: viewSize.width, - height: viewSize.height, - child: SideTitlesWidget( - side: AxisSide.right, - axisChartData: barChartDataWithOnlyRightTitles, - parentSize: viewSize, - ), - ), - ), - ), - ), - ); - - expect(find.byIcon(Icons.arrow_right), findsOneWidget); - for (var i = 0; i <= 10; i++) { - expect(find.text('$i'), findsOneWidget); - } - expect(find.byType(TextButton), findsNWidgets(11)); - }, - ); - - testWidgets( - 'BarChart with empty bars', - (WidgetTester tester) async { - await tester.pumpWidget( - MaterialApp( - home: Scaffold( - body: Center( - child: SizedBox( - width: viewSize.width, - height: viewSize.height, - child: SideTitlesWidget( - side: AxisSide.right, - axisChartData: barChartDataWithEmptyGroups, - parentSize: viewSize, - ), - ), - ), - ), - ), - ); - - expect(find.byIcon(Icons.arrow_right), findsOneWidget); - expect(find.byType(Text), findsOneWidget); - expect(find.byType(TextButton), findsOneWidget); - }, - ); -} diff --git a/test/chart/base/line_test.dart b/test/chart/base/line_test.dart deleted file mode 100644 index 78ceb65504..0000000000 --- a/test/chart/base/line_test.dart +++ /dev/null @@ -1,40 +0,0 @@ -import 'package:fl_chart/src/utils/utils.dart'; -import 'package:flutter_test/flutter_test.dart'; -import '../data_pool.dart'; - -void main() { - const tolerance = 0.001; - - test('test magnitude()', () { - expect(line1.magnitude(), closeTo(14.142, tolerance)); - expect(line2.magnitude(), closeTo(22.360, tolerance)); - expect(line3.magnitude(), closeTo(18.027, tolerance)); - expect(line4.magnitude(), closeTo(32.310, tolerance)); - expect(line5.magnitude(), closeTo(5.830, tolerance)); - }); - - test('test angle()', () { - expect(line1.direction(), closeTo(Utils().radians(45), tolerance)); - expect(line2.direction(), closeTo(Utils().radians(63.434), tolerance)); - expect(line3.direction(), closeTo(Utils().radians(-3.179), tolerance)); - expect(line4.direction(), closeTo(Utils().radians(68.198), tolerance)); - expect(line5.direction(), closeTo(Utils().radians(59), tolerance)); - }); - - test('test normalize()', () { - expect(line1.normalize().dx, closeTo(0.707, tolerance)); - expect(line1.normalize().dy, closeTo(0.707, tolerance)); - - expect(line2.normalize().dx, closeTo(0.447, tolerance)); - expect(line2.normalize().dy, closeTo(0.894, tolerance)); - - expect(line3.normalize().dx, closeTo(-0.998, tolerance)); - expect(line3.normalize().dy, closeTo(0.0554, tolerance)); - - expect(line4.normalize().dx, closeTo(-0.371, tolerance)); - expect(line4.normalize().dy, closeTo(-0.928, tolerance)); - - expect(line5.normalize().dx, closeTo(0.514, tolerance)); - expect(line5.normalize().dy, closeTo(0.857, tolerance)); - }); -} diff --git a/test/chart/data_pool.dart b/test/chart/data_pool.dart deleted file mode 100644 index 2bb1f1315d..0000000000 --- a/test/chart/data_pool.dart +++ /dev/null @@ -1,3176 +0,0 @@ -import 'dart:ui'; - -import 'package:fl_chart/fl_chart.dart'; -import 'package:fl_chart/src/chart/base/line.dart'; -import 'package:flutter/material.dart'; - -class MockData { - static const color0 = Color(0x00000000); - static const color1 = Color(0x11111111); - static const color2 = Color(0x22222222); - static const color3 = Color(0x33333333); - static const color4 = Color(0x44444444); - static const color5 = Color(0x55555555); - static const color6 = Color(0x66666666); - - static final path1 = Path() - ..moveTo(10, 10) - ..lineTo(20, 20) - ..arcTo( - Rect.fromCenter(center: Offset.zero, width: 44, height: 22), - 2, - 3, - false, - ); - - static final path1Duplicate = Path() - ..moveTo(10, 10) - ..lineTo(20, 20) - ..arcTo( - Rect.fromCenter(center: Offset.zero, width: 44, height: 22), - 2, - 3, - false, - ); - - static final path2 = Path() - ..moveTo(10, 10) - ..lineTo(20, 20) - ..arcTo( - Rect.fromCenter(center: Offset.zero, width: 44, height: 22.01), - 2, - 3, - false, - ); - - static final path3 = Path() - ..moveTo(10, 13) - ..lineTo(20, 20) - ..arcTo( - Rect.fromCenter(center: Offset.zero, width: 44, height: 22), - 2, - 3, - false, - ); - - static final path4 = Path() - ..moveTo(24, 13) - ..lineTo(20, 20) - ..arcTo( - Rect.fromCenter(center: Offset.zero, width: 44, height: 22), - 2, - 3, - false, - ); - - static const borderSide1 = BorderSide(color: color1); - static const borderSide2 = BorderSide(color: color2, width: 2); - static const borderSide3 = BorderSide(color: color3, width: 3); - static const borderSide4 = BorderSide(color: color4, width: 4); - static const borderSide5 = BorderSide(color: color5, width: 5); - static const borderSide6 = BorderSide(color: color6, width: 6); - - static const TextStyle textStyle1 = - TextStyle(color: color1, fontWeight: FontWeight.w100); - static const TextStyle textStyle2 = - TextStyle(color: color2, fontWeight: FontWeight.w200); - static const TextStyle textStyle3 = - TextStyle(color: color3, fontWeight: FontWeight.w300); - static const TextStyle textStyle4 = - TextStyle(color: color4, fontWeight: FontWeight.w400); - - static const Offset offset1 = Offset(1, 1); - static const Offset offset1Duplicate = Offset(1, 1); - static const Offset offset2 = Offset(2, 2); - static const Offset offset3 = Offset(2, 2); - static const Offset offset4 = Offset(4, 4); - static const Offset offset5 = Offset(5, 5); - static const Offset offset6 = Offset(6, 6); - - static const size1 = Size(11, 11); - static const size2 = Size(22, 22); - - static final textPainter1 = TextPainter(); - - static final rect1 = Rect.fromCenter(center: offset1, width: 11, height: 11); - static final rect2 = Rect.fromCenter(center: offset2, width: 22, height: 22); - - static final rRect1 = RRect.fromLTRBR(1, 1, 1, 1, const Radius.circular(11)); - static final rRect2 = RRect.fromLTRBR(2, 2, 2, 2, const Radius.circular(22)); - - static final paint1 = Paint() - ..color = color1 - ..strokeWidth = 11; - static final paint2 = Paint() - ..color = color2 - ..strokeWidth = 22; - - static Picture? _picture1; - - static Picture picture1() { - if (_picture1 != null) { - return _picture1!; - } - final recorder1 = PictureRecorder(); - Canvas(recorder1).drawLine(offset1, offset2, paint1); - _picture1 = recorder1.endRecording(); - return _picture1!; - } - - static Image? _image1; - - static Image image1() { - if (_image1 != null) { - return _image1!; - } - _image1 = Image.asset('asdf/asdf'); - return _image1!; - } - - static final LineChartBarData lineChartBarData1 = LineChartBarData( - dashArray: [0, 1], - gradient: const LinearGradient( - colors: [Colors.red, Colors.green], - stops: [0, 1], - begin: Alignment.center, - end: Alignment.bottomRight, - ), - spots: [ - flSpot1, - flSpot2, - ], - shadow: shadow1, - aboveBarData: barAreaData1, - belowBarData: barAreaData2, - barWidth: 12, - curveSmoothness: 12, - dotData: flDotData1, - isStrokeCapRound: true, - preventCurveOvershootingThreshold: 1.2, - showingIndicators: [0, 1], - ); - - static final LineChartBarData lineChartBarData2 = LineChartBarData( - dashArray: [0, 1], - gradient: const LinearGradient( - colors: [Colors.red, Colors.green], - stops: [0, 1], - begin: Alignment.center, - end: Alignment.bottomRight, - ), - spots: [ - flSpot1, - flSpot2, - ], - shadow: shadow2, - isStepLineChart: true, - aboveBarData: barAreaData1, - belowBarData: barAreaData2, - barWidth: 12, - curveSmoothness: 12, - dotData: flDotData1, - isStrokeCapRound: true, - preventCurveOvershootingThreshold: 1.2, - showingIndicators: [0, 4], - ); - - static const flSpot0 = FlSpot.zero; - static const flSpot1 = FlSpot(1, 1); - static const flSpot2 = FlSpot(2, 2); - static const flSpot3 = FlSpot(3, 3); - static const flSpot4 = FlSpot(4, 4); - static const flSpot5 = FlSpot(5, 5); - - static final horizontalLine0 = HorizontalLine(y: 0, color: color0); - static final horizontalLine1 = HorizontalLine(y: 1, color: color1); - static final horizontalLine2 = HorizontalLine(y: 2, color: color2); - static final horizontalLine3 = HorizontalLine(y: 3, color: color3); - static final horizontalLine4 = HorizontalLine(y: 4, color: color4); - static final horizontalLine5 = HorizontalLine(y: 5, color: color5); - - static final verticalLine0 = VerticalLine(x: 0, color: color0); - static final verticalLine1 = VerticalLine(x: 1, color: color1); - static final verticalLine2 = VerticalLine(x: 2, color: color2); - static final verticalLine3 = VerticalLine(x: 3, color: color3); - static final verticalLine4 = VerticalLine(x: 4, color: color4); - static final verticalLine5 = VerticalLine(x: 5, color: color5); - - static final horizontalRangeAnnotation0 = - HorizontalRangeAnnotation(y1: 0, y2: 1, color: color0); - - static final horizontalRangeAnnotation1 = - HorizontalRangeAnnotation(y1: 1, y2: 2, color: color1); - - static final horizontalRangeAnnotation2 = - HorizontalRangeAnnotation(y1: 2, y2: 3, color: color2); - - static final horizontalRangeAnnotation3 = - HorizontalRangeAnnotation(y1: 3, y2: 4, color: color3); - - static final horizontalRangeAnnotation4 = - HorizontalRangeAnnotation(y1: 4, y2: 5, color: color4); - - static final verticalRangeAnnotation0 = - VerticalRangeAnnotation(x1: 0, x2: 1, color: color0); - - static final verticalRangeAnnotation1 = - VerticalRangeAnnotation(x1: 1, x2: 2, color: color1); - - static final verticalRangeAnnotation2 = - VerticalRangeAnnotation(x1: 2, x2: 3, color: color2); - - static final verticalRangeAnnotation3 = - VerticalRangeAnnotation(x1: 3, x2: 4, color: color3); - - static final verticalRangeAnnotation4 = - VerticalRangeAnnotation(x1: 4, x2: 5, color: color4); - - static const RadarEntry radarEntry0 = RadarEntry(value: 0); - static const RadarEntry radarEntry1 = RadarEntry(value: 1); - static const RadarEntry radarEntry2 = RadarEntry(value: 2); - static const RadarEntry radarEntry3 = RadarEntry(value: 3); - static const RadarEntry radarEntry4 = RadarEntry(value: 4); - static final RadarDataSet radarDataSet1 = RadarDataSet( - dataEntries: [radarEntry1, radarEntry2, radarEntry3], - ); - static final RadarDataSet radarDataSet2 = RadarDataSet( - dataEntries: [radarEntry3, radarEntry1, radarEntry2], - ); - static final RadarTouchedSpot radarTouchedSpot = RadarTouchedSpot( - radarDataSet1, - 0, - radarEntry1, - 0, - flSpot1, - offset1, - ); - - static final pieChartSection0 = PieChartSectionData( - value: 0, - color: color0, - radius: 0, - ); - - static final pieChartSection1 = PieChartSectionData( - value: 1, - color: color1, - radius: 1, - ); - - static final pieChartSection2 = PieChartSectionData( - value: 2, - color: color2, - radius: 2, - ); - - static final pieChartSection3 = PieChartSectionData( - value: 3, - color: color3, - radius: 3, - ); - - static final pieChartSection4 = PieChartSectionData( - value: 4, - color: color4, - radius: 4, - ); - - static final scatterSpot0 = ScatterSpot(0, 0, color: color0); - static final scatterSpot1 = ScatterSpot(1, 1, color: color1); - static final scatterSpot2 = ScatterSpot(2, 2, color: color2); - static final scatterSpot3 = ScatterSpot(3, 3, color: color3); - static final scatterSpot4 = ScatterSpot(4, 4, color: color4); - - static final scatterTouchedSpot = ScatterTouchedSpot(scatterSpot1, 0); - - static final pieChartSectionData1 = PieChartSectionData(value: 12); - static final pieTouchedSection1 = PieTouchedSection( - pieChartSectionData1, - 0, - 12, - 33, - ); - - static final lineBarSpot1 = TouchLineBarSpot( - lineChartBarData1, - 0, - lineChartBarData1.spots.first, - 0, - ); - static final lineBarSpot2 = TouchLineBarSpot( - MockData.lineChartBarData1, - 1, - MockData.lineChartBarData1.spots.last, - 2, - ); - - static final lineTouchResponse1 = - LineTouchResponse([lineBarSpot1, lineBarSpot2]); - - static final barChartRodData1 = BarChartRodData(toY: 11); - static final barChartRodData2 = BarChartRodData(toY: 22); - static final barTouchedSpot = BarTouchedSpot( - BarChartGroupData(x: 0, barRods: [barChartRodData1, barChartRodData2]), - 0, - barChartRodData1, - 0, - null, - -1, - flSpot1, - offset1, - ); - - static const gradient1 = LinearGradient( - colors: [ - MockData.color0, - MockData.color1, - ], - ); - - static final barGroupData0 = BarChartGroupData( - x: 0, - barRods: [MockData.barChartRodData1, MockData.barChartRodData2], - ); - - static final barGroupData1 = BarChartGroupData( - x: 1, - barRods: [MockData.barChartRodData1, MockData.barChartRodData2], - ); - - static final barGroupData2 = BarChartGroupData( - x: 2, - barRods: [MockData.barChartRodData1, MockData.barChartRodData2], - ); - - static final barChartData1 = BarChartData( - barGroups: [barGroupData0, barGroupData1, barGroupData2], - ); - - static const sideTitles1 = SideTitles( - reservedSize: 10, - interval: 23, - ); - static const sideTitles1Clone = SideTitles( - reservedSize: 10, - interval: 23, - ); - static const sideTitles2 = SideTitles( - reservedSize: 10, - interval: 12, - ); - static const sideTitles3 = SideTitles( - reservedSize: 10, - getTitlesWidget: getTitles, - interval: 12, - ); - static const sideTitles4 = SideTitles( - reservedSize: 11, - showTitles: true, - getTitlesWidget: getTitles, - interval: 12, - ); - static const sideTitles5 = SideTitles( - reservedSize: 10, - getTitlesWidget: getTitles, - interval: 43, - ); - static const sideTitles6 = SideTitles( - reservedSize: 10, - getTitlesWidget: getTitles, - interval: 22, - ); - - static const sideTitleFitInsideData1 = SideTitleFitInsideData( - enabled: true, - axisPosition: 0, - parentAxisSize: 100, - distanceFromEdge: 0, - ); - static const sideTitleFitInsideData1Clone = SideTitleFitInsideData( - enabled: true, - axisPosition: 0, - parentAxisSize: 100, - distanceFromEdge: 0, - ); - static const sideTitleFitInsideData2 = SideTitleFitInsideData( - enabled: true, - axisPosition: 0, - parentAxisSize: 100, - distanceFromEdge: 10, - ); - static const sideTitleFitInsideData3 = SideTitleFitInsideData( - enabled: false, - axisPosition: 0, - parentAxisSize: 100, - distanceFromEdge: 0, - ); - static const sideTitleFitInsideData4 = SideTitleFitInsideData( - enabled: true, - axisPosition: 200, - parentAxisSize: 200, - distanceFromEdge: 0, - ); - static const sideTitleFitInsideData5 = SideTitleFitInsideData( - enabled: true, - axisPosition: 200, - parentAxisSize: 200, - distanceFromEdge: 10, - ); - static const sideTitleFitInsideData6 = SideTitleFitInsideData( - enabled: false, - axisPosition: 200, - parentAxisSize: 200, - distanceFromEdge: 0, - ); - - static const widget1 = Text('axis1'); - static const widget2 = Text('axis2'); - static const widget3 = Text('axis3'); - static const widget4 = Text('axis4'); - static const widget5 = Text('axis5'); - - static const axisTitles1 = AxisTitles( - axisNameWidget: widget1, - sideTitles: sideTitles1, - ); - static const axisTitles1Clone = AxisTitles( - axisNameWidget: widget1, - sideTitles: sideTitles1Clone, - ); - static const axisTitles2 = AxisTitles( - axisNameWidget: widget2, - sideTitles: sideTitles2, - ); - static const axisTitles3 = AxisTitles( - axisNameWidget: widget3, - sideTitles: sideTitles3, - ); - static const axisTitles4 = AxisTitles( - axisNameWidget: widget4, - sideTitles: sideTitles4, - ); - static const axisTitles5 = AxisTitles( - axisNameWidget: widget5, - axisNameSize: 889, - sideTitles: sideTitles4, - ); - - static const flTitlesData1 = FlTitlesData( - bottomTitles: axisTitles1, - topTitles: axisTitles2, - rightTitles: axisTitles3, - leftTitles: axisTitles4, - ); - static const flTitlesData1Clone = FlTitlesData( - bottomTitles: axisTitles1Clone, - topTitles: axisTitles2, - rightTitles: axisTitles3, - leftTitles: axisTitles4, - ); - static const flTitlesData2 = FlTitlesData( - topTitles: axisTitles2, - rightTitles: axisTitles3, - leftTitles: axisTitles4, - ); - static const flTitlesData3 = FlTitlesData( - bottomTitles: axisTitles1, - rightTitles: axisTitles3, - leftTitles: axisTitles4, - ); - static const flTitlesData4 = FlTitlesData( - bottomTitles: axisTitles1, - topTitles: axisTitles2, - leftTitles: axisTitles4, - ); - static const flTitlesData5 = FlTitlesData( - bottomTitles: axisTitles1, - topTitles: axisTitles2, - rightTitles: axisTitles3, - ); - static const flTitlesData6 = FlTitlesData( - show: false, - bottomTitles: axisTitles1, - topTitles: axisTitles2, - rightTitles: axisTitles3, - leftTitles: axisTitles4, - ); -} - -final VerticalRangeAnnotation verticalRangeAnnotation1 = - VerticalRangeAnnotation(color: Colors.green, x2: 12, x1: 12.1); -final VerticalRangeAnnotation verticalRangeAnnotation1Clone = - VerticalRangeAnnotation(color: Colors.green, x2: 12, x1: 12.1); - -final HorizontalRangeAnnotation horizontalRangeAnnotation1 = - HorizontalRangeAnnotation(color: Colors.green, y2: 12, y1: 12.1); -final HorizontalRangeAnnotation horizontalRangeAnnotation1Clone = - HorizontalRangeAnnotation(color: Colors.green, y2: 12, y1: 12.1); - -final RangeAnnotations rangeAnnotations1 = RangeAnnotations( - horizontalRangeAnnotations: [ - horizontalRangeAnnotation1, - horizontalRangeAnnotation1Clone, - ], - verticalRangeAnnotations: [ - verticalRangeAnnotation1, - verticalRangeAnnotation1Clone, - ], -); -final RangeAnnotations rangeAnnotations1Clone = RangeAnnotations( - horizontalRangeAnnotations: [ - horizontalRangeAnnotation1, - horizontalRangeAnnotation1Clone, - ], - verticalRangeAnnotations: [ - verticalRangeAnnotation1, - verticalRangeAnnotation1Clone, - ], -); -final RangeAnnotations rangeAnnotations2 = RangeAnnotations( - horizontalRangeAnnotations: [ - horizontalRangeAnnotation1Clone, - ], - verticalRangeAnnotations: [ - verticalRangeAnnotation1, - verticalRangeAnnotation1Clone, - ], -); - -const FlLine flLine1 = - FlLine(color: Colors.green, strokeWidth: 1, dashArray: [1, 2, 3]); -const FlLine flLine1Clone = - FlLine(color: Colors.green, strokeWidth: 1, dashArray: [1, 2, 3]); - -bool checkToShowLine(double value) => true; - -FlLine getDrawingLine(double value) => const FlLine(); - -const FlSpot flSpot1 = FlSpot(1, 1); -final FlSpot flSpot1Clone = flSpot1.copyWith(); - -const FlSpot flSpot2 = FlSpot(4, 2); -final FlSpot flSpot2Clone = flSpot2.copyWith(); - -Widget getTitles(double value, TitleMeta meta) => const Text('sallam'); - -TextStyle getTextStyles(BuildContext context, double value) => - const TextStyle(color: Colors.green); - -const FlGridData flGridData1 = FlGridData( - verticalInterval: 12, - horizontalInterval: 22, - drawVerticalLine: false, - checkToShowVerticalLine: checkToShowLine, - getDrawingHorizontalLine: getDrawingLine, -); -const FlGridData flGridData1Clone = FlGridData( - verticalInterval: 12, - horizontalInterval: 22, - drawVerticalLine: false, - checkToShowVerticalLine: checkToShowLine, - getDrawingHorizontalLine: getDrawingLine, -); -final FlGridData flGridData2 = FlGridData( - verticalInterval: 12, - horizontalInterval: 22, - drawVerticalLine: false, - checkToShowVerticalLine: checkToShowLine, - getDrawingHorizontalLine: getDrawingLine, - getDrawingVerticalLine: (value) => flLine1, -); -const FlGridData flGridData3 = FlGridData( - verticalInterval: 12, - horizontalInterval: 43, - drawVerticalLine: false, - checkToShowVerticalLine: checkToShowLine, - getDrawingHorizontalLine: getDrawingLine, -); -const FlGridData flGridData4 = FlGridData( - verticalInterval: 12, - horizontalInterval: 22, - drawVerticalLine: false, - getDrawingHorizontalLine: getDrawingLine, -); -const FlGridData flGridData5 = FlGridData( - verticalInterval: 12, - horizontalInterval: 22, - checkToShowVerticalLine: checkToShowLine, - getDrawingHorizontalLine: getDrawingLine, -); - -final FlBorderData borderData1 = FlBorderData( - show: true, - border: Border.all(color: Colors.green), -); -final FlBorderData borderData1Clone = FlBorderData( - show: true, - border: Border.all(color: Colors.green), -); -final FlBorderData borderData2 = FlBorderData( - show: true, - border: Border.all(color: Colors.green.withOpacity(0.5)), -); - -bool checkToShowSpotLine(FlSpot spot) => true; - -const BarAreaSpotsLine barAreaSpotsLine1 = - BarAreaSpotsLine(show: true, checkToShowSpotLine: checkToShowSpotLine); -const BarAreaSpotsLine barAreaSpotsLine1Clone = - BarAreaSpotsLine(show: true, checkToShowSpotLine: checkToShowSpotLine); - -const BarAreaSpotsLine barAreaSpotsLine2 = BarAreaSpotsLine( - show: true, -); - -final BarAreaData barAreaData1 = BarAreaData( - show: true, - cutOffY: 12, - gradient: const LinearGradient( - colors: [Colors.green, Colors.blue], - stops: [0, 0.5], - begin: Alignment.topLeft, - end: Alignment.bottomCenter, - ), - spotsLine: barAreaSpotsLine1, -); -final BarAreaData barAreaData1Clone = BarAreaData( - show: true, - cutOffY: 12, - gradient: const LinearGradient( - colors: [Colors.green, Colors.blue], - stops: [0, 0.5], - begin: Alignment.topLeft, - end: Alignment.bottomCenter, - ), - spotsLine: barAreaSpotsLine1, -); - -final BarAreaData barAreaData2 = BarAreaData( - show: true, - cutOffY: 12, - gradient: const LinearGradient( - colors: [Colors.green, Colors.blue], - stops: [0, 0.5], - begin: Alignment.topLeft, - end: Alignment.bottomCenter, - ), - spotsLine: barAreaSpotsLine2, -); -final BarAreaData barAreaData3 = BarAreaData( - show: true, - cutOffY: 12, - gradient: const LinearGradient( - colors: [Colors.green, Colors.blue], - stops: [0, 0.6], - begin: Alignment.topLeft, - end: Alignment.bottomCenter, - ), - spotsLine: barAreaSpotsLine2, -); -final BarAreaData barAreaData4 = BarAreaData( - show: true, - cutOffY: 12, - gradient: const LinearGradient( - colors: [Colors.green, Colors.blue], - stops: [0], - begin: Alignment.topLeft, - end: Alignment.bottomCenter, - ), - spotsLine: barAreaSpotsLine2, -); - -bool checkToShowDot(FlSpot spot, LineChartBarData barData) => true; - -FlDotCirclePainter getDotDrawer( - FlSpot spot, - double percent, - LineChartBarData barData, - int index, -) => - FlDotCirclePainter(radius: 44, strokeWidth: 12); - -FlDotCirclePainter getDotDrawer5( - FlSpot spot, - double percent, - LineChartBarData barData, - int index, -) => - FlDotCirclePainter(radius: 44, strokeWidth: 14); - -FlDotCirclePainter getDotDrawer6( - FlSpot spot, - double percent, - LineChartBarData barData, - int index, -) => - FlDotCirclePainter(radius: 44.01, strokeWidth: 14); - -FlDotCirclePainter getDotDrawerTouched( - FlSpot spot, - double percent, - LineChartBarData barData, - int index, -) => - FlDotCirclePainter(radius: 12, color: Colors.red); - -FlDotCirclePainter getDotDrawerTouched4( - FlSpot spot, - double percent, - LineChartBarData barData, - int index, -) => - FlDotCirclePainter(radius: 12); - -FlDotCirclePainter getDotDrawerTouched6( - FlSpot spot, - double percent, - LineChartBarData barData, - int index, -) => - FlDotCirclePainter(radius: 12.01, color: Colors.red); - -const FlDotData flDotData1 = FlDotData( - getDotPainter: getDotDrawer, - checkToShowDot: checkToShowDot, -); -const FlDotData flDotData1Clone = FlDotData( - getDotPainter: getDotDrawer, - checkToShowDot: checkToShowDot, -); - -const FlDotData flDotData4 = FlDotData( - getDotPainter: getDotDrawer, -); - -const FlDotData flDotData5 = FlDotData( - getDotPainter: getDotDrawer5, -); - -const FlDotData flDotData6 = FlDotData( - getDotPainter: getDotDrawer6, -); - -const Shadow shadow1 = Shadow( - color: Colors.red, - blurRadius: 12, -); -const Shadow shadow1Clone = Shadow( - color: Colors.red, - blurRadius: 12, -); -const Shadow shadow2 = Shadow( - color: Colors.green, - blurRadius: 12, -); -const Shadow shadow3 = Shadow( - color: Colors.red, - blurRadius: 14, -); -final Shadow shadow4 = Shadow( - color: Colors.red.withOpacity(0.5), - blurRadius: 12, -); - -const LineChartStepData lineChartStepData1 = LineChartStepData(); - -const LineChartStepData lineChartStepData1Clone = LineChartStepData(); - -const LineChartStepData lineChartStepData2 = LineChartStepData( - stepDirection: LineChartStepData.stepDirectionForward, -); - -final LineChartBarData lineChartBarData1 = LineChartBarData( - dashArray: [0, 1], - gradient: const LinearGradient( - colors: [Colors.red, Colors.green], - stops: [0, 1], - begin: Alignment.center, - end: Alignment.bottomRight, - ), - spots: [ - flSpot1, - flSpot2, - ], - shadow: shadow1, - aboveBarData: barAreaData1, - belowBarData: barAreaData2, - barWidth: 12, - curveSmoothness: 12, - dotData: flDotData1, - isStrokeCapRound: true, - preventCurveOvershootingThreshold: 1.2, - showingIndicators: [0, 1], -); -final LineChartBarData lineChartBarData1Clone = LineChartBarData( - dashArray: [0, 1], - gradient: const LinearGradient( - colors: [Colors.red, Colors.green], - stops: [0, 1], - begin: Alignment.center, - end: Alignment.bottomRight, - ), - spots: [ - flSpot1Clone, - flSpot2, - ], - shadow: shadow1Clone, - aboveBarData: barAreaData1Clone, - belowBarData: barAreaData2, - barWidth: 12, - curveSmoothness: 12, - dotData: flDotData1Clone, - isStrokeCapRound: true, - preventCurveOvershootingThreshold: 1.2, - showingIndicators: [0, 1], -); - -final LineChartBarData lineChartBarData2 = LineChartBarData( - dashArray: [0, 1], - gradient: const LinearGradient( - colors: [Colors.red, Colors.green], - stops: [0, 1], - begin: Alignment.center, - end: Alignment.bottomRight, - ), - spots: [ - flSpot1, - flSpot2, - ], - shadow: shadow2, - isStepLineChart: true, - aboveBarData: barAreaData1, - belowBarData: barAreaData2, - barWidth: 12, - curveSmoothness: 12, - dotData: flDotData1, - isStrokeCapRound: true, - preventCurveOvershootingThreshold: 1.2, - showingIndicators: [0, 4], -); - -final LineChartBarData lineChartBarData3 = LineChartBarData( - gradient: const LinearGradient( - colors: [Colors.red, Colors.green], - stops: [0, 1], - begin: Alignment.center, - end: Alignment.bottomRight, - ), - spots: [ - flSpot1, - flSpot2, - ], - shadow: shadow3, - isStepLineChart: true, - lineChartStepData: lineChartStepData2, - aboveBarData: barAreaData1, - belowBarData: barAreaData2, - barWidth: 12, - curveSmoothness: 12, - dotData: flDotData1, - isStrokeCapRound: true, - preventCurveOvershootingThreshold: 1.2, - showingIndicators: [0, 1], -); - -final LineChartBarData lineChartBarData4 = LineChartBarData( - dashArray: [0, 1], - gradient: const LinearGradient( - colors: [Colors.red, Colors.green], - stops: [0, 1], - begin: Alignment.center, - end: Alignment.bottomRight, - ), - spots: [ - flSpot2, - flSpot1, - ], - shadow: shadow4, - lineChartStepData: lineChartStepData2, - aboveBarData: barAreaData1, - belowBarData: barAreaData2, - barWidth: 12, - curveSmoothness: 12, - dotData: flDotData1, - isStrokeCapRound: true, - preventCurveOvershootingThreshold: 1.2, - showingIndicators: [0, 1], -); - -final LineChartBarData lineChartBarData5 = LineChartBarData( - dashArray: [0, 1], - gradient: const LinearGradient( - colors: [Colors.red, Colors.green], - stops: [0, 1], - begin: Alignment.center, - end: Alignment.bottomRight, - ), - spots: [ - flSpot1, - flSpot2, - ], - aboveBarData: barAreaData2, - belowBarData: barAreaData1, - barWidth: 12, - curveSmoothness: 12, - dotData: flDotData1, - isStrokeCapRound: true, - preventCurveOvershootingThreshold: 1.2, - showingIndicators: [0, 1], -); - -final LineChartBarData lineChartBarData6 = LineChartBarData( - dashArray: [0, 1], - gradient: const LinearGradient( - colors: [Colors.red, Colors.green], - stops: [0, 1], - begin: Alignment.center, - end: Alignment.bottomRight, - ), - spots: [ - flSpot1, - flSpot2, - ], - aboveBarData: barAreaData1, - belowBarData: barAreaData2, - barWidth: 12, - curveSmoothness: 12, - dotData: flDotData1, - isStrokeCapRound: true, - preventCurveOvershootingThreshold: 1.2, - showingIndicators: [0, 1], -); - -final LineChartBarData lineChartBarData7 = LineChartBarData( - dashArray: [0, 1], - gradient: LinearGradient( - colors: [Colors.red, Colors.green.withOpacity(0.4)], - stops: const [0, 1], - begin: Alignment.center, - end: Alignment.bottomRight, - ), - spots: [ - flSpot1, - flSpot2, - ], - aboveBarData: barAreaData1, - belowBarData: barAreaData2, - barWidth: 12, - curveSmoothness: 12, - dotData: flDotData1, - isStrokeCapRound: true, - preventCurveOvershootingThreshold: 1.2, - showingIndicators: [0, 1], -); - -final LineChartBarData lineChartBarData8 = LineChartBarData( - dashArray: [0, 1], - gradient: const LinearGradient( - colors: [Colors.red, Colors.green], - stops: [0, 1], - begin: Alignment.center, - end: Alignment.bottomRight, - ), - spots: [ - flSpot1, - flSpot2, - ], - aboveBarData: barAreaData1, - belowBarData: barAreaData2, - barWidth: 12, - curveSmoothness: 12.01, - dotData: flDotData1, - isStrokeCapRound: true, - preventCurveOvershootingThreshold: 1.2, - showingIndicators: [0, 1], -); - -final LineChartBarData lineChartBarData9 = LineChartBarData( - dashArray: [0, 1], - gradient: const LinearGradient( - colors: [Colors.red, Colors.green], - stops: [0, 1], - begin: Alignment.center, - end: Alignment.bottomRight, - ), - spots: [ - flSpot1, - flSpot2, - ], - aboveBarData: barAreaData1, - belowBarData: barAreaData2, - barWidth: 12, - curveSmoothness: 12, - dotData: flDotData1, - isStrokeCapRound: true, - preventCurveOverShooting: true, - preventCurveOvershootingThreshold: 1.2, - showingIndicators: [0, 1], -); - -final TouchLineBarSpot lineBarSpot1 = TouchLineBarSpot( - lineChartBarData1, - 0, - flSpot1, - 0, -); -final TouchLineBarSpot lineBarSpot1Clone = TouchLineBarSpot( - lineChartBarData1Clone, - 0, - flSpot1Clone, - 0, -); - -final TouchLineBarSpot lineBarSpot2 = - TouchLineBarSpot(lineChartBarData1, 2, flSpot1, 2); - -final TouchLineBarSpot lineBarSpot3 = TouchLineBarSpot( - lineChartBarData1, - 100, - flSpot1, - 2, -); - -final LineTouchResponse lineTouchResponse1 = LineTouchResponse( - [ - lineBarSpot1, - lineBarSpot2, - ], -); -final LineTouchResponse lineTouchResponse1Clone = LineTouchResponse( - [ - lineBarSpot1Clone, - lineBarSpot2, - ], -); - -final LineTouchResponse lineTouchResponse2 = LineTouchResponse( - [ - lineBarSpot2, - lineBarSpot1, - ], -); - -const LineTouchResponse lineTouchResponse3 = LineTouchResponse( - [], -); - -final LineTouchResponse lineTouchResponse4 = LineTouchResponse( - [ - lineBarSpot1, - lineBarSpot2, - ], -); - -final LineTouchResponse lineTouchResponse5 = LineTouchResponse( - [ - lineBarSpot1, - lineBarSpot2, - ], -); - -const TouchedSpotIndicatorData touchedSpotIndicatorData1 = - TouchedSpotIndicatorData( - FlLine( - color: Colors.red, - dashArray: [], - ), - FlDotData( - getDotPainter: getDotDrawerTouched, - checkToShowDot: checkToShowDot, - ), -); -const TouchedSpotIndicatorData touchedSpotIndicatorData1Clone = - TouchedSpotIndicatorData( - FlLine( - color: Colors.red, - dashArray: [], - ), - FlDotData( - getDotPainter: getDotDrawerTouched, - checkToShowDot: checkToShowDot, - ), -); - -const TouchedSpotIndicatorData touchedSpotIndicatorData2 = - TouchedSpotIndicatorData( - FlLine( - color: Colors.red, - dashArray: [], - ), - FlDotData( - getDotPainter: getDotDrawerTouched, - ), -); -const TouchedSpotIndicatorData touchedSpotIndicatorData3 = - TouchedSpotIndicatorData( - FlLine( - color: Colors.red, - ), - FlDotData( - getDotPainter: getDotDrawerTouched, - checkToShowDot: checkToShowDot, - ), -); -const TouchedSpotIndicatorData touchedSpotIndicatorData4 = - TouchedSpotIndicatorData( - FlLine( - color: Colors.green, - dashArray: [], - ), - FlDotData( - getDotPainter: getDotDrawerTouched4, - checkToShowDot: checkToShowDot, - ), -); -const TouchedSpotIndicatorData touchedSpotIndicatorData5 = - TouchedSpotIndicatorData( - FlLine( - color: Colors.red, - dashArray: [], - ), - FlDotData( - getDotPainter: getDotDrawerTouched, - checkToShowDot: checkToShowDot, - show: false, - ), -); -const TouchedSpotIndicatorData touchedSpotIndicatorData6 = - TouchedSpotIndicatorData( - FlLine( - color: Colors.red, - dashArray: [], - ), - FlDotData( - getDotPainter: getDotDrawerTouched6, - checkToShowDot: checkToShowDot, - ), -); - -const LineTooltipItem lineTooltipItem1 = - LineTooltipItem('', TextStyle(color: Colors.green)); -const LineTooltipItem lineTooltipItem1Clone = - LineTooltipItem('', TextStyle(color: Colors.green)); - -const LineTooltipItem lineTooltipItem2 = - LineTooltipItem('ss', TextStyle(color: Colors.green)); -const LineTooltipItem lineTooltipItem3 = - LineTooltipItem('', TextStyle(color: Colors.blue)); -const LineTooltipItem lineTooltipItem4 = - LineTooltipItem('', TextStyle(fontSize: 33)); - -List lineChartGetTooltipItems(List list) { - return list.map((s) => lineTooltipItem1).toList(); -} - -const LineTouchTooltipData lineTouchTooltipData1 = LineTouchTooltipData( - tooltipPadding: EdgeInsets.all(0.1), - tooltipBgColor: Colors.green, - maxContentWidth: 12, - getTooltipItems: lineChartGetTooltipItems, - fitInsideHorizontally: true, - tooltipRoundedRadius: 12, - tooltipMargin: 33, - tooltipBorder: BorderSide(color: Colors.red), -); -const LineTouchTooltipData lineTouchTooltipData1Clone = LineTouchTooltipData( - tooltipPadding: EdgeInsets.all(0.1), - tooltipBgColor: Colors.green, - maxContentWidth: 12, - getTooltipItems: lineChartGetTooltipItems, - fitInsideHorizontally: true, - tooltipRoundedRadius: 12, - tooltipMargin: 33, - tooltipBorder: BorderSide(color: Colors.red), -); - -const LineTouchTooltipData lineTouchTooltipData2 = LineTouchTooltipData( - tooltipPadding: EdgeInsets.all(0.1), - tooltipBgColor: Colors.red, - maxContentWidth: 12, - getTooltipItems: lineChartGetTooltipItems, - fitInsideHorizontally: true, - tooltipRoundedRadius: 12, - tooltipMargin: 33, - tooltipBorder: BorderSide(color: Colors.red), -); -const LineTouchTooltipData lineTouchTooltipData3 = LineTouchTooltipData( - tooltipPadding: EdgeInsets.all(0.2), - tooltipBgColor: Colors.green, - maxContentWidth: 12, - getTooltipItems: lineChartGetTooltipItems, - fitInsideHorizontally: true, - tooltipRoundedRadius: 12, - tooltipMargin: 33, - tooltipBorder: BorderSide(color: Colors.red), - tooltipHorizontalAlignment: FLHorizontalAlignment.left, -); -const LineTouchTooltipData lineTouchTooltipData4 = LineTouchTooltipData( - tooltipPadding: EdgeInsets.all(0.1), - tooltipBgColor: Colors.green, - maxContentWidth: 13, - getTooltipItems: lineChartGetTooltipItems, - fitInsideHorizontally: true, - tooltipRoundedRadius: 12, - tooltipMargin: 33, - tooltipBorder: BorderSide(color: Colors.red), - tooltipHorizontalAlignment: FLHorizontalAlignment.right, -); -const LineTouchTooltipData lineTouchTooltipData5 = LineTouchTooltipData( - tooltipPadding: EdgeInsets.all(0.1), - tooltipBgColor: Colors.green, - maxContentWidth: 12, - getTooltipItems: lineChartGetTooltipItems, - fitInsideHorizontally: true, - tooltipRoundedRadius: 12, - tooltipMargin: 34, - tooltipBorder: BorderSide(color: Colors.red), - tooltipHorizontalOffset: 10, -); -const LineTouchTooltipData lineTouchTooltipData6 = LineTouchTooltipData( - tooltipPadding: EdgeInsets.all(0.1), - tooltipBgColor: Colors.green, - maxContentWidth: 12, - getTooltipItems: lineChartGetTooltipItems, - fitInsideHorizontally: true, - tooltipRoundedRadius: 12, - tooltipMargin: 33, - tooltipBorder: BorderSide(color: Colors.pink), - tooltipHorizontalAlignment: FLHorizontalAlignment.left, - tooltipHorizontalOffset: -10, -); -const LineTouchTooltipData lineTouchTooltipData7 = LineTouchTooltipData( - tooltipPadding: EdgeInsets.all(0.1), - tooltipBgColor: Colors.green, - maxContentWidth: 12, - getTooltipItems: lineChartGetTooltipItems, - fitInsideHorizontally: true, - tooltipRoundedRadius: 12, - tooltipMargin: 33, - tooltipBorder: BorderSide(color: Colors.red, width: 2), - tooltipHorizontalAlignment: FLHorizontalAlignment.right, - tooltipHorizontalOffset: 10, -); - -void lineTouchCallback(FlTouchEvent event, LineTouchResponse? response) {} - -List getTouchedSpotIndicator( - LineChartBarData barData, - List indexes, -) => - indexes.map((i) => touchedSpotIndicatorData1).toList(); - -const LineTouchData lineTouchData1 = LineTouchData( - touchCallback: lineTouchCallback, - getTouchedSpotIndicator: getTouchedSpotIndicator, - handleBuiltInTouches: false, - touchSpotThreshold: 12, - touchTooltipData: lineTouchTooltipData1, -); -const LineTouchData lineTouchData1Clone = LineTouchData( - touchCallback: lineTouchCallback, - getTouchedSpotIndicator: getTouchedSpotIndicator, - handleBuiltInTouches: false, - touchSpotThreshold: 12, - touchTooltipData: lineTouchTooltipData1, -); - -const LineTouchData lineTouchData2 = LineTouchData( - getTouchedSpotIndicator: getTouchedSpotIndicator, - handleBuiltInTouches: false, - touchSpotThreshold: 12, - touchTooltipData: lineTouchTooltipData1, -); -const LineTouchData lineTouchData3 = LineTouchData( - touchCallback: lineTouchCallback, - handleBuiltInTouches: false, - touchSpotThreshold: 12, - touchTooltipData: lineTouchTooltipData1, -); -const LineTouchData lineTouchData4 = LineTouchData( - touchCallback: lineTouchCallback, - getTouchedSpotIndicator: getTouchedSpotIndicator, - handleBuiltInTouches: false, - touchSpotThreshold: 12, -); -const LineTouchData lineTouchData5 = LineTouchData( - touchCallback: lineTouchCallback, - getTouchedSpotIndicator: getTouchedSpotIndicator, - handleBuiltInTouches: false, - touchSpotThreshold: 12.001, - touchTooltipData: lineTouchTooltipData1, -); -const LineTouchData lineTouchData6 = LineTouchData( - touchCallback: lineTouchCallback, - getTouchedSpotIndicator: getTouchedSpotIndicator, - touchSpotThreshold: 12, - touchTooltipData: lineTouchTooltipData1, -); -final LineTouchData lineTouchData7 = LineTouchData( - touchCallback: lineTouchCallback, - getTouchedSpotIndicator: getTouchedSpotIndicator, - handleBuiltInTouches: false, - touchSpotThreshold: 12, - touchTooltipData: lineTouchTooltipData1, - getTouchLineEnd: (barData, index) => double.infinity, -); -const LineTouchData lineTouchData8 = LineTouchData( - touchCallback: lineTouchCallback, - getTouchedSpotIndicator: getTouchedSpotIndicator, - handleBuiltInTouches: false, - touchSpotThreshold: 12, - touchTooltipData: lineTouchTooltipData1, - longPressDuration: Duration.zero, -); - -String horizontalLabelResolver(HorizontalLine horizontalLine) => 'test'; - -String verticalLabelResolver(VerticalLine horizontalLine) => 'test'; - -final HorizontalLineLabel horizontalLineLabel1 = HorizontalLineLabel( - show: true, - style: const TextStyle(color: Colors.green), - labelResolver: horizontalLabelResolver, - alignment: Alignment.topCenter, - padding: const EdgeInsets.all(12), -); -final HorizontalLineLabel horizontalLineLabel1Clone = HorizontalLineLabel( - show: true, - style: const TextStyle(color: Colors.green), - labelResolver: horizontalLabelResolver, - alignment: Alignment.topCenter, - padding: const EdgeInsets.all(12), -); -final HorizontalLineLabel horizontalLineLabel2 = HorizontalLineLabel( - style: const TextStyle(color: Colors.green), - labelResolver: horizontalLabelResolver, - alignment: Alignment.topCenter, - padding: const EdgeInsets.all(12), -); -final HorizontalLineLabel horizontalLineLabel3 = HorizontalLineLabel( - show: true, - labelResolver: horizontalLabelResolver, - alignment: Alignment.topCenter, - padding: const EdgeInsets.all(12), -); -final HorizontalLineLabel horizontalLineLabel4 = HorizontalLineLabel( - show: true, - style: const TextStyle(color: Colors.green), - alignment: Alignment.topCenter, - padding: const EdgeInsets.all(12), -); -final HorizontalLineLabel horizontalLineLabel5 = HorizontalLineLabel( - show: true, - style: const TextStyle(color: Colors.green), - labelResolver: horizontalLabelResolver, - alignment: Alignment.bottomRight, - padding: const EdgeInsets.all(12), -); -final HorizontalLineLabel horizontalLineLabel6 = HorizontalLineLabel( - show: true, - style: const TextStyle(color: Colors.green), - labelResolver: horizontalLabelResolver, - alignment: Alignment.topCenter, - padding: const EdgeInsets.all(44), -); -final HorizontalLineLabel horizontalLineLabel7 = HorizontalLineLabel( - style: const TextStyle(color: Colors.green), - labelResolver: horizontalLabelResolver, - alignment: Alignment.topCenter, - padding: const EdgeInsets.all(12), -); - -final VerticalLineLabel verticalLineLabel1 = VerticalLineLabel( - show: true, - style: const TextStyle(color: Colors.green), - labelResolver: verticalLabelResolver, - alignment: Alignment.topCenter, - padding: const EdgeInsets.all(12), -); -final VerticalLineLabel verticalLineLabel1Clone = VerticalLineLabel( - show: true, - style: const TextStyle(color: Colors.green), - labelResolver: verticalLabelResolver, - alignment: Alignment.topCenter, - padding: const EdgeInsets.all(12), -); -final VerticalLineLabel verticalLineLabel2 = VerticalLineLabel( - show: false, - style: const TextStyle(color: Colors.green), - labelResolver: verticalLabelResolver, - alignment: Alignment.topCenter, - padding: const EdgeInsets.all(12), -); -final VerticalLineLabel verticalLineLabel3 = VerticalLineLabel( - show: true, - labelResolver: verticalLabelResolver, - alignment: Alignment.topCenter, - padding: const EdgeInsets.all(12), -); -final VerticalLineLabel verticalLineLabel4 = VerticalLineLabel( - show: true, - style: const TextStyle(color: Colors.green), - alignment: Alignment.topCenter, - padding: const EdgeInsets.all(12), -); -final VerticalLineLabel verticalLineLabel5 = VerticalLineLabel( - show: true, - style: const TextStyle(color: Colors.green), - labelResolver: verticalLabelResolver, - alignment: Alignment.bottomRight, - padding: const EdgeInsets.all(12), -); -final VerticalLineLabel verticalLineLabel6 = VerticalLineLabel( - show: true, - style: const TextStyle(color: Colors.green), - labelResolver: verticalLabelResolver, - alignment: Alignment.topCenter, - padding: const EdgeInsets.all(44), -); -final VerticalLineLabel verticalLineLabel7 = VerticalLineLabel( - show: false, - style: const TextStyle(color: Colors.green), - labelResolver: verticalLabelResolver, - alignment: Alignment.topCenter, - padding: const EdgeInsets.all(12), -); - -final HorizontalLine horizontalLine1 = HorizontalLine( - y: 12, - color: Colors.red, - dashArray: [0, 1], - strokeWidth: 21, - label: horizontalLineLabel1, -); -final HorizontalLine horizontalLine1Clone = HorizontalLine( - y: 12, - color: Colors.red, - dashArray: [0, 1], - strokeWidth: 21, - label: horizontalLineLabel1, -); -final HorizontalLine horizontalLine2 = HorizontalLine( - y: 12, - color: Colors.red, - dashArray: [0, 1, 3], - strokeWidth: 21, - label: horizontalLineLabel1, -); -final HorizontalLine horizontalLine3 = HorizontalLine( - y: 12, - color: Colors.red, - dashArray: [0, 1], - strokeWidth: 22, - label: horizontalLineLabel1, -); -final HorizontalLine horizontalLine4 = HorizontalLine( - y: 12, - color: Colors.red, - dashArray: [1, 0], - strokeWidth: 21, - label: horizontalLineLabel1, -); -final HorizontalLine horizontalLine5 = HorizontalLine( - y: 33, - color: Colors.red, - dashArray: [0, 1], - strokeWidth: 21, - label: horizontalLineLabel1, -); -final HorizontalLine horizontalLine6 = HorizontalLine( - y: 12, - color: Colors.green, - dashArray: [0, 1], - strokeWidth: 21, - label: horizontalLineLabel1, -); -final HorizontalLine horizontalLine7 = HorizontalLine( - y: 12, - color: Colors.red, - dashArray: [0, 1], - strokeWidth: 21, - label: horizontalLineLabel2, -); -final HorizontalLine horizontalLine8 = HorizontalLine( - y: 12, - color: Colors.red, - strokeWidth: 21, - label: horizontalLineLabel1, -); -final HorizontalLine horizontalLine9 = HorizontalLine( - y: 12, - color: Colors.red, - dashArray: [0, 12, 44], - strokeWidth: 21, - label: horizontalLineLabel1, -); - -final VerticalLine verticalLine1 = VerticalLine( - x: 12, - color: Colors.red, - dashArray: [0, 1], - strokeWidth: 21, - label: verticalLineLabel1, -); -final VerticalLine verticalLine1Clone = VerticalLine( - x: 12, - color: Colors.red, - dashArray: [0, 1], - strokeWidth: 21, - label: verticalLineLabel1, -); -final VerticalLine verticalLine2 = VerticalLine( - x: 12, - color: Colors.green, - dashArray: [0, 1], - strokeWidth: 21, - label: verticalLineLabel1, -); -final VerticalLine verticalLine3 = VerticalLine( - x: 12, - color: Colors.red, - dashArray: [0, 1], - strokeWidth: 22, - label: verticalLineLabel1, -); -final VerticalLine verticalLine4 = VerticalLine( - x: 12, - color: Colors.red, - dashArray: [1, 0], - strokeWidth: 21, - label: verticalLineLabel1, -); -final VerticalLine verticalLine5 = VerticalLine( - x: 33, - color: Colors.red, - dashArray: [0, 1], - strokeWidth: 21, - label: verticalLineLabel1, -); -final VerticalLine verticalLine6 = VerticalLine( - x: 12, - color: Colors.green, - dashArray: [0, 1], - strokeWidth: 21, - label: verticalLineLabel1, -); -final VerticalLine verticalLine7 = VerticalLine( - x: 12, - color: Colors.red, - dashArray: [0, 1], - strokeWidth: 21, - label: verticalLineLabel2, -); -final VerticalLine verticalLine8 = VerticalLine( - x: 12, - color: Colors.red, - strokeWidth: 21, - label: verticalLineLabel1, -); -final VerticalLine verticalLine9 = VerticalLine( - x: 12, - color: Colors.red, - dashArray: [0, 12, 44], - strokeWidth: 21, - label: verticalLineLabel1, -); - -final ExtraLinesData extraLinesData1 = ExtraLinesData( - horizontalLines: [ - horizontalLine1, - horizontalLine2, - horizontalLine3, - ], - verticalLines: [ - verticalLine1, - verticalLine2, - verticalLine3, - ], - extraLinesOnTop: false, -); -final ExtraLinesData extraLinesData1Clone = ExtraLinesData( - horizontalLines: [ - horizontalLine1Clone, - horizontalLine2, - horizontalLine3, - ], - verticalLines: [ - verticalLine1Clone, - verticalLine2, - verticalLine3, - ], - extraLinesOnTop: false, -); - -final ExtraLinesData extraLinesData2 = ExtraLinesData( - horizontalLines: [ - horizontalLine3, - horizontalLine1, - horizontalLine2, - ], - verticalLines: [ - verticalLine3, - verticalLine1, - verticalLine2, - ], - extraLinesOnTop: false, -); -final ExtraLinesData extraLinesData3 = ExtraLinesData( - horizontalLines: [ - horizontalLine1, - horizontalLine2, - ], - verticalLines: [ - verticalLine1, - verticalLine2, - ], - extraLinesOnTop: false, -); -final ExtraLinesData extraLinesData4 = ExtraLinesData( - horizontalLines: [ - horizontalLine1, - horizontalLine2, - horizontalLine3, - ], - extraLinesOnTop: false, -); -final ExtraLinesData extraLinesData5 = ExtraLinesData( - verticalLines: [ - verticalLine1, - verticalLine2, - verticalLine3, - ], - extraLinesOnTop: false, -); -final ExtraLinesData extraLinesData6 = ExtraLinesData( - horizontalLines: [ - horizontalLine1, - horizontalLine2, - horizontalLine3, - ], - verticalLines: [ - verticalLine1, - verticalLine2, - verticalLine3, - ], -); - -final SizedPicture sizedPicture1 = SizedPicture( - PictureRecorder().endRecording(), - 10, - 30, -); -final SizedPicture sizedPicture1Clone = SizedPicture( - PictureRecorder().endRecording(), - 10, - 30, -); - -final SizedPicture sizedPicture2 = SizedPicture( - PictureRecorder().endRecording(), - 11, - 30, -); -final SizedPicture sizedPicture3 = SizedPicture( - PictureRecorder().endRecording(), - 10, - 32, -); -final SizedPicture sizedPicture4 = SizedPicture( - PictureRecorder().endRecording(), - 442, - 30, -); - -final BetweenBarsData betweenBarsData1 = BetweenBarsData( - fromIndex: 1, - toIndex: 2, - gradient: const LinearGradient( - begin: Alignment(1, 3), - end: Alignment(4, 1), - stops: [1, 2, 3], - colors: [Colors.green, Colors.blue, Colors.red], - ), -); -final BetweenBarsData betweenBarsData1Clone = BetweenBarsData( - fromIndex: 1, - toIndex: 2, - gradient: const LinearGradient( - begin: Alignment(1, 3), - end: Alignment(4, 1), - stops: [1, 2, 3], - colors: [Colors.green, Colors.blue, Colors.red], - ), -); -final BetweenBarsData betweenBarsData2 = BetweenBarsData( - fromIndex: 2, - toIndex: 2, - gradient: const LinearGradient( - begin: Alignment(1, 3), - end: Alignment(4, 1), - stops: [1, 2, 3], - colors: [Colors.green, Colors.blue, Colors.red], - ), -); -final BetweenBarsData betweenBarsData3 = BetweenBarsData( - fromIndex: 1, - toIndex: 1, - gradient: const LinearGradient( - begin: Alignment(1, 4), - end: Alignment(4, 1), - stops: [1, 2, 3], - colors: [Colors.green, Colors.blue, Colors.red], - ), -); -final BetweenBarsData betweenBarsData4 = BetweenBarsData( - fromIndex: 1, - toIndex: 2, - gradient: const LinearGradient( - begin: Alignment(1, 3), - end: Alignment(5, 1), - stops: [1, 2, 3], - colors: [Colors.green, Colors.blue, Colors.red], - ), -); -final BetweenBarsData betweenBarsData5 = BetweenBarsData( - fromIndex: 1, - toIndex: 2, - gradient: const LinearGradient( - begin: Alignment(1, 3), - end: Alignment(4, 1), - colors: [Colors.green, Colors.blue, Colors.red], - ), -); -final BetweenBarsData betweenBarsData6 = BetweenBarsData( - fromIndex: 1, - toIndex: 2, - gradient: const LinearGradient( - begin: Alignment(1, 3), - end: Alignment(4, 1), - stops: [1, 2, 3], - colors: [Colors.green, Colors.blue], - ), -); -final BetweenBarsData betweenBarsData7 = BetweenBarsData( - fromIndex: 1, - toIndex: 2, - gradient: const LinearGradient( - begin: Alignment(1, 22), - end: Alignment(4, 1), - stops: [1, 2, 3], - colors: [Colors.green, Colors.blue], - ), -); -final BetweenBarsData betweenBarsData8 = BetweenBarsData( - fromIndex: 1, - toIndex: 2, - gradient: const LinearGradient( - begin: Alignment(1, 3), - end: Alignment(4, 1), - stops: [1, 2, 3], - colors: [], - ), -); - -final ShowingTooltipIndicators showingTooltipIndicator1 = - ShowingTooltipIndicators( - [lineBarSpot1, lineBarSpot2], -); -final ShowingTooltipIndicators showingTooltipIndicator1Clone = - ShowingTooltipIndicators( - [lineBarSpot1, lineBarSpot2], -); -const ShowingTooltipIndicators showingTooltipIndicator2 = - ShowingTooltipIndicators( - [], -); -final ShowingTooltipIndicators showingTooltipIndicator3 = - ShowingTooltipIndicators( - [lineBarSpot2], -); -final ShowingTooltipIndicators showingTooltipIndicator4 = - ShowingTooltipIndicators( - [lineBarSpot2, lineBarSpot1], -); -final ShowingTooltipIndicators showingTooltipIndicator5 = - ShowingTooltipIndicators( - [lineBarSpot1, lineBarSpot2, lineBarSpot2], -); - -final LineChartData lineChartData1 = LineChartData( - borderData: borderData1, - lineTouchData: lineTouchData1, - showingTooltipIndicators: [ - showingTooltipIndicator1, - showingTooltipIndicator2, - ], - backgroundColor: Colors.red, - maxY: 23, - rangeAnnotations: rangeAnnotations1, - gridData: flGridData1, - titlesData: MockData.flTitlesData1, - lineBarsData: [lineChartBarData1, lineChartBarData2, lineChartBarData3], - betweenBarsData: [betweenBarsData1, betweenBarsData2, betweenBarsData3], - extraLinesData: extraLinesData1, - maxX: 23, - minX: 11, - minY: 43, -); -final LineChartData lineChartData1Clone = LineChartData( - borderData: borderData1Clone, - lineTouchData: lineTouchData1Clone, - showingTooltipIndicators: [ - showingTooltipIndicator1Clone, - showingTooltipIndicator2, - ], - backgroundColor: Colors.red, - maxY: 23, - rangeAnnotations: rangeAnnotations1, - gridData: flGridData1Clone, - titlesData: MockData.flTitlesData1Clone, - lineBarsData: [lineChartBarData1Clone, lineChartBarData2, lineChartBarData3], - betweenBarsData: [betweenBarsData1Clone, betweenBarsData2, betweenBarsData3], - extraLinesData: extraLinesData1Clone, - maxX: 23, - minX: 11, - minY: 43, -); -final LineChartData lineChartData2 = LineChartData( - lineTouchData: lineTouchData1, - showingTooltipIndicators: [ - showingTooltipIndicator1, - showingTooltipIndicator2, - ], - backgroundColor: Colors.red, - maxY: 23, - rangeAnnotations: rangeAnnotations1, - gridData: flGridData1, - titlesData: MockData.flTitlesData1, - lineBarsData: [lineChartBarData1, lineChartBarData2, lineChartBarData3], - betweenBarsData: [betweenBarsData1, betweenBarsData2, betweenBarsData3], - extraLinesData: extraLinesData1, - maxX: 23, - minX: 11, - minY: 43, -); -final LineChartData lineChartData3 = LineChartData( - borderData: borderData1, - lineTouchData: lineTouchData2, - showingTooltipIndicators: [ - showingTooltipIndicator1, - showingTooltipIndicator2, - ], - backgroundColor: Colors.red, - maxY: 23, - rangeAnnotations: rangeAnnotations1, - gridData: flGridData1, - titlesData: MockData.flTitlesData1, - lineBarsData: [lineChartBarData1, lineChartBarData2, lineChartBarData3], - betweenBarsData: [betweenBarsData1, betweenBarsData2, betweenBarsData3], - extraLinesData: extraLinesData1, - maxX: 23, - minX: 11, - minY: 43, -); -final LineChartData lineChartData4 = LineChartData( - borderData: borderData1, - lineTouchData: lineTouchData1, - showingTooltipIndicators: [], - backgroundColor: Colors.red, - maxY: 23, - rangeAnnotations: rangeAnnotations1, - gridData: flGridData1, - titlesData: MockData.flTitlesData1, - lineBarsData: [lineChartBarData1, lineChartBarData2, lineChartBarData3], - betweenBarsData: [betweenBarsData1, betweenBarsData2, betweenBarsData3], - extraLinesData: extraLinesData1, - maxX: 23, - minX: 11, - minY: 43, -); -final LineChartData lineChartData5 = LineChartData( - borderData: borderData1, - lineTouchData: lineTouchData1, - showingTooltipIndicators: [ - showingTooltipIndicator2, - showingTooltipIndicator1, - ], - backgroundColor: Colors.red, - maxY: 23, - rangeAnnotations: rangeAnnotations1, - gridData: flGridData1, - titlesData: MockData.flTitlesData1, - lineBarsData: [lineChartBarData1, lineChartBarData2, lineChartBarData3], - betweenBarsData: [betweenBarsData1, betweenBarsData2, betweenBarsData3], - extraLinesData: extraLinesData1, - maxX: 23, - minX: 11, - minY: 43, -); -final LineChartData lineChartData6 = LineChartData( - borderData: borderData1, - lineTouchData: lineTouchData1, - backgroundColor: Colors.red, - maxY: 23, - rangeAnnotations: rangeAnnotations1, - gridData: flGridData1, - titlesData: MockData.flTitlesData1, - lineBarsData: [lineChartBarData1, lineChartBarData2, lineChartBarData3], - betweenBarsData: [betweenBarsData1, betweenBarsData2, betweenBarsData3], - extraLinesData: extraLinesData1, - maxX: 23, - minX: 11, - minY: 43, -); -final LineChartData lineChartData7 = LineChartData( - borderData: borderData1, - lineTouchData: lineTouchData1, - showingTooltipIndicators: [ - showingTooltipIndicator1, - showingTooltipIndicator2, - ], - backgroundColor: Colors.red, - maxY: 23, - rangeAnnotations: rangeAnnotations1, - gridData: flGridData1, - titlesData: MockData.flTitlesData2, - lineBarsData: [lineChartBarData1, lineChartBarData2, lineChartBarData3], - betweenBarsData: [betweenBarsData1, betweenBarsData2, betweenBarsData3], - extraLinesData: extraLinesData1, - maxX: 23, - minX: 11, - minY: 43, -); -final LineChartData lineChartData8 = LineChartData( - borderData: borderData1, - lineTouchData: lineTouchData1, - showingTooltipIndicators: [ - showingTooltipIndicator1, - showingTooltipIndicator2, - ], - clipData: const FlClipData.all(), - backgroundColor: Colors.red, - maxY: 23, - rangeAnnotations: rangeAnnotations1, - gridData: flGridData1, - titlesData: MockData.flTitlesData1, - lineBarsData: [lineChartBarData1, lineChartBarData2, lineChartBarData3], - betweenBarsData: [betweenBarsData1, betweenBarsData2, betweenBarsData3], - extraLinesData: extraLinesData1, - maxX: 23, - minX: 11, - minY: 43, -); -final LineChartData lineChartData9 = LineChartData( - borderData: borderData1, - lineTouchData: lineTouchData1, - showingTooltipIndicators: [ - showingTooltipIndicator1, - showingTooltipIndicator2, - ], - backgroundColor: Colors.red.withOpacity(0.2), - maxY: 23, - rangeAnnotations: rangeAnnotations1, - gridData: flGridData1, - titlesData: MockData.flTitlesData1, - lineBarsData: [lineChartBarData1, lineChartBarData2, lineChartBarData3], - betweenBarsData: [betweenBarsData1, betweenBarsData2, betweenBarsData3], - extraLinesData: extraLinesData1, - maxX: 23, - minX: 11, - minY: 43, -); -final LineChartData lineChartData10 = LineChartData( - borderData: borderData1, - lineTouchData: lineTouchData1, - showingTooltipIndicators: [ - showingTooltipIndicator1, - showingTooltipIndicator2, - ], - backgroundColor: Colors.red, - maxY: 24, - rangeAnnotations: rangeAnnotations1, - gridData: flGridData1, - titlesData: MockData.flTitlesData1, - lineBarsData: [lineChartBarData1, lineChartBarData2, lineChartBarData3], - betweenBarsData: [betweenBarsData1, betweenBarsData2, betweenBarsData3], - extraLinesData: extraLinesData1, - maxX: 23, - minX: 11, - minY: 43, -); -final LineChartData lineChartData11 = LineChartData( - borderData: borderData1, - lineTouchData: lineTouchData1, - showingTooltipIndicators: [ - showingTooltipIndicator1, - showingTooltipIndicator2, - ], - backgroundColor: Colors.red, - maxY: 23, - gridData: flGridData1, - titlesData: MockData.flTitlesData1, - lineBarsData: [lineChartBarData1, lineChartBarData2, lineChartBarData3], - betweenBarsData: [betweenBarsData1, betweenBarsData2, betweenBarsData3], - extraLinesData: extraLinesData1, - maxX: 23, - minX: 11, - minY: 43, -); -final LineChartData lineChartData12 = LineChartData( - borderData: borderData1, - lineTouchData: lineTouchData1, - showingTooltipIndicators: [ - showingTooltipIndicator1, - showingTooltipIndicator2, - ], - backgroundColor: Colors.red, - maxY: 23, - rangeAnnotations: rangeAnnotations1, - gridData: flGridData2, - titlesData: MockData.flTitlesData1, - lineBarsData: [lineChartBarData1, lineChartBarData2, lineChartBarData3], - betweenBarsData: [betweenBarsData1, betweenBarsData2, betweenBarsData3], - extraLinesData: extraLinesData1, - maxX: 23, - minX: 11, - minY: 43, -); -final LineChartData lineChartData13 = LineChartData( - borderData: borderData1, - lineTouchData: lineTouchData1, - showingTooltipIndicators: [ - showingTooltipIndicator1, - showingTooltipIndicator2, - ], - backgroundColor: Colors.red, - maxY: 23, - rangeAnnotations: rangeAnnotations1, - gridData: flGridData1, - titlesData: MockData.flTitlesData3, - lineBarsData: [lineChartBarData1, lineChartBarData2, lineChartBarData3], - betweenBarsData: [betweenBarsData1, betweenBarsData2, betweenBarsData3], - extraLinesData: extraLinesData1, - maxX: 23, - minX: 11, - minY: 43, -); -final LineChartData lineChartData14 = LineChartData( - borderData: borderData1, - lineTouchData: lineTouchData1, - showingTooltipIndicators: [ - showingTooltipIndicator1, - showingTooltipIndicator2, - ], - backgroundColor: Colors.red, - maxY: 23, - rangeAnnotations: rangeAnnotations1, - gridData: flGridData1, - titlesData: MockData.flTitlesData1, - lineBarsData: [lineChartBarData2, lineChartBarData3, lineChartBarData1], - betweenBarsData: [betweenBarsData1, betweenBarsData2, betweenBarsData3], - extraLinesData: extraLinesData1, - maxX: 23, - minX: 11, - minY: 43, -); -final LineChartData lineChartData15 = LineChartData( - borderData: borderData1, - lineTouchData: lineTouchData1, - showingTooltipIndicators: [ - showingTooltipIndicator1, - showingTooltipIndicator2, - ], - backgroundColor: Colors.red, - maxY: 23, - rangeAnnotations: rangeAnnotations1, - gridData: flGridData1, - titlesData: MockData.flTitlesData1, - betweenBarsData: [betweenBarsData1, betweenBarsData2, betweenBarsData3], - extraLinesData: extraLinesData1, - maxX: 23, - minX: 11, - minY: 43, -); -final LineChartData lineChartData16 = LineChartData( - borderData: borderData1, - lineTouchData: lineTouchData1, - showingTooltipIndicators: [ - showingTooltipIndicator1, - showingTooltipIndicator2, - ], - backgroundColor: Colors.red, - maxY: 23, - rangeAnnotations: rangeAnnotations1, - gridData: flGridData1, - titlesData: MockData.flTitlesData1, - lineBarsData: [lineChartBarData1, lineChartBarData2, lineChartBarData3], - betweenBarsData: [betweenBarsData2, betweenBarsData3, betweenBarsData1], - extraLinesData: extraLinesData1, - maxX: 23, - minX: 11, - minY: 43, -); -final LineChartData lineChartData17 = LineChartData( - borderData: borderData1, - lineTouchData: lineTouchData1, - showingTooltipIndicators: [ - showingTooltipIndicator1, - showingTooltipIndicator2, - ], - backgroundColor: Colors.red, - maxY: 23, - rangeAnnotations: rangeAnnotations1, - gridData: flGridData1, - titlesData: MockData.flTitlesData1, - lineBarsData: [lineChartBarData1, lineChartBarData2, lineChartBarData3], - betweenBarsData: [betweenBarsData1, betweenBarsData2, betweenBarsData3], - extraLinesData: extraLinesData2, - maxX: 23, - minX: 11, - minY: 43, -); -final LineChartData lineChartData18 = LineChartData( - borderData: borderData1, - lineTouchData: lineTouchData1, - showingTooltipIndicators: [ - showingTooltipIndicator1, - showingTooltipIndicator2, - ], - backgroundColor: Colors.red, - maxY: 23, - rangeAnnotations: rangeAnnotations1, - gridData: flGridData1, - titlesData: MockData.flTitlesData1, - lineBarsData: [lineChartBarData1, lineChartBarData2, lineChartBarData3], - betweenBarsData: [betweenBarsData1, betweenBarsData2, betweenBarsData3], - extraLinesData: extraLinesData1, - maxX: 23.01, - minX: 11, - minY: 43, -); -final LineChartData lineChartData19 = LineChartData( - borderData: borderData1, - lineTouchData: lineTouchData1, - showingTooltipIndicators: [ - showingTooltipIndicator1, - showingTooltipIndicator2, - ], - backgroundColor: Colors.red, - maxY: 23, - rangeAnnotations: rangeAnnotations1, - gridData: flGridData1, - titlesData: MockData.flTitlesData1, - lineBarsData: [lineChartBarData1, lineChartBarData2, lineChartBarData3], - betweenBarsData: [betweenBarsData1, betweenBarsData2, betweenBarsData3], - extraLinesData: extraLinesData1, - maxX: 23, - minX: 44, - minY: 43, -); -final LineChartData lineChartData20 = LineChartData( - borderData: borderData1, - lineTouchData: lineTouchData1, - showingTooltipIndicators: [ - showingTooltipIndicator1, - showingTooltipIndicator2, - ], - backgroundColor: Colors.red, - maxY: 23, - rangeAnnotations: rangeAnnotations1, - gridData: flGridData1, - titlesData: MockData.flTitlesData1, - lineBarsData: [lineChartBarData1, lineChartBarData2, lineChartBarData3], - betweenBarsData: [betweenBarsData1, betweenBarsData2, betweenBarsData3], - extraLinesData: extraLinesData1, - maxX: 23, - minX: 11, - minY: 302, -); - -final PieChartData pieChartData1 = PieChartData( - borderData: FlBorderData(show: false, border: Border.all()), - startDegreeOffset: 0, - sections: [ - PieChartSectionData(value: 12, color: Colors.red), - PieChartSectionData(value: 22, color: Colors.green), - ], - centerSpaceColor: Colors.white, - centerSpaceRadius: 12, - pieTouchData: PieTouchData( - enabled: false, - ), - sectionsSpace: 44, -); -final PieChartData pieChartData1Clone = pieChartData1.copyWith(); - -bool gridCheckToShowLine(double value) => true; - -FlLine gridGetDrawingLine(double value) => const FlLine(); - -ScatterTooltipItem? scatterChartGetTooltipItems(ScatterSpot spots) { - return ScatterTooltipItem( - 'check', - textStyle: const TextStyle(color: Colors.blue), - bottomMargin: 23, - ); -} - -final ScatterSpot scatterSpot1 = ScatterSpot(1, 40); -final ScatterSpot scatterSpot1Clone = ScatterSpot(1, 40); -final ScatterSpot scatterSpot2 = ScatterSpot(-4, -8); -final ScatterSpot scatterSpot2Clone = scatterSpot2.copyWith(); -final ScatterSpot scatterSpot3 = ScatterSpot(-14, 5); -final ScatterSpot scatterSpot4 = ScatterSpot(-0, 0); - -String getLabel(int spotIndex, ScatterSpot spot) => 'label'; - -TextStyle getLabelTextStyle(int spotIndex, ScatterSpot spot) => - const TextStyle(color: Colors.green); - -final ScatterChartData scatterChartData1 = ScatterChartData( - minY: 0, - maxY: 12, - maxX: 22, - minX: 11, - gridData: const FlGridData( - show: false, - getDrawingHorizontalLine: gridGetDrawingLine, - getDrawingVerticalLine: gridGetDrawingLine, - checkToShowHorizontalLine: gridCheckToShowLine, - checkToShowVerticalLine: gridCheckToShowLine, - drawVerticalLine: false, - horizontalInterval: 33, - verticalInterval: 1, - ), - backgroundColor: Colors.black, - clipData: const FlClipData.none(), - borderData: FlBorderData( - show: true, - border: Border.all( - color: Colors.white, - ), - ), - scatterSpots: [ - ScatterSpot(0, 0, show: false, radius: 33, color: Colors.yellow), - ScatterSpot(2, 2, show: false, radius: 11, color: Colors.purple), - ScatterSpot(1, 2, show: false, radius: 11, color: Colors.white), - ], - scatterTouchData: ScatterTouchData( - enabled: true, - touchTooltipData: ScatterTouchTooltipData( - getTooltipItems: scatterChartGetTooltipItems, - fitInsideHorizontally: true, - fitInsideVertically: false, - maxContentWidth: 33, - tooltipBgColor: Colors.white, - tooltipPadding: const EdgeInsets.all(23), - tooltipRoundedRadius: 534, - ), - handleBuiltInTouches: false, - touchCallback: scatterTouchCallback, - touchSpotThreshold: 12, - ), - showingTooltipIndicators: [0, 1, 2], - titlesData: const FlTitlesData( - leftTitles: AxisTitles( - axisNameSize: 33, - axisNameWidget: MockData.widget1, - ), - rightTitles: AxisTitles( - axisNameSize: 1326, - axisNameWidget: MockData.widget3, - sideTitles: SideTitles(reservedSize: 500, showTitles: true), - ), - topTitles: AxisTitles( - axisNameSize: 34, - axisNameWidget: MockData.widget4, - ), - bottomTitles: AxisTitles( - axisNameSize: 22, - axisNameWidget: MockData.widget2, - ), - ), - scatterLabelSettings: ScatterLabelSettings( - showLabel: true, - getLabelTextStyleFunction: getLabelTextStyle, - getLabelFunction: getLabel, - ), -); -final ScatterChartData scatterChartData1Clone = scatterChartData1.copyWith(); -final ScatterTouchTooltipData scatterTouchTooltipData1 = - ScatterTouchTooltipData( - tooltipRoundedRadius: 23, - tooltipPadding: const EdgeInsets.all(11), - tooltipBgColor: Colors.green, - maxContentWidth: 33, - fitInsideVertically: true, - fitInsideHorizontally: false, - getTooltipItems: scatterChartGetTooltipItems, - tooltipBorder: const BorderSide(color: Colors.red), -); -final ScatterTouchTooltipData scatterTouchTooltipData1Clone = - ScatterTouchTooltipData( - tooltipRoundedRadius: 23, - tooltipPadding: const EdgeInsets.all(11), - tooltipBgColor: Colors.green, - maxContentWidth: 33, - fitInsideVertically: true, - fitInsideHorizontally: false, - getTooltipItems: scatterChartGetTooltipItems, - tooltipBorder: const BorderSide(color: Colors.red), -); -final ScatterTouchTooltipData scatterTouchTooltipData2 = - ScatterTouchTooltipData( - tooltipRoundedRadius: 23, - tooltipPadding: const EdgeInsets.all(11), - tooltipBgColor: Colors.green, - maxContentWidth: 33, - fitInsideVertically: true, - fitInsideHorizontally: false, - getTooltipItems: scatterChartGetTooltipItems, - tooltipBorder: const BorderSide(color: Colors.blue), - tooltipHorizontalAlignment: FLHorizontalAlignment.left, -); -final ScatterTouchTooltipData scatterTouchTooltipData3 = - ScatterTouchTooltipData( - tooltipRoundedRadius: 23, - tooltipPadding: const EdgeInsets.all(11), - tooltipBgColor: Colors.green, - maxContentWidth: 33, - fitInsideVertically: true, - fitInsideHorizontally: false, - getTooltipItems: scatterChartGetTooltipItems, - tooltipBorder: const BorderSide(color: Colors.red, width: 2), - tooltipHorizontalAlignment: FLHorizontalAlignment.right, - tooltipHorizontalOffset: 10, -); - -final BarChartRodStackItem barChartRodStackItem1 = BarChartRodStackItem( - 1, - 2, - Colors.green, -); -final BarChartRodStackItem barChartRodStackItem1Clone = - barChartRodStackItem1.copyWith(); - -final BarChartRodStackItem barChartRodStackItem2 = BarChartRodStackItem( - 2, - 3, - Colors.green, -); - -final BackgroundBarChartRodData backgroundBarChartRodData1 = - BackgroundBarChartRodData( - toY: 21, - color: Colors.blue, - show: true, -); -final BackgroundBarChartRodData backgroundBarChartRodData1Clone = - BackgroundBarChartRodData( - toY: 21, - color: Colors.blue, - show: true, -); -final BackgroundBarChartRodData backgroundBarChartRodData2 = - BackgroundBarChartRodData( - toY: 44, - color: Colors.red, - show: true, -); -final BackgroundBarChartRodData backgroundBarChartRodData3 = - BackgroundBarChartRodData( - toY: 44, - color: Colors.green, - show: true, -); - -final BarChartRodData barChartRodData1 = BarChartRodData( - color: Colors.red, - toY: 12, - width: 32, - borderRadius: const BorderRadius.all(Radius.circular(12)), - rodStackItems: [ - barChartRodStackItem1, - barChartRodStackItem2, - ], - backDrawRodData: backgroundBarChartRodData1, -); - -final BarChartRodData barChartRodData1Clone = barChartRodData1.copyWith( - rodStackItems: [ - barChartRodStackItem1Clone, - barChartRodStackItem2, - ], -); - -final BarChartRodData barChartRodData2 = BarChartRodData( - color: Colors.red, - toY: 1132, - width: 32, - borderRadius: const BorderRadius.all(Radius.circular(12)), - rodStackItems: [ - barChartRodStackItem1, - barChartRodStackItem2, - ], - backDrawRodData: backgroundBarChartRodData1, -); -final BarChartRodData barChartRodData3 = BarChartRodData( - color: Colors.green, - toY: 12, - width: 32, - borderRadius: const BorderRadius.all(Radius.circular(12)), - rodStackItems: [ - barChartRodStackItem2, - ], - backDrawRodData: backgroundBarChartRodData1, -); -final BarChartRodData barChartRodData4 = BarChartRodData( - color: Colors.red, - toY: 12, - width: 32, - borderRadius: const BorderRadius.all(Radius.circular(12)), - rodStackItems: [ - barChartRodStackItem2, - barChartRodStackItem1, - ], - backDrawRodData: backgroundBarChartRodData1, -); -final BarChartRodData barChartRodData5 = BarChartRodData( - color: Colors.red, - toY: 12, - width: 55, - borderRadius: const BorderRadius.all(Radius.circular(12)), - rodStackItems: [ - barChartRodStackItem1, - barChartRodStackItem2, - ], - backDrawRodData: backgroundBarChartRodData1, -); -final BarChartRodData barChartRodData6 = BarChartRodData( - color: Colors.red, - toY: 12, - width: 32, - borderRadius: const BorderRadius.all(Radius.circular(12)), - backDrawRodData: backgroundBarChartRodData1, -); -final BarChartRodData barChartRodData7 = BarChartRodData( - color: Colors.red, - toY: 12, - width: 32, - borderRadius: const BorderRadius.all(Radius.circular(12)), - rodStackItems: [ - barChartRodStackItem1, - barChartRodStackItem2, - ], - backDrawRodData: backgroundBarChartRodData2, -); -final BarChartRodData barChartRodData8 = BarChartRodData( - color: Colors.red, - toY: 12, - width: 32, - borderRadius: const BorderRadius.all(Radius.circular(14)), - rodStackItems: [ - barChartRodStackItem1, - barChartRodStackItem2, - ], - backDrawRodData: backgroundBarChartRodData1, -); - -final BarChartGroupData barChartGroupData1 = BarChartGroupData( - x: 12, - showingTooltipIndicators: [0, 1, 2], - barRods: [ - barChartRodData1, - barChartRodData2, - barChartRodData3, - barChartRodData4, - ], - barsSpace: 23, -); -final BarChartGroupData barChartGroupData1Clone = BarChartGroupData( - x: 12, - showingTooltipIndicators: [0, 1, 2], - barRods: [ - barChartRodData1Clone, - barChartRodData2, - barChartRodData3, - barChartRodData4, - ], - barsSpace: 23, -); -final BarChartGroupData barChartGroupData2 = BarChartGroupData( - x: 13, - showingTooltipIndicators: [0, 1, 2], - barRods: [ - barChartRodData1, - barChartRodData2, - barChartRodData3, - barChartRodData4, - ], - barsSpace: 23, -); -final BarChartGroupData barChartGroupData3 = BarChartGroupData( - x: 12, - showingTooltipIndicators: [0, 1], - barRods: [ - barChartRodData1, - barChartRodData2, - barChartRodData3, - barChartRodData4, - ], - barsSpace: 23, -); -final BarChartGroupData barChartGroupData4 = BarChartGroupData( - x: 12, - showingTooltipIndicators: [0, 1, 2], - barRods: [ - barChartRodData1, - barChartRodData2, - barChartRodData4, - ], - barsSpace: 23, -); -final BarChartGroupData barChartGroupData5 = BarChartGroupData( - x: 12, - showingTooltipIndicators: [0, 1, 2], - barsSpace: 23, -); -final BarChartGroupData barChartGroupData6 = BarChartGroupData( - x: 12, - showingTooltipIndicators: [0, 1, 2], - barRods: [ - barChartRodData2, - barChartRodData3, - barChartRodData4, - barChartRodData1, - ], - barsSpace: 23, -); -final BarChartGroupData barChartGroupData7 = BarChartGroupData( - x: 12, - showingTooltipIndicators: [0, 1, 2], - barRods: [ - barChartRodData1, - barChartRodData2, - barChartRodData3, - barChartRodData4, - ], - barsSpace: 44, -); -final BarChartGroupData barChartGroupData8 = BarChartGroupData( - x: 12, - barRods: [ - barChartRodData1, - barChartRodData2, - barChartRodData3, - barChartRodData4, - ], - barsSpace: 23, -); -final BarChartGroupData barChartGroupData9 = BarChartGroupData( - x: 12, - showingTooltipIndicators: [0, 1, 2], - barRods: [ - barChartRodData1, - barChartRodData2, - barChartRodData3, - barChartRodData4, - ], - barsSpace: 0, -); - -final BarTouchedSpot barTouchedSpot1 = BarTouchedSpot( - barChartGroupData1, - 1, - barChartRodData1, - 2, - barChartRodStackItem1, - 1, - flSpot1, - Offset.zero, -); -final BarTouchedSpot barTouchedSpot1Clone = BarTouchedSpot( - barChartGroupData1Clone, - 1, - barChartRodData1Clone, - 2, - barChartRodStackItem1Clone, - 1, - flSpot1Clone, - Offset.zero, -); -final BarTouchedSpot barTouchedSpot2 = BarTouchedSpot( - barChartGroupData2, - 1, - barChartRodData1, - 2, - barChartRodStackItem2, - 2, - flSpot1, - Offset.zero, -); -final BarTouchedSpot barTouchedSpot3 = BarTouchedSpot( - barChartGroupData1, - 1, - barChartRodData2, - 2, - barChartRodStackItem2, - 2, - flSpot1, - Offset.zero, -); -final BarTouchedSpot barTouchedSpot4 = BarTouchedSpot( - barChartGroupData1, - 2, - barChartRodData1, - 2, - barChartRodStackItem2, - 2, - flSpot1, - Offset.zero, -); -final BarTouchedSpot barTouchedSpot5 = BarTouchedSpot( - barChartGroupData1, - 1, - barChartRodData1, - 3, - barChartRodStackItem2, - 2, - flSpot1, - Offset.zero, -); -final BarTouchedSpot barTouchedSpot6 = BarTouchedSpot( - barChartGroupData1, - 1, - barChartRodData1, - 2, - barChartRodStackItem2, - 2, - flSpot2, - Offset.zero, -); -final BarTouchedSpot barTouchedSpot7 = BarTouchedSpot( - barChartGroupData1, - 1, - barChartRodData1, - 2, - barChartRodStackItem2, - 2, - flSpot1, - const Offset(1, 10), -); - -final BarTouchResponse barTouchResponse1 = BarTouchResponse( - barTouchedSpot1, -); -final BarTouchResponse barTouchResponse1Clone = BarTouchResponse( - barTouchedSpot1Clone, -); -final BarTouchResponse barTouchResponse2 = BarTouchResponse( - barTouchedSpot2, -); - -final BarTooltipItem barTooltipItem1 = BarTooltipItem( - 'pashmam 1', - const TextStyle(color: Colors.red), -); -final BarTooltipItem barTooltipItem1Clone = BarTooltipItem( - 'pashmam 1', - const TextStyle(color: Colors.red), -); -final BarTooltipItem barTooltipItem2 = BarTooltipItem( - 'pashmam 2', - const TextStyle(color: Colors.red), -); -final BarTooltipItem barTooltipItem3 = BarTooltipItem( - 'pashmam 1', - const TextStyle(color: Colors.green), -); -final BarTooltipItem barTooltipItem4 = BarTooltipItem( - 'null', - const TextStyle(color: Colors.red), -); -final BarTooltipItem barTooltipItem5 = BarTooltipItem( - 'pashmam 1', - const TextStyle(fontSize: 85), -); - -BarTooltipItem getTooltipItem( - BarChartGroupData group, - int groupIndex, - BarChartRodData rod, - int rodIndex, -) { - const textStyle = TextStyle( - color: Colors.black, - fontWeight: FontWeight.bold, - fontSize: 14, - ); - return BarTooltipItem(rod.toY.toString(), textStyle); -} - -final BarTouchTooltipData barTouchTooltipData1 = BarTouchTooltipData( - tooltipRoundedRadius: 12, - fitInsideVertically: false, - fitInsideHorizontally: true, - maxContentWidth: 23, - tooltipBgColor: Colors.green, - tooltipPadding: const EdgeInsets.all(23), - getTooltipItem: getTooltipItem, - tooltipMargin: 12, - tooltipBorder: const BorderSide(color: Colors.red), -); -final BarTouchTooltipData barTouchTooltipData1Clone = BarTouchTooltipData( - tooltipRoundedRadius: 12, - fitInsideVertically: false, - fitInsideHorizontally: true, - maxContentWidth: 23, - tooltipBgColor: Colors.green, - tooltipPadding: const EdgeInsets.all(23), - getTooltipItem: getTooltipItem, - tooltipMargin: 12, - tooltipBorder: const BorderSide(color: Colors.red), -); -final BarTouchTooltipData barTouchTooltipData2 = BarTouchTooltipData( - tooltipRoundedRadius: 13, - fitInsideVertically: false, - fitInsideHorizontally: true, - maxContentWidth: 23, - tooltipBgColor: Colors.green, - tooltipPadding: const EdgeInsets.all(23), - getTooltipItem: getTooltipItem, - tooltipMargin: 12, - tooltipBorder: const BorderSide(color: Colors.red), - tooltipHorizontalAlignment: FLHorizontalAlignment.center, -); -final BarTouchTooltipData barTouchTooltipData3 = BarTouchTooltipData( - tooltipRoundedRadius: 12, - fitInsideVertically: true, - fitInsideHorizontally: true, - maxContentWidth: 23, - tooltipBgColor: Colors.green, - tooltipPadding: const EdgeInsets.all(23), - getTooltipItem: getTooltipItem, - tooltipMargin: 12, - tooltipBorder: const BorderSide(color: Colors.red), - tooltipHorizontalAlignment: FLHorizontalAlignment.left, -); -final BarTouchTooltipData barTouchTooltipData4 = BarTouchTooltipData( - tooltipRoundedRadius: 12, - fitInsideVertically: false, - fitInsideHorizontally: false, - maxContentWidth: 23, - tooltipBgColor: Colors.green, - tooltipPadding: const EdgeInsets.all(23), - getTooltipItem: getTooltipItem, - tooltipMargin: 12, - tooltipBorder: const BorderSide(color: Colors.red), - tooltipHorizontalAlignment: FLHorizontalAlignment.right, -); -final BarTouchTooltipData barTouchTooltipData5 = BarTouchTooltipData( - tooltipRoundedRadius: 12, - fitInsideVertically: false, - fitInsideHorizontally: true, - maxContentWidth: 23.00001, - tooltipBgColor: Colors.green, - tooltipPadding: const EdgeInsets.all(23), - getTooltipItem: getTooltipItem, - tooltipMargin: 12, - tooltipBorder: const BorderSide(color: Colors.red), - tooltipHorizontalAlignment: FLHorizontalAlignment.center, - tooltipHorizontalOffset: 10, -); -final BarTouchTooltipData barTouchTooltipData6 = BarTouchTooltipData( - tooltipRoundedRadius: 12, - fitInsideVertically: false, - fitInsideHorizontally: true, - maxContentWidth: 23, - tooltipBgColor: Colors.blue, - tooltipPadding: const EdgeInsets.all(23), - getTooltipItem: getTooltipItem, - tooltipMargin: 12, - tooltipBorder: const BorderSide(color: Colors.red), - tooltipHorizontalAlignment: FLHorizontalAlignment.left, - tooltipHorizontalOffset: -10, -); -final BarTouchTooltipData barTouchTooltipData7 = BarTouchTooltipData( - tooltipRoundedRadius: 12, - fitInsideVertically: false, - fitInsideHorizontally: true, - maxContentWidth: 23, - tooltipBgColor: Colors.green, - getTooltipItem: getTooltipItem, - tooltipMargin: 12, - tooltipBorder: const BorderSide(color: Colors.red), - tooltipHorizontalAlignment: FLHorizontalAlignment.right, - tooltipHorizontalOffset: 10, -); -final BarTouchTooltipData barTouchTooltipData8 = BarTouchTooltipData( - tooltipRoundedRadius: 12, - fitInsideVertically: false, - fitInsideHorizontally: true, - maxContentWidth: 23, - tooltipBgColor: Colors.green, - tooltipPadding: const EdgeInsets.all(23), - tooltipMargin: 12, - tooltipBorder: const BorderSide(color: Colors.red), -); -final BarTouchTooltipData barTouchTooltipData9 = BarTouchTooltipData( - tooltipRoundedRadius: 12, - fitInsideVertically: false, - fitInsideHorizontally: true, - maxContentWidth: 23, - tooltipBgColor: Colors.green, - tooltipPadding: const EdgeInsets.all(23), - getTooltipItem: getTooltipItem, - tooltipMargin: 333, - tooltipBorder: const BorderSide(color: Colors.red), -); -final BarTouchTooltipData barTouchTooltipData10 = BarTouchTooltipData( - tooltipRoundedRadius: 12, - fitInsideVertically: false, - fitInsideHorizontally: true, - maxContentWidth: 23, - tooltipBgColor: Colors.green, - tooltipPadding: const EdgeInsets.all(23), - getTooltipItem: getTooltipItem, - tooltipMargin: 12, - tooltipBorder: const BorderSide(color: Colors.blue), -); -final BarTouchTooltipData barTouchTooltipData11 = BarTouchTooltipData( - tooltipRoundedRadius: 12, - fitInsideVertically: false, - fitInsideHorizontally: true, - maxContentWidth: 23, - tooltipBgColor: Colors.green, - tooltipPadding: const EdgeInsets.all(23), - getTooltipItem: getTooltipItem, - tooltipMargin: 12, - tooltipBorder: const BorderSide(color: Colors.red, width: 2), -); - -void barTouchCallback(FlTouchEvent event, BarTouchResponse? response) {} - -void scatterTouchCallback(FlTouchEvent event, ScatterTouchResponse? response) {} - -final BarTouchData barTouchData1 = BarTouchData( - touchTooltipData: barTouchTooltipData1, - handleBuiltInTouches: false, - touchCallback: barTouchCallback, - enabled: false, - allowTouchBarBackDraw: true, - touchExtraThreshold: const EdgeInsets.all(12), -); -final BarTouchData barTouchData1Clone = BarTouchData( - touchTooltipData: barTouchTooltipData1Clone, - handleBuiltInTouches: false, - touchCallback: barTouchCallback, - enabled: false, - allowTouchBarBackDraw: true, - touchExtraThreshold: const EdgeInsets.all(12), -); -final BarTouchData barTouchData2 = BarTouchData( - handleBuiltInTouches: false, - touchCallback: barTouchCallback, - enabled: false, - allowTouchBarBackDraw: true, - touchExtraThreshold: const EdgeInsets.all(12), -); -final BarTouchData barTouchData3 = BarTouchData( - touchTooltipData: barTouchTooltipData1, - handleBuiltInTouches: true, - touchCallback: barTouchCallback, - enabled: false, - allowTouchBarBackDraw: true, - touchExtraThreshold: const EdgeInsets.all(12), -); -final BarTouchData barTouchData4 = BarTouchData( - touchTooltipData: barTouchTooltipData2, - handleBuiltInTouches: false, - touchCallback: barTouchCallback, - enabled: false, - allowTouchBarBackDraw: true, - touchExtraThreshold: const EdgeInsets.all(12), -); -final BarTouchData barTouchData5 = BarTouchData( - touchTooltipData: barTouchTooltipData1, - handleBuiltInTouches: false, - enabled: false, - allowTouchBarBackDraw: true, - touchExtraThreshold: const EdgeInsets.all(12), -); -final BarTouchData barTouchData6 = BarTouchData( - touchTooltipData: barTouchTooltipData1, - handleBuiltInTouches: false, - touchCallback: barTouchCallback, - enabled: true, - allowTouchBarBackDraw: true, - touchExtraThreshold: const EdgeInsets.all(12), -); -final BarTouchData barTouchData7 = BarTouchData( - touchTooltipData: barTouchTooltipData1, - handleBuiltInTouches: false, - touchCallback: barTouchCallback, - enabled: false, - allowTouchBarBackDraw: false, - touchExtraThreshold: const EdgeInsets.all(12), -); -final BarTouchData barTouchData8 = BarTouchData( - touchTooltipData: barTouchTooltipData1, - handleBuiltInTouches: false, - touchCallback: barTouchCallback, - enabled: false, - allowTouchBarBackDraw: true, -); -final BarTouchData barTouchData9 = BarTouchData( - touchTooltipData: barTouchTooltipData1, - handleBuiltInTouches: false, - touchCallback: barTouchCallback, - enabled: false, - allowTouchBarBackDraw: true, - touchExtraThreshold: const EdgeInsets.only(left: 12), -); -final BarTouchData barTouchData10 = BarTouchData( - touchTooltipData: barTouchTooltipData1, - handleBuiltInTouches: false, - touchCallback: barTouchCallback, - enabled: false, - allowTouchBarBackDraw: true, - touchExtraThreshold: const EdgeInsets.all(12), - longPressDuration: Duration.zero, -); - -final BarChartData barChartData1 = BarChartData( - minY: 12, - titlesData: MockData.flTitlesData1, - gridData: flGridData1, - rangeAnnotations: rangeAnnotations1, - maxY: 23, - backgroundColor: Colors.green, - borderData: borderData1, - alignment: BarChartAlignment.spaceAround, - barGroups: [ - barChartGroupData1, - barChartGroupData2, - barChartGroupData3, - ], - barTouchData: barTouchData1, - groupsSpace: 23, - extraLinesData: extraLinesData1, -); -final BarChartData barChartData1Clone = barChartData1.copyWith( - titlesData: MockData.flTitlesData1Clone, - gridData: flGridData1Clone, - borderData: borderData1Clone, - barTouchData: barTouchData1Clone, - rangeAnnotations: rangeAnnotations1Clone, -); - -final BarChartData barChartData2 = barChartData1.copyWith( - minY: 11, -); -final BarChartData barChartData3 = barChartData1.copyWith( - titlesData: MockData.flTitlesData2, -); -final BarChartData barChartData4 = barChartData1.copyWith( - gridData: flGridData2, -); -final BarChartData barChartData5 = barChartData1.copyWith( - rangeAnnotations: rangeAnnotations2, -); -final BarChartData barChartData6 = barChartData1.copyWith( - maxY: 52345, -); -final BarChartData barChartData7 = barChartData1.copyWith( - backgroundColor: Colors.red, -); -final BarChartData barChartData8 = barChartData1.copyWith( - titlesData: MockData.flTitlesData3, -); -final BarChartData barChartData9 = barChartData1.copyWith( - borderData: borderData2, -); -final BarChartData barChartData10 = barChartData1.copyWith( - alignment: BarChartAlignment.center, -); -final BarChartData barChartData11 = barChartData1.copyWith( - barGroups: [], -); -final BarChartData barChartData12 = barChartData1.copyWith( - barGroups: [ - barChartGroupData3, - barChartGroupData1, - barChartGroupData2, - ], -); -final BarChartData barChartData13 = barChartData1.copyWith( - barTouchData: barTouchData2, -); -final BarChartData barChartData14 = barChartData1.copyWith( - groupsSpace: 444, -); -final BarChartData barChartData15 = barChartData1.copyWith( - extraLinesData: extraLinesData2, -); - -final RadarDataSet radarDataSet1 = RadarDataSet( - dataEntries: const [ - RadarEntry(value: 0), - RadarEntry(value: 1), - RadarEntry(value: 2), - RadarEntry(value: 3), - RadarEntry(value: 4), - ], - borderColor: Colors.blue, - borderWidth: 3, - entryRadius: 3, - fillColor: Colors.grey, -); - -final RadarDataSet radarDataSet1Clone = radarDataSet1.copyWith(); - -final RadarDataSet radarDataSet2 = RadarDataSet( - dataEntries: const [ - RadarEntry(value: 10), - RadarEntry(value: 9), - RadarEntry(value: 8), - RadarEntry(value: 7), - RadarEntry(value: 6), - ], - borderColor: Colors.red, - borderWidth: 5, - entryRadius: 5, - fillColor: Colors.black, -); - -final RadarTouchData radarTouchData1 = RadarTouchData( - enabled: true, - touchCallback: radarTouchCallback, - touchSpotThreshold: 12, -); - -final RadarTouchData radarTouchData2 = RadarTouchData( - enabled: false, - touchCallback: radarTouchCallback, - touchSpotThreshold: 5, -); - -final RadarTouchData radarTouchData1Clone = radarTouchData1; - -void radarTouchCallback(FlTouchEvent event, RadarTouchResponse? response) {} - -final radarTouchedSpot1 = RadarTouchedSpot( - radarDataSet1, - 0, - radarDataSet1.dataEntries.first, - 0, - flSpot1, - Offset.zero, -); - -final radarTouchedSpotClone1 = radarTouchedSpot1; - -final radarTouchedSpot2 = RadarTouchedSpot( - radarDataSet2, - 0, - radarDataSet1.dataEntries.first, - 0, - flSpot1, - Offset.zero, -); - -final radarTouchedSpot3 = RadarTouchedSpot( - radarDataSet1, - 1, - radarDataSet1.dataEntries.first, - 0, - flSpot1, - Offset.zero, -); - -final radarTouchedSpot4 = RadarTouchedSpot( - radarDataSet1, - 0, - radarDataSet1.dataEntries.last, - 0, - flSpot1, - Offset.zero, -); - -final radarTouchedSpot5 = RadarTouchedSpot( - radarDataSet1, - 0, - radarDataSet1.dataEntries.first, - 1, - flSpot1, - Offset.zero, -); - -final radarTouchedSpot6 = RadarTouchedSpot( - radarDataSet1, - 0, - radarDataSet1.dataEntries.first, - 0, - flSpot2, - Offset.zero, -); - -final radarTouchedSpot7 = RadarTouchedSpot( - radarDataSet1, - 0, - radarDataSet1.dataEntries.first, - 0, - flSpot1, - const Offset(3, 5), -); - -final RadarChartData radarChartData1 = RadarChartData( - dataSets: [radarDataSet1], - radarBackgroundColor: Colors.yellow, - radarBorderData: const BorderSide(color: Colors.purple, width: 5), - borderData: borderData1, - gridBorderData: const BorderSide(color: Colors.blue, width: 2), - getTitle: (index, angle) => RadarChartTitle(text: 'testTitle', angle: angle), - titlePositionPercentageOffset: 0.2, - titleTextStyle: const TextStyle(color: Colors.white, fontSize: 12), - radarTouchData: radarTouchData1, - tickCount: 5, - tickBorderData: const BorderSide(width: 4), - ticksTextStyle: const TextStyle(color: Colors.white, fontSize: 12), -); - -final RadarChartData radarChartData1Clone = radarChartData1.copyWith(); - -final RadarChartData radarChartData2 = RadarChartData( - dataSets: [radarDataSet2], - radarBackgroundColor: Colors.blue, - radarBorderData: const BorderSide(color: Colors.pink, width: 3), - borderData: borderData1, - gridBorderData: const BorderSide(color: Colors.red, width: 3), - getTitle: (index, angle) => RadarChartTitle(text: 'testTitle2', angle: angle), - titlePositionPercentageOffset: 0.5, - titleTextStyle: const TextStyle(color: Colors.black, fontSize: 5), - radarTouchData: radarTouchData2, - tickCount: 1, - tickBorderData: const BorderSide(color: Colors.pink, width: 2), - ticksTextStyle: const TextStyle(color: Colors.purple, fontSize: 10), -); - -const Line line1 = Line(Offset.zero, Offset(10, 10)); -const Line line2 = Line(Offset(-4, -12), Offset(6, 8)); -const Line line3 = Line(Offset(18, -1), Offset.zero); -const Line line4 = Line(Offset(8, 8), Offset(-4, -22)); -const Line line5 = Line(Offset(2, 3), Offset(5, 8)); - -const TextStyle textStyle1 = - TextStyle(color: Colors.red, fontWeight: FontWeight.bold); -const TextStyle textStyle2 = - TextStyle(color: Colors.green, fontWeight: FontWeight.w200); - -const TextSpan textSpan1 = TextSpan(text: 'faketext1', style: textStyle1); -const TextSpan textSpan2 = TextSpan(text: 'faketext2', style: textStyle2); - -final DefaultTextStyle defaultTextStyle1 = DefaultTextStyle( - style: const TextStyle(), - child: Container(), -); diff --git a/test/chart/line_chart/line_chart_data_test.dart b/test/chart/line_chart/line_chart_data_test.dart deleted file mode 100644 index fb24622222..0000000000 --- a/test/chart/line_chart/line_chart_data_test.dart +++ /dev/null @@ -1,208 +0,0 @@ -import 'package:fl_chart/fl_chart.dart'; -import 'package:flutter_test/flutter_test.dart'; - -import '../data_pool.dart'; - -void main() { - group('LineChart data equality check', () { - test('LineChartBarData equality test', () { - expect(lineChartBarData1 == lineChartBarData1Clone, true); - expect(lineChartBarData1 == lineChartBarData2, false); - expect(lineChartBarData1 == lineChartBarData3, false); - expect(lineChartBarData1 == lineChartBarData4, false); - expect(lineChartBarData1 == lineChartBarData5, false); - expect(lineChartBarData1 == lineChartBarData6, false); - expect(lineChartBarData1 == lineChartBarData7, false); - expect(lineChartBarData1 == lineChartBarData8, false); - expect(lineChartBarData1 == lineChartBarData9, false); - }); - - test('LineChartBarData late init values test', () { - final bar = LineChartBarData( - spots: const [ - FlSpot(1, 1), - FlSpot(2, 4), - FlSpot(-3, 8), - FlSpot(2, -5), - FlSpot(9, 0), - ], - ); - expect(bar.mostLeftSpot, const FlSpot(-3, 8)); - expect(bar.mostTopSpot, const FlSpot(-3, 8)); - expect(bar.mostRightSpot, const FlSpot(9, 0)); - expect(bar.mostBottomSpot, const FlSpot(2, -5)); - }); - - test('BarAreaData equality test', () { - expect(barAreaData1 == barAreaData1Clone, true); - - expect(barAreaData1 == barAreaData2, false); - - expect(barAreaData1 == barAreaData3, false); - - expect(barAreaData1 == barAreaData4, false); - }); - - test('BetweenBarsData equality test', () { - expect(betweenBarsData1 == betweenBarsData1Clone, true); - expect(betweenBarsData1 == betweenBarsData2, false); - expect(betweenBarsData1 == betweenBarsData3, false); - expect(betweenBarsData1 == betweenBarsData4, false); - expect(betweenBarsData1 == betweenBarsData5, false); - expect(betweenBarsData1 == betweenBarsData6, false); - expect(betweenBarsData1 == betweenBarsData7, false); - expect(betweenBarsData1 == betweenBarsData8, false); - }); - - test('BarAreaSpotsLine equality test', () { - expect(barAreaSpotsLine1 == barAreaSpotsLine1Clone, true); - - expect(barAreaSpotsLine1 == barAreaSpotsLine2, false); - }); - - test('FlDotData equality test', () { - expect(flDotData1 == flDotData1Clone, true); - - expect(flDotData1 == flDotData4, false); - - expect(flDotData1 == flDotData5, false); - - expect(flDotData1 == flDotData6, false); - }); - - test('HorizontalLine equality test', () { - expect(horizontalLine1 == horizontalLine1Clone, true); - expect(horizontalLine1 == horizontalLine2, false); - expect(horizontalLine1 == horizontalLine3, false); - expect(horizontalLine1 == horizontalLine4, false); - expect(horizontalLine1 == horizontalLine5, false); - expect(horizontalLine1 == horizontalLine6, false); - expect(horizontalLine1 == horizontalLine7, false); - expect(horizontalLine1 == horizontalLine8, false); - expect(horizontalLine1 == horizontalLine9, false); - }); - - test('VerticalLine equality test', () { - expect(verticalLine1 == verticalLine1Clone, true); - expect(verticalLine1 == verticalLine2, false); - expect(verticalLine1 == verticalLine3, false); - expect(verticalLine1 == verticalLine4, false); - expect(verticalLine1 == verticalLine5, false); - expect(verticalLine1 == verticalLine6, false); - expect(verticalLine1 == verticalLine7, false); - expect(verticalLine1 == verticalLine8, false); - expect(verticalLine1 == verticalLine9, false); - }); - - test('HorizontalLineLabel equality test', () { - expect(horizontalLineLabel1 == horizontalLineLabel1Clone, true); - expect(horizontalLineLabel1 == horizontalLineLabel2, false); - expect(horizontalLineLabel1 == horizontalLineLabel3, false); - expect(horizontalLineLabel1 == horizontalLineLabel4, false); - expect(horizontalLineLabel1 == horizontalLineLabel5, false); - expect(horizontalLineLabel1 == horizontalLineLabel6, false); - expect(horizontalLineLabel1 == horizontalLineLabel7, false); - }); - - test('VerticalLineLabel equality test', () { - expect(verticalLineLabel1 == verticalLineLabel1Clone, true); - expect(verticalLineLabel1 == verticalLineLabel2, false); - expect(verticalLineLabel1 == verticalLineLabel3, false); - expect(verticalLineLabel1 == verticalLineLabel4, false); - expect(verticalLineLabel1 == verticalLineLabel5, false); - expect(verticalLineLabel1 == verticalLineLabel6, false); - expect(verticalLineLabel1 == verticalLineLabel7, false); - }); - - test('ExtraLinesData equality test', () { - expect(extraLinesData1 == extraLinesData1Clone, true); - expect(extraLinesData1 == extraLinesData2, false); - expect(extraLinesData1 == extraLinesData3, false); - expect(extraLinesData1 == extraLinesData4, false); - expect(extraLinesData1 == extraLinesData5, false); - expect(extraLinesData1 == extraLinesData6, false); - }); - - test('LineTouchData equality test', () { - expect(lineTouchData1 == lineTouchData1Clone, true); - expect(lineTouchData1 == lineTouchData2, false); - expect(lineTouchData1 == lineTouchData3, false); - expect(lineTouchData1 == lineTouchData4, false); - expect(lineTouchData1 == lineTouchData5, false); - expect(lineTouchData1 == lineTouchData6, false); - expect(lineTouchData1 == lineTouchData7, false); - expect(lineTouchData1 == lineTouchData8, false); - }); - - test('LineTouchTooltipData equality test', () { - expect(lineTouchTooltipData1 == lineTouchTooltipData1Clone, true); - expect(lineTouchTooltipData1 == lineTouchTooltipData2, false); - expect(lineTouchTooltipData1 == lineTouchTooltipData3, false); - expect(lineTouchTooltipData1 == lineTouchTooltipData4, false); - expect(lineTouchTooltipData1 == lineTouchTooltipData5, false); - expect(lineTouchTooltipData1 == lineTouchTooltipData6, false); - expect(lineTouchTooltipData1 == lineTouchTooltipData7, false); - }); - - test('LineBarSpot equality test', () { - expect(lineBarSpot1 == lineBarSpot1Clone, true); - expect(lineBarSpot1 == lineBarSpot2, false); - expect(lineBarSpot1 == lineBarSpot3, false); - }); - - test('LineTooltipItem equality test', () { - expect(lineTooltipItem1 == lineTooltipItem1Clone, true); - expect(lineTooltipItem1 == lineTooltipItem2, false); - expect(lineTooltipItem1 == lineTooltipItem3, false); - expect(lineTooltipItem1 == lineTooltipItem4, false); - }); - - test('TouchedSpotIndicatorData equality test', () { - expect(touchedSpotIndicatorData1 == touchedSpotIndicatorData1Clone, true); - expect(touchedSpotIndicatorData1 == touchedSpotIndicatorData2, false); - expect(touchedSpotIndicatorData1 == touchedSpotIndicatorData3, false); - expect(touchedSpotIndicatorData1 == touchedSpotIndicatorData4, false); - expect(touchedSpotIndicatorData1 == touchedSpotIndicatorData5, false); - expect(touchedSpotIndicatorData1 == touchedSpotIndicatorData6, false); - }); - - test('ShowingTooltipIndicator equality test', () { - expect(showingTooltipIndicator1 == showingTooltipIndicator1Clone, true); - expect(showingTooltipIndicator1 == showingTooltipIndicator2, false); - expect(showingTooltipIndicator1 == showingTooltipIndicator3, false); - expect(showingTooltipIndicator1 == showingTooltipIndicator4, false); - expect(showingTooltipIndicator1 == showingTooltipIndicator5, false); - }); - - test('LineTouchResponse equality test', () { - expect(lineTouchResponse1 == lineTouchResponse1Clone, false); - expect(lineTouchResponse1 == lineTouchResponse2, false); - expect(lineTouchResponse1 == lineTouchResponse3, false); - expect(lineTouchResponse1 == lineTouchResponse4, false); - expect(lineTouchResponse1 == lineTouchResponse5, false); - }); - - test('LineChartData equality test', () { - expect(lineChartData1 == lineChartData1Clone, true); - expect(lineChartData1 == lineChartData2, false); - expect(lineChartData1 == lineChartData3, false); - expect(lineChartData1 == lineChartData4, false); - expect(lineChartData1 == lineChartData5, false); - expect(lineChartData1 == lineChartData6, false); - expect(lineChartData1 == lineChartData7, false); - expect(lineChartData1 == lineChartData8, false); - expect(lineChartData1 == lineChartData9, false); - expect(lineChartData1 == lineChartData10, false); - expect(lineChartData1 == lineChartData11, false); - expect(lineChartData1 == lineChartData12, false); - expect(lineChartData1 == lineChartData13, false); - expect(lineChartData1 == lineChartData14, false); - expect(lineChartData1 == lineChartData15, false); - expect(lineChartData1 == lineChartData16, false); - expect(lineChartData1 == lineChartData17, false); - expect(lineChartData1 == lineChartData18, false); - expect(lineChartData1 == lineChartData19, false); - expect(lineChartData1 == lineChartData20, false); - }); - }); -} diff --git a/test/chart/line_chart/line_chart_helper_test.dart b/test/chart/line_chart/line_chart_helper_test.dart deleted file mode 100644 index 0ed40801c9..0000000000 --- a/test/chart/line_chart/line_chart_helper_test.dart +++ /dev/null @@ -1,93 +0,0 @@ -import 'package:fl_chart/fl_chart.dart'; -import 'package:fl_chart/src/chart/line_chart/line_chart_helper.dart'; -import 'package:flutter_test/flutter_test.dart'; - -import '../data_pool.dart'; - -void main() { - group('Check caching of LineChartHelper.calculateMaxAxisValues', () { - test('Test read from cache1', () { - final lineBars1 = [lineChartBarData1]; - final result1 = LineChartHelper.calculateMaxAxisValues(lineBars1); - - final lineBars2 = [lineChartBarData2]; - final result2 = LineChartHelper.calculateMaxAxisValues(lineBars2); - - expect(result1.readFromCache, false); - expect(result2.readFromCache, false); - }); - - test('Test read from cache2', () { - final lineBars = [lineChartBarData1, lineChartBarData2]; - final lineBarsClone = [lineChartBarData1Clone, lineChartBarData2]; - final result1 = LineChartHelper.calculateMaxAxisValues(lineBars); - final result2 = LineChartHelper.calculateMaxAxisValues(lineBarsClone); - expect(result1.readFromCache, false); - expect(result2.readFromCache, true); - }); - - test('Test validity 1', () { - final lineBars = [lineChartBarData1, lineChartBarData2]; - final result = LineChartHelper.calculateMaxAxisValues(lineBars); - expect(result.minX, 1); - expect(result.maxX, 4); - expect(result.minY, 1); - expect(result.maxY, 2); - }); - - test('Test validity 2', () { - final lineBars = [ - lineChartBarData1.copyWith( - spots: const [ - FlSpot(3, 4), - FlSpot(-3, 50), - FlSpot(14, -10), - ], - ), - ]; - final result = LineChartHelper.calculateMaxAxisValues(lineBars); - expect(result.minX, -3); - expect(result.maxX, 14); - expect(result.minY, -10); - expect(result.maxY, 50); - }); - - test('Test equality', () { - final lineBars = [lineChartBarData1, lineChartBarData2]; - final lineBarsClone = [lineChartBarData1Clone, lineChartBarData2]; - final result1 = LineChartHelper.calculateMaxAxisValues(lineBars); - final result2 = LineChartHelper.calculateMaxAxisValues(lineBarsClone); - expect(result1, result2); - }); - - test('Test null spot 1', () { - final lineBars = [ - LineChartBarData( - spots: [ - FlSpot.nullSpot, - FlSpot.nullSpot, - FlSpot.nullSpot, - FlSpot.nullSpot, - ], - ), - ]; - final result1 = LineChartHelper.calculateMaxAxisValues(lineBars); - expect(result1, const LineChartMinMaxAxisValues(0, 0, 0, 0)); - }); - - test('Test null spot 2', () { - final lineBars = [ - LineChartBarData( - spots: [ - FlSpot.nullSpot, - const FlSpot(-1, 5), - FlSpot.nullSpot, - const FlSpot(4, -3), - ], - ), - ]; - final result1 = LineChartHelper.calculateMaxAxisValues(lineBars); - expect(result1, const LineChartMinMaxAxisValues(-1, 4, -3, 5)); - }); - }); -} diff --git a/test/chart/line_chart/line_chart_painter_test.dart b/test/chart/line_chart/line_chart_painter_test.dart deleted file mode 100644 index e9477e8225..0000000000 --- a/test/chart/line_chart/line_chart_painter_test.dart +++ /dev/null @@ -1,3570 +0,0 @@ -import 'dart:math' as math; -import 'dart:ui'; -import 'dart:ui' as ui show Gradient; - -import 'package:fl_chart/fl_chart.dart'; -import 'package:fl_chart/src/chart/base/base_chart/base_chart_painter.dart'; -import 'package:fl_chart/src/chart/line_chart/line_chart_painter.dart'; -import 'package:fl_chart/src/extensions/path_extension.dart'; -import 'package:fl_chart/src/utils/canvas_wrapper.dart'; -import 'package:fl_chart/src/utils/utils.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_test/flutter_test.dart'; -import 'package:mockito/annotations.dart'; -import 'package:mockito/mockito.dart'; - -import '../data_pool.dart'; -import 'line_chart_painter_test.mocks.dart'; - -@GenerateMocks([Canvas, CanvasWrapper, BuildContext, Utils, LineChartPainter]) -void main() { - group('paint()', () { - test('test 1', () { - const viewSize = Size(400, 400); - - final bar1 = LineChartBarData( - spots: const [ - FlSpot(0, 4), - FlSpot(1, 3), - FlSpot(2, 2), - FlSpot(3, 1), - FlSpot(4, 0), - ], - showingIndicators: [ - 0, - 2, - 3, - ], - ); - final bar2 = LineChartBarData( - spots: const [ - FlSpot(0, 5), - FlSpot(1, 3), - FlSpot(2, 2), - FlSpot(3, 5), - FlSpot(4, 0), - ], - ); - final data = LineChartData( - lineBarsData: [ - bar1, - bar2, - ], - clipData: const FlClipData.all(), - extraLinesData: ExtraLinesData( - horizontalLines: [ - HorizontalLine(y: 1), - ], - verticalLines: [ - VerticalLine(x: 4), - ], - ), - betweenBarsData: [ - BetweenBarsData(fromIndex: 0, toIndex: 1), - ], - showingTooltipIndicators: [ - ShowingTooltipIndicators([ - LineBarSpot(bar1, 0, bar1.spots.first), - LineBarSpot(bar2, 1, bar2.spots.first), - ]), - ], - lineTouchData: LineTouchData( - getTouchedSpotIndicator: - (LineChartBarData barData, List spotIndexes) { - return spotIndexes.asMap().entries.map((entry) { - final i = entry.key; - if (i == 0) { - return null; - } - return const TouchedSpotIndicatorData( - FlLine(color: MockData.color0), - FlDotData(), - ); - }).toList(); - }, - ), - ); - - final lineChartPainter = LineChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - - final mockUtils = MockUtils(); - Utils.changeInstance(mockUtils); - when(mockUtils.getThemeAwareTextStyle(any, any)) - .thenAnswer((realInvocation) => textStyle1); - when(mockUtils.calculateRotationOffset(any, any)) - .thenAnswer((realInvocation) => Offset.zero); - when(mockUtils.convertRadiusToSigma(any)) - .thenAnswer((realInvocation) => 4.0); - when(mockUtils.getEfficientInterval(any, any)) - .thenAnswer((realInvocation) => 1.0); - when(mockUtils.getBestInitialIntervalValue(any, any, any)) - .thenAnswer((realInvocation) => 1.0); - - final mockBuildContext = MockBuildContext(); - final mockCanvasWrapper = MockCanvasWrapper(); - when(mockCanvasWrapper.size).thenAnswer((realInvocation) => viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - lineChartPainter.paint( - mockBuildContext, - mockCanvasWrapper, - holder, - ); - - verify(mockCanvasWrapper.clipRect(any)).called(1); - verify(mockCanvasWrapper.drawDot(any, any, any)).called(12); - verify(mockCanvasWrapper.drawPath(any, any)).called(3); - }); - test('test 2', () { - const viewSize = Size(400, 400); - - final bar1 = LineChartBarData( - spots: const [ - FlSpot(0, 4), - FlSpot(1, 3), - FlSpot(2, 2), - FlSpot(3, 1), - FlSpot(4, 0), - ], - ); - final bar2 = LineChartBarData( - spots: const [ - FlSpot(0, 2), - FlSpot(1, 5), - FlSpot(2, 1), - FlSpot(3, 2), - FlSpot(4, 3), - ], - ); - final data = LineChartData( - lineBarsData: [ - bar1, - bar2, - ], - clipData: const FlClipData.all(), - lineTouchData: LineTouchData( - getTouchedSpotIndicator: - (LineChartBarData barData, List spotIndexes) { - return List.generate( - spotIndexes.length + 1, - (index) { - return const TouchedSpotIndicatorData( - FlLine(color: MockData.color0), - FlDotData(), - ); - }, - ).toList(); - }, - ), - extraLinesData: ExtraLinesData( - horizontalLines: [ - HorizontalLine(y: 1), - ], - verticalLines: [ - VerticalLine(x: 4), - ], - extraLinesOnTop: false, - ), - showingTooltipIndicators: [ - ShowingTooltipIndicators([ - LineBarSpot(bar1, 0, bar1.spots[0]), - LineBarSpot(bar1, 0, bar1.spots[2]), - LineBarSpot(bar2, 1, bar1.spots[2]), - LineBarSpot(bar2, 1, bar1.spots[3]), - LineBarSpot(bar2, 1, bar1.spots[4]), - ]), - ], - ); - - final lineChartPainter = LineChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - - final mockUtils = MockUtils(); - Utils.changeInstance(mockUtils); - when(mockUtils.getThemeAwareTextStyle(any, any)) - .thenAnswer((realInvocation) => textStyle1); - when(mockUtils.calculateRotationOffset(any, any)) - .thenAnswer((realInvocation) => Offset.zero); - when(mockUtils.convertRadiusToSigma(any)) - .thenAnswer((realInvocation) => 4.0); - when(mockUtils.getEfficientInterval(any, any)) - .thenAnswer((realInvocation) => 1.0); - when(mockUtils.getBestInitialIntervalValue(any, any, any)) - .thenAnswer((realInvocation) => 1.0); - - final mockBuildContext = MockBuildContext(); - final mockCanvasWrapper = MockCanvasWrapper(); - when(mockCanvasWrapper.size).thenAnswer((realInvocation) => viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - - Exception? exception; - try { - lineChartPainter.paint( - mockBuildContext, - mockCanvasWrapper, - holder, - ); - } on Exception catch (e) { - exception = e; - } - expect(exception != null, true); - }); - }); - - group('clipToBorder()', () { - test('test 1', () { - const viewSize = Size(400, 400); - - final data = LineChartData(); - - final lineChartPainter = LineChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - final mockCanvasWrapper = MockCanvasWrapper(); - when(mockCanvasWrapper.size).thenAnswer((realInvocation) => viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - lineChartPainter.clipToBorder( - mockCanvasWrapper, - holder, - ); - - final verifyResult = verify(mockCanvasWrapper.clipRect(captureAny)); - final rect = verifyResult.captured.single as Rect; - verifyResult.called(1); - expect(rect.left, 0); - expect(rect.top, 0); - expect(rect.width, 400); - expect(rect.height, 400); - }); - - test('test 2', () { - const viewSize = Size(400, 400); - - final data = LineChartData( - titlesData: const FlTitlesData( - leftTitles: AxisTitles( - sideTitles: SideTitles(showTitles: true, reservedSize: 10), - ), - topTitles: AxisTitles( - sideTitles: SideTitles(showTitles: true, reservedSize: 20), - ), - rightTitles: AxisTitles( - sideTitles: SideTitles(showTitles: true, reservedSize: 30), - ), - bottomTitles: AxisTitles( - sideTitles: SideTitles(showTitles: true, reservedSize: 40), - ), - ), - borderData: FlBorderData(show: true, border: Border.all(width: 8)), - clipData: const FlClipData( - top: false, - bottom: false, - left: true, - right: true, - ), - ); - - final lineChartPainter = LineChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - final mockCanvasWrapper = MockCanvasWrapper(); - when(mockCanvasWrapper.size).thenAnswer((realInvocation) => viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - lineChartPainter.clipToBorder( - mockCanvasWrapper, - holder, - ); - - final verifyResult = verify(mockCanvasWrapper.clipRect(captureAny)); - final rect = verifyResult.captured.single as Rect; - verifyResult.called(1); - expect(rect.left, 4); - expect(rect.top, 0); - expect(rect.right, 396); - expect(rect.bottom, 400); - }); - - test('test 3', () { - const viewSize = Size(400, 400); - - final data = LineChartData( - titlesData: const FlTitlesData( - leftTitles: AxisTitles( - sideTitles: SideTitles(showTitles: true, reservedSize: 10), - ), - topTitles: AxisTitles( - sideTitles: SideTitles( - showTitles: true, - reservedSize: 40, - ), - ), - rightTitles: AxisTitles( - sideTitles: SideTitles(showTitles: true, reservedSize: 30), - ), - bottomTitles: AxisTitles( - sideTitles: SideTitles(showTitles: true, reservedSize: 40), - ), - ), - borderData: FlBorderData(show: true, border: Border.all(width: 8)), - clipData: const FlClipData( - top: true, - bottom: true, - left: true, - right: true, - ), - ); - - final lineChartPainter = LineChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - final mockCanvasWrapper = MockCanvasWrapper(); - when(mockCanvasWrapper.size).thenAnswer((realInvocation) => viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - lineChartPainter.clipToBorder( - mockCanvasWrapper, - holder, - ); - - final verifyResult = verify(mockCanvasWrapper.clipRect(captureAny)); - final rect = verifyResult.captured.single as Rect; - verifyResult.called(1); - expect(rect.left, 4); - expect(rect.top, 4); - expect(rect.right, 396); - expect(rect.bottom, 396); - }); - }); - - group('drawBarLine()', () { - test('test 1', () { - const viewSize = Size(400, 400); - - final barData = LineChartBarData( - spots: const [ - flSpot1, - flSpot2, - FlSpot(20, 11), - FlSpot(11, 11), - ], - ); - - final data = LineChartData(lineBarsData: [barData]); - - final lineChartPainter = LineChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - final mockCanvasWrapper = MockCanvasWrapper(); - when(mockCanvasWrapper.size).thenAnswer((realInvocation) => viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - - lineChartPainter.drawBarLine( - mockCanvasWrapper, - barData, - holder, - ); - - verify(mockCanvasWrapper.drawPath(any, any)).called(1); - }); - - test('test 2', () { - const viewSize = Size(400, 400); - - final barData = LineChartBarData( - spots: const [ - flSpot1, - flSpot2, - FlSpot.nullSpot, - FlSpot(20, 11), - FlSpot(11, 11), - ], - ); - - final data = LineChartData(lineBarsData: [barData]); - - final lineChartPainter = LineChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - final mockCanvasWrapper = MockCanvasWrapper(); - when(mockCanvasWrapper.size).thenAnswer((realInvocation) => viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - - lineChartPainter.drawBarLine( - mockCanvasWrapper, - barData, - holder, - ); - - verify(mockCanvasWrapper.drawPath(any, any)).called(2); - }); - - test('test 3', () { - const viewSize = Size(400, 400); - - final barData = LineChartBarData( - spots: const [ - flSpot1, - flSpot2, - FlSpot(20, 11), - FlSpot(11, 11), - ], - ); - - final data = LineChartData( - lineBarsData: [barData], - ); - - final lineChartPainter = LineChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - final mockCanvasWrapper = MockCanvasWrapper(); - when(mockCanvasWrapper.size).thenAnswer((realInvocation) => viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - - lineChartPainter.drawBarLine( - mockCanvasWrapper, - barData, - holder, - ); - - final verificationResult = - verify(mockCanvasWrapper.drawPath(any, captureAny)); - final paint = verificationResult.captured.single as Paint; - verificationResult.called(1); - expect( - paint.color.value, - barData.gradient?.colors.first.value ?? barData.color?.value, - ); - }); - }); - - group('drawBetweenBarsArea()', () { - test('test 1', () { - const viewSize = Size(400, 400); - - final barData = LineChartBarData( - spots: const [ - flSpot1, - flSpot2, - FlSpot(20, 11), - FlSpot(11, 11), - ], - ); - - final barData2 = LineChartBarData( - spots: const [ - flSpot2, - flSpot1, - FlSpot(20, 11), - FlSpot(11, 11), - ], - ); - - final betweenBarData = BetweenBarsData( - fromIndex: 0, - toIndex: 1, - color: const Color(0xFFFF0000), - ); - - final data = LineChartData( - lineBarsData: [ - barData, - barData2, - ], - betweenBarsData: [ - betweenBarData, - ], - ); - - final lineChartPainter = LineChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - final mockCanvasWrapper = MockCanvasWrapper(); - when(mockCanvasWrapper.size).thenAnswer((realInvocation) => viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - - lineChartPainter.drawBetweenBarsArea( - mockCanvasWrapper, - data, - betweenBarData, - holder, - ); - - final verifyResult = verifyInOrder([ - mockCanvasWrapper.saveLayer(const Rect.fromLTWH(0, 0, 400, 400), any), - mockCanvasWrapper.drawPath(any, captureAny), - mockCanvasWrapper.restore(), - ]); - - final paint = verifyResult[1].captured.first as Paint; - expect(paint.shader, null); - expect(paint.color, const Color(0xFFFF0000)); - }); - }); - - group('drawDots()', () { - test('test 1', () { - const viewSize = Size(400, 400); - - final barData = LineChartBarData(); - - final data = LineChartData( - lineBarsData: [ - barData, - ], - ); - - final lineChartPainter = LineChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - final mockCanvasWrapper = MockCanvasWrapper(); - when(mockCanvasWrapper.size).thenAnswer((realInvocation) => viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - - lineChartPainter.drawDots( - mockCanvasWrapper, - barData, - holder, - ); - - verifyNever(mockCanvasWrapper.drawDot(any, any, any)); - }); - - test('test 2', () { - const viewSize = Size(400, 400); - - final barData = LineChartBarData( - spots: const [FlSpot(1, 1)], - dotData: const FlDotData(show: false), - ); - - final data = LineChartData( - lineBarsData: [ - barData, - ], - ); - - final lineChartPainter = LineChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - final mockCanvasWrapper = MockCanvasWrapper(); - when(mockCanvasWrapper.size).thenAnswer((realInvocation) => viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - - lineChartPainter.drawDots( - mockCanvasWrapper, - barData, - holder, - ); - - verifyNever(mockCanvasWrapper.drawDot(any, any, any)); - }); - - test('test 3', () { - const viewSize = Size(400, 400); - - final barData = LineChartBarData( - spots: const [ - FlSpot(1, 1), - FlSpot(2, 2), - FlSpot(3, 3), - FlSpot(4, 4), - FlSpot.nullSpot, - FlSpot(5, 5), - ], - ); - - final data = LineChartData( - lineBarsData: [ - barData, - ], - ); - - final lineChartPainter = LineChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - final mockCanvasWrapper = MockCanvasWrapper(); - when(mockCanvasWrapper.size).thenAnswer((realInvocation) => viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - - lineChartPainter.drawDots( - mockCanvasWrapper, - barData, - holder, - ); - - verify(mockCanvasWrapper.drawDot(any, any, any)).called(5); - }); - - test('test 4', () { - const viewSize = Size(100, 100); - - final barData = LineChartBarData( - spots: const [ - FlSpot(1, 1), - FlSpot(2, 2), - FlSpot(3, 3), - FlSpot(4, 4), - FlSpot.nullSpot, - FlSpot(5, 5), - ], - ); - - final data = LineChartData( - minX: 0, - maxX: 10, - minY: 0, - maxY: 10, - lineBarsData: [ - barData, - ], - titlesData: const FlTitlesData(show: false), - ); - - final lineChartPainter = LineChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - final mockCanvasWrapper = MockCanvasWrapper(); - when(mockCanvasWrapper.size).thenAnswer((realInvocation) => viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - - lineChartPainter.drawDots( - mockCanvasWrapper, - barData, - holder, - ); - - verifyInOrder([ - mockCanvasWrapper.drawDot( - any, - const FlSpot(1, 1), - const Offset(10, 90), - ), - mockCanvasWrapper.drawDot( - any, - const FlSpot(2, 2), - const Offset(20, 80), - ), - mockCanvasWrapper.drawDot( - any, - const FlSpot(3, 3), - const Offset(30, 70), - ), - mockCanvasWrapper.drawDot( - any, - const FlSpot(4, 4), - const Offset(40, 60), - ), - mockCanvasWrapper.drawDot( - any, - const FlSpot(5, 5), - const Offset(50, 50), - ), - ]); - }); - }); - - group('drawTouchedSpotsIndicator()', () { - List getDrawingInfo(LineChartData data) { - final lineIndexDrawingInfo = []; - - /// draw each line independently on the chart - for (var i = 0; i < data.lineBarsData.length; i++) { - final barData = data.lineBarsData[i]; - - if (!barData.show) { - continue; - } - - final indicatorsData = data.lineTouchData - .getTouchedSpotIndicator(barData, barData.showingIndicators); - - if (indicatorsData.length != barData.showingIndicators.length) { - throw Exception( - 'indicatorsData and touchedSpotOffsets size should be same', - ); - } - - for (var j = 0; j < barData.showingIndicators.length; j++) { - final indicatorData = indicatorsData[j]; - final index = barData.showingIndicators[j]; - final spot = barData.spots[index]; - - if (indicatorData == null) { - continue; - } - lineIndexDrawingInfo.add( - LineIndexDrawingInfo(barData, i, spot, index, indicatorData), - ); - } - } - return lineIndexDrawingInfo; - } - - test('test 1', () { - const viewSize = Size(400, 400); - - final lineChartBarData = LineChartBarData(); - - final data = LineChartData( - lineBarsData: [lineChartBarData], - showingTooltipIndicators: [], - ); - - final lineChartPainter = LineChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - final mockCanvasWrapper = MockCanvasWrapper(); - when(mockCanvasWrapper.size).thenAnswer((realInvocation) => viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - - lineChartPainter.drawTouchedSpotsIndicator( - mockCanvasWrapper, - getDrawingInfo(data), - holder, - ); - - verifyNever(mockCanvasWrapper.drawPath(any, any)); - }); - - test('test 2', () { - const viewSize = Size(400, 400); - - const spot1 = FlSpot(1, 1); - const spot2 = FlSpot(2, 2); - const spot3 = FlSpot(3, 3); - final lineChartBarData = LineChartBarData( - spots: const [spot1, spot2, spot3], - showingIndicators: [0, 1], - ); - - final data = LineChartData( - lineBarsData: [lineChartBarData], - lineTouchData: LineTouchData( - getTouchedSpotIndicator: (barData, spotIndexes) { - return spotIndexes.asMap().entries.map((e) { - final index = e.key; - final color = index == 0 - ? const Color(0xFF00FF00) - : const Color(0xFF0000FF); - final strokeWidth = index == 0 ? 8.0 : 12.0; - return TouchedSpotIndicatorData( - FlLine(color: color, strokeWidth: strokeWidth), - const FlDotData(show: false), - ); - }).toList(); - }, - ), - ); - - final lineChartPainter = LineChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - final mockCanvasWrapper = MockCanvasWrapper(); - when(mockCanvasWrapper.size).thenAnswer((realInvocation) => viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - - final results = >[]; - when( - mockCanvasWrapper.drawDashedLine( - captureAny, - captureAny, - captureAny, - any, - ), - ).thenAnswer((inv) { - results.add({ - 'from': inv.positionalArguments[0] as Offset, - 'to': inv.positionalArguments[1] as Offset, - 'paint_color': (inv.positionalArguments[2] as Paint).color, - 'paint_stroke_width': - (inv.positionalArguments[2] as Paint).strokeWidth, - }); - }); - - lineChartPainter.drawTouchedSpotsIndicator( - mockCanvasWrapper, - getDrawingInfo(data), - holder, - ); - - expect(results.length, 2); - - expect(results[0]['paint_color'], const Color(0xFF0000FF)); - expect(results[0]['paint_stroke_width'], 12); - - expect(results[1]['paint_color'], const Color(0xFF00FF00)); - expect(results[1]['paint_stroke_width'], 8.0); - }); - - test('test 3', () { - const viewSize = Size(400, 400); - - const spot1 = FlSpot(1, 1); - const spot2 = FlSpot(2, 2); - const spot3 = FlSpot(3, 3); - final lineChartBarData = LineChartBarData( - spots: const [spot1, spot2, spot3], - showingIndicators: [0, 1], - ); - - final data = LineChartData( - lineBarsData: [lineChartBarData], - lineTouchData: LineTouchData( - getTouchedSpotIndicator: (barData, spotIndexes) { - return spotIndexes.asMap().entries.map((e) { - final index = e.key; - final color = index == 0 - ? const Color(0xFF00FF00) - : const Color(0xFF0000FF); - final strokeWidth = index == 0 ? 8.0 : 12.0; - return TouchedSpotIndicatorData( - FlLine(color: color, strokeWidth: strokeWidth), - const FlDotData(), - ); - }).toList(); - }, - ), - ); - - final lineChartPainter = LineChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - final mockCanvasWrapper = MockCanvasWrapper(); - when(mockCanvasWrapper.size).thenAnswer((realInvocation) => viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - - final results = >[]; - when( - mockCanvasWrapper.drawDashedLine( - captureAny, - captureAny, - captureAny, - any, - ), - ).thenAnswer((inv) { - results.add({ - 'from': inv.positionalArguments[0] as Offset, - 'to': inv.positionalArguments[1] as Offset, - 'paint_color': (inv.positionalArguments[2] as Paint).color, - 'paint_stroke_width': - (inv.positionalArguments[2] as Paint).strokeWidth, - }); - }); - - lineChartPainter.drawTouchedSpotsIndicator( - mockCanvasWrapper, - getDrawingInfo(data), - holder, - ); - - expect(results.length, 2); - - expect(results[0]['paint_color'], const Color(0xFF0000FF)); - expect(results[0]['paint_stroke_width'], 12); - - expect(results[1]['paint_color'], const Color(0xFF00FF00)); - expect(results[1]['paint_stroke_width'], 8.0); - - verify(mockCanvasWrapper.drawDot(any, any, any)).called(2); - }); - }); - - group('generateBarPath()', () { - test('test 1', () { - const viewSize = Size(100, 100); - - final lineChartBarData = LineChartBarData( - spots: const [ - FlSpot.zero, - FlSpot(5, 5), - FlSpot(10, 0), - ], - ); - - final data = LineChartData( - minY: 0, - maxY: 10, - minX: 0, - maxX: 10, - lineBarsData: [lineChartBarData], - showingTooltipIndicators: [], - titlesData: const FlTitlesData(show: false), - ); - - final lineChartPainter = LineChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - final mockCanvasWrapper = MockCanvasWrapper(); - when(mockCanvasWrapper.size).thenAnswer((realInvocation) => viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - - final path = lineChartPainter.generateBarPath( - viewSize, - lineChartBarData, - lineChartBarData.spots, - holder, - ); - - final iterator = path.computeMetrics().iterator; - - PathMetric? firstMetric; - PathMetric? lastMetric; - while (iterator.moveNext()) { - firstMetric ??= iterator.current; - lastMetric = iterator.current; - } - - final tangent1 = firstMetric!.getTangentForOffset(firstMetric.length / 8); - final degrees1 = tangent1!.angle * (180 / math.pi); - expect(degrees1, 45.0); - - final tangent = lastMetric!.getTangentForOffset( - (lastMetric.length / 8) * 7, - ); - final degrees = tangent!.angle * (180 / math.pi); - expect(degrees, -45.0); - }); - - test('test 2', () { - const viewSize = Size(100, 100); - - final lineChartBarData = LineChartBarData( - spots: const [ - FlSpot.zero, - FlSpot(5, 5), - FlSpot(10, 0), - ], - isStepLineChart: true, - ); - - final data = LineChartData( - minY: 0, - maxY: 10, - minX: 0, - maxX: 10, - lineBarsData: [lineChartBarData], - showingTooltipIndicators: [], - titlesData: const FlTitlesData(show: false), - ); - - final lineChartPainter = LineChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - final mockCanvasWrapper = MockCanvasWrapper(); - when(mockCanvasWrapper.size).thenAnswer((realInvocation) => viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - - final path = lineChartPainter.generateBarPath( - viewSize, - lineChartBarData, - lineChartBarData.spots, - holder, - ); - - final iterator = path.computeMetrics().iterator; - - PathMetric? firstMetric; - PathMetric? lastMetric; - while (iterator.moveNext()) { - firstMetric ??= iterator.current; - lastMetric = iterator.current; - } - - final tangent1 = firstMetric!.getTangentForOffset(firstMetric.length / 4); - final degrees1 = tangent1!.angle * (180 / math.pi); - expect(degrees1, 90.0); - - final tangent2 = lastMetric!.getTangentForOffset( - (lastMetric.length / 4) * 3, - ); - final degrees2 = tangent2!.angle * (180 / math.pi); - expect(degrees2, -90.0); - }); - }); - - group('generateNormalBarPath()', () { - test('test 1', () { - const viewSize = Size(100, 100); - - final lineChartBarData = LineChartBarData( - spots: const [ - FlSpot.zero, - FlSpot(5, 5), - FlSpot(10, 0), - ], - ); - - final data = LineChartData( - minY: 0, - maxY: 10, - minX: 0, - maxX: 10, - lineBarsData: [lineChartBarData], - showingTooltipIndicators: [], - titlesData: const FlTitlesData(show: false), - ); - - final lineChartPainter = LineChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - final mockCanvasWrapper = MockCanvasWrapper(); - when(mockCanvasWrapper.size).thenAnswer((realInvocation) => viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - - final path = lineChartPainter.generateNormalBarPath( - viewSize, - lineChartBarData, - lineChartBarData.spots, - holder, - ); - - final iterator = path.computeMetrics().iterator; - - PathMetric? firstMetric; - PathMetric? lastMetric; - while (iterator.moveNext()) { - firstMetric ??= iterator.current; - lastMetric = iterator.current; - } - - final tangent1 = firstMetric!.getTangentForOffset(firstMetric.length / 8); - final degrees1 = tangent1!.angle * (180 / math.pi); - expect(degrees1, 45.0); - - final tangent = lastMetric!.getTangentForOffset( - (lastMetric.length / 8) * 7, - ); - final degrees = tangent!.angle * (180 / math.pi); - expect(degrees, -45.0); - }); - }); - - group('generateStepBarPath()', () { - test('test 1', () { - const viewSize = Size(100, 100); - - final lineChartBarData = LineChartBarData( - spots: const [ - FlSpot.zero, - FlSpot(5, 5), - FlSpot(10, 0), - ], - isStepLineChart: true, - ); - - final data = LineChartData( - minY: 0, - maxY: 10, - minX: 0, - maxX: 10, - lineBarsData: [lineChartBarData], - showingTooltipIndicators: [], - titlesData: const FlTitlesData(show: false), - ); - - final lineChartPainter = LineChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - final mockCanvasWrapper = MockCanvasWrapper(); - when(mockCanvasWrapper.size).thenAnswer((realInvocation) => viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - - final path = lineChartPainter.generateStepBarPath( - viewSize, - lineChartBarData, - lineChartBarData.spots, - holder, - ); - - final iterator = path.computeMetrics().iterator; - - PathMetric? firstMetric; - PathMetric? lastMetric; - while (iterator.moveNext()) { - firstMetric ??= iterator.current; - lastMetric = iterator.current; - } - - final tangent1 = firstMetric!.getTangentForOffset(firstMetric.length / 4); - final degrees1 = tangent1!.angle * (180 / math.pi); - expect(degrees1, 90.0); - - final tangent2 = lastMetric!.getTangentForOffset( - (lastMetric.length / 4) * 3, - ); - final degrees2 = tangent2!.angle * (180 / math.pi); - expect(degrees2, -90.0); - }); - }); - - group('generateBelowBarPath()', () { - test('test 1', () { - const viewSize = Size(100, 100); - - const barSpots = [ - FlSpot(1, 9), - FlSpot(5, 5), - FlSpot(8, 9), - ]; - - final lineChartBarData = LineChartBarData( - spots: barSpots, - isStepLineChart: true, - ); - - final data = LineChartData( - minY: 0, - maxY: 10, - minX: 0, - maxX: 10, - lineBarsData: [lineChartBarData], - showingTooltipIndicators: [], - titlesData: const FlTitlesData(show: false), - ); - - final lineChartPainter = LineChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - final mockCanvasWrapper = MockCanvasWrapper(); - when(mockCanvasWrapper.size).thenAnswer((realInvocation) => viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - - final barPath = Path() - ..moveTo(10, 10) - ..lineTo(50, 50) - ..lineTo(80, 10); - - final belowBarPath = lineChartPainter.generateBelowBarPath( - viewSize, - lineChartBarData, - barPath, - barSpots, - holder, - ); - - expect(belowBarPath.getBounds().bottom, 100); - expect(belowBarPath.getBounds().left, 10); - expect(belowBarPath.getBounds().right, 80); - expect(belowBarPath.getBounds().top, 10); - }); - - test('test 2', () { - const viewSize = Size(100, 100); - - const barSpots = [ - FlSpot(1, 9), - FlSpot(5, 5), - FlSpot(8, 9), - ]; - - final lineChartBarData = LineChartBarData( - spots: barSpots, - isStepLineChart: true, - belowBarData: BarAreaData( - cutOffY: 4, - applyCutOffY: true, - ), - ); - - final data = LineChartData( - minY: 0, - maxY: 10, - minX: 0, - maxX: 10, - lineBarsData: [lineChartBarData], - showingTooltipIndicators: [], - titlesData: const FlTitlesData(show: false), - ); - - final lineChartPainter = LineChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - final mockCanvasWrapper = MockCanvasWrapper(); - when(mockCanvasWrapper.size).thenAnswer((realInvocation) => viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - - final barPath = Path() - ..moveTo(10, 10) - ..lineTo(50, 50) - ..lineTo(80, 10); - - final belowBarPath = lineChartPainter.generateBelowBarPath( - viewSize, - lineChartBarData, - barPath, - barSpots, - holder, - ); - - expect(belowBarPath.getBounds().bottom, 60); - expect(belowBarPath.getBounds().left, 10); - expect(belowBarPath.getBounds().right, 80); - expect(belowBarPath.getBounds().top, 10); - }); - }); - - group('generateAboveBarPath()', () { - test('test 1', () { - const viewSize = Size(100, 100); - - const barSpots = [ - FlSpot(1, 9), - FlSpot(5, 5), - FlSpot(8, 9), - ]; - - final lineChartBarData = LineChartBarData( - spots: barSpots, - isStepLineChart: true, - ); - - final data = LineChartData( - minY: 0, - maxY: 10, - minX: 0, - maxX: 10, - lineBarsData: [lineChartBarData], - showingTooltipIndicators: [], - titlesData: const FlTitlesData(show: false), - ); - - final lineChartPainter = LineChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - final mockCanvasWrapper = MockCanvasWrapper(); - when(mockCanvasWrapper.size).thenAnswer((realInvocation) => viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - - final barPath = Path() - ..moveTo(10, 10) - ..lineTo(50, 50) - ..lineTo(80, 10); - - final belowBarPath = lineChartPainter.generateAboveBarPath( - viewSize, - lineChartBarData, - barPath, - barSpots, - holder, - ); - - expect(belowBarPath.getBounds().bottom, 50); - expect(belowBarPath.getBounds().left, 10); - expect(belowBarPath.getBounds().right, 80); - expect(belowBarPath.getBounds().top, 0); - }); - }); - - group('drawBelowBar()', () { - test('test 1', () { - const viewSize = Size(100, 100); - - const barSpots = [ - FlSpot(1, 9), - FlSpot(8, 9), - ]; - - final lineChartBarData = LineChartBarData( - spots: barSpots, - isStepLineChart: true, - belowBarData: BarAreaData( - show: true, - gradient: const LinearGradient( - colors: [Color(0xFFFF0000), Color(0xFF00FF00)], - ), - ), - ); - - final data = LineChartData( - minY: 0, - maxY: 10, - minX: 0, - maxX: 10, - lineBarsData: [lineChartBarData], - showingTooltipIndicators: [], - titlesData: const FlTitlesData(show: false), - ); - - final lineChartPainter = LineChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - final mockCanvasWrapper = MockCanvasWrapper(); - when(mockCanvasWrapper.size).thenAnswer((realInvocation) => viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - - final belowBarPath = Path() - ..moveTo(10, 10) - ..lineTo(80, 10); - - final filletAboveBarPath = Path() - ..moveTo(10, 10) - ..lineTo(80, 10) - ..lineTo(80, 0) - ..lineTo(10, 0) - ..lineTo(10, 10); - - lineChartPainter.drawBelowBar( - mockCanvasWrapper, - belowBarPath, - filletAboveBarPath, - holder, - lineChartBarData, - ); - - final result = - verify(mockCanvasWrapper.drawPath(belowBarPath, captureAny)) - ..called(1); - - final paint = result.captured.single as Paint; - expect(paint.color, const Color(0xFF000000)); - - expect(paint.shader is ui.Gradient, true); - }); - - test('test 2', () { - const viewSize = Size(100, 100); - - const barSpots = [ - FlSpot(1, 9), - FlSpot(8, 9), - ]; - - final lineChartBarData = LineChartBarData( - spots: barSpots, - isStepLineChart: true, - belowBarData: BarAreaData( - show: true, - gradient: const LinearGradient( - colors: [Color(0xFFFF0000), Color(0xFF00FF00)], - ), - applyCutOffY: true, - cutOffY: 8, - spotsLine: const BarAreaSpotsLine( - show: true, - applyCutOffY: false, - flLineStyle: FlLine( - color: Color(0x00F0F0F0), - strokeWidth: 18, - ), - ), - ), - ); - - final data = LineChartData( - minY: 0, - maxY: 10, - minX: 0, - maxX: 10, - lineBarsData: [lineChartBarData], - showingTooltipIndicators: [], - titlesData: const FlTitlesData(show: false), - ); - - final lineChartPainter = LineChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - final mockCanvasWrapper = MockCanvasWrapper(); - when(mockCanvasWrapper.size).thenAnswer((realInvocation) => viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - - final belowBarPath = Path() - ..moveTo(10, 10) - ..lineTo(80, 10); - - final filletAboveBarPath = Path() - ..moveTo(10, 10) - ..lineTo(80, 10) - ..lineTo(80, 0) - ..lineTo(10, 0) - ..lineTo(10, 10); - - final results = >[]; - when( - mockCanvasWrapper.drawDashedLine( - captureAny, - captureAny, - captureAny, - any, - ), - ).thenAnswer((inv) { - results.add({ - 'from': inv.positionalArguments[0] as Offset, - 'to': inv.positionalArguments[1] as Offset, - 'paint_color': (inv.positionalArguments[2] as Paint).color, - 'paint_stroke_width': - (inv.positionalArguments[2] as Paint).strokeWidth, - }); - }); - - lineChartPainter.drawBelowBar( - mockCanvasWrapper, - belowBarPath, - filletAboveBarPath, - holder, - lineChartBarData, - ); - - verify( - mockCanvasWrapper.saveLayer( - Rect.fromLTWH(0, 0, viewSize.width, viewSize.height), - any, - ), - ).called(1); - - final result = - verify(mockCanvasWrapper.drawPath(belowBarPath, captureAny)) - ..called(1); - final paint = result.captured.single as Paint; - expect(paint.color, const Color(0xFF000000)); - expect(paint.shader is ui.Gradient, true); - - final result2 = - verify(mockCanvasWrapper.drawPath(filletAboveBarPath, captureAny)) - ..called(1); - final paint2 = result2.captured.single as Paint; - expect(paint2.color, const Color(0x00000000)); - expect(paint2.blendMode, BlendMode.dstIn); - expect(paint2.style, PaintingStyle.fill); - - verify(mockCanvasWrapper.restore()).called(1); - - expect(results.length, 2); - - for (final item in results) { - expect((item['paint_color'] as Color).alpha, 0); - expect(item['paint_stroke_width'], 18); - } - }); - }); - - group('drawAboveBar()', () { - test('test 1', () { - const viewSize = Size(100, 100); - - const barSpots = [ - FlSpot(1, 9), - FlSpot(8, 9), - ]; - - final lineChartBarData = LineChartBarData( - spots: barSpots, - isStepLineChart: true, - aboveBarData: BarAreaData( - show: true, - gradient: const LinearGradient( - colors: [Color(0xFFFF0000), Color(0xFF00FF00)], - ), - ), - ); - - final data = LineChartData( - minY: 0, - maxY: 10, - minX: 0, - maxX: 10, - lineBarsData: [lineChartBarData], - showingTooltipIndicators: [], - titlesData: const FlTitlesData(show: false), - ); - - final lineChartPainter = LineChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - final mockCanvasWrapper = MockCanvasWrapper(); - when(mockCanvasWrapper.size).thenAnswer((realInvocation) => viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - - final aboveBarPath = Path() - ..moveTo(10, 10) - ..lineTo(80, 10); - - final filledBelowBarPath = Path() - ..moveTo(10, 10) - ..lineTo(80, 10) - ..lineTo(80, 0) - ..lineTo(10, 0) - ..lineTo(10, 10); - - lineChartPainter.drawAboveBar( - mockCanvasWrapper, - aboveBarPath, - filledBelowBarPath, - holder, - lineChartBarData, - ); - - final result = - verify(mockCanvasWrapper.drawPath(aboveBarPath, captureAny)) - ..called(1); - - final paint = result.captured.single as Paint; - expect(paint.color, const Color(0xFF000000)); - - expect(paint.shader is ui.Gradient, true); - }); - - test('test 2', () { - const viewSize = Size(100, 100); - - const barSpots = [ - FlSpot(1, 9), - FlSpot(8, 9), - ]; - - final lineChartBarData = LineChartBarData( - spots: barSpots, - isStepLineChart: true, - aboveBarData: BarAreaData( - show: true, - gradient: const LinearGradient( - colors: [Color(0xFFFF0000), Color(0xFF00FF00)], - ), - applyCutOffY: true, - cutOffY: 8, - spotsLine: const BarAreaSpotsLine( - show: true, - applyCutOffY: false, - flLineStyle: FlLine( - color: Color(0x00F0F0F0), - strokeWidth: 18, - ), - ), - ), - ); - - final data = LineChartData( - minY: 0, - maxY: 10, - minX: 0, - maxX: 10, - lineBarsData: [lineChartBarData], - showingTooltipIndicators: [], - titlesData: const FlTitlesData(show: false), - ); - - final lineChartPainter = LineChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - final mockCanvasWrapper = MockCanvasWrapper(); - when(mockCanvasWrapper.size).thenAnswer((realInvocation) => viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - - final aboveBarPath = Path() - ..moveTo(10, 10) - ..lineTo(80, 10); - - final filledBelowBarPath = Path() - ..moveTo(10, 10) - ..lineTo(80, 10) - ..lineTo(80, 0) - ..lineTo(10, 0) - ..lineTo(10, 10); - - final results = >[]; - when( - mockCanvasWrapper.drawDashedLine( - captureAny, - captureAny, - captureAny, - any, - ), - ).thenAnswer((inv) { - results.add({ - 'from': inv.positionalArguments[0] as Offset, - 'to': inv.positionalArguments[1] as Offset, - 'paint_color': (inv.positionalArguments[2] as Paint).color, - 'paint_stroke_width': - (inv.positionalArguments[2] as Paint).strokeWidth, - }); - }); - - lineChartPainter.drawAboveBar( - mockCanvasWrapper, - aboveBarPath, - filledBelowBarPath, - holder, - lineChartBarData, - ); - - verify( - mockCanvasWrapper.saveLayer( - Rect.fromLTWH(0, 0, viewSize.width, viewSize.height), - any, - ), - ).called(1); - - final result = - verify(mockCanvasWrapper.drawPath(aboveBarPath, captureAny)) - ..called(1); - final paint = result.captured.single as Paint; - expect(paint.color, const Color(0xFF000000)); - expect(paint.shader is ui.Gradient, true); - - final result2 = - verify(mockCanvasWrapper.drawPath(filledBelowBarPath, captureAny)) - ..called(1); - final paint2 = result2.captured.single as Paint; - expect(paint2.color, const Color(0x00000000)); - expect(paint2.blendMode, BlendMode.dstIn); - expect(paint2.style, PaintingStyle.fill); - - verify(mockCanvasWrapper.restore()).called(1); - - expect(results.length, 2); - - for (final item in results) { - expect((item['paint_color'] as Color).alpha, 0); - expect(item['paint_stroke_width'], 18); - } - }); - }); - - group('drawBetweenBar()', () { - test('test 1', () { - const viewSize = Size(100, 100); - - const barSpots1 = [ - FlSpot(1, 9), - FlSpot(8, 9), - ]; - - const barSpots2 = [ - FlSpot(1, 5), - FlSpot(8, 5), - ]; - - final lineChartBarData1 = LineChartBarData( - spots: barSpots1, - isStepLineChart: true, - aboveBarData: BarAreaData( - show: true, - gradient: const LinearGradient( - colors: [Color(0xFFFF0000), Color(0xFF00FF00)], - ), - ), - ); - - final lineChartBarData2 = LineChartBarData( - spots: barSpots2, - isStepLineChart: true, - ); - - final betweenBarData1 = BetweenBarsData( - fromIndex: 0, - toIndex: 1, - color: const Color(0xFFFF0000), - ); - - final data = LineChartData( - minY: 0, - maxY: 10, - minX: 0, - maxX: 10, - lineBarsData: [lineChartBarData1, lineChartBarData2], - showingTooltipIndicators: [], - titlesData: const FlTitlesData(show: false), - betweenBarsData: [betweenBarData1], - ); - - final lineChartPainter = LineChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - final mockCanvasWrapper = MockCanvasWrapper(); - when(mockCanvasWrapper.size).thenAnswer((realInvocation) => viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - - final aboveBarPath = Path() - ..moveTo(10, 10) - ..lineTo(80, 10); - - lineChartPainter.drawBetweenBar( - mockCanvasWrapper, - aboveBarPath, - betweenBarData1, - MockData.rect1, - holder, - ); - - verify( - mockCanvasWrapper.saveLayer( - Rect.fromLTWH(0, 0, viewSize.width, viewSize.height), - any, - ), - ); - final result = - verify(mockCanvasWrapper.drawPath(aboveBarPath, captureAny)) - ..called(1); - final painter = result.captured.single as Paint; - expect(painter.color, const Color(0xFFFF0000)); - verify(mockCanvasWrapper.restore()); - }); - }); - - group('drawBarShadow()', () { - test('test 1', () { - const barSpots1 = [ - FlSpot(1, 9), - FlSpot(8, 9), - ]; - - final lineChartBarData1 = LineChartBarData( - spots: barSpots1, - isStepLineChart: true, - shadow: const Shadow(color: Color(0x0000FF00)), - ); - - final lineChartPainter = LineChartPainter(); - final mockCanvasWrapper = MockCanvasWrapper(); - - final barPath = Path() - ..moveTo(10, 10) - ..lineTo(80, 10); - - lineChartPainter.drawBarShadow( - mockCanvasWrapper, - barPath, - lineChartBarData1, - ); - verifyNever(mockCanvasWrapper.drawPath(any, any)); - }); - - test('test 2', () { - const viewSize = Size(100, 100); - - const barSpots1 = [ - FlSpot(1, 9), - FlSpot(8, 9), - ]; - - final lineChartBarData1 = LineChartBarData( - spots: barSpots1, - barWidth: 80, - isStrokeCapRound: true, - isStepLineChart: true, - shadow: const Shadow( - color: Color(0x0100FF00), - offset: Offset(10, 15), - blurRadius: 10, - ), - ); - - final lineChartPainter = LineChartPainter(); - final mockCanvasWrapper = MockCanvasWrapper(); - when(mockCanvasWrapper.size).thenAnswer((realInvocation) => viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - - final barPath = Path() - ..moveTo(10, 10) - ..lineTo(80, 10); - - lineChartPainter.drawBarShadow( - mockCanvasWrapper, - barPath, - lineChartBarData1, - ); - final result = verify(mockCanvasWrapper.drawPath(captureAny, captureAny)) - ..called(1); - final path = result.captured[0] as Path; - expect(path.getBounds(), barPath.shift(const Offset(10, 15)).getBounds()); - - final paint = result.captured[1] as Paint; - expect(paint.color, const Color(0x0100FF00)); - expect(paint.shader, null); - expect(paint.strokeWidth, 80); - expect( - paint.maskFilter.toString(), - MaskFilter.blur(BlurStyle.normal, Utils().convertRadiusToSigma(10)) - .toString(), - ); - expect(paint.strokeCap, StrokeCap.round); - }); - }); - - group('drawBar()', () { - test('test 1', () { - const viewSize = Size(100, 100); - - const barSpots1 = [ - FlSpot(1, 9), - FlSpot(8, 9), - ]; - - final lineChartBarData1 = LineChartBarData( - show: false, - spots: barSpots1, - barWidth: 80, - isStrokeCapRound: true, - isStepLineChart: true, - shadow: const Shadow( - color: Color(0x0100FF00), - offset: Offset(10, 15), - blurRadius: 10, - ), - ); - - final data = LineChartData( - minY: 0, - maxY: 10, - minX: 0, - maxX: 10, - lineBarsData: [lineChartBarData1], - showingTooltipIndicators: [], - titlesData: const FlTitlesData(show: false), - ); - - final lineChartPainter = LineChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - final mockCanvasWrapper = MockCanvasWrapper(); - when(mockCanvasWrapper.size).thenAnswer((realInvocation) => viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - - final barPath = Path() - ..moveTo(10, 10) - ..lineTo(80, 10); - - lineChartPainter.drawBar( - mockCanvasWrapper, - barPath, - lineChartBarData1, - holder, - ); - verifyNever(mockCanvasWrapper.drawPath(any, any)); - }); - - test('test 2', () { - const viewSize = Size(100, 100); - - const barSpots1 = [ - FlSpot(1, 9), - FlSpot(8, 9), - ]; - - final lineChartBarData1 = LineChartBarData( - spots: barSpots1, - barWidth: 80, - isStrokeCapRound: true, - isStepLineChart: true, - color: const Color(0xF0F0F0F0), - shadow: const Shadow( - color: Color(0x0100FF00), - offset: Offset(10, 15), - blurRadius: 10, - ), - ); - - final data = LineChartData( - minY: 0, - maxY: 10, - minX: 0, - maxX: 10, - lineBarsData: [lineChartBarData1], - showingTooltipIndicators: [], - titlesData: const FlTitlesData(show: false), - ); - - final lineChartPainter = LineChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - final mockCanvasWrapper = MockCanvasWrapper(); - when(mockCanvasWrapper.size).thenAnswer((realInvocation) => viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - - final barPath = Path() - ..moveTo(10, 10) - ..lineTo(80, 10); - - lineChartPainter.drawBar( - mockCanvasWrapper, - barPath, - lineChartBarData1, - holder, - ); - final result = verify(mockCanvasWrapper.drawPath(captureAny, captureAny)) - ..called(1); - final drewPath = result.captured[0] as Path; - expect(drewPath, barPath); - - final paint = result.captured[1] as Paint; - expect(paint.color, const Color(0xF0F0F0F0)); - expect(paint.shader, null); - expect(paint.maskFilter, null); - expect(paint.strokeWidth, 80); - }); - - test('test 3', () { - const viewSize = Size(100, 100); - - const barSpots1 = [ - FlSpot(1, 9), - FlSpot(8, 9), - ]; - - final lineChartBarData1 = LineChartBarData( - spots: barSpots1, - barWidth: 80, - isStrokeCapRound: true, - isStepLineChart: true, - gradient: const LinearGradient( - colors: [Color(0xF0F0F0F0), Color(0x0100FF00)], - ), - dashArray: [1, 2, 3], - ); - - final data = LineChartData( - minY: 0, - maxY: 10, - minX: 0, - maxX: 10, - lineBarsData: [lineChartBarData1], - showingTooltipIndicators: [], - titlesData: const FlTitlesData(show: false), - ); - - final lineChartPainter = LineChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - final mockCanvasWrapper = MockCanvasWrapper(); - when(mockCanvasWrapper.size).thenAnswer((realInvocation) => viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - - final barPath = Path() - ..moveTo(10, 10) - ..lineTo(80, 10); - - lineChartPainter.drawBar( - mockCanvasWrapper, - barPath, - lineChartBarData1, - holder, - ); - final result = verify(mockCanvasWrapper.drawPath(captureAny, captureAny)) - ..called(1); - final drewPath = result.captured[0] as Path; - expect( - drewPath.computeMetrics().length, - barPath.toDashedPath([1, 2, 3]).computeMetrics().length, - ); - - final paint = result.captured[1] as Paint; - expect(paint.shader != null, true); - expect(paint.maskFilter, null); - expect(paint.strokeWidth, 80); - }); - }); - - group('drawExtraLines()', () { - test('test 1', () { - const viewSize = Size(100, 100); - - final data = LineChartData( - minY: 0, - maxY: 10, - minX: 0, - maxX: 10, - titlesData: const FlTitlesData(show: false), - ); - - final lineChartPainter = LineChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - final mockCanvasWrapper = MockCanvasWrapper(); - when(mockCanvasWrapper.size).thenAnswer((realInvocation) => viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - - final mockBuildContext = MockBuildContext(); - - lineChartPainter.drawExtraLines( - mockBuildContext, - mockCanvasWrapper, - holder, - ); - - verifyNever(mockCanvasWrapper.drawDashedLine(any, any, any, captureAny)); - }); - - test('test 2', () { - const viewSize = Size(100, 100); - - final data = LineChartData( - minY: 0, - maxY: 10, - minX: 0, - maxX: 10, - titlesData: const FlTitlesData(show: false), - ); - - final lineChartPainter = LineChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - final mockCanvasWrapper = MockCanvasWrapper(); - when(mockCanvasWrapper.size).thenAnswer((realInvocation) => viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - - final mockBuildContext = MockBuildContext(); - - lineChartPainter.drawExtraLines( - mockBuildContext, - mockCanvasWrapper, - holder, - ); - - verifyNever(mockCanvasWrapper.drawDashedLine(any, any, any, captureAny)); - }); - - test('test 3', () { - const viewSize = Size(100, 100); - - final data = LineChartData( - minY: 0, - maxY: 10, - minX: 0, - maxX: 10, - titlesData: const FlTitlesData(show: false), - extraLinesData: ExtraLinesData( - horizontalLines: [ - HorizontalLine( - y: 1, - color: const Color(0x11111111), - strokeWidth: 11, - ), - HorizontalLine( - y: 2, - color: const Color(0x22222222), - strokeWidth: 22, - ), - ], - verticalLines: [ - VerticalLine(x: 4, color: const Color(0x33333333), strokeWidth: 33), - VerticalLine(x: 5, color: const Color(0x44444444), strokeWidth: 44), - ], - ), - ); - - final lineChartPainter = LineChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - final mockCanvasWrapper = MockCanvasWrapper(); - when(mockCanvasWrapper.size).thenAnswer((realInvocation) => viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - - final mockBuildContext = MockBuildContext(); - - final results = >[]; - when( - mockCanvasWrapper.drawDashedLine( - captureAny, - captureAny, - captureAny, - any, - ), - ).thenAnswer((inv) { - results.add({ - 'from': inv.positionalArguments[0] as Offset, - 'to': inv.positionalArguments[1] as Offset, - 'paint_color': (inv.positionalArguments[2] as Paint).color, - 'paint_stroke_width': - (inv.positionalArguments[2] as Paint).strokeWidth, - }); - }); - - lineChartPainter.drawExtraLines( - mockBuildContext, - mockCanvasWrapper, - holder, - ); - - expect(results.length, 4); - - expect(results[0]['paint_color'], const Color(0x11111111)); - expect(results[0]['paint_stroke_width'], 11); - expect(results[0]['from'], const Offset(0, 90)); - expect(results[0]['to'], const Offset(100, 90)); - - expect(results[1]['paint_color'], const Color(0x22222222)); - expect(results[1]['paint_stroke_width'], 22); - expect(results[1]['from'], const Offset(0, 80)); - expect(results[1]['to'], const Offset(100, 80)); - - expect(results[2]['paint_color'], const Color(0x33333333)); - expect(results[2]['paint_stroke_width'], 33); - expect(results[2]['from'], const Offset(40, 0)); - expect(results[2]['to'], const Offset(40, 100)); - - expect(results[3]['paint_color'], const Color(0x44444444)); - expect(results[3]['paint_stroke_width'], 44); - expect(results[3]['from'], const Offset(50, 0)); - expect(results[3]['to'], const Offset(50, 100)); - }); - - test('should draw horizontal lines at max and min', () { - const viewSize = Size(100, 100); - final data = LineChartData( - minY: 0, - maxY: 10, - minX: 0, - maxX: 10, - titlesData: const FlTitlesData(show: false), - extraLinesData: ExtraLinesData( - horizontalLines: [ - HorizontalLine( - y: 0, - color: Colors.cyanAccent, - dashArray: [12, 22], - ), - HorizontalLine( - y: 10, - color: Colors.cyanAccent, - dashArray: [12, 22], - ), - ], - extraLinesOnTop: false, - ), - ); - - final lineChartPainter = LineChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - final mockCanvasWrapper = MockCanvasWrapper(); - when(mockCanvasWrapper.size).thenAnswer((realInvocation) => viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - - final mockBuildContext = MockBuildContext(); - - lineChartPainter.drawExtraLines( - mockBuildContext, - mockCanvasWrapper, - holder, - ); - - verify( - mockCanvasWrapper.drawDashedLine( - any, - any, - argThat( - const TypeMatcher().having( - (p0) => p0.color.value, - 'colors match', - equals(Colors.cyanAccent.value), - ), - ), - holder.data.extraLinesData.horizontalLines[0].dashArray, - ), - ).called(2); - }); - - test('should draw vertical lines at max and min', () { - const viewSize = Size(100, 100); - final data = LineChartData( - minY: 0, - maxY: 10, - minX: 0, - maxX: 10, - titlesData: const FlTitlesData(show: false), - extraLinesData: ExtraLinesData( - verticalLines: [ - VerticalLine( - x: 0, - color: Colors.cyanAccent, - dashArray: [12, 22], - ), - VerticalLine( - x: 10, - color: Colors.cyanAccent, - dashArray: [12, 22], - ), - ], - ), - ); - - final lineChartPainter = LineChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - final mockCanvasWrapper = MockCanvasWrapper(); - when(mockCanvasWrapper.size).thenAnswer((realInvocation) => viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - - final mockBuildContext = MockBuildContext(); - - lineChartPainter.drawExtraLines( - mockBuildContext, - mockCanvasWrapper, - holder, - ); - - verify( - mockCanvasWrapper.drawDashedLine( - any, - any, - argThat( - const TypeMatcher().having( - (p0) => p0.color.value, - 'colors match', - equals(Colors.cyanAccent.value), - ), - ), - holder.data.extraLinesData.verticalLines[0].dashArray, - ), - ).called(2); - }); - - test('should not draw extra lines beyond chart max and min', () { - const viewSize = Size(100, 100); - final data = LineChartData( - minY: -1, - maxY: 10, - minX: -1, - maxX: 10, - titlesData: const FlTitlesData(show: false), - extraLinesData: ExtraLinesData( - verticalLines: [ - VerticalLine( - x: -1.1, - color: Colors.cyanAccent, - dashArray: [12, 22], - ), - VerticalLine( - x: 11, - color: Colors.cyanAccent, - dashArray: [12, 22], - ), - ], - horizontalLines: [ - HorizontalLine( - y: -1.1, - color: Colors.cyanAccent, - dashArray: [12, 22], - ), - HorizontalLine( - y: 11, - color: Colors.cyanAccent, - dashArray: [12, 22], - ), - ], - ), - ); - - final lineChartPainter = LineChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - final mockCanvasWrapper = MockCanvasWrapper(); - when(mockCanvasWrapper.size).thenAnswer((realInvocation) => viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - - final mockBuildContext = MockBuildContext(); - - lineChartPainter.drawExtraLines( - mockBuildContext, - mockCanvasWrapper, - holder, - ); - - verifyNever( - mockCanvasWrapper.drawDashedLine( - any, - any, - argThat( - const TypeMatcher().having( - (p0) => p0.color.value, - 'colors match', - equals(Colors.cyanAccent.value), - ), - ), - holder.data.extraLinesData.verticalLines[0].dashArray, - ), - ); - }); - }); - - group('drawTouchTooltip()', () { - test('test 1', () { - const viewSize = Size(100, 100); - - final barData = LineChartBarData( - spots: const [ - FlSpot(1, 1), - FlSpot(2, 2), - FlSpot(3, 3), - FlSpot(4, 4), - FlSpot.nullSpot, - FlSpot(5, 5), - ], - ); - - final tooltipData = LineTouchTooltipData( - tooltipBgColor: const Color(0x11111111), - tooltipRoundedRadius: 12, - rotateAngle: 43, - maxContentWidth: 100, - tooltipMargin: 12, - tooltipPadding: const EdgeInsets.all(12), - fitInsideHorizontally: true, - fitInsideVertically: true, - getTooltipItems: (List touchedSpots) { - return touchedSpots - .map((e) => LineTooltipItem(e.barIndex.toString(), textStyle1)) - .toList(); - }, - tooltipBorder: const BorderSide(color: Color(0x11111111), width: 2), - ); - final data = LineChartData( - minY: 0, - maxY: 10, - minX: 0, - maxX: 10, - titlesData: const FlTitlesData(show: false), - lineTouchData: LineTouchData( - touchTooltipData: tooltipData, - ), - ); - - final lineChartPainter = LineChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - final mockCanvasWrapper = MockCanvasWrapper(); - when(mockCanvasWrapper.size).thenAnswer((realInvocation) => viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - - final mockBuildContext = MockBuildContext(); - final mockUtils = MockUtils(); - Utils.changeInstance(mockUtils); - when(mockUtils.getThemeAwareTextStyle(any, any)) - .thenAnswer((realInvocation) => textStyle1); - when(mockUtils.calculateRotationOffset(any, any)) - .thenAnswer((realInvocation) => Offset.zero); - when( - mockCanvasWrapper.drawRotated( - size: anyNamed('size'), - rotationOffset: anyNamed('rotationOffset'), - drawOffset: anyNamed('drawOffset'), - angle: anyNamed('angle'), - drawCallback: anyNamed('drawCallback'), - ), - ).thenAnswer((realInvocation) { - final callback = realInvocation - .namedArguments[const Symbol('drawCallback')] as DrawCallback; - callback(); - }); - lineChartPainter.drawTouchTooltip( - mockBuildContext, - mockCanvasWrapper, - tooltipData, - barData.spots.first, - ShowingTooltipIndicators([ - LineBarSpot( - barData, - 0, - barData.spots.first, - ), - ]), - holder, - ); - - final result1 = - verify(mockCanvasWrapper.drawRRect(captureAny, captureAny)) - ..called(2); - final rRect = result1.captured[0] as RRect; - final paint = result1.captured[1] as Paint; - expect( - rRect, - RRect.fromLTRBR(0, 40, 38, 78, const Radius.circular(12)), - ); - expect(paint.color, const Color(0x11111111)); - final rRectBorder = result1.captured[2] as RRect; - final paintBorder = result1.captured[3] as Paint; - expect( - rRectBorder, - RRect.fromLTRBR(0, 40, 38, 78, const Radius.circular(12)), - ); - expect(paintBorder.color, const Color(0x11111111)); - expect(paintBorder.strokeWidth, 2); - - final result2 = verify(mockCanvasWrapper.drawText(captureAny, captureAny)) - ..called(1); - final textPainter = result2.captured[0] as TextPainter; - final drawOffset = result2.captured[1] as Offset; - expect((textPainter.text as TextSpan?)!.text, '0'); - expect((textPainter.text as TextSpan?)!.style, textStyle1); - expect(drawOffset, const Offset(12, 52)); - }); - - test('test 2', () { - const viewSize = Size(100, 100); - - final barData = LineChartBarData( - spots: const [ - FlSpot(1, 1), - FlSpot(2, 2), - FlSpot(3, 3), - FlSpot(4, 4), - FlSpot.nullSpot, - FlSpot(5, 5), - ], - ); - - final tooltipData = LineTouchTooltipData( - tooltipBgColor: const Color(0x11111111), - tooltipRoundedRadius: 12, - rotateAngle: 43, - maxContentWidth: 100, - tooltipMargin: 12, - tooltipHorizontalAlignment: FLHorizontalAlignment.left, - tooltipPadding: const EdgeInsets.all(12), - fitInsideVertically: true, - getTooltipItems: (List touchedSpots) { - return touchedSpots - .map((e) => LineTooltipItem(e.barIndex.toString(), textStyle1)) - .toList(); - }, - tooltipBorder: const BorderSide(color: Color(0x11111111), width: 2), - ); - final data = LineChartData( - minY: 0, - maxY: 10, - minX: 0, - maxX: 10, - titlesData: const FlTitlesData(show: false), - lineTouchData: LineTouchData( - touchTooltipData: tooltipData, - ), - ); - - final lineChartPainter = LineChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - final mockCanvasWrapper = MockCanvasWrapper(); - when(mockCanvasWrapper.size).thenAnswer((realInvocation) => viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - - final mockBuildContext = MockBuildContext(); - final mockUtils = MockUtils(); - Utils.changeInstance(mockUtils); - when(mockUtils.getThemeAwareTextStyle(any, any)) - .thenAnswer((realInvocation) => textStyle1); - when(mockUtils.calculateRotationOffset(any, any)) - .thenAnswer((realInvocation) => Offset.zero); - when( - mockCanvasWrapper.drawRotated( - size: anyNamed('size'), - rotationOffset: anyNamed('rotationOffset'), - drawOffset: anyNamed('drawOffset'), - angle: anyNamed('angle'), - drawCallback: anyNamed('drawCallback'), - ), - ).thenAnswer((realInvocation) { - final callback = realInvocation - .namedArguments[const Symbol('drawCallback')] as DrawCallback; - callback(); - }); - lineChartPainter.drawTouchTooltip( - mockBuildContext, - mockCanvasWrapper, - tooltipData, - barData.spots.first, - ShowingTooltipIndicators([ - LineBarSpot( - barData, - 0, - barData.spots.first, - ), - ]), - holder, - ); - - final result1 = - verify(mockCanvasWrapper.drawRRect(captureAny, captureAny)) - ..called(2); - final rRect = result1.captured[0] as RRect; - final paint = result1.captured[1] as Paint; - expect( - rRect, - RRect.fromLTRBR(-28, 40, 10, 78, const Radius.circular(12)), - ); - expect(paint.color, const Color(0x11111111)); - final rRectBorder = result1.captured[2] as RRect; - final paintBorder = result1.captured[3] as Paint; - expect( - rRectBorder, - RRect.fromLTRBR(-28, 40, 10, 78, const Radius.circular(12)), - ); - expect(paintBorder.color, const Color(0x11111111)); - expect(paintBorder.strokeWidth, 2); - - final result2 = verify(mockCanvasWrapper.drawText(captureAny, captureAny)) - ..called(1); - final textPainter = result2.captured[0] as TextPainter; - final drawOffset = result2.captured[1] as Offset; - expect((textPainter.text as TextSpan?)!.text, '0'); - expect((textPainter.text as TextSpan?)!.style, textStyle1); - expect(drawOffset, const Offset(-16, 52)); - }); - - test('test 3', () { - const viewSize = Size(100, 100); - - final barData = LineChartBarData( - spots: const [ - FlSpot(1, 1), - FlSpot(2, 2), - FlSpot(3, 3), - FlSpot(4, 4), - FlSpot.nullSpot, - FlSpot(5, 5), - ], - ); - - final tooltipData = LineTouchTooltipData( - tooltipBgColor: const Color(0x11111111), - tooltipRoundedRadius: 12, - rotateAngle: 43, - maxContentWidth: 100, - tooltipMargin: 12, - tooltipHorizontalAlignment: FLHorizontalAlignment.right, - tooltipPadding: const EdgeInsets.all(12), - fitInsideVertically: true, - getTooltipItems: (List touchedSpots) { - return touchedSpots - .map((e) => LineTooltipItem(e.barIndex.toString(), textStyle1)) - .toList(); - }, - tooltipBorder: const BorderSide(color: Color(0x11111111), width: 2), - ); - final data = LineChartData( - minY: 0, - maxY: 10, - minX: 0, - maxX: 10, - titlesData: const FlTitlesData(show: false), - lineTouchData: LineTouchData( - touchTooltipData: tooltipData, - ), - ); - - final lineChartPainter = LineChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - final mockCanvasWrapper = MockCanvasWrapper(); - when(mockCanvasWrapper.size).thenAnswer((realInvocation) => viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - - final mockBuildContext = MockBuildContext(); - final mockUtils = MockUtils(); - Utils.changeInstance(mockUtils); - when(mockUtils.getThemeAwareTextStyle(any, any)) - .thenAnswer((realInvocation) => textStyle1); - when(mockUtils.calculateRotationOffset(any, any)) - .thenAnswer((realInvocation) => Offset.zero); - when( - mockCanvasWrapper.drawRotated( - size: anyNamed('size'), - rotationOffset: anyNamed('rotationOffset'), - drawOffset: anyNamed('drawOffset'), - angle: anyNamed('angle'), - drawCallback: anyNamed('drawCallback'), - ), - ).thenAnswer((realInvocation) { - final callback = realInvocation - .namedArguments[const Symbol('drawCallback')] as DrawCallback; - callback(); - }); - lineChartPainter.drawTouchTooltip( - mockBuildContext, - mockCanvasWrapper, - tooltipData, - barData.spots.first, - ShowingTooltipIndicators([ - LineBarSpot( - barData, - 0, - barData.spots.first, - ), - ]), - holder, - ); - - final result1 = - verify(mockCanvasWrapper.drawRRect(captureAny, captureAny)) - ..called(2); - final rRect = result1.captured[0] as RRect; - final paint = result1.captured[1] as Paint; - expect( - rRect, - RRect.fromLTRBR(10, 40, 48, 78, const Radius.circular(12)), - ); - expect(paint.color, const Color(0x11111111)); - final rRectBorder = result1.captured[2] as RRect; - final paintBorder = result1.captured[3] as Paint; - expect( - rRectBorder, - RRect.fromLTRBR(10, 40, 48, 78, const Radius.circular(12)), - ); - expect(paintBorder.color, const Color(0x11111111)); - expect(paintBorder.strokeWidth, 2); - - final result2 = verify(mockCanvasWrapper.drawText(captureAny, captureAny)) - ..called(1); - final textPainter = result2.captured[0] as TextPainter; - final drawOffset = result2.captured[1] as Offset; - expect((textPainter.text as TextSpan?)!.text, '0'); - expect((textPainter.text as TextSpan?)!.style, textStyle1); - expect(drawOffset, const Offset(22, 52)); - }); - }); - - group('getBarLineXLength()', () { - test('test 1', () { - const viewSize = Size(100, 100); - - final barData = LineChartBarData( - spots: const [ - FlSpot(1, 1), - FlSpot(2, 2), - FlSpot(3, 3), - FlSpot(4, 4), - FlSpot.nullSpot, - FlSpot(5, 5), - ], - ); - - final data = LineChartData( - minY: 0, - maxY: 10, - minX: 0, - maxX: 10, - ); - - final lineChartPainter = LineChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - final result = lineChartPainter.getBarLineXLength( - barData, - viewSize, - holder, - ); - expect(result, 40); - }); - }); - - group('handleTouch()', () { - test('test 1', () { - const viewSize = Size(100, 100); - - final lineChartBarData1 = LineChartBarData( - show: false, - spots: const [ - FlSpot(1, 1), - FlSpot(4, 1), - FlSpot(6, 1), - FlSpot(8, 1), - ], - barWidth: 80, - isStrokeCapRound: true, - isStepLineChart: true, - shadow: const Shadow( - color: Color(0x0100FF00), - offset: Offset(10, 15), - blurRadius: 10, - ), - ); - - final lineChartBarData2 = LineChartBarData( - show: false, - spots: const [ - FlSpot(1.1, 2), - FlSpot(2, 2), - FlSpot(3.5, 2), - FlSpot(4.3, 2), - ], - barWidth: 80, - isStrokeCapRound: true, - isStepLineChart: true, - shadow: const Shadow( - color: Color(0x0100FF00), - offset: Offset(10, 15), - blurRadius: 10, - ), - ); - - final data = LineChartData( - minY: 0, - maxY: 10, - minX: 0, - maxX: 10, - lineBarsData: [lineChartBarData1, lineChartBarData2], - showingTooltipIndicators: [], - titlesData: const FlTitlesData(show: false), - lineTouchData: const LineTouchData( - touchSpotThreshold: 0.5, - ), - ); - - final lineChartPainter = LineChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - final touchResponse = - lineChartPainter.handleTouch(const Offset(35, 0), viewSize, holder); - expect(touchResponse, null); - }); - - test('test 2', () { - const viewSize = Size(100, 100); - - final lineChartBarData1 = LineChartBarData( - spots: const [ - FlSpot(1, 1), - FlSpot(4, 1), - FlSpot(6, 1), - FlSpot(8, 1), - ], - barWidth: 80, - isStrokeCapRound: true, - isStepLineChart: true, - shadow: const Shadow( - color: Color(0x0100FF00), - offset: Offset(10, 15), - blurRadius: 10, - ), - ); - - final lineChartBarData2 = LineChartBarData( - spots: const [ - FlSpot(1.1, 2), - FlSpot(2, 2), - FlSpot(3.5, 2), - FlSpot(4.3, 2), - ], - barWidth: 80, - isStrokeCapRound: true, - isStepLineChart: true, - shadow: const Shadow( - color: Color(0x0100FF00), - offset: Offset(10, 15), - blurRadius: 10, - ), - ); - - final data = LineChartData( - minY: 0, - maxY: 10, - minX: 0, - maxX: 10, - lineBarsData: [lineChartBarData1, lineChartBarData2], - showingTooltipIndicators: [], - titlesData: const FlTitlesData(show: false), - lineTouchData: const LineTouchData( - touchSpotThreshold: 5, - ), - ); - - final lineChartPainter = LineChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - expect( - lineChartPainter - .handleTouch(const Offset(30, 0), viewSize, holder)! - .length, - 1, - ); - expect( - lineChartPainter.handleTouch( - const Offset(29.99, 0), - viewSize, - holder, - ), - null, - ); - expect( - lineChartPainter - .handleTouch(const Offset(10, 0), viewSize, holder)! - .length, - 2, - ); - }); - - test('test 3', () { - const viewSize = Size(100, 100); - - final lineChartBarData1 = LineChartBarData( - spots: const [ - FlSpot(1, 1), - FlSpot(2, 1), - FlSpot(3, 1), - FlSpot(8, 1), - ], - barWidth: 80, - isStrokeCapRound: true, - isStepLineChart: true, - shadow: const Shadow( - color: Color(0x0100FF00), - offset: Offset(10, 15), - blurRadius: 10, - ), - ); - - final lineChartBarData2 = LineChartBarData( - spots: const [ - FlSpot(1.3, 1), - FlSpot(2, 1), - FlSpot(3, 1), - FlSpot(4, 1), - ], - barWidth: 80, - isStrokeCapRound: true, - isStepLineChart: true, - shadow: const Shadow( - color: Color(0x0100FF00), - offset: Offset(10, 15), - blurRadius: 10, - ), - ); - - final data = LineChartData( - minY: 0, - maxY: 10, - minX: 0, - maxX: 10, - lineBarsData: [lineChartBarData1, lineChartBarData2], - showingTooltipIndicators: [], - titlesData: const FlTitlesData(show: false), - lineTouchData: const LineTouchData( - touchSpotThreshold: 5, - ), - ); - - final lineChartPainter = LineChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - - final result1 = - lineChartPainter.handleTouch(const Offset(11, 0), viewSize, holder)!; - expect(result1[0].barIndex, 0); - expect(result1[1].barIndex, 1); - - final result2 = - lineChartPainter.handleTouch(const Offset(12, 0), viewSize, holder)!; - expect(result2[0].barIndex, 1); - expect(result2[1].barIndex, 0); - }); - }); - - group('getNearestTouchedSpot()', () { - test('test 1', () { - const viewSize = Size(100, 100); - - final lineChartBarData1 = LineChartBarData( - show: false, - spots: const [ - FlSpot(1, 1), - FlSpot(4, 1), - FlSpot(6, 1), - FlSpot(8, 1), - ], - barWidth: 80, - isStrokeCapRound: true, - isStepLineChart: true, - shadow: const Shadow( - color: Color(0x0100FF00), - offset: Offset(10, 15), - blurRadius: 10, - ), - ); - - final lineChartBarData2 = LineChartBarData( - show: false, - spots: const [ - FlSpot(1.1, 2), - FlSpot(2, 2), - FlSpot(3.5, 2), - FlSpot(4.3, 2), - ], - barWidth: 80, - isStrokeCapRound: true, - isStepLineChart: true, - shadow: const Shadow( - color: Color(0x0100FF00), - offset: Offset(10, 15), - blurRadius: 10, - ), - ); - - final data = LineChartData( - minY: 0, - maxY: 10, - minX: 0, - maxX: 10, - lineBarsData: [lineChartBarData1, lineChartBarData2], - showingTooltipIndicators: [], - titlesData: const FlTitlesData(show: false), - lineTouchData: const LineTouchData( - touchSpotThreshold: 0.5, - ), - ); - - final lineChartPainter = LineChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - final touchResponse = lineChartPainter.getNearestTouchedSpot( - viewSize, - const Offset(35, 0), - data.lineBarsData[0], - 0, - holder, - ); - expect(touchResponse, null); - - final touchResponse2 = lineChartPainter.getNearestTouchedSpot( - viewSize, - const Offset(35, 0), - data.lineBarsData[0], - 0, - holder, - ); - expect(touchResponse2, null); - }); - - test('test 2', () { - const viewSize = Size(100, 100); - - final lineChartBarData1 = LineChartBarData( - spots: const [ - FlSpot(1, 1), - FlSpot(4, 1), - FlSpot(6, 1), - FlSpot(8, 1), - ], - barWidth: 80, - isStrokeCapRound: true, - isStepLineChart: true, - shadow: const Shadow( - color: Color(0x0100FF00), - offset: Offset(10, 15), - blurRadius: 10, - ), - ); - - final lineChartBarData2 = LineChartBarData( - spots: const [ - FlSpot(1.1, 2), - FlSpot(2, 2), - FlSpot(3.5, 2), - FlSpot(4.3, 2), - ], - barWidth: 80, - isStrokeCapRound: true, - isStepLineChart: true, - shadow: const Shadow( - color: Color(0x0100FF00), - offset: Offset(10, 15), - blurRadius: 10, - ), - ); - - final data = LineChartData( - minY: 0, - maxY: 10, - minX: 0, - maxX: 10, - lineBarsData: [lineChartBarData1, lineChartBarData2], - showingTooltipIndicators: [], - titlesData: const FlTitlesData(show: false), - lineTouchData: const LineTouchData( - touchSpotThreshold: 5, - ), - ); - - final lineChartPainter = LineChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - expect( - lineChartPainter.getNearestTouchedSpot( - viewSize, - const Offset(30, 0), - data.lineBarsData[0], - 0, - holder, - ), - null, - ); - final result1 = lineChartPainter.getNearestTouchedSpot( - viewSize, - const Offset(30, 0), - data.lineBarsData[1], - 1, - holder, - ); - expect(result1!.barIndex, 1); - expect(result1.spotIndex, 2); - - expect( - lineChartPainter.getNearestTouchedSpot( - viewSize, - const Offset(29.99, 0), - data.lineBarsData[0], - 0, - holder, - ), - null, - ); - expect( - lineChartPainter.getNearestTouchedSpot( - viewSize, - const Offset(29.99, 0), - data.lineBarsData[1], - 1, - holder, - ), - null, - ); - - final result2 = lineChartPainter.getNearestTouchedSpot( - viewSize, - const Offset(10, 0), - data.lineBarsData[0], - 0, - holder, - ); - expect(result2!.barIndex, 0); - expect(result2.spotIndex, 0); - - final result3 = lineChartPainter.getNearestTouchedSpot( - viewSize, - const Offset(10, 0), - data.lineBarsData[1], - 1, - holder, - ); - expect(result3!.barIndex, 1); - expect(result3.spotIndex, 0); - }); - - test('test 3', () { - const viewSize = Size(100, 100); - - final lineChartBarData1 = LineChartBarData( - spots: const [ - FlSpot(1, 1), - FlSpot(4, 1), - FlSpot(6, 4), - FlSpot(8, 1), - ], - barWidth: 80, - isStrokeCapRound: true, - isStepLineChart: true, - shadow: const Shadow( - color: Color(0x0100FF00), - offset: Offset(10, 15), - blurRadius: 10, - ), - ); - - final lineChartBarData2 = LineChartBarData( - spots: const [ - FlSpot(1.1, 4), - FlSpot(2, 4), - FlSpot(3.5, 1), - FlSpot(4.3, 4), - ], - barWidth: 80, - isStrokeCapRound: true, - isStepLineChart: true, - shadow: const Shadow( - color: Color(0x0100FF00), - offset: Offset(10, 15), - blurRadius: 10, - ), - ); - - final data = LineChartData( - minY: 0, - maxY: 10, - minX: 0, - maxX: 10, - lineBarsData: [lineChartBarData1, lineChartBarData2], - showingTooltipIndicators: [], - titlesData: const FlTitlesData(show: false), - lineTouchData: LineTouchData( - distanceCalculator: (Offset a, Offset b) { - final dx = a.dx - b.dx; - final dy = a.dy - b.dy; - return math.sqrt(dx * dx + dy * dy); - }, - touchSpotThreshold: 5, - ), - ); - - final lineChartPainter = LineChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - expect( - lineChartPainter.getNearestTouchedSpot( - viewSize, - const Offset(30, 0), - data.lineBarsData[0], - 0, - holder, - ), - null, - ); - final result1 = lineChartPainter.getNearestTouchedSpot( - viewSize, - const Offset(60, 65), - data.lineBarsData[0], - 0, - holder, - ); - expect(result1!.barIndex, 0); - expect(result1.spotIndex, 2); - - expect( - lineChartPainter.getNearestTouchedSpot( - viewSize, - const Offset(60, 65.01), - data.lineBarsData[0], - 0, - holder, - ), - null, - ); - expect( - lineChartPainter.getNearestTouchedSpot( - viewSize, - const Offset(29.99, 0), - data.lineBarsData[1], - 1, - holder, - ), - null, - ); - - final result2 = lineChartPainter.getNearestTouchedSpot( - viewSize, - const Offset(63.5, 63.5), - data.lineBarsData[0], - 0, - holder, - ); - expect(result2!.barIndex, 0); - expect(result2.spotIndex, 2); - }); - }); - - group('drawGrid()', () { - test('test 1 - none', () { - const viewSize = Size(20, 100); - - final data = LineChartData( - minY: 0, - maxY: 10, - minX: 0, - maxX: 10, - titlesData: const FlTitlesData(show: false), - gridData: const FlGridData( - show: false, - horizontalInterval: 2, - ), - ); - - final lineChartPainter = LineChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - final mockCanvasWrapper = MockCanvasWrapper(); - when(mockCanvasWrapper.size).thenAnswer((realInvocation) => viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - - final mockUtils = MockUtils(); - Utils.changeInstance(mockUtils); - when(mockUtils.getBestInitialIntervalValue(any, any, any)) - .thenAnswer((realInvocation) => 0); - - lineChartPainter.drawGrid(mockCanvasWrapper, holder); - verifyNever(mockCanvasWrapper.drawDashedLine(any, any, any, any)); - }); - - test('test 2 - horizontal', () { - const viewSize = Size(20, 100); - - final data = LineChartData( - minY: 0, - maxY: 10, - minX: 0, - maxX: 10, - titlesData: const FlTitlesData(show: false), - gridData: FlGridData( - drawVerticalLine: false, - horizontalInterval: 2, - checkToShowHorizontalLine: (value) => value != 2 && value != 8, - getDrawingHorizontalLine: (value) { - if (value == 4) { - return const FlLine( - color: MockData.color1, - strokeWidth: 11, - dashArray: [1, 1], - ); - } else if (value == 6) { - return const FlLine( - color: MockData.color2, - strokeWidth: 22, - dashArray: [2, 2], - ); - } else { - throw StateError("We shouldn't draw these lines"); - } - }, - ), - ); - - final lineChartPainter = LineChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - final mockCanvasWrapper = MockCanvasWrapper(); - when(mockCanvasWrapper.size).thenAnswer((realInvocation) => viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - - final mockUtils = MockUtils(); - Utils.changeInstance(mockUtils); - when(mockUtils.getBestInitialIntervalValue(any, any, any)) - .thenAnswer((realInvocation) => 0); - - final results = >[]; - when( - mockCanvasWrapper.drawDashedLine( - captureAny, - captureAny, - captureAny, - captureAny, - ), - ).thenAnswer((inv) { - results.add({ - 'from': inv.positionalArguments[0] as Offset, - 'to': inv.positionalArguments[1] as Offset, - 'paint_color': (inv.positionalArguments[2] as Paint).color, - 'paint_stroke_width': - (inv.positionalArguments[2] as Paint).strokeWidth, - 'dash_array': inv.positionalArguments[3] as List, - }); - }); - - lineChartPainter.drawGrid(mockCanvasWrapper, holder); - expect(results.length, 2); - - expect(results[0]['from'], const Offset(0, 60)); - expect(results[0]['to'], const Offset(20, 60)); - expect(results[0]['paint_color'], MockData.color1); - expect(results[0]['paint_stroke_width'], 11); - expect(results[0]['dash_array'], [1, 1]); - - expect(results[1]['from'], const Offset(0, 40)); - expect(results[1]['to'], const Offset(20, 40)); - expect(results[1]['paint_color'], MockData.color2); - expect(results[1]['paint_stroke_width'], 22); - expect(results[1]['dash_array'], [2, 2]); - }); - - test('test 3 - vertical', () { - const viewSize = Size(100, 20); - - final data = LineChartData( - minY: 0, - maxY: 10, - minX: 0, - maxX: 10, - titlesData: const FlTitlesData(show: false), - gridData: FlGridData( - drawHorizontalLine: false, - verticalInterval: 2, - checkToShowVerticalLine: (value) => value != 2 && value != 8, - getDrawingVerticalLine: (value) { - if (value == 4) { - return const FlLine( - color: MockData.color1, - strokeWidth: 11, - dashArray: [1, 1], - ); - } else if (value == 6) { - return const FlLine( - color: MockData.color2, - strokeWidth: 22, - dashArray: [2, 2], - ); - } else { - throw StateError("We shouldn't draw these lines"); - } - }, - ), - ); - - final lineChartPainter = LineChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - final mockCanvasWrapper = MockCanvasWrapper(); - when(mockCanvasWrapper.size).thenAnswer((realInvocation) => viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - - final mockUtils = MockUtils(); - Utils.changeInstance(mockUtils); - when(mockUtils.getBestInitialIntervalValue(any, any, any)) - .thenAnswer((realInvocation) => 0); - - final results = >[]; - when( - mockCanvasWrapper.drawDashedLine( - captureAny, - captureAny, - captureAny, - captureAny, - ), - ).thenAnswer((inv) { - results.add({ - 'from': inv.positionalArguments[0] as Offset, - 'to': inv.positionalArguments[1] as Offset, - 'paint_color': (inv.positionalArguments[2] as Paint).color, - 'paint_stroke_width': - (inv.positionalArguments[2] as Paint).strokeWidth, - 'dash_array': inv.positionalArguments[3] as List, - }); - }); - - lineChartPainter.drawGrid(mockCanvasWrapper, holder); - expect(results.length, 2); - - expect(results[0]['from'], const Offset(40, 0)); - expect(results[0]['to'], const Offset(40, 20)); - expect(results[0]['paint_color'], MockData.color1); - expect(results[0]['paint_stroke_width'], 11); - expect(results[0]['dash_array'], [1, 1]); - - expect(results[1]['from'], const Offset(60, 0)); - expect(results[1]['to'], const Offset(60, 20)); - expect(results[1]['paint_color'], MockData.color2); - expect(results[1]['paint_stroke_width'], 22); - expect(results[1]['dash_array'], [2, 2]); - }); - - test('test 4 - both', () { - const viewSize = Size(100, 20); - - final data = LineChartData( - minY: 0, - maxY: 10, - minX: 0, - maxX: 10, - ); - - final lineChartPainter = LineChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - final mockCanvasWrapper = MockCanvasWrapper(); - when(mockCanvasWrapper.size).thenAnswer((realInvocation) => viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - - final mockUtils = MockUtils(); - Utils.changeInstance(mockUtils); - when(mockUtils.getEfficientInterval(any, any)) - .thenAnswer((realInvocation) => 3); - when(mockUtils.getBestInitialIntervalValue(any, any, any)) - .thenAnswer((realInvocation) => 0); - - lineChartPainter.drawGrid(mockCanvasWrapper, holder); - verify(mockCanvasWrapper.drawDashedLine(any, any, any, any)).called(6); - }); - }); - - group('drawBackground()', () { - test('test 1', () { - const viewSize = Size(20, 100); - - final data = LineChartData( - minY: 0, - maxY: 10, - minX: 0, - maxX: 10, - titlesData: const FlTitlesData(show: false), - backgroundColor: MockData.color1.withOpacity(0), - ); - - final lineChartPainter = LineChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - final mockCanvasWrapper = MockCanvasWrapper(); - when(mockCanvasWrapper.size).thenAnswer((realInvocation) => viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - - lineChartPainter.drawBackground(mockCanvasWrapper, holder); - verifyNever(mockCanvasWrapper.drawRect(any, any)); - }); - - test('test 2', () { - const viewSize = Size(20, 100); - - final data = LineChartData( - minY: 0, - maxY: 10, - minX: 0, - maxX: 10, - titlesData: const FlTitlesData(show: false), - backgroundColor: MockData.color1, - ); - - final lineChartPainter = LineChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - final mockCanvasWrapper = MockCanvasWrapper(); - when(mockCanvasWrapper.size).thenAnswer((realInvocation) => viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - - lineChartPainter.drawBackground(mockCanvasWrapper, holder); - final result = verify( - mockCanvasWrapper.drawRect( - const Rect.fromLTRB(0, 0, 20, 100), - captureAny, - ), - ); - expect(result.callCount, 1); - expect((result.captured.single as Paint).color, MockData.color1); - }); - }); - - group('drawRangeAnnotation()', () { - test('test 1 - none', () { - const viewSize = Size(20, 100); - - final data = LineChartData( - minY: 0, - maxY: 10, - minX: 0, - maxX: 10, - titlesData: const FlTitlesData(show: false), - ); - - final lineChartPainter = LineChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - final mockCanvasWrapper = MockCanvasWrapper(); - when(mockCanvasWrapper.size).thenAnswer((realInvocation) => viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - - lineChartPainter.drawRangeAnnotation(mockCanvasWrapper, holder); - verifyNever(mockCanvasWrapper.drawRect(any, any)); - }); - - test('test 2 - horizontal', () { - const viewSize = Size(20, 100); - - final data = LineChartData( - minY: 0, - maxY: 10, - minX: 0, - maxX: 10, - titlesData: const FlTitlesData(show: false), - rangeAnnotations: RangeAnnotations( - horizontalRangeAnnotations: [ - HorizontalRangeAnnotation(y1: 4, y2: 10, color: MockData.color1), - HorizontalRangeAnnotation(y1: 12, y2: 14, color: MockData.color2), - ], - ), - ); - - final lineChartPainter = LineChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - final mockCanvasWrapper = MockCanvasWrapper(); - when(mockCanvasWrapper.size).thenAnswer((realInvocation) => viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - - final results = >[]; - when(mockCanvasWrapper.drawRect(captureAny, captureAny)) - .thenAnswer((inv) { - results.add({ - 'rect': inv.positionalArguments[0] as Rect, - 'paint_color': (inv.positionalArguments[1] as Paint).color, - }); - }); - - lineChartPainter.drawRangeAnnotation(mockCanvasWrapper, holder); - expect(results.length, 2); - - expect(results[0]['rect'], const Rect.fromLTRB(0, 0, 20, 60)); - expect(results[0]['paint_color'], MockData.color1); - - expect(results[1]['rect'], const Rect.fromLTRB(0, -40, 20, -20)); - expect(results[1]['paint_color'], MockData.color2); - }); - - test('test 3 - vertical', () { - const viewSize = Size(20, 100); - - final data = LineChartData( - minY: 0, - maxY: 10, - minX: 0, - maxX: 10, - titlesData: const FlTitlesData(show: false), - rangeAnnotations: RangeAnnotations( - verticalRangeAnnotations: [ - VerticalRangeAnnotation(x1: 1, x2: 2, color: MockData.color1), - VerticalRangeAnnotation(x1: 4, x2: 5, color: MockData.color2), - ], - ), - ); - - final lineChartPainter = LineChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - final mockCanvasWrapper = MockCanvasWrapper(); - when(mockCanvasWrapper.size).thenAnswer((realInvocation) => viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - - final results = >[]; - when(mockCanvasWrapper.drawRect(captureAny, captureAny)) - .thenAnswer((inv) { - results.add({ - 'rect': inv.positionalArguments[0] as Rect, - 'paint_color': (inv.positionalArguments[1] as Paint).color, - }); - }); - - lineChartPainter.drawRangeAnnotation(mockCanvasWrapper, holder); - expect(results.length, 2); - - expect(results[0]['rect'], const Rect.fromLTRB(2, 0, 4, 100)); - expect(results[0]['paint_color'], MockData.color1); - - expect(results[1]['rect'], const Rect.fromLTRB(8, 0, 10, 100)); - expect(results[1]['paint_color'], MockData.color2); - }); - - test('test 4 - both', () { - const viewSize = Size(20, 100); - - final data = LineChartData( - minY: 0, - maxY: 10, - minX: 0, - maxX: 10, - titlesData: const FlTitlesData(show: false), - rangeAnnotations: RangeAnnotations( - horizontalRangeAnnotations: [ - HorizontalRangeAnnotation(y1: 4, y2: 10, color: MockData.color1), - HorizontalRangeAnnotation(y1: 12, y2: 14, color: MockData.color2), - ], - verticalRangeAnnotations: [ - VerticalRangeAnnotation(x1: 1, x2: 2, color: MockData.color1), - VerticalRangeAnnotation(x1: 4, x2: 5, color: MockData.color2), - ], - ), - ); - - final lineChartPainter = LineChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - final mockCanvasWrapper = MockCanvasWrapper(); - when(mockCanvasWrapper.size).thenAnswer((realInvocation) => viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - lineChartPainter.drawRangeAnnotation(mockCanvasWrapper, holder); - - verify(mockCanvasWrapper.drawRect(captureAny, captureAny)).called(4); - }); - }); -} diff --git a/test/chart/line_chart/line_chart_painter_test.mocks.dart b/test/chart/line_chart/line_chart_painter_test.mocks.dart deleted file mode 100644 index 983ad17ee2..0000000000 --- a/test/chart/line_chart/line_chart_painter_test.mocks.dart +++ /dev/null @@ -1,2083 +0,0 @@ -// Mocks generated by Mockito 5.4.2 from annotations -// in fl_chart/test/chart/line_chart/line_chart_painter_test.dart. -// Do not manually edit this file. - -// ignore_for_file: no_leading_underscores_for_library_prefixes -import 'dart:typed_data' as _i5; -import 'dart:ui' as _i2; - -import 'package:fl_chart/fl_chart.dart' as _i7; -import 'package:fl_chart/src/chart/base/base_chart/base_chart_painter.dart' - as _i10; -import 'package:fl_chart/src/chart/line_chart/line_chart_painter.dart' as _i9; -import 'package:fl_chart/src/utils/canvas_wrapper.dart' as _i6; -import 'package:fl_chart/src/utils/utils.dart' as _i8; -import 'package:flutter/cupertino.dart' as _i3; -import 'package:flutter/foundation.dart' as _i4; -import 'package:mockito/mockito.dart' as _i1; - -// ignore_for_file: type=lint -// ignore_for_file: avoid_redundant_argument_values -// ignore_for_file: avoid_setters_without_getters -// ignore_for_file: comment_references -// ignore_for_file: implementation_imports -// ignore_for_file: invalid_use_of_visible_for_testing_member -// ignore_for_file: prefer_const_constructors -// ignore_for_file: unnecessary_parenthesis -// ignore_for_file: camel_case_types -// ignore_for_file: subtype_of_sealed_class - -class _FakeRect_0 extends _i1.SmartFake implements _i2.Rect { - _FakeRect_0( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); -} - -class _FakeCanvas_1 extends _i1.SmartFake implements _i2.Canvas { - _FakeCanvas_1( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); -} - -class _FakeSize_2 extends _i1.SmartFake implements _i2.Size { - _FakeSize_2( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); -} - -class _FakeWidget_3 extends _i1.SmartFake implements _i3.Widget { - _FakeWidget_3( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); - - @override - String toString({_i3.DiagnosticLevel? minLevel = _i3.DiagnosticLevel.info}) => - super.toString(); -} - -class _FakeInheritedWidget_4 extends _i1.SmartFake - implements _i3.InheritedWidget { - _FakeInheritedWidget_4( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); - - @override - String toString({_i3.DiagnosticLevel? minLevel = _i3.DiagnosticLevel.info}) => - super.toString(); -} - -class _FakeDiagnosticsNode_5 extends _i1.SmartFake - implements _i3.DiagnosticsNode { - _FakeDiagnosticsNode_5( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); - - @override - String toString({ - _i4.TextTreeConfiguration? parentConfiguration, - _i3.DiagnosticLevel? minLevel = _i3.DiagnosticLevel.info, - }) => - super.toString(); -} - -class _FakeOffset_6 extends _i1.SmartFake implements _i2.Offset { - _FakeOffset_6( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); -} - -class _FakeBorderSide_7 extends _i1.SmartFake implements _i3.BorderSide { - _FakeBorderSide_7( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); - - @override - String toString({_i3.DiagnosticLevel? minLevel = _i3.DiagnosticLevel.info}) => - super.toString(); -} - -class _FakeTextStyle_8 extends _i1.SmartFake implements _i3.TextStyle { - _FakeTextStyle_8( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); - - @override - String toString({_i3.DiagnosticLevel? minLevel = _i3.DiagnosticLevel.info}) => - super.toString(); -} - -class _FakePath_9 extends _i1.SmartFake implements _i2.Path { - _FakePath_9( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); -} - -/// A class which mocks [Canvas]. -/// -/// See the documentation for Mockito's code generation for more information. -class MockCanvas extends _i1.Mock implements _i2.Canvas { - MockCanvas() { - _i1.throwOnMissingStub(this); - } - - @override - void save() => super.noSuchMethod( - Invocation.method( - #save, - [], - ), - returnValueForMissingStub: null, - ); - - @override - void saveLayer( - _i2.Rect? bounds, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #saveLayer, - [ - bounds, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void restore() => super.noSuchMethod( - Invocation.method( - #restore, - [], - ), - returnValueForMissingStub: null, - ); - - @override - void restoreToCount(int? count) => super.noSuchMethod( - Invocation.method( - #restoreToCount, - [count], - ), - returnValueForMissingStub: null, - ); - - @override - int getSaveCount() => (super.noSuchMethod( - Invocation.method( - #getSaveCount, - [], - ), - returnValue: 0, - ) as int); - - @override - void translate( - double? dx, - double? dy, - ) => - super.noSuchMethod( - Invocation.method( - #translate, - [ - dx, - dy, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void scale( - double? sx, [ - double? sy, - ]) => - super.noSuchMethod( - Invocation.method( - #scale, - [ - sx, - sy, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void rotate(double? radians) => super.noSuchMethod( - Invocation.method( - #rotate, - [radians], - ), - returnValueForMissingStub: null, - ); - - @override - void skew( - double? sx, - double? sy, - ) => - super.noSuchMethod( - Invocation.method( - #skew, - [ - sx, - sy, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void transform(_i5.Float64List? matrix4) => super.noSuchMethod( - Invocation.method( - #transform, - [matrix4], - ), - returnValueForMissingStub: null, - ); - - @override - _i5.Float64List getTransform() => (super.noSuchMethod( - Invocation.method( - #getTransform, - [], - ), - returnValue: _i5.Float64List(0), - ) as _i5.Float64List); - - @override - void clipRect( - _i2.Rect? rect, { - _i2.ClipOp? clipOp = _i2.ClipOp.intersect, - bool? doAntiAlias = true, - }) => - super.noSuchMethod( - Invocation.method( - #clipRect, - [rect], - { - #clipOp: clipOp, - #doAntiAlias: doAntiAlias, - }, - ), - returnValueForMissingStub: null, - ); - - @override - void clipRRect( - _i2.RRect? rrect, { - bool? doAntiAlias = true, - }) => - super.noSuchMethod( - Invocation.method( - #clipRRect, - [rrect], - {#doAntiAlias: doAntiAlias}, - ), - returnValueForMissingStub: null, - ); - - @override - void clipPath( - _i2.Path? path, { - bool? doAntiAlias = true, - }) => - super.noSuchMethod( - Invocation.method( - #clipPath, - [path], - {#doAntiAlias: doAntiAlias}, - ), - returnValueForMissingStub: null, - ); - - @override - _i2.Rect getLocalClipBounds() => (super.noSuchMethod( - Invocation.method( - #getLocalClipBounds, - [], - ), - returnValue: _FakeRect_0( - this, - Invocation.method( - #getLocalClipBounds, - [], - ), - ), - ) as _i2.Rect); - - @override - _i2.Rect getDestinationClipBounds() => (super.noSuchMethod( - Invocation.method( - #getDestinationClipBounds, - [], - ), - returnValue: _FakeRect_0( - this, - Invocation.method( - #getDestinationClipBounds, - [], - ), - ), - ) as _i2.Rect); - - @override - void drawColor( - _i2.Color? color, - _i2.BlendMode? blendMode, - ) => - super.noSuchMethod( - Invocation.method( - #drawColor, - [ - color, - blendMode, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawLine( - _i2.Offset? p1, - _i2.Offset? p2, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawLine, - [ - p1, - p2, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawPaint(_i2.Paint? paint) => super.noSuchMethod( - Invocation.method( - #drawPaint, - [paint], - ), - returnValueForMissingStub: null, - ); - - @override - void drawRect( - _i2.Rect? rect, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawRect, - [ - rect, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawRRect( - _i2.RRect? rrect, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawRRect, - [ - rrect, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawDRRect( - _i2.RRect? outer, - _i2.RRect? inner, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawDRRect, - [ - outer, - inner, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawOval( - _i2.Rect? rect, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawOval, - [ - rect, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawCircle( - _i2.Offset? c, - double? radius, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawCircle, - [ - c, - radius, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawArc( - _i2.Rect? rect, - double? startAngle, - double? sweepAngle, - bool? useCenter, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawArc, - [ - rect, - startAngle, - sweepAngle, - useCenter, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawPath( - _i2.Path? path, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawPath, - [ - path, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawImage( - _i2.Image? image, - _i2.Offset? offset, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawImage, - [ - image, - offset, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawImageRect( - _i2.Image? image, - _i2.Rect? src, - _i2.Rect? dst, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawImageRect, - [ - image, - src, - dst, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawImageNine( - _i2.Image? image, - _i2.Rect? center, - _i2.Rect? dst, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawImageNine, - [ - image, - center, - dst, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawPicture(_i2.Picture? picture) => super.noSuchMethod( - Invocation.method( - #drawPicture, - [picture], - ), - returnValueForMissingStub: null, - ); - - @override - void drawParagraph( - _i2.Paragraph? paragraph, - _i2.Offset? offset, - ) => - super.noSuchMethod( - Invocation.method( - #drawParagraph, - [ - paragraph, - offset, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawPoints( - _i2.PointMode? pointMode, - List<_i2.Offset>? points, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawPoints, - [ - pointMode, - points, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawRawPoints( - _i2.PointMode? pointMode, - _i5.Float32List? points, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawRawPoints, - [ - pointMode, - points, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawVertices( - _i2.Vertices? vertices, - _i2.BlendMode? blendMode, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawVertices, - [ - vertices, - blendMode, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawAtlas( - _i2.Image? atlas, - List<_i2.RSTransform>? transforms, - List<_i2.Rect>? rects, - List<_i2.Color>? colors, - _i2.BlendMode? blendMode, - _i2.Rect? cullRect, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawAtlas, - [ - atlas, - transforms, - rects, - colors, - blendMode, - cullRect, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawRawAtlas( - _i2.Image? atlas, - _i5.Float32List? rstTransforms, - _i5.Float32List? rects, - _i5.Int32List? colors, - _i2.BlendMode? blendMode, - _i2.Rect? cullRect, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawRawAtlas, - [ - atlas, - rstTransforms, - rects, - colors, - blendMode, - cullRect, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawShadow( - _i2.Path? path, - _i2.Color? color, - double? elevation, - bool? transparentOccluder, - ) => - super.noSuchMethod( - Invocation.method( - #drawShadow, - [ - path, - color, - elevation, - transparentOccluder, - ], - ), - returnValueForMissingStub: null, - ); -} - -/// A class which mocks [CanvasWrapper]. -/// -/// See the documentation for Mockito's code generation for more information. -class MockCanvasWrapper extends _i1.Mock implements _i6.CanvasWrapper { - MockCanvasWrapper() { - _i1.throwOnMissingStub(this); - } - - @override - _i2.Canvas get canvas => (super.noSuchMethod( - Invocation.getter(#canvas), - returnValue: _FakeCanvas_1( - this, - Invocation.getter(#canvas), - ), - ) as _i2.Canvas); - - @override - _i2.Size get size => (super.noSuchMethod( - Invocation.getter(#size), - returnValue: _FakeSize_2( - this, - Invocation.getter(#size), - ), - ) as _i2.Size); - - @override - void drawRRect( - _i2.RRect? rrect, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawRRect, - [ - rrect, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void save() => super.noSuchMethod( - Invocation.method( - #save, - [], - ), - returnValueForMissingStub: null, - ); - - @override - void restore() => super.noSuchMethod( - Invocation.method( - #restore, - [], - ), - returnValueForMissingStub: null, - ); - - @override - void clipRect( - _i2.Rect? rect, { - _i2.ClipOp? clipOp = _i2.ClipOp.intersect, - bool? doAntiAlias = true, - }) => - super.noSuchMethod( - Invocation.method( - #clipRect, - [rect], - { - #clipOp: clipOp, - #doAntiAlias: doAntiAlias, - }, - ), - returnValueForMissingStub: null, - ); - - @override - void translate( - double? dx, - double? dy, - ) => - super.noSuchMethod( - Invocation.method( - #translate, - [ - dx, - dy, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void rotate(double? radius) => super.noSuchMethod( - Invocation.method( - #rotate, - [radius], - ), - returnValueForMissingStub: null, - ); - - @override - void drawPath( - _i2.Path? path, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawPath, - [ - path, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void saveLayer( - _i2.Rect? bounds, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #saveLayer, - [ - bounds, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawPicture(_i2.Picture? picture) => super.noSuchMethod( - Invocation.method( - #drawPicture, - [picture], - ), - returnValueForMissingStub: null, - ); - - @override - void drawImage( - _i2.Image? image, - _i2.Offset? offset, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawImage, - [ - image, - offset, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void clipPath( - _i2.Path? path, { - bool? doAntiAlias = true, - }) => - super.noSuchMethod( - Invocation.method( - #clipPath, - [path], - {#doAntiAlias: doAntiAlias}, - ), - returnValueForMissingStub: null, - ); - - @override - void drawRect( - _i2.Rect? rect, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawRect, - [ - rect, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawLine( - _i2.Offset? p1, - _i2.Offset? p2, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawLine, - [ - p1, - p2, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawCircle( - _i2.Offset? center, - double? radius, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawCircle, - [ - center, - radius, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawArc( - _i2.Rect? rect, - double? startAngle, - double? sweepAngle, - bool? useCenter, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawArc, - [ - rect, - startAngle, - sweepAngle, - useCenter, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawText( - _i3.TextPainter? tp, - _i2.Offset? offset, [ - double? rotateAngle, - ]) => - super.noSuchMethod( - Invocation.method( - #drawText, - [ - tp, - offset, - rotateAngle, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawDot( - _i7.FlDotPainter? painter, - _i7.FlSpot? spot, - _i2.Offset? offset, - ) => - super.noSuchMethod( - Invocation.method( - #drawDot, - [ - painter, - spot, - offset, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawRotated({ - required _i2.Size? size, - _i2.Offset? rotationOffset = _i2.Offset.zero, - _i2.Offset? drawOffset = _i2.Offset.zero, - required double? angle, - required _i6.DrawCallback? drawCallback, - }) => - super.noSuchMethod( - Invocation.method( - #drawRotated, - [], - { - #size: size, - #rotationOffset: rotationOffset, - #drawOffset: drawOffset, - #angle: angle, - #drawCallback: drawCallback, - }, - ), - returnValueForMissingStub: null, - ); - - @override - void drawDashedLine( - _i2.Offset? from, - _i2.Offset? to, - _i2.Paint? painter, - List? dashArray, - ) => - super.noSuchMethod( - Invocation.method( - #drawDashedLine, - [ - from, - to, - painter, - dashArray, - ], - ), - returnValueForMissingStub: null, - ); -} - -/// A class which mocks [BuildContext]. -/// -/// See the documentation for Mockito's code generation for more information. -class MockBuildContext extends _i1.Mock implements _i3.BuildContext { - MockBuildContext() { - _i1.throwOnMissingStub(this); - } - - @override - _i3.Widget get widget => (super.noSuchMethod( - Invocation.getter(#widget), - returnValue: _FakeWidget_3( - this, - Invocation.getter(#widget), - ), - ) as _i3.Widget); - - @override - bool get mounted => (super.noSuchMethod( - Invocation.getter(#mounted), - returnValue: false, - ) as bool); - - @override - bool get debugDoingBuild => (super.noSuchMethod( - Invocation.getter(#debugDoingBuild), - returnValue: false, - ) as bool); - - @override - _i3.InheritedWidget dependOnInheritedElement( - _i3.InheritedElement? ancestor, { - Object? aspect, - }) => - (super.noSuchMethod( - Invocation.method( - #dependOnInheritedElement, - [ancestor], - {#aspect: aspect}, - ), - returnValue: _FakeInheritedWidget_4( - this, - Invocation.method( - #dependOnInheritedElement, - [ancestor], - {#aspect: aspect}, - ), - ), - ) as _i3.InheritedWidget); - - @override - void visitAncestorElements(_i3.ConditionalElementVisitor? visitor) => - super.noSuchMethod( - Invocation.method( - #visitAncestorElements, - [visitor], - ), - returnValueForMissingStub: null, - ); - - @override - void visitChildElements(_i3.ElementVisitor? visitor) => super.noSuchMethod( - Invocation.method( - #visitChildElements, - [visitor], - ), - returnValueForMissingStub: null, - ); - - @override - void dispatchNotification(_i3.Notification? notification) => - super.noSuchMethod( - Invocation.method( - #dispatchNotification, - [notification], - ), - returnValueForMissingStub: null, - ); - - @override - _i3.DiagnosticsNode describeElement( - String? name, { - _i4.DiagnosticsTreeStyle? style = _i4.DiagnosticsTreeStyle.errorProperty, - }) => - (super.noSuchMethod( - Invocation.method( - #describeElement, - [name], - {#style: style}, - ), - returnValue: _FakeDiagnosticsNode_5( - this, - Invocation.method( - #describeElement, - [name], - {#style: style}, - ), - ), - ) as _i3.DiagnosticsNode); - - @override - _i3.DiagnosticsNode describeWidget( - String? name, { - _i4.DiagnosticsTreeStyle? style = _i4.DiagnosticsTreeStyle.errorProperty, - }) => - (super.noSuchMethod( - Invocation.method( - #describeWidget, - [name], - {#style: style}, - ), - returnValue: _FakeDiagnosticsNode_5( - this, - Invocation.method( - #describeWidget, - [name], - {#style: style}, - ), - ), - ) as _i3.DiagnosticsNode); - - @override - List<_i3.DiagnosticsNode> describeMissingAncestor( - {required Type? expectedAncestorType}) => - (super.noSuchMethod( - Invocation.method( - #describeMissingAncestor, - [], - {#expectedAncestorType: expectedAncestorType}, - ), - returnValue: <_i3.DiagnosticsNode>[], - ) as List<_i3.DiagnosticsNode>); - - @override - _i3.DiagnosticsNode describeOwnershipChain(String? name) => - (super.noSuchMethod( - Invocation.method( - #describeOwnershipChain, - [name], - ), - returnValue: _FakeDiagnosticsNode_5( - this, - Invocation.method( - #describeOwnershipChain, - [name], - ), - ), - ) as _i3.DiagnosticsNode); -} - -/// A class which mocks [Utils]. -/// -/// See the documentation for Mockito's code generation for more information. -class MockUtils extends _i1.Mock implements _i8.Utils { - MockUtils() { - _i1.throwOnMissingStub(this); - } - - @override - double radians(double? degrees) => (super.noSuchMethod( - Invocation.method( - #radians, - [degrees], - ), - returnValue: 0.0, - ) as double); - - @override - double degrees(double? radians) => (super.noSuchMethod( - Invocation.method( - #degrees, - [radians], - ), - returnValue: 0.0, - ) as double); - - @override - _i2.Size getDefaultSize(_i2.Size? screenSize) => (super.noSuchMethod( - Invocation.method( - #getDefaultSize, - [screenSize], - ), - returnValue: _FakeSize_2( - this, - Invocation.method( - #getDefaultSize, - [screenSize], - ), - ), - ) as _i2.Size); - - @override - double translateRotatedPosition( - double? size, - double? degree, - ) => - (super.noSuchMethod( - Invocation.method( - #translateRotatedPosition, - [ - size, - degree, - ], - ), - returnValue: 0.0, - ) as double); - - @override - _i2.Offset calculateRotationOffset( - _i2.Size? size, - double? degree, - ) => - (super.noSuchMethod( - Invocation.method( - #calculateRotationOffset, - [ - size, - degree, - ], - ), - returnValue: _FakeOffset_6( - this, - Invocation.method( - #calculateRotationOffset, - [ - size, - degree, - ], - ), - ), - ) as _i2.Offset); - - @override - _i3.BorderRadius? normalizeBorderRadius( - _i3.BorderRadius? borderRadius, - double? width, - ) => - (super.noSuchMethod(Invocation.method( - #normalizeBorderRadius, - [ - borderRadius, - width, - ], - )) as _i3.BorderRadius?); - - @override - _i3.BorderSide normalizeBorderSide( - _i3.BorderSide? borderSide, - double? width, - ) => - (super.noSuchMethod( - Invocation.method( - #normalizeBorderSide, - [ - borderSide, - width, - ], - ), - returnValue: _FakeBorderSide_7( - this, - Invocation.method( - #normalizeBorderSide, - [ - borderSide, - width, - ], - ), - ), - ) as _i3.BorderSide); - - @override - double getEfficientInterval( - double? axisViewSize, - double? diffInAxis, { - double? pixelPerInterval = 40.0, - }) => - (super.noSuchMethod( - Invocation.method( - #getEfficientInterval, - [ - axisViewSize, - diffInAxis, - ], - {#pixelPerInterval: pixelPerInterval}, - ), - returnValue: 0.0, - ) as double); - - @override - double roundInterval(double? input) => (super.noSuchMethod( - Invocation.method( - #roundInterval, - [input], - ), - returnValue: 0.0, - ) as double); - - @override - int getFractionDigits(double? value) => (super.noSuchMethod( - Invocation.method( - #getFractionDigits, - [value], - ), - returnValue: 0, - ) as int); - - @override - String formatNumber( - double? axisMin, - double? axisMax, - double? axisValue, - ) => - (super.noSuchMethod( - Invocation.method( - #formatNumber, - [ - axisMin, - axisMax, - axisValue, - ], - ), - returnValue: '', - ) as String); - - @override - _i3.TextStyle getThemeAwareTextStyle( - _i3.BuildContext? context, - _i3.TextStyle? providedStyle, - ) => - (super.noSuchMethod( - Invocation.method( - #getThemeAwareTextStyle, - [ - context, - providedStyle, - ], - ), - returnValue: _FakeTextStyle_8( - this, - Invocation.method( - #getThemeAwareTextStyle, - [ - context, - providedStyle, - ], - ), - ), - ) as _i3.TextStyle); - - @override - double getBestInitialIntervalValue( - double? min, - double? max, - double? interval, { - double? baseline = 0.0, - }) => - (super.noSuchMethod( - Invocation.method( - #getBestInitialIntervalValue, - [ - min, - max, - interval, - ], - {#baseline: baseline}, - ), - returnValue: 0.0, - ) as double); - - @override - double convertRadiusToSigma(double? radius) => (super.noSuchMethod( - Invocation.method( - #convertRadiusToSigma, - [radius], - ), - returnValue: 0.0, - ) as double); -} - -/// A class which mocks [LineChartPainter]. -/// -/// See the documentation for Mockito's code generation for more information. -class MockLineChartPainter extends _i1.Mock implements _i9.LineChartPainter { - MockLineChartPainter() { - _i1.throwOnMissingStub(this); - } - - @override - void paint( - _i3.BuildContext? context, - _i6.CanvasWrapper? canvasWrapper, - _i10.PaintHolder<_i7.LineChartData>? holder, - ) => - super.noSuchMethod( - Invocation.method( - #paint, - [ - context, - canvasWrapper, - holder, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void clipToBorder( - _i6.CanvasWrapper? canvasWrapper, - _i10.PaintHolder<_i7.LineChartData>? holder, - ) => - super.noSuchMethod( - Invocation.method( - #clipToBorder, - [ - canvasWrapper, - holder, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawBarLine( - _i6.CanvasWrapper? canvasWrapper, - _i7.LineChartBarData? barData, - _i10.PaintHolder<_i7.LineChartData>? holder, - ) => - super.noSuchMethod( - Invocation.method( - #drawBarLine, - [ - canvasWrapper, - barData, - holder, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawBetweenBarsArea( - _i6.CanvasWrapper? canvasWrapper, - _i7.LineChartData? data, - _i7.BetweenBarsData? betweenBarsData, - _i10.PaintHolder<_i7.LineChartData>? holder, - ) => - super.noSuchMethod( - Invocation.method( - #drawBetweenBarsArea, - [ - canvasWrapper, - data, - betweenBarsData, - holder, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawDots( - _i6.CanvasWrapper? canvasWrapper, - _i7.LineChartBarData? barData, - _i10.PaintHolder<_i7.LineChartData>? holder, - ) => - super.noSuchMethod( - Invocation.method( - #drawDots, - [ - canvasWrapper, - barData, - holder, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawTouchedSpotsIndicator( - _i6.CanvasWrapper? canvasWrapper, - List<_i9.LineIndexDrawingInfo>? lineIndexDrawingInfo, - _i10.PaintHolder<_i7.LineChartData>? holder, - ) => - super.noSuchMethod( - Invocation.method( - #drawTouchedSpotsIndicator, - [ - canvasWrapper, - lineIndexDrawingInfo, - holder, - ], - ), - returnValueForMissingStub: null, - ); - - @override - _i2.Path generateBarPath( - _i2.Size? viewSize, - _i7.LineChartBarData? barData, - List<_i7.FlSpot>? barSpots, - _i10.PaintHolder<_i7.LineChartData>? holder, { - _i2.Path? appendToPath, - }) => - (super.noSuchMethod( - Invocation.method( - #generateBarPath, - [ - viewSize, - barData, - barSpots, - holder, - ], - {#appendToPath: appendToPath}, - ), - returnValue: _FakePath_9( - this, - Invocation.method( - #generateBarPath, - [ - viewSize, - barData, - barSpots, - holder, - ], - {#appendToPath: appendToPath}, - ), - ), - ) as _i2.Path); - - @override - _i2.Path generateNormalBarPath( - _i2.Size? viewSize, - _i7.LineChartBarData? barData, - List<_i7.FlSpot>? barSpots, - _i10.PaintHolder<_i7.LineChartData>? holder, { - _i2.Path? appendToPath, - }) => - (super.noSuchMethod( - Invocation.method( - #generateNormalBarPath, - [ - viewSize, - barData, - barSpots, - holder, - ], - {#appendToPath: appendToPath}, - ), - returnValue: _FakePath_9( - this, - Invocation.method( - #generateNormalBarPath, - [ - viewSize, - barData, - barSpots, - holder, - ], - {#appendToPath: appendToPath}, - ), - ), - ) as _i2.Path); - - @override - _i2.Path generateStepBarPath( - _i2.Size? viewSize, - _i7.LineChartBarData? barData, - List<_i7.FlSpot>? barSpots, - _i10.PaintHolder<_i7.LineChartData>? holder, { - _i2.Path? appendToPath, - }) => - (super.noSuchMethod( - Invocation.method( - #generateStepBarPath, - [ - viewSize, - barData, - barSpots, - holder, - ], - {#appendToPath: appendToPath}, - ), - returnValue: _FakePath_9( - this, - Invocation.method( - #generateStepBarPath, - [ - viewSize, - barData, - barSpots, - holder, - ], - {#appendToPath: appendToPath}, - ), - ), - ) as _i2.Path); - - @override - _i2.Path generateBelowBarPath( - _i2.Size? viewSize, - _i7.LineChartBarData? barData, - _i2.Path? barPath, - List<_i7.FlSpot>? barSpots, - _i10.PaintHolder<_i7.LineChartData>? holder, { - bool? fillCompletely = false, - }) => - (super.noSuchMethod( - Invocation.method( - #generateBelowBarPath, - [ - viewSize, - barData, - barPath, - barSpots, - holder, - ], - {#fillCompletely: fillCompletely}, - ), - returnValue: _FakePath_9( - this, - Invocation.method( - #generateBelowBarPath, - [ - viewSize, - barData, - barPath, - barSpots, - holder, - ], - {#fillCompletely: fillCompletely}, - ), - ), - ) as _i2.Path); - - @override - _i2.Path generateAboveBarPath( - _i2.Size? viewSize, - _i7.LineChartBarData? barData, - _i2.Path? barPath, - List<_i7.FlSpot>? barSpots, - _i10.PaintHolder<_i7.LineChartData>? holder, { - bool? fillCompletely = false, - }) => - (super.noSuchMethod( - Invocation.method( - #generateAboveBarPath, - [ - viewSize, - barData, - barPath, - barSpots, - holder, - ], - {#fillCompletely: fillCompletely}, - ), - returnValue: _FakePath_9( - this, - Invocation.method( - #generateAboveBarPath, - [ - viewSize, - barData, - barPath, - barSpots, - holder, - ], - {#fillCompletely: fillCompletely}, - ), - ), - ) as _i2.Path); - - @override - void drawBelowBar( - _i6.CanvasWrapper? canvasWrapper, - _i2.Path? belowBarPath, - _i2.Path? filledAboveBarPath, - _i10.PaintHolder<_i7.LineChartData>? holder, - _i7.LineChartBarData? barData, - ) => - super.noSuchMethod( - Invocation.method( - #drawBelowBar, - [ - canvasWrapper, - belowBarPath, - filledAboveBarPath, - holder, - barData, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawAboveBar( - _i6.CanvasWrapper? canvasWrapper, - _i2.Path? aboveBarPath, - _i2.Path? filledBelowBarPath, - _i10.PaintHolder<_i7.LineChartData>? holder, - _i7.LineChartBarData? barData, - ) => - super.noSuchMethod( - Invocation.method( - #drawAboveBar, - [ - canvasWrapper, - aboveBarPath, - filledBelowBarPath, - holder, - barData, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawBetweenBar( - _i6.CanvasWrapper? canvasWrapper, - _i2.Path? barPath, - _i7.BetweenBarsData? betweenBarsData, - _i2.Rect? aroundRect, - _i10.PaintHolder<_i7.LineChartData>? holder, - ) => - super.noSuchMethod( - Invocation.method( - #drawBetweenBar, - [ - canvasWrapper, - barPath, - betweenBarsData, - aroundRect, - holder, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawBarShadow( - _i6.CanvasWrapper? canvasWrapper, - _i2.Path? barPath, - _i7.LineChartBarData? barData, - ) => - super.noSuchMethod( - Invocation.method( - #drawBarShadow, - [ - canvasWrapper, - barPath, - barData, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawBar( - _i6.CanvasWrapper? canvasWrapper, - _i2.Path? barPath, - _i7.LineChartBarData? barData, - _i10.PaintHolder<_i7.LineChartData>? holder, - ) => - super.noSuchMethod( - Invocation.method( - #drawBar, - [ - canvasWrapper, - barPath, - barData, - holder, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawTouchTooltip( - _i3.BuildContext? context, - _i6.CanvasWrapper? canvasWrapper, - _i7.LineTouchTooltipData? tooltipData, - _i7.FlSpot? showOnSpot, - _i7.ShowingTooltipIndicators? showingTooltipSpots, - _i10.PaintHolder<_i7.LineChartData>? holder, - ) => - super.noSuchMethod( - Invocation.method( - #drawTouchTooltip, - [ - context, - canvasWrapper, - tooltipData, - showOnSpot, - showingTooltipSpots, - holder, - ], - ), - returnValueForMissingStub: null, - ); - - @override - double getBarLineXLength( - _i7.LineChartBarData? barData, - _i2.Size? chartUsableSize, - _i10.PaintHolder<_i7.LineChartData>? holder, - ) => - (super.noSuchMethod( - Invocation.method( - #getBarLineXLength, - [ - barData, - chartUsableSize, - holder, - ], - ), - returnValue: 0.0, - ) as double); - - @override - List<_i7.TouchLineBarSpot>? handleTouch( - _i2.Offset? localPosition, - _i2.Size? size, - _i10.PaintHolder<_i7.LineChartData>? holder, - ) => - (super.noSuchMethod(Invocation.method( - #handleTouch, - [ - localPosition, - size, - holder, - ], - )) as List<_i7.TouchLineBarSpot>?); - - @override - _i7.TouchLineBarSpot? getNearestTouchedSpot( - _i2.Size? viewSize, - _i2.Offset? touchedPoint, - _i7.LineChartBarData? barData, - int? barDataPosition, - _i10.PaintHolder<_i7.LineChartData>? holder, - ) => - (super.noSuchMethod(Invocation.method( - #getNearestTouchedSpot, - [ - viewSize, - touchedPoint, - barData, - barDataPosition, - holder, - ], - )) as _i7.TouchLineBarSpot?); - - @override - void drawGrid( - _i6.CanvasWrapper? canvasWrapper, - _i10.PaintHolder<_i7.LineChartData>? holder, - ) => - super.noSuchMethod( - Invocation.method( - #drawGrid, - [ - canvasWrapper, - holder, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawBackground( - _i6.CanvasWrapper? canvasWrapper, - _i10.PaintHolder<_i7.LineChartData>? holder, - ) => - super.noSuchMethod( - Invocation.method( - #drawBackground, - [ - canvasWrapper, - holder, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawRangeAnnotation( - _i6.CanvasWrapper? canvasWrapper, - _i10.PaintHolder<_i7.LineChartData>? holder, - ) => - super.noSuchMethod( - Invocation.method( - #drawRangeAnnotation, - [ - canvasWrapper, - holder, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawExtraLines( - _i3.BuildContext? context, - _i6.CanvasWrapper? canvasWrapper, - _i10.PaintHolder<_i7.LineChartData>? holder, - ) => - super.noSuchMethod( - Invocation.method( - #drawExtraLines, - [ - context, - canvasWrapper, - holder, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawHorizontalLines( - _i3.BuildContext? context, - _i6.CanvasWrapper? canvasWrapper, - _i10.PaintHolder<_i7.LineChartData>? holder, - _i2.Size? viewSize, - ) => - super.noSuchMethod( - Invocation.method( - #drawHorizontalLines, - [ - context, - canvasWrapper, - holder, - viewSize, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawVerticalLines( - _i3.BuildContext? context, - _i6.CanvasWrapper? canvasWrapper, - _i10.PaintHolder<_i7.LineChartData>? holder, - _i2.Size? viewSize, - ) => - super.noSuchMethod( - Invocation.method( - #drawVerticalLines, - [ - context, - canvasWrapper, - holder, - viewSize, - ], - ), - returnValueForMissingStub: null, - ); - - @override - double getPixelX( - double? spotX, - _i2.Size? viewSize, - _i10.PaintHolder<_i7.LineChartData>? holder, - ) => - (super.noSuchMethod( - Invocation.method( - #getPixelX, - [ - spotX, - viewSize, - holder, - ], - ), - returnValue: 0.0, - ) as double); - - @override - double getPixelY( - double? spotY, - _i2.Size? viewSize, - _i10.PaintHolder<_i7.LineChartData>? holder, - ) => - (super.noSuchMethod( - Invocation.method( - #getPixelY, - [ - spotY, - viewSize, - holder, - ], - ), - returnValue: 0.0, - ) as double); - - @override - double getTooltipLeft( - double? dx, - double? tooltipWidth, - _i7.FLHorizontalAlignment? tooltipHorizontalAlignment, - double? tooltipHorizontalOffset, - ) => - (super.noSuchMethod( - Invocation.method( - #getTooltipLeft, - [ - dx, - tooltipWidth, - tooltipHorizontalAlignment, - tooltipHorizontalOffset, - ], - ), - returnValue: 0.0, - ) as double); -} diff --git a/test/chart/line_chart/line_chart_renderer_test.dart b/test/chart/line_chart/line_chart_renderer_test.dart deleted file mode 100644 index dde9635eac..0000000000 --- a/test/chart/line_chart/line_chart_renderer_test.dart +++ /dev/null @@ -1,127 +0,0 @@ -import 'package:fl_chart/fl_chart.dart'; -import 'package:fl_chart/src/chart/base/base_chart/base_chart_painter.dart'; -import 'package:fl_chart/src/chart/line_chart/line_chart_painter.dart'; -import 'package:fl_chart/src/chart/line_chart/line_chart_renderer.dart'; -import 'package:fl_chart/src/utils/canvas_wrapper.dart'; -import 'package:flutter/cupertino.dart'; -import 'package:flutter_test/flutter_test.dart'; -import 'package:mockito/annotations.dart'; -import 'package:mockito/mockito.dart'; - -import '../data_pool.dart'; -import 'line_chart_renderer_test.mocks.dart'; - -@GenerateMocks([Canvas, PaintingContext, BuildContext, LineChartPainter]) -void main() { - group('LineChartRenderer', () { - final data = LineChartData( - titlesData: const FlTitlesData( - leftTitles: AxisTitles( - sideTitles: SideTitles(reservedSize: 20, showTitles: true), - ), - rightTitles: AxisTitles( - sideTitles: SideTitles(reservedSize: 464, showTitles: true), - ), - topTitles: AxisTitles(), - bottomTitles: AxisTitles(), - ), - ); - - final targetData = LineChartData( - titlesData: const FlTitlesData( - leftTitles: AxisTitles( - sideTitles: SideTitles(reservedSize: 8, showTitles: true), - ), - rightTitles: AxisTitles( - sideTitles: SideTitles(reservedSize: 20, showTitles: true), - ), - topTitles: AxisTitles(), - bottomTitles: AxisTitles(), - ), - ); - - const textScaler = TextScaler.linear(4); - - final mockBuildContext = MockBuildContext(); - final renderLineChart = RenderLineChart( - mockBuildContext, - data, - targetData, - textScaler, - ); - - final mockPainter = MockLineChartPainter(); - final mockPaintingContext = MockPaintingContext(); - final mockCanvas = MockCanvas(); - const mockSize = Size(44, 44); - when(mockPaintingContext.canvas).thenAnswer((realInvocation) => mockCanvas); - renderLineChart - ..mockTestSize = mockSize - ..painter = mockPainter; - - test('test 1 correct data set', () { - expect(renderLineChart.data == data, true); - expect(renderLineChart.data == targetData, false); - expect(renderLineChart.targetData == targetData, true); - expect(renderLineChart.textScaler == textScaler, true); - expect(renderLineChart.paintHolder.data == data, true); - expect(renderLineChart.paintHolder.targetData == targetData, true); - expect(renderLineChart.paintHolder.textScaler == textScaler, true); - }); - - test('test 2 check paint function', () { - renderLineChart.paint(mockPaintingContext, const Offset(10, 10)); - verify(mockCanvas.save()).called(1); - verify(mockCanvas.translate(10, 10)).called(1); - final result = verify(mockPainter.paint(any, captureAny, captureAny)); - expect(result.callCount, 1); - - final canvasWrapper = result.captured[0] as CanvasWrapper; - expect(canvasWrapper.size, const Size(44, 44)); - expect(canvasWrapper.canvas, mockCanvas); - - final paintHolder = result.captured[1] as PaintHolder; - expect(paintHolder.data, data); - expect(paintHolder.targetData, targetData); - expect(paintHolder.textScaler, textScaler); - - verify(mockCanvas.restore()).called(1); - }); - - test('test 3 check getResponseAtLocation function', () { - final results = >[]; - when(mockPainter.handleTouch(captureAny, captureAny, captureAny)) - .thenAnswer((inv) { - results.add({ - 'local_position': inv.positionalArguments[0] as Offset, - 'size': inv.positionalArguments[1] as Size, - 'paint_holder': inv.positionalArguments[2] as PaintHolder, - }); - return MockData.lineTouchResponse1.lineBarSpots; - }); - final touchResponse = - renderLineChart.getResponseAtLocation(MockData.offset1); - expect( - touchResponse.lineBarSpots, - MockData.lineTouchResponse1.lineBarSpots, - ); - expect(results[0]['local_position'] as Offset, MockData.offset1); - expect(results[0]['size'] as Size, mockSize); - final paintHolder = results[0]['paint_holder'] as PaintHolder; - expect(paintHolder.data, data); - expect(paintHolder.targetData, targetData); - expect(paintHolder.textScaler, textScaler); - }); - - test('test 4 check setters', () { - renderLineChart - ..data = targetData - ..targetData = data - ..textScaler = const TextScaler.linear(22); - - expect(renderLineChart.data, targetData); - expect(renderLineChart.targetData, data); - expect(renderLineChart.textScaler, const TextScaler.linear(22)); - }); - }); -} diff --git a/test/chart/line_chart/line_chart_renderer_test.mocks.dart b/test/chart/line_chart/line_chart_renderer_test.mocks.dart deleted file mode 100644 index ac69caab32..0000000000 --- a/test/chart/line_chart/line_chart_renderer_test.mocks.dart +++ /dev/null @@ -1,1876 +0,0 @@ -// Mocks generated by Mockito 5.4.2 from annotations -// in fl_chart/test/chart/line_chart/line_chart_renderer_test.dart. -// Do not manually edit this file. - -// ignore_for_file: no_leading_underscores_for_library_prefixes -import 'dart:typed_data' as _i7; -import 'dart:ui' as _i2; - -import 'package:fl_chart/fl_chart.dart' as _i13; -import 'package:fl_chart/src/chart/base/base_chart/base_chart_painter.dart' - as _i12; -import 'package:fl_chart/src/chart/line_chart/line_chart_painter.dart' as _i10; -import 'package:fl_chart/src/utils/canvas_wrapper.dart' as _i11; -import 'package:flutter/foundation.dart' as _i5; -import 'package:flutter/gestures.dart' as _i8; -import 'package:flutter/material.dart' as _i6; -import 'package:flutter/rendering.dart' as _i3; -import 'package:flutter/src/rendering/layer.dart' as _i4; -import 'package:flutter/src/widgets/notification_listener.dart' as _i9; -import 'package:mockito/mockito.dart' as _i1; - -// ignore_for_file: type=lint -// ignore_for_file: avoid_redundant_argument_values -// ignore_for_file: avoid_setters_without_getters -// ignore_for_file: comment_references -// ignore_for_file: implementation_imports -// ignore_for_file: invalid_use_of_visible_for_testing_member -// ignore_for_file: prefer_const_constructors -// ignore_for_file: unnecessary_parenthesis -// ignore_for_file: camel_case_types -// ignore_for_file: subtype_of_sealed_class - -class _FakeRect_0 extends _i1.SmartFake implements _i2.Rect { - _FakeRect_0( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); -} - -class _FakeCanvas_1 extends _i1.SmartFake implements _i2.Canvas { - _FakeCanvas_1( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); -} - -class _FakePaintingContext_2 extends _i1.SmartFake - implements _i3.PaintingContext { - _FakePaintingContext_2( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); -} - -class _FakeColorFilterLayer_3 extends _i1.SmartFake - implements _i4.ColorFilterLayer { - _FakeColorFilterLayer_3( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); - - @override - String toString({_i5.DiagnosticLevel? minLevel = _i5.DiagnosticLevel.info}) => - super.toString(); -} - -class _FakeOpacityLayer_4 extends _i1.SmartFake implements _i4.OpacityLayer { - _FakeOpacityLayer_4( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); - - @override - String toString({_i5.DiagnosticLevel? minLevel = _i5.DiagnosticLevel.info}) => - super.toString(); -} - -class _FakeWidget_5 extends _i1.SmartFake implements _i6.Widget { - _FakeWidget_5( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); - - @override - String toString({_i5.DiagnosticLevel? minLevel = _i5.DiagnosticLevel.info}) => - super.toString(); -} - -class _FakeInheritedWidget_6 extends _i1.SmartFake - implements _i6.InheritedWidget { - _FakeInheritedWidget_6( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); - - @override - String toString({_i5.DiagnosticLevel? minLevel = _i5.DiagnosticLevel.info}) => - super.toString(); -} - -class _FakeDiagnosticsNode_7 extends _i1.SmartFake - implements _i5.DiagnosticsNode { - _FakeDiagnosticsNode_7( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); - - @override - String toString({ - _i5.TextTreeConfiguration? parentConfiguration, - _i5.DiagnosticLevel? minLevel = _i5.DiagnosticLevel.info, - }) => - super.toString(); -} - -class _FakePath_8 extends _i1.SmartFake implements _i2.Path { - _FakePath_8( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); -} - -/// A class which mocks [Canvas]. -/// -/// See the documentation for Mockito's code generation for more information. -class MockCanvas extends _i1.Mock implements _i2.Canvas { - MockCanvas() { - _i1.throwOnMissingStub(this); - } - - @override - void save() => super.noSuchMethod( - Invocation.method( - #save, - [], - ), - returnValueForMissingStub: null, - ); - - @override - void saveLayer( - _i2.Rect? bounds, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #saveLayer, - [ - bounds, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void restore() => super.noSuchMethod( - Invocation.method( - #restore, - [], - ), - returnValueForMissingStub: null, - ); - - @override - void restoreToCount(int? count) => super.noSuchMethod( - Invocation.method( - #restoreToCount, - [count], - ), - returnValueForMissingStub: null, - ); - - @override - int getSaveCount() => (super.noSuchMethod( - Invocation.method( - #getSaveCount, - [], - ), - returnValue: 0, - ) as int); - - @override - void translate( - double? dx, - double? dy, - ) => - super.noSuchMethod( - Invocation.method( - #translate, - [ - dx, - dy, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void scale( - double? sx, [ - double? sy, - ]) => - super.noSuchMethod( - Invocation.method( - #scale, - [ - sx, - sy, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void rotate(double? radians) => super.noSuchMethod( - Invocation.method( - #rotate, - [radians], - ), - returnValueForMissingStub: null, - ); - - @override - void skew( - double? sx, - double? sy, - ) => - super.noSuchMethod( - Invocation.method( - #skew, - [ - sx, - sy, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void transform(_i7.Float64List? matrix4) => super.noSuchMethod( - Invocation.method( - #transform, - [matrix4], - ), - returnValueForMissingStub: null, - ); - - @override - _i7.Float64List getTransform() => (super.noSuchMethod( - Invocation.method( - #getTransform, - [], - ), - returnValue: _i7.Float64List(0), - ) as _i7.Float64List); - - @override - void clipRect( - _i2.Rect? rect, { - _i2.ClipOp? clipOp = _i2.ClipOp.intersect, - bool? doAntiAlias = true, - }) => - super.noSuchMethod( - Invocation.method( - #clipRect, - [rect], - { - #clipOp: clipOp, - #doAntiAlias: doAntiAlias, - }, - ), - returnValueForMissingStub: null, - ); - - @override - void clipRRect( - _i2.RRect? rrect, { - bool? doAntiAlias = true, - }) => - super.noSuchMethod( - Invocation.method( - #clipRRect, - [rrect], - {#doAntiAlias: doAntiAlias}, - ), - returnValueForMissingStub: null, - ); - - @override - void clipPath( - _i2.Path? path, { - bool? doAntiAlias = true, - }) => - super.noSuchMethod( - Invocation.method( - #clipPath, - [path], - {#doAntiAlias: doAntiAlias}, - ), - returnValueForMissingStub: null, - ); - - @override - _i2.Rect getLocalClipBounds() => (super.noSuchMethod( - Invocation.method( - #getLocalClipBounds, - [], - ), - returnValue: _FakeRect_0( - this, - Invocation.method( - #getLocalClipBounds, - [], - ), - ), - ) as _i2.Rect); - - @override - _i2.Rect getDestinationClipBounds() => (super.noSuchMethod( - Invocation.method( - #getDestinationClipBounds, - [], - ), - returnValue: _FakeRect_0( - this, - Invocation.method( - #getDestinationClipBounds, - [], - ), - ), - ) as _i2.Rect); - - @override - void drawColor( - _i2.Color? color, - _i2.BlendMode? blendMode, - ) => - super.noSuchMethod( - Invocation.method( - #drawColor, - [ - color, - blendMode, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawLine( - _i2.Offset? p1, - _i2.Offset? p2, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawLine, - [ - p1, - p2, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawPaint(_i2.Paint? paint) => super.noSuchMethod( - Invocation.method( - #drawPaint, - [paint], - ), - returnValueForMissingStub: null, - ); - - @override - void drawRect( - _i2.Rect? rect, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawRect, - [ - rect, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawRRect( - _i2.RRect? rrect, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawRRect, - [ - rrect, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawDRRect( - _i2.RRect? outer, - _i2.RRect? inner, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawDRRect, - [ - outer, - inner, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawOval( - _i2.Rect? rect, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawOval, - [ - rect, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawCircle( - _i2.Offset? c, - double? radius, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawCircle, - [ - c, - radius, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawArc( - _i2.Rect? rect, - double? startAngle, - double? sweepAngle, - bool? useCenter, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawArc, - [ - rect, - startAngle, - sweepAngle, - useCenter, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawPath( - _i2.Path? path, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawPath, - [ - path, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawImage( - _i2.Image? image, - _i2.Offset? offset, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawImage, - [ - image, - offset, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawImageRect( - _i2.Image? image, - _i2.Rect? src, - _i2.Rect? dst, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawImageRect, - [ - image, - src, - dst, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawImageNine( - _i2.Image? image, - _i2.Rect? center, - _i2.Rect? dst, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawImageNine, - [ - image, - center, - dst, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawPicture(_i2.Picture? picture) => super.noSuchMethod( - Invocation.method( - #drawPicture, - [picture], - ), - returnValueForMissingStub: null, - ); - - @override - void drawParagraph( - _i2.Paragraph? paragraph, - _i2.Offset? offset, - ) => - super.noSuchMethod( - Invocation.method( - #drawParagraph, - [ - paragraph, - offset, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawPoints( - _i2.PointMode? pointMode, - List<_i2.Offset>? points, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawPoints, - [ - pointMode, - points, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawRawPoints( - _i2.PointMode? pointMode, - _i7.Float32List? points, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawRawPoints, - [ - pointMode, - points, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawVertices( - _i2.Vertices? vertices, - _i2.BlendMode? blendMode, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawVertices, - [ - vertices, - blendMode, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawAtlas( - _i2.Image? atlas, - List<_i2.RSTransform>? transforms, - List<_i2.Rect>? rects, - List<_i2.Color>? colors, - _i2.BlendMode? blendMode, - _i2.Rect? cullRect, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawAtlas, - [ - atlas, - transforms, - rects, - colors, - blendMode, - cullRect, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawRawAtlas( - _i2.Image? atlas, - _i7.Float32List? rstTransforms, - _i7.Float32List? rects, - _i7.Int32List? colors, - _i2.BlendMode? blendMode, - _i2.Rect? cullRect, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawRawAtlas, - [ - atlas, - rstTransforms, - rects, - colors, - blendMode, - cullRect, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawShadow( - _i2.Path? path, - _i2.Color? color, - double? elevation, - bool? transparentOccluder, - ) => - super.noSuchMethod( - Invocation.method( - #drawShadow, - [ - path, - color, - elevation, - transparentOccluder, - ], - ), - returnValueForMissingStub: null, - ); -} - -/// A class which mocks [PaintingContext]. -/// -/// See the documentation for Mockito's code generation for more information. -class MockPaintingContext extends _i1.Mock implements _i3.PaintingContext { - MockPaintingContext() { - _i1.throwOnMissingStub(this); - } - - @override - _i2.Rect get estimatedBounds => (super.noSuchMethod( - Invocation.getter(#estimatedBounds), - returnValue: _FakeRect_0( - this, - Invocation.getter(#estimatedBounds), - ), - ) as _i2.Rect); - - @override - _i2.Canvas get canvas => (super.noSuchMethod( - Invocation.getter(#canvas), - returnValue: _FakeCanvas_1( - this, - Invocation.getter(#canvas), - ), - ) as _i2.Canvas); - - @override - void paintChild( - _i3.RenderObject? child, - _i2.Offset? offset, - ) => - super.noSuchMethod( - Invocation.method( - #paintChild, - [ - child, - offset, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void appendLayer(_i4.Layer? layer) => super.noSuchMethod( - Invocation.method( - #appendLayer, - [layer], - ), - returnValueForMissingStub: null, - ); - - @override - _i2.VoidCallback addCompositionCallback(_i4.CompositionCallback? callback) => - (super.noSuchMethod( - Invocation.method( - #addCompositionCallback, - [callback], - ), - returnValue: () {}, - ) as _i2.VoidCallback); - - @override - void stopRecordingIfNeeded() => super.noSuchMethod( - Invocation.method( - #stopRecordingIfNeeded, - [], - ), - returnValueForMissingStub: null, - ); - - @override - void setIsComplexHint() => super.noSuchMethod( - Invocation.method( - #setIsComplexHint, - [], - ), - returnValueForMissingStub: null, - ); - - @override - void setWillChangeHint() => super.noSuchMethod( - Invocation.method( - #setWillChangeHint, - [], - ), - returnValueForMissingStub: null, - ); - - @override - void addLayer(_i4.Layer? layer) => super.noSuchMethod( - Invocation.method( - #addLayer, - [layer], - ), - returnValueForMissingStub: null, - ); - - @override - void pushLayer( - _i4.ContainerLayer? childLayer, - _i3.PaintingContextCallback? painter, - _i2.Offset? offset, { - _i2.Rect? childPaintBounds, - }) => - super.noSuchMethod( - Invocation.method( - #pushLayer, - [ - childLayer, - painter, - offset, - ], - {#childPaintBounds: childPaintBounds}, - ), - returnValueForMissingStub: null, - ); - - @override - _i3.PaintingContext createChildContext( - _i4.ContainerLayer? childLayer, - _i2.Rect? bounds, - ) => - (super.noSuchMethod( - Invocation.method( - #createChildContext, - [ - childLayer, - bounds, - ], - ), - returnValue: _FakePaintingContext_2( - this, - Invocation.method( - #createChildContext, - [ - childLayer, - bounds, - ], - ), - ), - ) as _i3.PaintingContext); - - @override - _i4.ClipRectLayer? pushClipRect( - bool? needsCompositing, - _i2.Offset? offset, - _i2.Rect? clipRect, - _i3.PaintingContextCallback? painter, { - _i2.Clip? clipBehavior = _i2.Clip.hardEdge, - _i4.ClipRectLayer? oldLayer, - }) => - (super.noSuchMethod(Invocation.method( - #pushClipRect, - [ - needsCompositing, - offset, - clipRect, - painter, - ], - { - #clipBehavior: clipBehavior, - #oldLayer: oldLayer, - }, - )) as _i4.ClipRectLayer?); - - @override - _i4.ClipRRectLayer? pushClipRRect( - bool? needsCompositing, - _i2.Offset? offset, - _i2.Rect? bounds, - _i2.RRect? clipRRect, - _i3.PaintingContextCallback? painter, { - _i2.Clip? clipBehavior = _i2.Clip.antiAlias, - _i4.ClipRRectLayer? oldLayer, - }) => - (super.noSuchMethod(Invocation.method( - #pushClipRRect, - [ - needsCompositing, - offset, - bounds, - clipRRect, - painter, - ], - { - #clipBehavior: clipBehavior, - #oldLayer: oldLayer, - }, - )) as _i4.ClipRRectLayer?); - - @override - _i4.ClipPathLayer? pushClipPath( - bool? needsCompositing, - _i2.Offset? offset, - _i2.Rect? bounds, - _i2.Path? clipPath, - _i3.PaintingContextCallback? painter, { - _i2.Clip? clipBehavior = _i2.Clip.antiAlias, - _i4.ClipPathLayer? oldLayer, - }) => - (super.noSuchMethod(Invocation.method( - #pushClipPath, - [ - needsCompositing, - offset, - bounds, - clipPath, - painter, - ], - { - #clipBehavior: clipBehavior, - #oldLayer: oldLayer, - }, - )) as _i4.ClipPathLayer?); - - @override - _i4.ColorFilterLayer pushColorFilter( - _i2.Offset? offset, - _i2.ColorFilter? colorFilter, - _i3.PaintingContextCallback? painter, { - _i4.ColorFilterLayer? oldLayer, - }) => - (super.noSuchMethod( - Invocation.method( - #pushColorFilter, - [ - offset, - colorFilter, - painter, - ], - {#oldLayer: oldLayer}, - ), - returnValue: _FakeColorFilterLayer_3( - this, - Invocation.method( - #pushColorFilter, - [ - offset, - colorFilter, - painter, - ], - {#oldLayer: oldLayer}, - ), - ), - ) as _i4.ColorFilterLayer); - - @override - _i4.TransformLayer? pushTransform( - bool? needsCompositing, - _i2.Offset? offset, - _i8.Matrix4? transform, - _i3.PaintingContextCallback? painter, { - _i4.TransformLayer? oldLayer, - }) => - (super.noSuchMethod(Invocation.method( - #pushTransform, - [ - needsCompositing, - offset, - transform, - painter, - ], - {#oldLayer: oldLayer}, - )) as _i4.TransformLayer?); - - @override - _i4.OpacityLayer pushOpacity( - _i2.Offset? offset, - int? alpha, - _i3.PaintingContextCallback? painter, { - _i4.OpacityLayer? oldLayer, - }) => - (super.noSuchMethod( - Invocation.method( - #pushOpacity, - [ - offset, - alpha, - painter, - ], - {#oldLayer: oldLayer}, - ), - returnValue: _FakeOpacityLayer_4( - this, - Invocation.method( - #pushOpacity, - [ - offset, - alpha, - painter, - ], - {#oldLayer: oldLayer}, - ), - ), - ) as _i4.OpacityLayer); - - @override - void clipPathAndPaint( - _i2.Path? path, - _i2.Clip? clipBehavior, - _i2.Rect? bounds, - _i2.VoidCallback? painter, - ) => - super.noSuchMethod( - Invocation.method( - #clipPathAndPaint, - [ - path, - clipBehavior, - bounds, - painter, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void clipRRectAndPaint( - _i2.RRect? rrect, - _i2.Clip? clipBehavior, - _i2.Rect? bounds, - _i2.VoidCallback? painter, - ) => - super.noSuchMethod( - Invocation.method( - #clipRRectAndPaint, - [ - rrect, - clipBehavior, - bounds, - painter, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void clipRectAndPaint( - _i2.Rect? rect, - _i2.Clip? clipBehavior, - _i2.Rect? bounds, - _i2.VoidCallback? painter, - ) => - super.noSuchMethod( - Invocation.method( - #clipRectAndPaint, - [ - rect, - clipBehavior, - bounds, - painter, - ], - ), - returnValueForMissingStub: null, - ); -} - -/// A class which mocks [BuildContext]. -/// -/// See the documentation for Mockito's code generation for more information. -class MockBuildContext extends _i1.Mock implements _i6.BuildContext { - MockBuildContext() { - _i1.throwOnMissingStub(this); - } - - @override - _i6.Widget get widget => (super.noSuchMethod( - Invocation.getter(#widget), - returnValue: _FakeWidget_5( - this, - Invocation.getter(#widget), - ), - ) as _i6.Widget); - - @override - bool get mounted => (super.noSuchMethod( - Invocation.getter(#mounted), - returnValue: false, - ) as bool); - - @override - bool get debugDoingBuild => (super.noSuchMethod( - Invocation.getter(#debugDoingBuild), - returnValue: false, - ) as bool); - - @override - _i6.InheritedWidget dependOnInheritedElement( - _i6.InheritedElement? ancestor, { - Object? aspect, - }) => - (super.noSuchMethod( - Invocation.method( - #dependOnInheritedElement, - [ancestor], - {#aspect: aspect}, - ), - returnValue: _FakeInheritedWidget_6( - this, - Invocation.method( - #dependOnInheritedElement, - [ancestor], - {#aspect: aspect}, - ), - ), - ) as _i6.InheritedWidget); - - @override - void visitAncestorElements(_i6.ConditionalElementVisitor? visitor) => - super.noSuchMethod( - Invocation.method( - #visitAncestorElements, - [visitor], - ), - returnValueForMissingStub: null, - ); - - @override - void visitChildElements(_i6.ElementVisitor? visitor) => super.noSuchMethod( - Invocation.method( - #visitChildElements, - [visitor], - ), - returnValueForMissingStub: null, - ); - - @override - void dispatchNotification(_i9.Notification? notification) => - super.noSuchMethod( - Invocation.method( - #dispatchNotification, - [notification], - ), - returnValueForMissingStub: null, - ); - - @override - _i5.DiagnosticsNode describeElement( - String? name, { - _i5.DiagnosticsTreeStyle? style = _i5.DiagnosticsTreeStyle.errorProperty, - }) => - (super.noSuchMethod( - Invocation.method( - #describeElement, - [name], - {#style: style}, - ), - returnValue: _FakeDiagnosticsNode_7( - this, - Invocation.method( - #describeElement, - [name], - {#style: style}, - ), - ), - ) as _i5.DiagnosticsNode); - - @override - _i5.DiagnosticsNode describeWidget( - String? name, { - _i5.DiagnosticsTreeStyle? style = _i5.DiagnosticsTreeStyle.errorProperty, - }) => - (super.noSuchMethod( - Invocation.method( - #describeWidget, - [name], - {#style: style}, - ), - returnValue: _FakeDiagnosticsNode_7( - this, - Invocation.method( - #describeWidget, - [name], - {#style: style}, - ), - ), - ) as _i5.DiagnosticsNode); - - @override - List<_i5.DiagnosticsNode> describeMissingAncestor( - {required Type? expectedAncestorType}) => - (super.noSuchMethod( - Invocation.method( - #describeMissingAncestor, - [], - {#expectedAncestorType: expectedAncestorType}, - ), - returnValue: <_i5.DiagnosticsNode>[], - ) as List<_i5.DiagnosticsNode>); - - @override - _i5.DiagnosticsNode describeOwnershipChain(String? name) => - (super.noSuchMethod( - Invocation.method( - #describeOwnershipChain, - [name], - ), - returnValue: _FakeDiagnosticsNode_7( - this, - Invocation.method( - #describeOwnershipChain, - [name], - ), - ), - ) as _i5.DiagnosticsNode); -} - -/// A class which mocks [LineChartPainter]. -/// -/// See the documentation for Mockito's code generation for more information. -class MockLineChartPainter extends _i1.Mock implements _i10.LineChartPainter { - MockLineChartPainter() { - _i1.throwOnMissingStub(this); - } - - @override - void paint( - _i6.BuildContext? context, - _i11.CanvasWrapper? canvasWrapper, - _i12.PaintHolder<_i13.LineChartData>? holder, - ) => - super.noSuchMethod( - Invocation.method( - #paint, - [ - context, - canvasWrapper, - holder, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void clipToBorder( - _i11.CanvasWrapper? canvasWrapper, - _i12.PaintHolder<_i13.LineChartData>? holder, - ) => - super.noSuchMethod( - Invocation.method( - #clipToBorder, - [ - canvasWrapper, - holder, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawBarLine( - _i11.CanvasWrapper? canvasWrapper, - _i13.LineChartBarData? barData, - _i12.PaintHolder<_i13.LineChartData>? holder, - ) => - super.noSuchMethod( - Invocation.method( - #drawBarLine, - [ - canvasWrapper, - barData, - holder, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawBetweenBarsArea( - _i11.CanvasWrapper? canvasWrapper, - _i13.LineChartData? data, - _i13.BetweenBarsData? betweenBarsData, - _i12.PaintHolder<_i13.LineChartData>? holder, - ) => - super.noSuchMethod( - Invocation.method( - #drawBetweenBarsArea, - [ - canvasWrapper, - data, - betweenBarsData, - holder, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawDots( - _i11.CanvasWrapper? canvasWrapper, - _i13.LineChartBarData? barData, - _i12.PaintHolder<_i13.LineChartData>? holder, - ) => - super.noSuchMethod( - Invocation.method( - #drawDots, - [ - canvasWrapper, - barData, - holder, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawTouchedSpotsIndicator( - _i11.CanvasWrapper? canvasWrapper, - List<_i10.LineIndexDrawingInfo>? lineIndexDrawingInfo, - _i12.PaintHolder<_i13.LineChartData>? holder, - ) => - super.noSuchMethod( - Invocation.method( - #drawTouchedSpotsIndicator, - [ - canvasWrapper, - lineIndexDrawingInfo, - holder, - ], - ), - returnValueForMissingStub: null, - ); - - @override - _i2.Path generateBarPath( - _i2.Size? viewSize, - _i13.LineChartBarData? barData, - List<_i13.FlSpot>? barSpots, - _i12.PaintHolder<_i13.LineChartData>? holder, { - _i2.Path? appendToPath, - }) => - (super.noSuchMethod( - Invocation.method( - #generateBarPath, - [ - viewSize, - barData, - barSpots, - holder, - ], - {#appendToPath: appendToPath}, - ), - returnValue: _FakePath_8( - this, - Invocation.method( - #generateBarPath, - [ - viewSize, - barData, - barSpots, - holder, - ], - {#appendToPath: appendToPath}, - ), - ), - ) as _i2.Path); - - @override - _i2.Path generateNormalBarPath( - _i2.Size? viewSize, - _i13.LineChartBarData? barData, - List<_i13.FlSpot>? barSpots, - _i12.PaintHolder<_i13.LineChartData>? holder, { - _i2.Path? appendToPath, - }) => - (super.noSuchMethod( - Invocation.method( - #generateNormalBarPath, - [ - viewSize, - barData, - barSpots, - holder, - ], - {#appendToPath: appendToPath}, - ), - returnValue: _FakePath_8( - this, - Invocation.method( - #generateNormalBarPath, - [ - viewSize, - barData, - barSpots, - holder, - ], - {#appendToPath: appendToPath}, - ), - ), - ) as _i2.Path); - - @override - _i2.Path generateStepBarPath( - _i2.Size? viewSize, - _i13.LineChartBarData? barData, - List<_i13.FlSpot>? barSpots, - _i12.PaintHolder<_i13.LineChartData>? holder, { - _i2.Path? appendToPath, - }) => - (super.noSuchMethod( - Invocation.method( - #generateStepBarPath, - [ - viewSize, - barData, - barSpots, - holder, - ], - {#appendToPath: appendToPath}, - ), - returnValue: _FakePath_8( - this, - Invocation.method( - #generateStepBarPath, - [ - viewSize, - barData, - barSpots, - holder, - ], - {#appendToPath: appendToPath}, - ), - ), - ) as _i2.Path); - - @override - _i2.Path generateBelowBarPath( - _i2.Size? viewSize, - _i13.LineChartBarData? barData, - _i2.Path? barPath, - List<_i13.FlSpot>? barSpots, - _i12.PaintHolder<_i13.LineChartData>? holder, { - bool? fillCompletely = false, - }) => - (super.noSuchMethod( - Invocation.method( - #generateBelowBarPath, - [ - viewSize, - barData, - barPath, - barSpots, - holder, - ], - {#fillCompletely: fillCompletely}, - ), - returnValue: _FakePath_8( - this, - Invocation.method( - #generateBelowBarPath, - [ - viewSize, - barData, - barPath, - barSpots, - holder, - ], - {#fillCompletely: fillCompletely}, - ), - ), - ) as _i2.Path); - - @override - _i2.Path generateAboveBarPath( - _i2.Size? viewSize, - _i13.LineChartBarData? barData, - _i2.Path? barPath, - List<_i13.FlSpot>? barSpots, - _i12.PaintHolder<_i13.LineChartData>? holder, { - bool? fillCompletely = false, - }) => - (super.noSuchMethod( - Invocation.method( - #generateAboveBarPath, - [ - viewSize, - barData, - barPath, - barSpots, - holder, - ], - {#fillCompletely: fillCompletely}, - ), - returnValue: _FakePath_8( - this, - Invocation.method( - #generateAboveBarPath, - [ - viewSize, - barData, - barPath, - barSpots, - holder, - ], - {#fillCompletely: fillCompletely}, - ), - ), - ) as _i2.Path); - - @override - void drawBelowBar( - _i11.CanvasWrapper? canvasWrapper, - _i2.Path? belowBarPath, - _i2.Path? filledAboveBarPath, - _i12.PaintHolder<_i13.LineChartData>? holder, - _i13.LineChartBarData? barData, - ) => - super.noSuchMethod( - Invocation.method( - #drawBelowBar, - [ - canvasWrapper, - belowBarPath, - filledAboveBarPath, - holder, - barData, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawAboveBar( - _i11.CanvasWrapper? canvasWrapper, - _i2.Path? aboveBarPath, - _i2.Path? filledBelowBarPath, - _i12.PaintHolder<_i13.LineChartData>? holder, - _i13.LineChartBarData? barData, - ) => - super.noSuchMethod( - Invocation.method( - #drawAboveBar, - [ - canvasWrapper, - aboveBarPath, - filledBelowBarPath, - holder, - barData, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawBetweenBar( - _i11.CanvasWrapper? canvasWrapper, - _i2.Path? barPath, - _i13.BetweenBarsData? betweenBarsData, - _i2.Rect? aroundRect, - _i12.PaintHolder<_i13.LineChartData>? holder, - ) => - super.noSuchMethod( - Invocation.method( - #drawBetweenBar, - [ - canvasWrapper, - barPath, - betweenBarsData, - aroundRect, - holder, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawBarShadow( - _i11.CanvasWrapper? canvasWrapper, - _i2.Path? barPath, - _i13.LineChartBarData? barData, - ) => - super.noSuchMethod( - Invocation.method( - #drawBarShadow, - [ - canvasWrapper, - barPath, - barData, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawBar( - _i11.CanvasWrapper? canvasWrapper, - _i2.Path? barPath, - _i13.LineChartBarData? barData, - _i12.PaintHolder<_i13.LineChartData>? holder, - ) => - super.noSuchMethod( - Invocation.method( - #drawBar, - [ - canvasWrapper, - barPath, - barData, - holder, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawTouchTooltip( - _i6.BuildContext? context, - _i11.CanvasWrapper? canvasWrapper, - _i13.LineTouchTooltipData? tooltipData, - _i13.FlSpot? showOnSpot, - _i13.ShowingTooltipIndicators? showingTooltipSpots, - _i12.PaintHolder<_i13.LineChartData>? holder, - ) => - super.noSuchMethod( - Invocation.method( - #drawTouchTooltip, - [ - context, - canvasWrapper, - tooltipData, - showOnSpot, - showingTooltipSpots, - holder, - ], - ), - returnValueForMissingStub: null, - ); - - @override - double getBarLineXLength( - _i13.LineChartBarData? barData, - _i2.Size? chartUsableSize, - _i12.PaintHolder<_i13.LineChartData>? holder, - ) => - (super.noSuchMethod( - Invocation.method( - #getBarLineXLength, - [ - barData, - chartUsableSize, - holder, - ], - ), - returnValue: 0.0, - ) as double); - - @override - List<_i13.TouchLineBarSpot>? handleTouch( - _i2.Offset? localPosition, - _i2.Size? size, - _i12.PaintHolder<_i13.LineChartData>? holder, - ) => - (super.noSuchMethod(Invocation.method( - #handleTouch, - [ - localPosition, - size, - holder, - ], - )) as List<_i13.TouchLineBarSpot>?); - - @override - _i13.TouchLineBarSpot? getNearestTouchedSpot( - _i2.Size? viewSize, - _i2.Offset? touchedPoint, - _i13.LineChartBarData? barData, - int? barDataPosition, - _i12.PaintHolder<_i13.LineChartData>? holder, - ) => - (super.noSuchMethod(Invocation.method( - #getNearestTouchedSpot, - [ - viewSize, - touchedPoint, - barData, - barDataPosition, - holder, - ], - )) as _i13.TouchLineBarSpot?); - - @override - void drawGrid( - _i11.CanvasWrapper? canvasWrapper, - _i12.PaintHolder<_i13.LineChartData>? holder, - ) => - super.noSuchMethod( - Invocation.method( - #drawGrid, - [ - canvasWrapper, - holder, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawBackground( - _i11.CanvasWrapper? canvasWrapper, - _i12.PaintHolder<_i13.LineChartData>? holder, - ) => - super.noSuchMethod( - Invocation.method( - #drawBackground, - [ - canvasWrapper, - holder, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawRangeAnnotation( - _i11.CanvasWrapper? canvasWrapper, - _i12.PaintHolder<_i13.LineChartData>? holder, - ) => - super.noSuchMethod( - Invocation.method( - #drawRangeAnnotation, - [ - canvasWrapper, - holder, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawExtraLines( - _i6.BuildContext? context, - _i11.CanvasWrapper? canvasWrapper, - _i12.PaintHolder<_i13.LineChartData>? holder, - ) => - super.noSuchMethod( - Invocation.method( - #drawExtraLines, - [ - context, - canvasWrapper, - holder, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawHorizontalLines( - _i6.BuildContext? context, - _i11.CanvasWrapper? canvasWrapper, - _i12.PaintHolder<_i13.LineChartData>? holder, - _i2.Size? viewSize, - ) => - super.noSuchMethod( - Invocation.method( - #drawHorizontalLines, - [ - context, - canvasWrapper, - holder, - viewSize, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawVerticalLines( - _i6.BuildContext? context, - _i11.CanvasWrapper? canvasWrapper, - _i12.PaintHolder<_i13.LineChartData>? holder, - _i2.Size? viewSize, - ) => - super.noSuchMethod( - Invocation.method( - #drawVerticalLines, - [ - context, - canvasWrapper, - holder, - viewSize, - ], - ), - returnValueForMissingStub: null, - ); - - @override - double getPixelX( - double? spotX, - _i2.Size? viewSize, - _i12.PaintHolder<_i13.LineChartData>? holder, - ) => - (super.noSuchMethod( - Invocation.method( - #getPixelX, - [ - spotX, - viewSize, - holder, - ], - ), - returnValue: 0.0, - ) as double); - - @override - double getPixelY( - double? spotY, - _i2.Size? viewSize, - _i12.PaintHolder<_i13.LineChartData>? holder, - ) => - (super.noSuchMethod( - Invocation.method( - #getPixelY, - [ - spotY, - viewSize, - holder, - ], - ), - returnValue: 0.0, - ) as double); - - @override - double getTooltipLeft( - double? dx, - double? tooltipWidth, - _i13.FLHorizontalAlignment? tooltipHorizontalAlignment, - double? tooltipHorizontalOffset, - ) => - (super.noSuchMethod( - Invocation.method( - #getTooltipLeft, - [ - dx, - tooltipWidth, - tooltipHorizontalAlignment, - tooltipHorizontalOffset, - ], - ), - returnValue: 0.0, - ) as double); -} diff --git a/test/chart/pie_chart/pie_chart_data_test.dart b/test/chart/pie_chart/pie_chart_data_test.dart deleted file mode 100644 index 962b25b4db..0000000000 --- a/test/chart/pie_chart/pie_chart_data_test.dart +++ /dev/null @@ -1,160 +0,0 @@ -import 'package:fl_chart/fl_chart.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_test/flutter_test.dart'; - -import '../data_pool.dart'; - -void main() { - group('PieChart data equality check', () { - test('PieChartData equality test', () { - expect(pieChartData1 == pieChartData1Clone, true); - - expect( - pieChartData1 == - pieChartData1Clone.copyWith( - borderData: FlBorderData( - show: false, - border: Border.all(), - ), - ), - true, - ); - - expect( - pieChartData1 == - pieChartData1Clone.copyWith( - borderData: FlBorderData( - show: true, - border: Border.all(), - ), - ), - false, - ); - - expect( - pieChartData1 == - pieChartData1Clone.copyWith( - startDegreeOffset: 33, - ), - false, - ); - - expect( - pieChartData1 == - PieChartData( - borderData: FlBorderData( - show: false, - border: Border.all(), - ), - startDegreeOffset: 0, - centerSpaceColor: Colors.white, - centerSpaceRadius: 12, - pieTouchData: PieTouchData( - enabled: false, - ), - sectionsSpace: 44, - ), - false, - ); - - expect( - pieChartData1 == - pieChartData1Clone.copyWith( - sections: [], - ), - false, - ); - - expect( - pieChartData1 == - pieChartData1Clone.copyWith( - sections: [ - PieChartSectionData(value: 12, color: Colors.red), - PieChartSectionData(value: 22, color: Colors.green), - ], - ), - false, - ); - - expect( - pieChartData1 == - pieChartData1Clone.copyWith( - sections: [ - PieChartSectionData(value: 12, color: Colors.red), - PieChartSectionData( - value: 22, - color: Colors.green.withOpacity(0.99), - ), - ], - ), - false, - ); - - expect( - pieChartData1 == - pieChartData1Clone.copyWith( - sections: [ - PieChartSectionData(value: 22, color: Colors.green), - PieChartSectionData(value: 12, color: Colors.red), - ], - ), - false, - ); - - expect( - pieChartData1 == - pieChartData1Clone.copyWith( - centerSpaceColor: Colors.cyan, - ), - false, - ); - - expect( - pieChartData1 == - pieChartData1Clone.copyWith( - centerSpaceRadius: 44, - ), - false, - ); - - expect( - pieChartData1 == - pieChartData1Clone.copyWith( - pieTouchData: PieTouchData(), - ), - false, - ); - - expect( - pieChartData1 == - pieChartData1Clone.copyWith( - sectionsSpace: 44.000001, - ), - false, - ); - }); - - test('PieTouchData equality test', () { - final sample1 = PieTouchData( - touchCallback: (event, response) {}, - enabled: true, - ); - final sample2 = PieTouchData( - enabled: true, - ); - - expect(sample1 == sample2, false); - - final disabled = PieTouchData( - enabled: false, - ); - expect(sample1 == disabled, false); - - final zeroLongPressDuration = PieTouchData( - enabled: true, - longPressDuration: Duration.zero, - ); - expect(sample1 == zeroLongPressDuration, false); - }); - }); -} diff --git a/test/chart/pie_chart/pie_chart_helper_test.dart b/test/chart/pie_chart/pie_chart_helper_test.dart deleted file mode 100644 index db53380a42..0000000000 --- a/test/chart/pie_chart/pie_chart_helper_test.dart +++ /dev/null @@ -1,33 +0,0 @@ -import 'package:fl_chart/fl_chart.dart'; -import 'package:fl_chart/src/chart/pie_chart/pie_chart_helper.dart'; -import 'package:flutter/cupertino.dart'; -import 'package:flutter_test/flutter_test.dart'; - -void main() { - test('Test List.toWidgets()', () { - final widgets1 = [ - PieChartSectionData(value: 1), - PieChartSectionData(value: 2), - PieChartSectionData(value: 3), - ].toWidgets(); - expect(widgets1, List.empty()); - - final widgets2 = [ - PieChartSectionData(value: 1), - PieChartSectionData(value: 2, badgeWidget: const Text('asdf')), - PieChartSectionData(value: 3), - ].toWidgets(); - expect(widgets2[0] is Container, true); - expect(widgets2[1] is Text, true); - expect(widgets2[2] is Container, true); - - final widgets3 = [ - PieChartSectionData(value: 1, badgeWidget: const Text('1')), - PieChartSectionData(value: 2, badgeWidget: const Text('2')), - PieChartSectionData(value: 3, badgeWidget: const Text('3')), - ].toWidgets(); - expect((widgets3[0] as Text).data, '1'); - expect((widgets3[1] as Text).data, '2'); - expect((widgets3[2] as Text).data, '3'); - }); -} diff --git a/test/chart/pie_chart/pie_chart_painter_test.dart b/test/chart/pie_chart/pie_chart_painter_test.dart deleted file mode 100644 index b92cdf6d86..0000000000 --- a/test/chart/pie_chart/pie_chart_painter_test.dart +++ /dev/null @@ -1,1163 +0,0 @@ -import 'package:fl_chart/fl_chart.dart'; -import 'package:fl_chart/src/chart/base/base_chart/base_chart_painter.dart'; -import 'package:fl_chart/src/chart/base/line.dart'; -import 'package:fl_chart/src/chart/pie_chart/pie_chart_painter.dart'; -import 'package:fl_chart/src/utils/canvas_wrapper.dart'; -import 'package:fl_chart/src/utils/utils.dart'; -import 'package:flutter/cupertino.dart'; -import 'package:flutter/physics.dart'; -import 'package:flutter_test/flutter_test.dart'; -import 'package:mockito/annotations.dart'; -import 'package:mockito/mockito.dart'; - -import '../../helper_methods.dart'; -import '../data_pool.dart'; -import 'pie_chart_painter_test.mocks.dart'; - -@GenerateMocks([Canvas, CanvasWrapper, BuildContext, Utils]) -void main() { - const tolerance = 0.001; - group('paint()', () { - test('test 1', () { - final utilsMainInstance = Utils(); - const viewSize = Size(400, 400); - final data = PieChartData( - sections: [ - PieChartSectionData( - value: 10, - ), - PieChartSectionData( - value: 20, - ), - PieChartSectionData( - value: 30, - ), - ], - ); - - final pieChartPainter = PieChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - - final mockUtils = MockUtils(); - Utils.changeInstance(mockUtils); - when(mockUtils.getThemeAwareTextStyle(any, any)) - .thenAnswer((realInvocation) => textStyle1); - when(mockUtils.radians(any)).thenAnswer((realInvocation) => 12); - - final mockBuildContext = MockBuildContext(); - final mockCanvasWrapper = MockCanvasWrapper(); - when(mockCanvasWrapper.size).thenAnswer((realInvocation) => viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - pieChartPainter.paint( - mockBuildContext, - mockCanvasWrapper, - holder, - ); - - verify(mockCanvasWrapper.drawPath(any, any)).called(3); - Utils.changeInstance(utilsMainInstance); - }); - }); - - group('calculateSectionsAngle()', () { - test('test 1', () { - final sections = [ - PieChartSectionData(value: 10), - PieChartSectionData(value: 20), - PieChartSectionData(value: 30), - PieChartSectionData(value: 40), - ]; - expect( - PieChartPainter().calculateSectionsAngle(sections, 100), - [36, 72, 108, 144], - ); - }); - - test('test 2', () { - final sections = [ - PieChartSectionData(value: 10), - PieChartSectionData(value: 10), - PieChartSectionData(value: 10), - PieChartSectionData(value: 10), - ]; - expect( - PieChartPainter().calculateSectionsAngle(sections, 40), - [90, 90, 90, 90], - ); - }); - }); - - group('drawCenterSpace()', () { - test('test 1', () { - const viewSize = Size(200, 200); - - final data = PieChartData( - centerSpaceColor: MockData.color1, - ); - - final barChartPainter = PieChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - - final mockCanvasWrapper = MockCanvasWrapper(); - when(mockCanvasWrapper.size).thenAnswer((realInvocation) => viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - barChartPainter.drawCenterSpace(mockCanvasWrapper, 10, holder); - - final result = verify( - mockCanvasWrapper.drawCircle(const Offset(100, 100), 10, captureAny), - ); - expect(result.callCount, 1); - expect((result.captured.first as Paint).color, MockData.color1); - }); - }); - - group('drawSections()', () { - test('test 1', () { - const viewSize = Size(200, 200); - - final sections = [ - PieChartSectionData( - color: MockData.color2, - radius: 30, - value: 10, - borderSide: const BorderSide( - color: MockData.color3, - width: 3, - ), - ), - ]; - final data = PieChartData( - sections: sections, - ); - - final barChartPainter = PieChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - - final mockCanvasWrapper = MockCanvasWrapper(); - when(mockCanvasWrapper.size).thenAnswer((realInvocation) => viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - barChartPainter.drawSections(mockCanvasWrapper, [360], 10, holder); - - final result = verify( - mockCanvasWrapper.drawCircle( - const Offset(100, 100), - 10 + 15, - captureAny, - ), - ); - expect(result.callCount, 1); - expect((result.captured.single as Paint).color, MockData.color2); - expect((result.captured.single as Paint).strokeWidth, 30); - expect((result.captured.single as Paint).style, PaintingStyle.stroke); - - final result2 = verify( - mockCanvasWrapper.drawCircle( - const Offset(100, 100), - 10 + 30 - (3 / 2), - captureAny, - ), - ); - expect(result2.callCount, 1); - expect((result2.captured.single as Paint).color, MockData.color3); - expect((result2.captured.single as Paint).strokeWidth, 3); - expect((result2.captured.single as Paint).style, PaintingStyle.stroke); - - final result3 = verify( - mockCanvasWrapper.drawCircle( - const Offset(100, 100), - 10 + (3 / 2), - captureAny, - ), - ); - expect(result3.callCount, 1); - expect((result3.captured.single as Paint).color, MockData.color3); - expect((result3.captured.single as Paint).strokeWidth, 3); - expect((result3.captured.single as Paint).style, PaintingStyle.stroke); - }); - - test('test 2', () { - const viewSize = Size(200, 200); - - final data = PieChartData( - centerSpaceColor: MockData.color1, - sectionsSpace: 10, - sections: [ - PieChartSectionData(color: MockData.color1, value: 1), - PieChartSectionData(color: MockData.color2, value: 2), - PieChartSectionData(color: MockData.color3, value: 3), - PieChartSectionData(color: MockData.color4, value: 4), - ], - ); - - final barChartPainter = PieChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - - final mockCanvasWrapper = MockCanvasWrapper(); - when(mockCanvasWrapper.size).thenAnswer((realInvocation) => viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - final results = >[]; - when(mockCanvasWrapper.drawPath(captureAny, captureAny)) - .thenAnswer((inv) { - final paint = inv.positionalArguments[1] as Paint; - results.add({ - 'path': inv.positionalArguments[0] as Path, - 'paint_color': paint.color, - 'paint_style': paint.style, - }); - }); - - barChartPainter.drawSections( - mockCanvasWrapper, - [36, 72, 108, 144], - 10, - holder, - ); - verifyNever(mockCanvasWrapper.drawCircle(any, any, any)); - - expect(results.length, 4); - - final path0 = barChartPainter.generateSectionPath( - data.sections[0], - 10, - 0, - 36, - const Offset(100, 100), - 10, - ); - expect( - HelperMethods.equalsPaths(results[0]['path'] as Path, path0), - true, - ); - expect(results[0]['paint_color'] as Color, MockData.color1); - expect(results[0]['paint_style'] as PaintingStyle, PaintingStyle.fill); - - final path1 = barChartPainter.generateSectionPath( - data.sections[1], - 10, - 36, - 72, - const Offset(100, 100), - 10, - ); - expect( - HelperMethods.equalsPaths(results[1]['path'] as Path, path1), - true, - ); - expect(results[1]['paint_color'] as Color, MockData.color2); - expect(results[1]['paint_style'] as PaintingStyle, PaintingStyle.fill); - - final path2 = barChartPainter.generateSectionPath( - data.sections[2], - 10, - 108, - 108, - const Offset(100, 100), - 10, - ); - expect( - HelperMethods.equalsPaths(results[2]['path'] as Path, path2), - true, - ); - expect(results[2]['paint_color'] as Color, MockData.color3); - expect(results[2]['paint_style'] as PaintingStyle, PaintingStyle.fill); - - final path3 = barChartPainter.generateSectionPath( - data.sections[3], - 10, - 216, - 144, - const Offset(100, 100), - 10, - ); - expect( - HelperMethods.equalsPaths(results[3]['path'] as Path, path3), - true, - ); - expect(results[3]['paint_color'] as Color, MockData.color4); - expect(results[3]['paint_style'] as PaintingStyle, PaintingStyle.fill); - }); - }); - - group('generateSectionPath()', () { - test('test 1', () { - final data = PieChartData( - centerSpaceColor: MockData.color1, - sectionsSpace: 10, - sections: [ - PieChartSectionData(color: MockData.color1, value: 1), - PieChartSectionData(color: MockData.color2, value: 2), - PieChartSectionData(color: MockData.color3, value: 3), - PieChartSectionData(color: MockData.color4, value: 4), - ], - ); - final barChartPainter = PieChartPainter(); - - final path0 = barChartPainter.generateSectionPath( - data.sections[0], - 10, - 0, - 36, - const Offset(100, 100), - 10, - ); - final path0Length = path0 - .computeMetrics() - .toList() - .map((e) => e.length) - .reduce((a, b) => a + b); - expect(path0Length, 90.08028411865234); - - final path1 = barChartPainter.generateSectionPath( - data.sections[1], - 10, - 36, - 72, - const Offset(100, 100), - 10, - ); - final path1Length = path1 - .computeMetrics() - .toList() - .map((e) => e.length) - .reduce((a, b) => a + b); - expect(path1Length, 136.93048095703125); - - final path2 = barChartPainter.generateSectionPath( - data.sections[2], - 10, - 108, - 108, - const Offset(100, 100), - 10, - ); - final path2Length = path2 - .computeMetrics() - .toList() - .map((e) => e.length) - .reduce((a, b) => a + b); - expect(path2Length, closeTo(174.6013, tolerance)); - - final path3 = barChartPainter.generateSectionPath( - data.sections[3], - 10, - 216, - 144, - const Offset(100, 100), - 10, - ); - final path3Length = path3 - .computeMetrics() - .toList() - .map((e) => e.length) - .reduce((a, b) => a + b); - expect(path3Length, 212.1544189453125); - }); - - test('test 2', () { - final data = PieChartData( - centerSpaceColor: MockData.color1, - sectionsSpace: 0, - sections: [ - PieChartSectionData(color: MockData.color1, value: 1), - PieChartSectionData(color: MockData.color2, value: 2), - PieChartSectionData(color: MockData.color3, value: 3), - PieChartSectionData(color: MockData.color4, value: 4), - ], - ); - final barChartPainter = PieChartPainter(); - - final path0 = barChartPainter.generateSectionPath( - data.sections[0], - 0, - 0, - 36, - const Offset(100, 100), - 10, - ); - final path0Length = path0 - .computeMetrics() - .toList() - .map((e) => e.length) - .reduce((a, b) => a + b); - expect(path0Length, 117.56398010253906); - - final path1 = barChartPainter.generateSectionPath( - data.sections[1], - 0, - 36, - 72, - const Offset(100, 100), - 10, - ); - final path1Length = path1 - .computeMetrics() - .toList() - .map((e) => e.length) - .reduce((a, b) => a + b); - expect(path1Length, 155.1278076171875); - - final path2 = barChartPainter.generateSectionPath( - data.sections[2], - 0, - 108, - 108, - const Offset(100, 100), - 10, - ); - final path2Length = path2 - .computeMetrics() - .toList() - .map((e) => e.length) - .reduce((a, b) => a + b); - expect(path2Length, closeTo(192.8401, tolerance)); - - final path3 = barChartPainter.generateSectionPath( - data.sections[3], - 0, - 216, - 144, - const Offset(100, 100), - 10, - ); - final path3Length = path3 - .computeMetrics() - .toList() - .map((e) => e.length) - .reduce((a, b) => a + b); - expect(nearEqual(path3Length, 230.37237548828125, 0.0001), true); - }); - - test('test 3', () { - final data = PieChartData( - centerSpaceColor: MockData.color1, - sectionsSpace: 0, - sections: [ - PieChartSectionData(color: MockData.color1, value: 1), - PieChartSectionData(color: MockData.color2, value: 2), - PieChartSectionData(color: MockData.color3, value: 3), - PieChartSectionData(color: MockData.color4, value: 4), - ], - ); - final barChartPainter = PieChartPainter(); - - final path0 = barChartPainter.generateSectionPath( - data.sections[0], - 0, - 0, - 36, - const Offset(100, 100), - 3, - ); - final path0Length = path0 - .computeMetrics() - .toList() - .map((e) => e.length) - .reduce((a, b) => a + b); - expect(path0Length, 108.80243682861328); - - final path1 = barChartPainter.generateSectionPath( - data.sections[1], - 0, - 36, - 72, - const Offset(100, 100), - 4, - ); - final path1Length = path1 - .computeMetrics() - .toList() - .map((e) => e.length) - .reduce((a, b) => a + b); - expect(path1Length, 140.05465698242188); - - final path2 = barChartPainter.generateSectionPath( - data.sections[2], - 0, - 108, - 108, - const Offset(100, 100), - 5, - ); - final path2Length = path2 - .computeMetrics() - .toList() - .map((e) => e.length) - .reduce((a, b) => a + b); - expect(path2Length, 173.86875915527344); - - final path3 = barChartPainter.generateSectionPath( - data.sections[3], - 0, - 216, - 144, - const Offset(100, 100), - 6, - ); - final path3Length = path3 - .computeMetrics() - .toList() - .map((e) => e.length) - .reduce((a, b) => a + b); - expect(path3Length, 210.1807098388672); - }); - }); - - group('createRectPathAroundLine()', () { - test('test 1', () { - final barChartPainter = PieChartPainter(); - final path0 = barChartPainter.createRectPathAroundLine( - const Line(Offset.zero, Offset(10, 0)), - 4, - ); - final path0Length = path0 - .computeMetrics() - .toList() - .map((e) => e.length) - .reduce((a, b) => a + b); - expect(path0Length, 32.0); - - final path1 = barChartPainter.createRectPathAroundLine( - const Line(Offset(32, 11), Offset(12, 5)), - 66, - ); - final path1Length = path1 - .computeMetrics() - .toList() - .map((e) => e.length) - .reduce((a, b) => a + b); - expect(path1Length, 239.76123046875); - }); - }); - - group('drawSection()', () { - test('test 1', () { - const viewSize = Size(200, 200); - final data = PieChartData( - centerSpaceColor: MockData.color1, - sectionsSpace: 10, - sections: [ - PieChartSectionData(color: MockData.color1, value: 1), - PieChartSectionData(color: MockData.color2, value: 2), - PieChartSectionData(color: MockData.color3, value: 3), - PieChartSectionData(color: MockData.color4, value: 4), - ], - ); - final barChartPainter = PieChartPainter(); - - final mockCanvasWrapper = MockCanvasWrapper(); - when(mockCanvasWrapper.size).thenAnswer((realInvocation) => viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - - final results = >[]; - when(mockCanvasWrapper.drawPath(captureAny, captureAny)) - .thenAnswer((inv) { - final paint = inv.positionalArguments[1] as Paint; - results.add({ - 'path': inv.positionalArguments[0] as Path, - 'paint_color': paint.color, - 'paint_style': paint.style, - }); - }); - - barChartPainter - ..drawSection( - data.sections[0], - MockData.path1, - mockCanvasWrapper, - ) - ..drawSection( - data.sections[1], - MockData.path2, - mockCanvasWrapper, - ) - ..drawSection( - data.sections[2], - MockData.path3, - mockCanvasWrapper, - ) - ..drawSection( - data.sections[3], - MockData.path4, - mockCanvasWrapper, - ); - - expect(results.length, 4); - - expect(results[0]['path'] as Path, MockData.path1); - expect(results[0]['paint_color'] as Color, MockData.color1); - expect(results[0]['paint_style'] as PaintingStyle, PaintingStyle.fill); - - expect(results[1]['path'] as Path, MockData.path2); - expect(results[1]['paint_color'] as Color, MockData.color2); - expect(results[1]['paint_style'] as PaintingStyle, PaintingStyle.fill); - - expect(results[2]['path'] as Path, MockData.path3); - expect(results[2]['paint_color'] as Color, MockData.color3); - expect(results[2]['paint_style'] as PaintingStyle, PaintingStyle.fill); - - expect(results[3]['path'] as Path, MockData.path4); - expect(results[3]['paint_color'] as Color, MockData.color4); - expect(results[3]['paint_style'] as PaintingStyle, PaintingStyle.fill); - }); - }); - - group('drawSectionStroke()', () { - test('test 1', () { - const viewSize = Size(200, 200); - final data = PieChartData( - centerSpaceColor: MockData.color1, - sectionsSpace: 10, - sections: [ - PieChartSectionData(color: MockData.color1, value: 1), - PieChartSectionData(color: MockData.color2, value: 2), - PieChartSectionData(color: MockData.color3, value: 3), - PieChartSectionData(color: MockData.color4, value: 4), - ], - ); - final barChartPainter = PieChartPainter(); - - final mockCanvasWrapper = MockCanvasWrapper(); - when(mockCanvasWrapper.size).thenAnswer((realInvocation) => viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - - final results = >[]; - when(mockCanvasWrapper.drawPath(captureAny, captureAny)) - .thenAnswer((inv) { - final paint = inv.positionalArguments[1] as Paint; - results.add({ - 'path': inv.positionalArguments[0] as Path, - 'paint_color': paint.color, - 'paint_style': paint.style, - }); - }); - - barChartPainter - ..drawSectionStroke( - data.sections[0], - MockData.path1, - mockCanvasWrapper, - viewSize, - ) - ..drawSectionStroke( - data.sections[1], - MockData.path2, - mockCanvasWrapper, - viewSize, - ) - ..drawSectionStroke( - data.sections[2], - MockData.path3, - mockCanvasWrapper, - viewSize, - ) - ..drawSectionStroke( - data.sections[3], - MockData.path4, - mockCanvasWrapper, - viewSize, - ); - - verifyNever(mockCanvasWrapper.saveLayer(any, any)); - verifyNever(mockCanvasWrapper.clipPath(any)); - verifyNever(mockCanvasWrapper.drawPath(any, any)); - verifyNever(mockCanvasWrapper.restore()); - }); - - test('test 2', () { - const viewSize = Size(200, 200); - final data = PieChartData( - centerSpaceColor: MockData.color1, - sectionsSpace: 10, - sections: [ - PieChartSectionData( - color: MockData.color1, - value: 1, - borderSide: MockData.borderSide1, - ), - PieChartSectionData( - color: MockData.color2, - value: 2, - borderSide: MockData.borderSide2, - ), - PieChartSectionData( - color: MockData.color3, - value: 3, - borderSide: MockData.borderSide3, - ), - PieChartSectionData( - color: MockData.color4, - value: 4, - borderSide: MockData.borderSide4, - ), - ], - ); - final barChartPainter = PieChartPainter(); - - final mockCanvasWrapper = MockCanvasWrapper(); - when(mockCanvasWrapper.size).thenAnswer((realInvocation) => viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - - final clipPathResults = >[]; - when(mockCanvasWrapper.clipPath(captureAny)).thenAnswer((inv) { - clipPathResults.add({ - 'path': inv.positionalArguments[0] as Path, - }); - }); - - final drawPathResults = >[]; - when(mockCanvasWrapper.drawPath(captureAny, captureAny)) - .thenAnswer((inv) { - final paint = inv.positionalArguments[1] as Paint; - drawPathResults.add({ - 'path': inv.positionalArguments[0] as Path, - 'paint_color': paint.color, - 'paint_style': paint.style, - 'paint_stroke_width': paint.strokeWidth, - }); - }); - - barChartPainter - ..drawSectionStroke( - data.sections[0], - MockData.path1, - mockCanvasWrapper, - viewSize, - ) - ..drawSectionStroke( - data.sections[1], - MockData.path2, - mockCanvasWrapper, - viewSize, - ) - ..drawSectionStroke( - data.sections[2], - MockData.path3, - mockCanvasWrapper, - viewSize, - ) - ..drawSectionStroke( - data.sections[3], - MockData.path4, - mockCanvasWrapper, - viewSize, - ); - - verify( - mockCanvasWrapper.saveLayer( - Rect.fromLTWH(0, 0, viewSize.width, viewSize.height), - any, - ), - ).called(4); - expect(clipPathResults.length, 4); - expect(clipPathResults[0]['path'], MockData.path1); - expect(clipPathResults[1]['path'], MockData.path2); - expect(clipPathResults[2]['path'], MockData.path3); - expect(clipPathResults[3]['path'], MockData.path4); - - expect(drawPathResults.length, 4); - - expect(drawPathResults[0]['path'], MockData.path1); - expect(drawPathResults[0]['paint_color'], MockData.color1); - expect(drawPathResults[0]['paint_style'], PaintingStyle.stroke); - expect( - drawPathResults[0]['paint_stroke_width'], - MockData.borderSide1.width * 2, - ); - - expect(drawPathResults[1]['path'], MockData.path2); - expect(drawPathResults[1]['paint_color'], MockData.color2); - expect(drawPathResults[1]['paint_style'], PaintingStyle.stroke); - expect( - drawPathResults[1]['paint_stroke_width'], - MockData.borderSide2.width * 2, - ); - - expect(drawPathResults[2]['path'], MockData.path3); - expect(drawPathResults[2]['paint_color'], MockData.color3); - expect(drawPathResults[2]['paint_style'], PaintingStyle.stroke); - expect( - drawPathResults[2]['paint_stroke_width'], - MockData.borderSide3.width * 2, - ); - - expect(drawPathResults[3]['path'], MockData.path4); - expect(drawPathResults[3]['paint_color'], MockData.color4); - expect(drawPathResults[3]['paint_style'], PaintingStyle.stroke); - expect( - drawPathResults[3]['paint_stroke_width'], - MockData.borderSide4.width * 2, - ); - - verify(mockCanvasWrapper.restore()).called(4); - }); - }); - - group('calculateCenterRadius()', () { - test('test 1', () { - const viewSize = Size(400, 200); - final sections = [ - PieChartSectionData( - color: MockData.color1, - value: 1, - borderSide: MockData.borderSide1, - showTitle: true, - titleStyle: MockData.textStyle1, - radius: 11, - ), - PieChartSectionData( - color: MockData.color2, - value: 2, - borderSide: MockData.borderSide2, - showTitle: true, - titleStyle: MockData.textStyle2, - radius: 22, - title: '22-22', - ), - PieChartSectionData( - color: MockData.color3, - value: 3, - borderSide: MockData.borderSide3, - showTitle: false, - titleStyle: MockData.textStyle3, - radius: 33, - ), - PieChartSectionData( - color: MockData.color4, - value: 4, - borderSide: MockData.borderSide4, - showTitle: true, - titleStyle: MockData.textStyle4, - radius: 44, - ), - ]; - final barChartPainter = PieChartPainter(); - - final data1 = PieChartData(sections: sections, centerSpaceRadius: 15); - final result1 = barChartPainter.calculateCenterRadius( - viewSize, - PaintHolder(data1, data1, TextScaler.noScaling), - ); - expect(result1, 15); - - final data2 = PieChartData(sections: sections); - final result2 = barChartPainter.calculateCenterRadius( - viewSize, - PaintHolder(data2, data2, TextScaler.noScaling), - ); - expect(result2, 56); - }); - }); - - group('handleTouch()', () { - test('test 2', () { - const viewSize = Size(200, 200); - final data = PieChartData( - centerSpaceColor: MockData.color1, - sectionsSpace: 10, - sections: [ - PieChartSectionData( - color: MockData.color1, - value: 1, - borderSide: MockData.borderSide1, - radius: 10, - ), - PieChartSectionData( - color: MockData.color2, - value: 2, - borderSide: MockData.borderSide2, - radius: 20, - ), - PieChartSectionData( - color: MockData.color3, - value: 3, - borderSide: MockData.borderSide3, - radius: 30, - ), - PieChartSectionData( - color: MockData.color4, - value: 4, - borderSide: MockData.borderSide4, - radius: 40, - ), - ], - ); - final barChartPainter = PieChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - - expect( - barChartPainter - .handleTouch(const Offset(191, 110), viewSize, holder) - .touchedSectionIndex, - -1, - ); - expect( - barChartPainter - .handleTouch(const Offset(156, 110), viewSize, holder) - .touchedSectionIndex, - -1, - ); - expect( - barChartPainter - .handleTouch(const Offset(107, 190), viewSize, holder) - .touchedSectionIndex, - -1, - ); - expect( - barChartPainter - .handleTouch(const Offset(90, 156), viewSize, holder) - .touchedSectionIndex, - -1, - ); - expect( - barChartPainter - .handleTouch(const Offset(53, 131), viewSize, holder) - .touchedSectionIndex, - -1, - ); - expect( - barChartPainter - .handleTouch(const Offset(53, 131), viewSize, holder) - .touchedSectionIndex, - -1, - ); - expect( - barChartPainter - .handleTouch(const Offset(43, 94), viewSize, holder) - .touchedSectionIndex, - -1, - ); - expect( - barChartPainter - .handleTouch(const Offset(36, 57), viewSize, holder) - .touchedSectionIndex, - -1, - ); - expect( - barChartPainter - .handleTouch(const Offset(36, 57), viewSize, holder) - .touchedSectionIndex, - -1, - ); - expect( - barChartPainter - .handleTouch(const Offset(65, 4.3), viewSize, holder) - .touchedSectionIndex, - -1, - ); - expect( - barChartPainter - .handleTouch(const Offset(7, 108), viewSize, holder) - .touchedSectionIndex, - -1, - ); - - expect( - barChartPainter - .handleTouch(const Offset(159.76, 135.56), viewSize, holder) - .touchedSectionIndex, - 0, - ); - expect( - barChartPainter - .handleTouch(const Offset(169.35, 108.4), viewSize, holder) - .touchedSectionIndex, - 0, - ); - expect( - barChartPainter - .handleTouch(const Offset(162.32, 109.37), viewSize, holder) - .touchedSectionIndex, - 0, - ); - - expect( - barChartPainter - .handleTouch(const Offset(146.67, 144.94), viewSize, holder) - .touchedSectionIndex, - 1, - ); - expect( - barChartPainter - .handleTouch(const Offset(121.06, 160.38), viewSize, holder) - .touchedSectionIndex, - 1, - ); - expect( - barChartPainter - .handleTouch(const Offset(89.66, 163.60), viewSize, holder) - .touchedSectionIndex, - 1, - ); - expect( - barChartPainter - .handleTouch(const Offset(85.04, 177.85), viewSize, holder) - .touchedSectionIndex, - 1, - ); - - expect( - barChartPainter - .handleTouch(const Offset(75.2, 158.4), viewSize, holder) - .touchedSectionIndex, - 2, - ); - expect( - barChartPainter - .handleTouch(const Offset(66.2, 177), viewSize, holder) - .touchedSectionIndex, - 2, - ); - expect( - barChartPainter - .handleTouch(const Offset(40.3, 124.8), viewSize, holder) - .touchedSectionIndex, - 2, - ); - expect( - barChartPainter - .handleTouch(const Offset(19.1, 131), viewSize, holder) - .touchedSectionIndex, - 2, - ); - expect( - barChartPainter - .handleTouch(const Offset(19.1, 131), viewSize, holder) - .touchedSectionIndex, - 2, - ); - expect( - barChartPainter - .handleTouch(const Offset(17.7, 83.7), viewSize, holder) - .touchedSectionIndex, - 2, - ); - expect( - barChartPainter - .handleTouch(const Offset(27.8, 59.4), viewSize, holder) - .touchedSectionIndex, - 2, - ); - expect( - barChartPainter - .handleTouch(const Offset(44.1, 75.2), viewSize, holder) - .touchedSectionIndex, - 2, - ); - - expect( - barChartPainter - .handleTouch(const Offset(56.1, 55.6), viewSize, holder) - .touchedSectionIndex, - 3, - ); - expect( - barChartPainter - .handleTouch(const Offset(42.1, 46.3), viewSize, holder) - .touchedSectionIndex, - 3, - ); - expect( - barChartPainter - .handleTouch(const Offset(30.9, 38.4), viewSize, holder) - .touchedSectionIndex, - 3, - ); - expect( - barChartPainter - .handleTouch(const Offset(55.3, 17.8), viewSize, holder) - .touchedSectionIndex, - 3, - ); - expect( - barChartPainter - .handleTouch(const Offset(81.2, 39.8), viewSize, holder) - .touchedSectionIndex, - 3, - ); - expect( - barChartPainter - .handleTouch(const Offset(100.5, 4.1), viewSize, holder) - .touchedSectionIndex, - 3, - ); - expect( - barChartPainter - .handleTouch(const Offset(126.7, 40.6), viewSize, holder) - .touchedSectionIndex, - 3, - ); - expect( - barChartPainter - .handleTouch(const Offset(181.8, 51.3), viewSize, holder) - .touchedSectionIndex, - 3, - ); - expect( - barChartPainter - .handleTouch(const Offset(174.5, 40.2), viewSize, holder) - .touchedSectionIndex, - 3, - ); - expect( - barChartPainter - .handleTouch(const Offset(164.5, 91.4), viewSize, holder) - .touchedSectionIndex, - 3, - ); - }); - }); - - group('getBadgeOffsets()', () { - test('test 1', () { - const viewSize = Size(200, 200); - final data = PieChartData( - centerSpaceColor: MockData.color1, - sectionsSpace: 10, - sections: [ - PieChartSectionData( - color: MockData.color1, - value: 1, - borderSide: MockData.borderSide1, - ), - PieChartSectionData( - color: MockData.color2, - value: 2, - borderSide: MockData.borderSide2, - ), - PieChartSectionData( - color: MockData.color3, - value: 3, - borderSide: MockData.borderSide3, - ), - PieChartSectionData( - color: MockData.color4, - value: 4, - borderSide: MockData.borderSide4, - ), - ], - ); - final barChartPainter = PieChartPainter(); - final holder = PaintHolder( - data, - data, - TextScaler.noScaling, - ); - - final result = barChartPainter.getBadgeOffsets(viewSize, holder); - expect( - result, - { - 0: const Offset(176.0845213036123, 124.7213595499958), - 1: const Offset(124.7213595499958, 176.0845213036123), - 2: const Offset(23.915478696387723, 124.7213595499958), - 3: const Offset(124.72135954999578, 23.91547869638771), - }, - ); - }); - }); -} diff --git a/test/chart/pie_chart/pie_chart_painter_test.mocks.dart b/test/chart/pie_chart/pie_chart_painter_test.mocks.dart deleted file mode 100644 index d469bbdcad..0000000000 --- a/test/chart/pie_chart/pie_chart_painter_test.mocks.dart +++ /dev/null @@ -1,1435 +0,0 @@ -// Mocks generated by Mockito 5.4.2 from annotations -// in fl_chart/test/chart/pie_chart/pie_chart_painter_test.dart. -// Do not manually edit this file. - -// ignore_for_file: no_leading_underscores_for_library_prefixes -import 'dart:typed_data' as _i5; -import 'dart:ui' as _i2; - -import 'package:fl_chart/fl_chart.dart' as _i7; -import 'package:fl_chart/src/utils/canvas_wrapper.dart' as _i6; -import 'package:fl_chart/src/utils/utils.dart' as _i8; -import 'package:flutter/cupertino.dart' as _i3; -import 'package:flutter/foundation.dart' as _i4; -import 'package:mockito/mockito.dart' as _i1; - -// ignore_for_file: type=lint -// ignore_for_file: avoid_redundant_argument_values -// ignore_for_file: avoid_setters_without_getters -// ignore_for_file: comment_references -// ignore_for_file: implementation_imports -// ignore_for_file: invalid_use_of_visible_for_testing_member -// ignore_for_file: prefer_const_constructors -// ignore_for_file: unnecessary_parenthesis -// ignore_for_file: camel_case_types -// ignore_for_file: subtype_of_sealed_class - -class _FakeRect_0 extends _i1.SmartFake implements _i2.Rect { - _FakeRect_0( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); -} - -class _FakeCanvas_1 extends _i1.SmartFake implements _i2.Canvas { - _FakeCanvas_1( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); -} - -class _FakeSize_2 extends _i1.SmartFake implements _i2.Size { - _FakeSize_2( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); -} - -class _FakeWidget_3 extends _i1.SmartFake implements _i3.Widget { - _FakeWidget_3( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); - - @override - String toString({_i3.DiagnosticLevel? minLevel = _i3.DiagnosticLevel.info}) => - super.toString(); -} - -class _FakeInheritedWidget_4 extends _i1.SmartFake - implements _i3.InheritedWidget { - _FakeInheritedWidget_4( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); - - @override - String toString({_i3.DiagnosticLevel? minLevel = _i3.DiagnosticLevel.info}) => - super.toString(); -} - -class _FakeDiagnosticsNode_5 extends _i1.SmartFake - implements _i3.DiagnosticsNode { - _FakeDiagnosticsNode_5( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); - - @override - String toString({ - _i4.TextTreeConfiguration? parentConfiguration, - _i3.DiagnosticLevel? minLevel = _i3.DiagnosticLevel.info, - }) => - super.toString(); -} - -class _FakeOffset_6 extends _i1.SmartFake implements _i2.Offset { - _FakeOffset_6( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); -} - -class _FakeBorderSide_7 extends _i1.SmartFake implements _i3.BorderSide { - _FakeBorderSide_7( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); - - @override - String toString({_i3.DiagnosticLevel? minLevel = _i3.DiagnosticLevel.info}) => - super.toString(); -} - -class _FakeTextStyle_8 extends _i1.SmartFake implements _i3.TextStyle { - _FakeTextStyle_8( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); - - @override - String toString({_i3.DiagnosticLevel? minLevel = _i3.DiagnosticLevel.info}) => - super.toString(); -} - -/// A class which mocks [Canvas]. -/// -/// See the documentation for Mockito's code generation for more information. -class MockCanvas extends _i1.Mock implements _i2.Canvas { - MockCanvas() { - _i1.throwOnMissingStub(this); - } - - @override - void save() => super.noSuchMethod( - Invocation.method( - #save, - [], - ), - returnValueForMissingStub: null, - ); - - @override - void saveLayer( - _i2.Rect? bounds, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #saveLayer, - [ - bounds, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void restore() => super.noSuchMethod( - Invocation.method( - #restore, - [], - ), - returnValueForMissingStub: null, - ); - - @override - void restoreToCount(int? count) => super.noSuchMethod( - Invocation.method( - #restoreToCount, - [count], - ), - returnValueForMissingStub: null, - ); - - @override - int getSaveCount() => (super.noSuchMethod( - Invocation.method( - #getSaveCount, - [], - ), - returnValue: 0, - ) as int); - - @override - void translate( - double? dx, - double? dy, - ) => - super.noSuchMethod( - Invocation.method( - #translate, - [ - dx, - dy, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void scale( - double? sx, [ - double? sy, - ]) => - super.noSuchMethod( - Invocation.method( - #scale, - [ - sx, - sy, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void rotate(double? radians) => super.noSuchMethod( - Invocation.method( - #rotate, - [radians], - ), - returnValueForMissingStub: null, - ); - - @override - void skew( - double? sx, - double? sy, - ) => - super.noSuchMethod( - Invocation.method( - #skew, - [ - sx, - sy, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void transform(_i5.Float64List? matrix4) => super.noSuchMethod( - Invocation.method( - #transform, - [matrix4], - ), - returnValueForMissingStub: null, - ); - - @override - _i5.Float64List getTransform() => (super.noSuchMethod( - Invocation.method( - #getTransform, - [], - ), - returnValue: _i5.Float64List(0), - ) as _i5.Float64List); - - @override - void clipRect( - _i2.Rect? rect, { - _i2.ClipOp? clipOp = _i2.ClipOp.intersect, - bool? doAntiAlias = true, - }) => - super.noSuchMethod( - Invocation.method( - #clipRect, - [rect], - { - #clipOp: clipOp, - #doAntiAlias: doAntiAlias, - }, - ), - returnValueForMissingStub: null, - ); - - @override - void clipRRect( - _i2.RRect? rrect, { - bool? doAntiAlias = true, - }) => - super.noSuchMethod( - Invocation.method( - #clipRRect, - [rrect], - {#doAntiAlias: doAntiAlias}, - ), - returnValueForMissingStub: null, - ); - - @override - void clipPath( - _i2.Path? path, { - bool? doAntiAlias = true, - }) => - super.noSuchMethod( - Invocation.method( - #clipPath, - [path], - {#doAntiAlias: doAntiAlias}, - ), - returnValueForMissingStub: null, - ); - - @override - _i2.Rect getLocalClipBounds() => (super.noSuchMethod( - Invocation.method( - #getLocalClipBounds, - [], - ), - returnValue: _FakeRect_0( - this, - Invocation.method( - #getLocalClipBounds, - [], - ), - ), - ) as _i2.Rect); - - @override - _i2.Rect getDestinationClipBounds() => (super.noSuchMethod( - Invocation.method( - #getDestinationClipBounds, - [], - ), - returnValue: _FakeRect_0( - this, - Invocation.method( - #getDestinationClipBounds, - [], - ), - ), - ) as _i2.Rect); - - @override - void drawColor( - _i2.Color? color, - _i2.BlendMode? blendMode, - ) => - super.noSuchMethod( - Invocation.method( - #drawColor, - [ - color, - blendMode, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawLine( - _i2.Offset? p1, - _i2.Offset? p2, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawLine, - [ - p1, - p2, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawPaint(_i2.Paint? paint) => super.noSuchMethod( - Invocation.method( - #drawPaint, - [paint], - ), - returnValueForMissingStub: null, - ); - - @override - void drawRect( - _i2.Rect? rect, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawRect, - [ - rect, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawRRect( - _i2.RRect? rrect, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawRRect, - [ - rrect, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawDRRect( - _i2.RRect? outer, - _i2.RRect? inner, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawDRRect, - [ - outer, - inner, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawOval( - _i2.Rect? rect, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawOval, - [ - rect, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawCircle( - _i2.Offset? c, - double? radius, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawCircle, - [ - c, - radius, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawArc( - _i2.Rect? rect, - double? startAngle, - double? sweepAngle, - bool? useCenter, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawArc, - [ - rect, - startAngle, - sweepAngle, - useCenter, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawPath( - _i2.Path? path, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawPath, - [ - path, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawImage( - _i2.Image? image, - _i2.Offset? offset, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawImage, - [ - image, - offset, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawImageRect( - _i2.Image? image, - _i2.Rect? src, - _i2.Rect? dst, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawImageRect, - [ - image, - src, - dst, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawImageNine( - _i2.Image? image, - _i2.Rect? center, - _i2.Rect? dst, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawImageNine, - [ - image, - center, - dst, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawPicture(_i2.Picture? picture) => super.noSuchMethod( - Invocation.method( - #drawPicture, - [picture], - ), - returnValueForMissingStub: null, - ); - - @override - void drawParagraph( - _i2.Paragraph? paragraph, - _i2.Offset? offset, - ) => - super.noSuchMethod( - Invocation.method( - #drawParagraph, - [ - paragraph, - offset, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawPoints( - _i2.PointMode? pointMode, - List<_i2.Offset>? points, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawPoints, - [ - pointMode, - points, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawRawPoints( - _i2.PointMode? pointMode, - _i5.Float32List? points, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawRawPoints, - [ - pointMode, - points, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawVertices( - _i2.Vertices? vertices, - _i2.BlendMode? blendMode, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawVertices, - [ - vertices, - blendMode, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawAtlas( - _i2.Image? atlas, - List<_i2.RSTransform>? transforms, - List<_i2.Rect>? rects, - List<_i2.Color>? colors, - _i2.BlendMode? blendMode, - _i2.Rect? cullRect, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawAtlas, - [ - atlas, - transforms, - rects, - colors, - blendMode, - cullRect, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawRawAtlas( - _i2.Image? atlas, - _i5.Float32List? rstTransforms, - _i5.Float32List? rects, - _i5.Int32List? colors, - _i2.BlendMode? blendMode, - _i2.Rect? cullRect, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawRawAtlas, - [ - atlas, - rstTransforms, - rects, - colors, - blendMode, - cullRect, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawShadow( - _i2.Path? path, - _i2.Color? color, - double? elevation, - bool? transparentOccluder, - ) => - super.noSuchMethod( - Invocation.method( - #drawShadow, - [ - path, - color, - elevation, - transparentOccluder, - ], - ), - returnValueForMissingStub: null, - ); -} - -/// A class which mocks [CanvasWrapper]. -/// -/// See the documentation for Mockito's code generation for more information. -class MockCanvasWrapper extends _i1.Mock implements _i6.CanvasWrapper { - MockCanvasWrapper() { - _i1.throwOnMissingStub(this); - } - - @override - _i2.Canvas get canvas => (super.noSuchMethod( - Invocation.getter(#canvas), - returnValue: _FakeCanvas_1( - this, - Invocation.getter(#canvas), - ), - ) as _i2.Canvas); - - @override - _i2.Size get size => (super.noSuchMethod( - Invocation.getter(#size), - returnValue: _FakeSize_2( - this, - Invocation.getter(#size), - ), - ) as _i2.Size); - - @override - void drawRRect( - _i2.RRect? rrect, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawRRect, - [ - rrect, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void save() => super.noSuchMethod( - Invocation.method( - #save, - [], - ), - returnValueForMissingStub: null, - ); - - @override - void restore() => super.noSuchMethod( - Invocation.method( - #restore, - [], - ), - returnValueForMissingStub: null, - ); - - @override - void clipRect( - _i2.Rect? rect, { - _i2.ClipOp? clipOp = _i2.ClipOp.intersect, - bool? doAntiAlias = true, - }) => - super.noSuchMethod( - Invocation.method( - #clipRect, - [rect], - { - #clipOp: clipOp, - #doAntiAlias: doAntiAlias, - }, - ), - returnValueForMissingStub: null, - ); - - @override - void translate( - double? dx, - double? dy, - ) => - super.noSuchMethod( - Invocation.method( - #translate, - [ - dx, - dy, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void rotate(double? radius) => super.noSuchMethod( - Invocation.method( - #rotate, - [radius], - ), - returnValueForMissingStub: null, - ); - - @override - void drawPath( - _i2.Path? path, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawPath, - [ - path, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void saveLayer( - _i2.Rect? bounds, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #saveLayer, - [ - bounds, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawPicture(_i2.Picture? picture) => super.noSuchMethod( - Invocation.method( - #drawPicture, - [picture], - ), - returnValueForMissingStub: null, - ); - - @override - void drawImage( - _i2.Image? image, - _i2.Offset? offset, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawImage, - [ - image, - offset, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void clipPath( - _i2.Path? path, { - bool? doAntiAlias = true, - }) => - super.noSuchMethod( - Invocation.method( - #clipPath, - [path], - {#doAntiAlias: doAntiAlias}, - ), - returnValueForMissingStub: null, - ); - - @override - void drawRect( - _i2.Rect? rect, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawRect, - [ - rect, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawLine( - _i2.Offset? p1, - _i2.Offset? p2, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawLine, - [ - p1, - p2, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawCircle( - _i2.Offset? center, - double? radius, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawCircle, - [ - center, - radius, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawArc( - _i2.Rect? rect, - double? startAngle, - double? sweepAngle, - bool? useCenter, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawArc, - [ - rect, - startAngle, - sweepAngle, - useCenter, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawText( - _i3.TextPainter? tp, - _i2.Offset? offset, [ - double? rotateAngle, - ]) => - super.noSuchMethod( - Invocation.method( - #drawText, - [ - tp, - offset, - rotateAngle, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawDot( - _i7.FlDotPainter? painter, - _i7.FlSpot? spot, - _i2.Offset? offset, - ) => - super.noSuchMethod( - Invocation.method( - #drawDot, - [ - painter, - spot, - offset, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawRotated({ - required _i2.Size? size, - _i2.Offset? rotationOffset = _i2.Offset.zero, - _i2.Offset? drawOffset = _i2.Offset.zero, - required double? angle, - required _i6.DrawCallback? drawCallback, - }) => - super.noSuchMethod( - Invocation.method( - #drawRotated, - [], - { - #size: size, - #rotationOffset: rotationOffset, - #drawOffset: drawOffset, - #angle: angle, - #drawCallback: drawCallback, - }, - ), - returnValueForMissingStub: null, - ); - - @override - void drawDashedLine( - _i2.Offset? from, - _i2.Offset? to, - _i2.Paint? painter, - List? dashArray, - ) => - super.noSuchMethod( - Invocation.method( - #drawDashedLine, - [ - from, - to, - painter, - dashArray, - ], - ), - returnValueForMissingStub: null, - ); -} - -/// A class which mocks [BuildContext]. -/// -/// See the documentation for Mockito's code generation for more information. -class MockBuildContext extends _i1.Mock implements _i3.BuildContext { - MockBuildContext() { - _i1.throwOnMissingStub(this); - } - - @override - _i3.Widget get widget => (super.noSuchMethod( - Invocation.getter(#widget), - returnValue: _FakeWidget_3( - this, - Invocation.getter(#widget), - ), - ) as _i3.Widget); - - @override - bool get mounted => (super.noSuchMethod( - Invocation.getter(#mounted), - returnValue: false, - ) as bool); - - @override - bool get debugDoingBuild => (super.noSuchMethod( - Invocation.getter(#debugDoingBuild), - returnValue: false, - ) as bool); - - @override - _i3.InheritedWidget dependOnInheritedElement( - _i3.InheritedElement? ancestor, { - Object? aspect, - }) => - (super.noSuchMethod( - Invocation.method( - #dependOnInheritedElement, - [ancestor], - {#aspect: aspect}, - ), - returnValue: _FakeInheritedWidget_4( - this, - Invocation.method( - #dependOnInheritedElement, - [ancestor], - {#aspect: aspect}, - ), - ), - ) as _i3.InheritedWidget); - - @override - void visitAncestorElements(_i3.ConditionalElementVisitor? visitor) => - super.noSuchMethod( - Invocation.method( - #visitAncestorElements, - [visitor], - ), - returnValueForMissingStub: null, - ); - - @override - void visitChildElements(_i3.ElementVisitor? visitor) => super.noSuchMethod( - Invocation.method( - #visitChildElements, - [visitor], - ), - returnValueForMissingStub: null, - ); - - @override - void dispatchNotification(_i3.Notification? notification) => - super.noSuchMethod( - Invocation.method( - #dispatchNotification, - [notification], - ), - returnValueForMissingStub: null, - ); - - @override - _i3.DiagnosticsNode describeElement( - String? name, { - _i4.DiagnosticsTreeStyle? style = _i4.DiagnosticsTreeStyle.errorProperty, - }) => - (super.noSuchMethod( - Invocation.method( - #describeElement, - [name], - {#style: style}, - ), - returnValue: _FakeDiagnosticsNode_5( - this, - Invocation.method( - #describeElement, - [name], - {#style: style}, - ), - ), - ) as _i3.DiagnosticsNode); - - @override - _i3.DiagnosticsNode describeWidget( - String? name, { - _i4.DiagnosticsTreeStyle? style = _i4.DiagnosticsTreeStyle.errorProperty, - }) => - (super.noSuchMethod( - Invocation.method( - #describeWidget, - [name], - {#style: style}, - ), - returnValue: _FakeDiagnosticsNode_5( - this, - Invocation.method( - #describeWidget, - [name], - {#style: style}, - ), - ), - ) as _i3.DiagnosticsNode); - - @override - List<_i3.DiagnosticsNode> describeMissingAncestor( - {required Type? expectedAncestorType}) => - (super.noSuchMethod( - Invocation.method( - #describeMissingAncestor, - [], - {#expectedAncestorType: expectedAncestorType}, - ), - returnValue: <_i3.DiagnosticsNode>[], - ) as List<_i3.DiagnosticsNode>); - - @override - _i3.DiagnosticsNode describeOwnershipChain(String? name) => - (super.noSuchMethod( - Invocation.method( - #describeOwnershipChain, - [name], - ), - returnValue: _FakeDiagnosticsNode_5( - this, - Invocation.method( - #describeOwnershipChain, - [name], - ), - ), - ) as _i3.DiagnosticsNode); -} - -/// A class which mocks [Utils]. -/// -/// See the documentation for Mockito's code generation for more information. -class MockUtils extends _i1.Mock implements _i8.Utils { - MockUtils() { - _i1.throwOnMissingStub(this); - } - - @override - double radians(double? degrees) => (super.noSuchMethod( - Invocation.method( - #radians, - [degrees], - ), - returnValue: 0.0, - ) as double); - - @override - double degrees(double? radians) => (super.noSuchMethod( - Invocation.method( - #degrees, - [radians], - ), - returnValue: 0.0, - ) as double); - - @override - _i2.Size getDefaultSize(_i2.Size? screenSize) => (super.noSuchMethod( - Invocation.method( - #getDefaultSize, - [screenSize], - ), - returnValue: _FakeSize_2( - this, - Invocation.method( - #getDefaultSize, - [screenSize], - ), - ), - ) as _i2.Size); - - @override - double translateRotatedPosition( - double? size, - double? degree, - ) => - (super.noSuchMethod( - Invocation.method( - #translateRotatedPosition, - [ - size, - degree, - ], - ), - returnValue: 0.0, - ) as double); - - @override - _i2.Offset calculateRotationOffset( - _i2.Size? size, - double? degree, - ) => - (super.noSuchMethod( - Invocation.method( - #calculateRotationOffset, - [ - size, - degree, - ], - ), - returnValue: _FakeOffset_6( - this, - Invocation.method( - #calculateRotationOffset, - [ - size, - degree, - ], - ), - ), - ) as _i2.Offset); - - @override - _i3.BorderRadius? normalizeBorderRadius( - _i3.BorderRadius? borderRadius, - double? width, - ) => - (super.noSuchMethod(Invocation.method( - #normalizeBorderRadius, - [ - borderRadius, - width, - ], - )) as _i3.BorderRadius?); - - @override - _i3.BorderSide normalizeBorderSide( - _i3.BorderSide? borderSide, - double? width, - ) => - (super.noSuchMethod( - Invocation.method( - #normalizeBorderSide, - [ - borderSide, - width, - ], - ), - returnValue: _FakeBorderSide_7( - this, - Invocation.method( - #normalizeBorderSide, - [ - borderSide, - width, - ], - ), - ), - ) as _i3.BorderSide); - - @override - double getEfficientInterval( - double? axisViewSize, - double? diffInAxis, { - double? pixelPerInterval = 40.0, - }) => - (super.noSuchMethod( - Invocation.method( - #getEfficientInterval, - [ - axisViewSize, - diffInAxis, - ], - {#pixelPerInterval: pixelPerInterval}, - ), - returnValue: 0.0, - ) as double); - - @override - double roundInterval(double? input) => (super.noSuchMethod( - Invocation.method( - #roundInterval, - [input], - ), - returnValue: 0.0, - ) as double); - - @override - int getFractionDigits(double? value) => (super.noSuchMethod( - Invocation.method( - #getFractionDigits, - [value], - ), - returnValue: 0, - ) as int); - - @override - String formatNumber( - double? axisMin, - double? axisMax, - double? axisValue, - ) => - (super.noSuchMethod( - Invocation.method( - #formatNumber, - [ - axisMin, - axisMax, - axisValue, - ], - ), - returnValue: '', - ) as String); - - @override - _i3.TextStyle getThemeAwareTextStyle( - _i3.BuildContext? context, - _i3.TextStyle? providedStyle, - ) => - (super.noSuchMethod( - Invocation.method( - #getThemeAwareTextStyle, - [ - context, - providedStyle, - ], - ), - returnValue: _FakeTextStyle_8( - this, - Invocation.method( - #getThemeAwareTextStyle, - [ - context, - providedStyle, - ], - ), - ), - ) as _i3.TextStyle); - - @override - double getBestInitialIntervalValue( - double? min, - double? max, - double? interval, { - double? baseline = 0.0, - }) => - (super.noSuchMethod( - Invocation.method( - #getBestInitialIntervalValue, - [ - min, - max, - interval, - ], - {#baseline: baseline}, - ), - returnValue: 0.0, - ) as double); - - @override - double convertRadiusToSigma(double? radius) => (super.noSuchMethod( - Invocation.method( - #convertRadiusToSigma, - [radius], - ), - returnValue: 0.0, - ) as double); -} diff --git a/test/chart/pie_chart/pie_chart_renderer_test.dart b/test/chart/pie_chart/pie_chart_renderer_test.dart deleted file mode 100644 index 51c696e08a..0000000000 --- a/test/chart/pie_chart/pie_chart_renderer_test.dart +++ /dev/null @@ -1,102 +0,0 @@ -import 'package:fl_chart/fl_chart.dart'; -import 'package:fl_chart/src/chart/base/base_chart/base_chart_painter.dart'; -import 'package:fl_chart/src/chart/pie_chart/pie_chart_painter.dart'; -import 'package:fl_chart/src/chart/pie_chart/pie_chart_renderer.dart'; -import 'package:fl_chart/src/utils/canvas_wrapper.dart'; -import 'package:flutter/cupertino.dart'; -import 'package:flutter_test/flutter_test.dart'; -import 'package:mockito/annotations.dart'; -import 'package:mockito/mockito.dart'; - -import '../data_pool.dart'; -import 'pie_chart_renderer_test.mocks.dart'; - -@GenerateMocks([Canvas, PaintingContext, BuildContext, PieChartPainter]) -void main() { - group('PieChartRenderer', () { - final data = PieChartData(); - - final targetData = PieChartData(centerSpaceRadius: 12); - - const textScaler = TextScaler.linear(4); - - final mockBuildContext = MockBuildContext(); - final renderBarChart = RenderPieChart( - mockBuildContext, - data, - targetData, - textScaler, - ); - - final mockPainter = MockPieChartPainter(); - final mockPaintingContext = MockPaintingContext(); - final mockCanvas = MockCanvas(); - const mockSize = Size(44, 44); - when(mockPaintingContext.canvas).thenAnswer((realInvocation) => mockCanvas); - renderBarChart - ..mockTestSize = mockSize - ..painter = mockPainter; - - test('test 1 correct data set', () { - expect(renderBarChart.data == data, true); - expect(renderBarChart.data == targetData, false); - expect(renderBarChart.targetData == targetData, true); - expect(renderBarChart.textScaler == textScaler, true); - expect(renderBarChart.paintHolder.data == data, true); - expect(renderBarChart.paintHolder.targetData == targetData, true); - expect(renderBarChart.paintHolder.textScaler == textScaler, true); - }); - - test('test 2 check paint function', () { - renderBarChart.paint(mockPaintingContext, const Offset(10, 10)); - verify(mockCanvas.save()).called(1); - verify(mockCanvas.translate(10, 10)).called(1); - final result = verify(mockPainter.paint(any, captureAny, captureAny)); - expect(result.callCount, 1); - - final canvasWrapper = result.captured[0] as CanvasWrapper; - expect(canvasWrapper.size, const Size(44, 44)); - expect(canvasWrapper.canvas, mockCanvas); - - final paintHolder = result.captured[1] as PaintHolder; - expect(paintHolder.data, data); - expect(paintHolder.targetData, targetData); - expect(paintHolder.textScaler, textScaler); - - verify(mockCanvas.restore()).called(1); - }); - - test('test 3 check getResponseAtLocation function', () { - final results = >[]; - when(mockPainter.handleTouch(captureAny, captureAny, captureAny)) - .thenAnswer((inv) { - results.add({ - 'local_position': inv.positionalArguments[0] as Offset, - 'size': inv.positionalArguments[1] as Size, - 'paint_holder': inv.positionalArguments[2] as PaintHolder, - }); - return MockData.pieTouchedSection1; - }); - final touchResponse = - renderBarChart.getResponseAtLocation(MockData.offset1); - expect(touchResponse.touchedSection, MockData.pieTouchedSection1); - expect(results[0]['local_position'] as Offset, MockData.offset1); - expect(results[0]['size'] as Size, mockSize); - final paintHolder = results[0]['paint_holder'] as PaintHolder; - expect(paintHolder.data, data); - expect(paintHolder.targetData, targetData); - expect(paintHolder.textScaler, textScaler); - }); - - test('test 4 check setters', () { - renderBarChart - ..data = targetData - ..targetData = data - ..textScaler = const TextScaler.linear(22); - - expect(renderBarChart.data, targetData); - expect(renderBarChart.targetData, data); - expect(renderBarChart.textScaler, const TextScaler.linear(22)); - }); - }); -} diff --git a/test/chart/pie_chart/pie_chart_renderer_test.mocks.dart b/test/chart/pie_chart/pie_chart_renderer_test.mocks.dart deleted file mode 100644 index 3cfce1762f..0000000000 --- a/test/chart/pie_chart/pie_chart_renderer_test.mocks.dart +++ /dev/null @@ -1,1514 +0,0 @@ -// Mocks generated by Mockito 5.4.2 from annotations -// in fl_chart/test/chart/pie_chart/pie_chart_renderer_test.dart. -// Do not manually edit this file. - -// ignore_for_file: no_leading_underscores_for_library_prefixes -import 'dart:typed_data' as _i8; -import 'dart:ui' as _i2; - -import 'package:fl_chart/fl_chart.dart' as _i7; -import 'package:fl_chart/src/chart/base/base_chart/base_chart_painter.dart' - as _i13; -import 'package:fl_chart/src/chart/base/line.dart' as _i14; -import 'package:fl_chart/src/chart/pie_chart/pie_chart_painter.dart' as _i11; -import 'package:fl_chart/src/utils/canvas_wrapper.dart' as _i12; -import 'package:flutter/foundation.dart' as _i5; -import 'package:flutter/gestures.dart' as _i9; -import 'package:flutter/material.dart' as _i6; -import 'package:flutter/rendering.dart' as _i3; -import 'package:flutter/src/rendering/layer.dart' as _i4; -import 'package:flutter/src/widgets/notification_listener.dart' as _i10; -import 'package:mockito/mockito.dart' as _i1; - -// ignore_for_file: type=lint -// ignore_for_file: avoid_redundant_argument_values -// ignore_for_file: avoid_setters_without_getters -// ignore_for_file: comment_references -// ignore_for_file: implementation_imports -// ignore_for_file: invalid_use_of_visible_for_testing_member -// ignore_for_file: prefer_const_constructors -// ignore_for_file: unnecessary_parenthesis -// ignore_for_file: camel_case_types -// ignore_for_file: subtype_of_sealed_class - -class _FakeRect_0 extends _i1.SmartFake implements _i2.Rect { - _FakeRect_0( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); -} - -class _FakeCanvas_1 extends _i1.SmartFake implements _i2.Canvas { - _FakeCanvas_1( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); -} - -class _FakePaintingContext_2 extends _i1.SmartFake - implements _i3.PaintingContext { - _FakePaintingContext_2( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); -} - -class _FakeColorFilterLayer_3 extends _i1.SmartFake - implements _i4.ColorFilterLayer { - _FakeColorFilterLayer_3( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); - - @override - String toString({_i5.DiagnosticLevel? minLevel = _i5.DiagnosticLevel.info}) => - super.toString(); -} - -class _FakeOpacityLayer_4 extends _i1.SmartFake implements _i4.OpacityLayer { - _FakeOpacityLayer_4( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); - - @override - String toString({_i5.DiagnosticLevel? minLevel = _i5.DiagnosticLevel.info}) => - super.toString(); -} - -class _FakeWidget_5 extends _i1.SmartFake implements _i6.Widget { - _FakeWidget_5( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); - - @override - String toString({_i5.DiagnosticLevel? minLevel = _i5.DiagnosticLevel.info}) => - super.toString(); -} - -class _FakeInheritedWidget_6 extends _i1.SmartFake - implements _i6.InheritedWidget { - _FakeInheritedWidget_6( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); - - @override - String toString({_i5.DiagnosticLevel? minLevel = _i5.DiagnosticLevel.info}) => - super.toString(); -} - -class _FakeDiagnosticsNode_7 extends _i1.SmartFake - implements _i5.DiagnosticsNode { - _FakeDiagnosticsNode_7( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); - - @override - String toString({ - _i5.TextTreeConfiguration? parentConfiguration, - _i5.DiagnosticLevel? minLevel = _i5.DiagnosticLevel.info, - }) => - super.toString(); -} - -class _FakePath_8 extends _i1.SmartFake implements _i2.Path { - _FakePath_8( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); -} - -class _FakePieTouchedSection_9 extends _i1.SmartFake - implements _i7.PieTouchedSection { - _FakePieTouchedSection_9( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); -} - -/// A class which mocks [Canvas]. -/// -/// See the documentation for Mockito's code generation for more information. -class MockCanvas extends _i1.Mock implements _i2.Canvas { - MockCanvas() { - _i1.throwOnMissingStub(this); - } - - @override - void save() => super.noSuchMethod( - Invocation.method( - #save, - [], - ), - returnValueForMissingStub: null, - ); - - @override - void saveLayer( - _i2.Rect? bounds, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #saveLayer, - [ - bounds, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void restore() => super.noSuchMethod( - Invocation.method( - #restore, - [], - ), - returnValueForMissingStub: null, - ); - - @override - void restoreToCount(int? count) => super.noSuchMethod( - Invocation.method( - #restoreToCount, - [count], - ), - returnValueForMissingStub: null, - ); - - @override - int getSaveCount() => (super.noSuchMethod( - Invocation.method( - #getSaveCount, - [], - ), - returnValue: 0, - ) as int); - - @override - void translate( - double? dx, - double? dy, - ) => - super.noSuchMethod( - Invocation.method( - #translate, - [ - dx, - dy, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void scale( - double? sx, [ - double? sy, - ]) => - super.noSuchMethod( - Invocation.method( - #scale, - [ - sx, - sy, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void rotate(double? radians) => super.noSuchMethod( - Invocation.method( - #rotate, - [radians], - ), - returnValueForMissingStub: null, - ); - - @override - void skew( - double? sx, - double? sy, - ) => - super.noSuchMethod( - Invocation.method( - #skew, - [ - sx, - sy, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void transform(_i8.Float64List? matrix4) => super.noSuchMethod( - Invocation.method( - #transform, - [matrix4], - ), - returnValueForMissingStub: null, - ); - - @override - _i8.Float64List getTransform() => (super.noSuchMethod( - Invocation.method( - #getTransform, - [], - ), - returnValue: _i8.Float64List(0), - ) as _i8.Float64List); - - @override - void clipRect( - _i2.Rect? rect, { - _i2.ClipOp? clipOp = _i2.ClipOp.intersect, - bool? doAntiAlias = true, - }) => - super.noSuchMethod( - Invocation.method( - #clipRect, - [rect], - { - #clipOp: clipOp, - #doAntiAlias: doAntiAlias, - }, - ), - returnValueForMissingStub: null, - ); - - @override - void clipRRect( - _i2.RRect? rrect, { - bool? doAntiAlias = true, - }) => - super.noSuchMethod( - Invocation.method( - #clipRRect, - [rrect], - {#doAntiAlias: doAntiAlias}, - ), - returnValueForMissingStub: null, - ); - - @override - void clipPath( - _i2.Path? path, { - bool? doAntiAlias = true, - }) => - super.noSuchMethod( - Invocation.method( - #clipPath, - [path], - {#doAntiAlias: doAntiAlias}, - ), - returnValueForMissingStub: null, - ); - - @override - _i2.Rect getLocalClipBounds() => (super.noSuchMethod( - Invocation.method( - #getLocalClipBounds, - [], - ), - returnValue: _FakeRect_0( - this, - Invocation.method( - #getLocalClipBounds, - [], - ), - ), - ) as _i2.Rect); - - @override - _i2.Rect getDestinationClipBounds() => (super.noSuchMethod( - Invocation.method( - #getDestinationClipBounds, - [], - ), - returnValue: _FakeRect_0( - this, - Invocation.method( - #getDestinationClipBounds, - [], - ), - ), - ) as _i2.Rect); - - @override - void drawColor( - _i2.Color? color, - _i2.BlendMode? blendMode, - ) => - super.noSuchMethod( - Invocation.method( - #drawColor, - [ - color, - blendMode, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawLine( - _i2.Offset? p1, - _i2.Offset? p2, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawLine, - [ - p1, - p2, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawPaint(_i2.Paint? paint) => super.noSuchMethod( - Invocation.method( - #drawPaint, - [paint], - ), - returnValueForMissingStub: null, - ); - - @override - void drawRect( - _i2.Rect? rect, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawRect, - [ - rect, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawRRect( - _i2.RRect? rrect, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawRRect, - [ - rrect, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawDRRect( - _i2.RRect? outer, - _i2.RRect? inner, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawDRRect, - [ - outer, - inner, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawOval( - _i2.Rect? rect, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawOval, - [ - rect, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawCircle( - _i2.Offset? c, - double? radius, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawCircle, - [ - c, - radius, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawArc( - _i2.Rect? rect, - double? startAngle, - double? sweepAngle, - bool? useCenter, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawArc, - [ - rect, - startAngle, - sweepAngle, - useCenter, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawPath( - _i2.Path? path, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawPath, - [ - path, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawImage( - _i2.Image? image, - _i2.Offset? offset, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawImage, - [ - image, - offset, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawImageRect( - _i2.Image? image, - _i2.Rect? src, - _i2.Rect? dst, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawImageRect, - [ - image, - src, - dst, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawImageNine( - _i2.Image? image, - _i2.Rect? center, - _i2.Rect? dst, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawImageNine, - [ - image, - center, - dst, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawPicture(_i2.Picture? picture) => super.noSuchMethod( - Invocation.method( - #drawPicture, - [picture], - ), - returnValueForMissingStub: null, - ); - - @override - void drawParagraph( - _i2.Paragraph? paragraph, - _i2.Offset? offset, - ) => - super.noSuchMethod( - Invocation.method( - #drawParagraph, - [ - paragraph, - offset, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawPoints( - _i2.PointMode? pointMode, - List<_i2.Offset>? points, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawPoints, - [ - pointMode, - points, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawRawPoints( - _i2.PointMode? pointMode, - _i8.Float32List? points, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawRawPoints, - [ - pointMode, - points, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawVertices( - _i2.Vertices? vertices, - _i2.BlendMode? blendMode, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawVertices, - [ - vertices, - blendMode, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawAtlas( - _i2.Image? atlas, - List<_i2.RSTransform>? transforms, - List<_i2.Rect>? rects, - List<_i2.Color>? colors, - _i2.BlendMode? blendMode, - _i2.Rect? cullRect, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawAtlas, - [ - atlas, - transforms, - rects, - colors, - blendMode, - cullRect, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawRawAtlas( - _i2.Image? atlas, - _i8.Float32List? rstTransforms, - _i8.Float32List? rects, - _i8.Int32List? colors, - _i2.BlendMode? blendMode, - _i2.Rect? cullRect, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawRawAtlas, - [ - atlas, - rstTransforms, - rects, - colors, - blendMode, - cullRect, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawShadow( - _i2.Path? path, - _i2.Color? color, - double? elevation, - bool? transparentOccluder, - ) => - super.noSuchMethod( - Invocation.method( - #drawShadow, - [ - path, - color, - elevation, - transparentOccluder, - ], - ), - returnValueForMissingStub: null, - ); -} - -/// A class which mocks [PaintingContext]. -/// -/// See the documentation for Mockito's code generation for more information. -class MockPaintingContext extends _i1.Mock implements _i3.PaintingContext { - MockPaintingContext() { - _i1.throwOnMissingStub(this); - } - - @override - _i2.Rect get estimatedBounds => (super.noSuchMethod( - Invocation.getter(#estimatedBounds), - returnValue: _FakeRect_0( - this, - Invocation.getter(#estimatedBounds), - ), - ) as _i2.Rect); - - @override - _i2.Canvas get canvas => (super.noSuchMethod( - Invocation.getter(#canvas), - returnValue: _FakeCanvas_1( - this, - Invocation.getter(#canvas), - ), - ) as _i2.Canvas); - - @override - void paintChild( - _i3.RenderObject? child, - _i2.Offset? offset, - ) => - super.noSuchMethod( - Invocation.method( - #paintChild, - [ - child, - offset, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void appendLayer(_i4.Layer? layer) => super.noSuchMethod( - Invocation.method( - #appendLayer, - [layer], - ), - returnValueForMissingStub: null, - ); - - @override - _i2.VoidCallback addCompositionCallback(_i4.CompositionCallback? callback) => - (super.noSuchMethod( - Invocation.method( - #addCompositionCallback, - [callback], - ), - returnValue: () {}, - ) as _i2.VoidCallback); - - @override - void stopRecordingIfNeeded() => super.noSuchMethod( - Invocation.method( - #stopRecordingIfNeeded, - [], - ), - returnValueForMissingStub: null, - ); - - @override - void setIsComplexHint() => super.noSuchMethod( - Invocation.method( - #setIsComplexHint, - [], - ), - returnValueForMissingStub: null, - ); - - @override - void setWillChangeHint() => super.noSuchMethod( - Invocation.method( - #setWillChangeHint, - [], - ), - returnValueForMissingStub: null, - ); - - @override - void addLayer(_i4.Layer? layer) => super.noSuchMethod( - Invocation.method( - #addLayer, - [layer], - ), - returnValueForMissingStub: null, - ); - - @override - void pushLayer( - _i4.ContainerLayer? childLayer, - _i3.PaintingContextCallback? painter, - _i2.Offset? offset, { - _i2.Rect? childPaintBounds, - }) => - super.noSuchMethod( - Invocation.method( - #pushLayer, - [ - childLayer, - painter, - offset, - ], - {#childPaintBounds: childPaintBounds}, - ), - returnValueForMissingStub: null, - ); - - @override - _i3.PaintingContext createChildContext( - _i4.ContainerLayer? childLayer, - _i2.Rect? bounds, - ) => - (super.noSuchMethod( - Invocation.method( - #createChildContext, - [ - childLayer, - bounds, - ], - ), - returnValue: _FakePaintingContext_2( - this, - Invocation.method( - #createChildContext, - [ - childLayer, - bounds, - ], - ), - ), - ) as _i3.PaintingContext); - - @override - _i4.ClipRectLayer? pushClipRect( - bool? needsCompositing, - _i2.Offset? offset, - _i2.Rect? clipRect, - _i3.PaintingContextCallback? painter, { - _i2.Clip? clipBehavior = _i2.Clip.hardEdge, - _i4.ClipRectLayer? oldLayer, - }) => - (super.noSuchMethod(Invocation.method( - #pushClipRect, - [ - needsCompositing, - offset, - clipRect, - painter, - ], - { - #clipBehavior: clipBehavior, - #oldLayer: oldLayer, - }, - )) as _i4.ClipRectLayer?); - - @override - _i4.ClipRRectLayer? pushClipRRect( - bool? needsCompositing, - _i2.Offset? offset, - _i2.Rect? bounds, - _i2.RRect? clipRRect, - _i3.PaintingContextCallback? painter, { - _i2.Clip? clipBehavior = _i2.Clip.antiAlias, - _i4.ClipRRectLayer? oldLayer, - }) => - (super.noSuchMethod(Invocation.method( - #pushClipRRect, - [ - needsCompositing, - offset, - bounds, - clipRRect, - painter, - ], - { - #clipBehavior: clipBehavior, - #oldLayer: oldLayer, - }, - )) as _i4.ClipRRectLayer?); - - @override - _i4.ClipPathLayer? pushClipPath( - bool? needsCompositing, - _i2.Offset? offset, - _i2.Rect? bounds, - _i2.Path? clipPath, - _i3.PaintingContextCallback? painter, { - _i2.Clip? clipBehavior = _i2.Clip.antiAlias, - _i4.ClipPathLayer? oldLayer, - }) => - (super.noSuchMethod(Invocation.method( - #pushClipPath, - [ - needsCompositing, - offset, - bounds, - clipPath, - painter, - ], - { - #clipBehavior: clipBehavior, - #oldLayer: oldLayer, - }, - )) as _i4.ClipPathLayer?); - - @override - _i4.ColorFilterLayer pushColorFilter( - _i2.Offset? offset, - _i2.ColorFilter? colorFilter, - _i3.PaintingContextCallback? painter, { - _i4.ColorFilterLayer? oldLayer, - }) => - (super.noSuchMethod( - Invocation.method( - #pushColorFilter, - [ - offset, - colorFilter, - painter, - ], - {#oldLayer: oldLayer}, - ), - returnValue: _FakeColorFilterLayer_3( - this, - Invocation.method( - #pushColorFilter, - [ - offset, - colorFilter, - painter, - ], - {#oldLayer: oldLayer}, - ), - ), - ) as _i4.ColorFilterLayer); - - @override - _i4.TransformLayer? pushTransform( - bool? needsCompositing, - _i2.Offset? offset, - _i9.Matrix4? transform, - _i3.PaintingContextCallback? painter, { - _i4.TransformLayer? oldLayer, - }) => - (super.noSuchMethod(Invocation.method( - #pushTransform, - [ - needsCompositing, - offset, - transform, - painter, - ], - {#oldLayer: oldLayer}, - )) as _i4.TransformLayer?); - - @override - _i4.OpacityLayer pushOpacity( - _i2.Offset? offset, - int? alpha, - _i3.PaintingContextCallback? painter, { - _i4.OpacityLayer? oldLayer, - }) => - (super.noSuchMethod( - Invocation.method( - #pushOpacity, - [ - offset, - alpha, - painter, - ], - {#oldLayer: oldLayer}, - ), - returnValue: _FakeOpacityLayer_4( - this, - Invocation.method( - #pushOpacity, - [ - offset, - alpha, - painter, - ], - {#oldLayer: oldLayer}, - ), - ), - ) as _i4.OpacityLayer); - - @override - void clipPathAndPaint( - _i2.Path? path, - _i2.Clip? clipBehavior, - _i2.Rect? bounds, - _i2.VoidCallback? painter, - ) => - super.noSuchMethod( - Invocation.method( - #clipPathAndPaint, - [ - path, - clipBehavior, - bounds, - painter, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void clipRRectAndPaint( - _i2.RRect? rrect, - _i2.Clip? clipBehavior, - _i2.Rect? bounds, - _i2.VoidCallback? painter, - ) => - super.noSuchMethod( - Invocation.method( - #clipRRectAndPaint, - [ - rrect, - clipBehavior, - bounds, - painter, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void clipRectAndPaint( - _i2.Rect? rect, - _i2.Clip? clipBehavior, - _i2.Rect? bounds, - _i2.VoidCallback? painter, - ) => - super.noSuchMethod( - Invocation.method( - #clipRectAndPaint, - [ - rect, - clipBehavior, - bounds, - painter, - ], - ), - returnValueForMissingStub: null, - ); -} - -/// A class which mocks [BuildContext]. -/// -/// See the documentation for Mockito's code generation for more information. -class MockBuildContext extends _i1.Mock implements _i6.BuildContext { - MockBuildContext() { - _i1.throwOnMissingStub(this); - } - - @override - _i6.Widget get widget => (super.noSuchMethod( - Invocation.getter(#widget), - returnValue: _FakeWidget_5( - this, - Invocation.getter(#widget), - ), - ) as _i6.Widget); - - @override - bool get mounted => (super.noSuchMethod( - Invocation.getter(#mounted), - returnValue: false, - ) as bool); - - @override - bool get debugDoingBuild => (super.noSuchMethod( - Invocation.getter(#debugDoingBuild), - returnValue: false, - ) as bool); - - @override - _i6.InheritedWidget dependOnInheritedElement( - _i6.InheritedElement? ancestor, { - Object? aspect, - }) => - (super.noSuchMethod( - Invocation.method( - #dependOnInheritedElement, - [ancestor], - {#aspect: aspect}, - ), - returnValue: _FakeInheritedWidget_6( - this, - Invocation.method( - #dependOnInheritedElement, - [ancestor], - {#aspect: aspect}, - ), - ), - ) as _i6.InheritedWidget); - - @override - void visitAncestorElements(_i6.ConditionalElementVisitor? visitor) => - super.noSuchMethod( - Invocation.method( - #visitAncestorElements, - [visitor], - ), - returnValueForMissingStub: null, - ); - - @override - void visitChildElements(_i6.ElementVisitor? visitor) => super.noSuchMethod( - Invocation.method( - #visitChildElements, - [visitor], - ), - returnValueForMissingStub: null, - ); - - @override - void dispatchNotification(_i10.Notification? notification) => - super.noSuchMethod( - Invocation.method( - #dispatchNotification, - [notification], - ), - returnValueForMissingStub: null, - ); - - @override - _i5.DiagnosticsNode describeElement( - String? name, { - _i5.DiagnosticsTreeStyle? style = _i5.DiagnosticsTreeStyle.errorProperty, - }) => - (super.noSuchMethod( - Invocation.method( - #describeElement, - [name], - {#style: style}, - ), - returnValue: _FakeDiagnosticsNode_7( - this, - Invocation.method( - #describeElement, - [name], - {#style: style}, - ), - ), - ) as _i5.DiagnosticsNode); - - @override - _i5.DiagnosticsNode describeWidget( - String? name, { - _i5.DiagnosticsTreeStyle? style = _i5.DiagnosticsTreeStyle.errorProperty, - }) => - (super.noSuchMethod( - Invocation.method( - #describeWidget, - [name], - {#style: style}, - ), - returnValue: _FakeDiagnosticsNode_7( - this, - Invocation.method( - #describeWidget, - [name], - {#style: style}, - ), - ), - ) as _i5.DiagnosticsNode); - - @override - List<_i5.DiagnosticsNode> describeMissingAncestor( - {required Type? expectedAncestorType}) => - (super.noSuchMethod( - Invocation.method( - #describeMissingAncestor, - [], - {#expectedAncestorType: expectedAncestorType}, - ), - returnValue: <_i5.DiagnosticsNode>[], - ) as List<_i5.DiagnosticsNode>); - - @override - _i5.DiagnosticsNode describeOwnershipChain(String? name) => - (super.noSuchMethod( - Invocation.method( - #describeOwnershipChain, - [name], - ), - returnValue: _FakeDiagnosticsNode_7( - this, - Invocation.method( - #describeOwnershipChain, - [name], - ), - ), - ) as _i5.DiagnosticsNode); -} - -/// A class which mocks [PieChartPainter]. -/// -/// See the documentation for Mockito's code generation for more information. -class MockPieChartPainter extends _i1.Mock implements _i11.PieChartPainter { - MockPieChartPainter() { - _i1.throwOnMissingStub(this); - } - - @override - void paint( - _i6.BuildContext? context, - _i12.CanvasWrapper? canvasWrapper, - _i13.PaintHolder<_i7.PieChartData>? holder, - ) => - super.noSuchMethod( - Invocation.method( - #paint, - [ - context, - canvasWrapper, - holder, - ], - ), - returnValueForMissingStub: null, - ); - - @override - List calculateSectionsAngle( - List<_i7.PieChartSectionData>? sections, - double? sumValue, - ) => - (super.noSuchMethod( - Invocation.method( - #calculateSectionsAngle, - [ - sections, - sumValue, - ], - ), - returnValue: [], - ) as List); - - @override - void drawCenterSpace( - _i12.CanvasWrapper? canvasWrapper, - double? centerRadius, - _i13.PaintHolder<_i7.PieChartData>? holder, - ) => - super.noSuchMethod( - Invocation.method( - #drawCenterSpace, - [ - canvasWrapper, - centerRadius, - holder, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawSections( - _i12.CanvasWrapper? canvasWrapper, - List? sectionsAngle, - double? centerRadius, - _i13.PaintHolder<_i7.PieChartData>? holder, - ) => - super.noSuchMethod( - Invocation.method( - #drawSections, - [ - canvasWrapper, - sectionsAngle, - centerRadius, - holder, - ], - ), - returnValueForMissingStub: null, - ); - - @override - _i2.Path generateSectionPath( - _i7.PieChartSectionData? section, - double? sectionSpace, - double? tempAngle, - double? sectionDegree, - _i2.Offset? center, - double? centerRadius, - ) => - (super.noSuchMethod( - Invocation.method( - #generateSectionPath, - [ - section, - sectionSpace, - tempAngle, - sectionDegree, - center, - centerRadius, - ], - ), - returnValue: _FakePath_8( - this, - Invocation.method( - #generateSectionPath, - [ - section, - sectionSpace, - tempAngle, - sectionDegree, - center, - centerRadius, - ], - ), - ), - ) as _i2.Path); - - @override - _i2.Path createRectPathAroundLine( - _i14.Line? line, - double? width, - ) => - (super.noSuchMethod( - Invocation.method( - #createRectPathAroundLine, - [ - line, - width, - ], - ), - returnValue: _FakePath_8( - this, - Invocation.method( - #createRectPathAroundLine, - [ - line, - width, - ], - ), - ), - ) as _i2.Path); - - @override - void drawSection( - _i7.PieChartSectionData? section, - _i2.Path? sectionPath, - _i12.CanvasWrapper? canvasWrapper, - ) => - super.noSuchMethod( - Invocation.method( - #drawSection, - [ - section, - sectionPath, - canvasWrapper, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawSectionStroke( - _i7.PieChartSectionData? section, - _i2.Path? sectionPath, - _i12.CanvasWrapper? canvasWrapper, - _i2.Size? viewSize, - ) => - super.noSuchMethod( - Invocation.method( - #drawSectionStroke, - [ - section, - sectionPath, - canvasWrapper, - viewSize, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawTexts( - _i6.BuildContext? context, - _i12.CanvasWrapper? canvasWrapper, - _i13.PaintHolder<_i7.PieChartData>? holder, - double? centerRadius, - ) => - super.noSuchMethod( - Invocation.method( - #drawTexts, - [ - context, - canvasWrapper, - holder, - centerRadius, - ], - ), - returnValueForMissingStub: null, - ); - - @override - double calculateCenterRadius( - _i2.Size? viewSize, - _i13.PaintHolder<_i7.PieChartData>? holder, - ) => - (super.noSuchMethod( - Invocation.method( - #calculateCenterRadius, - [ - viewSize, - holder, - ], - ), - returnValue: 0.0, - ) as double); - - @override - _i7.PieTouchedSection handleTouch( - _i2.Offset? localPosition, - _i2.Size? viewSize, - _i13.PaintHolder<_i7.PieChartData>? holder, - ) => - (super.noSuchMethod( - Invocation.method( - #handleTouch, - [ - localPosition, - viewSize, - holder, - ], - ), - returnValue: _FakePieTouchedSection_9( - this, - Invocation.method( - #handleTouch, - [ - localPosition, - viewSize, - holder, - ], - ), - ), - ) as _i7.PieTouchedSection); - - @override - Map getBadgeOffsets( - _i2.Size? viewSize, - _i13.PaintHolder<_i7.PieChartData>? holder, - ) => - (super.noSuchMethod( - Invocation.method( - #getBadgeOffsets, - [ - viewSize, - holder, - ], - ), - returnValue: {}, - ) as Map); -} diff --git a/test/chart/radar_chart/radar_chart_data_test.dart b/test/chart/radar_chart/radar_chart_data_test.dart deleted file mode 100644 index a45e22e80d..0000000000 --- a/test/chart/radar_chart/radar_chart_data_test.dart +++ /dev/null @@ -1,273 +0,0 @@ -import 'package:fl_chart/fl_chart.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_test/flutter_test.dart'; - -import '../data_pool.dart'; - -void main() { - group('RadarChart Data equality check', () { - test('RadarChartData equality test', () { - /// object equality test - expect(radarChartData1 == radarChartData1Clone, true); - - expect( - radarChartData1 == - radarChartData1Clone.copyWith(dataSets: [radarDataSet2]), - false, - ); - - expect( - radarChartData1 == - radarChartData1Clone.copyWith(radarBackgroundColor: Colors.black), - false, - ); - - expect( - radarChartData1 == - radarChartData1Clone.copyWith( - borderData: FlBorderData( - show: true, - border: Border.all(color: Colors.green), - ), - ), - true, - ); - - expect( - radarChartData1 == - radarChartData1Clone.copyWith( - borderData: FlBorderData( - show: false, - border: Border.all(), - ), - ), - false, - ); - - expect( - radarChartData1 == - radarChartData1Clone.copyWith( - radarBorderData: const BorderSide( - width: 200, - color: Colors.red, - ), - ), - false, - ); - - expect( - radarChartData1 == - radarChartData1Clone.copyWith( - radarShape: RadarShape.polygon, - ), - false, - ); - - expect( - radarChartData1 == - radarChartData1Clone.copyWith(radarTouchData: radarTouchData2), - false, - ); - - expect( - radarChartData1 == - radarChartData1Clone.copyWith( - gridBorderData: const BorderSide( - color: Colors.black54, - width: 2.1, - ), - ), - false, - ); - - expect( - radarChartData1 == radarChartData1Clone.copyWith(tickCount: 8), - false, - ); - - expect( - radarChartData1 == - radarChartData1Clone.copyWith(ticksTextStyle: const TextStyle()), - false, - ); - - expect( - radarChartData1 == - radarChartData1Clone.copyWith( - ticksTextStyle: radarChartData2.ticksTextStyle, - ), - false, - ); - - expect( - radarChartData1 == - radarChartData1Clone.copyWith( - tickBorderData: radarChartData2.tickBorderData, - ), - false, - ); - - expect( - radarChartData1 == - radarChartData1Clone.copyWith(titlePositionPercentageOffset: 0.2), - true, - ); - - expect( - radarChartData1 == - radarChartData1Clone.copyWith( - titlePositionPercentageOffset: - radarChartData2.titlePositionPercentageOffset, - ), - false, - ); - - expect( - radarChartData1 == - radarChartData1Clone.copyWith(titleTextStyle: const TextStyle()), - false, - ); - - expect( - radarChartData1 == - radarChartData1Clone.copyWith( - titleTextStyle: radarChartData2.titleTextStyle, - ), - false, - ); - - expect( - radarChartData1 == - radarChartData1Clone.copyWith( - titleTextStyle: radarChartData2.titleTextStyle, - ), - false, - ); - }); - - test('RadarDataSet equality test', () { - expect(radarDataSet1 == radarDataSet1Clone, true); - - expect(radarDataSet1 == radarDataSet2, false); - - expect( - radarDataSet1 == - radarDataSet1Clone.copyWith( - dataEntries: const [ - RadarEntry(value: 5), - RadarEntry(value: 5), - RadarEntry(value: 5), - ], - ), - false, - ); - - expect( - radarDataSet1 == radarDataSet1Clone.copyWith(fillColor: Colors.grey), - true, - ); - - expect( - radarDataSet1 == radarDataSet1Clone.copyWith(fillColor: Colors.pink), - false, - ); - - expect( - radarDataSet1 == radarDataSet1Clone.copyWith(borderColor: Colors.blue), - true, - ); - - expect( - radarDataSet1 == radarDataSet1Clone.copyWith(borderColor: Colors.pink), - false, - ); - - expect( - radarDataSet1 == radarDataSet1Clone.copyWith(borderWidth: 3), - true, - ); - - expect( - radarDataSet1 == radarDataSet1Clone.copyWith(borderWidth: 3.2), - false, - ); - - expect( - radarDataSet1 == radarDataSet1Clone.copyWith(borderWidth: 3.00002), - false, - ); - - expect( - radarDataSet1 == radarDataSet1Clone.copyWith(entryRadius: 3), - true, - ); - - expect( - radarDataSet1 == radarDataSet1Clone.copyWith(entryRadius: 3.2), - false, - ); - - expect( - radarDataSet1 == radarDataSet1Clone.copyWith(entryRadius: 3.002), - false, - ); - }); - - test('RadarTouchData equality test', () { - expect(radarTouchData1 == radarTouchData1Clone, true); - - expect(radarTouchData1 == radarTouchData2, false); - - expect( - radarTouchData1 == - RadarTouchData( - enabled: false, - touchCallback: radarTouchCallback, - touchSpotThreshold: 12, - ), - false, - ); - - expect( - radarTouchData1 == - RadarTouchData( - enabled: true, - touchCallback: radarTouchCallback, - touchSpotThreshold: 2, - ), - false, - ); - - expect( - radarTouchData1 == - RadarTouchData( - enabled: true, - touchCallback: (event, value) {}, - touchSpotThreshold: 12, - ), - false, - ); - - expect( - radarTouchData1 == - RadarTouchData( - enabled: true, - touchCallback: radarTouchCallback, - touchSpotThreshold: 12, - longPressDuration: Duration.zero, - ), - false, - ); - }); - - test('RadarTouchedSpot equality test', () { - expect(radarTouchedSpot1 == radarTouchedSpotClone1, true); - expect(radarTouchedSpot1 == radarTouchedSpot2, false); - expect(radarTouchedSpot1 == radarTouchedSpot3, false); - expect(radarTouchedSpot1 == radarTouchedSpot4, false); - expect(radarTouchedSpot1 == radarTouchedSpot5, false); - expect(radarTouchedSpot1 == radarTouchedSpot6, false); - expect(radarTouchedSpot1 == radarTouchedSpot7, false); - }); - }); -} diff --git a/test/chart/radar_chart/radar_chart_painter_test.dart b/test/chart/radar_chart/radar_chart_painter_test.dart deleted file mode 100644 index 2ae13fa7c3..0000000000 --- a/test/chart/radar_chart/radar_chart_painter_test.dart +++ /dev/null @@ -1,1347 +0,0 @@ -import 'package:fl_chart/fl_chart.dart'; -import 'package:fl_chart/src/chart/base/base_chart/base_chart_painter.dart'; -import 'package:fl_chart/src/chart/radar_chart/radar_chart_painter.dart'; -import 'package:fl_chart/src/utils/canvas_wrapper.dart'; -import 'package:fl_chart/src/utils/utils.dart'; -import 'package:flutter/cupertino.dart'; -import 'package:flutter_test/flutter_test.dart'; -import 'package:mockito/annotations.dart'; -import 'package:mockito/mockito.dart'; - -import '../data_pool.dart'; -import 'radar_chart_painter_test.mocks.dart'; - -@GenerateMocks([Canvas, CanvasWrapper, BuildContext, Utils]) -void main() { - final utilsMainInstance = Utils(); - group('paint()', () { - test('test 1', () { - const viewSize = Size(400, 400); - final data = RadarChartData( - dataSets: [ - RadarDataSet( - dataEntries: const [ - RadarEntry(value: 12), - RadarEntry(value: 11), - RadarEntry(value: 10), - ], - ), - RadarDataSet( - dataEntries: const [ - RadarEntry(value: 2), - RadarEntry(value: 2), - RadarEntry(value: 2), - ], - ), - RadarDataSet( - dataEntries: const [ - RadarEntry(value: 4), - RadarEntry(value: 4), - RadarEntry(value: 4), - ], - ), - ], - ); - - final radarPainter = RadarChartPainter(); - final holder = PaintHolder( - data, - data, - TextScaler.noScaling, - ); - - final mockUtils = MockUtils(); - Utils.changeInstance(mockUtils); - when(mockUtils.getThemeAwareTextStyle(any, any)) - .thenAnswer((realInvocation) => textStyle1); - when(mockUtils.calculateRotationOffset(any, any)) - .thenAnswer((realInvocation) => Offset.zero); - when(mockUtils.convertRadiusToSigma(any)) - .thenAnswer((realInvocation) => 4.0); - when(mockUtils.getEfficientInterval(any, any)) - .thenAnswer((realInvocation) => 1.0); - when(mockUtils.getBestInitialIntervalValue(any, any, any)) - .thenAnswer((realInvocation) => 1.0); - when(mockUtils.normalizeBorderRadius(any, any)) - .thenAnswer((realInvocation) => BorderRadius.zero); - when(mockUtils.normalizeBorderSide(any, any)).thenAnswer( - (realInvocation) => const BorderSide(color: MockData.color0), - ); - - final mockBuildContext = MockBuildContext(); - final mockCanvasWrapper = MockCanvasWrapper(); - when(mockCanvasWrapper.size).thenAnswer((realInvocation) => viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - radarPainter.paint( - mockBuildContext, - mockCanvasWrapper, - holder, - ); - - verify(mockCanvasWrapper.drawCircle(any, any, any)).called(12); - verify(mockCanvasWrapper.drawLine(any, any, any)).called(3); - Utils.changeInstance(utilsMainInstance); - }); - }); - - group('drawTicks()', () { - test('test 1', () { - const viewSize = Size(400, 300); - - final data = RadarChartData( - dataSets: [ - RadarDataSet( - dataEntries: [ - const RadarEntry(value: 1), - const RadarEntry(value: 2), - const RadarEntry(value: 3), - ], - ), - RadarDataSet( - dataEntries: [ - const RadarEntry(value: 3), - const RadarEntry(value: 1), - const RadarEntry(value: 2), - ], - ), - RadarDataSet( - dataEntries: [ - const RadarEntry(value: 2), - const RadarEntry(value: 3), - const RadarEntry(value: 1), - ], - ), - ], - radarBorderData: const BorderSide(color: MockData.color6, width: 33), - tickBorderData: const BorderSide(color: MockData.color5, width: 55), - radarBackgroundColor: MockData.color2, - ); - - final radarChartPainter = RadarChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - - final mockCanvasWrapper = MockCanvasWrapper(); - when(mockCanvasWrapper.size).thenAnswer((realInvocation) => viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - - final mockUtils = MockUtils(); - when(mockUtils.getThemeAwareTextStyle(any, any)) - .thenReturn(MockData.textStyle1); - Utils.changeInstance(mockUtils); - - final mockContext = MockBuildContext(); - - final drawCircleResults = >[]; - when(mockCanvasWrapper.drawCircle(captureAny, captureAny, captureAny)) - .thenAnswer((inv) { - drawCircleResults.add({ - 'offset': inv.positionalArguments[0] as Offset, - 'radius': inv.positionalArguments[1] as double, - 'paint_color': (inv.positionalArguments[2] as Paint).color, - 'paint_style': (inv.positionalArguments[2] as Paint).style, - 'paint_stroke': (inv.positionalArguments[2] as Paint).strokeWidth, - }); - }); - - radarChartPainter.drawTicks(mockContext, mockCanvasWrapper, holder); - - expect(drawCircleResults.length, 3); - - // Background circle - expect(drawCircleResults[0]['offset'], const Offset(200, 150)); - expect(drawCircleResults[0]['radius'], 120); - expect(drawCircleResults[0]['paint_color'], MockData.color2); - expect(drawCircleResults[0]['paint_style'], PaintingStyle.fill); - - // Border circle - expect(drawCircleResults[1]['offset'], const Offset(200, 150)); - expect(drawCircleResults[1]['radius'], 120); - expect(drawCircleResults[1]['paint_color'], MockData.color6); - expect(drawCircleResults[1]['paint_stroke'], 33); - expect(drawCircleResults[1]['paint_style'], PaintingStyle.stroke); - - // First Tick - expect(drawCircleResults[2]['offset'], const Offset(200, 150)); - expect(drawCircleResults[2]['radius'], 60); - expect(drawCircleResults[2]['paint_color'], MockData.color5); - expect(drawCircleResults[2]['paint_stroke'], 55); - expect(drawCircleResults[2]['paint_style'], PaintingStyle.stroke); - - final result = verify(mockCanvasWrapper.drawText(captureAny, captureAny)); - expect(result.callCount, 1); - final tp = result.captured[0] as TextPainter; - expect((tp.text as TextSpan?)!.text, '1.0'); - expect((tp.text as TextSpan?)!.style, MockData.textStyle1); - expect(result.captured[1] as Offset, const Offset(205, 76)); - }); - - test('test 2', () { - const viewSize = Size(400, 300); - - final data = RadarChartData( - dataSets: [ - RadarDataSet( - dataEntries: [ - const RadarEntry(value: 1), - const RadarEntry(value: 2), - const RadarEntry(value: 3), - ], - ), - RadarDataSet( - dataEntries: [ - const RadarEntry(value: 3), - const RadarEntry(value: 1), - const RadarEntry(value: 2), - ], - ), - RadarDataSet( - dataEntries: [ - const RadarEntry(value: 2), - const RadarEntry(value: 3), - const RadarEntry(value: 1), - ], - ), - ], - radarBorderData: const BorderSide(color: MockData.color6, width: 33), - radarShape: RadarShape.polygon, - tickBorderData: const BorderSide(color: MockData.color5, width: 55), - radarBackgroundColor: MockData.color2, - ); - - final radarChartPainter = RadarChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - - final mockCanvasWrapper = MockCanvasWrapper(); - when(mockCanvasWrapper.size).thenAnswer((realInvocation) => viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - - final mockUtils = MockUtils(); - when(mockUtils.getThemeAwareTextStyle(any, any)) - .thenReturn(MockData.textStyle1); - Utils.changeInstance(mockUtils); - - final mockContext = MockBuildContext(); - - final drawPathResult = >[]; - when(mockCanvasWrapper.drawPath(captureAny, captureAny)) - .thenAnswer((inv) { - drawPathResult.add({ - 'path': inv.positionalArguments[0] as Path, - 'paint_color': (inv.positionalArguments[1] as Paint).color, - 'paint_stroke': (inv.positionalArguments[1] as Paint).strokeWidth, - 'paint_style': (inv.positionalArguments[1] as Paint).style, - }); - }); - - radarChartPainter.drawTicks(mockContext, mockCanvasWrapper, holder); - - expect(drawPathResult.length, 3); - - // Background circle - expect(drawPathResult[0]['paint_color'], MockData.color2); - expect(drawPathResult[0]['paint_stroke'], 0); - expect(drawPathResult[0]['paint_style'], PaintingStyle.fill); - - // Border circle - expect(drawPathResult[1]['paint_color'], MockData.color6); - expect(drawPathResult[1]['paint_stroke'], 33); - expect(drawPathResult[1]['paint_style'], PaintingStyle.stroke); - - // First Tick - expect(drawPathResult[2]['paint_color'], MockData.color5); - expect(drawPathResult[2]['paint_stroke'], 55); - expect(drawPathResult[2]['paint_style'], PaintingStyle.stroke); - - final result = verify(mockCanvasWrapper.drawText(captureAny, captureAny)); - expect(result.callCount, 1); - final tp = result.captured[0] as TextPainter; - expect((tp.text as TextSpan?)!.text, '1.0'); - expect((tp.text as TextSpan?)!.style, MockData.textStyle1); - expect(result.captured[1] as Offset, const Offset(205, 76)); - }); - }); - - group('drawGrids()', () { - test('test 1', () { - const viewSize = Size(400, 300); - - final data = RadarChartData( - dataSets: [ - RadarDataSet( - dataEntries: [ - const RadarEntry(value: 1), - const RadarEntry(value: 2), - const RadarEntry(value: 3), - ], - ), - RadarDataSet( - dataEntries: [ - const RadarEntry(value: 3), - const RadarEntry(value: 1), - const RadarEntry(value: 2), - ], - ), - RadarDataSet( - dataEntries: [ - const RadarEntry(value: 2), - const RadarEntry(value: 3), - const RadarEntry(value: 1), - ], - ), - ], - radarBorderData: const BorderSide(color: MockData.color6, width: 33), - tickBorderData: const BorderSide(color: MockData.color5, width: 55), - gridBorderData: const BorderSide(color: MockData.color3, width: 3), - radarBackgroundColor: MockData.color2, - ); - - final radarChartPainter = RadarChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - - final mockCanvasWrapper = MockCanvasWrapper(); - when(mockCanvasWrapper.size).thenAnswer((realInvocation) => viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - - final mockUtils = MockUtils(); - when(mockUtils.getThemeAwareTextStyle(any, any)) - .thenReturn(MockData.textStyle1); - Utils.changeInstance(mockUtils); - - final drawLineResults = >[]; - when(mockCanvasWrapper.drawLine(captureAny, captureAny, captureAny)) - .thenAnswer((inv) { - drawLineResults.add({ - 'offset_from': inv.positionalArguments[0] as Offset, - 'offset_to': inv.positionalArguments[1] as Offset, - 'paint_color': (inv.positionalArguments[2] as Paint).color, - 'paint_style': (inv.positionalArguments[2] as Paint).style, - 'paint_stroke': (inv.positionalArguments[2] as Paint).strokeWidth, - }); - }); - - radarChartPainter.drawGrids(mockCanvasWrapper, holder); - expect(drawLineResults.length, 3); - - expect(drawLineResults[0]['offset_from'], const Offset(200, 150)); - expect(drawLineResults[0]['offset_to'], const Offset(200, 30)); - expect(drawLineResults[0]['paint_color'], MockData.color3); - expect(drawLineResults[0]['paint_style'], PaintingStyle.stroke); - expect(drawLineResults[0]['paint_stroke'], 3); - - expect(drawLineResults[1]['offset_from'], const Offset(200, 150)); - expect( - drawLineResults[1]['offset_to'], - const Offset(303.92304845413264, 209.99999999999997), - ); - expect(drawLineResults[1]['paint_color'], MockData.color3); - expect(drawLineResults[1]['paint_style'], PaintingStyle.stroke); - expect(drawLineResults[1]['paint_stroke'], 3); - - expect(drawLineResults[2]['offset_from'], const Offset(200, 150)); - expect( - drawLineResults[2]['offset_to'], - const Offset(96.07695154586739, 210.00000000000006), - ); - expect(drawLineResults[2]['paint_color'], MockData.color3); - expect(drawLineResults[2]['paint_style'], PaintingStyle.stroke); - expect(drawLineResults[2]['paint_stroke'], 3); - }); - }); - - group('drawGrids()', () { - test('test 1', () { - const viewSize = Size(400, 300); - - final data = RadarChartData( - dataSets: [ - RadarDataSet( - dataEntries: [ - const RadarEntry(value: 1), - const RadarEntry(value: 2), - const RadarEntry(value: 3), - ], - ), - RadarDataSet( - dataEntries: [ - const RadarEntry(value: 3), - const RadarEntry(value: 1), - const RadarEntry(value: 2), - ], - ), - RadarDataSet( - dataEntries: [ - const RadarEntry(value: 2), - const RadarEntry(value: 3), - const RadarEntry(value: 1), - ], - ), - ], - titleTextStyle: MockData.textStyle4, - radarBorderData: const BorderSide(color: MockData.color6, width: 33), - tickBorderData: const BorderSide(color: MockData.color5, width: 55), - gridBorderData: const BorderSide(color: MockData.color3, width: 3), - radarBackgroundColor: MockData.color2, - ); - - final radarChartPainter = RadarChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - - final mockCanvasWrapper = MockCanvasWrapper(); - when(mockCanvasWrapper.size).thenAnswer((realInvocation) => viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - - final mockUtils = MockUtils(); - when(mockUtils.getThemeAwareTextStyle(any, any)).thenAnswer( - (realInvocation) => realInvocation.positionalArguments[1] as TextStyle, - ); - Utils.changeInstance(mockUtils); - - final mockContext = MockBuildContext(); - - radarChartPainter.drawTitles(mockContext, mockCanvasWrapper, holder); - - verifyNever(mockCanvasWrapper.drawText(any, any)); - }); - - test('test 2', () { - const viewSize = Size(400, 300); - - final data = RadarChartData( - dataSets: [ - RadarDataSet( - dataEntries: [ - const RadarEntry(value: 1), - const RadarEntry(value: 2), - const RadarEntry(value: 3), - ], - ), - RadarDataSet( - dataEntries: [ - const RadarEntry(value: 3), - const RadarEntry(value: 1), - const RadarEntry(value: 2), - ], - ), - RadarDataSet( - dataEntries: [ - const RadarEntry(value: 2), - const RadarEntry(value: 3), - const RadarEntry(value: 1), - ], - ), - ], - getTitle: (index, angle) { - return RadarChartTitle(text: '$index$index', angle: angle); - }, - titleTextStyle: MockData.textStyle4, - radarBorderData: const BorderSide(color: MockData.color6, width: 33), - tickBorderData: const BorderSide(color: MockData.color5, width: 55), - gridBorderData: const BorderSide(color: MockData.color3, width: 3), - radarBackgroundColor: MockData.color2, - ); - - final radarChartPainter = RadarChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - - final mockCanvasWrapper = MockCanvasWrapper(); - when(mockCanvasWrapper.size).thenAnswer((realInvocation) => viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - - final mockUtils = MockUtils(); - when(mockUtils.getThemeAwareTextStyle(any, any)).thenAnswer( - (realInvocation) => realInvocation.positionalArguments[1] as TextStyle, - ); - when(mockUtils.degrees(captureAny)).thenAnswer((inv) { - return utilsMainInstance - .degrees(inv.positionalArguments.first as double); - }); - Utils.changeInstance(mockUtils); - - final mockContext = MockBuildContext(); - - final results = >[]; - when( - mockCanvasWrapper.drawRotated( - size: anyNamed('size'), - rotationOffset: anyNamed('rotationOffset'), - drawOffset: anyNamed('drawOffset'), - angle: anyNamed('angle'), - drawCallback: captureAnyNamed('drawCallback'), - ), - ).thenAnswer((inv) { - (inv.namedArguments[const Symbol('drawCallback')] as void Function())(); - }); - when(mockCanvasWrapper.drawText(captureAny, captureAny, captureAny)) - .thenAnswer((inv) { - results.add({ - 'tp_text': - ((inv.positionalArguments[0] as TextPainter).text as TextSpan?)! - .text, - 'tp_style': - ((inv.positionalArguments[0] as TextPainter).text as TextSpan?)! - .style, - }); - }); - - radarChartPainter.drawTitles(mockContext, mockCanvasWrapper, holder); - expect(results.length, 3); - - expect(results[0]['tp_text'] as String, '00'); - expect(results[0]['tp_style'] as TextStyle, MockData.textStyle4); - - expect(results[1]['tp_text'] as String, '11'); - expect(results[1]['tp_style'] as TextStyle, MockData.textStyle4); - - expect(results[2]['tp_text'] as String, '22'); - expect(results[2]['tp_style'] as TextStyle, MockData.textStyle4); - }); - }); - - group('drawDataSets()', () { - test('test 1', () { - const viewSize = Size(400, 300); - - final data = RadarChartData( - dataSets: [ - RadarDataSet( - dataEntries: [ - const RadarEntry(value: 1), - const RadarEntry(value: 2), - const RadarEntry(value: 3), - ], - fillColor: MockData.color1, - borderColor: MockData.color3, - borderWidth: 3, - ), - RadarDataSet( - dataEntries: [ - const RadarEntry(value: 3), - const RadarEntry(value: 1), - const RadarEntry(value: 2), - ], - fillColor: MockData.color2, - borderColor: MockData.color2, - borderWidth: 2, - ), - RadarDataSet( - dataEntries: [ - const RadarEntry(value: 2), - const RadarEntry(value: 3), - const RadarEntry(value: 1), - ], - fillColor: MockData.color3, - borderColor: MockData.color1, - borderWidth: 1, - ), - ], - getTitle: (index, angle) { - return RadarChartTitle(text: '$index$index', angle: angle); - }, - titleTextStyle: MockData.textStyle4, - radarBorderData: const BorderSide(color: MockData.color6, width: 33), - tickBorderData: const BorderSide(color: MockData.color5, width: 55), - gridBorderData: const BorderSide(color: MockData.color3, width: 3), - radarBackgroundColor: MockData.color2, - ); - - final radarChartPainter = RadarChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - - final mockCanvasWrapper = MockCanvasWrapper(); - when(mockCanvasWrapper.size).thenAnswer((realInvocation) => viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - - final mockUtils = MockUtils(); - when(mockUtils.getThemeAwareTextStyle(any, any)).thenAnswer( - (realInvocation) => realInvocation.positionalArguments[1] as TextStyle, - ); - Utils.changeInstance(mockUtils); - - final drawCircleResults = >[]; - when(mockCanvasWrapper.drawCircle(captureAny, captureAny, captureAny)) - .thenAnswer((inv) { - drawCircleResults.add({ - 'offset': inv.positionalArguments[0] as Offset, - 'radius': inv.positionalArguments[1] as double, - 'paint': inv.positionalArguments[2] as Paint, - }); - }); - - final drawPathResults = >[]; - when(mockCanvasWrapper.drawPath(captureAny, captureAny)) - .thenAnswer((inv) { - drawPathResults.add({ - 'path': inv.positionalArguments[0] as Path, - 'paint_color': (inv.positionalArguments[1] as Paint).color, - 'paint_stroke': (inv.positionalArguments[1] as Paint).strokeWidth, - 'paint_style': (inv.positionalArguments[1] as Paint).style, - }); - }); - - radarChartPainter.drawDataSets(mockCanvasWrapper, holder); - expect(drawCircleResults.length, 9); - - expect( - drawCircleResults[0]['offset'] as Offset, - const Offset(200, 90), - ); - expect(drawCircleResults[0]['radius'] as double, 5); - - expect( - drawCircleResults[1]['offset'] as Offset, - const Offset(277.9422863405995, 195), - ); - expect(drawCircleResults[1]['radius'] as double, 5); - - expect( - drawCircleResults[2]['offset'] as Offset, - const Offset(96.07695154586739, 210.00000000000006), - ); - expect(drawCircleResults[2]['radius'] as double, 5); - - expect( - drawCircleResults[3]['offset'] as Offset, - const Offset(200, 30), - ); - expect(drawCircleResults[3]['radius'] as double, 5); - - expect( - drawCircleResults[4]['offset'] as Offset, - const Offset(251.96152422706632, 180), - ); - expect(drawCircleResults[4]['radius'] as double, 5); - - expect( - drawCircleResults[5]['offset'] as Offset, - const Offset(122.05771365940053, 195.00000000000003), - ); - expect(drawCircleResults[5]['radius'] as double, 5); - - expect( - drawCircleResults[6]['offset'] as Offset, - const Offset(200, 60), - ); - expect(drawCircleResults[6]['radius'] as double, 5); - - expect( - drawCircleResults[7]['offset'] as Offset, - const Offset(303.92304845413264, 209.99999999999997), - ); - expect(drawCircleResults[7]['radius'] as double, 5); - - expect( - drawCircleResults[8]['offset'] as Offset, - const Offset(148.03847577293368, 180.00000000000003), - ); - expect(drawCircleResults[8]['radius'] as double, 5); - - expect(drawPathResults.length, 6); - - expect(drawPathResults[0]['paint_color'], MockData.color1); - expect(drawPathResults[0]['paint_style'], PaintingStyle.fill); - - expect(drawPathResults[1]['paint_color'], MockData.color3); - expect(drawPathResults[1]['paint_stroke'], 3); - expect(drawPathResults[1]['paint_style'], PaintingStyle.stroke); - - expect(drawPathResults[2]['paint_color'], MockData.color2); - expect(drawPathResults[2]['paint_style'], PaintingStyle.fill); - - expect(drawPathResults[3]['paint_color'], MockData.color2); - expect(drawPathResults[3]['paint_stroke'], 2); - expect(drawPathResults[3]['paint_style'], PaintingStyle.stroke); - - expect(drawPathResults[4]['paint_color'], MockData.color3); - expect(drawPathResults[4]['paint_style'], PaintingStyle.fill); - - expect(drawPathResults[5]['paint_color'], MockData.color1); - expect(drawPathResults[5]['paint_stroke'], 1); - expect(drawPathResults[5]['paint_style'], PaintingStyle.stroke); - }); - }); - - group('drawTitles()', () { - test('rotated titles', () { - const viewSize = Size(400, 300); - - final data = RadarChartData( - dataSets: [ - RadarDataSet( - dataEntries: [ - const RadarEntry(value: 1), - const RadarEntry(value: 2), - const RadarEntry(value: 3), - ], - ), - RadarDataSet( - dataEntries: [ - const RadarEntry(value: 3), - const RadarEntry(value: 1), - const RadarEntry(value: 2), - ], - ), - RadarDataSet( - dataEntries: [ - const RadarEntry(value: 2), - const RadarEntry(value: 3), - const RadarEntry(value: 1), - ], - ), - ], - radarBorderData: const BorderSide(color: MockData.color6, width: 33), - tickBorderData: const BorderSide(color: MockData.color5, width: 55), - radarBackgroundColor: MockData.color2, - getTitle: (index, angle) { - return RadarChartTitle(text: '$index-$angle', angle: angle); - }, - ); - - final radarChartPainter = RadarChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - - final mockCanvasWrapper = MockCanvasWrapper(); - when(mockCanvasWrapper.size).thenAnswer((realInvocation) => viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - - final mockUtils = MockUtils(); - when(mockUtils.getThemeAwareTextStyle(any, any)) - .thenReturn(MockData.textStyle1); - when(mockUtils.degrees(captureAny)).thenAnswer((inv) { - return utilsMainInstance - .degrees(inv.positionalArguments.first as double); - }); - Utils.changeInstance(mockUtils); - - final mockContext = MockBuildContext(); - - final drawRotatedResults = >[]; - final drawTextResults = >[]; - when( - mockCanvasWrapper.drawRotated( - size: anyNamed('size'), - rotationOffset: anyNamed('rotationOffset'), - drawOffset: anyNamed('drawOffset'), - angle: captureAnyNamed('angle'), - drawCallback: captureAnyNamed('drawCallback'), - ), - ).thenAnswer((inv) { - drawRotatedResults.add({ - 'angle': inv.namedArguments[const Symbol('angle')], - }); - (inv.namedArguments[const Symbol('drawCallback')] as void Function())(); - }); - when(mockCanvasWrapper.drawText(captureAny, captureAny, captureAny)) - .thenAnswer((inv) { - drawTextResults.add({ - 'text': - (inv.positionalArguments[0] as TextPainter).text?.toPlainText(), - 'angle': inv.positionalArguments[2] as double, - }); - }); - - radarChartPainter.drawTitles(mockContext, mockCanvasWrapper, holder); - - expect(drawRotatedResults.length, 3); - expect(drawTextResults.length, 3); - - // Titles - const angle = 360.0 / 3; - for (var i = 0; i < drawTextResults.length; i++) { - expect(drawRotatedResults[i]['angle'], closeTo(angle * i, 0.001)); - expect(drawTextResults[i]['text'], startsWith('$i')); - expect(drawTextResults[i]['angle'], 0); - } - }); - test('horizontal titles by default', () { - const viewSize = Size(400, 300); - - final data = RadarChartData( - dataSets: [ - RadarDataSet( - dataEntries: [ - const RadarEntry(value: 1), - const RadarEntry(value: 2), - const RadarEntry(value: 3), - ], - ), - RadarDataSet( - dataEntries: [ - const RadarEntry(value: 3), - const RadarEntry(value: 1), - const RadarEntry(value: 2), - ], - ), - RadarDataSet( - dataEntries: [ - const RadarEntry(value: 2), - const RadarEntry(value: 3), - const RadarEntry(value: 1), - ], - ), - ], - radarBorderData: const BorderSide(color: MockData.color6, width: 33), - tickBorderData: const BorderSide(color: MockData.color5, width: 55), - radarBackgroundColor: MockData.color2, - getTitle: (index, angle) { - return RadarChartTitle(text: '$index-$angle'); - }, - ); - - final radarChartPainter = RadarChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - - final mockCanvasWrapper = MockCanvasWrapper(); - when(mockCanvasWrapper.size).thenAnswer((realInvocation) => viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - - final mockUtils = MockUtils(); - when(mockUtils.getThemeAwareTextStyle(any, any)) - .thenReturn(MockData.textStyle1); - when(mockUtils.degrees(captureAny)).thenAnswer((inv) { - return utilsMainInstance - .degrees(inv.positionalArguments.first as double); - }); - Utils.changeInstance(mockUtils); - - final mockContext = MockBuildContext(); - - final drawRotatedResults = >[]; - final drawTextResults = >[]; - when( - mockCanvasWrapper.drawRotated( - size: anyNamed('size'), - rotationOffset: anyNamed('rotationOffset'), - drawOffset: anyNamed('drawOffset'), - angle: captureAnyNamed('angle'), - drawCallback: captureAnyNamed('drawCallback'), - ), - ).thenAnswer((inv) { - drawRotatedResults.add({ - 'angle': inv.namedArguments[const Symbol('angle')], - }); - (inv.namedArguments[const Symbol('drawCallback')] as void Function())(); - }); - when(mockCanvasWrapper.drawText(captureAny, captureAny, captureAny)) - .thenAnswer((inv) { - drawTextResults.add({ - 'text': - (inv.positionalArguments[0] as TextPainter).text?.toPlainText(), - 'angle': inv.positionalArguments[2] as double, - }); - }); - - radarChartPainter.drawTitles(mockContext, mockCanvasWrapper, holder); - - expect(drawRotatedResults.length, 3); - expect(drawTextResults.length, 3); - - // Titles - const angle = 360.0 / 3; - for (var i = 0; i < drawTextResults.length; i++) { - expect(drawRotatedResults[i]['angle'], closeTo(angle * i, 0.001)); - expect(drawTextResults[i]['text'], startsWith('$i')); - expect(drawTextResults[i]['angle'], closeTo(-angle * i, 0.001)); - } - }); - }); - - group('handleTouch()', () { - test('test 1', () { - const viewSize = Size(400, 300); - final data = RadarChartData( - dataSets: [ - RadarDataSet( - dataEntries: [ - const RadarEntry(value: 1), - const RadarEntry(value: 2), - const RadarEntry(value: 3), - ], - ), - RadarDataSet( - dataEntries: [ - const RadarEntry(value: 3), - const RadarEntry(value: 1), - const RadarEntry(value: 2), - ], - ), - RadarDataSet( - dataEntries: [ - const RadarEntry(value: 2), - const RadarEntry(value: 3), - const RadarEntry(value: 1), - ], - ), - ], - ); - - final radarChartPainter = RadarChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - - final mockCanvasWrapper = MockCanvasWrapper(); - when(mockCanvasWrapper.size).thenAnswer((realInvocation) => viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - - final mockUtils = MockUtils(); - when(mockUtils.getThemeAwareTextStyle(any, any)).thenAnswer( - (realInvocation) => realInvocation.positionalArguments[1] as TextStyle, - ); - Utils.changeInstance(mockUtils); - - final drawCircleResults = >[]; - when(mockCanvasWrapper.drawCircle(captureAny, captureAny, captureAny)) - .thenAnswer((inv) { - drawCircleResults.add({ - 'offset': inv.positionalArguments[0] as Offset, - 'radius': inv.positionalArguments[1] as double, - 'paint': inv.positionalArguments[2] as Paint, - }); - }); - - final drawPathResults = >[]; - when(mockCanvasWrapper.drawPath(captureAny, captureAny)) - .thenAnswer((inv) { - drawPathResults.add({ - 'path': inv.positionalArguments[0] as Path, - 'paint_color': (inv.positionalArguments[1] as Paint).color, - 'paint_stroke': (inv.positionalArguments[1] as Paint).strokeWidth, - 'paint_style': (inv.positionalArguments[1] as Paint).style, - }); - }); - - expect( - radarChartPainter.handleTouch( - const Offset(287.8, 120.3), - viewSize, - holder, - ), - null, - ); - expect( - radarChartPainter.handleTouch( - const Offset(145.1, 125.4), - viewSize, - holder, - ), - null, - ); - expect( - radarChartPainter.handleTouch( - const Offset(175.9, 120.8), - viewSize, - holder, - ), - null, - ); - expect( - radarChartPainter.handleTouch( - const Offset(201.8, 153.7), - viewSize, - holder, - ), - null, - ); - expect( - radarChartPainter.handleTouch( - const Offset(259.5, 116.3), - viewSize, - holder, - ), - null, - ); - expect( - radarChartPainter.handleTouch( - const Offset(266.9, 179.3), - viewSize, - holder, - ), - null, - ); - expect( - radarChartPainter.handleTouch( - const Offset(145, 193.7), - viewSize, - holder, - ), - null, - ); - - final result0 = radarChartPainter.handleTouch( - const Offset(304.9, 212.9), - viewSize, - holder, - ); - expect(result0!.touchedDataSetIndex, 2); - expect(result0.touchedRadarEntryIndex, 1); - - final result1 = radarChartPainter.handleTouch( - const Offset(200, 60), - viewSize, - holder, - ); - expect(result1!.touchedDataSetIndex, 2); - expect(result1.touchedRadarEntryIndex, 0); - - final result2 = radarChartPainter.handleTouch( - const Offset(148, 180), - viewSize, - holder, - ); - expect(result2!.touchedDataSetIndex, 2); - expect(result2.touchedRadarEntryIndex, 2); - - final result3 = radarChartPainter.handleTouch( - const Offset(270.5, 192.3), - viewSize, - holder, - ); - expect(result3!.touchedDataSetIndex, 0); - expect(result3.touchedRadarEntryIndex, 1); - - final result4 = radarChartPainter.handleTouch( - const Offset(98.3, 216.8), - viewSize, - holder, - ); - expect(result4!.touchedDataSetIndex, 0); - expect(result4.touchedRadarEntryIndex, 2); - - final result5 = radarChartPainter.handleTouch( - const Offset(200, 90), - viewSize, - holder, - ); - expect(result5!.touchedDataSetIndex, 0); - expect(result5.touchedRadarEntryIndex, 0); - - final result6 = radarChartPainter.handleTouch( - const Offset(202.6, 33.5), - viewSize, - holder, - ); - expect(result6!.touchedDataSetIndex, 1); - expect(result6.touchedRadarEntryIndex, 0); - - final result7 = radarChartPainter.handleTouch( - const Offset(122.1, 195), - viewSize, - holder, - ); - expect(result7!.touchedDataSetIndex, 1); - expect(result7.touchedRadarEntryIndex, 2); - - final result8 = radarChartPainter.handleTouch( - const Offset(252, 180), - viewSize, - holder, - ); - expect(result8!.touchedDataSetIndex, 1); - expect(result8.touchedRadarEntryIndex, 1); - }); - }); - - group('radarCenterY()', () { - test('test 1', () { - final painter = RadarChartPainter(); - expect(painter.radarCenterY(const Size(200, 400)), 200); - expect(painter.radarCenterY(const Size(2314, 400)), 200); - }); - }); - - group('radarCenterX()', () { - test('test 1', () { - final painter = RadarChartPainter(); - expect(painter.radarCenterX(const Size(400, 200)), 200); - expect(painter.radarCenterX(const Size(400, 2314)), 200); - }); - }); - - group('radarRadius()', () { - test('test 1', () { - final painter = RadarChartPainter(); - expect(painter.radarRadius(const Size(400, 200)), 80); - expect(painter.radarRadius(const Size(400, 2314)), 160); - }); - }); - - group('calculateDataSetsPosition()', () { - test('test 1', () { - const viewSize = Size(400, 300); - - final data = RadarChartData( - dataSets: [ - RadarDataSet( - dataEntries: [ - const RadarEntry(value: 1), - const RadarEntry(value: 2), - const RadarEntry(value: 3), - ], - ), - RadarDataSet( - dataEntries: [ - const RadarEntry(value: 3), - const RadarEntry(value: 1), - const RadarEntry(value: 2), - ], - ), - RadarDataSet( - dataEntries: [ - const RadarEntry(value: 2), - const RadarEntry(value: 3), - const RadarEntry(value: 1), - ], - ), - ], - titleTextStyle: MockData.textStyle4, - radarBorderData: const BorderSide(color: MockData.color6, width: 33), - tickBorderData: const BorderSide(color: MockData.color5, width: 55), - gridBorderData: const BorderSide(color: MockData.color3, width: 3), - radarBackgroundColor: MockData.color2, - ); - - final radarChartPainter = RadarChartPainter(); - final holder = - PaintHolder(data, data, TextScaler.noScaling); - - final result = - radarChartPainter.calculateDataSetsPosition(viewSize, holder); - expect(result.length, 3); - expect( - result[0].entriesOffset, - [ - const Offset(200, 90), - const Offset(277.9422863405995, 195), - const Offset(96.07695154586739, 210.00000000000006), - ], - ); - expect( - result[1].entriesOffset, - [ - const Offset(200, 30), - const Offset(251.96152422706632, 180), - const Offset(122.05771365940053, 195.00000000000003), - ], - ); - expect( - result[2].entriesOffset, - [ - const Offset(200, 60), - const Offset(303.92304845413264, 209.99999999999997), - const Offset(148.03847577293368, 180.00000000000003), - ], - ); - }); - }); - - group('getDefaultChartCenterValue()', () { - final radarChartPainter = RadarChartPainter(); - - test('test 1', () { - expect(radarChartPainter.getDefaultChartCenterValue(), 0); - }); - }); - - group('getChartCenterValue()', () { - final radarChartPainter = RadarChartPainter(); - final dataSet = RadarDataSet( - dataEntries: [ - const RadarEntry(value: 15), - const RadarEntry(value: 20), - const RadarEntry(value: 20), - ], - ); - final dataSetWithSameMaxAndMin = RadarDataSet( - dataEntries: [ - const RadarEntry(value: 10), - const RadarEntry(value: 10), - const RadarEntry(value: 10), - ], - ); - final dataWith1Tick = RadarChartData( - dataSets: [dataSet], - tickCount: 1, - ); - final dataWith2Ticks = RadarChartData( - dataSets: [dataSet], - tickCount: 2, - ); - final dataWith3Ticks = RadarChartData( - dataSets: [dataSet], - tickCount: 3, - ); - final dataWithSameMaxAndMin = RadarChartData( - dataSets: [dataSetWithSameMaxAndMin], - tickCount: 2, - ); - - test('test 1', () { - expect(radarChartPainter.getChartCenterValue(dataWith1Tick), 10); - expect(radarChartPainter.getChartCenterValue(dataWith2Ticks), 12.5); - expect( - radarChartPainter.getChartCenterValue(dataWith3Ticks), - 13.333333333333334, - ); - }); - - test('test 2', () { - expect(radarChartPainter.getChartCenterValue(dataWithSameMaxAndMin), 0); - }); - }); - - group('getScaledPoint()', () { - final radarChartPainter = RadarChartPainter(); - final data = RadarChartData( - dataSets: [ - RadarDataSet( - dataEntries: [ - const RadarEntry(value: 15), - const RadarEntry(value: 20), - const RadarEntry(value: 20), - ], - ), - ], - tickCount: 2, - ); - final dataWithSameMaxAndMin = RadarChartData( - dataSets: [ - RadarDataSet( - dataEntries: [ - const RadarEntry(value: 10), - const RadarEntry(value: 10), - const RadarEntry(value: 10), - ], - ), - ], - tickCount: 2, - ); - const radius = 200.0; - const point1 = RadarEntry(value: 0); - const point2 = RadarEntry(value: 50); - const point3 = RadarEntry(value: 150); - - test('test 1', () { - expect( - radarChartPainter.getScaledPoint(point1, radius, data), - -333.3333333333333, - ); - expect(radarChartPainter.getScaledPoint(point2, radius, data), 1000.0); - expect( - radarChartPainter.getScaledPoint(point3, radius, data), - 3666.6666666666665, - ); - }); - - test('test 2', () { - expect( - radarChartPainter.getScaledPoint( - point1, - radius, - dataWithSameMaxAndMin, - ), - 0.0, - ); - expect( - radarChartPainter.getScaledPoint( - point2, - radius, - dataWithSameMaxAndMin, - ), - 1000.0, - ); - expect( - radarChartPainter.getScaledPoint( - point3, - radius, - dataWithSameMaxAndMin, - ), - 3000.0, - ); - }); - }); - - group('getFirstTickValue()', () { - final radarChartPainter = RadarChartPainter(); - final data = RadarChartData( - dataSets: [ - RadarDataSet( - dataEntries: [ - const RadarEntry(value: 15), - const RadarEntry(value: 20), - const RadarEntry(value: 20), - ], - ), - ], - tickCount: 2, - ); - final dataWithSameMaxAndMin = RadarChartData( - dataSets: [ - RadarDataSet( - dataEntries: [ - const RadarEntry(value: 10), - const RadarEntry(value: 10), - const RadarEntry(value: 10), - ], - ), - ], - tickCount: 2, - ); - - test('test 1', () { - expect(radarChartPainter.getFirstTickValue(data), 15); - }); - - test('test 2', () { - expect( - radarChartPainter.getFirstTickValue(dataWithSameMaxAndMin), - 3.3333333333333335, - ); - }); - }); - - group('getSpaceBetweenTicks()', () { - final radarChartPainter = RadarChartPainter(); - final data = RadarChartData( - dataSets: [ - RadarDataSet( - dataEntries: [ - const RadarEntry(value: 15), - const RadarEntry(value: 20), - const RadarEntry(value: 20), - ], - ), - ], - tickCount: 2, - ); - final dataWithSameMaxAndMin = RadarChartData( - dataSets: [ - RadarDataSet( - dataEntries: [ - const RadarEntry(value: 10), - const RadarEntry(value: 10), - const RadarEntry(value: 10), - ], - ), - ], - tickCount: 2, - ); - - test('test 1', () { - expect(radarChartPainter.getSpaceBetweenTicks(data), 2.5); - }); - - test('test 2', () { - expect( - radarChartPainter.getSpaceBetweenTicks(dataWithSameMaxAndMin), - 3.3333333333333335, - ); - }); - }); -} diff --git a/test/chart/radar_chart/radar_chart_painter_test.mocks.dart b/test/chart/radar_chart/radar_chart_painter_test.mocks.dart deleted file mode 100644 index 6e76739317..0000000000 --- a/test/chart/radar_chart/radar_chart_painter_test.mocks.dart +++ /dev/null @@ -1,1435 +0,0 @@ -// Mocks generated by Mockito 5.4.2 from annotations -// in fl_chart/test/chart/radar_chart/radar_chart_painter_test.dart. -// Do not manually edit this file. - -// ignore_for_file: no_leading_underscores_for_library_prefixes -import 'dart:typed_data' as _i5; -import 'dart:ui' as _i2; - -import 'package:fl_chart/fl_chart.dart' as _i7; -import 'package:fl_chart/src/utils/canvas_wrapper.dart' as _i6; -import 'package:fl_chart/src/utils/utils.dart' as _i8; -import 'package:flutter/cupertino.dart' as _i3; -import 'package:flutter/foundation.dart' as _i4; -import 'package:mockito/mockito.dart' as _i1; - -// ignore_for_file: type=lint -// ignore_for_file: avoid_redundant_argument_values -// ignore_for_file: avoid_setters_without_getters -// ignore_for_file: comment_references -// ignore_for_file: implementation_imports -// ignore_for_file: invalid_use_of_visible_for_testing_member -// ignore_for_file: prefer_const_constructors -// ignore_for_file: unnecessary_parenthesis -// ignore_for_file: camel_case_types -// ignore_for_file: subtype_of_sealed_class - -class _FakeRect_0 extends _i1.SmartFake implements _i2.Rect { - _FakeRect_0( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); -} - -class _FakeCanvas_1 extends _i1.SmartFake implements _i2.Canvas { - _FakeCanvas_1( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); -} - -class _FakeSize_2 extends _i1.SmartFake implements _i2.Size { - _FakeSize_2( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); -} - -class _FakeWidget_3 extends _i1.SmartFake implements _i3.Widget { - _FakeWidget_3( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); - - @override - String toString({_i3.DiagnosticLevel? minLevel = _i3.DiagnosticLevel.info}) => - super.toString(); -} - -class _FakeInheritedWidget_4 extends _i1.SmartFake - implements _i3.InheritedWidget { - _FakeInheritedWidget_4( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); - - @override - String toString({_i3.DiagnosticLevel? minLevel = _i3.DiagnosticLevel.info}) => - super.toString(); -} - -class _FakeDiagnosticsNode_5 extends _i1.SmartFake - implements _i3.DiagnosticsNode { - _FakeDiagnosticsNode_5( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); - - @override - String toString({ - _i4.TextTreeConfiguration? parentConfiguration, - _i3.DiagnosticLevel? minLevel = _i3.DiagnosticLevel.info, - }) => - super.toString(); -} - -class _FakeOffset_6 extends _i1.SmartFake implements _i2.Offset { - _FakeOffset_6( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); -} - -class _FakeBorderSide_7 extends _i1.SmartFake implements _i3.BorderSide { - _FakeBorderSide_7( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); - - @override - String toString({_i3.DiagnosticLevel? minLevel = _i3.DiagnosticLevel.info}) => - super.toString(); -} - -class _FakeTextStyle_8 extends _i1.SmartFake implements _i3.TextStyle { - _FakeTextStyle_8( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); - - @override - String toString({_i3.DiagnosticLevel? minLevel = _i3.DiagnosticLevel.info}) => - super.toString(); -} - -/// A class which mocks [Canvas]. -/// -/// See the documentation for Mockito's code generation for more information. -class MockCanvas extends _i1.Mock implements _i2.Canvas { - MockCanvas() { - _i1.throwOnMissingStub(this); - } - - @override - void save() => super.noSuchMethod( - Invocation.method( - #save, - [], - ), - returnValueForMissingStub: null, - ); - - @override - void saveLayer( - _i2.Rect? bounds, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #saveLayer, - [ - bounds, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void restore() => super.noSuchMethod( - Invocation.method( - #restore, - [], - ), - returnValueForMissingStub: null, - ); - - @override - void restoreToCount(int? count) => super.noSuchMethod( - Invocation.method( - #restoreToCount, - [count], - ), - returnValueForMissingStub: null, - ); - - @override - int getSaveCount() => (super.noSuchMethod( - Invocation.method( - #getSaveCount, - [], - ), - returnValue: 0, - ) as int); - - @override - void translate( - double? dx, - double? dy, - ) => - super.noSuchMethod( - Invocation.method( - #translate, - [ - dx, - dy, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void scale( - double? sx, [ - double? sy, - ]) => - super.noSuchMethod( - Invocation.method( - #scale, - [ - sx, - sy, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void rotate(double? radians) => super.noSuchMethod( - Invocation.method( - #rotate, - [radians], - ), - returnValueForMissingStub: null, - ); - - @override - void skew( - double? sx, - double? sy, - ) => - super.noSuchMethod( - Invocation.method( - #skew, - [ - sx, - sy, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void transform(_i5.Float64List? matrix4) => super.noSuchMethod( - Invocation.method( - #transform, - [matrix4], - ), - returnValueForMissingStub: null, - ); - - @override - _i5.Float64List getTransform() => (super.noSuchMethod( - Invocation.method( - #getTransform, - [], - ), - returnValue: _i5.Float64List(0), - ) as _i5.Float64List); - - @override - void clipRect( - _i2.Rect? rect, { - _i2.ClipOp? clipOp = _i2.ClipOp.intersect, - bool? doAntiAlias = true, - }) => - super.noSuchMethod( - Invocation.method( - #clipRect, - [rect], - { - #clipOp: clipOp, - #doAntiAlias: doAntiAlias, - }, - ), - returnValueForMissingStub: null, - ); - - @override - void clipRRect( - _i2.RRect? rrect, { - bool? doAntiAlias = true, - }) => - super.noSuchMethod( - Invocation.method( - #clipRRect, - [rrect], - {#doAntiAlias: doAntiAlias}, - ), - returnValueForMissingStub: null, - ); - - @override - void clipPath( - _i2.Path? path, { - bool? doAntiAlias = true, - }) => - super.noSuchMethod( - Invocation.method( - #clipPath, - [path], - {#doAntiAlias: doAntiAlias}, - ), - returnValueForMissingStub: null, - ); - - @override - _i2.Rect getLocalClipBounds() => (super.noSuchMethod( - Invocation.method( - #getLocalClipBounds, - [], - ), - returnValue: _FakeRect_0( - this, - Invocation.method( - #getLocalClipBounds, - [], - ), - ), - ) as _i2.Rect); - - @override - _i2.Rect getDestinationClipBounds() => (super.noSuchMethod( - Invocation.method( - #getDestinationClipBounds, - [], - ), - returnValue: _FakeRect_0( - this, - Invocation.method( - #getDestinationClipBounds, - [], - ), - ), - ) as _i2.Rect); - - @override - void drawColor( - _i2.Color? color, - _i2.BlendMode? blendMode, - ) => - super.noSuchMethod( - Invocation.method( - #drawColor, - [ - color, - blendMode, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawLine( - _i2.Offset? p1, - _i2.Offset? p2, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawLine, - [ - p1, - p2, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawPaint(_i2.Paint? paint) => super.noSuchMethod( - Invocation.method( - #drawPaint, - [paint], - ), - returnValueForMissingStub: null, - ); - - @override - void drawRect( - _i2.Rect? rect, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawRect, - [ - rect, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawRRect( - _i2.RRect? rrect, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawRRect, - [ - rrect, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawDRRect( - _i2.RRect? outer, - _i2.RRect? inner, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawDRRect, - [ - outer, - inner, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawOval( - _i2.Rect? rect, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawOval, - [ - rect, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawCircle( - _i2.Offset? c, - double? radius, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawCircle, - [ - c, - radius, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawArc( - _i2.Rect? rect, - double? startAngle, - double? sweepAngle, - bool? useCenter, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawArc, - [ - rect, - startAngle, - sweepAngle, - useCenter, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawPath( - _i2.Path? path, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawPath, - [ - path, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawImage( - _i2.Image? image, - _i2.Offset? offset, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawImage, - [ - image, - offset, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawImageRect( - _i2.Image? image, - _i2.Rect? src, - _i2.Rect? dst, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawImageRect, - [ - image, - src, - dst, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawImageNine( - _i2.Image? image, - _i2.Rect? center, - _i2.Rect? dst, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawImageNine, - [ - image, - center, - dst, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawPicture(_i2.Picture? picture) => super.noSuchMethod( - Invocation.method( - #drawPicture, - [picture], - ), - returnValueForMissingStub: null, - ); - - @override - void drawParagraph( - _i2.Paragraph? paragraph, - _i2.Offset? offset, - ) => - super.noSuchMethod( - Invocation.method( - #drawParagraph, - [ - paragraph, - offset, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawPoints( - _i2.PointMode? pointMode, - List<_i2.Offset>? points, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawPoints, - [ - pointMode, - points, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawRawPoints( - _i2.PointMode? pointMode, - _i5.Float32List? points, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawRawPoints, - [ - pointMode, - points, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawVertices( - _i2.Vertices? vertices, - _i2.BlendMode? blendMode, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawVertices, - [ - vertices, - blendMode, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawAtlas( - _i2.Image? atlas, - List<_i2.RSTransform>? transforms, - List<_i2.Rect>? rects, - List<_i2.Color>? colors, - _i2.BlendMode? blendMode, - _i2.Rect? cullRect, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawAtlas, - [ - atlas, - transforms, - rects, - colors, - blendMode, - cullRect, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawRawAtlas( - _i2.Image? atlas, - _i5.Float32List? rstTransforms, - _i5.Float32List? rects, - _i5.Int32List? colors, - _i2.BlendMode? blendMode, - _i2.Rect? cullRect, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawRawAtlas, - [ - atlas, - rstTransforms, - rects, - colors, - blendMode, - cullRect, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawShadow( - _i2.Path? path, - _i2.Color? color, - double? elevation, - bool? transparentOccluder, - ) => - super.noSuchMethod( - Invocation.method( - #drawShadow, - [ - path, - color, - elevation, - transparentOccluder, - ], - ), - returnValueForMissingStub: null, - ); -} - -/// A class which mocks [CanvasWrapper]. -/// -/// See the documentation for Mockito's code generation for more information. -class MockCanvasWrapper extends _i1.Mock implements _i6.CanvasWrapper { - MockCanvasWrapper() { - _i1.throwOnMissingStub(this); - } - - @override - _i2.Canvas get canvas => (super.noSuchMethod( - Invocation.getter(#canvas), - returnValue: _FakeCanvas_1( - this, - Invocation.getter(#canvas), - ), - ) as _i2.Canvas); - - @override - _i2.Size get size => (super.noSuchMethod( - Invocation.getter(#size), - returnValue: _FakeSize_2( - this, - Invocation.getter(#size), - ), - ) as _i2.Size); - - @override - void drawRRect( - _i2.RRect? rrect, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawRRect, - [ - rrect, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void save() => super.noSuchMethod( - Invocation.method( - #save, - [], - ), - returnValueForMissingStub: null, - ); - - @override - void restore() => super.noSuchMethod( - Invocation.method( - #restore, - [], - ), - returnValueForMissingStub: null, - ); - - @override - void clipRect( - _i2.Rect? rect, { - _i2.ClipOp? clipOp = _i2.ClipOp.intersect, - bool? doAntiAlias = true, - }) => - super.noSuchMethod( - Invocation.method( - #clipRect, - [rect], - { - #clipOp: clipOp, - #doAntiAlias: doAntiAlias, - }, - ), - returnValueForMissingStub: null, - ); - - @override - void translate( - double? dx, - double? dy, - ) => - super.noSuchMethod( - Invocation.method( - #translate, - [ - dx, - dy, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void rotate(double? radius) => super.noSuchMethod( - Invocation.method( - #rotate, - [radius], - ), - returnValueForMissingStub: null, - ); - - @override - void drawPath( - _i2.Path? path, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawPath, - [ - path, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void saveLayer( - _i2.Rect? bounds, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #saveLayer, - [ - bounds, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawPicture(_i2.Picture? picture) => super.noSuchMethod( - Invocation.method( - #drawPicture, - [picture], - ), - returnValueForMissingStub: null, - ); - - @override - void drawImage( - _i2.Image? image, - _i2.Offset? offset, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawImage, - [ - image, - offset, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void clipPath( - _i2.Path? path, { - bool? doAntiAlias = true, - }) => - super.noSuchMethod( - Invocation.method( - #clipPath, - [path], - {#doAntiAlias: doAntiAlias}, - ), - returnValueForMissingStub: null, - ); - - @override - void drawRect( - _i2.Rect? rect, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawRect, - [ - rect, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawLine( - _i2.Offset? p1, - _i2.Offset? p2, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawLine, - [ - p1, - p2, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawCircle( - _i2.Offset? center, - double? radius, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawCircle, - [ - center, - radius, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawArc( - _i2.Rect? rect, - double? startAngle, - double? sweepAngle, - bool? useCenter, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawArc, - [ - rect, - startAngle, - sweepAngle, - useCenter, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawText( - _i3.TextPainter? tp, - _i2.Offset? offset, [ - double? rotateAngle, - ]) => - super.noSuchMethod( - Invocation.method( - #drawText, - [ - tp, - offset, - rotateAngle, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawDot( - _i7.FlDotPainter? painter, - _i7.FlSpot? spot, - _i2.Offset? offset, - ) => - super.noSuchMethod( - Invocation.method( - #drawDot, - [ - painter, - spot, - offset, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawRotated({ - required _i2.Size? size, - _i2.Offset? rotationOffset = _i2.Offset.zero, - _i2.Offset? drawOffset = _i2.Offset.zero, - required double? angle, - required _i6.DrawCallback? drawCallback, - }) => - super.noSuchMethod( - Invocation.method( - #drawRotated, - [], - { - #size: size, - #rotationOffset: rotationOffset, - #drawOffset: drawOffset, - #angle: angle, - #drawCallback: drawCallback, - }, - ), - returnValueForMissingStub: null, - ); - - @override - void drawDashedLine( - _i2.Offset? from, - _i2.Offset? to, - _i2.Paint? painter, - List? dashArray, - ) => - super.noSuchMethod( - Invocation.method( - #drawDashedLine, - [ - from, - to, - painter, - dashArray, - ], - ), - returnValueForMissingStub: null, - ); -} - -/// A class which mocks [BuildContext]. -/// -/// See the documentation for Mockito's code generation for more information. -class MockBuildContext extends _i1.Mock implements _i3.BuildContext { - MockBuildContext() { - _i1.throwOnMissingStub(this); - } - - @override - _i3.Widget get widget => (super.noSuchMethod( - Invocation.getter(#widget), - returnValue: _FakeWidget_3( - this, - Invocation.getter(#widget), - ), - ) as _i3.Widget); - - @override - bool get mounted => (super.noSuchMethod( - Invocation.getter(#mounted), - returnValue: false, - ) as bool); - - @override - bool get debugDoingBuild => (super.noSuchMethod( - Invocation.getter(#debugDoingBuild), - returnValue: false, - ) as bool); - - @override - _i3.InheritedWidget dependOnInheritedElement( - _i3.InheritedElement? ancestor, { - Object? aspect, - }) => - (super.noSuchMethod( - Invocation.method( - #dependOnInheritedElement, - [ancestor], - {#aspect: aspect}, - ), - returnValue: _FakeInheritedWidget_4( - this, - Invocation.method( - #dependOnInheritedElement, - [ancestor], - {#aspect: aspect}, - ), - ), - ) as _i3.InheritedWidget); - - @override - void visitAncestorElements(_i3.ConditionalElementVisitor? visitor) => - super.noSuchMethod( - Invocation.method( - #visitAncestorElements, - [visitor], - ), - returnValueForMissingStub: null, - ); - - @override - void visitChildElements(_i3.ElementVisitor? visitor) => super.noSuchMethod( - Invocation.method( - #visitChildElements, - [visitor], - ), - returnValueForMissingStub: null, - ); - - @override - void dispatchNotification(_i3.Notification? notification) => - super.noSuchMethod( - Invocation.method( - #dispatchNotification, - [notification], - ), - returnValueForMissingStub: null, - ); - - @override - _i3.DiagnosticsNode describeElement( - String? name, { - _i4.DiagnosticsTreeStyle? style = _i4.DiagnosticsTreeStyle.errorProperty, - }) => - (super.noSuchMethod( - Invocation.method( - #describeElement, - [name], - {#style: style}, - ), - returnValue: _FakeDiagnosticsNode_5( - this, - Invocation.method( - #describeElement, - [name], - {#style: style}, - ), - ), - ) as _i3.DiagnosticsNode); - - @override - _i3.DiagnosticsNode describeWidget( - String? name, { - _i4.DiagnosticsTreeStyle? style = _i4.DiagnosticsTreeStyle.errorProperty, - }) => - (super.noSuchMethod( - Invocation.method( - #describeWidget, - [name], - {#style: style}, - ), - returnValue: _FakeDiagnosticsNode_5( - this, - Invocation.method( - #describeWidget, - [name], - {#style: style}, - ), - ), - ) as _i3.DiagnosticsNode); - - @override - List<_i3.DiagnosticsNode> describeMissingAncestor( - {required Type? expectedAncestorType}) => - (super.noSuchMethod( - Invocation.method( - #describeMissingAncestor, - [], - {#expectedAncestorType: expectedAncestorType}, - ), - returnValue: <_i3.DiagnosticsNode>[], - ) as List<_i3.DiagnosticsNode>); - - @override - _i3.DiagnosticsNode describeOwnershipChain(String? name) => - (super.noSuchMethod( - Invocation.method( - #describeOwnershipChain, - [name], - ), - returnValue: _FakeDiagnosticsNode_5( - this, - Invocation.method( - #describeOwnershipChain, - [name], - ), - ), - ) as _i3.DiagnosticsNode); -} - -/// A class which mocks [Utils]. -/// -/// See the documentation for Mockito's code generation for more information. -class MockUtils extends _i1.Mock implements _i8.Utils { - MockUtils() { - _i1.throwOnMissingStub(this); - } - - @override - double radians(double? degrees) => (super.noSuchMethod( - Invocation.method( - #radians, - [degrees], - ), - returnValue: 0.0, - ) as double); - - @override - double degrees(double? radians) => (super.noSuchMethod( - Invocation.method( - #degrees, - [radians], - ), - returnValue: 0.0, - ) as double); - - @override - _i2.Size getDefaultSize(_i2.Size? screenSize) => (super.noSuchMethod( - Invocation.method( - #getDefaultSize, - [screenSize], - ), - returnValue: _FakeSize_2( - this, - Invocation.method( - #getDefaultSize, - [screenSize], - ), - ), - ) as _i2.Size); - - @override - double translateRotatedPosition( - double? size, - double? degree, - ) => - (super.noSuchMethod( - Invocation.method( - #translateRotatedPosition, - [ - size, - degree, - ], - ), - returnValue: 0.0, - ) as double); - - @override - _i2.Offset calculateRotationOffset( - _i2.Size? size, - double? degree, - ) => - (super.noSuchMethod( - Invocation.method( - #calculateRotationOffset, - [ - size, - degree, - ], - ), - returnValue: _FakeOffset_6( - this, - Invocation.method( - #calculateRotationOffset, - [ - size, - degree, - ], - ), - ), - ) as _i2.Offset); - - @override - _i3.BorderRadius? normalizeBorderRadius( - _i3.BorderRadius? borderRadius, - double? width, - ) => - (super.noSuchMethod(Invocation.method( - #normalizeBorderRadius, - [ - borderRadius, - width, - ], - )) as _i3.BorderRadius?); - - @override - _i3.BorderSide normalizeBorderSide( - _i3.BorderSide? borderSide, - double? width, - ) => - (super.noSuchMethod( - Invocation.method( - #normalizeBorderSide, - [ - borderSide, - width, - ], - ), - returnValue: _FakeBorderSide_7( - this, - Invocation.method( - #normalizeBorderSide, - [ - borderSide, - width, - ], - ), - ), - ) as _i3.BorderSide); - - @override - double getEfficientInterval( - double? axisViewSize, - double? diffInAxis, { - double? pixelPerInterval = 40.0, - }) => - (super.noSuchMethod( - Invocation.method( - #getEfficientInterval, - [ - axisViewSize, - diffInAxis, - ], - {#pixelPerInterval: pixelPerInterval}, - ), - returnValue: 0.0, - ) as double); - - @override - double roundInterval(double? input) => (super.noSuchMethod( - Invocation.method( - #roundInterval, - [input], - ), - returnValue: 0.0, - ) as double); - - @override - int getFractionDigits(double? value) => (super.noSuchMethod( - Invocation.method( - #getFractionDigits, - [value], - ), - returnValue: 0, - ) as int); - - @override - String formatNumber( - double? axisMin, - double? axisMax, - double? axisValue, - ) => - (super.noSuchMethod( - Invocation.method( - #formatNumber, - [ - axisMin, - axisMax, - axisValue, - ], - ), - returnValue: '', - ) as String); - - @override - _i3.TextStyle getThemeAwareTextStyle( - _i3.BuildContext? context, - _i3.TextStyle? providedStyle, - ) => - (super.noSuchMethod( - Invocation.method( - #getThemeAwareTextStyle, - [ - context, - providedStyle, - ], - ), - returnValue: _FakeTextStyle_8( - this, - Invocation.method( - #getThemeAwareTextStyle, - [ - context, - providedStyle, - ], - ), - ), - ) as _i3.TextStyle); - - @override - double getBestInitialIntervalValue( - double? min, - double? max, - double? interval, { - double? baseline = 0.0, - }) => - (super.noSuchMethod( - Invocation.method( - #getBestInitialIntervalValue, - [ - min, - max, - interval, - ], - {#baseline: baseline}, - ), - returnValue: 0.0, - ) as double); - - @override - double convertRadiusToSigma(double? radius) => (super.noSuchMethod( - Invocation.method( - #convertRadiusToSigma, - [radius], - ), - returnValue: 0.0, - ) as double); -} diff --git a/test/chart/radar_chart/radar_chart_renderer_test.dart b/test/chart/radar_chart/radar_chart_renderer_test.dart deleted file mode 100644 index 31354ab31d..0000000000 --- a/test/chart/radar_chart/radar_chart_renderer_test.dart +++ /dev/null @@ -1,108 +0,0 @@ -import 'package:fl_chart/fl_chart.dart'; -import 'package:fl_chart/src/chart/base/base_chart/base_chart_painter.dart'; -import 'package:fl_chart/src/chart/radar_chart/radar_chart_painter.dart'; -import 'package:fl_chart/src/chart/radar_chart/radar_chart_renderer.dart'; -import 'package:fl_chart/src/utils/canvas_wrapper.dart'; -import 'package:flutter/cupertino.dart'; -import 'package:flutter_test/flutter_test.dart'; -import 'package:mockito/annotations.dart'; -import 'package:mockito/mockito.dart'; - -import '../data_pool.dart'; -import 'radar_chart_renderer_test.mocks.dart'; - -@GenerateMocks([Canvas, PaintingContext, BuildContext, RadarChartPainter]) -void main() { - group('RadarChartRenderer', () { - final data = RadarChartData( - dataSets: [MockData.radarDataSet1], - tickCount: 1, - ); - - final targetData = RadarChartData( - dataSets: [MockData.radarDataSet2], - tickCount: 1, - ); - - const textScaler = TextScaler.linear(4); - - final mockBuildContext = MockBuildContext(); - final renderRadarChart = RenderRadarChart( - mockBuildContext, - data, - targetData, - textScaler, - ); - - final mockPainter = MockRadarChartPainter(); - final mockPaintingContext = MockPaintingContext(); - final mockCanvas = MockCanvas(); - const mockSize = Size(44, 44); - when(mockPaintingContext.canvas).thenAnswer((realInvocation) => mockCanvas); - renderRadarChart - ..mockTestSize = mockSize - ..painter = mockPainter; - - test('test 1 correct data set', () { - expect(renderRadarChart.data == data, true); - expect(renderRadarChart.data == targetData, false); - expect(renderRadarChart.targetData == targetData, true); - expect(renderRadarChart.textScaler == textScaler, true); - expect(renderRadarChart.paintHolder.data == data, true); - expect(renderRadarChart.paintHolder.targetData == targetData, true); - expect(renderRadarChart.paintHolder.textScaler == textScaler, true); - }); - - test('test 2 check paint function', () { - renderRadarChart.paint(mockPaintingContext, const Offset(10, 10)); - verify(mockCanvas.save()).called(1); - verify(mockCanvas.translate(10, 10)).called(1); - final result = verify(mockPainter.paint(any, captureAny, captureAny)); - expect(result.callCount, 1); - - final canvasWrapper = result.captured[0] as CanvasWrapper; - expect(canvasWrapper.size, const Size(44, 44)); - expect(canvasWrapper.canvas, mockCanvas); - - final paintHolder = result.captured[1] as PaintHolder; - expect(paintHolder.data, data); - expect(paintHolder.targetData, targetData); - expect(paintHolder.textScaler, textScaler); - - verify(mockCanvas.restore()).called(1); - }); - - test('test 3 check getResponseAtLocation function', () { - final results = >[]; - when(mockPainter.handleTouch(captureAny, captureAny, captureAny)) - .thenAnswer((inv) { - results.add({ - 'local_position': inv.positionalArguments[0] as Offset, - 'size': inv.positionalArguments[1] as Size, - 'paint_holder': inv.positionalArguments[2] as PaintHolder, - }); - return MockData.radarTouchedSpot; - }); - final touchResponse = - renderRadarChart.getResponseAtLocation(MockData.offset1); - expect(touchResponse.touchedSpot, MockData.radarTouchedSpot); - expect(results[0]['local_position'] as Offset, MockData.offset1); - expect(results[0]['size'] as Size, mockSize); - final paintHolder = results[0]['paint_holder'] as PaintHolder; - expect(paintHolder.data, data); - expect(paintHolder.targetData, targetData); - expect(paintHolder.textScaler, textScaler); - }); - - test('test 4 check setters', () { - renderRadarChart - ..data = targetData - ..targetData = data - ..textScaler = const TextScaler.linear(22); - - expect(renderRadarChart.data, targetData); - expect(renderRadarChart.targetData, data); - expect(renderRadarChart.textScaler, const TextScaler.linear(22)); - }); - }); -} diff --git a/test/chart/radar_chart/radar_chart_renderer_test.mocks.dart b/test/chart/radar_chart/radar_chart_renderer_test.mocks.dart deleted file mode 100644 index a176f281b3..0000000000 --- a/test/chart/radar_chart/radar_chart_renderer_test.mocks.dart +++ /dev/null @@ -1,1449 +0,0 @@ -// Mocks generated by Mockito 5.4.2 from annotations -// in fl_chart/test/chart/radar_chart/radar_chart_renderer_test.dart. -// Do not manually edit this file. - -// ignore_for_file: no_leading_underscores_for_library_prefixes -import 'dart:typed_data' as _i7; -import 'dart:ui' as _i2; - -import 'package:fl_chart/fl_chart.dart' as _i13; -import 'package:fl_chart/src/chart/base/base_chart/base_chart_painter.dart' - as _i12; -import 'package:fl_chart/src/chart/radar_chart/radar_chart_painter.dart' - as _i10; -import 'package:fl_chart/src/utils/canvas_wrapper.dart' as _i11; -import 'package:flutter/foundation.dart' as _i5; -import 'package:flutter/gestures.dart' as _i8; -import 'package:flutter/material.dart' as _i6; -import 'package:flutter/rendering.dart' as _i3; -import 'package:flutter/src/rendering/layer.dart' as _i4; -import 'package:flutter/src/widgets/notification_listener.dart' as _i9; -import 'package:mockito/mockito.dart' as _i1; - -// ignore_for_file: type=lint -// ignore_for_file: avoid_redundant_argument_values -// ignore_for_file: avoid_setters_without_getters -// ignore_for_file: comment_references -// ignore_for_file: implementation_imports -// ignore_for_file: invalid_use_of_visible_for_testing_member -// ignore_for_file: prefer_const_constructors -// ignore_for_file: unnecessary_parenthesis -// ignore_for_file: camel_case_types -// ignore_for_file: subtype_of_sealed_class - -class _FakeRect_0 extends _i1.SmartFake implements _i2.Rect { - _FakeRect_0( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); -} - -class _FakeCanvas_1 extends _i1.SmartFake implements _i2.Canvas { - _FakeCanvas_1( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); -} - -class _FakePaintingContext_2 extends _i1.SmartFake - implements _i3.PaintingContext { - _FakePaintingContext_2( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); -} - -class _FakeColorFilterLayer_3 extends _i1.SmartFake - implements _i4.ColorFilterLayer { - _FakeColorFilterLayer_3( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); - - @override - String toString({_i5.DiagnosticLevel? minLevel = _i5.DiagnosticLevel.info}) => - super.toString(); -} - -class _FakeOpacityLayer_4 extends _i1.SmartFake implements _i4.OpacityLayer { - _FakeOpacityLayer_4( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); - - @override - String toString({_i5.DiagnosticLevel? minLevel = _i5.DiagnosticLevel.info}) => - super.toString(); -} - -class _FakeWidget_5 extends _i1.SmartFake implements _i6.Widget { - _FakeWidget_5( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); - - @override - String toString({_i5.DiagnosticLevel? minLevel = _i5.DiagnosticLevel.info}) => - super.toString(); -} - -class _FakeInheritedWidget_6 extends _i1.SmartFake - implements _i6.InheritedWidget { - _FakeInheritedWidget_6( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); - - @override - String toString({_i5.DiagnosticLevel? minLevel = _i5.DiagnosticLevel.info}) => - super.toString(); -} - -class _FakeDiagnosticsNode_7 extends _i1.SmartFake - implements _i5.DiagnosticsNode { - _FakeDiagnosticsNode_7( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); - - @override - String toString({ - _i5.TextTreeConfiguration? parentConfiguration, - _i5.DiagnosticLevel? minLevel = _i5.DiagnosticLevel.info, - }) => - super.toString(); -} - -/// A class which mocks [Canvas]. -/// -/// See the documentation for Mockito's code generation for more information. -class MockCanvas extends _i1.Mock implements _i2.Canvas { - MockCanvas() { - _i1.throwOnMissingStub(this); - } - - @override - void save() => super.noSuchMethod( - Invocation.method( - #save, - [], - ), - returnValueForMissingStub: null, - ); - - @override - void saveLayer( - _i2.Rect? bounds, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #saveLayer, - [ - bounds, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void restore() => super.noSuchMethod( - Invocation.method( - #restore, - [], - ), - returnValueForMissingStub: null, - ); - - @override - void restoreToCount(int? count) => super.noSuchMethod( - Invocation.method( - #restoreToCount, - [count], - ), - returnValueForMissingStub: null, - ); - - @override - int getSaveCount() => (super.noSuchMethod( - Invocation.method( - #getSaveCount, - [], - ), - returnValue: 0, - ) as int); - - @override - void translate( - double? dx, - double? dy, - ) => - super.noSuchMethod( - Invocation.method( - #translate, - [ - dx, - dy, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void scale( - double? sx, [ - double? sy, - ]) => - super.noSuchMethod( - Invocation.method( - #scale, - [ - sx, - sy, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void rotate(double? radians) => super.noSuchMethod( - Invocation.method( - #rotate, - [radians], - ), - returnValueForMissingStub: null, - ); - - @override - void skew( - double? sx, - double? sy, - ) => - super.noSuchMethod( - Invocation.method( - #skew, - [ - sx, - sy, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void transform(_i7.Float64List? matrix4) => super.noSuchMethod( - Invocation.method( - #transform, - [matrix4], - ), - returnValueForMissingStub: null, - ); - - @override - _i7.Float64List getTransform() => (super.noSuchMethod( - Invocation.method( - #getTransform, - [], - ), - returnValue: _i7.Float64List(0), - ) as _i7.Float64List); - - @override - void clipRect( - _i2.Rect? rect, { - _i2.ClipOp? clipOp = _i2.ClipOp.intersect, - bool? doAntiAlias = true, - }) => - super.noSuchMethod( - Invocation.method( - #clipRect, - [rect], - { - #clipOp: clipOp, - #doAntiAlias: doAntiAlias, - }, - ), - returnValueForMissingStub: null, - ); - - @override - void clipRRect( - _i2.RRect? rrect, { - bool? doAntiAlias = true, - }) => - super.noSuchMethod( - Invocation.method( - #clipRRect, - [rrect], - {#doAntiAlias: doAntiAlias}, - ), - returnValueForMissingStub: null, - ); - - @override - void clipPath( - _i2.Path? path, { - bool? doAntiAlias = true, - }) => - super.noSuchMethod( - Invocation.method( - #clipPath, - [path], - {#doAntiAlias: doAntiAlias}, - ), - returnValueForMissingStub: null, - ); - - @override - _i2.Rect getLocalClipBounds() => (super.noSuchMethod( - Invocation.method( - #getLocalClipBounds, - [], - ), - returnValue: _FakeRect_0( - this, - Invocation.method( - #getLocalClipBounds, - [], - ), - ), - ) as _i2.Rect); - - @override - _i2.Rect getDestinationClipBounds() => (super.noSuchMethod( - Invocation.method( - #getDestinationClipBounds, - [], - ), - returnValue: _FakeRect_0( - this, - Invocation.method( - #getDestinationClipBounds, - [], - ), - ), - ) as _i2.Rect); - - @override - void drawColor( - _i2.Color? color, - _i2.BlendMode? blendMode, - ) => - super.noSuchMethod( - Invocation.method( - #drawColor, - [ - color, - blendMode, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawLine( - _i2.Offset? p1, - _i2.Offset? p2, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawLine, - [ - p1, - p2, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawPaint(_i2.Paint? paint) => super.noSuchMethod( - Invocation.method( - #drawPaint, - [paint], - ), - returnValueForMissingStub: null, - ); - - @override - void drawRect( - _i2.Rect? rect, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawRect, - [ - rect, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawRRect( - _i2.RRect? rrect, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawRRect, - [ - rrect, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawDRRect( - _i2.RRect? outer, - _i2.RRect? inner, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawDRRect, - [ - outer, - inner, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawOval( - _i2.Rect? rect, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawOval, - [ - rect, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawCircle( - _i2.Offset? c, - double? radius, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawCircle, - [ - c, - radius, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawArc( - _i2.Rect? rect, - double? startAngle, - double? sweepAngle, - bool? useCenter, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawArc, - [ - rect, - startAngle, - sweepAngle, - useCenter, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawPath( - _i2.Path? path, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawPath, - [ - path, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawImage( - _i2.Image? image, - _i2.Offset? offset, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawImage, - [ - image, - offset, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawImageRect( - _i2.Image? image, - _i2.Rect? src, - _i2.Rect? dst, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawImageRect, - [ - image, - src, - dst, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawImageNine( - _i2.Image? image, - _i2.Rect? center, - _i2.Rect? dst, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawImageNine, - [ - image, - center, - dst, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawPicture(_i2.Picture? picture) => super.noSuchMethod( - Invocation.method( - #drawPicture, - [picture], - ), - returnValueForMissingStub: null, - ); - - @override - void drawParagraph( - _i2.Paragraph? paragraph, - _i2.Offset? offset, - ) => - super.noSuchMethod( - Invocation.method( - #drawParagraph, - [ - paragraph, - offset, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawPoints( - _i2.PointMode? pointMode, - List<_i2.Offset>? points, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawPoints, - [ - pointMode, - points, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawRawPoints( - _i2.PointMode? pointMode, - _i7.Float32List? points, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawRawPoints, - [ - pointMode, - points, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawVertices( - _i2.Vertices? vertices, - _i2.BlendMode? blendMode, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawVertices, - [ - vertices, - blendMode, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawAtlas( - _i2.Image? atlas, - List<_i2.RSTransform>? transforms, - List<_i2.Rect>? rects, - List<_i2.Color>? colors, - _i2.BlendMode? blendMode, - _i2.Rect? cullRect, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawAtlas, - [ - atlas, - transforms, - rects, - colors, - blendMode, - cullRect, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawRawAtlas( - _i2.Image? atlas, - _i7.Float32List? rstTransforms, - _i7.Float32List? rects, - _i7.Int32List? colors, - _i2.BlendMode? blendMode, - _i2.Rect? cullRect, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawRawAtlas, - [ - atlas, - rstTransforms, - rects, - colors, - blendMode, - cullRect, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawShadow( - _i2.Path? path, - _i2.Color? color, - double? elevation, - bool? transparentOccluder, - ) => - super.noSuchMethod( - Invocation.method( - #drawShadow, - [ - path, - color, - elevation, - transparentOccluder, - ], - ), - returnValueForMissingStub: null, - ); -} - -/// A class which mocks [PaintingContext]. -/// -/// See the documentation for Mockito's code generation for more information. -class MockPaintingContext extends _i1.Mock implements _i3.PaintingContext { - MockPaintingContext() { - _i1.throwOnMissingStub(this); - } - - @override - _i2.Rect get estimatedBounds => (super.noSuchMethod( - Invocation.getter(#estimatedBounds), - returnValue: _FakeRect_0( - this, - Invocation.getter(#estimatedBounds), - ), - ) as _i2.Rect); - - @override - _i2.Canvas get canvas => (super.noSuchMethod( - Invocation.getter(#canvas), - returnValue: _FakeCanvas_1( - this, - Invocation.getter(#canvas), - ), - ) as _i2.Canvas); - - @override - void paintChild( - _i3.RenderObject? child, - _i2.Offset? offset, - ) => - super.noSuchMethod( - Invocation.method( - #paintChild, - [ - child, - offset, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void appendLayer(_i4.Layer? layer) => super.noSuchMethod( - Invocation.method( - #appendLayer, - [layer], - ), - returnValueForMissingStub: null, - ); - - @override - _i2.VoidCallback addCompositionCallback(_i4.CompositionCallback? callback) => - (super.noSuchMethod( - Invocation.method( - #addCompositionCallback, - [callback], - ), - returnValue: () {}, - ) as _i2.VoidCallback); - - @override - void stopRecordingIfNeeded() => super.noSuchMethod( - Invocation.method( - #stopRecordingIfNeeded, - [], - ), - returnValueForMissingStub: null, - ); - - @override - void setIsComplexHint() => super.noSuchMethod( - Invocation.method( - #setIsComplexHint, - [], - ), - returnValueForMissingStub: null, - ); - - @override - void setWillChangeHint() => super.noSuchMethod( - Invocation.method( - #setWillChangeHint, - [], - ), - returnValueForMissingStub: null, - ); - - @override - void addLayer(_i4.Layer? layer) => super.noSuchMethod( - Invocation.method( - #addLayer, - [layer], - ), - returnValueForMissingStub: null, - ); - - @override - void pushLayer( - _i4.ContainerLayer? childLayer, - _i3.PaintingContextCallback? painter, - _i2.Offset? offset, { - _i2.Rect? childPaintBounds, - }) => - super.noSuchMethod( - Invocation.method( - #pushLayer, - [ - childLayer, - painter, - offset, - ], - {#childPaintBounds: childPaintBounds}, - ), - returnValueForMissingStub: null, - ); - - @override - _i3.PaintingContext createChildContext( - _i4.ContainerLayer? childLayer, - _i2.Rect? bounds, - ) => - (super.noSuchMethod( - Invocation.method( - #createChildContext, - [ - childLayer, - bounds, - ], - ), - returnValue: _FakePaintingContext_2( - this, - Invocation.method( - #createChildContext, - [ - childLayer, - bounds, - ], - ), - ), - ) as _i3.PaintingContext); - - @override - _i4.ClipRectLayer? pushClipRect( - bool? needsCompositing, - _i2.Offset? offset, - _i2.Rect? clipRect, - _i3.PaintingContextCallback? painter, { - _i2.Clip? clipBehavior = _i2.Clip.hardEdge, - _i4.ClipRectLayer? oldLayer, - }) => - (super.noSuchMethod(Invocation.method( - #pushClipRect, - [ - needsCompositing, - offset, - clipRect, - painter, - ], - { - #clipBehavior: clipBehavior, - #oldLayer: oldLayer, - }, - )) as _i4.ClipRectLayer?); - - @override - _i4.ClipRRectLayer? pushClipRRect( - bool? needsCompositing, - _i2.Offset? offset, - _i2.Rect? bounds, - _i2.RRect? clipRRect, - _i3.PaintingContextCallback? painter, { - _i2.Clip? clipBehavior = _i2.Clip.antiAlias, - _i4.ClipRRectLayer? oldLayer, - }) => - (super.noSuchMethod(Invocation.method( - #pushClipRRect, - [ - needsCompositing, - offset, - bounds, - clipRRect, - painter, - ], - { - #clipBehavior: clipBehavior, - #oldLayer: oldLayer, - }, - )) as _i4.ClipRRectLayer?); - - @override - _i4.ClipPathLayer? pushClipPath( - bool? needsCompositing, - _i2.Offset? offset, - _i2.Rect? bounds, - _i2.Path? clipPath, - _i3.PaintingContextCallback? painter, { - _i2.Clip? clipBehavior = _i2.Clip.antiAlias, - _i4.ClipPathLayer? oldLayer, - }) => - (super.noSuchMethod(Invocation.method( - #pushClipPath, - [ - needsCompositing, - offset, - bounds, - clipPath, - painter, - ], - { - #clipBehavior: clipBehavior, - #oldLayer: oldLayer, - }, - )) as _i4.ClipPathLayer?); - - @override - _i4.ColorFilterLayer pushColorFilter( - _i2.Offset? offset, - _i2.ColorFilter? colorFilter, - _i3.PaintingContextCallback? painter, { - _i4.ColorFilterLayer? oldLayer, - }) => - (super.noSuchMethod( - Invocation.method( - #pushColorFilter, - [ - offset, - colorFilter, - painter, - ], - {#oldLayer: oldLayer}, - ), - returnValue: _FakeColorFilterLayer_3( - this, - Invocation.method( - #pushColorFilter, - [ - offset, - colorFilter, - painter, - ], - {#oldLayer: oldLayer}, - ), - ), - ) as _i4.ColorFilterLayer); - - @override - _i4.TransformLayer? pushTransform( - bool? needsCompositing, - _i2.Offset? offset, - _i8.Matrix4? transform, - _i3.PaintingContextCallback? painter, { - _i4.TransformLayer? oldLayer, - }) => - (super.noSuchMethod(Invocation.method( - #pushTransform, - [ - needsCompositing, - offset, - transform, - painter, - ], - {#oldLayer: oldLayer}, - )) as _i4.TransformLayer?); - - @override - _i4.OpacityLayer pushOpacity( - _i2.Offset? offset, - int? alpha, - _i3.PaintingContextCallback? painter, { - _i4.OpacityLayer? oldLayer, - }) => - (super.noSuchMethod( - Invocation.method( - #pushOpacity, - [ - offset, - alpha, - painter, - ], - {#oldLayer: oldLayer}, - ), - returnValue: _FakeOpacityLayer_4( - this, - Invocation.method( - #pushOpacity, - [ - offset, - alpha, - painter, - ], - {#oldLayer: oldLayer}, - ), - ), - ) as _i4.OpacityLayer); - - @override - void clipPathAndPaint( - _i2.Path? path, - _i2.Clip? clipBehavior, - _i2.Rect? bounds, - _i2.VoidCallback? painter, - ) => - super.noSuchMethod( - Invocation.method( - #clipPathAndPaint, - [ - path, - clipBehavior, - bounds, - painter, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void clipRRectAndPaint( - _i2.RRect? rrect, - _i2.Clip? clipBehavior, - _i2.Rect? bounds, - _i2.VoidCallback? painter, - ) => - super.noSuchMethod( - Invocation.method( - #clipRRectAndPaint, - [ - rrect, - clipBehavior, - bounds, - painter, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void clipRectAndPaint( - _i2.Rect? rect, - _i2.Clip? clipBehavior, - _i2.Rect? bounds, - _i2.VoidCallback? painter, - ) => - super.noSuchMethod( - Invocation.method( - #clipRectAndPaint, - [ - rect, - clipBehavior, - bounds, - painter, - ], - ), - returnValueForMissingStub: null, - ); -} - -/// A class which mocks [BuildContext]. -/// -/// See the documentation for Mockito's code generation for more information. -class MockBuildContext extends _i1.Mock implements _i6.BuildContext { - MockBuildContext() { - _i1.throwOnMissingStub(this); - } - - @override - _i6.Widget get widget => (super.noSuchMethod( - Invocation.getter(#widget), - returnValue: _FakeWidget_5( - this, - Invocation.getter(#widget), - ), - ) as _i6.Widget); - - @override - bool get mounted => (super.noSuchMethod( - Invocation.getter(#mounted), - returnValue: false, - ) as bool); - - @override - bool get debugDoingBuild => (super.noSuchMethod( - Invocation.getter(#debugDoingBuild), - returnValue: false, - ) as bool); - - @override - _i6.InheritedWidget dependOnInheritedElement( - _i6.InheritedElement? ancestor, { - Object? aspect, - }) => - (super.noSuchMethod( - Invocation.method( - #dependOnInheritedElement, - [ancestor], - {#aspect: aspect}, - ), - returnValue: _FakeInheritedWidget_6( - this, - Invocation.method( - #dependOnInheritedElement, - [ancestor], - {#aspect: aspect}, - ), - ), - ) as _i6.InheritedWidget); - - @override - void visitAncestorElements(_i6.ConditionalElementVisitor? visitor) => - super.noSuchMethod( - Invocation.method( - #visitAncestorElements, - [visitor], - ), - returnValueForMissingStub: null, - ); - - @override - void visitChildElements(_i6.ElementVisitor? visitor) => super.noSuchMethod( - Invocation.method( - #visitChildElements, - [visitor], - ), - returnValueForMissingStub: null, - ); - - @override - void dispatchNotification(_i9.Notification? notification) => - super.noSuchMethod( - Invocation.method( - #dispatchNotification, - [notification], - ), - returnValueForMissingStub: null, - ); - - @override - _i5.DiagnosticsNode describeElement( - String? name, { - _i5.DiagnosticsTreeStyle? style = _i5.DiagnosticsTreeStyle.errorProperty, - }) => - (super.noSuchMethod( - Invocation.method( - #describeElement, - [name], - {#style: style}, - ), - returnValue: _FakeDiagnosticsNode_7( - this, - Invocation.method( - #describeElement, - [name], - {#style: style}, - ), - ), - ) as _i5.DiagnosticsNode); - - @override - _i5.DiagnosticsNode describeWidget( - String? name, { - _i5.DiagnosticsTreeStyle? style = _i5.DiagnosticsTreeStyle.errorProperty, - }) => - (super.noSuchMethod( - Invocation.method( - #describeWidget, - [name], - {#style: style}, - ), - returnValue: _FakeDiagnosticsNode_7( - this, - Invocation.method( - #describeWidget, - [name], - {#style: style}, - ), - ), - ) as _i5.DiagnosticsNode); - - @override - List<_i5.DiagnosticsNode> describeMissingAncestor( - {required Type? expectedAncestorType}) => - (super.noSuchMethod( - Invocation.method( - #describeMissingAncestor, - [], - {#expectedAncestorType: expectedAncestorType}, - ), - returnValue: <_i5.DiagnosticsNode>[], - ) as List<_i5.DiagnosticsNode>); - - @override - _i5.DiagnosticsNode describeOwnershipChain(String? name) => - (super.noSuchMethod( - Invocation.method( - #describeOwnershipChain, - [name], - ), - returnValue: _FakeDiagnosticsNode_7( - this, - Invocation.method( - #describeOwnershipChain, - [name], - ), - ), - ) as _i5.DiagnosticsNode); -} - -/// A class which mocks [RadarChartPainter]. -/// -/// See the documentation for Mockito's code generation for more information. -class MockRadarChartPainter extends _i1.Mock implements _i10.RadarChartPainter { - MockRadarChartPainter() { - _i1.throwOnMissingStub(this); - } - - @override - set dataSetsPosition(List<_i10.RadarDataSetsPosition>? _dataSetsPosition) => - super.noSuchMethod( - Invocation.setter( - #dataSetsPosition, - _dataSetsPosition, - ), - returnValueForMissingStub: null, - ); - - @override - void paint( - _i6.BuildContext? context, - _i11.CanvasWrapper? canvasWrapper, - _i12.PaintHolder<_i13.RadarChartData>? holder, - ) => - super.noSuchMethod( - Invocation.method( - #paint, - [ - context, - canvasWrapper, - holder, - ], - ), - returnValueForMissingStub: null, - ); - - @override - double getDefaultChartCenterValue() => (super.noSuchMethod( - Invocation.method( - #getDefaultChartCenterValue, - [], - ), - returnValue: 0.0, - ) as double); - - @override - double getChartCenterValue(_i13.RadarChartData? data) => (super.noSuchMethod( - Invocation.method( - #getChartCenterValue, - [data], - ), - returnValue: 0.0, - ) as double); - - @override - double getScaledPoint( - _i13.RadarEntry? point, - double? radius, - _i13.RadarChartData? data, - ) => - (super.noSuchMethod( - Invocation.method( - #getScaledPoint, - [ - point, - radius, - data, - ], - ), - returnValue: 0.0, - ) as double); - - @override - double getFirstTickValue(_i13.RadarChartData? data) => (super.noSuchMethod( - Invocation.method( - #getFirstTickValue, - [data], - ), - returnValue: 0.0, - ) as double); - - @override - double getSpaceBetweenTicks(_i13.RadarChartData? data) => (super.noSuchMethod( - Invocation.method( - #getSpaceBetweenTicks, - [data], - ), - returnValue: 0.0, - ) as double); - - @override - void drawTicks( - _i6.BuildContext? context, - _i11.CanvasWrapper? canvasWrapper, - _i12.PaintHolder<_i13.RadarChartData>? holder, - ) => - super.noSuchMethod( - Invocation.method( - #drawTicks, - [ - context, - canvasWrapper, - holder, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawGrids( - _i11.CanvasWrapper? canvasWrapper, - _i12.PaintHolder<_i13.RadarChartData>? holder, - ) => - super.noSuchMethod( - Invocation.method( - #drawGrids, - [ - canvasWrapper, - holder, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawTitles( - _i6.BuildContext? context, - _i11.CanvasWrapper? canvasWrapper, - _i12.PaintHolder<_i13.RadarChartData>? holder, - ) => - super.noSuchMethod( - Invocation.method( - #drawTitles, - [ - context, - canvasWrapper, - holder, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawDataSets( - _i11.CanvasWrapper? canvasWrapper, - _i12.PaintHolder<_i13.RadarChartData>? holder, - ) => - super.noSuchMethod( - Invocation.method( - #drawDataSets, - [ - canvasWrapper, - holder, - ], - ), - returnValueForMissingStub: null, - ); - - @override - _i13.RadarTouchedSpot? handleTouch( - _i2.Offset? touchedPoint, - _i2.Size? viewSize, - _i12.PaintHolder<_i13.RadarChartData>? holder, - ) => - (super.noSuchMethod(Invocation.method( - #handleTouch, - [ - touchedPoint, - viewSize, - holder, - ], - )) as _i13.RadarTouchedSpot?); - - @override - double radarCenterY(_i2.Size? size) => (super.noSuchMethod( - Invocation.method( - #radarCenterY, - [size], - ), - returnValue: 0.0, - ) as double); - - @override - double radarCenterX(_i2.Size? size) => (super.noSuchMethod( - Invocation.method( - #radarCenterX, - [size], - ), - returnValue: 0.0, - ) as double); - - @override - double radarRadius(_i2.Size? size) => (super.noSuchMethod( - Invocation.method( - #radarRadius, - [size], - ), - returnValue: 0.0, - ) as double); - - @override - List<_i10.RadarDataSetsPosition> calculateDataSetsPosition( - _i2.Size? viewSize, - _i12.PaintHolder<_i13.RadarChartData>? holder, - ) => - (super.noSuchMethod( - Invocation.method( - #calculateDataSetsPosition, - [ - viewSize, - holder, - ], - ), - returnValue: <_i10.RadarDataSetsPosition>[], - ) as List<_i10.RadarDataSetsPosition>); -} diff --git a/test/chart/scatter_chart/scatter_chart_data_test.dart b/test/chart/scatter_chart/scatter_chart_data_test.dart deleted file mode 100644 index 273562b464..0000000000 --- a/test/chart/scatter_chart/scatter_chart_data_test.dart +++ /dev/null @@ -1,500 +0,0 @@ -import 'package:fl_chart/fl_chart.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_test/flutter_test.dart'; - -import '../data_pool.dart'; - -void main() { - group('ScatterChart data equality check', () { - test('ScatterChartData equality test', () { - expect(scatterChartData1 == scatterChartData1Clone, true); - expect( - scatterChartData1 == - scatterChartData1Clone.copyWith(showingTooltipIndicators: []), - false, - ); - expect( - scatterChartData1 == - scatterChartData1Clone.copyWith( - borderData: FlBorderData( - show: true, - border: Border.all(color: Colors.green), - ), - ), - false, - ); - expect( - scatterChartData1 == - scatterChartData1Clone.copyWith( - borderData: FlBorderData( - show: true, - border: Border.all(color: Colors.white), - ), - ), - true, - ); - expect( - scatterChartData1 == scatterChartData1Clone.copyWith(maxX: 444), - false, - ); - expect( - scatterChartData1 == - scatterChartData1Clone.copyWith( - scatterSpots: [ - ScatterSpot( - 0, - 0, - show: false, - radius: 33, - color: Colors.yellow, - ), - ScatterSpot( - 2, - 2, - show: false, - radius: 11, - color: Colors.purple, - ), - ScatterSpot(1, 2, show: false, radius: 11, color: Colors.white), - ], - ), - true, - ); - expect( - scatterChartData1 == - scatterChartData1Clone.copyWith( - scatterSpots: [ - ScatterSpot( - 2, - 2, - show: false, - radius: 11, - color: Colors.purple, - ), - ScatterSpot( - 0, - 0, - show: false, - radius: 33, - color: Colors.yellow, - ), - ScatterSpot(1, 2, show: false, radius: 11, color: Colors.white), - ], - ), - false, - ); - expect( - scatterChartData1 == - scatterChartData1Clone.copyWith(clipData: const FlClipData.all()), - false, - ); - expect( - scatterChartData1 == - scatterChartData1Clone.copyWith( - gridData: const FlGridData( - show: false, - getDrawingHorizontalLine: gridGetDrawingLine, - getDrawingVerticalLine: gridGetDrawingLine, - checkToShowHorizontalLine: gridCheckToShowLine, - checkToShowVerticalLine: gridCheckToShowLine, - drawVerticalLine: false, - horizontalInterval: 33, - verticalInterval: 1, - ), - ), - true, - ); - expect( - scatterChartData1 == - scatterChartData1Clone.copyWith( - gridData: const FlGridData( - getDrawingHorizontalLine: gridGetDrawingLine, - getDrawingVerticalLine: gridGetDrawingLine, - checkToShowHorizontalLine: gridCheckToShowLine, - checkToShowVerticalLine: gridCheckToShowLine, - drawVerticalLine: false, - horizontalInterval: 33, - verticalInterval: 1, - ), - ), - false, - ); - expect( - scatterChartData1 == - scatterChartData1Clone.copyWith( - gridData: FlGridData( - show: false, - getDrawingHorizontalLine: (value) => const FlLine( - color: Colors.green, - strokeWidth: 12, - dashArray: [1, 2], - ), - getDrawingVerticalLine: (value) => const FlLine( - color: Colors.yellow, - strokeWidth: 33, - dashArray: [0, 1], - ), - checkToShowHorizontalLine: (value) => false, - checkToShowVerticalLine: (value) => true, - drawVerticalLine: false, - horizontalInterval: 32, - verticalInterval: 1, - ), - ), - false, - ); - expect( - scatterChartData1 == - scatterChartData1Clone.copyWith( - titlesData: const FlTitlesData( - leftTitles: AxisTitles( - axisNameSize: 33, - axisNameWidget: MockData.widget1, - ), - rightTitles: AxisTitles( - axisNameSize: 1326, - axisNameWidget: MockData.widget3, - sideTitles: SideTitles(reservedSize: 500, showTitles: true), - ), - topTitles: AxisTitles( - axisNameSize: 34, - axisNameWidget: MockData.widget4, - ), - bottomTitles: AxisTitles( - axisNameSize: 22, - axisNameWidget: MockData.widget2, - ), - ), - ), - true, - ); - expect( - scatterChartData1 == - scatterChartData1Clone.copyWith( - titlesData: const FlTitlesData( - leftTitles: AxisTitles( - axisNameSize: 332, - axisNameWidget: Text('title 1'), - ), - rightTitles: AxisTitles( - axisNameSize: 1326, - axisNameWidget: Text('title 3'), - sideTitles: SideTitles(reservedSize: 500, showTitles: true), - ), - topTitles: AxisTitles( - axisNameSize: 34, - axisNameWidget: Text('title 4'), - ), - bottomTitles: AxisTitles( - axisNameSize: 22, - axisNameWidget: Text('title 2'), - ), - ), - ), - false, - ); - expect( - scatterChartData1 == - scatterChartData1Clone.copyWith( - titlesData: const FlTitlesData( - leftTitles: AxisTitles( - axisNameSize: 33, - axisNameWidget: Text('title 1'), - ), - rightTitles: AxisTitles( - axisNameSize: 1326, - axisNameWidget: Text('title 3'), - sideTitles: SideTitles(reservedSize: 500, showTitles: true), - ), - topTitles: AxisTitles( - axisNameSize: 34, - axisNameWidget: Text('title 4'), - ), - bottomTitles: AxisTitles( - axisNameSize: 22, - axisNameWidget: Text('title 2'), - sideTitles: SideTitles(showTitles: true), - ), - ), - ), - false, - ); - expect( - scatterChartData1 == - scatterChartData1Clone.copyWith( - titlesData: const FlTitlesData( - leftTitles: AxisTitles( - axisNameSize: 33, - axisNameWidget: Text('title 1'), - ), - rightTitles: AxisTitles( - axisNameSize: 1326, - axisNameWidget: Text('title 1'), - sideTitles: SideTitles(reservedSize: 500, showTitles: true), - ), - topTitles: AxisTitles( - axisNameSize: 34, - axisNameWidget: Text('title 4'), - ), - bottomTitles: AxisTitles( - axisNameSize: 22, - axisNameWidget: Text('title 2'), - ), - ), - ), - false, - ); - expect( - scatterChartData1 == - scatterChartData1Clone.copyWith( - titlesData: const FlTitlesData( - leftTitles: AxisTitles( - axisNameSize: 33, - axisNameWidget: Text('title 1'), - ), - rightTitles: AxisTitles( - axisNameSize: 13262, - axisNameWidget: Text('title 3'), - sideTitles: SideTitles(reservedSize: 500, showTitles: true), - ), - topTitles: AxisTitles( - axisNameSize: 34, - axisNameWidget: Text('title 4'), - ), - bottomTitles: AxisTitles( - axisNameSize: 22, - axisNameWidget: Text('title 2'), - ), - ), - ), - false, - ); - - expect( - scatterChartData1 == - scatterChartData1Clone.copyWith(showingTooltipIndicators: []), - false, - ); - - expect( - scatterChartData1 == - scatterChartData1Clone - .copyWith(showingTooltipIndicators: [2, 1, 0]), - false, - ); - - expect( - scatterChartData1 == - scatterChartData1Clone.copyWith( - scatterLabelSettings: ScatterLabelSettings( - showLabel: true, - getLabelTextStyleFunction: (int index, ScatterSpot spot) => - const TextStyle(color: Colors.green), - ), - ), - false, - ); - - expect( - scatterChartData1 == - scatterChartData1Clone.copyWith( - scatterLabelSettings: ScatterLabelSettings( - showLabel: false, - getLabelTextStyleFunction: (int index, ScatterSpot spot) => - const TextStyle(color: Colors.red), - getLabelFunction: (int index, ScatterSpot spot) => - 'Label - $index', - ), - ), - false, - ); - - expect( - scatterChartData1 == - scatterChartData1Clone.copyWith( - scatterLabelSettings: ScatterLabelSettings( - showLabel: true, - getLabelTextStyleFunction: (int index, ScatterSpot spot) => - const TextStyle(color: Colors.red), - getLabelFunction: (int index, ScatterSpot spot) => - 'Different Label - $index', - ), - ), - false, - ); - - expect( - scatterChartData1 == - scatterChartData1Clone.copyWith( - scatterLabelSettings: ScatterLabelSettings( - showLabel: true, - getLabelFunction: getLabel, - getLabelTextStyleFunction: getLabelTextStyle, - ), - ), - true, - ); - - expect( - scatterChartData1 == - scatterChartData1Clone.copyWith( - scatterLabelSettings: ScatterLabelSettings( - showLabel: true, - getLabelFunction: getLabel, - getLabelTextStyleFunction: getLabelTextStyle, - textDirection: TextDirection.rtl, - ), - ), - false, - ); - }); - - test('ScatterSpot equality test', () { - final scatterSpot = ScatterSpot(0, 1); - final scatterSpotClone = ScatterSpot(0, 1); - - expect(scatterSpot == scatterSpotClone.copyWith(), true); - expect(scatterSpot == scatterSpotClone.copyWith(y: 3), false); - expect(scatterSpot == scatterSpotClone.copyWith(x: 3), false); - }); - - test('ScatterTouchData equality test', () { - final sample = ScatterTouchData( - touchTooltipData: ScatterTouchTooltipData( - maxContentWidth: 2, - tooltipBgColor: Colors.red, - tooltipPadding: const EdgeInsets.all(11), - ), - handleBuiltInTouches: false, - touchSpotThreshold: 23, - enabled: false, - ); - final sampleClone = ScatterTouchData( - touchTooltipData: ScatterTouchTooltipData( - maxContentWidth: 2, - tooltipBgColor: Colors.red, - tooltipPadding: const EdgeInsets.all(11), - ), - handleBuiltInTouches: false, - touchSpotThreshold: 23, - enabled: false, - ); - expect(sample == sampleClone, true); - - expect( - sample == - sampleClone.copyWith( - touchCallback: (event, response) {}, - ), - false, - ); - expect( - sample == - sampleClone.copyWith( - enabled: true, - ), - false, - ); - expect( - sample == - sampleClone.copyWith( - touchSpotThreshold: 22, - ), - false, - ); - expect( - sample == - sampleClone.copyWith( - handleBuiltInTouches: true, - ), - false, - ); - expect( - sample == - sampleClone.copyWith( - longPressDuration: Duration.zero, - ), - false, - ); - }); - - test('ScatterTouchTooltipData equality test', () { - expect(scatterTouchTooltipData1 == scatterTouchTooltipData1Clone, true); - expect(scatterTouchTooltipData1 == scatterTouchTooltipData2, false); - expect(scatterTouchTooltipData1 == scatterTouchTooltipData3, false); - }); - - test('ScatterTooltipItem equality test', () { - final sample1 = ScatterTooltipItem( - 'aa', - textStyle: const TextStyle(color: Colors.red), - bottomMargin: 23, - ); - final sample2 = ScatterTooltipItem( - 'aa', - textStyle: const TextStyle(color: Colors.red), - bottomMargin: 23, - ); - expect(sample1 == sample2, true); - - var changed = ScatterTooltipItem( - 'a3a', - textStyle: const TextStyle(color: Colors.red), - bottomMargin: 23, - ); - expect(sample1 == changed, false); - - changed = ScatterTooltipItem( - 'aa', - textStyle: const TextStyle(color: Colors.green), - bottomMargin: 23, - ); - expect(sample1 == changed, false); - - changed = ScatterTooltipItem( - 'aa', - textStyle: const TextStyle(color: Colors.red), - bottomMargin: 0, - ); - expect(sample1 == changed, false); - }); - - test('ScatterLabelSettings equality test', () { - final sample1 = ScatterLabelSettings( - showLabel: true, - getLabelTextStyleFunction: getLabelTextStyle, - getLabelFunction: getLabel, - ); - final sample2 = ScatterLabelSettings( - showLabel: true, - getLabelTextStyleFunction: getLabelTextStyle, - getLabelFunction: getLabel, - ); - expect(sample1 == sample2, true); - - var changed = ScatterLabelSettings( - showLabel: false, - getLabelTextStyleFunction: getLabelTextStyle, - getLabelFunction: getLabel, - ); - expect(sample1 == changed, false); - - expect(sample1 == changed.copyWith(showLabel: true), true); - - changed = ScatterLabelSettings( - showLabel: true, - getLabelTextStyleFunction: getLabelTextStyle, - getLabelFunction: (int index, ScatterSpot spot) => 'Label', - ); - expect(sample1 == changed, false); - - changed = ScatterLabelSettings( - showLabel: true, - getLabelTextStyleFunction: getLabelTextStyle, - getLabelFunction: getLabel, - textDirection: TextDirection.rtl, - ); - expect(sample1 == changed, false); - }); - }); -} diff --git a/test/chart/scatter_chart/scatter_chart_helper_test.dart b/test/chart/scatter_chart/scatter_chart_helper_test.dart deleted file mode 100644 index d29c88d64a..0000000000 --- a/test/chart/scatter_chart/scatter_chart_helper_test.dart +++ /dev/null @@ -1,90 +0,0 @@ -import 'package:fl_chart/fl_chart.dart'; -import 'package:fl_chart/src/chart/scatter_chart/scatter_chart_helper.dart'; -import 'package:flutter_test/flutter_test.dart'; - -import '../data_pool.dart'; - -void main() { - group('Check caching of ScatterChartHelper.calculateMaxAxisValues', () { - test('Test read from cache', () { - final scatterSpots1 = [scatterSpot2]; - final result1 = ScatterChartHelper.calculateMaxAxisValues(scatterSpots1); - - final scatterSpots2 = [scatterSpot3]; - final result2 = ScatterChartHelper.calculateMaxAxisValues(scatterSpots2); - - expect(result1.readFromCache, false); - expect(result2.readFromCache, false); - }); - - test('Test read from cache', () { - final scatterSpots = [scatterSpot1, scatterSpot2, scatterSpot3]; - final scatterSpotsClone = [ - scatterSpot1Clone, - scatterSpot2Clone, - scatterSpot3, - ]; - final result1 = ScatterChartHelper.calculateMaxAxisValues(scatterSpots); - final result2 = - ScatterChartHelper.calculateMaxAxisValues(scatterSpotsClone); - expect(result1.readFromCache, false); - expect(result2.readFromCache, true); - }); - - test('Test validity 1', () { - final scatterSpots = [ - scatterSpot1, - scatterSpot2, - scatterSpot3, - scatterSpot4, - ]; - final result = ScatterChartHelper.calculateMaxAxisValues(scatterSpots); - expect(result.minX, -14); - expect(result.maxX, 1); - expect(result.minY, -8); - expect(result.maxY, 40); - }); - - test('Test validity 2', () { - final scatterSpots = [ - ScatterSpot(3, -1), - ScatterSpot(-1, 3), - ]; - final result = ScatterChartHelper.calculateMaxAxisValues(scatterSpots); - expect(result.minX, -1); - expect(result.maxX, 3); - expect(result.minY, -1); - expect(result.maxY, 3); - }); - - test('Test validity 3', () { - final scatterSpots = []; - final result = ScatterChartHelper.calculateMaxAxisValues(scatterSpots); - expect(result.minX, 0); - expect(result.maxX, 0); - expect(result.minY, 0); - expect(result.maxY, 0); - }); - - test('Test equality', () { - final scatterSpots = [scatterSpot1, scatterSpot2, scatterSpot3]; - final scatterSpotsClone = [ - scatterSpot1Clone, - scatterSpot2Clone, - scatterSpot3, - ]; - final result1 = ScatterChartHelper.calculateMaxAxisValues(scatterSpots); - final result2 = - ScatterChartHelper.calculateMaxAxisValues(scatterSpotsClone); - expect(result1, result2); - }); - - test('Test equality 2', () { - final scatterSpots = [scatterSpot1, scatterSpot2, scatterSpot3]; - final result1 = ScatterChartHelper.calculateMaxAxisValues(scatterSpots) - .copyWith(readFromCache: true); - final result2 = result1.copyWith(readFromCache: false); - expect(result1 != result2, true); - }); - }); -} diff --git a/test/chart/scatter_chart/scatter_chart_painter_test.dart b/test/chart/scatter_chart/scatter_chart_painter_test.dart deleted file mode 100644 index 87346c9931..0000000000 --- a/test/chart/scatter_chart/scatter_chart_painter_test.dart +++ /dev/null @@ -1,832 +0,0 @@ -import 'dart:math' as math; - -import 'package:fl_chart/fl_chart.dart'; -import 'package:fl_chart/src/chart/base/base_chart/base_chart_painter.dart'; -import 'package:fl_chart/src/chart/scatter_chart/scatter_chart_painter.dart'; -import 'package:fl_chart/src/utils/canvas_wrapper.dart'; -import 'package:fl_chart/src/utils/utils.dart'; -import 'package:flutter/cupertino.dart'; -import 'package:flutter_test/flutter_test.dart'; -import 'package:mockito/annotations.dart'; -import 'package:mockito/mockito.dart'; - -import '../data_pool.dart'; -import 'scatter_chart_painter_test.mocks.dart'; - -@GenerateMocks([Canvas, CanvasWrapper, BuildContext, Utils]) -void main() { - group('paint()', () { - test('test 1', () { - final utilsMainInstance = Utils(); - const viewSize = Size(400, 400); - final data = ScatterChartData( - scatterSpots: [ - ScatterSpot(0, 1), - ScatterSpot(1, 3), - ScatterSpot(3, 4), - ], - ); - - final scatterPainter = ScatterChartPainter(); - final holder = PaintHolder( - data, - data, - TextScaler.noScaling, - ); - - final mockUtils = MockUtils(); - Utils.changeInstance(mockUtils); - when(mockUtils.getThemeAwareTextStyle(any, any)) - .thenAnswer((realInvocation) => textStyle1); - when(mockUtils.calculateRotationOffset(any, any)) - .thenAnswer((realInvocation) => Offset.zero); - when(mockUtils.convertRadiusToSigma(any)) - .thenAnswer((realInvocation) => 4.0); - when(mockUtils.getEfficientInterval(any, any)) - .thenAnswer((realInvocation) => 1.0); - when(mockUtils.getBestInitialIntervalValue(any, any, any)) - .thenAnswer((realInvocation) => 1.0); - when(mockUtils.normalizeBorderRadius(any, any)) - .thenAnswer((realInvocation) => BorderRadius.zero); - when(mockUtils.normalizeBorderSide(any, any)).thenAnswer( - (realInvocation) => const BorderSide(color: MockData.color0), - ); - - final mockBuildContext = MockBuildContext(); - final mockCanvasWrapper = MockCanvasWrapper(); - when(mockCanvasWrapper.size).thenAnswer((realInvocation) => viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - scatterPainter.paint( - mockBuildContext, - mockCanvasWrapper, - holder, - ); - - verify(mockCanvasWrapper.drawCircle(any, any, any)).called(3); - Utils.changeInstance(utilsMainInstance); - }); - }); - - group('drawSpots()', () { - test('test 1', () { - const viewSize = Size(100, 100); - - final data = ScatterChartData( - minY: 0, - maxY: 10, - minX: 0, - maxX: 10, - scatterSpots: [ - ScatterSpot(1, 1, radius: 18), - ScatterSpot(3, 9, show: false), - ScatterSpot(8, 2, radius: 4), - ScatterSpot(7, 5, radius: 6), - ], - titlesData: const FlTitlesData(show: false), - clipData: const FlClipData.all(), - ); - - final scatterChartPainter = ScatterChartPainter(); - final holder = PaintHolder( - data, - data, - TextScaler.noScaling, - ); - - final mockBuildContext = MockBuildContext(); - final mockCanvasWrapper = MockCanvasWrapper(); - when(mockCanvasWrapper.size).thenReturn(viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - scatterChartPainter.drawSpots( - mockBuildContext, - mockCanvasWrapper, - holder, - ); - - verify(mockCanvasWrapper.drawCircle(const Offset(10, 90), 18, any)) - .called(1); - verify(mockCanvasWrapper.drawCircle(const Offset(80, 80), 4, any)) - .called(1); - verify(mockCanvasWrapper.drawCircle(const Offset(70, 50), 6, any)) - .called(1); - - verifyNever(mockCanvasWrapper.drawText(any, any)); - verify(mockCanvasWrapper.clipRect(any)).called(1); - }); - - test('test 2', () { - const viewSize = Size(100, 100); - - final data = ScatterChartData( - minY: 0, - maxY: 10, - minX: 0, - maxX: 10, - scatterSpots: [ - ScatterSpot(1, 1, show: false), - ScatterSpot(3, 9, show: false), - ScatterSpot(8, 2, show: false), - ScatterSpot(7, 5, show: false), - ], - titlesData: const FlTitlesData(show: false), - clipData: const FlClipData.none(), - ); - - final scatterChartPainter = ScatterChartPainter(); - final holder = PaintHolder( - data, - data, - TextScaler.noScaling, - ); - - final mockBuildContext = MockBuildContext(); - final mockCanvasWrapper = MockCanvasWrapper(); - when(mockCanvasWrapper.size).thenReturn(viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - scatterChartPainter.drawSpots( - mockBuildContext, - mockCanvasWrapper, - holder, - ); - - verifyNever(mockCanvasWrapper.drawCircle(any, any, any)); - verifyNever(mockCanvasWrapper.clipRect(any)); - - verifyNever(mockCanvasWrapper.drawText(any, any)); - }); - - test('test 3', () { - const viewSize = Size(100, 100); - - final data = ScatterChartData( - minY: 0, - maxY: 10, - minX: 0, - maxX: 10, - scatterSpots: [ - ScatterSpot(1, 1, radius: 18), - ScatterSpot(2, 2, radius: 8), - ScatterSpot(3, 9, show: false), - ScatterSpot(8, 8, radius: 4), - ScatterSpot(7, 5, radius: 20), - ScatterSpot(4, 6, radius: 24), - ], - titlesData: const FlTitlesData(show: false), - clipData: const FlClipData.all(), - scatterLabelSettings: ScatterLabelSettings( - showLabel: true, - getLabelTextStyleFunction: (int index, ScatterSpot spot) => - const TextStyle(fontSize: 12), - getLabelFunction: (int index, ScatterSpot spot) { - if (index == 5) { - return ''; - } - return 'Label : $index'; - }, - ), - ); - - final scatterChartPainter = ScatterChartPainter(); - final holder = PaintHolder( - data, - data, - TextScaler.noScaling, - ); - - final mockBuildContext = MockBuildContext(); - final mockCanvasWrapper = MockCanvasWrapper(); - when(mockCanvasWrapper.size).thenReturn(viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - - final mockUtils = MockUtils(); - Utils.changeInstance(mockUtils); - when(mockUtils.getThemeAwareTextStyle(any, any)) - .thenReturn(const TextStyle(color: Color(0x00ffffff))); - when(mockUtils.calculateRotationOffset(any, any)).thenReturn(Offset.zero); - - scatterChartPainter.drawSpots( - mockBuildContext, - mockCanvasWrapper, - holder, - ); - - verify(mockCanvasWrapper.drawCircle(const Offset(10, 90), 18, any)) - .called(1); - verify(mockCanvasWrapper.drawCircle(const Offset(20, 80), 8, any)) - .called(1); - verify(mockCanvasWrapper.drawCircle(const Offset(80, 20), 4, any)) - .called(1); - verify(mockCanvasWrapper.drawCircle(const Offset(70, 50), 20, any)) - .called(1); - verify(mockCanvasWrapper.drawCircle(const Offset(40, 40), 24, any)) - .called(1); - - verify(mockCanvasWrapper.drawText(any, any)).called(4); - - verify(mockCanvasWrapper.clipRect(any)).called(1); - }); - }); - - group('drawTooltips()', () { - test('test 1', () { - const viewSize = Size(100, 100); - - final data = ScatterChartData( - minY: 0, - maxY: 10, - minX: 0, - maxX: 10, - scatterSpots: [ - ScatterSpot(1, 1, radius: 18), - ScatterSpot(3, 9, show: false), - ScatterSpot(8, 2, radius: 4), - ScatterSpot(7, 5, radius: 6), - ], - showingTooltipIndicators: [0, 2, 3], - titlesData: const FlTitlesData(show: false), - ); - - final scatterChartPainter = ScatterChartPainter(); - final holder = PaintHolder( - data, - data, - TextScaler.noScaling, - ); - final mockCanvasWrapper = MockCanvasWrapper(); - final mockBuildContext = MockBuildContext(); - final mockUtils = MockUtils(); - Utils.changeInstance(mockUtils); - when(mockUtils.getThemeAwareTextStyle(any, any)) - .thenReturn(const TextStyle(color: Color(0x00ffffff))); - when(mockUtils.calculateRotationOffset(any, any)).thenReturn(Offset.zero); - when(mockCanvasWrapper.size).thenReturn(viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - scatterChartPainter.drawTouchTooltips( - mockBuildContext, - mockCanvasWrapper, - holder, - ); - - verify( - mockCanvasWrapper.drawRotated( - size: anyNamed('size'), - rotationOffset: anyNamed('rotationOffset'), - drawOffset: anyNamed('drawOffset'), - angle: anyNamed('angle'), - drawCallback: anyNamed('drawCallback'), - ), - ).called(3); - }); - - test('test 2', () { - const viewSize = Size(100, 100); - - final data = ScatterChartData( - minY: 0, - maxY: 10, - minX: 0, - maxX: 10, - scatterSpots: [ - ScatterSpot(1, 1, radius: 18), - ScatterSpot(3, 9, show: false), - ScatterSpot(8, 2, radius: 4), - ScatterSpot(7, 5, radius: 6), - ], - showingTooltipIndicators: [0, 2, 3], - scatterTouchData: ScatterTouchData( - touchTooltipData: ScatterTouchTooltipData( - getTooltipItems: (spot) => null, - ), - ), - titlesData: const FlTitlesData(show: false), - ); - - final scatterChartPainter = ScatterChartPainter(); - final holder = PaintHolder( - data, - data, - TextScaler.noScaling, - ); - final mockCanvasWrapper = MockCanvasWrapper(); - final mockBuildContext = MockBuildContext(); - final mockUtils = MockUtils(); - Utils.changeInstance(mockUtils); - when(mockUtils.getThemeAwareTextStyle(any, any)) - .thenReturn(const TextStyle(color: Color(0x00ffffff))); - when(mockUtils.calculateRotationOffset(any, any)).thenReturn(Offset.zero); - when(mockCanvasWrapper.size).thenReturn(viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - scatterChartPainter.drawTouchTooltips( - mockBuildContext, - mockCanvasWrapper, - holder, - ); - - verifyNever( - mockCanvasWrapper.drawRotated( - size: null, - angle: null, - drawCallback: () {}, - ), - ); - verifyNever(mockCanvasWrapper.drawRect(any, any)); - }); - }); - - group('drawTouchTooltip()', () { - test('test 1', () { - const viewSize = Size(100, 100); - - final spot1 = ScatterSpot(1, 1); - final data = ScatterChartData( - minY: 0, - maxY: 10, - minX: 0, - maxX: 10, - scatterSpots: [ - spot1, - scatterSpot2, - scatterSpot3, - scatterSpot4, - ], - showingTooltipIndicators: [0, 2, 3], - titlesData: const FlTitlesData(show: false), - scatterTouchData: ScatterTouchData( - touchTooltipData: ScatterTouchTooltipData( - rotateAngle: 18, - tooltipBgColor: const Color(0xFF00FF00), - tooltipRoundedRadius: 85, - tooltipPadding: const EdgeInsets.all(12), - getTooltipItems: (_) { - return ScatterTooltipItem( - 'faketext', - textStyle: textStyle1, - textAlign: TextAlign.left, - textDirection: TextDirection.rtl, - children: [ - textSpan2, - textSpan1, - ], - ); - }, - ), - ), - ); - - final scatterChartPainter = ScatterChartPainter(); - final holder = PaintHolder( - data, - data, - TextScaler.noScaling, - ); - final mockCanvasWrapper = MockCanvasWrapper(); - final mockBuildContext = MockBuildContext(); - final mockUtils = MockUtils(); - Utils.changeInstance(mockUtils); - when(mockUtils.getThemeAwareTextStyle(any, any)).thenReturn(textStyle2); - when(mockUtils.calculateRotationOffset(any, any)).thenReturn(Offset.zero); - when(mockCanvasWrapper.size).thenReturn(viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - scatterChartPainter.drawTouchTooltip( - mockBuildContext, - mockCanvasWrapper, - (data.touchData as ScatterTouchData).touchTooltipData, - spot1, - holder, - ); - - final verificationResult = verify( - mockCanvasWrapper.drawRotated( - size: anyNamed('size'), - drawOffset: anyNamed('drawOffset'), - angle: 18, - drawCallback: captureAnyNamed('drawCallback'), - ), - ); - - final passedDrawCallback = - verificationResult.captured.first as DrawCallback; - passedDrawCallback(); - - verificationResult.called(1); - - final captured2 = verifyInOrder([ - mockCanvasWrapper.drawRRect(captureAny, captureAny), - mockCanvasWrapper.drawText(captureAny, any), - ]).captured; - - final rRect = captured2[0][0] as RRect; - final bgPaint = captured2[0][1] as Paint; - final textPainter = captured2[1][0] as TextPainter; - - expect(rRect.blRadiusX, 85); - expect(rRect.tlRadiusY, 85); - - expect(bgPaint.color, const Color(0xFF00FF00)); - expect( - textPainter.text, - const TextSpan( - style: textStyle2, - text: 'faketext', - children: [ - textSpan2, - textSpan1, - ], - ), - ); - }); - - test('test 2', () { - const viewSize = Size(100, 100); - - final spot1 = ScatterSpot(1, 1); - final data = ScatterChartData( - minY: 0, - maxY: 10, - minX: 0, - maxX: 10, - scatterSpots: [ - spot1, - scatterSpot2, - scatterSpot3, - scatterSpot4, - ], - showingTooltipIndicators: [0, 2, 3], - titlesData: const FlTitlesData(show: false), - scatterTouchData: ScatterTouchData( - touchTooltipData: ScatterTouchTooltipData( - rotateAngle: 18, - tooltipBgColor: const Color(0xFFFFFF00), - tooltipRoundedRadius: 22, - fitInsideHorizontally: false, - fitInsideVertically: true, - tooltipPadding: const EdgeInsets.all(12), - tooltipHorizontalAlignment: FLHorizontalAlignment.left, - getTooltipItems: (_) { - return ScatterTooltipItem( - 'faketext', - textStyle: textStyle2, - textAlign: TextAlign.right, - textDirection: TextDirection.ltr, - children: [ - textSpan1, - textSpan2, - ], - ); - }, - ), - ), - ); - - final scatterChartPainter = ScatterChartPainter(); - final holder = PaintHolder( - data, - data, - TextScaler.noScaling, - ); - final mockCanvasWrapper = MockCanvasWrapper(); - final mockBuildContext = MockBuildContext(); - final mockUtils = MockUtils(); - Utils.changeInstance(mockUtils); - when(mockUtils.getThemeAwareTextStyle(any, any)).thenReturn(textStyle1); - when(mockUtils.calculateRotationOffset(any, any)).thenReturn(Offset.zero); - when(mockCanvasWrapper.size).thenReturn(viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - scatterChartPainter.drawTouchTooltip( - mockBuildContext, - mockCanvasWrapper, - (data.touchData as ScatterTouchData).touchTooltipData, - spot1, - holder, - ); - - final verificationResult = verify( - mockCanvasWrapper.drawRotated( - size: anyNamed('size'), - drawOffset: anyNamed('drawOffset'), - angle: 18, - drawCallback: captureAnyNamed('drawCallback'), - ), - ); - - final passedDrawCallback = - verificationResult.captured.first as DrawCallback; - passedDrawCallback(); - - verificationResult.called(1); - - final captured2 = verifyInOrder([ - mockCanvasWrapper.drawRRect(captureAny, captureAny), - mockCanvasWrapper.drawText(captureAny, any), - ]).captured; - - final rRect = captured2[0][0] as RRect; - final bgPaint = captured2[0][1] as Paint; - final textPainter = captured2[1][0] as TextPainter; - - expect(rRect.blRadiusX, 22); - expect(rRect.tlRadiusY, 22); - - expect(rRect.left, -134); - - expect(bgPaint.color, const Color(0xFFFFFF00)); - expect( - textPainter.text, - const TextSpan( - style: textStyle1, - text: 'faketext', - children: [ - textSpan1, - textSpan2, - ], - ), - ); - }); - - test('test 3', () { - const viewSize = Size(100, 100); - - final spot1 = ScatterSpot(1, 1); - final data = ScatterChartData( - minY: 0, - maxY: 10, - minX: 0, - maxX: 10, - scatterSpots: [ - spot1, - scatterSpot2, - scatterSpot3, - scatterSpot4, - ], - showingTooltipIndicators: [0, 2, 3], - titlesData: const FlTitlesData(show: false), - scatterTouchData: ScatterTouchData( - touchTooltipData: ScatterTouchTooltipData( - rotateAngle: 18, - tooltipBgColor: const Color(0xFFFFFF00), - tooltipRoundedRadius: 22, - fitInsideHorizontally: false, - fitInsideVertically: true, - tooltipPadding: const EdgeInsets.all(12), - tooltipHorizontalAlignment: FLHorizontalAlignment.right, - getTooltipItems: (_) { - return ScatterTooltipItem( - 'faketext', - textStyle: textStyle2, - textAlign: TextAlign.right, - textDirection: TextDirection.ltr, - children: [ - textSpan1, - textSpan2, - ], - ); - }, - ), - ), - ); - - final scatterChartPainter = ScatterChartPainter(); - final holder = PaintHolder( - data, - data, - TextScaler.noScaling, - ); - final mockCanvasWrapper = MockCanvasWrapper(); - final mockBuildContext = MockBuildContext(); - final mockUtils = MockUtils(); - Utils.changeInstance(mockUtils); - when(mockUtils.getThemeAwareTextStyle(any, any)).thenReturn(textStyle1); - when(mockUtils.calculateRotationOffset(any, any)).thenReturn(Offset.zero); - when(mockCanvasWrapper.size).thenReturn(viewSize); - when(mockCanvasWrapper.canvas).thenReturn(MockCanvas()); - scatterChartPainter.drawTouchTooltip( - mockBuildContext, - mockCanvasWrapper, - (data.touchData as ScatterTouchData).touchTooltipData, - spot1, - holder, - ); - - final verificationResult = verify( - mockCanvasWrapper.drawRotated( - size: anyNamed('size'), - drawOffset: anyNamed('drawOffset'), - angle: 18, - drawCallback: captureAnyNamed('drawCallback'), - ), - ); - - final passedDrawCallback = - verificationResult.captured.first as DrawCallback; - passedDrawCallback(); - - verificationResult.called(1); - - final captured2 = verifyInOrder([ - mockCanvasWrapper.drawRRect(captureAny, captureAny), - mockCanvasWrapper.drawText(captureAny, any), - ]).captured; - - final rRect = captured2[0][0] as RRect; - final bgPaint = captured2[0][1] as Paint; - final textPainter = captured2[1][0] as TextPainter; - - expect(rRect.blRadiusX, 22); - expect(rRect.tlRadiusY, 22); - - expect(rRect.left, 10); - - expect(bgPaint.color, const Color(0xFFFFFF00)); - expect( - textPainter.text, - const TextSpan( - style: textStyle1, - text: 'faketext', - children: [ - textSpan1, - textSpan2, - ], - ), - ); - }); - }); - - group('handleTouch()', () { - test('test 1', () { - const viewSize = Size(100, 100); - final spots = [ - ScatterSpot(1, 1), - ScatterSpot(2, 4), - ScatterSpot(5, 2, radius: 0.5), - ScatterSpot(8, 7), - ]; - - final data = ScatterChartData( - minY: 0, - maxY: 10, - minX: 0, - maxX: 10, - titlesData: const FlTitlesData(show: false), - scatterSpots: spots, - ); - - final scatterChartPainter = ScatterChartPainter(); - final holder = PaintHolder( - data, - data, - TextScaler.noScaling, - ); - final touchedSpot = scatterChartPainter.handleTouch( - const Offset(10, 90), - viewSize, - holder, - ); - expect(touchedSpot!.spot, spots[0]); - - final touchedSpot2 = scatterChartPainter.handleTouch( - const Offset(50, 80), - viewSize, - holder, - ); - expect(touchedSpot2!.spot, spots[2]); - - final touchedSpot3 = scatterChartPainter.handleTouch( - const Offset(50.49, 80), - viewSize, - holder, - ); - expect(touchedSpot3!.spot, spots[2]); - - final touchedSpot4 = scatterChartPainter.handleTouch( - const Offset(50.5, 80), - viewSize, - holder, - ); - expect(touchedSpot4, null); - - final radius = spots[2].radius; - final touchedSpot5 = scatterChartPainter.handleTouch( - Offset( - 50 + (math.cos(math.pi / 4) * radius) - 0.01, - 80 + (math.sin(math.pi / 4) * radius) - 0.01, - ), - viewSize, - holder, - ); - expect(touchedSpot5!.spot, spots[2]); - - final touchedSpot6 = scatterChartPainter.handleTouch( - Offset( - 50 + (math.cos(math.pi / 4) * radius), - 80 + (math.sin(math.pi / 4) * radius), - ), - viewSize, - holder, - ); - expect(touchedSpot6, null); - }); - - test('test 2', () { - const viewSize = Size(100, 100); - final spots = [ - ScatterSpot(1, 1), - ScatterSpot(2, 4), - ScatterSpot(5, 2, radius: 0.5), - ScatterSpot(8, 7), - ]; - - final data = ScatterChartData( - minY: 0, - maxY: 10, - minX: 0, - maxX: 10, - titlesData: const FlTitlesData( - leftTitles: AxisTitles( - axisNameSize: 4, - axisNameWidget: Text('ss1'), - sideTitles: SideTitles( - showTitles: true, - reservedSize: 10, - ), - ), - rightTitles: AxisTitles( - sideTitles: SideTitles( - showTitles: true, - reservedSize: 10, - ), - ), - topTitles: AxisTitles( - sideTitles: SideTitles( - showTitles: true, - reservedSize: 6, - ), - ), - bottomTitles: AxisTitles( - axisNameSize: 4, - axisNameWidget: Text('ss2'), - sideTitles: SideTitles( - showTitles: true, - reservedSize: 6, - ), - ), - ), - scatterSpots: spots, - ); - - final scatterChartPainter = ScatterChartPainter(); - final holder = PaintHolder( - data, - data, - TextScaler.noScaling, - ); - final touchedSpot = scatterChartPainter.handleTouch( - const Offset(10, 90), - viewSize, - holder, - ); - expect(touchedSpot!.spot, spots[0]); - - final touchedSpot2 = scatterChartPainter.handleTouch( - const Offset(50, 80), - viewSize, - holder, - ); - expect(touchedSpot2!.spot, spots[2]); - - final touchedSpot3 = scatterChartPainter.handleTouch( - const Offset(50.49, 80), - viewSize, - holder, - ); - expect(touchedSpot3!.spot, spots[2]); - - final touchedSpot4 = scatterChartPainter.handleTouch( - const Offset(50.5, 80), - viewSize, - holder, - ); - expect(touchedSpot4, null); - - final radius = spots[2].radius; - final touchedSpot5 = scatterChartPainter.handleTouch( - Offset( - 50 + (math.cos(math.pi / 4) * radius) - 0.01, - 80 + (math.sin(math.pi / 4) * radius) - 0.01, - ), - viewSize, - holder, - ); - expect(touchedSpot5!.spot, spots[2]); - - final touchedSpot6 = scatterChartPainter.handleTouch( - Offset( - 50 + (math.cos(math.pi / 4) * radius), - 80 + (math.sin(math.pi / 4) * radius), - ), - viewSize, - holder, - ); - expect(touchedSpot6, null); - }); - }); -} diff --git a/test/chart/scatter_chart/scatter_chart_painter_test.mocks.dart b/test/chart/scatter_chart/scatter_chart_painter_test.mocks.dart deleted file mode 100644 index f8e87a9b06..0000000000 --- a/test/chart/scatter_chart/scatter_chart_painter_test.mocks.dart +++ /dev/null @@ -1,1435 +0,0 @@ -// Mocks generated by Mockito 5.4.2 from annotations -// in fl_chart/test/chart/scatter_chart/scatter_chart_painter_test.dart. -// Do not manually edit this file. - -// ignore_for_file: no_leading_underscores_for_library_prefixes -import 'dart:typed_data' as _i5; -import 'dart:ui' as _i2; - -import 'package:fl_chart/fl_chart.dart' as _i7; -import 'package:fl_chart/src/utils/canvas_wrapper.dart' as _i6; -import 'package:fl_chart/src/utils/utils.dart' as _i8; -import 'package:flutter/cupertino.dart' as _i3; -import 'package:flutter/foundation.dart' as _i4; -import 'package:mockito/mockito.dart' as _i1; - -// ignore_for_file: type=lint -// ignore_for_file: avoid_redundant_argument_values -// ignore_for_file: avoid_setters_without_getters -// ignore_for_file: comment_references -// ignore_for_file: implementation_imports -// ignore_for_file: invalid_use_of_visible_for_testing_member -// ignore_for_file: prefer_const_constructors -// ignore_for_file: unnecessary_parenthesis -// ignore_for_file: camel_case_types -// ignore_for_file: subtype_of_sealed_class - -class _FakeRect_0 extends _i1.SmartFake implements _i2.Rect { - _FakeRect_0( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); -} - -class _FakeCanvas_1 extends _i1.SmartFake implements _i2.Canvas { - _FakeCanvas_1( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); -} - -class _FakeSize_2 extends _i1.SmartFake implements _i2.Size { - _FakeSize_2( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); -} - -class _FakeWidget_3 extends _i1.SmartFake implements _i3.Widget { - _FakeWidget_3( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); - - @override - String toString({_i3.DiagnosticLevel? minLevel = _i3.DiagnosticLevel.info}) => - super.toString(); -} - -class _FakeInheritedWidget_4 extends _i1.SmartFake - implements _i3.InheritedWidget { - _FakeInheritedWidget_4( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); - - @override - String toString({_i3.DiagnosticLevel? minLevel = _i3.DiagnosticLevel.info}) => - super.toString(); -} - -class _FakeDiagnosticsNode_5 extends _i1.SmartFake - implements _i3.DiagnosticsNode { - _FakeDiagnosticsNode_5( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); - - @override - String toString({ - _i4.TextTreeConfiguration? parentConfiguration, - _i3.DiagnosticLevel? minLevel = _i3.DiagnosticLevel.info, - }) => - super.toString(); -} - -class _FakeOffset_6 extends _i1.SmartFake implements _i2.Offset { - _FakeOffset_6( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); -} - -class _FakeBorderSide_7 extends _i1.SmartFake implements _i3.BorderSide { - _FakeBorderSide_7( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); - - @override - String toString({_i3.DiagnosticLevel? minLevel = _i3.DiagnosticLevel.info}) => - super.toString(); -} - -class _FakeTextStyle_8 extends _i1.SmartFake implements _i3.TextStyle { - _FakeTextStyle_8( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); - - @override - String toString({_i3.DiagnosticLevel? minLevel = _i3.DiagnosticLevel.info}) => - super.toString(); -} - -/// A class which mocks [Canvas]. -/// -/// See the documentation for Mockito's code generation for more information. -class MockCanvas extends _i1.Mock implements _i2.Canvas { - MockCanvas() { - _i1.throwOnMissingStub(this); - } - - @override - void save() => super.noSuchMethod( - Invocation.method( - #save, - [], - ), - returnValueForMissingStub: null, - ); - - @override - void saveLayer( - _i2.Rect? bounds, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #saveLayer, - [ - bounds, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void restore() => super.noSuchMethod( - Invocation.method( - #restore, - [], - ), - returnValueForMissingStub: null, - ); - - @override - void restoreToCount(int? count) => super.noSuchMethod( - Invocation.method( - #restoreToCount, - [count], - ), - returnValueForMissingStub: null, - ); - - @override - int getSaveCount() => (super.noSuchMethod( - Invocation.method( - #getSaveCount, - [], - ), - returnValue: 0, - ) as int); - - @override - void translate( - double? dx, - double? dy, - ) => - super.noSuchMethod( - Invocation.method( - #translate, - [ - dx, - dy, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void scale( - double? sx, [ - double? sy, - ]) => - super.noSuchMethod( - Invocation.method( - #scale, - [ - sx, - sy, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void rotate(double? radians) => super.noSuchMethod( - Invocation.method( - #rotate, - [radians], - ), - returnValueForMissingStub: null, - ); - - @override - void skew( - double? sx, - double? sy, - ) => - super.noSuchMethod( - Invocation.method( - #skew, - [ - sx, - sy, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void transform(_i5.Float64List? matrix4) => super.noSuchMethod( - Invocation.method( - #transform, - [matrix4], - ), - returnValueForMissingStub: null, - ); - - @override - _i5.Float64List getTransform() => (super.noSuchMethod( - Invocation.method( - #getTransform, - [], - ), - returnValue: _i5.Float64List(0), - ) as _i5.Float64List); - - @override - void clipRect( - _i2.Rect? rect, { - _i2.ClipOp? clipOp = _i2.ClipOp.intersect, - bool? doAntiAlias = true, - }) => - super.noSuchMethod( - Invocation.method( - #clipRect, - [rect], - { - #clipOp: clipOp, - #doAntiAlias: doAntiAlias, - }, - ), - returnValueForMissingStub: null, - ); - - @override - void clipRRect( - _i2.RRect? rrect, { - bool? doAntiAlias = true, - }) => - super.noSuchMethod( - Invocation.method( - #clipRRect, - [rrect], - {#doAntiAlias: doAntiAlias}, - ), - returnValueForMissingStub: null, - ); - - @override - void clipPath( - _i2.Path? path, { - bool? doAntiAlias = true, - }) => - super.noSuchMethod( - Invocation.method( - #clipPath, - [path], - {#doAntiAlias: doAntiAlias}, - ), - returnValueForMissingStub: null, - ); - - @override - _i2.Rect getLocalClipBounds() => (super.noSuchMethod( - Invocation.method( - #getLocalClipBounds, - [], - ), - returnValue: _FakeRect_0( - this, - Invocation.method( - #getLocalClipBounds, - [], - ), - ), - ) as _i2.Rect); - - @override - _i2.Rect getDestinationClipBounds() => (super.noSuchMethod( - Invocation.method( - #getDestinationClipBounds, - [], - ), - returnValue: _FakeRect_0( - this, - Invocation.method( - #getDestinationClipBounds, - [], - ), - ), - ) as _i2.Rect); - - @override - void drawColor( - _i2.Color? color, - _i2.BlendMode? blendMode, - ) => - super.noSuchMethod( - Invocation.method( - #drawColor, - [ - color, - blendMode, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawLine( - _i2.Offset? p1, - _i2.Offset? p2, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawLine, - [ - p1, - p2, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawPaint(_i2.Paint? paint) => super.noSuchMethod( - Invocation.method( - #drawPaint, - [paint], - ), - returnValueForMissingStub: null, - ); - - @override - void drawRect( - _i2.Rect? rect, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawRect, - [ - rect, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawRRect( - _i2.RRect? rrect, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawRRect, - [ - rrect, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawDRRect( - _i2.RRect? outer, - _i2.RRect? inner, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawDRRect, - [ - outer, - inner, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawOval( - _i2.Rect? rect, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawOval, - [ - rect, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawCircle( - _i2.Offset? c, - double? radius, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawCircle, - [ - c, - radius, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawArc( - _i2.Rect? rect, - double? startAngle, - double? sweepAngle, - bool? useCenter, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawArc, - [ - rect, - startAngle, - sweepAngle, - useCenter, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawPath( - _i2.Path? path, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawPath, - [ - path, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawImage( - _i2.Image? image, - _i2.Offset? offset, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawImage, - [ - image, - offset, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawImageRect( - _i2.Image? image, - _i2.Rect? src, - _i2.Rect? dst, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawImageRect, - [ - image, - src, - dst, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawImageNine( - _i2.Image? image, - _i2.Rect? center, - _i2.Rect? dst, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawImageNine, - [ - image, - center, - dst, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawPicture(_i2.Picture? picture) => super.noSuchMethod( - Invocation.method( - #drawPicture, - [picture], - ), - returnValueForMissingStub: null, - ); - - @override - void drawParagraph( - _i2.Paragraph? paragraph, - _i2.Offset? offset, - ) => - super.noSuchMethod( - Invocation.method( - #drawParagraph, - [ - paragraph, - offset, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawPoints( - _i2.PointMode? pointMode, - List<_i2.Offset>? points, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawPoints, - [ - pointMode, - points, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawRawPoints( - _i2.PointMode? pointMode, - _i5.Float32List? points, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawRawPoints, - [ - pointMode, - points, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawVertices( - _i2.Vertices? vertices, - _i2.BlendMode? blendMode, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawVertices, - [ - vertices, - blendMode, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawAtlas( - _i2.Image? atlas, - List<_i2.RSTransform>? transforms, - List<_i2.Rect>? rects, - List<_i2.Color>? colors, - _i2.BlendMode? blendMode, - _i2.Rect? cullRect, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawAtlas, - [ - atlas, - transforms, - rects, - colors, - blendMode, - cullRect, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawRawAtlas( - _i2.Image? atlas, - _i5.Float32List? rstTransforms, - _i5.Float32List? rects, - _i5.Int32List? colors, - _i2.BlendMode? blendMode, - _i2.Rect? cullRect, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawRawAtlas, - [ - atlas, - rstTransforms, - rects, - colors, - blendMode, - cullRect, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawShadow( - _i2.Path? path, - _i2.Color? color, - double? elevation, - bool? transparentOccluder, - ) => - super.noSuchMethod( - Invocation.method( - #drawShadow, - [ - path, - color, - elevation, - transparentOccluder, - ], - ), - returnValueForMissingStub: null, - ); -} - -/// A class which mocks [CanvasWrapper]. -/// -/// See the documentation for Mockito's code generation for more information. -class MockCanvasWrapper extends _i1.Mock implements _i6.CanvasWrapper { - MockCanvasWrapper() { - _i1.throwOnMissingStub(this); - } - - @override - _i2.Canvas get canvas => (super.noSuchMethod( - Invocation.getter(#canvas), - returnValue: _FakeCanvas_1( - this, - Invocation.getter(#canvas), - ), - ) as _i2.Canvas); - - @override - _i2.Size get size => (super.noSuchMethod( - Invocation.getter(#size), - returnValue: _FakeSize_2( - this, - Invocation.getter(#size), - ), - ) as _i2.Size); - - @override - void drawRRect( - _i2.RRect? rrect, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawRRect, - [ - rrect, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void save() => super.noSuchMethod( - Invocation.method( - #save, - [], - ), - returnValueForMissingStub: null, - ); - - @override - void restore() => super.noSuchMethod( - Invocation.method( - #restore, - [], - ), - returnValueForMissingStub: null, - ); - - @override - void clipRect( - _i2.Rect? rect, { - _i2.ClipOp? clipOp = _i2.ClipOp.intersect, - bool? doAntiAlias = true, - }) => - super.noSuchMethod( - Invocation.method( - #clipRect, - [rect], - { - #clipOp: clipOp, - #doAntiAlias: doAntiAlias, - }, - ), - returnValueForMissingStub: null, - ); - - @override - void translate( - double? dx, - double? dy, - ) => - super.noSuchMethod( - Invocation.method( - #translate, - [ - dx, - dy, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void rotate(double? radius) => super.noSuchMethod( - Invocation.method( - #rotate, - [radius], - ), - returnValueForMissingStub: null, - ); - - @override - void drawPath( - _i2.Path? path, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawPath, - [ - path, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void saveLayer( - _i2.Rect? bounds, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #saveLayer, - [ - bounds, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawPicture(_i2.Picture? picture) => super.noSuchMethod( - Invocation.method( - #drawPicture, - [picture], - ), - returnValueForMissingStub: null, - ); - - @override - void drawImage( - _i2.Image? image, - _i2.Offset? offset, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawImage, - [ - image, - offset, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void clipPath( - _i2.Path? path, { - bool? doAntiAlias = true, - }) => - super.noSuchMethod( - Invocation.method( - #clipPath, - [path], - {#doAntiAlias: doAntiAlias}, - ), - returnValueForMissingStub: null, - ); - - @override - void drawRect( - _i2.Rect? rect, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawRect, - [ - rect, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawLine( - _i2.Offset? p1, - _i2.Offset? p2, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawLine, - [ - p1, - p2, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawCircle( - _i2.Offset? center, - double? radius, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawCircle, - [ - center, - radius, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawArc( - _i2.Rect? rect, - double? startAngle, - double? sweepAngle, - bool? useCenter, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawArc, - [ - rect, - startAngle, - sweepAngle, - useCenter, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawText( - _i3.TextPainter? tp, - _i2.Offset? offset, [ - double? rotateAngle, - ]) => - super.noSuchMethod( - Invocation.method( - #drawText, - [ - tp, - offset, - rotateAngle, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawDot( - _i7.FlDotPainter? painter, - _i7.FlSpot? spot, - _i2.Offset? offset, - ) => - super.noSuchMethod( - Invocation.method( - #drawDot, - [ - painter, - spot, - offset, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawRotated({ - required _i2.Size? size, - _i2.Offset? rotationOffset = _i2.Offset.zero, - _i2.Offset? drawOffset = _i2.Offset.zero, - required double? angle, - required _i6.DrawCallback? drawCallback, - }) => - super.noSuchMethod( - Invocation.method( - #drawRotated, - [], - { - #size: size, - #rotationOffset: rotationOffset, - #drawOffset: drawOffset, - #angle: angle, - #drawCallback: drawCallback, - }, - ), - returnValueForMissingStub: null, - ); - - @override - void drawDashedLine( - _i2.Offset? from, - _i2.Offset? to, - _i2.Paint? painter, - List? dashArray, - ) => - super.noSuchMethod( - Invocation.method( - #drawDashedLine, - [ - from, - to, - painter, - dashArray, - ], - ), - returnValueForMissingStub: null, - ); -} - -/// A class which mocks [BuildContext]. -/// -/// See the documentation for Mockito's code generation for more information. -class MockBuildContext extends _i1.Mock implements _i3.BuildContext { - MockBuildContext() { - _i1.throwOnMissingStub(this); - } - - @override - _i3.Widget get widget => (super.noSuchMethod( - Invocation.getter(#widget), - returnValue: _FakeWidget_3( - this, - Invocation.getter(#widget), - ), - ) as _i3.Widget); - - @override - bool get mounted => (super.noSuchMethod( - Invocation.getter(#mounted), - returnValue: false, - ) as bool); - - @override - bool get debugDoingBuild => (super.noSuchMethod( - Invocation.getter(#debugDoingBuild), - returnValue: false, - ) as bool); - - @override - _i3.InheritedWidget dependOnInheritedElement( - _i3.InheritedElement? ancestor, { - Object? aspect, - }) => - (super.noSuchMethod( - Invocation.method( - #dependOnInheritedElement, - [ancestor], - {#aspect: aspect}, - ), - returnValue: _FakeInheritedWidget_4( - this, - Invocation.method( - #dependOnInheritedElement, - [ancestor], - {#aspect: aspect}, - ), - ), - ) as _i3.InheritedWidget); - - @override - void visitAncestorElements(_i3.ConditionalElementVisitor? visitor) => - super.noSuchMethod( - Invocation.method( - #visitAncestorElements, - [visitor], - ), - returnValueForMissingStub: null, - ); - - @override - void visitChildElements(_i3.ElementVisitor? visitor) => super.noSuchMethod( - Invocation.method( - #visitChildElements, - [visitor], - ), - returnValueForMissingStub: null, - ); - - @override - void dispatchNotification(_i3.Notification? notification) => - super.noSuchMethod( - Invocation.method( - #dispatchNotification, - [notification], - ), - returnValueForMissingStub: null, - ); - - @override - _i3.DiagnosticsNode describeElement( - String? name, { - _i4.DiagnosticsTreeStyle? style = _i4.DiagnosticsTreeStyle.errorProperty, - }) => - (super.noSuchMethod( - Invocation.method( - #describeElement, - [name], - {#style: style}, - ), - returnValue: _FakeDiagnosticsNode_5( - this, - Invocation.method( - #describeElement, - [name], - {#style: style}, - ), - ), - ) as _i3.DiagnosticsNode); - - @override - _i3.DiagnosticsNode describeWidget( - String? name, { - _i4.DiagnosticsTreeStyle? style = _i4.DiagnosticsTreeStyle.errorProperty, - }) => - (super.noSuchMethod( - Invocation.method( - #describeWidget, - [name], - {#style: style}, - ), - returnValue: _FakeDiagnosticsNode_5( - this, - Invocation.method( - #describeWidget, - [name], - {#style: style}, - ), - ), - ) as _i3.DiagnosticsNode); - - @override - List<_i3.DiagnosticsNode> describeMissingAncestor( - {required Type? expectedAncestorType}) => - (super.noSuchMethod( - Invocation.method( - #describeMissingAncestor, - [], - {#expectedAncestorType: expectedAncestorType}, - ), - returnValue: <_i3.DiagnosticsNode>[], - ) as List<_i3.DiagnosticsNode>); - - @override - _i3.DiagnosticsNode describeOwnershipChain(String? name) => - (super.noSuchMethod( - Invocation.method( - #describeOwnershipChain, - [name], - ), - returnValue: _FakeDiagnosticsNode_5( - this, - Invocation.method( - #describeOwnershipChain, - [name], - ), - ), - ) as _i3.DiagnosticsNode); -} - -/// A class which mocks [Utils]. -/// -/// See the documentation for Mockito's code generation for more information. -class MockUtils extends _i1.Mock implements _i8.Utils { - MockUtils() { - _i1.throwOnMissingStub(this); - } - - @override - double radians(double? degrees) => (super.noSuchMethod( - Invocation.method( - #radians, - [degrees], - ), - returnValue: 0.0, - ) as double); - - @override - double degrees(double? radians) => (super.noSuchMethod( - Invocation.method( - #degrees, - [radians], - ), - returnValue: 0.0, - ) as double); - - @override - _i2.Size getDefaultSize(_i2.Size? screenSize) => (super.noSuchMethod( - Invocation.method( - #getDefaultSize, - [screenSize], - ), - returnValue: _FakeSize_2( - this, - Invocation.method( - #getDefaultSize, - [screenSize], - ), - ), - ) as _i2.Size); - - @override - double translateRotatedPosition( - double? size, - double? degree, - ) => - (super.noSuchMethod( - Invocation.method( - #translateRotatedPosition, - [ - size, - degree, - ], - ), - returnValue: 0.0, - ) as double); - - @override - _i2.Offset calculateRotationOffset( - _i2.Size? size, - double? degree, - ) => - (super.noSuchMethod( - Invocation.method( - #calculateRotationOffset, - [ - size, - degree, - ], - ), - returnValue: _FakeOffset_6( - this, - Invocation.method( - #calculateRotationOffset, - [ - size, - degree, - ], - ), - ), - ) as _i2.Offset); - - @override - _i3.BorderRadius? normalizeBorderRadius( - _i3.BorderRadius? borderRadius, - double? width, - ) => - (super.noSuchMethod(Invocation.method( - #normalizeBorderRadius, - [ - borderRadius, - width, - ], - )) as _i3.BorderRadius?); - - @override - _i3.BorderSide normalizeBorderSide( - _i3.BorderSide? borderSide, - double? width, - ) => - (super.noSuchMethod( - Invocation.method( - #normalizeBorderSide, - [ - borderSide, - width, - ], - ), - returnValue: _FakeBorderSide_7( - this, - Invocation.method( - #normalizeBorderSide, - [ - borderSide, - width, - ], - ), - ), - ) as _i3.BorderSide); - - @override - double getEfficientInterval( - double? axisViewSize, - double? diffInAxis, { - double? pixelPerInterval = 40.0, - }) => - (super.noSuchMethod( - Invocation.method( - #getEfficientInterval, - [ - axisViewSize, - diffInAxis, - ], - {#pixelPerInterval: pixelPerInterval}, - ), - returnValue: 0.0, - ) as double); - - @override - double roundInterval(double? input) => (super.noSuchMethod( - Invocation.method( - #roundInterval, - [input], - ), - returnValue: 0.0, - ) as double); - - @override - int getFractionDigits(double? value) => (super.noSuchMethod( - Invocation.method( - #getFractionDigits, - [value], - ), - returnValue: 0, - ) as int); - - @override - String formatNumber( - double? axisMin, - double? axisMax, - double? axisValue, - ) => - (super.noSuchMethod( - Invocation.method( - #formatNumber, - [ - axisMin, - axisMax, - axisValue, - ], - ), - returnValue: '', - ) as String); - - @override - _i3.TextStyle getThemeAwareTextStyle( - _i3.BuildContext? context, - _i3.TextStyle? providedStyle, - ) => - (super.noSuchMethod( - Invocation.method( - #getThemeAwareTextStyle, - [ - context, - providedStyle, - ], - ), - returnValue: _FakeTextStyle_8( - this, - Invocation.method( - #getThemeAwareTextStyle, - [ - context, - providedStyle, - ], - ), - ), - ) as _i3.TextStyle); - - @override - double getBestInitialIntervalValue( - double? min, - double? max, - double? interval, { - double? baseline = 0.0, - }) => - (super.noSuchMethod( - Invocation.method( - #getBestInitialIntervalValue, - [ - min, - max, - interval, - ], - {#baseline: baseline}, - ), - returnValue: 0.0, - ) as double); - - @override - double convertRadiusToSigma(double? radius) => (super.noSuchMethod( - Invocation.method( - #convertRadiusToSigma, - [radius], - ), - returnValue: 0.0, - ) as double); -} diff --git a/test/chart/scatter_chart/scatter_chart_renderer_test.dart b/test/chart/scatter_chart/scatter_chart_renderer_test.dart deleted file mode 100644 index 35f6e44523..0000000000 --- a/test/chart/scatter_chart/scatter_chart_renderer_test.dart +++ /dev/null @@ -1,104 +0,0 @@ -import 'package:fl_chart/fl_chart.dart'; -import 'package:fl_chart/src/chart/base/base_chart/base_chart_painter.dart'; -import 'package:fl_chart/src/chart/scatter_chart/scatter_chart_painter.dart'; -import 'package:fl_chart/src/chart/scatter_chart/scatter_chart_renderer.dart'; -import 'package:fl_chart/src/utils/canvas_wrapper.dart'; -import 'package:flutter/cupertino.dart'; -import 'package:flutter_test/flutter_test.dart'; -import 'package:mockito/annotations.dart'; -import 'package:mockito/mockito.dart'; - -import '../data_pool.dart'; -import 'scatter_chart_renderer_test.mocks.dart'; - -@GenerateMocks([Canvas, PaintingContext, BuildContext, ScatterChartPainter]) -void main() { - group('ScatterChartRenderer', () { - final data = ScatterChartData( - scatterSpots: [MockData.scatterSpot1, MockData.scatterSpot2], - ); - - final targetData = ScatterChartData(scatterSpots: [MockData.scatterSpot3]); - - const textScaler = TextScaler.linear(4); - - final mockBuildContext = MockBuildContext(); - final renderScatterChart = RenderScatterChart( - mockBuildContext, - data, - targetData, - textScaler, - ); - - final mockPainter = MockScatterChartPainter(); - final mockPaintingContext = MockPaintingContext(); - final mockCanvas = MockCanvas(); - const mockSize = Size(44, 44); - when(mockPaintingContext.canvas).thenAnswer((realInvocation) => mockCanvas); - renderScatterChart - ..mockTestSize = mockSize - ..painter = mockPainter; - - test('test 1 correct data set', () { - expect(renderScatterChart.data == data, true); - expect(renderScatterChart.data == targetData, false); - expect(renderScatterChart.targetData == targetData, true); - expect(renderScatterChart.textScaler == textScaler, true); - expect(renderScatterChart.paintHolder.data == data, true); - expect(renderScatterChart.paintHolder.targetData == targetData, true); - expect(renderScatterChart.paintHolder.textScaler == textScaler, true); - }); - - test('test 2 check paint function', () { - renderScatterChart.paint(mockPaintingContext, const Offset(10, 10)); - verify(mockCanvas.save()).called(1); - verify(mockCanvas.translate(10, 10)).called(1); - final result = verify(mockPainter.paint(any, captureAny, captureAny)); - expect(result.callCount, 1); - - final canvasWrapper = result.captured[0] as CanvasWrapper; - expect(canvasWrapper.size, const Size(44, 44)); - expect(canvasWrapper.canvas, mockCanvas); - - final paintHolder = result.captured[1] as PaintHolder; - expect(paintHolder.data, data); - expect(paintHolder.targetData, targetData); - expect(paintHolder.textScaler, textScaler); - - verify(mockCanvas.restore()).called(1); - }); - - test('test 3 check getResponseAtLocation function', () { - final results = >[]; - when(mockPainter.handleTouch(captureAny, captureAny, captureAny)) - .thenAnswer((inv) { - results.add({ - 'local_position': inv.positionalArguments[0] as Offset, - 'size': inv.positionalArguments[1] as Size, - 'paint_holder': inv.positionalArguments[2] as PaintHolder, - }); - return MockData.scatterTouchedSpot; - }); - final touchResponse = - renderScatterChart.getResponseAtLocation(MockData.offset1); - expect(touchResponse.touchedSpot, MockData.scatterTouchedSpot); - expect(results[0]['local_position'] as Offset, MockData.offset1); - expect(results[0]['size'] as Size, mockSize); - final paintHolder = results[0]['paint_holder'] as PaintHolder; - expect(paintHolder.data, data); - expect(paintHolder.targetData, targetData); - expect(paintHolder.textScaler, textScaler); - }); - - test('test 4 check setters', () { - renderScatterChart - ..data = targetData - ..targetData = data - ..textScaler = const TextScaler.linear(22); - - expect(renderScatterChart.data, targetData); - expect(renderScatterChart.targetData, data); - expect(renderScatterChart.textScaler, const TextScaler.linear(22)); - }); - }); -} diff --git a/test/chart/scatter_chart/scatter_chart_renderer_test.mocks.dart b/test/chart/scatter_chart/scatter_chart_renderer_test.mocks.dart deleted file mode 100644 index 56fd25da9e..0000000000 --- a/test/chart/scatter_chart/scatter_chart_renderer_test.mocks.dart +++ /dev/null @@ -1,1495 +0,0 @@ -// Mocks generated by Mockito 5.4.2 from annotations -// in fl_chart/test/chart/scatter_chart/scatter_chart_renderer_test.dart. -// Do not manually edit this file. - -// ignore_for_file: no_leading_underscores_for_library_prefixes -import 'dart:typed_data' as _i7; -import 'dart:ui' as _i2; - -import 'package:fl_chart/fl_chart.dart' as _i13; -import 'package:fl_chart/src/chart/base/base_chart/base_chart_painter.dart' - as _i12; -import 'package:fl_chart/src/chart/scatter_chart/scatter_chart_painter.dart' - as _i10; -import 'package:fl_chart/src/utils/canvas_wrapper.dart' as _i11; -import 'package:flutter/foundation.dart' as _i5; -import 'package:flutter/gestures.dart' as _i8; -import 'package:flutter/material.dart' as _i6; -import 'package:flutter/rendering.dart' as _i3; -import 'package:flutter/src/rendering/layer.dart' as _i4; -import 'package:flutter/src/widgets/notification_listener.dart' as _i9; -import 'package:mockito/mockito.dart' as _i1; - -// ignore_for_file: type=lint -// ignore_for_file: avoid_redundant_argument_values -// ignore_for_file: avoid_setters_without_getters -// ignore_for_file: comment_references -// ignore_for_file: implementation_imports -// ignore_for_file: invalid_use_of_visible_for_testing_member -// ignore_for_file: prefer_const_constructors -// ignore_for_file: unnecessary_parenthesis -// ignore_for_file: camel_case_types -// ignore_for_file: subtype_of_sealed_class - -class _FakeRect_0 extends _i1.SmartFake implements _i2.Rect { - _FakeRect_0( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); -} - -class _FakeCanvas_1 extends _i1.SmartFake implements _i2.Canvas { - _FakeCanvas_1( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); -} - -class _FakePaintingContext_2 extends _i1.SmartFake - implements _i3.PaintingContext { - _FakePaintingContext_2( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); -} - -class _FakeColorFilterLayer_3 extends _i1.SmartFake - implements _i4.ColorFilterLayer { - _FakeColorFilterLayer_3( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); - - @override - String toString({_i5.DiagnosticLevel? minLevel = _i5.DiagnosticLevel.info}) => - super.toString(); -} - -class _FakeOpacityLayer_4 extends _i1.SmartFake implements _i4.OpacityLayer { - _FakeOpacityLayer_4( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); - - @override - String toString({_i5.DiagnosticLevel? minLevel = _i5.DiagnosticLevel.info}) => - super.toString(); -} - -class _FakeWidget_5 extends _i1.SmartFake implements _i6.Widget { - _FakeWidget_5( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); - - @override - String toString({_i5.DiagnosticLevel? minLevel = _i5.DiagnosticLevel.info}) => - super.toString(); -} - -class _FakeInheritedWidget_6 extends _i1.SmartFake - implements _i6.InheritedWidget { - _FakeInheritedWidget_6( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); - - @override - String toString({_i5.DiagnosticLevel? minLevel = _i5.DiagnosticLevel.info}) => - super.toString(); -} - -class _FakeDiagnosticsNode_7 extends _i1.SmartFake - implements _i5.DiagnosticsNode { - _FakeDiagnosticsNode_7( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); - - @override - String toString({ - _i5.TextTreeConfiguration? parentConfiguration, - _i5.DiagnosticLevel? minLevel = _i5.DiagnosticLevel.info, - }) => - super.toString(); -} - -/// A class which mocks [Canvas]. -/// -/// See the documentation for Mockito's code generation for more information. -class MockCanvas extends _i1.Mock implements _i2.Canvas { - MockCanvas() { - _i1.throwOnMissingStub(this); - } - - @override - void save() => super.noSuchMethod( - Invocation.method( - #save, - [], - ), - returnValueForMissingStub: null, - ); - - @override - void saveLayer( - _i2.Rect? bounds, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #saveLayer, - [ - bounds, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void restore() => super.noSuchMethod( - Invocation.method( - #restore, - [], - ), - returnValueForMissingStub: null, - ); - - @override - void restoreToCount(int? count) => super.noSuchMethod( - Invocation.method( - #restoreToCount, - [count], - ), - returnValueForMissingStub: null, - ); - - @override - int getSaveCount() => (super.noSuchMethod( - Invocation.method( - #getSaveCount, - [], - ), - returnValue: 0, - ) as int); - - @override - void translate( - double? dx, - double? dy, - ) => - super.noSuchMethod( - Invocation.method( - #translate, - [ - dx, - dy, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void scale( - double? sx, [ - double? sy, - ]) => - super.noSuchMethod( - Invocation.method( - #scale, - [ - sx, - sy, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void rotate(double? radians) => super.noSuchMethod( - Invocation.method( - #rotate, - [radians], - ), - returnValueForMissingStub: null, - ); - - @override - void skew( - double? sx, - double? sy, - ) => - super.noSuchMethod( - Invocation.method( - #skew, - [ - sx, - sy, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void transform(_i7.Float64List? matrix4) => super.noSuchMethod( - Invocation.method( - #transform, - [matrix4], - ), - returnValueForMissingStub: null, - ); - - @override - _i7.Float64List getTransform() => (super.noSuchMethod( - Invocation.method( - #getTransform, - [], - ), - returnValue: _i7.Float64List(0), - ) as _i7.Float64List); - - @override - void clipRect( - _i2.Rect? rect, { - _i2.ClipOp? clipOp = _i2.ClipOp.intersect, - bool? doAntiAlias = true, - }) => - super.noSuchMethod( - Invocation.method( - #clipRect, - [rect], - { - #clipOp: clipOp, - #doAntiAlias: doAntiAlias, - }, - ), - returnValueForMissingStub: null, - ); - - @override - void clipRRect( - _i2.RRect? rrect, { - bool? doAntiAlias = true, - }) => - super.noSuchMethod( - Invocation.method( - #clipRRect, - [rrect], - {#doAntiAlias: doAntiAlias}, - ), - returnValueForMissingStub: null, - ); - - @override - void clipPath( - _i2.Path? path, { - bool? doAntiAlias = true, - }) => - super.noSuchMethod( - Invocation.method( - #clipPath, - [path], - {#doAntiAlias: doAntiAlias}, - ), - returnValueForMissingStub: null, - ); - - @override - _i2.Rect getLocalClipBounds() => (super.noSuchMethod( - Invocation.method( - #getLocalClipBounds, - [], - ), - returnValue: _FakeRect_0( - this, - Invocation.method( - #getLocalClipBounds, - [], - ), - ), - ) as _i2.Rect); - - @override - _i2.Rect getDestinationClipBounds() => (super.noSuchMethod( - Invocation.method( - #getDestinationClipBounds, - [], - ), - returnValue: _FakeRect_0( - this, - Invocation.method( - #getDestinationClipBounds, - [], - ), - ), - ) as _i2.Rect); - - @override - void drawColor( - _i2.Color? color, - _i2.BlendMode? blendMode, - ) => - super.noSuchMethod( - Invocation.method( - #drawColor, - [ - color, - blendMode, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawLine( - _i2.Offset? p1, - _i2.Offset? p2, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawLine, - [ - p1, - p2, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawPaint(_i2.Paint? paint) => super.noSuchMethod( - Invocation.method( - #drawPaint, - [paint], - ), - returnValueForMissingStub: null, - ); - - @override - void drawRect( - _i2.Rect? rect, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawRect, - [ - rect, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawRRect( - _i2.RRect? rrect, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawRRect, - [ - rrect, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawDRRect( - _i2.RRect? outer, - _i2.RRect? inner, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawDRRect, - [ - outer, - inner, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawOval( - _i2.Rect? rect, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawOval, - [ - rect, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawCircle( - _i2.Offset? c, - double? radius, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawCircle, - [ - c, - radius, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawArc( - _i2.Rect? rect, - double? startAngle, - double? sweepAngle, - bool? useCenter, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawArc, - [ - rect, - startAngle, - sweepAngle, - useCenter, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawPath( - _i2.Path? path, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawPath, - [ - path, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawImage( - _i2.Image? image, - _i2.Offset? offset, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawImage, - [ - image, - offset, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawImageRect( - _i2.Image? image, - _i2.Rect? src, - _i2.Rect? dst, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawImageRect, - [ - image, - src, - dst, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawImageNine( - _i2.Image? image, - _i2.Rect? center, - _i2.Rect? dst, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawImageNine, - [ - image, - center, - dst, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawPicture(_i2.Picture? picture) => super.noSuchMethod( - Invocation.method( - #drawPicture, - [picture], - ), - returnValueForMissingStub: null, - ); - - @override - void drawParagraph( - _i2.Paragraph? paragraph, - _i2.Offset? offset, - ) => - super.noSuchMethod( - Invocation.method( - #drawParagraph, - [ - paragraph, - offset, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawPoints( - _i2.PointMode? pointMode, - List<_i2.Offset>? points, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawPoints, - [ - pointMode, - points, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawRawPoints( - _i2.PointMode? pointMode, - _i7.Float32List? points, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawRawPoints, - [ - pointMode, - points, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawVertices( - _i2.Vertices? vertices, - _i2.BlendMode? blendMode, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawVertices, - [ - vertices, - blendMode, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawAtlas( - _i2.Image? atlas, - List<_i2.RSTransform>? transforms, - List<_i2.Rect>? rects, - List<_i2.Color>? colors, - _i2.BlendMode? blendMode, - _i2.Rect? cullRect, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawAtlas, - [ - atlas, - transforms, - rects, - colors, - blendMode, - cullRect, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawRawAtlas( - _i2.Image? atlas, - _i7.Float32List? rstTransforms, - _i7.Float32List? rects, - _i7.Int32List? colors, - _i2.BlendMode? blendMode, - _i2.Rect? cullRect, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawRawAtlas, - [ - atlas, - rstTransforms, - rects, - colors, - blendMode, - cullRect, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawShadow( - _i2.Path? path, - _i2.Color? color, - double? elevation, - bool? transparentOccluder, - ) => - super.noSuchMethod( - Invocation.method( - #drawShadow, - [ - path, - color, - elevation, - transparentOccluder, - ], - ), - returnValueForMissingStub: null, - ); -} - -/// A class which mocks [PaintingContext]. -/// -/// See the documentation for Mockito's code generation for more information. -class MockPaintingContext extends _i1.Mock implements _i3.PaintingContext { - MockPaintingContext() { - _i1.throwOnMissingStub(this); - } - - @override - _i2.Rect get estimatedBounds => (super.noSuchMethod( - Invocation.getter(#estimatedBounds), - returnValue: _FakeRect_0( - this, - Invocation.getter(#estimatedBounds), - ), - ) as _i2.Rect); - - @override - _i2.Canvas get canvas => (super.noSuchMethod( - Invocation.getter(#canvas), - returnValue: _FakeCanvas_1( - this, - Invocation.getter(#canvas), - ), - ) as _i2.Canvas); - - @override - void paintChild( - _i3.RenderObject? child, - _i2.Offset? offset, - ) => - super.noSuchMethod( - Invocation.method( - #paintChild, - [ - child, - offset, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void appendLayer(_i4.Layer? layer) => super.noSuchMethod( - Invocation.method( - #appendLayer, - [layer], - ), - returnValueForMissingStub: null, - ); - - @override - _i2.VoidCallback addCompositionCallback(_i4.CompositionCallback? callback) => - (super.noSuchMethod( - Invocation.method( - #addCompositionCallback, - [callback], - ), - returnValue: () {}, - ) as _i2.VoidCallback); - - @override - void stopRecordingIfNeeded() => super.noSuchMethod( - Invocation.method( - #stopRecordingIfNeeded, - [], - ), - returnValueForMissingStub: null, - ); - - @override - void setIsComplexHint() => super.noSuchMethod( - Invocation.method( - #setIsComplexHint, - [], - ), - returnValueForMissingStub: null, - ); - - @override - void setWillChangeHint() => super.noSuchMethod( - Invocation.method( - #setWillChangeHint, - [], - ), - returnValueForMissingStub: null, - ); - - @override - void addLayer(_i4.Layer? layer) => super.noSuchMethod( - Invocation.method( - #addLayer, - [layer], - ), - returnValueForMissingStub: null, - ); - - @override - void pushLayer( - _i4.ContainerLayer? childLayer, - _i3.PaintingContextCallback? painter, - _i2.Offset? offset, { - _i2.Rect? childPaintBounds, - }) => - super.noSuchMethod( - Invocation.method( - #pushLayer, - [ - childLayer, - painter, - offset, - ], - {#childPaintBounds: childPaintBounds}, - ), - returnValueForMissingStub: null, - ); - - @override - _i3.PaintingContext createChildContext( - _i4.ContainerLayer? childLayer, - _i2.Rect? bounds, - ) => - (super.noSuchMethod( - Invocation.method( - #createChildContext, - [ - childLayer, - bounds, - ], - ), - returnValue: _FakePaintingContext_2( - this, - Invocation.method( - #createChildContext, - [ - childLayer, - bounds, - ], - ), - ), - ) as _i3.PaintingContext); - - @override - _i4.ClipRectLayer? pushClipRect( - bool? needsCompositing, - _i2.Offset? offset, - _i2.Rect? clipRect, - _i3.PaintingContextCallback? painter, { - _i2.Clip? clipBehavior = _i2.Clip.hardEdge, - _i4.ClipRectLayer? oldLayer, - }) => - (super.noSuchMethod(Invocation.method( - #pushClipRect, - [ - needsCompositing, - offset, - clipRect, - painter, - ], - { - #clipBehavior: clipBehavior, - #oldLayer: oldLayer, - }, - )) as _i4.ClipRectLayer?); - - @override - _i4.ClipRRectLayer? pushClipRRect( - bool? needsCompositing, - _i2.Offset? offset, - _i2.Rect? bounds, - _i2.RRect? clipRRect, - _i3.PaintingContextCallback? painter, { - _i2.Clip? clipBehavior = _i2.Clip.antiAlias, - _i4.ClipRRectLayer? oldLayer, - }) => - (super.noSuchMethod(Invocation.method( - #pushClipRRect, - [ - needsCompositing, - offset, - bounds, - clipRRect, - painter, - ], - { - #clipBehavior: clipBehavior, - #oldLayer: oldLayer, - }, - )) as _i4.ClipRRectLayer?); - - @override - _i4.ClipPathLayer? pushClipPath( - bool? needsCompositing, - _i2.Offset? offset, - _i2.Rect? bounds, - _i2.Path? clipPath, - _i3.PaintingContextCallback? painter, { - _i2.Clip? clipBehavior = _i2.Clip.antiAlias, - _i4.ClipPathLayer? oldLayer, - }) => - (super.noSuchMethod(Invocation.method( - #pushClipPath, - [ - needsCompositing, - offset, - bounds, - clipPath, - painter, - ], - { - #clipBehavior: clipBehavior, - #oldLayer: oldLayer, - }, - )) as _i4.ClipPathLayer?); - - @override - _i4.ColorFilterLayer pushColorFilter( - _i2.Offset? offset, - _i2.ColorFilter? colorFilter, - _i3.PaintingContextCallback? painter, { - _i4.ColorFilterLayer? oldLayer, - }) => - (super.noSuchMethod( - Invocation.method( - #pushColorFilter, - [ - offset, - colorFilter, - painter, - ], - {#oldLayer: oldLayer}, - ), - returnValue: _FakeColorFilterLayer_3( - this, - Invocation.method( - #pushColorFilter, - [ - offset, - colorFilter, - painter, - ], - {#oldLayer: oldLayer}, - ), - ), - ) as _i4.ColorFilterLayer); - - @override - _i4.TransformLayer? pushTransform( - bool? needsCompositing, - _i2.Offset? offset, - _i8.Matrix4? transform, - _i3.PaintingContextCallback? painter, { - _i4.TransformLayer? oldLayer, - }) => - (super.noSuchMethod(Invocation.method( - #pushTransform, - [ - needsCompositing, - offset, - transform, - painter, - ], - {#oldLayer: oldLayer}, - )) as _i4.TransformLayer?); - - @override - _i4.OpacityLayer pushOpacity( - _i2.Offset? offset, - int? alpha, - _i3.PaintingContextCallback? painter, { - _i4.OpacityLayer? oldLayer, - }) => - (super.noSuchMethod( - Invocation.method( - #pushOpacity, - [ - offset, - alpha, - painter, - ], - {#oldLayer: oldLayer}, - ), - returnValue: _FakeOpacityLayer_4( - this, - Invocation.method( - #pushOpacity, - [ - offset, - alpha, - painter, - ], - {#oldLayer: oldLayer}, - ), - ), - ) as _i4.OpacityLayer); - - @override - void clipPathAndPaint( - _i2.Path? path, - _i2.Clip? clipBehavior, - _i2.Rect? bounds, - _i2.VoidCallback? painter, - ) => - super.noSuchMethod( - Invocation.method( - #clipPathAndPaint, - [ - path, - clipBehavior, - bounds, - painter, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void clipRRectAndPaint( - _i2.RRect? rrect, - _i2.Clip? clipBehavior, - _i2.Rect? bounds, - _i2.VoidCallback? painter, - ) => - super.noSuchMethod( - Invocation.method( - #clipRRectAndPaint, - [ - rrect, - clipBehavior, - bounds, - painter, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void clipRectAndPaint( - _i2.Rect? rect, - _i2.Clip? clipBehavior, - _i2.Rect? bounds, - _i2.VoidCallback? painter, - ) => - super.noSuchMethod( - Invocation.method( - #clipRectAndPaint, - [ - rect, - clipBehavior, - bounds, - painter, - ], - ), - returnValueForMissingStub: null, - ); -} - -/// A class which mocks [BuildContext]. -/// -/// See the documentation for Mockito's code generation for more information. -class MockBuildContext extends _i1.Mock implements _i6.BuildContext { - MockBuildContext() { - _i1.throwOnMissingStub(this); - } - - @override - _i6.Widget get widget => (super.noSuchMethod( - Invocation.getter(#widget), - returnValue: _FakeWidget_5( - this, - Invocation.getter(#widget), - ), - ) as _i6.Widget); - - @override - bool get mounted => (super.noSuchMethod( - Invocation.getter(#mounted), - returnValue: false, - ) as bool); - - @override - bool get debugDoingBuild => (super.noSuchMethod( - Invocation.getter(#debugDoingBuild), - returnValue: false, - ) as bool); - - @override - _i6.InheritedWidget dependOnInheritedElement( - _i6.InheritedElement? ancestor, { - Object? aspect, - }) => - (super.noSuchMethod( - Invocation.method( - #dependOnInheritedElement, - [ancestor], - {#aspect: aspect}, - ), - returnValue: _FakeInheritedWidget_6( - this, - Invocation.method( - #dependOnInheritedElement, - [ancestor], - {#aspect: aspect}, - ), - ), - ) as _i6.InheritedWidget); - - @override - void visitAncestorElements(_i6.ConditionalElementVisitor? visitor) => - super.noSuchMethod( - Invocation.method( - #visitAncestorElements, - [visitor], - ), - returnValueForMissingStub: null, - ); - - @override - void visitChildElements(_i6.ElementVisitor? visitor) => super.noSuchMethod( - Invocation.method( - #visitChildElements, - [visitor], - ), - returnValueForMissingStub: null, - ); - - @override - void dispatchNotification(_i9.Notification? notification) => - super.noSuchMethod( - Invocation.method( - #dispatchNotification, - [notification], - ), - returnValueForMissingStub: null, - ); - - @override - _i5.DiagnosticsNode describeElement( - String? name, { - _i5.DiagnosticsTreeStyle? style = _i5.DiagnosticsTreeStyle.errorProperty, - }) => - (super.noSuchMethod( - Invocation.method( - #describeElement, - [name], - {#style: style}, - ), - returnValue: _FakeDiagnosticsNode_7( - this, - Invocation.method( - #describeElement, - [name], - {#style: style}, - ), - ), - ) as _i5.DiagnosticsNode); - - @override - _i5.DiagnosticsNode describeWidget( - String? name, { - _i5.DiagnosticsTreeStyle? style = _i5.DiagnosticsTreeStyle.errorProperty, - }) => - (super.noSuchMethod( - Invocation.method( - #describeWidget, - [name], - {#style: style}, - ), - returnValue: _FakeDiagnosticsNode_7( - this, - Invocation.method( - #describeWidget, - [name], - {#style: style}, - ), - ), - ) as _i5.DiagnosticsNode); - - @override - List<_i5.DiagnosticsNode> describeMissingAncestor( - {required Type? expectedAncestorType}) => - (super.noSuchMethod( - Invocation.method( - #describeMissingAncestor, - [], - {#expectedAncestorType: expectedAncestorType}, - ), - returnValue: <_i5.DiagnosticsNode>[], - ) as List<_i5.DiagnosticsNode>); - - @override - _i5.DiagnosticsNode describeOwnershipChain(String? name) => - (super.noSuchMethod( - Invocation.method( - #describeOwnershipChain, - [name], - ), - returnValue: _FakeDiagnosticsNode_7( - this, - Invocation.method( - #describeOwnershipChain, - [name], - ), - ), - ) as _i5.DiagnosticsNode); -} - -/// A class which mocks [ScatterChartPainter]. -/// -/// See the documentation for Mockito's code generation for more information. -class MockScatterChartPainter extends _i1.Mock - implements _i10.ScatterChartPainter { - MockScatterChartPainter() { - _i1.throwOnMissingStub(this); - } - - @override - void paint( - _i6.BuildContext? context, - _i11.CanvasWrapper? canvasWrapper, - _i12.PaintHolder<_i13.ScatterChartData>? holder, - ) => - super.noSuchMethod( - Invocation.method( - #paint, - [ - context, - canvasWrapper, - holder, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawSpots( - _i6.BuildContext? context, - _i11.CanvasWrapper? canvasWrapper, - _i12.PaintHolder<_i13.ScatterChartData>? holder, - ) => - super.noSuchMethod( - Invocation.method( - #drawSpots, - [ - context, - canvasWrapper, - holder, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawTouchTooltips( - _i6.BuildContext? context, - _i11.CanvasWrapper? canvasWrapper, - _i12.PaintHolder<_i13.ScatterChartData>? holder, - ) => - super.noSuchMethod( - Invocation.method( - #drawTouchTooltips, - [ - context, - canvasWrapper, - holder, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawTouchTooltip( - _i6.BuildContext? context, - _i11.CanvasWrapper? canvasWrapper, - _i13.ScatterTouchTooltipData? tooltipData, - _i13.ScatterSpot? showOnSpot, - _i12.PaintHolder<_i13.ScatterChartData>? holder, - ) => - super.noSuchMethod( - Invocation.method( - #drawTouchTooltip, - [ - context, - canvasWrapper, - tooltipData, - showOnSpot, - holder, - ], - ), - returnValueForMissingStub: null, - ); - - @override - _i13.ScatterTouchedSpot? handleTouch( - _i2.Offset? localPosition, - _i2.Size? viewSize, - _i12.PaintHolder<_i13.ScatterChartData>? holder, - ) => - (super.noSuchMethod(Invocation.method( - #handleTouch, - [ - localPosition, - viewSize, - holder, - ], - )) as _i13.ScatterTouchedSpot?); - - @override - void drawGrid( - _i11.CanvasWrapper? canvasWrapper, - _i12.PaintHolder<_i13.ScatterChartData>? holder, - ) => - super.noSuchMethod( - Invocation.method( - #drawGrid, - [ - canvasWrapper, - holder, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawBackground( - _i11.CanvasWrapper? canvasWrapper, - _i12.PaintHolder<_i13.ScatterChartData>? holder, - ) => - super.noSuchMethod( - Invocation.method( - #drawBackground, - [ - canvasWrapper, - holder, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawRangeAnnotation( - _i11.CanvasWrapper? canvasWrapper, - _i12.PaintHolder<_i13.ScatterChartData>? holder, - ) => - super.noSuchMethod( - Invocation.method( - #drawRangeAnnotation, - [ - canvasWrapper, - holder, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawExtraLines( - _i6.BuildContext? context, - _i11.CanvasWrapper? canvasWrapper, - _i12.PaintHolder<_i13.ScatterChartData>? holder, - ) => - super.noSuchMethod( - Invocation.method( - #drawExtraLines, - [ - context, - canvasWrapper, - holder, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawHorizontalLines( - _i6.BuildContext? context, - _i11.CanvasWrapper? canvasWrapper, - _i12.PaintHolder<_i13.ScatterChartData>? holder, - _i2.Size? viewSize, - ) => - super.noSuchMethod( - Invocation.method( - #drawHorizontalLines, - [ - context, - canvasWrapper, - holder, - viewSize, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawVerticalLines( - _i6.BuildContext? context, - _i11.CanvasWrapper? canvasWrapper, - _i12.PaintHolder<_i13.ScatterChartData>? holder, - _i2.Size? viewSize, - ) => - super.noSuchMethod( - Invocation.method( - #drawVerticalLines, - [ - context, - canvasWrapper, - holder, - viewSize, - ], - ), - returnValueForMissingStub: null, - ); - - @override - double getPixelX( - double? spotX, - _i2.Size? viewSize, - _i12.PaintHolder<_i13.ScatterChartData>? holder, - ) => - (super.noSuchMethod( - Invocation.method( - #getPixelX, - [ - spotX, - viewSize, - holder, - ], - ), - returnValue: 0.0, - ) as double); - - @override - double getPixelY( - double? spotY, - _i2.Size? viewSize, - _i12.PaintHolder<_i13.ScatterChartData>? holder, - ) => - (super.noSuchMethod( - Invocation.method( - #getPixelY, - [ - spotY, - viewSize, - holder, - ], - ), - returnValue: 0.0, - ) as double); - - @override - double getTooltipLeft( - double? dx, - double? tooltipWidth, - _i13.FLHorizontalAlignment? tooltipHorizontalAlignment, - double? tooltipHorizontalOffset, - ) => - (super.noSuchMethod( - Invocation.method( - #getTooltipLeft, - [ - dx, - tooltipWidth, - tooltipHorizontalAlignment, - tooltipHorizontalOffset, - ], - ), - returnValue: 0.0, - ) as double); -} diff --git a/test/extensions/bar_chart_data_extensions_test.dart b/test/extensions/bar_chart_data_extensions_test.dart deleted file mode 100644 index ebb6bb07f8..0000000000 --- a/test/extensions/bar_chart_data_extensions_test.dart +++ /dev/null @@ -1,43 +0,0 @@ -import 'package:fl_chart/fl_chart.dart'; -import 'package:fl_chart/src/extensions/bar_chart_data_extension.dart'; -import 'package:flutter_test/flutter_test.dart'; -import '../chart/data_pool.dart'; - -void main() { - test('test drawRRect', () { - expect( - MockData.barChartData1 - .copyWith(alignment: BarChartAlignment.start) - .calculateGroupsX(100), - [9.0, 43.0, 77.0], - ); - - expect( - MockData.barChartData1 - .copyWith(alignment: BarChartAlignment.end) - .calculateGroupsX(100), - [23.0, 57.0, 91.0], - ); - - expect( - MockData.barChartData1 - .copyWith(alignment: BarChartAlignment.center) - .calculateGroupsX(100), - [16.0, 50.0, 84.0], - ); - - expect( - MockData.barChartData1 - .copyWith(alignment: BarChartAlignment.spaceBetween) - .calculateGroupsX(100), - [9.0, 50.0, 91.0], - ); - - expect( - MockData.barChartData1 - .copyWith(alignment: BarChartAlignment.spaceAround) - .calculateGroupsX(100), - [16.666666666666668, 50.0, 83.33333333333334], - ); - }); -} diff --git a/test/extensions/border_extension_test.dart b/test/extensions/border_extension_test.dart deleted file mode 100644 index 41037d8ee6..0000000000 --- a/test/extensions/border_extension_test.dart +++ /dev/null @@ -1,30 +0,0 @@ -import 'package:fl_chart/src/extensions/border_extension.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_test/flutter_test.dart'; - -void main() { - group('Border isVisible()', () { - test('test 1', () { - final border = Border( - left: BorderSide( - color: Colors.red.withOpacity(0.00001), - width: 10, - ), - ); - expect(border.isVisible(), true); - }); - - test('test 2', () { - final border = Border.all(width: 0); - expect(border.isVisible(), false); - }); - - test('test 3', () { - final border = Border.all( - color: Colors.red.withOpacity(0), - width: 10, - ); - expect(border.isVisible(), false); - }); - }); -} diff --git a/test/extensions/color_extensions_test.dart b/test/extensions/color_extensions_test.dart deleted file mode 100644 index 57911672fd..0000000000 --- a/test/extensions/color_extensions_test.dart +++ /dev/null @@ -1,18 +0,0 @@ -import 'dart:ui'; - -import 'package:fl_chart/src/extensions/color_extension.dart'; -import 'package:flutter_test/flutter_test.dart'; - -void main() { - test('test darken', () { - expect( - const Color(0x11111111).darken(), - const Color(0x110a0a0a), - ); - - expect( - const Color(0x11111111).darken(100), - const Color(0x11000000), - ); - }); -} diff --git a/test/extensions/edge_insets_extension_test.dart b/test/extensions/edge_insets_extension_test.dart deleted file mode 100644 index a00d0e6d30..0000000000 --- a/test/extensions/edge_insets_extension_test.dart +++ /dev/null @@ -1,19 +0,0 @@ -import 'package:fl_chart/src/extensions/edge_insets_extension.dart'; -import 'package:flutter/widgets.dart'; -import 'package:flutter_test/flutter_test.dart'; - -void main() { - test('test onlyTopBottom', () { - const input = EdgeInsets.symmetric(horizontal: 10, vertical: 20); - - expect( - input.onlyTopBottom, - const EdgeInsets.symmetric(vertical: 20), - ); - - expect( - input.onlyLeftRight, - const EdgeInsets.symmetric(horizontal: 10), - ); - }); -} diff --git a/test/extensions/fl_border_data_extension_test.dart b/test/extensions/fl_border_data_extension_test.dart deleted file mode 100644 index 3d4f164cab..0000000000 --- a/test/extensions/fl_border_data_extension_test.dart +++ /dev/null @@ -1,39 +0,0 @@ -import 'package:fl_chart/fl_chart.dart'; -import 'package:fl_chart/src/extensions/fl_border_data_extension.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_test/flutter_test.dart'; - -void main() { - test('test allSidesPadding', () { - expect( - FlBorderData( - show: false, - border: Border.all( - color: Colors.red, - width: 10, - ), - ).allSidesPadding, - EdgeInsets.zero, - ); - - expect( - FlBorderData( - show: true, - border: Border( - left: const BorderSide( - color: Colors.transparent, - ), - top: BorderSide( - width: 10, - color: Colors.red.withOpacity(0.5), - ), - bottom: const BorderSide( - width: 4, - color: Colors.red, - ), - ), - ).allSidesPadding, - const EdgeInsets.fromLTRB(1, 10, 0, 4), - ); - }); -} diff --git a/test/extensions/fl_titles_data_extension_test.dart b/test/extensions/fl_titles_data_extension_test.dart deleted file mode 100644 index 854de16636..0000000000 --- a/test/extensions/fl_titles_data_extension_test.dart +++ /dev/null @@ -1,19 +0,0 @@ -import 'package:fl_chart/src/extensions/fl_titles_data_extension.dart'; -import 'package:flutter/widgets.dart'; -import 'package:flutter_test/flutter_test.dart'; - -import '../chart/data_pool.dart'; - -void main() { - test('test allSidesPadding', () { - expect( - MockData.flTitlesData1.copyWith(show: false).allSidesPadding, - EdgeInsets.zero, - ); - - expect( - MockData.flTitlesData1.allSidesPadding, - const EdgeInsets.fromLTRB(27, 16, 16, 16), - ); - }); -} diff --git a/test/extensions/paint_extension_test.dart b/test/extensions/paint_extension_test.dart deleted file mode 100644 index da7a16a6eb..0000000000 --- a/test/extensions/paint_extension_test.dart +++ /dev/null @@ -1,55 +0,0 @@ -import 'package:fl_chart/src/extensions/paint_extension.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_test/flutter_test.dart'; - -import '../chart/data_pool.dart'; - -void main() { - test('test transparentIfWidthIsZero', () { - final paint = Paint() - ..color = MockData.color0 - ..strokeWidth = 4 - ..transparentIfWidthIsZero(); - expect(paint.strokeWidth, 4); - expect(MockData.color0, paint.color); - - paint - ..strokeWidth = 0.5 - ..transparentIfWidthIsZero(); - expect(paint.strokeWidth, 0.5); - expect(MockData.color0, paint.color); - - paint - ..strokeWidth = 0.0 - ..transparentIfWidthIsZero(); - expect(paint.strokeWidth, 0.0); - expect(MockData.color0.withOpacity(0), paint.color); - }); - - test('test setColorOrGradient', () { - final paint = Paint() - ..color = MockData.color0 - ..setColorOrGradient(null, MockData.gradient1, MockData.rect1); - expect(paint.shader, isNotNull); - - paint.setColorOrGradient(MockData.color0, null, MockData.rect1); - expect(paint.color, MockData.color0); - expect(paint.shader, isNull); - }); - - test('test setColorOrGradientForLine', () { - final paint = Paint() - ..color = MockData.color0 - ..setColorOrGradientForLine( - null, - MockData.gradient1, - from: MockData.rect1.topLeft, - to: MockData.rect1.bottomRight, - ); - expect(paint.shader, isNotNull); - - paint.setColorOrGradient(MockData.color0, null, MockData.rect1); - expect(paint.color, MockData.color0); - expect(paint.shader, isNull); - }); -} diff --git a/test/extensions/path_extension_test.dart b/test/extensions/path_extension_test.dart deleted file mode 100644 index aced26386e..0000000000 --- a/test/extensions/path_extension_test.dart +++ /dev/null @@ -1,25 +0,0 @@ -import 'dart:ui'; - -import 'package:fl_chart/src/extensions/path_extension.dart'; -import 'package:fl_chart/src/utils/path_drawing/dash_path.dart'; -import 'package:flutter/widgets.dart'; -import 'package:flutter_test/flutter_test.dart'; - -import '../helper_methods.dart'; - -void main() { - test('test transparentIfWidthIsZero', () { - final path1 = Path() - ..moveTo(0, 0) - ..lineTo(10, 0); - expect( - path1.toDashedPath(null), - path1, - ); - - final path2 = - dashPath(path1, dashArray: CircularIntervalList([10.0, 5.0])); - - expect(HelperMethods.equalsPaths(path1.toDashedPath([10, 5]), path2), true); - }); -} diff --git a/test/extensions/rrect_extension_test.dart b/test/extensions/rrect_extension_test.dart deleted file mode 100644 index 614a0699be..0000000000 --- a/test/extensions/rrect_extension_test.dart +++ /dev/null @@ -1,16 +0,0 @@ -import 'dart:ui'; - -import 'package:fl_chart/src/extensions/rrect_extension.dart'; -import 'package:flutter/widgets.dart'; -import 'package:flutter_test/flutter_test.dart'; - -import '../chart/data_pool.dart'; - -void main() { - test('test getRect', () { - expect( - MockData.rRect1.getRect(), - const Rect.fromLTRB(1, 1, 1, 1), - ); - }); -} diff --git a/test/extensions/side_titles_extension_test.dart b/test/extensions/side_titles_extension_test.dart deleted file mode 100644 index 54b9238fbc..0000000000 --- a/test/extensions/side_titles_extension_test.dart +++ /dev/null @@ -1,42 +0,0 @@ -import 'package:fl_chart/src/chart/base/axis_chart/axis_chart_data.dart'; -import 'package:fl_chart/src/extensions/side_titles_extension.dart'; -import 'package:flutter/widgets.dart'; -import 'package:flutter_test/flutter_test.dart'; - -void main() { - test('test totalReservedSize', () { - expect( - const AxisTitles( - axisNameSize: 12, - sideTitles: SideTitles( - showTitles: true, - reservedSize: 20, - ), - ).totalReservedSize, - 20, - ); - - expect( - const AxisTitles( - axisNameWidget: Text('asdf'), - axisNameSize: 12, - sideTitles: SideTitles( - reservedSize: 20, - ), - ).totalReservedSize, - 12, - ); - - expect( - const AxisTitles( - axisNameWidget: Text('asdf'), - axisNameSize: 12, - sideTitles: SideTitles( - showTitles: true, - reservedSize: 20, - ), - ).totalReservedSize, - 32, - ); - }); -} diff --git a/test/extensions/text_align_extension_test.dart b/test/extensions/text_align_extension_test.dart deleted file mode 100644 index 3e0163c80c..0000000000 --- a/test/extensions/text_align_extension_test.dart +++ /dev/null @@ -1,58 +0,0 @@ -import 'package:fl_chart/src/extensions/text_align_extension.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_test/flutter_test.dart'; - -void main() { - test('test getFinalHorizontalAlignment extension.', () { - const textAlignLeft = TextAlign.left; - const textAlignRight = TextAlign.right; - - expect( - textAlignLeft.getFinalHorizontalAlignment(TextDirection.rtl), - HorizontalAlignment.left, - ); - expect( - textAlignLeft.getFinalHorizontalAlignment(TextDirection.ltr), - HorizontalAlignment.left, - ); - - expect( - textAlignRight.getFinalHorizontalAlignment(TextDirection.rtl), - HorizontalAlignment.right, - ); - expect( - textAlignRight.getFinalHorizontalAlignment(TextDirection.ltr), - HorizontalAlignment.right, - ); - - const textAlignStart = TextAlign.start; - expect( - textAlignStart.getFinalHorizontalAlignment(TextDirection.ltr), - HorizontalAlignment.left, - ); - expect( - textAlignStart.getFinalHorizontalAlignment(TextDirection.rtl), - HorizontalAlignment.right, - ); - - const textAlignEnd = TextAlign.end; - expect( - textAlignEnd.getFinalHorizontalAlignment(TextDirection.rtl), - HorizontalAlignment.left, - ); - expect( - textAlignEnd.getFinalHorizontalAlignment(TextDirection.ltr), - HorizontalAlignment.right, - ); - - const textAlignCenter = TextAlign.center; - expect( - textAlignCenter.getFinalHorizontalAlignment(TextDirection.rtl), - HorizontalAlignment.center, - ); - expect( - textAlignCenter.getFinalHorizontalAlignment(TextDirection.ltr), - HorizontalAlignment.center, - ); - }); -} diff --git a/test/helper_methods.dart b/test/helper_methods.dart deleted file mode 100644 index 1a2130ff09..0000000000 --- a/test/helper_methods.dart +++ /dev/null @@ -1,87 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter_test/flutter_test.dart'; -import 'chart/data_pool.dart'; - -void main() { - test('test equalsPaths', () { - expect( - HelperMethods.equalsPaths(MockData.path1, MockData.path1Duplicate), - true, - ); - expect(HelperMethods.equalsPaths(MockData.path1, MockData.path2), false); - }); -} - -class HelperMethods { - static bool equalsPaths(Path path1, Path path2) { - final metrics1 = path1.computeMetrics().toList(); - final metrics2 = path2.computeMetrics().toList(); - if (metrics1.length != metrics2.length) { - return false; - } - for (var i = 0; i < metrics1.length; i++) { - if (metrics1[i].length != metrics2[i].length) { - return false; - } - if (metrics1[i].isClosed != metrics2[i].isClosed) { - return false; - } - if (metrics1[i].contourIndex != metrics2[i].contourIndex) { - return false; - } - final half = metrics1[i].length / 2; - final tangent1 = metrics1[i].getTangentForOffset(half); - final tangent2 = metrics2[i].getTangentForOffset(half); - if (tangent1!.position != tangent2!.position) { - return false; - } - if (tangent1.angle != tangent2.angle) { - return false; - } - if (tangent1.vector != tangent2.vector) { - return false; - } - } - return true; - } - - static bool equalsRRects( - RRect rrect1, - RRect rrect2, { - double tolerance = 0.05, - }) { - if ((rrect1.left - rrect2.left).abs() > tolerance) { - return false; - } - - if ((rrect1.top - rrect2.top).abs() > tolerance) { - return false; - } - - if ((rrect1.right - rrect2.right).abs() > tolerance) { - return false; - } - - if ((rrect1.bottom - rrect2.bottom).abs() > tolerance) { - return false; - } - - if (rrect1.blRadius != rrect2.blRadius) { - return false; - } - - if (rrect1.brRadius != rrect2.brRadius) { - return false; - } - - if (rrect1.trRadius != rrect2.trRadius) { - return false; - } - - if (rrect1.tlRadius != rrect2.tlRadius) { - return false; - } - - return true; - } -} diff --git a/test/utils/canvas_wrapper_test.dart b/test/utils/canvas_wrapper_test.dart deleted file mode 100644 index 95459740a9..0000000000 --- a/test/utils/canvas_wrapper_test.dart +++ /dev/null @@ -1,126 +0,0 @@ -import 'dart:ui'; - -import 'package:fl_chart/src/chart/line_chart/line_chart_data.dart'; -import 'package:fl_chart/src/utils/canvas_wrapper.dart'; -import 'package:fl_chart/src/utils/utils.dart'; -import 'package:flutter_test/flutter_test.dart'; -import 'package:mockito/annotations.dart'; -import 'package:mockito/mockito.dart'; -import '../chart/data_pool.dart'; -import 'canvas_wrapper_test.mocks.dart'; - -@GenerateMocks([Canvas, FlDotPainter, Utils]) -void main() { - final mockCanvas = MockCanvas(); - final canvasWrapper = CanvasWrapper(mockCanvas, MockData.size1); - - test('test drawRRect', () { - canvasWrapper.drawRRect(MockData.rRect1, MockData.paint1); - verify(mockCanvas.drawRRect(MockData.rRect1, MockData.paint1)).called(1); - }); - - test('test save', () { - canvasWrapper.save(); - verify(mockCanvas.save()).called(1); - }); - - test('test restore', () { - canvasWrapper.restore(); - verify(mockCanvas.restore()).called(1); - }); - - test('test clipRect', () { - canvasWrapper.clipRect(MockData.rect1); - verify(mockCanvas.clipRect(MockData.rect1)).called(1); - }); - - test('test translate', () { - canvasWrapper.translate(11, 232); - verify(mockCanvas.translate(11, 232)).called(1); - }); - - test('test rotate', () { - canvasWrapper.rotate(12); - verify(mockCanvas.rotate(12)).called(1); - }); - - test('test drawPath', () { - canvasWrapper.drawPath(MockData.path1, MockData.paint1); - verify(mockCanvas.drawPath(MockData.path1, MockData.paint1)).called(1); - }); - - test('test saveLayer', () { - canvasWrapper.saveLayer(MockData.rect1, MockData.paint1); - verify(mockCanvas.saveLayer(MockData.rect1, MockData.paint1)).called(1); - }); - - test('test drawPicture', () { - canvasWrapper.drawPicture(MockData.picture1()); - verify(mockCanvas.drawPicture(MockData.picture1())).called(1); - }); - - test('test clipPath', () { - canvasWrapper.clipPath(MockData.path1); - verify(mockCanvas.clipPath(MockData.path1)).called(1); - }); - - test('test drawRect', () { - canvasWrapper.drawRect(MockData.rect1, MockData.paint1); - verify(mockCanvas.drawRect(MockData.rect1, MockData.paint1)).called(1); - }); - - test('test drawLine', () { - canvasWrapper.drawLine(MockData.offset1, MockData.offset2, MockData.paint1); - verify( - mockCanvas.drawLine( - MockData.offset1, - MockData.offset2, - MockData.paint1, - ), - ).called(1); - }); - - test('test drawCircle', () { - canvasWrapper.drawCircle(MockData.offset1, 12, MockData.paint1); - verify(mockCanvas.drawCircle(MockData.offset1, 12, MockData.paint1)) - .called(1); - }); - - test('test drawArc', () { - canvasWrapper.drawArc(MockData.rect1, 12, 22, false, MockData.paint1); - verify(mockCanvas.drawArc(MockData.rect1, 12, 22, false, MockData.paint1)) - .called(1); - }); - - test('test drawDot', () { - final painter = MockFlDotPainter(); - canvasWrapper.drawDot(painter, MockData.lineBarSpot1, MockData.offset1); - verify(painter.draw(mockCanvas, MockData.lineBarSpot1, MockData.offset1)) - .called(1); - }); - - test('test drawRotated', () { - final mockUtils = MockUtils(); - when(mockUtils.radians(any)).thenAnswer((realInvocation) => 12); - Utils.changeInstance(mockUtils); - - var calledCallback = false; - void callback() { - calledCallback = true; - } - - canvasWrapper.drawRotated( - size: const Size(240, 240), - rotationOffset: MockData.offset1, - drawOffset: MockData.offset2, - angle: 12, - drawCallback: callback, - ); - verify(mockCanvas.save()).called(1); - verify(mockCanvas.translate(123, 123)).called(1); - verify(mockCanvas.rotate(12)).called(1); - verify(mockCanvas.translate(-122, -122)).called(1); - expect(calledCallback, true); - verify(mockCanvas.restore()).called(1); - }); -} diff --git a/test/utils/canvas_wrapper_test.mocks.dart b/test/utils/canvas_wrapper_test.mocks.dart deleted file mode 100644 index 48153adb5a..0000000000 --- a/test/utils/canvas_wrapper_test.mocks.dart +++ /dev/null @@ -1,944 +0,0 @@ -// Mocks generated by Mockito 5.4.2 from annotations -// in fl_chart/test/utils/canvas_wrapper_test.dart. -// Do not manually edit this file. - -// ignore_for_file: no_leading_underscores_for_library_prefixes -import 'dart:typed_data' as _i4; -import 'dart:ui' as _i2; - -import 'package:fl_chart/fl_chart.dart' as _i5; -import 'package:fl_chart/src/utils/utils.dart' as _i6; -import 'package:flutter/material.dart' as _i3; -import 'package:mockito/mockito.dart' as _i1; - -// ignore_for_file: type=lint -// ignore_for_file: avoid_redundant_argument_values -// ignore_for_file: avoid_setters_without_getters -// ignore_for_file: comment_references -// ignore_for_file: implementation_imports -// ignore_for_file: invalid_use_of_visible_for_testing_member -// ignore_for_file: prefer_const_constructors -// ignore_for_file: unnecessary_parenthesis -// ignore_for_file: camel_case_types -// ignore_for_file: subtype_of_sealed_class - -class _FakeRect_0 extends _i1.SmartFake implements _i2.Rect { - _FakeRect_0( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); -} - -class _FakeSize_1 extends _i1.SmartFake implements _i2.Size { - _FakeSize_1( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); -} - -class _FakeOffset_2 extends _i1.SmartFake implements _i2.Offset { - _FakeOffset_2( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); -} - -class _FakeBorderSide_3 extends _i1.SmartFake implements _i3.BorderSide { - _FakeBorderSide_3( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); - - @override - String toString({_i3.DiagnosticLevel? minLevel = _i3.DiagnosticLevel.info}) => - super.toString(); -} - -class _FakeTextStyle_4 extends _i1.SmartFake implements _i3.TextStyle { - _FakeTextStyle_4( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); - - @override - String toString({_i3.DiagnosticLevel? minLevel = _i3.DiagnosticLevel.info}) => - super.toString(); -} - -/// A class which mocks [Canvas]. -/// -/// See the documentation for Mockito's code generation for more information. -class MockCanvas extends _i1.Mock implements _i2.Canvas { - MockCanvas() { - _i1.throwOnMissingStub(this); - } - - @override - void save() => super.noSuchMethod( - Invocation.method( - #save, - [], - ), - returnValueForMissingStub: null, - ); - - @override - void saveLayer( - _i2.Rect? bounds, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #saveLayer, - [ - bounds, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void restore() => super.noSuchMethod( - Invocation.method( - #restore, - [], - ), - returnValueForMissingStub: null, - ); - - @override - void restoreToCount(int? count) => super.noSuchMethod( - Invocation.method( - #restoreToCount, - [count], - ), - returnValueForMissingStub: null, - ); - - @override - int getSaveCount() => (super.noSuchMethod( - Invocation.method( - #getSaveCount, - [], - ), - returnValue: 0, - ) as int); - - @override - void translate( - double? dx, - double? dy, - ) => - super.noSuchMethod( - Invocation.method( - #translate, - [ - dx, - dy, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void scale( - double? sx, [ - double? sy, - ]) => - super.noSuchMethod( - Invocation.method( - #scale, - [ - sx, - sy, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void rotate(double? radians) => super.noSuchMethod( - Invocation.method( - #rotate, - [radians], - ), - returnValueForMissingStub: null, - ); - - @override - void skew( - double? sx, - double? sy, - ) => - super.noSuchMethod( - Invocation.method( - #skew, - [ - sx, - sy, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void transform(_i4.Float64List? matrix4) => super.noSuchMethod( - Invocation.method( - #transform, - [matrix4], - ), - returnValueForMissingStub: null, - ); - - @override - _i4.Float64List getTransform() => (super.noSuchMethod( - Invocation.method( - #getTransform, - [], - ), - returnValue: _i4.Float64List(0), - ) as _i4.Float64List); - - @override - void clipRect( - _i2.Rect? rect, { - _i2.ClipOp? clipOp = _i2.ClipOp.intersect, - bool? doAntiAlias = true, - }) => - super.noSuchMethod( - Invocation.method( - #clipRect, - [rect], - { - #clipOp: clipOp, - #doAntiAlias: doAntiAlias, - }, - ), - returnValueForMissingStub: null, - ); - - @override - void clipRRect( - _i2.RRect? rrect, { - bool? doAntiAlias = true, - }) => - super.noSuchMethod( - Invocation.method( - #clipRRect, - [rrect], - {#doAntiAlias: doAntiAlias}, - ), - returnValueForMissingStub: null, - ); - - @override - void clipPath( - _i2.Path? path, { - bool? doAntiAlias = true, - }) => - super.noSuchMethod( - Invocation.method( - #clipPath, - [path], - {#doAntiAlias: doAntiAlias}, - ), - returnValueForMissingStub: null, - ); - - @override - _i2.Rect getLocalClipBounds() => (super.noSuchMethod( - Invocation.method( - #getLocalClipBounds, - [], - ), - returnValue: _FakeRect_0( - this, - Invocation.method( - #getLocalClipBounds, - [], - ), - ), - ) as _i2.Rect); - - @override - _i2.Rect getDestinationClipBounds() => (super.noSuchMethod( - Invocation.method( - #getDestinationClipBounds, - [], - ), - returnValue: _FakeRect_0( - this, - Invocation.method( - #getDestinationClipBounds, - [], - ), - ), - ) as _i2.Rect); - - @override - void drawColor( - _i2.Color? color, - _i2.BlendMode? blendMode, - ) => - super.noSuchMethod( - Invocation.method( - #drawColor, - [ - color, - blendMode, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawLine( - _i2.Offset? p1, - _i2.Offset? p2, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawLine, - [ - p1, - p2, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawPaint(_i2.Paint? paint) => super.noSuchMethod( - Invocation.method( - #drawPaint, - [paint], - ), - returnValueForMissingStub: null, - ); - - @override - void drawRect( - _i2.Rect? rect, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawRect, - [ - rect, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawRRect( - _i2.RRect? rrect, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawRRect, - [ - rrect, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawDRRect( - _i2.RRect? outer, - _i2.RRect? inner, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawDRRect, - [ - outer, - inner, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawOval( - _i2.Rect? rect, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawOval, - [ - rect, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawCircle( - _i2.Offset? c, - double? radius, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawCircle, - [ - c, - radius, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawArc( - _i2.Rect? rect, - double? startAngle, - double? sweepAngle, - bool? useCenter, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawArc, - [ - rect, - startAngle, - sweepAngle, - useCenter, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawPath( - _i2.Path? path, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawPath, - [ - path, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawImage( - _i2.Image? image, - _i2.Offset? offset, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawImage, - [ - image, - offset, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawImageRect( - _i2.Image? image, - _i2.Rect? src, - _i2.Rect? dst, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawImageRect, - [ - image, - src, - dst, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawImageNine( - _i2.Image? image, - _i2.Rect? center, - _i2.Rect? dst, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawImageNine, - [ - image, - center, - dst, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawPicture(_i2.Picture? picture) => super.noSuchMethod( - Invocation.method( - #drawPicture, - [picture], - ), - returnValueForMissingStub: null, - ); - - @override - void drawParagraph( - _i2.Paragraph? paragraph, - _i2.Offset? offset, - ) => - super.noSuchMethod( - Invocation.method( - #drawParagraph, - [ - paragraph, - offset, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawPoints( - _i2.PointMode? pointMode, - List<_i2.Offset>? points, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawPoints, - [ - pointMode, - points, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawRawPoints( - _i2.PointMode? pointMode, - _i4.Float32List? points, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawRawPoints, - [ - pointMode, - points, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawVertices( - _i2.Vertices? vertices, - _i2.BlendMode? blendMode, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawVertices, - [ - vertices, - blendMode, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawAtlas( - _i2.Image? atlas, - List<_i2.RSTransform>? transforms, - List<_i2.Rect>? rects, - List<_i2.Color>? colors, - _i2.BlendMode? blendMode, - _i2.Rect? cullRect, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawAtlas, - [ - atlas, - transforms, - rects, - colors, - blendMode, - cullRect, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawRawAtlas( - _i2.Image? atlas, - _i4.Float32List? rstTransforms, - _i4.Float32List? rects, - _i4.Int32List? colors, - _i2.BlendMode? blendMode, - _i2.Rect? cullRect, - _i2.Paint? paint, - ) => - super.noSuchMethod( - Invocation.method( - #drawRawAtlas, - [ - atlas, - rstTransforms, - rects, - colors, - blendMode, - cullRect, - paint, - ], - ), - returnValueForMissingStub: null, - ); - - @override - void drawShadow( - _i2.Path? path, - _i2.Color? color, - double? elevation, - bool? transparentOccluder, - ) => - super.noSuchMethod( - Invocation.method( - #drawShadow, - [ - path, - color, - elevation, - transparentOccluder, - ], - ), - returnValueForMissingStub: null, - ); -} - -/// A class which mocks [FlDotPainter]. -/// -/// See the documentation for Mockito's code generation for more information. -class MockFlDotPainter extends _i1.Mock implements _i5.FlDotPainter { - MockFlDotPainter() { - _i1.throwOnMissingStub(this); - } - - @override - List get props => (super.noSuchMethod( - Invocation.getter(#props), - returnValue: [], - ) as List); - - @override - void draw( - _i2.Canvas? canvas, - _i5.FlSpot? spot, - _i2.Offset? offsetInCanvas, - ) => - super.noSuchMethod( - Invocation.method( - #draw, - [ - canvas, - spot, - offsetInCanvas, - ], - ), - returnValueForMissingStub: null, - ); - - @override - _i2.Size getSize(_i5.FlSpot? spot) => (super.noSuchMethod( - Invocation.method( - #getSize, - [spot], - ), - returnValue: _FakeSize_1( - this, - Invocation.method( - #getSize, - [spot], - ), - ), - ) as _i2.Size); -} - -/// A class which mocks [Utils]. -/// -/// See the documentation for Mockito's code generation for more information. -class MockUtils extends _i1.Mock implements _i6.Utils { - MockUtils() { - _i1.throwOnMissingStub(this); - } - - @override - double radians(double? degrees) => (super.noSuchMethod( - Invocation.method( - #radians, - [degrees], - ), - returnValue: 0.0, - ) as double); - - @override - double degrees(double? radians) => (super.noSuchMethod( - Invocation.method( - #degrees, - [radians], - ), - returnValue: 0.0, - ) as double); - - @override - _i2.Size getDefaultSize(_i2.Size? screenSize) => (super.noSuchMethod( - Invocation.method( - #getDefaultSize, - [screenSize], - ), - returnValue: _FakeSize_1( - this, - Invocation.method( - #getDefaultSize, - [screenSize], - ), - ), - ) as _i2.Size); - - @override - double translateRotatedPosition( - double? size, - double? degree, - ) => - (super.noSuchMethod( - Invocation.method( - #translateRotatedPosition, - [ - size, - degree, - ], - ), - returnValue: 0.0, - ) as double); - - @override - _i2.Offset calculateRotationOffset( - _i2.Size? size, - double? degree, - ) => - (super.noSuchMethod( - Invocation.method( - #calculateRotationOffset, - [ - size, - degree, - ], - ), - returnValue: _FakeOffset_2( - this, - Invocation.method( - #calculateRotationOffset, - [ - size, - degree, - ], - ), - ), - ) as _i2.Offset); - - @override - _i3.BorderRadius? normalizeBorderRadius( - _i3.BorderRadius? borderRadius, - double? width, - ) => - (super.noSuchMethod(Invocation.method( - #normalizeBorderRadius, - [ - borderRadius, - width, - ], - )) as _i3.BorderRadius?); - - @override - _i3.BorderSide normalizeBorderSide( - _i3.BorderSide? borderSide, - double? width, - ) => - (super.noSuchMethod( - Invocation.method( - #normalizeBorderSide, - [ - borderSide, - width, - ], - ), - returnValue: _FakeBorderSide_3( - this, - Invocation.method( - #normalizeBorderSide, - [ - borderSide, - width, - ], - ), - ), - ) as _i3.BorderSide); - - @override - double getEfficientInterval( - double? axisViewSize, - double? diffInAxis, { - double? pixelPerInterval = 40.0, - }) => - (super.noSuchMethod( - Invocation.method( - #getEfficientInterval, - [ - axisViewSize, - diffInAxis, - ], - {#pixelPerInterval: pixelPerInterval}, - ), - returnValue: 0.0, - ) as double); - - @override - double roundInterval(double? input) => (super.noSuchMethod( - Invocation.method( - #roundInterval, - [input], - ), - returnValue: 0.0, - ) as double); - - @override - int getFractionDigits(double? value) => (super.noSuchMethod( - Invocation.method( - #getFractionDigits, - [value], - ), - returnValue: 0, - ) as int); - - @override - String formatNumber( - double? axisMin, - double? axisMax, - double? axisValue, - ) => - (super.noSuchMethod( - Invocation.method( - #formatNumber, - [ - axisMin, - axisMax, - axisValue, - ], - ), - returnValue: '', - ) as String); - - @override - _i3.TextStyle getThemeAwareTextStyle( - _i3.BuildContext? context, - _i3.TextStyle? providedStyle, - ) => - (super.noSuchMethod( - Invocation.method( - #getThemeAwareTextStyle, - [ - context, - providedStyle, - ], - ), - returnValue: _FakeTextStyle_4( - this, - Invocation.method( - #getThemeAwareTextStyle, - [ - context, - providedStyle, - ], - ), - ), - ) as _i3.TextStyle); - - @override - double getBestInitialIntervalValue( - double? min, - double? max, - double? interval, { - double? baseline = 0.0, - }) => - (super.noSuchMethod( - Invocation.method( - #getBestInitialIntervalValue, - [ - min, - max, - interval, - ], - {#baseline: baseline}, - ), - returnValue: 0.0, - ) as double); - - @override - double convertRadiusToSigma(double? radius) => (super.noSuchMethod( - Invocation.method( - #convertRadiusToSigma, - [radius], - ), - returnValue: 0.0, - ) as double); -} diff --git a/test/utils/lerp_test.dart b/test/utils/lerp_test.dart deleted file mode 100644 index 59eb947ff9..0000000000 --- a/test/utils/lerp_test.dart +++ /dev/null @@ -1,383 +0,0 @@ -import 'dart:ui'; - -import 'package:fl_chart/fl_chart.dart'; -import 'package:fl_chart/src/utils/lerp.dart'; -import 'package:flutter_test/flutter_test.dart'; - -import '../chart/data_pool.dart'; - -void main() { - const tolerance = 0.001; - - test('test lerpList', () { - final list1 = [1, 1, 2]; - final list2 = [1, 2, 3, 5]; - expect(lerpList(list1, list2, 0, lerp: lerpDouble), [1.0, 1.0, 2.0, 5.0]); - expect(lerpList(list1, list2, 0.5, lerp: lerpDouble), [1.0, 1.5, 2.5, 5.0]); - expect(lerpList(list1, list1, 0.5, lerp: lerpDouble), list1); - }); - - test('test lerpColorList', () { - const list1 = [ - MockData.color1, - MockData.color1, - MockData.color2, - ]; - const list2 = [ - MockData.color1, - MockData.color2, - MockData.color3, - MockData.color5, - ]; - expect(lerpColorList(list1, list2, 0), const [ - MockData.color1, - MockData.color1, - MockData.color2, - MockData.color5, - ]); - expect(lerpColorList(list1, list2, 1), list2); - expect(lerpColorList(list1, list2, 0.5), const [ - MockData.color1, - Color(0x19191919), - Color(0x2a2a2a2a), - MockData.color5, - ]); - }); - - test('test lerpColor', () { - expect(lerpColor(MockData.color1, MockData.color1, 0.5), MockData.color1); - expect(lerpColor(MockData.color1, MockData.color1, 0), MockData.color1); - expect(lerpColor(MockData.color1, MockData.color1, 1), MockData.color1); - - expect(lerpColor(MockData.color1, MockData.color2, 0), MockData.color1); - expect( - lerpColor(MockData.color1, MockData.color2, 0.3), - const Color(0x16161616), - ); - expect(lerpColor(MockData.color1, MockData.color2, 1), MockData.color2); - }); - - test('test lerpDoubleAllowInfinity', () { - expect(lerpDoubleAllowInfinity(12, 12, 0), 12); - expect(lerpDoubleAllowInfinity(12, 12, 0.2), 12); - expect(lerpDoubleAllowInfinity(12, 12, 0.5), 12); - expect(lerpDoubleAllowInfinity(12, 12, 1), 12); - - expect(lerpDoubleAllowInfinity(12, double.infinity, 1), double.infinity); - expect(lerpDoubleAllowInfinity(12, double.infinity, 0), double.infinity); - expect(lerpDoubleAllowInfinity(12, double.infinity, 0.4), double.infinity); - - expect(lerpDoubleAllowInfinity(double.infinity, 12, 1), 12); - expect(lerpDoubleAllowInfinity(double.infinity, 12, 0), 12); - expect(lerpDoubleAllowInfinity(double.infinity, 12, 0.4), 12); - - expect(lerpDoubleAllowInfinity(0, 10, 0.4), 4); - expect(lerpDoubleAllowInfinity(0, 10, 0.2), 2); - expect(lerpDoubleAllowInfinity(0, 10, 0.8), 8); - }); - - test('test lerpDoubleList', () { - const list1 = [ - 0, - 0, - 0, - ]; - const list2 = [ - 10, - 100, - 1000, - 10000, - ]; - expect(lerpDoubleList(list1, list2, 0), const [ - 0, - 0, - 0, - 10000, - ]); - expect(lerpDoubleList(list1, list2, 0.5), [ - 5, - 50, - 500, - 10000, - ]); - expect(lerpDoubleList(list1, list2, 1), list2); - }); - - test('test lerpIntList', () { - const list1 = [ - 0, - 0, - 0, - ]; - const list2 = [ - 10, - 100, - 1000, - 10000, - ]; - expect(lerpIntList(list1, list2, 0), const [ - 0, - 0, - 0, - 10000, - ]); - expect(lerpIntList(list1, list2, 0.5), [ - 5, - 50, - 500, - 10000, - ]); - expect(lerpIntList(list1, list2, 1), list2); - }); - - test('test lerpInt', () { - expect(lerpInt(0, 10, 1), 10); - expect(lerpInt(0, 10, 0.34), 3); - expect(lerpInt(0, 10, 0.38), 4); - }); - - test('test lerpNonNullDouble', () { - expect(lerpNonNullDouble(0, 10, 1), 10); - expect(lerpNonNullDouble(0, 10, 0.34), closeTo(3.4, tolerance)); - expect(lerpNonNullDouble(0, 10, 0.38), closeTo(3.8, tolerance)); - }); - - test('test lerpFlSpotList', () { - final list1 = [ - MockData.flSpot0, - MockData.flSpot0, - MockData.flSpot0, - ]; - final list2 = [ - MockData.flSpot1, - MockData.flSpot2, - MockData.flSpot3, - MockData.flSpot4, - ]; - expect(lerpFlSpotList(list1, list2, 0), [ - MockData.flSpot0, - MockData.flSpot0, - MockData.flSpot0, - MockData.flSpot4, - ]); - expect(lerpFlSpotList(list1, list2, 0.5), [ - const FlSpot(0.5, 0.5), - MockData.flSpot1, - const FlSpot(1.5, 1.5), - MockData.flSpot4, - ]); - expect(lerpFlSpotList(list1, list2, 1), list2); - }); - - test('test lerpHorizontalLineList', () { - final list1 = [ - MockData.horizontalLine0, - MockData.horizontalLine0, - MockData.horizontalLine0, - ]; - final list2 = [ - MockData.horizontalLine1, - MockData.horizontalLine2, - MockData.horizontalLine3, - MockData.horizontalLine4, - ]; - expect(lerpHorizontalLineList(list1, list2, 0), [ - MockData.horizontalLine0, - MockData.horizontalLine0, - MockData.horizontalLine0, - MockData.horizontalLine4, - ]); - expect(lerpHorizontalLineList(list1, list2, 0.5), [ - HorizontalLine(y: 0.5, color: const Color(0x08080808)), - MockData.horizontalLine1, - HorizontalLine(y: 1.5, color: const Color(0x19191919)), - MockData.horizontalLine4, - ]); - expect(lerpHorizontalLineList(list1, list2, 1), list2); - }); - - test('test lerpVerticalLineList', () { - final list1 = [ - MockData.verticalLine0, - MockData.verticalLine0, - MockData.verticalLine0, - ]; - final list2 = [ - MockData.verticalLine1, - MockData.verticalLine2, - MockData.verticalLine3, - MockData.verticalLine4, - ]; - expect(lerpVerticalLineList(list1, list2, 0), [ - MockData.verticalLine0, - MockData.verticalLine0, - MockData.verticalLine0, - MockData.verticalLine4, - ]); - expect(lerpVerticalLineList(list1, list2, 0.5), [ - VerticalLine(x: 0.5, color: const Color(0x08080808)), - MockData.verticalLine1, - VerticalLine(x: 1.5, color: const Color(0x19191919)), - MockData.verticalLine4, - ]); - expect(lerpVerticalLineList(list1, list2, 1), list2); - }); - - test('test lerpHorizontalRangeAnnotationList', () { - final list1 = [ - MockData.horizontalRangeAnnotation0, - MockData.horizontalRangeAnnotation0, - MockData.horizontalRangeAnnotation0, - ]; - final list2 = [ - MockData.horizontalRangeAnnotation1, - MockData.horizontalRangeAnnotation2, - MockData.horizontalRangeAnnotation3, - MockData.horizontalRangeAnnotation4, - ]; - expect(lerpHorizontalRangeAnnotationList(list1, list2, 0), [ - MockData.horizontalRangeAnnotation0, - MockData.horizontalRangeAnnotation0, - MockData.horizontalRangeAnnotation0, - MockData.horizontalRangeAnnotation4, - ]); - expect(lerpHorizontalRangeAnnotationList(list1, list2, 0.5), [ - HorizontalRangeAnnotation( - y1: 0.5, - y2: 1.5, - color: const Color(0x08080808), - ), - MockData.horizontalRangeAnnotation1, - HorizontalRangeAnnotation( - y1: 1.5, - y2: 2.5, - color: const Color(0x19191919), - ), - MockData.horizontalRangeAnnotation4, - ]); - expect(lerpHorizontalRangeAnnotationList(list1, list2, 1), list2); - }); - - test('test lerpVerticalRangeAnnotationList', () { - final list1 = [ - MockData.verticalRangeAnnotation0, - MockData.verticalRangeAnnotation0, - MockData.verticalRangeAnnotation0, - ]; - final list2 = [ - MockData.verticalRangeAnnotation1, - MockData.verticalRangeAnnotation2, - MockData.verticalRangeAnnotation3, - MockData.verticalRangeAnnotation4, - ]; - expect(lerpVerticalRangeAnnotationList(list1, list2, 0), [ - MockData.verticalRangeAnnotation0, - MockData.verticalRangeAnnotation0, - MockData.verticalRangeAnnotation0, - MockData.verticalRangeAnnotation4, - ]); - expect(lerpVerticalRangeAnnotationList(list1, list2, 0.5), [ - VerticalRangeAnnotation(x1: 0.5, x2: 1.5, color: const Color(0x08080808)), - MockData.verticalRangeAnnotation1, - VerticalRangeAnnotation(x1: 1.5, x2: 2.5, color: const Color(0x19191919)), - MockData.verticalRangeAnnotation4, - ]); - expect(lerpVerticalRangeAnnotationList(list1, list2, 1), list2); - }); - - test('test lerpBetweenBarsDataList', () { - final list1 = [ - MockData.verticalRangeAnnotation0, - MockData.verticalRangeAnnotation0, - MockData.verticalRangeAnnotation0, - ]; - final list2 = [ - MockData.verticalRangeAnnotation1, - MockData.verticalRangeAnnotation2, - MockData.verticalRangeAnnotation3, - MockData.verticalRangeAnnotation4, - ]; - expect(lerpVerticalRangeAnnotationList(list1, list2, 0), [ - MockData.verticalRangeAnnotation0, - MockData.verticalRangeAnnotation0, - MockData.verticalRangeAnnotation0, - MockData.verticalRangeAnnotation4, - ]); - expect(lerpVerticalRangeAnnotationList(list1, list2, 0.5), [ - VerticalRangeAnnotation(x1: 0.5, x2: 1.5, color: const Color(0x08080808)), - MockData.verticalRangeAnnotation1, - VerticalRangeAnnotation(x1: 1.5, x2: 2.5, color: const Color(0x19191919)), - MockData.verticalRangeAnnotation4, - ]); - expect(lerpVerticalRangeAnnotationList(list1, list2, 1), list2); - }); - - test('test lerpRadarEntryList', () { - final list1 = [ - MockData.radarEntry0, - MockData.radarEntry0, - MockData.radarEntry0, - ]; - final list2 = [ - MockData.radarEntry1, - MockData.radarEntry2, - MockData.radarEntry3, - MockData.radarEntry4, - ]; - expect(lerpRadarEntryList(list1, list2, 0), [ - MockData.radarEntry0, - MockData.radarEntry0, - MockData.radarEntry0, - MockData.radarEntry4, - ]); - expect(lerpRadarEntryList(list1, list2, 0.5), [ - const RadarEntry(value: 0.5), - MockData.radarEntry1, - const RadarEntry(value: 1.5), - MockData.radarEntry4, - ]); - expect(lerpRadarEntryList(list1, list2, 1), list2); - }); - - test('test lerpScatterSpotList', () { - final list1 = [ - MockData.scatterSpot0, - MockData.scatterSpot0, - MockData.scatterSpot0, - ]; - final list2 = [ - MockData.scatterSpot1, - MockData.scatterSpot2, - MockData.scatterSpot3, - MockData.scatterSpot4, - ]; - expect(lerpScatterSpotList(list1, list2, 0), [ - MockData.scatterSpot0, - MockData.scatterSpot0, - MockData.scatterSpot0, - MockData.scatterSpot4, - ]); - expect(lerpScatterSpotList(list1, list2, 0.5), [ - ScatterSpot(0.5, 0.5, color: const Color(0x08080808)), - MockData.scatterSpot1, - ScatterSpot(1.5, 1.5, color: const Color(0x19191919)), - MockData.scatterSpot4, - ]); - expect(lerpScatterSpotList(list1, list2, 1), list2); - }); - - test('test lerpGradient', () { - final colors = [ - MockData.color0, - MockData.color1, - MockData.color2, - MockData.color3, - ]; - expect(lerpGradient(colors, [], 0), const Color(0x00000000)); - expect(lerpGradient(colors, [], 0.2), const Color(0x00000000)); - expect(lerpGradient(colors, [], 0.4), const Color(0x0a0a0a0a)); - expect(lerpGradient(colors, [], 0.6), const Color(0x17171717)); - expect(lerpGradient(colors, [], 0.8), const Color(0x25252525)); - expect(lerpGradient(colors, [], 1), const Color(0x33333333)); - }); -} diff --git a/test/utils/list_wrapper_test.dart b/test/utils/list_wrapper_test.dart deleted file mode 100644 index 9f61fd6bd0..0000000000 --- a/test/utils/list_wrapper_test.dart +++ /dev/null @@ -1,18 +0,0 @@ -import 'package:fl_chart/src/utils/list_wrapper.dart'; -import 'package:flutter_test/flutter_test.dart'; - -void main() { - test('test ListWrapper equality check', () { - final wrapper1 = ['test1', 'test2'].toWrapperClass(); - final wrapper2 = ['test1', 'test2'].toWrapperClass(); - expect(wrapper1, wrapper2); - }); - - test('test ListWrapper equality check', () { - final wrapper1 = ['test1', 'test2'].toWrapperClass(); - final wrapper2 = ['test1', 'test2'].toWrapperClass(); - final myMap = , int>{}; - myMap[wrapper1] = 11; - expect(myMap.containsKey(wrapper2), true); - }); -} diff --git a/test/utils/utils_test.dart b/test/utils/utils_test.dart deleted file mode 100644 index 85d9e750cb..0000000000 --- a/test/utils/utils_test.dart +++ /dev/null @@ -1,389 +0,0 @@ -import 'package:fl_chart/src/utils/lerp.dart'; -import 'package:fl_chart/src/utils/utils.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_test/flutter_test.dart'; -import 'package:mockito/annotations.dart'; - -import '../chart/data_pool.dart'; -import 'utils_test.mocks.dart'; - -@GenerateMocks([Utils, BuildContext]) -void main() { - const tolerance = 0.001; - - test('changeInstance', () { - final Utils mockUtils = MockUtils(); - final realUtils = Utils(); - expect(Utils(), realUtils); - Utils.changeInstance(mockUtils); - expect(Utils(), mockUtils); - expect(Utils() != realUtils, true); - Utils.changeInstance(realUtils); - expect(Utils(), realUtils); - expect(Utils() != mockUtils, true); - }); - - test('test degrees to radians', () { - expect(Utils().radians(57.2958), closeTo(1, tolerance)); - expect(Utils().radians(120), closeTo(2.0944, tolerance)); - expect(Utils().radians(324), closeTo(5.65487, tolerance)); - expect(Utils().radians(180), closeTo(3.1415, tolerance)); - }); - - test('test radians to degree', () { - expect(Utils().degrees(1.5), closeTo(85.9437, tolerance)); - expect(Utils().degrees(1.8), closeTo(103.132, tolerance)); - expect(Utils().degrees(1.2), closeTo(68.7549, tolerance)); - }); - - test('test default size', () { - expect( - Utils().getDefaultSize(const Size(1080, 1920)).width, - closeTo(756, tolerance), - ); - expect( - Utils().getDefaultSize(const Size(1080, 1920)).height, - closeTo(756, tolerance), - ); - - expect( - Utils().getDefaultSize(const Size(728, 1080)).width, - closeTo(509.6, tolerance), - ); - expect( - Utils().getDefaultSize(const Size(728, 1080)).height, - closeTo(509.6, tolerance), - ); - - expect( - Utils().getDefaultSize(const Size(2560, 1600)).width, - closeTo(1120, tolerance), - ); - expect( - Utils().getDefaultSize(const Size(2560, 1600)).height, - closeTo(1120, tolerance), - ); - - expect( - Utils().getDefaultSize(const Size(1000, 1000)).width, - closeTo(700, tolerance), - ); - }); - - test('translate rotated position', () { - expect(Utils().translateRotatedPosition(100, 90), 25); - expect(Utils().translateRotatedPosition(100, 0), 0); - }); - - test('calculateRotationOffset()', () { - expect(Utils().calculateRotationOffset(MockData.size1, 90), Offset.zero); - expect( - Utils().calculateRotationOffset(MockData.size1, 45).dx, - closeTo(-2.278, tolerance), - ); - expect( - Utils().calculateRotationOffset(MockData.size1, 45).dy, - closeTo(-2.278, tolerance), - ); - - expect( - Utils().calculateRotationOffset(MockData.size1, 180).dx, - closeTo(0.0, tolerance), - ); - expect( - Utils().calculateRotationOffset(MockData.size1, 180).dy, - closeTo(0.0, tolerance), - ); - - expect( - Utils().calculateRotationOffset(MockData.size1, 220).dx, - closeTo(-2.2485, tolerance), - ); - expect( - Utils().calculateRotationOffset(MockData.size1, 220).dy, - closeTo(-2.2485, tolerance), - ); - - expect( - Utils().calculateRotationOffset(MockData.size1, 350).dx, - closeTo(-0.87150, tolerance), - ); - expect( - Utils().calculateRotationOffset(MockData.size1, 350).dy, - closeTo(-0.87150, tolerance), - ); - }); - - test('normalizeBorderRadius()', () { - const input1 = BorderRadius.only( - topLeft: Radius.circular(18), - topRight: Radius.circular(18), - bottomRight: Radius.circular(18), - bottomLeft: Radius.circular(18), - ); - const output1 = input1; - expect(Utils().normalizeBorderRadius(input1, 40), output1); - - const input2 = BorderRadius.only( - topLeft: Radius.circular(24), - topRight: Radius.circular(24), - bottomRight: Radius.circular(24), - bottomLeft: Radius.circular(24), - ); - const output2 = BorderRadius.only( - topLeft: Radius.circular(20), - topRight: Radius.circular(20), - bottomRight: Radius.circular(20), - bottomLeft: Radius.circular(20), - ); - expect(Utils().normalizeBorderRadius(input2, 40), output2); - }); - - test('normalizeBorderSide()', () { - const input1 = BorderSide(width: 4); - const output1 = input1; - expect(Utils().normalizeBorderSide(input1, 40), output1); - - const input2 = BorderSide(width: 24); - const output2 = BorderSide(width: 20); - expect(Utils().normalizeBorderSide(input2, 40), output2); - }); - - test('lerp gradient', () { - expect( - lerpGradient( - [ - Colors.red, - Colors.green, - ], - [], - 0, - ), - Colors.red, - ); - - expect( - lerpGradient( - [ - Colors.red, - Colors.green, - ], - [], - 1, - ), - Colors.green, - ); - }); - - test('test roundInterval', () { - expect(Utils().roundInterval(99), 100); - expect(Utils().roundInterval(75), 50); - expect(Utils().roundInterval(76), 100); - expect(Utils().roundInterval(60), 50); - expect(Utils().roundInterval(0.000123), 0.0001); - expect(Utils().roundInterval(0.000190), 0.0002); - expect(Utils().roundInterval(0.000200), 0.0002); - expect(Utils().roundInterval(0.000390000000), 0.0005); - expect(Utils().roundInterval(0.000990000000), 0.001); - expect(Utils().roundInterval(0.00000990000), 0.00001000); - expect(Utils().roundInterval(0.0000009), 0.0000009); - expect( - Utils().roundInterval(0.000000000000000000990000000), - 0.000000000000000000990000000, - ); - expect(Utils().roundInterval(0.000004901960784313726), 0.000005); - }); - - test('test Utils().getEfficientInterval', () { - expect(Utils().getEfficientInterval(472, 340, pixelPerInterval: 10), 5); - expect(Utils().getEfficientInterval(820, 10000, pixelPerInterval: 10), 100); - expect( - Utils().getEfficientInterval(1024, 412345234, pixelPerInterval: 10), - 5000000, - ); - expect( - Utils().getEfficientInterval(720, 812394712349, pixelPerInterval: 10), - 10000000000, - ); - expect( - Utils().getEfficientInterval(1024, 0.01, pixelPerInterval: 100), - 0.001, - ); - expect( - Utils().getEfficientInterval(1024, 0.0005, pixelPerInterval: 10), - 0.000005, - ); - expect(Utils().getEfficientInterval(200, 0.5, pixelPerInterval: 20), 0.05); - expect(Utils().getEfficientInterval(200, 1, pixelPerInterval: 20), 0.1); - expect(Utils().getEfficientInterval(100, 0.5, pixelPerInterval: 20), 0.1); - expect(Utils().getEfficientInterval(10, 10), 10); - expect(Utils().getEfficientInterval(10, 0), 1); - }); - - test('test getFractionDigits', () { - expect(Utils().getFractionDigits(1), 1); - expect(Utils().getFractionDigits(343), 1); - expect(Utils().getFractionDigits(22), 1); - expect(Utils().getFractionDigits(444444), 1); - expect(Utils().getFractionDigits(0.9), 2); - expect(Utils().getFractionDigits(0.1), 2); - expect(Utils().getFractionDigits(0.01), 3); - expect(Utils().getFractionDigits(0.001), 4); - expect(Utils().getFractionDigits(0.009), 4); - expect(Utils().getFractionDigits(0.008), 4); - expect(Utils().getFractionDigits(0.0001), 5); - expect(Utils().getFractionDigits(0.0009), 5); - expect(Utils().getFractionDigits(0.00001), 6); - expect(Utils().getFractionDigits(0.000001), 7); - expect(Utils().getFractionDigits(0.0000001), 8); - expect(Utils().getFractionDigits(0.00000001), 9); - }); - - test('test formatNumber', () { - expect(Utils().formatNumber(0, 10, 0), '0'); - expect(Utils().formatNumber(0, 10, -0), '0'); - expect(Utils().formatNumber(0, 10, -0.01), '0'); - expect(Utils().formatNumber(0, 10, 0.01), '0'); - expect(Utils().formatNumber(0, 10, -0.1), '-0.1'); - expect(Utils().formatNumber(0, 10, 423), '423'); - expect(Utils().formatNumber(0, 10, -423), '-423'); - expect(Utils().formatNumber(0, 10, 1000), '1K'); - expect(Utils().formatNumber(0, 10, 1234), '1.2K'); - expect(Utils().formatNumber(0, 10, 10000), '10K'); - expect(Utils().formatNumber(0, 10, 41234), '41.2K'); - expect(Utils().formatNumber(0, 10, 82349), '82.3K'); - expect(Utils().formatNumber(0, 10, 82350), '82.3K'); - expect(Utils().formatNumber(0, 10, 82351), '82.4K'); - expect(Utils().formatNumber(0, 10, -82351), '-82.4K'); - expect(Utils().formatNumber(0, 10, 100000), '100K'); - expect(Utils().formatNumber(0, 10, 101000), '101K'); - expect(Utils().formatNumber(0, 10, 2345123), '2.3M'); - expect(Utils().formatNumber(0, 10, 2352123), '2.4M'); - expect(Utils().formatNumber(0, 10, -2352123), '-2.4M'); - expect(Utils().formatNumber(0, 10, 521000000), '521M'); - expect(Utils().formatNumber(0, 10, 4324512345), '4.3B'); - expect(Utils().formatNumber(0, 10, 4000000000), '4B'); - expect(Utils().formatNumber(0, 10, -4000000000), '-4B'); - expect(Utils().formatNumber(0, 10, 823147521343), '823.1B'); - expect(Utils().formatNumber(0, 10, 8231475213435), '8231.5B'); - expect(Utils().formatNumber(0, 10, -8231475213435), '-8231.5B'); - }); - - group('test getThemeAwareTextStyle', () { - testWidgets('test 1', (WidgetTester tester) async { - const style = TextStyle(color: Colors.brown); - await tester.pumpWidget( - MaterialApp( - home: Scaffold( - body: DefaultTextStyle( - style: style, - child: Container(), - ), - ), - ), - ); - await tester.pumpAndSettle(); - final context = tester.element(find.byType(Container)); - - expect( - Utils().getThemeAwareTextStyle(context, style), - style, - ); - }); - - testWidgets('test 2', (WidgetTester tester) async { - await tester.pumpWidget( - MaterialApp( - home: Scaffold( - body: MediaQuery( - data: const MediaQueryData(boldText: true), - child: Container(), - ), - ), - ), - ); - await tester.pumpAndSettle(); - final context = tester.element(find.byType(Container)); - - expect( - Utils() - .getThemeAwareTextStyle( - context, - MockData.textStyle1, - ) - .fontWeight, - FontWeight.bold, - ); - }); - }); - - test('test getInitialIntervalValue()', () { - expect(Utils().getBestInitialIntervalValue(-3, 3, 2), -2); - expect(Utils().getBestInitialIntervalValue(-3, 3, 1), -3); - expect(Utils().getBestInitialIntervalValue(-30, -20, 13), -26); - expect(Utils().getBestInitialIntervalValue(0, 13, 8), 0); - expect(Utils().getBestInitialIntervalValue(1, 13, 7), 7); - expect(Utils().getBestInitialIntervalValue(1, 13, 3), 3); - expect(Utils().getBestInitialIntervalValue(-1, 13, 3), 0); - expect(Utils().getBestInitialIntervalValue(-2, 13, 3), 0); - expect(Utils().getBestInitialIntervalValue(-3, 13, 3), -3); - expect(Utils().getBestInitialIntervalValue(-4, 13, 3), -3); - expect(Utils().getBestInitialIntervalValue(-5, 13, 3), -3); - expect(Utils().getBestInitialIntervalValue(-6, 13, 3), -6); - expect(Utils().getBestInitialIntervalValue(-6.5, 13, 3), -6); - expect(Utils().getBestInitialIntervalValue(-1, 1, 2), 0); - expect(Utils().getBestInitialIntervalValue(-1, 2, 2), 0); - expect(Utils().getBestInitialIntervalValue(-2, 0, 2), -2); - expect(Utils().getBestInitialIntervalValue(-3, 0, 2), -2); - expect(Utils().getBestInitialIntervalValue(-4, 0, 2), -4); - expect(Utils().getBestInitialIntervalValue(-0.5, 0.5, 2), 0); - expect(Utils().getBestInitialIntervalValue(35, 130, 50), 50); - expect(Utils().getBestInitialIntervalValue(49, 130, 50), 50); - expect(Utils().getBestInitialIntervalValue(50, 130, 50), 50); - expect(Utils().getBestInitialIntervalValue(60, 130, 50), 100); - expect(Utils().getBestInitialIntervalValue(110, 130, 50), 110); - expect(Utils().getBestInitialIntervalValue(90, 180, 50), 100); - expect(Utils().getBestInitialIntervalValue(100, 180, 50), 100); - expect(Utils().getBestInitialIntervalValue(110, 180, 50), 150); - expect(Utils().getBestInitialIntervalValue(170, 180, 50), 170); - expect(Utils().getBestInitialIntervalValue(-120, -10, 50), -100); - expect(Utils().getBestInitialIntervalValue(-110, -10, 50), -100); - expect(Utils().getBestInitialIntervalValue(-100, -10, 50), -100); - expect(Utils().getBestInitialIntervalValue(-90, -10, 50), -50); - expect(Utils().getBestInitialIntervalValue(-80, -10, 50), -50); - expect(Utils().getBestInitialIntervalValue(-150, -10, 50), -150); - expect(Utils().getBestInitialIntervalValue(-10, 10, 2, baseline: -1), -9); - expect(Utils().getBestInitialIntervalValue(-10, 10, 2, baseline: -20), -10); - expect(Utils().getBestInitialIntervalValue(-10, 10, 15, baseline: -30), 0); - expect(Utils().getBestInitialIntervalValue(0, 20, 8, baseline: 28), 4); - expect(Utils().getBestInitialIntervalValue(130, 140, 50), 130); - expect(Utils().getBestInitialIntervalValue(145, 155, 50), 150); - expect( - Utils().getBestInitialIntervalValue(-200, -180, 30), - -200, - ); - expect( - Utils().getBestInitialIntervalValue(-190, -170, 30), - -180, - ); - expect( - Utils().getBestInitialIntervalValue(-2000, 2000, 100, baseline: -10000), - -2000, - ); - expect( - Utils().getBestInitialIntervalValue(-120, 120, 33, baseline: -200), - -101, - ); - expect( - Utils().getBestInitialIntervalValue(120, 180, 60, baseline: 2000), - 140, - ); - expect(Utils().getBestInitialIntervalValue(-10, 10, 4, baseline: 3), -9); - }); - - test('test convertRadiusToSigma()', () { - expect(Utils().convertRadiusToSigma(10), closeTo(6.2735, tolerance)); - expect(Utils().convertRadiusToSigma(42), closeTo(24.7487, tolerance)); - expect(Utils().convertRadiusToSigma(26), closeTo(15.5111, tolerance)); - }); -} diff --git a/test/utils/utils_test.mocks.dart b/test/utils/utils_test.mocks.dart deleted file mode 100644 index 952e998a82..0000000000 --- a/test/utils/utils_test.mocks.dart +++ /dev/null @@ -1,496 +0,0 @@ -// Mocks generated by Mockito 5.4.2 from annotations -// in fl_chart/test/utils/utils_test.dart. -// Do not manually edit this file. - -// ignore_for_file: no_leading_underscores_for_library_prefixes -import 'dart:ui' as _i2; - -import 'package:fl_chart/src/utils/utils.dart' as _i5; -import 'package:flutter/foundation.dart' as _i4; -import 'package:flutter/material.dart' as _i3; -import 'package:mockito/mockito.dart' as _i1; - -// ignore_for_file: type=lint -// ignore_for_file: avoid_redundant_argument_values -// ignore_for_file: avoid_setters_without_getters -// ignore_for_file: comment_references -// ignore_for_file: implementation_imports -// ignore_for_file: invalid_use_of_visible_for_testing_member -// ignore_for_file: prefer_const_constructors -// ignore_for_file: unnecessary_parenthesis -// ignore_for_file: camel_case_types -// ignore_for_file: subtype_of_sealed_class - -class _FakeSize_0 extends _i1.SmartFake implements _i2.Size { - _FakeSize_0( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); -} - -class _FakeOffset_1 extends _i1.SmartFake implements _i2.Offset { - _FakeOffset_1( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); -} - -class _FakeBorderSide_2 extends _i1.SmartFake implements _i3.BorderSide { - _FakeBorderSide_2( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); - - @override - String toString({_i3.DiagnosticLevel? minLevel = _i3.DiagnosticLevel.info}) => - super.toString(); -} - -class _FakeTextStyle_3 extends _i1.SmartFake implements _i3.TextStyle { - _FakeTextStyle_3( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); - - @override - String toString({_i3.DiagnosticLevel? minLevel = _i3.DiagnosticLevel.info}) => - super.toString(); -} - -class _FakeWidget_4 extends _i1.SmartFake implements _i3.Widget { - _FakeWidget_4( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); - - @override - String toString({_i3.DiagnosticLevel? minLevel = _i3.DiagnosticLevel.info}) => - super.toString(); -} - -class _FakeInheritedWidget_5 extends _i1.SmartFake - implements _i3.InheritedWidget { - _FakeInheritedWidget_5( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); - - @override - String toString({_i3.DiagnosticLevel? minLevel = _i3.DiagnosticLevel.info}) => - super.toString(); -} - -class _FakeDiagnosticsNode_6 extends _i1.SmartFake - implements _i3.DiagnosticsNode { - _FakeDiagnosticsNode_6( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); - - @override - String toString({ - _i4.TextTreeConfiguration? parentConfiguration, - _i3.DiagnosticLevel? minLevel = _i3.DiagnosticLevel.info, - }) => - super.toString(); -} - -/// A class which mocks [Utils]. -/// -/// See the documentation for Mockito's code generation for more information. -class MockUtils extends _i1.Mock implements _i5.Utils { - MockUtils() { - _i1.throwOnMissingStub(this); - } - - @override - double radians(double? degrees) => (super.noSuchMethod( - Invocation.method( - #radians, - [degrees], - ), - returnValue: 0.0, - ) as double); - - @override - double degrees(double? radians) => (super.noSuchMethod( - Invocation.method( - #degrees, - [radians], - ), - returnValue: 0.0, - ) as double); - - @override - _i2.Size getDefaultSize(_i2.Size? screenSize) => (super.noSuchMethod( - Invocation.method( - #getDefaultSize, - [screenSize], - ), - returnValue: _FakeSize_0( - this, - Invocation.method( - #getDefaultSize, - [screenSize], - ), - ), - ) as _i2.Size); - - @override - double translateRotatedPosition( - double? size, - double? degree, - ) => - (super.noSuchMethod( - Invocation.method( - #translateRotatedPosition, - [ - size, - degree, - ], - ), - returnValue: 0.0, - ) as double); - - @override - _i2.Offset calculateRotationOffset( - _i2.Size? size, - double? degree, - ) => - (super.noSuchMethod( - Invocation.method( - #calculateRotationOffset, - [ - size, - degree, - ], - ), - returnValue: _FakeOffset_1( - this, - Invocation.method( - #calculateRotationOffset, - [ - size, - degree, - ], - ), - ), - ) as _i2.Offset); - - @override - _i3.BorderRadius? normalizeBorderRadius( - _i3.BorderRadius? borderRadius, - double? width, - ) => - (super.noSuchMethod(Invocation.method( - #normalizeBorderRadius, - [ - borderRadius, - width, - ], - )) as _i3.BorderRadius?); - - @override - _i3.BorderSide normalizeBorderSide( - _i3.BorderSide? borderSide, - double? width, - ) => - (super.noSuchMethod( - Invocation.method( - #normalizeBorderSide, - [ - borderSide, - width, - ], - ), - returnValue: _FakeBorderSide_2( - this, - Invocation.method( - #normalizeBorderSide, - [ - borderSide, - width, - ], - ), - ), - ) as _i3.BorderSide); - - @override - double getEfficientInterval( - double? axisViewSize, - double? diffInAxis, { - double? pixelPerInterval = 40.0, - }) => - (super.noSuchMethod( - Invocation.method( - #getEfficientInterval, - [ - axisViewSize, - diffInAxis, - ], - {#pixelPerInterval: pixelPerInterval}, - ), - returnValue: 0.0, - ) as double); - - @override - double roundInterval(double? input) => (super.noSuchMethod( - Invocation.method( - #roundInterval, - [input], - ), - returnValue: 0.0, - ) as double); - - @override - int getFractionDigits(double? value) => (super.noSuchMethod( - Invocation.method( - #getFractionDigits, - [value], - ), - returnValue: 0, - ) as int); - - @override - String formatNumber( - double? axisMin, - double? axisMax, - double? axisValue, - ) => - (super.noSuchMethod( - Invocation.method( - #formatNumber, - [ - axisMin, - axisMax, - axisValue, - ], - ), - returnValue: '', - ) as String); - - @override - _i3.TextStyle getThemeAwareTextStyle( - _i3.BuildContext? context, - _i3.TextStyle? providedStyle, - ) => - (super.noSuchMethod( - Invocation.method( - #getThemeAwareTextStyle, - [ - context, - providedStyle, - ], - ), - returnValue: _FakeTextStyle_3( - this, - Invocation.method( - #getThemeAwareTextStyle, - [ - context, - providedStyle, - ], - ), - ), - ) as _i3.TextStyle); - - @override - double getBestInitialIntervalValue( - double? min, - double? max, - double? interval, { - double? baseline = 0.0, - }) => - (super.noSuchMethod( - Invocation.method( - #getBestInitialIntervalValue, - [ - min, - max, - interval, - ], - {#baseline: baseline}, - ), - returnValue: 0.0, - ) as double); - - @override - double convertRadiusToSigma(double? radius) => (super.noSuchMethod( - Invocation.method( - #convertRadiusToSigma, - [radius], - ), - returnValue: 0.0, - ) as double); -} - -/// A class which mocks [BuildContext]. -/// -/// See the documentation for Mockito's code generation for more information. -class MockBuildContext extends _i1.Mock implements _i3.BuildContext { - MockBuildContext() { - _i1.throwOnMissingStub(this); - } - - @override - _i3.Widget get widget => (super.noSuchMethod( - Invocation.getter(#widget), - returnValue: _FakeWidget_4( - this, - Invocation.getter(#widget), - ), - ) as _i3.Widget); - - @override - bool get mounted => (super.noSuchMethod( - Invocation.getter(#mounted), - returnValue: false, - ) as bool); - - @override - bool get debugDoingBuild => (super.noSuchMethod( - Invocation.getter(#debugDoingBuild), - returnValue: false, - ) as bool); - - @override - _i3.InheritedWidget dependOnInheritedElement( - _i3.InheritedElement? ancestor, { - Object? aspect, - }) => - (super.noSuchMethod( - Invocation.method( - #dependOnInheritedElement, - [ancestor], - {#aspect: aspect}, - ), - returnValue: _FakeInheritedWidget_5( - this, - Invocation.method( - #dependOnInheritedElement, - [ancestor], - {#aspect: aspect}, - ), - ), - ) as _i3.InheritedWidget); - - @override - void visitAncestorElements(_i3.ConditionalElementVisitor? visitor) => - super.noSuchMethod( - Invocation.method( - #visitAncestorElements, - [visitor], - ), - returnValueForMissingStub: null, - ); - - @override - void visitChildElements(_i3.ElementVisitor? visitor) => super.noSuchMethod( - Invocation.method( - #visitChildElements, - [visitor], - ), - returnValueForMissingStub: null, - ); - - @override - void dispatchNotification(_i3.Notification? notification) => - super.noSuchMethod( - Invocation.method( - #dispatchNotification, - [notification], - ), - returnValueForMissingStub: null, - ); - - @override - _i3.DiagnosticsNode describeElement( - String? name, { - _i4.DiagnosticsTreeStyle? style = _i4.DiagnosticsTreeStyle.errorProperty, - }) => - (super.noSuchMethod( - Invocation.method( - #describeElement, - [name], - {#style: style}, - ), - returnValue: _FakeDiagnosticsNode_6( - this, - Invocation.method( - #describeElement, - [name], - {#style: style}, - ), - ), - ) as _i3.DiagnosticsNode); - - @override - _i3.DiagnosticsNode describeWidget( - String? name, { - _i4.DiagnosticsTreeStyle? style = _i4.DiagnosticsTreeStyle.errorProperty, - }) => - (super.noSuchMethod( - Invocation.method( - #describeWidget, - [name], - {#style: style}, - ), - returnValue: _FakeDiagnosticsNode_6( - this, - Invocation.method( - #describeWidget, - [name], - {#style: style}, - ), - ), - ) as _i3.DiagnosticsNode); - - @override - List<_i3.DiagnosticsNode> describeMissingAncestor( - {required Type? expectedAncestorType}) => - (super.noSuchMethod( - Invocation.method( - #describeMissingAncestor, - [], - {#expectedAncestorType: expectedAncestorType}, - ), - returnValue: <_i3.DiagnosticsNode>[], - ) as List<_i3.DiagnosticsNode>); - - @override - _i3.DiagnosticsNode describeOwnershipChain(String? name) => - (super.noSuchMethod( - Invocation.method( - #describeOwnershipChain, - [name], - ), - returnValue: _FakeDiagnosticsNode_6( - this, - Invocation.method( - #describeOwnershipChain, - [name], - ), - ), - ) as _i3.DiagnosticsNode); -} diff --git a/version.json b/version.json new file mode 100644 index 0000000000..86238c277a --- /dev/null +++ b/version.json @@ -0,0 +1 @@ +{"app_name":"fl_chart_app","version":"1.0.0","build_number":"1","package_name":"fl_chart_app"} \ No newline at end of file