Full Code of g0dkar/qrcode-kotlin for AI

main 215e706abb6e cached
149 files
992.3 KB
294.3k tokens
1071 symbols
1 requests
Download .txt
Showing preview only (1,051K chars total). Download the full file or copy to clipboard to get everything.
Repository: g0dkar/qrcode-kotlin
Branch: main
Commit: 215e706abb6e
Files: 149
Total size: 992.3 KB

Directory structure:
gitextract_a8h010na/

├── .editorconfig
├── .gitattributes
├── .github/
│   ├── FUNDING.yml
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug_report.md
│   │   └── feature_request.md
│   ├── renovate.json
│   └── workflows/
│       ├── dokka-update.yml
│       └── run-tests.yml
├── .gitignore
├── .run/
│   ├── Build.run.xml
│   ├── Publish Distribution - Sonar.run.xml
│   ├── Publish to Local.run.xml
│   └── Run Tests.run.xml
├── CHANGELOG.md
├── CNAME
├── CODE_OF_CONDUCT.md
├── LICENSE
├── README.md
├── README.pt-br.md
├── _config.yml
├── build.gradle.kts
├── examples/
│   ├── android/
│   │   ├── build.gradle.kts
│   │   ├── proguard-rules.pro
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           ├── java/
│   │           │   └── io/
│   │           │       └── github/
│   │           │           └── g0dkar/
│   │           │               └── qrcode/
│   │           │                   ├── AboutActivity.kt
│   │           │                   ├── NewQRCodeActivity.kt
│   │           │                   ├── QRCodeData.kt
│   │           │                   ├── QRCodeDetailActivity.kt
│   │           │                   ├── QRCodeListActivity.kt
│   │           │                   └── extra/
│   │           │                       ├── QRCodeListAdapter.kt
│   │           │                       └── QRCodeListDatasource.kt
│   │           └── res/
│   │               ├── drawable/
│   │               │   └── ic_launcher_background.xml
│   │               ├── drawable-v24/
│   │               │   └── ic_launcher_foreground.xml
│   │               ├── layout/
│   │               │   ├── activity_about.xml
│   │               │   ├── activity_main.xml
│   │               │   ├── activity_new_qrcode.xml
│   │               │   ├── activity_qrcode_detail.xml
│   │               │   └── qrcode_list_item.xml
│   │               ├── menu/
│   │               │   └── menu_main.xml
│   │               ├── mipmap-anydpi-v26/
│   │               │   ├── ic_launcher.xml
│   │               │   └── ic_launcher_round.xml
│   │               ├── values/
│   │               │   ├── colors.xml
│   │               │   ├── dimens.xml
│   │               │   ├── strings.xml
│   │               │   └── themes.xml
│   │               ├── values-land/
│   │               │   └── dimens.xml
│   │               ├── values-night/
│   │               │   └── themes.xml
│   │               ├── values-pt-rBR/
│   │               │   └── strings.xml
│   │               ├── values-w1240dp/
│   │               │   └── dimens.xml
│   │               ├── values-w600dp/
│   │               │   └── dimens.xml
│   │               └── xml/
│   │                   ├── backup_rules.xml
│   │                   └── data_extraction_rules.xml
│   ├── iosApp/
│   │   ├── .gitignore
│   │   ├── iosApp/
│   │   │   ├── Assets.xcassets/
│   │   │   │   ├── AccentColor.colorset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── AppIcon.appiconset/
│   │   │   │   │   └── Contents.json
│   │   │   │   └── Contents.json
│   │   │   ├── Preview Content/
│   │   │   │   └── Preview Assets.xcassets/
│   │   │   │       └── Contents.json
│   │   │   ├── presentation/
│   │   │   │   ├── ContentView.swift
│   │   │   │   └── iosApp.swift
│   │   │   └── utils/
│   │   │       └── NativeParser.swift
│   │   ├── iosApp.xcodeproj/
│   │   │   └── project.pbxproj
│   │   ├── iosAppTests/
│   │   │   └── iosAppTests.swift
│   │   └── iosAppUITests/
│   │       ├── iosAppUITests.swift
│   │       └── iosAppUITestsLaunchTests.swift
│   ├── java/
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               └── examples/
│   │                   ├── Example01_Shapes.java
│   │                   ├── Example02_Colors.java
│   │                   ├── Example03_SVG.java
│   │                   ├── Util.java
│   │                   ├── customClasses/
│   │                   │   ├── JVMTriangleShapeFunction.java
│   │                   │   └── TriangleShapeFunction.java
│   │                   └── svg/
│   │                       ├── SVGGraphicsFactory.java
│   │                       └── SVGQRCodeGraphics.java
│   ├── js/
│   │   ├── qrcode-example.html
│   │   └── qrcode-kotlin.js
│   ├── kotlin/
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           └── kotlin/
│   │               ├── Example00-Simple.kt
│   │               ├── Example01-Shapes.kt
│   │               ├── Example02-Colors.kt
│   │               ├── Example03-Logo.kt
│   │               ├── Example04-SVG.kt
│   │               ├── Example05-BackwardsCompat.kt
│   │               ├── Example06-ECL.kt
│   │               ├── Example07-MaskPattern.kt
│   │               ├── ProjectLogo.kt
│   │               └── svg/
│   │                   ├── SVGGraphicsFactory.kt
│   │                   └── SVGQRCodeGraphics.kt
│   └── spring-web/
│       ├── .gitignore
│       ├── build.gradle.kts
│       └── src/
│           └── main/
│               ├── kotlin/
│               │   └── io/
│               │       └── github/
│               │           └── g0dkar/
│               │               └── qrcode/
│               │                   └── springWebExample/
│               │                       ├── Launcher.kt
│               │                       ├── QRCodeController.kt
│               │                       └── QRCodeService.kt
│               └── resources/
│                   └── application.yml
├── gradle/
│   ├── libs.versions.toml
│   └── wrapper/
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── package.json
├── release/
│   ├── qrcode-kotlin-jvm-4.4.1.jar
│   ├── qrcode-kotlin.d.ts
│   └── qrcode-kotlin.js
├── settings.gradle.kts
└── src/
    ├── androidMain/
    │   └── kotlin/
    │       └── qrcode/
    │           └── render/
    │               ├── QRCodeGraphics.android.kt
    │               ├── extensions/
    │               │   └── AndroidComposeExtensions.kt
    │               └── graphics/
    │                   ├── AndroidDrawingInterface.kt
    │                   ├── BitmapGraphics.kt
    │                   └── DrawScopeGraphics.kt
    ├── commonMain/
    │   └── kotlin/
    │       └── qrcode/
    │           ├── QRCode.kt
    │           ├── QRCodeBuilder.kt
    │           ├── QRCodeShapesEnum.kt
    │           ├── color/
    │           │   ├── ColorType.kt
    │           │   ├── Colors.kt
    │           │   ├── DefaultColorFunction.kt
    │           │   ├── LinearGradientColorFunction.kt
    │           │   └── QRCodeColorFunction.kt
    │           ├── exception/
    │           │   └── InsufficientInformationDensityException.kt
    │           ├── internals/
    │           │   ├── BitBuffer.kt
    │           │   ├── ErrorMessage.kt
    │           │   ├── Polynomial.kt
    │           │   ├── QRCodeSetup.kt
    │           │   ├── QRCodeSquare.kt
    │           │   ├── QRData.kt
    │           │   ├── QRMath.kt
    │           │   ├── QRUtil.kt
    │           │   └── RSBlock.kt
    │           ├── raw/
    │           │   ├── QRCodeEnums.kt
    │           │   ├── QRCodeProcessor.kt
    │           │   └── QRCodeRawData.kt
    │           ├── render/
    │           │   ├── QRCodeGraphics.kt
    │           │   └── QRCodeGraphicsFactory.kt
    │           └── shape/
    │               ├── CircleShapeFunction.kt
    │               ├── DefaultShapeFunction.kt
    │               ├── QRCodeShapeFunction.kt
    │               └── RoundSquaresShapeFunction.kt
    ├── commonTest/
    │   └── kotlin/
    │       └── qrcode/
    │           └── internals/
    │               ├── PolynomialTest.kt
    │               └── QRNumberTest.kt
    ├── iosMain/
    │   └── kotlin/
    │       ├── qrcode/
    │       │   └── render/
    │       │       └── QRCodeGraphics.ios.kt
    │       └── utils/
    │           └── IOSNativeParser.kt
    ├── jsMain/
    │   └── kotlin/
    │       └── qrcode/
    │           └── render/
    │               └── QRCodeGraphics.js.kt
    ├── jvmMain/
    │   └── kotlin/
    │       └── qrcode/
    │           └── render/
    │               ├── JvmQRCodeGraphicsFactory.kt
    │               └── QRCodeGraphics.jvm.kt
    ├── jvmTest/
    │   └── kotlin/
    │       └── qrcode/
    │           ├── QRCodeTest.kt
    │           ├── TestUtils.kt
    │           └── render/
    │               └── ColorsTest.kt
    ├── tvosMain/
    │   └── kotlin/
    │       ├── qrcode/
    │       │   └── render/
    │       │       └── QRCodeGraphics.tvos.kt
    │       └── utils/
    │           └── TvOSNativeParser.kt
    └── wasmJsMain/
        └── kotlin/
            └── qrcode/
                └── render/
                    └── QRCodeGraphics.wasmjs.kt

================================================
FILE CONTENTS
================================================

================================================
FILE: .editorconfig
================================================
root = true

[*]
charset = utf-8
trim_trailing_whitespace = true
end_of_line = lf

[*.{kt,kts,md}]
ij_kotlin_code_style_defaults = KOTLIN_OFFICIAL
ij_kotlin_allow_trailing_comma = true
ij_kotlin_allow_trailing_comma_on_call_site = true
ij_kotlin_imports_layout = *,java.**,javax.**,kotlin.**,^
ij_kotlin_packages_to_use_import_on_demand = kotlinx.android.synthetic.**
ij_kotlin_name_count_to_use_star_import = 100
ij_kotlin_name_count_to_use_star_import_for_members = 100
indent_size = 4
indent_style = space
insert_final_newline = true
ktlint_code_style = official
ktlint_function_signature_body_expression_wrapping = default
ktlint_function_signature_rule_force_multiline_when_parameter_count_greater_or_equal_than = -1
ktlint_ignore_back_ticked_identifier = false
ktlint_no-wildcard-imports = disabled
ktlint_standard_no-wildcard-imports = disabled
max_line_length = 120

[**/test/**.kt]
ktlint_ignore_back_ticked_identifier = true


================================================
FILE: .gitattributes
================================================
#
# https://help.github.com/articles/dealing-with-line-endings/
#
# These are explicitly windows files and should use crlf
/gradlew text eol=lf
*.bat text eol=crlf
*.jar binary


================================================
FILE: .github/FUNDING.yml
================================================
github: g0dkar
ko_fi: 'g0dkar'
#custom: 'https://min.immo'


================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.md
================================================
---
name: Bug report
about: Create a report to help us improve
title: ''
labels: bug
assignees: g0dkar

---

<!--
[pt] Se você preferir, sinta-se livre para abrir bugs e/ou responder a quaisquer perguntas em Português!
-->

**Describe the bug**
A clear and concise description of what the bug is.

**To Reproduce**
Steps to reproduce the behavior. For example:

1. Create a QRCode instance with `data = "answer to life, universe and everything"`
2. Invoke `render(cellSize = 42)`
3. ???
4. See error

**Expected behavior**
<!-- A clear and concise description of what you expected to happen. For example: "I expected a QRCode like this one I generated with <other tool/lib>" -->

**Screenshots or other QRCodes rendered with other tools**
<!-- If applicable, add screenshots or QRCodes rendered with other tools to help explain your problem. -->

**Additional context**
<!-- Add any other context about the problem here. For example: Were you executing your code on a Server? If so, were you using a Framework? Which Java version were you on? -->


================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.md
================================================
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: ''
assignees: ''

---

<!--
[pt] Se você preferir, sinta-se livre para abrir sugestões e/ou responder a quaisquer perguntas em Português!
-->

**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. For example: I'm always frustrated when [...]

**Describe the solution you'd like**
A clear and concise description of what you want to happen.

**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.

**Additional context**
Add any other context or screenshots about the feature request here.


================================================
FILE: .github/renovate.json
================================================
{
  "$schema": "https://docs.renovatebot.com/renovate-schema.json",
  "extends": [
    "config:best-practices"
  ],
  "automerge": true,
  "automergeType": "pr",
  "automergeStrategy": "squash",
  "schedule": ["on the first day of the month"]
}


================================================
FILE: .github/workflows/dokka-update.yml
================================================
name: Dokka Update

on:
  push:
    branches: [ "gh-page" ]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
        with:
          repository: ${{ github.event.pull_request.head.repo.full_name }}
          ref: ${{ github.event.pull_request.head.ref }}
      - name: Set up JDK 17
        uses: actions/setup-java@c5195efecf7bdfc987ee8bae7a71cb8b11521c00 # v4
        with:
          java-version: "17"
          distribution: "temurin"
          cache: gradle
      - name: Give execute permission to ./gradlew
        run: chmod +x ./gradlew
      - name: Run Dokka Update
        run: "./gradlew dokkaGenerate"
      - name: Commit Changes
        uses: EndBug/add-and-commit@a94899bca583c204427a224a7af87c02f9b325d5 # v9
        with:
          message: "[CI] Dokka Update"
          committer_name: "GitHub Actions"
          committer_email: "actions@github.com"


================================================
FILE: .github/workflows/run-tests.yml
================================================
name: Run Tests

on:
  push:
    branches: [ "main" ]
  pull_request:
    branches: [ "main" ]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
        with:
          repository: ${{ github.event.pull_request.head.repo.full_name }}
          ref: ${{ github.event.pull_request.head.ref }}
      - name: Set up JDK 17
        uses: actions/setup-java@c5195efecf7bdfc987ee8bae7a71cb8b11521c00 # v4
        with:
          java-version: "17"
          distribution: "temurin"
          cache: gradle
      - name: Give execute permission to ./gradlew
        run: chmod +x ./gradlew
      - name: Build and Publish Locally
        run: "./gradlew clean :build :publishToMavenLocal -x :test -x :jvmTest -Pkotlin.incremental.useClasspathSnapshot=false"
      - name: Run Tests
        run: "./gradlew test -Pkotlin.incremental.useClasspathSnapshot=false"


================================================
FILE: .gitignore
================================================
HELP.md
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**
!**/src/test/**

.gradle
!**/src/main/**/build/
!**/src/test/**/build/

### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache

### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
local.properties

### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/

### VS Code ###
.vscode/

# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.

# dependencies
/node_modules
/**/node_modules
/**/.jekyll-cache
/**/_site
/.pnp
.pnp.js

# testing
/coverage

# production
/build

# misc
.DS_Store
.env.local
.env.development.local
.env.test.local
.env.production.local
/examples/gradle*
npm-debug.log*
yarn-debug.log*
yarn-error.log*
/kotlin-js-store/
.kotlin/
#/package.json
#/package-lock.json


================================================
FILE: .run/Build.run.xml
================================================
<component name="ProjectRunConfigurationManager">
  <configuration default="false" name="Build" type="GradleRunConfiguration" factoryName="Gradle">
    <ExternalSystemSettings>
      <option name="executionName" />
      <option name="externalProjectPath" value="$PROJECT_DIR$" />
      <option name="externalSystemIdString" value="GRADLE" />
      <option name="scriptParameters" value="" />
      <option name="taskDescriptions">
        <list />
      </option>
      <option name="taskNames">
        <list>
          <option value=":clean" />
          <option value=":build" />
          <option value=":copyToReleaseDir" />
        </list>
      </option>
      <option name="vmOptions" />
    </ExternalSystemSettings>
    <ExternalSystemDebugServerProcess>true</ExternalSystemDebugServerProcess>
    <ExternalSystemReattachDebugProcess>true</ExternalSystemReattachDebugProcess>
    <DebugAllEnabled>false</DebugAllEnabled>
    <RunAsTest>false</RunAsTest>
    <method v="2" />
  </configuration>
</component>

================================================
FILE: .run/Publish Distribution - Sonar.run.xml
================================================
<component name="ProjectRunConfigurationManager">
  <configuration default="false" name="Publish Distribution - Sonar" type="GradleRunConfiguration" factoryName="Gradle">
    <ExternalSystemSettings>
      <option name="executionName" />
      <option name="externalProjectPath" value="$PROJECT_DIR$" />
      <option name="externalSystemIdString" value="GRADLE" />
      <option name="scriptParameters" value="-x test" />
      <option name="taskDescriptions">
        <list />
      </option>
      <option name="taskNames">
        <list>
          <option value=":clean" />
          <option value=":publishToSonatype" />
          <option value=":closeAndReleaseSonatypeStagingRepository" />
        </list>
      </option>
      <option name="vmOptions" />
    </ExternalSystemSettings>
    <ExternalSystemDebugServerProcess>true</ExternalSystemDebugServerProcess>
    <ExternalSystemReattachDebugProcess>true</ExternalSystemReattachDebugProcess>
    <DebugAllEnabled>false</DebugAllEnabled>
    <RunAsTest>false</RunAsTest>
    <method v="2" />
  </configuration>
</component>

================================================
FILE: .run/Publish to Local.run.xml
================================================
<component name="ProjectRunConfigurationManager">
  <configuration default="false" name="Publish to Local" type="GradleRunConfiguration" factoryName="Gradle">
    <ExternalSystemSettings>
      <option name="executionName" />
      <option name="externalProjectPath" value="$PROJECT_DIR$" />
      <option name="externalSystemIdString" value="GRADLE" />
      <option name="scriptParameters" value="-x :test" />
      <option name="taskDescriptions">
        <list />
      </option>
      <option name="taskNames">
        <list>
          <option value=":clean" />
          <option value=":build" />
          <option value=":publishToMavenLocal" />
        </list>
      </option>
      <option name="vmOptions" />
    </ExternalSystemSettings>
    <ExternalSystemDebugServerProcess>true</ExternalSystemDebugServerProcess>
    <ExternalSystemReattachDebugProcess>true</ExternalSystemReattachDebugProcess>
    <DebugAllEnabled>false</DebugAllEnabled>
    <RunAsTest>false</RunAsTest>
    <method v="2" />
  </configuration>
</component>

================================================
FILE: .run/Run Tests.run.xml
================================================
<component name="ProjectRunConfigurationManager">
  <configuration default="false" name="Run Tests" type="GradleRunConfiguration" factoryName="Gradle">
    <ExternalSystemSettings>
      <option name="executionName" />
      <option name="externalProjectPath" value="$PROJECT_DIR$" />
      <option name="externalSystemIdString" value="GRADLE" />
      <option name="scriptParameters" value="" />
      <option name="taskDescriptions">
        <list />
      </option>
      <option name="taskNames">
        <list>
          <option value=":jvmTest" />
        </list>
      </option>
      <option name="vmOptions" />
    </ExternalSystemSettings>
    <ExternalSystemDebugServerProcess>true</ExternalSystemDebugServerProcess>
    <ExternalSystemReattachDebugProcess>true</ExternalSystemReattachDebugProcess>
    <DebugAllEnabled>false</DebugAllEnabled>
    <RunAsTest>false</RunAsTest>
    <method v="2" />
  </configuration>
</component>

================================================
FILE: CHANGELOG.md
================================================
[![License](https://img.shields.io/github/license/g0dkar/qrcode-kotlin)](LICENSE)
[![Maven Central](https://img.shields.io/maven-central/v/io.github.g0dkar/qrcode-kotlin.svg?label=Maven%20Central)](https://search.maven.org/search?q=g:%22io.github.g0dkar%22%20AND%20a:%22qrcode-kotlin%22)

# Change Log

> Mostly notable changes from version to version. Some stuff might go undocumented. If you find something that you think
> should be documented, please open an [issue](https://github.com/g0dkar/qrcode-kotlin/issues) :)

# 4.5.0 - Latest

## ✨ New
- Added (experimental) support for WASM targets (requested via Issues #140 and #167)
    - Please do let us know if you run into any issues with it <3

# 4.4.1

> I'm trying to keep a better CHANGELOG from now on ^^

## 🔧 Fixed
- **Fixed an issue with rendering the Timing Pattern.** I have known it for a while, but now I finally figured what was the issue and fixed it.

## ♻️ Changed
- Changed default ECL from `VERY_HIGH` to `LOW` as to stay closer to what other tools seems to use as a default
- Computing the `informationDensity` value now always goes for the **least possible value** _(down from a minimum of 6 set by `QRCodeBuilder`)_
- Better documentation of methods - this is an ongoing initiative!

## ✨ New
- New `InsufficientInformationDensityException`: instead of an `IllegalArgumentException`, this new exception is thrown with a more helpful message
- Added `drawQRCode()` extension function to a Android Compose `DrawScope` to draw QRCodes into modern Android.
    - Idea/request from Issue #141 by @dgmltn (Thanks!)
- Added examples demonstrating what the ECL does (same data, different ECLs)
- Added examples demonstrating what a Mask Pattern does (same data, different masks)
- Added example with Spring Boot
- Moved example QRCode files to a folder within each language examples, just to reduce clutter :)

## 🚫 Removed
- `forceInformationDensity` was removed. Now the **QRCodeBuilder** class uses `infoDensity = 0` (default value) as a trigger to compute it automatically since it needs to be `>= 1`
    - Default value calling `QRCode()` directly is still 6 as to keep a bit of backwards compatibility 😅

## 👀 Internal
- Renamed "typeNum" to "informationDensity"
- Updated dokka and KMP
- Fixed dokka always triggering building the whole `docs/dokka/` folder (that is only for GH Pages)

--------------------

## 4.3.0

- Fixed an issue with `4.2.1` and iOS/macOS targets (thanks [Manuel149Br](https://github.com/Manuel149Br)!)
- Added options to fine tune the Information Density parameter:
    - `withMinimumInformationDensity()` is now `withInformationDensity()`: Manually setting the Information Density
      parameter will **force the use of the Information Density specified**.
    - **NEW** `forceInformationDensity()`: Force the use of the current Information Density value. Default is `false`.
      If this is `false`, an adequate information density will be computed from the amount of data to be encoded and the
      Error Correction Level to apply.\
      :warning: **Calling `withInformationDensity()` automatically sets this to `true`!** To replicate the old behaviour
      of using the specified Information Density as the minimum density allowed, first call
      `withInformationDensity(...)` followed by `forceInformationDensity(false)`.
    - :sirene: **If the data is too large for the information density value you chose, an `IllegalArgumentException`
      will be thrown.**
- Moved `QRCodeShapesEnum` to be its own `enum` instead of being an inner element of `QRCodeBuilder`.

--------------------

## 4.2.1

- Fixed issue with the Error Correction being ignored (thanks [slaha](https://github.com/slaha)!)
- Updated libs versions
- **Only for project devs:** fixed the pipeline issues with running tests for PRs.
- **Investigating:** Issues with very large payloads being encoded

--------------------

## 4.1.0

- Another round of improvements and fixes (special thanks to [ruicanas](https://github.com/ruicanas)
  and [chphmh](https://github.com/chphmh)!)
- Changed the minimal requirements for the library:
    - Reduced the minSdk API Version of the Android implementation to `7` (down from `23`)
        - In theory, it can go down to `1` but all API Versions below 7 are considered deprecated.
    - Reduced the Java compilation target to `11` (down from `17`)

--------------------

## 4.0.7

- A bunch of improvements and optimizations (minor changes from the rework)
- MAJOR thanks to [ruicanas](https://github.com/ruicanas) for fixing and improving the iOS implementation!

--------------------

## 4.0.0

- A major rework of the `QRCode` class to allow for easy creation of nice looking QRCodes
- Added the first version of the iOS Support
- Changed the base package of the classes from `io.github.g0dkar.qrcode` to `qrcode`
    - This was done to better support JavaScript
      ß- And because I don't really see much use in those Java-ish package names 😅

--------------------

## 3.3.0

- Started doing the Changelog 🥲
- Added plain release files to the [release](release) directory (only the latest version will be there)
- Added JavaScript (Browser) into Multiplatform support
    - Added Browser JS QRCode Generation example ([link](examples/js/qrcode-example.html))
    - **Still needs some improvements** on how people use it, but it is a step in the right direction
    - **Help in this regard is much appreciated!** If interested, this is in the domain of Developer Experience, aka
      DevX/DX
- Changed uses of `Collection`s to `Array`s instead to try and be more performant and have a smaller library as a result
- **WIP:** Started work on Native targets (Windows, Linux, macOS, iOS)


================================================
FILE: CNAME
================================================
qrcodekotlin.com

================================================
FILE: CODE_OF_CONDUCT.md
================================================
# Contributor Covenant Code of Conduct

> **TL;DR Don't be an asshole, don't call people names and don't fight. Be an adult.**

## Our Pledge

We as members, contributors, and leaders pledge to make participation in our
community a harassment-free experience for everyone, regardless of age, body
size, visible or invisible disability, ethnicity, sex characteristics, gender
identity and expression, level of experience, education, socio-economic status,
nationality, personal appearance, race, religion, or sexual identity
and orientation.

We pledge to act and interact in ways that contribute to an open, welcoming,
diverse, inclusive, and healthy community.

## Our Standards

Examples of behavior that contributes to a positive environment for our
community include:

* Demonstrating empathy and kindness toward other people
* Being respectful of differing opinions, viewpoints, and experiences
* Giving and gracefully accepting constructive feedback
* Accepting responsibility and apologizing to those affected by our mistakes,
  and learning from the experience
* Focusing on what is best not just for us as individuals, but for the
  overall community

Examples of unacceptable behavior include:

* The use of sexualized language or imagery, and sexual attention or
  advances of any kind
* Trolling, insulting or derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or email
  address, without their explicit permission
* Other conduct which could reasonably be considered inappropriate in a
  professional setting

## Enforcement Responsibilities

Community leaders are responsible for clarifying and enforcing our standards of
acceptable behavior and will take appropriate and fair corrective action in
response to any behavior that they deem inappropriate, threatening, offensive,
or harmful.

Community leaders have the right and responsibility to remove, edit, or reject
comments, commits, code, wiki edits, issues, and other contributions that are
not aligned to this Code of Conduct, and will communicate reasons for moderation
decisions when appropriate.

## Scope

This Code of Conduct applies within all community spaces, and also applies when
an individual is officially representing the community in public spaces.
Examples of representing our community include using an official e-mail address,
posting via an official social media account, or acting as an appointed
representative at an online or offline event.

## Enforcement

Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported to the community leaders responsible for enforcement at
rafael-at-lins-dot-net.
All complaints will be reviewed and investigated promptly and fairly.

All community leaders are obligated to respect the privacy and security of the
reporter of any incident.

## Enforcement Guidelines

Community leaders will follow these Community Impact Guidelines in determining
the consequences for any action they deem in violation of this Code of Conduct:

### 1. Correction

**Community Impact**: Use of inappropriate language or other behavior deemed
unprofessional or unwelcome in the community.

**Consequence**: A private, written warning from community leaders, providing
clarity around the nature of the violation and an explanation of why the
behavior was inappropriate. A public apology may be requested.

### 2. Warning

**Community Impact**: A violation through a single incident or series
of actions.

**Consequence**: A warning with consequences for continued behavior. No
interaction with the people involved, including unsolicited interaction with
those enforcing the Code of Conduct, for a specified period of time. This
includes avoiding interactions in community spaces as well as external channels
like social media. Violating these terms may lead to a temporary or
permanent ban.

### 3. Temporary Ban

**Community Impact**: A serious violation of community standards, including
sustained inappropriate behavior.

**Consequence**: A temporary ban from any sort of interaction or public
communication with the community for a specified period of time. No public or
private interaction with the people involved, including unsolicited interaction
with those enforcing the Code of Conduct, is allowed during this period.
Violating these terms may lead to a permanent ban.

### 4. Permanent Ban

**Community Impact**: Demonstrating a pattern of violation of community
standards, including sustained inappropriate behavior,  harassment of an
individual, or aggression toward or disparagement of classes of individuals.

**Consequence**: A permanent ban from any sort of public interaction within
the community.

## Attribution

This Code of Conduct is adapted from the [Contributor Covenant][homepage],
version 2.0, available at
https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.

Community Impact Guidelines were inspired by [Mozilla's code of conduct
enforcement ladder](https://github.com/mozilla/diversity).

[homepage]: https://www.contributor-covenant.org

For answers to common questions about this code of conduct, see the FAQ at
https://www.contributor-covenant.org/faq. Translations are available at
https://www.contributor-covenant.org/translations.


================================================
FILE: LICENSE
================================================
MIT License

Copyright (c) 2021 Rafael Madureira Lins de Araújo

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.


================================================
FILE: README.md
================================================
# QRCode-Kotlin

[![License](https://img.shields.io/github/license/g0dkar/qrcode-kotlin)](LICENSE)
[![Maven Central](https://img.shields.io/maven-central/v/io.github.g0dkar/qrcode-kotlin.svg?label=Maven%20Central)](https://search.maven.org/search?q=g:%22io.github.g0dkar%22%20AND%20a:%22qrcode-kotlin%22)

💚 [_**Disponível em Português (Brasil)**_](README.pt-br.md) 💛

![QRCode Kotlin Logo](examples/kotlin/project-banner.png)

Creating QRCodes in Kotlin (and Java) is harder than it should be. **QRCode-Kotlin aims to bring a simple,
straightforward and customizable way to create QRCodes**, especially in the backend.

It is with this mission in mind that we keep doing our best to learn how developers use this library and their goals so
that we can provide a better library/API for them. Please, feel free to share if and how you're using this project ^^

* **Pure Kotlin:** Rewritten on pure Kotlin from a reference implementation of the QRCode spec
  by [Kazuhiko Arase](https://github.com/kazuhikoarase/qrcode-generator)
* **Lightweight:** No dependencies, `~115KB` and it does what it says on the tin.
* **Easy to use:** Quickly and easily implement QRCodes with few lines of code.
* **Good-looking:** Many developers don't have time and sometimes knowledge to implement the perfect QRCode,
  so this library tries to generate good-looking QRCodes by default.
* **Server friendly:** The JVM version is mainly focused on a personal use-case where I needed to generate QRCodes on
  the backend, but all libraries I found were either complex or huge, usually both.
* **Multiplatform:** This is a KMP library with support to Java, JavaScript, Android, iOS and tvOS.

## Table of Contents

<!-- TOC -->

* [Installation](#installation)
* [Usage](#usage)
    * [Spring Framework and/or Spring Boot](#spring-framework-andor-spring-boot)
* [License](#license)
* [Thanks and Acknowledgements](#thanks-and-acknowledgements)
* [Support and Links](#support-and-links)

<!-- TOC -->

## 1. Installation

The library is available
from [Maven Central](https://search.maven.org/artifact/io.github.g0dkar/qrcode-kotlin/4.5.0/qrcode-kotlin)
and [NPM JS](https://www.npmjs.com/package/qrcode-kotlin), so you can add it to your project as a dependency like any
other:

**Gradle:**

```groovy
// Use this for both Android and JVM
implementation("io.github.g0dkar:qrcode-kotlin:4.5.0")
```

**Maven - JVM:**

```xml
<dependency>
    <groupId>io.github.g0dkar</groupId>
    <artifactId>qrcode-kotlin-jvm</artifactId>
    <version>4.5.0</version>
</dependency>
```

**Maven - Android:**

```xml
<dependency>
    <groupId>io.github.g0dkar</groupId>
    <artifactId>qrcode-kotlin-android</artifactId>
    <version>4.5.0</version>
</dependency>
```

**NodeJS:**

```shell
npm install qrcode-kotlin@4.5.0
```

**Browser:**

```html
<script src="https://cdn.jsdelivr.net/gh/g0dkar/qrcode-kotlin@main/release/qrcode-kotlin.min.js" type="application/javascript"></script>
```

## Usage

To create QRCodes, the main class that should be used is the `qrcode.render.QRCode` class. It has static methods to help
you create a QRCode the way you want:

```kotlin
// Use one of these:

val squares = QRCode.ofSquares()

val circles = QRCode.ofCircles()

val roundedSquares = QRCode.ofRoundedSquares()
```

With that, you'll have a [QRCodeBuilder](src/commonMain/kotlin/qrcode/QRCodeBuilder.kt) instance. It has methods to
adjust colors, size, spacing, add a logo and more! Also, make sure to check
the [Colors](src/commonMain/kotlin/qrcode/color/Colors.kt) class as well.

Here's a code to get you started:

```kotlin
val helloWorld = QRCode.ofSquares()
    .withColor(Colors.DEEP_SKY_BLUE) // Default is Colors.BLACK
    .withSize(10) // Default is 25
    .build("Hello world!")

// By default, QRCodes are rendered as PNGs.
val pngBytes = helloWorld.render()

FileOutputStream("hello-world.png").use { it.write(pngBytes) }
```

We highly recommend that you check out some examples:

* [All sorts of shapes](examples/kotlin/src/main/kotlin/Example01-Shapes.kt): Squares, Circles, Rounded Squares and
  Custom shapes
* [All about colors](examples/kotlin/src/main/kotlin/Example02-Colors.kt): Foreground, Background, Transparent
  backgrounds, Linear Gradient colors
* [Adding a Logo](examples/kotlin/src/main/kotlin/Example03-Logo.kt): Add a logo and remove the cells behind it, or
  don't :)
* [SVG QRCodes](examples/kotlin/src/main/kotlin/Example04-SVG.kt): How to extend the renderer to render SVG (uses [JFree SVG](https://github.com/jfree/jfreesvg))
* [The banner on the top of this README](examples/kotlin/src/main/kotlin/ProjectLogo.kt): Yup, all done with the
  library ^^

The examples show pretty much all that can be done with the library! Even how to extend it so that it can create SVG
QRCodes ;)

You can mix and match all those together. Try generating the library logo and banner with gradients and all in SVG ;)

### Spring Framework and/or Spring Boot

As said earlier, one of the main reasons I developed this library was to use it on a backend application. So it is only
natural to show how to do that :)

This Spring Framework/Boot controller method can generate QRCodes of a given content:

```kotlin
import org.springframework.core.io.ByteArrayResource
import org.springframework.http.HttpHeaders.CONTENT_DISPOSITION
import org.springframework.http.MediaType.IMAGE_PNG_VALUE

@GetMapping("/qrcode")
fun generateQrCode(content: String): ResponseEntity<ByteArrayResource> {
    val pngData = QRCode.ofSquares()
        .build(content)
        .render()
    val resource = ByteArrayResource(pngData, IMAGE_PNG_VALUE)

    return ResponseEntity.ok()
        .header(CONTENT_DISPOSITION, "attachment; filename=\"qrcode.png\"")
        .body(resource)
}
```

## Changes from v3

The main changes coming from `v3.3.0` are:

1. The main package of the classes was changed from `io.github.g0dkar.qrcode` to simply `qrcode`
    * The old name doesn't help languages that don't have the "package" concept, and other Kotlin libraries already name
      their main package this way.
2. The old `QRCode` class was rewritten to be easier to create better looking QRCodes . The previous `QRCode` class was
   renamed to [QRCodeProcessor](src/commonMain/kotlin/qrcode/raw/QRCodeProcessor.kt), with very minor API changes.
    * **For most of the simple cases, the new `QRCode` class is compatible with the old one!**
3. A bunch of optimizations on how the QRCode is drawn. Previously, we'd had a canvas for each square, which would then
   be copied into the QRCode. This was changed to have just one large canvas where each square will be individually
   drawn directly.
4. iOS and tvOS Support: Starting from `v4.0.7` an initial implementation of the `QRCodeGraphics` so that iOS and tvOS
   are now supported. **Any and all [feedback](https://github.com/g0dkar/qrcode-kotlin/issues/85) are very welcome!** -
   Thanks a lot to [ruicanas](https://github.com/ruicanas) for all his contributions to this feature :D

## License

Copyright since 2021 Rafael M. Lins, Licensed under the [MIT License](https://rafaellins.mit-license.org/2021/).

QR Code is trademarked by Denso Wave, Inc.

## Thanks and Acknowledgements

* [Kazuhiko Arase](https://github.com/kazuhikoarase): For his reference implementation!
* [Paul Varry](https://github.com/pvarry): for opening the first few issues on the repo and helping to make the library
  even better for everyone! :grin:
* [Renan Lukas](https://github.com/RenanLukas): For his friendship, patience and help with Android, Gradle and a bunch
  of other stuff during the development of v2.0.0 and v3.0.0!
* [Doomsdayrs](https://github.com/Doomsdayrs): For pointing out how the library could be improved using Kotlin
  Multiplatform, and helping out implementing it into the project.
* An awesome, furry friend for all the support through all these years :)
* [ruicanas](https://github.com/ruicanas): For not only pointing out some issues with the iOS implementation, but also
  fixing them! Thank you so much ^^

## Support and Links

* If you found any bugs,
  please [open an Issue](https://github.com/g0dkar/qrcode-kotlin/issues/new?assignees=g0dkar&labels=bug&template=bug_report.md&title=)
  😁
* Have any suggestions? You
  can [make them](https://github.com/g0dkar/qrcode-kotlin/issues/new?assignees=&labels=&template=feature_request.md&title=)
  as well!

If you enjoyed the library and want to get me some coffee, use the buttons below :love_you_gesture:

[<img src="https://ko-fi.com/img/githubbutton_sm.svg" alt="Buy me a coffee over at Ko-fi!" width="200"/>](https://ko-fi.com/g0dkar)

[<img src="https://raw.githubusercontent.com/andreostrovsky/donate-with-paypal/master/blue.svg" alt="Buy me a coffee over at PayPal!" width="200"/>](https://www.paypal.com/donate/?business=EFVC68BFJQWSC&no_recurring=0&item_name=Rafael+is+working+on+Open+Source+software+in+his+free+time.+This+helps+him+keep+this+up+for+longer%2C+and+with+higher+quality%21&currency_code=BRL)


================================================
FILE: README.pt-br.md
================================================
# QRCode-Kotlin

[![License](https://img.shields.io/github/license/g0dkar/qrcode-kotlin)](LICENSE)
[![Maven Central](https://img.shields.io/maven-central/v/io.github.g0dkar/qrcode-kotlin.svg?label=Maven%20Central)](https://search.maven.org/search?q=g:%22io.github.g0dkar%22%20AND%20a:%22qrcode-kotlin%22)

:uk: [_**Also available in English**_](README.pt-br.md) :uk:

![QRCode Kotlin Logo](examples/kotlin/project-banner.png)

Criar QRCodes em Kotlin (e Java) é mais difícil do que deveria ser. **A QRCode-Kotlin tenta trazer uma forma
personalizável, simples e direta de se criar QRCodes**, especialmente no backend.

É com esta missão em mente que continuamos a fazer o nosso melhor para aprender como pessoas desenvolvedoras utilizam
essa biblioteca nos seus projetos e quais os seus objetivos, para podermos prover uma ferramenta/API melhor para todos.
Por favor, sinta-se livre para compartilhar se e como você utiliza este projeto ^^

* **Puro Kotlin:** Reescrita em puro Kotlin de uma implementação de referência da spec QRCode
  por [Kazuhiko Arase](https://github.com/kazuhikoarase/qrcode-generator)
* **Leve:** Sem dependencias, `~115KB` e faz o que promete no rótulo.
* **Fácil de usar:** Rápida e facilmente tenha QRCodes com pouquíssimas linhas de código.
* **Bonito:** Muitas pessoas desenvolvedoras não têm tempo e às vezes conhecimento para implementar o QRCode perfeito,
  por isso esta biblioteca tenta gerar códigos bonitos por padrão.
* **Amigável aos servidores:** A versão da JVM é fortemente focada em um caso de uso pessoal onde eu precisei criar
  QRCodes no backend, mas todas as bibliotecas que encontrei eram complexas ou enormes, normalmente os dois.
* **Multiplatforma:** Esta é uma bilioteca KMP com suporte a Java, JavaScript, Android, iOS e tvOS.

## Sumário

<!-- TOC -->
* [Instalação](#instalação)
* [Uso](#uso)
  * [Spring Framework e/ou Spring Boot](#spring-framework-eou-spring-boot)
* [Mudanças da v3](#mudanças-da-v3)
* [Licença](#licença)
* [Agradecimentos e Reconhecimentos](#agradecimentos-e-reconhecimentos)
* [Suporte e Links](#suporte-e-links)
<!-- TOC -->

## Instalação

A biblioteca está disponível através
da [Maven Central](https://search.maven.org/artifact/io.github.g0dkar/qrcode-kotlin/4.5.0/qrcode-kotlin) e
do [NPM JS](https://www.npmjs.com/package/qrcode-kotlin), portanto basta adicioná-la a seu projeto como qualquer outra:

**Gradle:**

```groovy
// Use esse tanto para Android quanto para a JVM
implementation("io.github.g0dkar:qrcode-kotlin:4.5.0")
```

**Maven - JVM:**

```xml
<dependency>
    <groupId>io.github.g0dkar</groupId>
    <artifactId>qrcode-kotlin-jvm</artifactId>
    <version>4.5.0</version>
</dependency>
```

**Maven - Android:**

```xml
<dependency>
    <groupId>io.github.g0dkar</groupId>
    <artifactId>qrcode-kotlin-android</artifactId>
    <version>4.5.0</version>
</dependency>
```

**NodeJS:**

```shell
npm install qrcode-kotlin@4.5.0
```

**Browser:**

```html
<script src="https://cdn.jsdelivr.net/gh/g0dkar/qrcode-kotlin@main/release/qrcode-kotlin.min.js" type="application/javascript"></script>
```

## Uso

Para criar QRCodes, a principal classe que deve ser usada é a `qrcode.render.QRCode`. Ela tem métodos estáticos para
ajudar na criação de um QRCode da forma que você quiser:

```kotlin
// Use qualquer um desses:

val quadrados = QRCode.ofSquares()

val circulos = QRCode.ofCircles()

val quadradosArredondados = QRCode.ofRoundedSquares()
```

Com isso, você terá uma instância de [QRCodeBuilder](src/commonMain/kotlin/qrcode/QRCodeBuilder.kt). Esta classe tem
métodos para ajustar cores, tamanho, espaçamento, adicionar um logo e mais! Certifique-se de ver também a
classe [Colors](src/commonMain/kotlin/qrcode/color/Colors.kt).

Aqui tem um código para ajudar você a começar:

```kotlin
val helloWorld = QRCode.ofSquares()
    .withColor(Colors.DEEP_SKY_BLUE) // Padrão é Colors.BLACK
    .withSize(10) // Padrão é 25px
    .build("Hello world!")

// Por padrão, os QRCodes serão gerados como PNG
val pngBytes = helloWorld.render()

FileOutputStream("hello-world.png").use { it.write(pngBytes) }
```

Recomendamos fortemente que você veja os exemplos disponíveis:

* [Todas as formas](examples/kotlin/src/main/kotlin/Example01-Shapes.kt): Quadrados, Círculos, Quadrados Arredondados e
  formas personalizadas
* [Tudo sobre cores](examples/kotlin/src/main/kotlin/Example02-Colors.kt): Frente, Fundo, Fundos transparentes, cores em
  Gradiente Linear
* [Adicionando um Logo](examples/kotlin/src/main/kotlin/Example03-Logo.kt): Adicione um logo e remova as células atrás
  dele, ou não :)
* [QRCodes em SVG](examples/kotlin/src/main/kotlin/Example04-SVG.kt): Como estender o renderizador para criar SVG (utilizando [JFree SVG](https://github.com/jfree/jfreesvg))
* [O banner no topo deste README](examples/kotlin/src/main/kotlin/ProjectLogo.kt): Sim, feito com essa biblioteca ^^

Os exemplos mostram praticamente tudo que pode ser feito com a biblioteca! Até mesmo como estender a mesma para criar
QRCodes em SVG ;)

Você pode utilizar todas essas funcionalidades juntas e misturadas. Tente gerar o logo e banner com gradientes e tudo
mais em SVG ;)

### Spring Framework e/ou Spring Boot

Como dito anteriormente, uma das razões principais para o desenvolvimento dessa biblioteca foi para ser usada em
aplicações backend. Portanto, é natural mostrar como fazer exatamente isso :)

Este método de um controller do Spring Framework/Boot mostra como gerar QRCodes dado o conteúdo do mesmo:

```kotlin
import org.springframework.core.io.ByteArrayResource
import org.springframework.http.HttpHeaders.CONTENT_DISPOSITION
import org.springframework.http.MediaType.IMAGE_PNG_VALUE

@GetMapping("/qrcode")
fun generateQrCode(content: String): ResponseEntity<ByteArrayResource> {
    val pngData = QRCode().ofSquares()
        .build(content)
        .render()
    val resource = ByteArrayResource(pngData, IMAGE_PNG_VALUE)

    return ResponseEntity.ok()
        .header(CONTENT_DISPOSITION, "attachment; filename=\"qrcode.png\"")
        .body(resource)
}
```

## Mudanças da v3

As principais mudanças vindo da versão `v3.3.0` são:

1. O pacote principal das classes foi mudado de `io.github.g0dkar.qrcode` para simplesmente `qrcode`
    * O nome anterior não ajuda linguagens que não têm esse conceito de "pacote", e outras bibliotecas Kotlin já nomeiam
      os seus pacotes principais dessa forma.
2. A antiga classe `QRCode` foi reescrita para ser mais fácil de se criar QRCodes mais bonitos. A antiga classe `QRCode`
   foi renomeada para [QRCodeProcessor](src/commonMain/kotlin/qrcode/raw/QRCodeProcessor.kt), com pouquíssimas mudanças na API.
    * **Para a maioria dos casos de uso simples, a nova `QRCode` é compatível com a antiga!**
3. Uma grande quantidade de otimizações em como o QRCode é desenhado. Anteriormente, tínhamos um canvas (ecrã) para cada
   quadrado, o qual era copiado no canvas do QRCode principal. Isto foi mudado para termos apenas um grande canvas onde
   cada quadrado individual será desenhado diretamente.
4. Suporte a iOS e tvOS: A partir da versão `v4.0.7`, uma implementação experimental inicial da classe `QRCodeGraphics`
   foi criada para que o iOS e tvOS sejam suportados. **Todo e
   qualquer [feedback](https://github.com/g0dkar/qrcode-kotlin/issues/85) é muito bem-vindo!** (pode comentar em
   português mesmo) - Um imenso agradecimento a [ruicanas](https://github.com/ruicanas) por suas contribuições a essa
   feature :D

## Licença

Copyright desde 2021 Rafael M. Lins, Licenciado sob a [Licença MIT](https://rafaellins.mit-license.org/2021/).

QR Code é marca registrada de Denso Wave, Inc.

## Agradecimentos e Reconhecimentos

* [Kazuhiko Arase](https://github.com/kazuhikoarase): Por sua implementação de referência!
* [Paul Varry](https://github.com/pvarry): Por abrir as primeiras _issues_ do repositório e ajudar a fazer a biblioteca melhor para todo mundo! :grin:
* [Renan Lukas](https://github.com/RenanLukas): Por sua amizade, paciência e ajuda com Android, Gradle e várias outras coisas mais durante o desenvolvimento das versões v2.0.0 e v3.0.0!
* [Doomsdayrs](https://github.com/Doomsdayrs): Por apontar como a biblioteca podería melhorar se tornando um projeto KMP, entre outras contribuições.
* Um incrível e peludo amigo por todo o suporte através dos anos :)
* [ruicanas](https://github.com/ruicanas): Por não apenas apontar problemas com a implementação iOS, mas resolvê-los
  também! Muito obrigado ^^

## Suporte e Links

* Se você encontrar algum bug, sinta-se livre
  para [abrir uma Issue](https://github.com/g0dkar/qrcode-kotlin/issues/new?assignees=g0dkar&labels=bug&template=bug_report.md&title=)
* Tem sugestões? Você
  pode [fazê-las](https://github.com/g0dkar/qrcode-kotlin/issues/new?assignees=&labels=&template=feature_request.md&title=)
  também!

Se você gostou da biblioteca e quiser ajudar pagando um cafézinho, use os botões abaixo :love_you_gesture:

[<img src="https://ko-fi.com/img/githubbutton_sm.svg" alt="Me pague um cafézinho via Ko-fi!" width="200"/>](https://ko-fi.com/g0dkar)

[<img src="https://raw.githubusercontent.com/andreostrovsky/donate-with-paypal/master/blue.svg" alt="Me pague um cafézinho via PayPal!" width="200"/>](https://www.paypal.com/donate/?business=EFVC68BFJQWSC&no_recurring=0&item_name=Rafael+is+working+on+Open+Source+software+in+his+free+time.+This+helps+him+keep+this+up+for+longer%2C+and+with+higher+quality%21&currency_code=BRL)


================================================
FILE: _config.yml
================================================
theme: jekyll-theme-tactile

================================================
FILE: build.gradle.kts
================================================
@file:OptIn(ExperimentalWasmDsl::class)

import org.gradle.api.tasks.testing.logging.TestExceptionFormat.FULL
import org.gradle.api.tasks.testing.logging.TestLogEvent.FAILED
import org.gradle.api.tasks.testing.logging.TestLogEvent.PASSED
import org.jetbrains.dokka.gradle.engine.parameters.VisibilityModifier
import org.jetbrains.kotlin.gradle.ExperimentalWasmDsl
import org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpackConfig.Mode.PRODUCTION
import java.time.LocalDateTime

buildscript {
    dependencies {
        classpath(libs.kotlin.gradle.plugin)
    }
}

plugins {
    // Dev Plugins
    id("idea")

    // Base Plugins
    alias(libs.plugins.kotlin.multiplatform)
    alias(libs.plugins.android.library)

    // Kotest
    alias(libs.plugins.kotest.multiplatform)

    // Publishing Plugins
    signing
    `maven-publish`
    alias(libs.plugins.nexus)
    alias(libs.plugins.npmPublish)

    // Docs Plugins
    alias(libs.plugins.dokka)

    // Here because of the Android Examples
    alias(libs.plugins.android.application) apply false
    alias(libs.plugins.kotlin.android) apply false
}

repositories {
    mavenCentral()
    google()
}

group = "io.github.g0dkar"
val javaVersion = JavaVersion.VERSION_1_8
val javaVersionNumber = javaVersion.majorVersion.toInt()

kotlin {
    applyDefaultHierarchyTemplate()

    jvmToolchain(javaVersionNumber)

    compilerOptions {
        freeCompilerArgs.add("-Xexpect-actual-classes")
    }

    jvm()

    androidTarget {
        publishLibraryVariants("release")
    }

    js {
        browser {
            commonWebpackConfig {
                mode = PRODUCTION
                sourceMaps = true
            }

            testTask {
                enabled = false
            }

            binaries.library()
            generateTypeScriptDefinitions()
        }
    }

    wasmJs {
        browser {
            commonWebpackConfig {
                mode = PRODUCTION
                sourceMaps = true
            }

            testTask {
                enabled = false
            }

            binaries.library()
            generateTypeScriptDefinitions()
        }
    }

    // This is in place just because my main development machine is NOT a macOS :)
    // iOS Family of targets... since you can't just "ios()" anymore.
    val currentPlatform = System.getProperty("os.name")
    if (currentPlatform.lowercase() == "mac os x") {
        listOf(
            iosX64(),
            iosArm64(),
            iosSimulatorArm64(),
//          watchosX64() <- Still have to figure out how to do it for watchOS x_x
//          watchosArm64()
            tvosX64(),
            tvosArm64(),
            tvosSimulatorArm64(),
        ).forEach {
            it.binaries.framework {
                baseName = "qrcode_kotlin"
                isStatic = true
            }
        }
    }

    sourceSets {
        commonTest {
            dependencies {
                implementation(kotlin("test"))
                implementation(libs.kotest.assertions.core)
                implementation(libs.kotest.framework.engine)
            }
        }

        jvmTest {
            dependencies {
                implementation(libs.kotest.runner.junit5)
            }
        }

        androidTarget {
            dependencies {
                compileOnly(libs.androidx.compose.ui)
            }
        }

        wasmJsMain {
            dependencies {
                implementation(libs.kotlinx.browser)
            }
        }
    }
}

android {
    namespace = "io.github.g0dkar.qrcode"
    compileSdk = 7
    sourceSets["main"].manifest.srcFile("src/androidMain/AndroidManifest.xml")

    defaultConfig {
        minSdk = 7
    }

    compileOptions {
        sourceCompatibility = javaVersion
        targetCompatibility = javaVersion
    }
}

/**
 * Kotest Configuration
 */
tasks {
    named<Test>("jvmTest") {
        useJUnitPlatform()

        filter {
            isFailOnNoMatchingTests = false
        }

        testLogging {
            showExceptions = true
            showStandardStreams = true
            events = setOf(FAILED, PASSED)
            exceptionFormat = FULL
        }
    }
}

/* *********************** */
/* After Build Publishing  */
/* *********************** */
tasks {
    /** Copies release files into /release dir */
    register<Copy>("copyToReleaseDir") {
        dependsOn(build)

        doFirst {
            layout.projectDirectory.dir("release").asFile.deleteRecursively()
        }

        from(layout.buildDirectory.file("libs/qrcode-kotlin-jvm-$version.jar"))
        from(layout.buildDirectory.file("dist/js/productionLibrary/qrcode-kotlin.js"))
        from(layout.buildDirectory.file("dist/js/productionLibrary/qrcode-kotlin.js.map"))
        from(layout.buildDirectory.file("dist/js/productionLibrary/qrcode-kotlin.d.ts"))
        into(layout.projectDirectory.dir("release"))
    }
}

/* **************** */
/* Dev Environment  */
/* **************** */
idea {
    module {
        isDownloadJavadoc = false
        isDownloadSources = true
    }
}

/* **************** */
/* Docs             */
/* **************** */
dokka {
    moduleName.set("QRCode-Kotlin")
    basePublicationsDirectory = layout.buildDirectory.dir("javadoc")

    dokkaSourceSets {
        configureEach {
            skipDeprecated = true
            reportUndocumented = true
            skipEmptyPackages = true
            suppressGeneratedFiles = true

            documentedVisibilities = setOf(VisibilityModifier.Public)

            sourceLink {
                remoteUrl("https://github.com/g0dkar/qrcode-kotlin/tree/main")
            }
        }
    }

    pluginsConfiguration.html {
        footerMessage.set("&copy; 2021-${LocalDateTime.now().year} Rafael M. Lins - MIT License")
    }
}

val dokkaJar by tasks.registering(Jar::class) {
    group = JavaBasePlugin.DOCUMENTATION_GROUP
    description = "Assembles Kotlin docs with Dokka"
    archiveClassifier.set("javadoc")
    from(tasks.dokkaGenerate)
}

val dokkaCopyToFolder by tasks.registering(Copy::class) {
    dependsOn(tasks.dokkaGenerate)
    doFirst { layout.projectDirectory.dir("docs/dokka").asFile.deleteRecursively() }

    from(layout.buildDirectory.dir("javadoc/html"))
    into(layout.projectDirectory.dir("docs/dokka"))
}

/* **************** */
/* Publishing       */
/* **************** */
val ossrhUsername = properties.getOrDefault("ossrhUsername", System.getenv("OSSRH_USER"))?.toString()
val ossrhPassword = properties.getOrDefault("ossrhPassword", System.getenv("OSSRH_PASSWORD"))?.toString()
val npmAccessKey = properties.getOrDefault("npmAccessKey", System.getenv("NPM_ACCESSKEY"))?.toString()

nexusPublishing {
    repositories {
        sonatype {
            nexusUrl.set(uri("https://s01.oss.sonatype.org/service/local/"))
            snapshotRepositoryUrl.set(uri("https://s01.oss.sonatype.org/content/repositories/snapshots/"))

            username.set(ossrhUsername ?: return@sonatype)
            password.set(ossrhPassword ?: return@sonatype)
        }
    }
}

publishing {
    publications {
        withType<MavenPublication> {
            artifact(dokkaJar)

            pom {
                val projectGitUrl = "github.com/g0dkar/qrcode-kotlin"

                name.set(rootProject.name)
                description.set("A Kotlin Library to generate QR Codes without any other dependencies.")
                url.set("https://$projectGitUrl")
                inceptionYear.set("2021")
                licenses {
                    license {
                        name.set("MIT")
                        url.set("https://rafaellins.mit-license.org/2021/")
                    }
                }
                developers {
                    developer {
                        id.set("g0dkar")
                        name.set("Rafael Lins")
                        email.set("rafael@lins.net.br")
                        url.set("https://github.com/g0dkar")
                    }
                }
                issueManagement {
                    system.set("GitHub")
                    url.set("https://$projectGitUrl/issues")
                }
                scm {
                    connection.set("scm:git://$projectGitUrl.git")
                    developerConnection.set("scm:git://$projectGitUrl.git")
                    url.set("https://$projectGitUrl")
                }
            }
        }
    }

    repositories {
        maven {
            name = "sonatype"
            url = uri("https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/")
            credentials {
                username = ossrhUsername
                password = ossrhPassword
            }
        }
    }
}

signing {
    val key = properties.getOrDefault("signing.key", System.getenv("SIGNING_KEY"))?.toString() ?: return@signing
    val password =
        properties.getOrDefault("signing.password", System.getenv("SIGNING_PASSWORD"))?.toString() ?: return@signing

    useInMemoryPgpKeys(key, password)
    sign(publishing.publications)
}

// https://github.com/gradle/gradle/issues/26091
tasks.withType<AbstractPublishToMaven>().configureEach {
    val signingTasks = tasks.withType<Sign>()
    mustRunAfter(signingTasks)
}

npmPublish {
    readme.set(rootDir.resolve("README.md"))

    registries {
        register("npmjs") {
            uri.set(uri("https://registry.npmjs.org"))
            authToken.set(npmAccessKey)
        }
    }
}


================================================
FILE: examples/android/build.gradle.kts
================================================
plugins {
    alias(libs.plugins.android.application)
    alias(libs.plugins.kotlin.android)
    alias(libs.plugins.compose.compiler)
}

android {
    namespace = "io.github.g0dkar.qrcode"
    compileSdk = 35

    defaultConfig {
        applicationId = "io.github.g0dkar.qrcodeKotlin"
        minSdk = 26
        targetSdk = 34
        versionCode = 403
        versionName = "4.2.0"

        testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            isMinifyEnabled = true
            proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")
        }
    }
    compileOptions {
        sourceCompatibility = JavaVersion.VERSION_17
        targetCompatibility = JavaVersion.VERSION_17
    }
    kotlinOptions {
        jvmTarget = "17"
    }
    buildFeatures {
        viewBinding = true
        compose = true
    }
}

dependencies {
    val composeBom = platform("androidx.compose:compose-bom:2025.02.00")
    implementation(composeBom)

    implementation("io.github.g0dkar:qrcode-kotlin:4.5.0")
    implementation(libs.core.ktx)
    implementation(libs.appcompat)
    implementation(libs.material)
    implementation(libs.constraintlayout)
    implementation(libs.navigation.fragment.ktx)
    implementation(libs.navigation.ui.ktx)
    implementation(libs.androidx.annotation)
    implementation(libs.androidx.lifecycle.livedata.ktx)
    implementation(libs.androidx.lifecycle.viewmodel.ktx)
    implementation(libs.androidx.foundation)
}


================================================
FILE: examples/android/proguard-rules.pro
================================================
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
#   http://developer.android.com/guide/developing/tools/proguard.html

# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
#   public *;
#}

# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable

# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile

================================================
FILE: examples/android/src/main/AndroidManifest.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">

    <application
        android:allowBackup="true"
        android:dataExtractionRules="@xml/data_extraction_rules"
        android:fullBackupContent="@xml/backup_rules"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.QRCodeKotlinExampleApp"
        tools:targetApi="31">
        <activity
            android:exported="false"
            android:name=".AboutActivity" />
        <activity
            android:exported="false"
            android:name=".QRCodeDetailActivity" />
        <activity
            android:exported="false"
            android:label="@string/title_activity_new_qrcode"
            android:name=".NewQRCodeActivity" />
        <activity
            android:exported="true"
            android:label="@string/app_name"
            android:name=".QRCodeListActivity"
            android:theme="@style/Theme.QRCodeKotlinExampleApp.NoActionBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

================================================
FILE: examples/android/src/main/java/io/github/g0dkar/qrcode/AboutActivity.kt
================================================
package io.github.g0dkar.qrcode

import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity

class AboutActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_about)
    }
}


================================================
FILE: examples/android/src/main/java/io/github/g0dkar/qrcode/NewQRCodeActivity.kt
================================================
package io.github.g0dkar.qrcode

import android.content.Intent
import android.graphics.Bitmap
import android.os.Bundle
import android.os.Handler
import android.os.Looper
import android.view.View
import android.widget.AdapterView
import android.widget.AdapterView.OnItemSelectedListener
import android.widget.Button
import android.widget.EditText
import android.widget.ImageView
import android.widget.Spinner
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.core.os.postDelayed
import androidx.core.widget.doOnTextChanged
import io.github.g0dkar.qrcode.QRCodeData.Companion.STYLE_DEFAULT
import io.github.g0dkar.qrcode.QRCodeData.Companion.qrCodeForStyle

class NewQRCodeActivity : AppCompatActivity() {
    private lateinit var qrCodeData: EditText
    private lateinit var qrCodeImageView: ImageView
    private lateinit var saveButton: Button
    private lateinit var styleSelect: Spinner
    private var qrCodeIsValid = false

    private val handler = Handler(Looper.getMainLooper())

    companion object {
        const val QRCODE_DATA = "qrCodeData"
        const val QRCODE_STYLE = "qrCodeStyle"
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_new_qrcode)

        qrCodeData = findViewById(R.id.newQRCodeData)
        qrCodeImageView = findViewById(R.id.newQRCodePreviewImage)
        saveButton = findViewById(R.id.newQRCodeBtn)
        styleSelect = findViewById(R.id.newQRCodeStyle)

        qrCodeData.doOnTextChanged { text, _, _, _ ->
            val string = text?.toString()?.trim()
            val qrCodeStyle = styleSelect.selectedItemPosition
            updateAction(string, qrCodeStyle)
        }

        styleSelect.onItemSelectedListener = ItemSelectAction(this)

        saveButton.setOnClickListener {
            save()
        }
    }

    private fun updateAction(qrCodeData: String?, qrCodeStyle: Int) {
        qrCodeIsValid = if (qrCodeData.isNullOrBlank()) {
            qrCodeImageView.setImageBitmap(null)

            false
        } else {
            try {
                handler.removeCallbacksAndMessages(null)
                handler.postDelayed(250) {
                    val qrCodeBitmap = qrCodeForStyle(qrCodeStyle)
                        .build(qrCodeData)
                        .render()
                        .nativeImage() as Bitmap

                    qrCodeImageView.setImageBitmap(qrCodeBitmap)
                }

                true
            } catch (t: Throwable) {
                Toast.makeText(
                    this@NewQRCodeActivity,
                    R.string.new_qrcode_error_preview,
                    Toast.LENGTH_LONG,
                ).show()

                qrCodeImageView.setImageBitmap(null)

                false
            }
        }
    }

    private fun save() {
        val resultIntent = Intent()
        val qrCodeDataText = qrCodeData.text?.toString()?.trim()
        val qrCodeDataStyle = styleSelect.selectedItemPosition

        if (qrCodeDataText.isNullOrBlank() || !qrCodeIsValid) {
            setResult(RESULT_CANCELED, resultIntent)
        } else {
            resultIntent.putExtra(QRCODE_DATA, qrCodeDataText)
            resultIntent.putExtra(QRCODE_STYLE, qrCodeDataStyle)
            setResult(RESULT_OK, resultIntent)
        }

        finish()
    }

    class ItemSelectAction(val codeActivity: NewQRCodeActivity) : OnItemSelectedListener {
        override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
            val string = codeActivity.qrCodeData.text.toString().trim()
            codeActivity.updateAction(string, position)
        }

        override fun onNothingSelected(parent: AdapterView<*>?) {
            val string = codeActivity.qrCodeData.text.toString().trim()
            codeActivity.updateAction(string, STYLE_DEFAULT)
        }
    }
}


================================================
FILE: examples/android/src/main/java/io/github/g0dkar/qrcode/QRCodeData.kt
================================================
package io.github.g0dkar.qrcode

import android.content.SharedPreferences
import android.graphics.Bitmap
import qrcode.QRCode
import java.time.OffsetDateTime
import java.time.ZoneOffset

data class QRCodeData(
    val data: String,
    val style: Int = STYLE_DEFAULT,
    val timestamp: OffsetDateTime = OffsetDateTime.now(ZoneOffset.UTC),
    val bitmap: Bitmap = qrCodeForStyle(style).build(data).render().nativeImage() as Bitmap,
) : Comparable<QRCodeData> {
    companion object {
        const val STYLE_DEFAULT = 0
        const val STYLE_SQUARE = 1
        const val STYLE_CIRCLE = 2
        const val STYLE_ROUNDED_SQUARE = 3
        const val SEPARATOR = "___STYLE___"

        fun qrCodeForStyle(style: Int = STYLE_DEFAULT) =
            when (style) {
                STYLE_SQUARE -> QRCode.ofSquares().withInnerSpacing(0)
                STYLE_CIRCLE -> QRCode.ofCircles()
                STYLE_ROUNDED_SQUARE -> QRCode.ofRoundedSquares()
                else -> QRCode.ofSquares()
            }
    }

    fun persist(sharedPreferencesEditor: SharedPreferences.Editor) {
        val key = timestamp.toEpochSecond().toString()
        sharedPreferencesEditor.putString(key, "$data$SEPARATOR$style")
    }

    override fun compareTo(other: QRCodeData): Int = timestamp.compareTo(other.timestamp)
}


================================================
FILE: examples/android/src/main/java/io/github/g0dkar/qrcode/QRCodeDetailActivity.kt
================================================
package io.github.g0dkar.qrcode

import android.os.Bundle
import android.view.View
import android.widget.ImageView
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import java.time.Instant
import java.time.OffsetDateTime
import java.time.ZoneOffset

class QRCodeDetailActivity : AppCompatActivity() {
    companion object {
        const val QRCODE_DATA = "qrCodeData"
        const val QRCODE_STYLE = "qrCodeStyle"
        const val QRCODE_TIMESTAMP = "qrCodeTimestamp"
    }

    private lateinit var qrCodeDetailText: TextView
    private lateinit var qrCodeDetailImage: ImageView
    private lateinit var qrCodeDetailFab: View

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_qrcode_detail)

        qrCodeDetailText = findViewById(R.id.qrCodeDetailText)
        qrCodeDetailImage = findViewById(R.id.qrCodeDetailImage)
        qrCodeDetailFab = findViewById(R.id.qrCodeDetailFab)

        setBrightness() // Needed for readability if using this app on an actual phone

        val qrCodeData = intent.getStringExtra(QRCODE_DATA) ?: "ERROR"
        val qrCodeStyle = intent.getIntExtra(QRCODE_STYLE, 0)
        val qrCodeTimestamp = intent.getLongExtra(QRCODE_TIMESTAMP, Instant.now().epochSecond)
        val qrCode = QRCodeData(qrCodeData, qrCodeStyle, OffsetDateTime.ofInstant(Instant.ofEpochSecond(qrCodeTimestamp), ZoneOffset.UTC))

        qrCodeDetailText.text = qrCode.data
        qrCodeDetailImage.setImageBitmap(qrCode.bitmap)
    }

    private fun setBrightness() {
        try {
            val layout = window.attributes
            layout.screenBrightness = 1.0f
            window.attributes = layout
        } catch (_: Exception) {
            // NOOP
        }
    }
}


================================================
FILE: examples/android/src/main/java/io/github/g0dkar/qrcode/QRCodeListActivity.kt
================================================
package io.github.g0dkar.qrcode

import android.content.Intent
import android.os.Bundle
import android.view.View
import android.widget.Toast
import androidx.activity.result.ActivityResultLauncher
import androidx.activity.result.contract.ActivityResultContracts.StartActivityForResult
import androidx.appcompat.app.AppCompatActivity
import androidx.recyclerview.widget.RecyclerView
import io.github.g0dkar.qrcode.NewQRCodeActivity.Companion.QRCODE_DATA
import io.github.g0dkar.qrcode.NewQRCodeActivity.Companion.QRCODE_STYLE
import io.github.g0dkar.qrcode.extra.QRCodeListAdapter
import io.github.g0dkar.qrcode.extra.QRCodeListDatasource

class QRCodeListActivity : AppCompatActivity() {
    private val listAdapter = QRCodeListAdapter {
        val intent = Intent(this@QRCodeListActivity, QRCodeDetailActivity::class.java)
        intent.putExtra(QRCodeDetailActivity.QRCODE_DATA, it.data)
        intent.putExtra(QRCodeDetailActivity.QRCODE_STYLE, it.style)
        intent.putExtra(QRCodeDetailActivity.QRCODE_TIMESTAMP, it.timestamp.toEpochSecond())
        startActivity(intent)
    }

    private lateinit var recyclerView: RecyclerView
    private lateinit var fab: View
    private lateinit var newQRCodeActivity: ActivityResultLauncher<Intent>

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        fab = findViewById(R.id.fab)
        recyclerView = findViewById(R.id.recycler_view)

        QRCodeListDatasource.fromContext(this)

        recyclerView.adapter = listAdapter

        fab.setOnClickListener {
            startNewQRCodeActivity()
        }

        newQRCodeActivity = registerForActivityResult(StartActivityForResult()) {
            if (it.data != null) {
                val result = it.resultCode

                if (result == RESULT_OK) {
                    val qrCodeData = it.data?.getStringExtra(QRCODE_DATA)
                    val qrCodeStyle = it.data?.getIntExtra(QRCODE_STYLE, 0)

                    if (qrCodeData != null && qrCodeStyle != null) {
                        QRCodeListDatasource.add(qrCodeData, qrCodeStyle)
                    } else {
                        Toast.makeText(
                            this@QRCodeListActivity,
                            R.string.new_qrcode_error,
                            Toast.LENGTH_LONG
                        ).show()
                    }
                } else {
                    Toast.makeText(
                        this@QRCodeListActivity,
                        R.string.new_qrcode_error,
                        Toast.LENGTH_LONG
                    ).show()
                }
            }
        }
    }

    override fun onResume() {
        super.onResume()

        QRCodeListDatasource.liveData.observe(this) {
            if (it != null) {
                listAdapter.submitList(it)
            }
        }
    }

    override fun onStop() {
        super.onStop()

        QRCodeListDatasource.liveData.removeObservers(this)
    }

    private fun startNewQRCodeActivity() {
        val intent = Intent(this, NewQRCodeActivity::class.java)
        newQRCodeActivity.launch(intent)
    }
}


================================================
FILE: examples/android/src/main/java/io/github/g0dkar/qrcode/extra/QRCodeListAdapter.kt
================================================
package io.github.g0dkar.qrcode.extra

import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.TextView
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.ListAdapter
import androidx.recyclerview.widget.RecyclerView
import io.github.g0dkar.qrcode.QRCodeData
import io.github.g0dkar.qrcode.R

class QRCodeListAdapter(
    private val onClick: (QRCodeData) -> Unit
) : ListAdapter<QRCodeData, QRCodeListViewHolder>(QRCodeListDiffCallback) {

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): QRCodeListViewHolder {
        val view = LayoutInflater.from(parent.context)
            .inflate(R.layout.qrcode_list_item, parent, false)
        return QRCodeListViewHolder(view, onClick)
    }

    override fun onBindViewHolder(holder: QRCodeListViewHolder, position: Int) {
        val qrCodeData = getItem(position)
        holder.bind(qrCodeData)
    }

}

class QRCodeListViewHolder(
    itemView: View,
    val onClick: (QRCodeData) -> Unit
) : RecyclerView.ViewHolder(itemView) {
    private val qrCodeListItemTextView: TextView = itemView.findViewById(R.id.qrcode_data)
    private val qrCodeListItemImageView: ImageView = itemView.findViewById(R.id.qrcode_image)
    private var currentQrCodeData: QRCodeData? = null

    init {
        itemView.setOnClickListener {
            currentQrCodeData?.let {
                onClick(it)
            }
        }
    }

    fun bind(qrCodeData: QRCodeData) {
        currentQrCodeData = qrCodeData

        qrCodeListItemTextView.text = qrCodeData.data
        qrCodeListItemImageView.setImageBitmap(qrCodeData.bitmap)
    }
}

object QRCodeListDiffCallback : DiffUtil.ItemCallback<QRCodeData>() {
    override fun areItemsTheSame(oldItem: QRCodeData, newItem: QRCodeData): Boolean {
        return oldItem == newItem
    }

    override fun areContentsTheSame(oldItem: QRCodeData, newItem: QRCodeData): Boolean {
        return oldItem.data == newItem.data
    }
}


================================================
FILE: examples/android/src/main/java/io/github/g0dkar/qrcode/extra/QRCodeListDatasource.kt
================================================
package io.github.g0dkar.qrcode.extra

import android.content.Context
import android.content.SharedPreferences
import androidx.appcompat.app.AppCompatActivity.MODE_PRIVATE
import androidx.lifecycle.MutableLiveData
import io.github.g0dkar.qrcode.QRCodeData
import io.github.g0dkar.qrcode.QRCodeData.Companion.SEPARATOR
import io.github.g0dkar.qrcode.QRCodeData.Companion.STYLE_DEFAULT
import java.time.Instant
import java.time.ZoneOffset

object QRCodeListDatasource {
    private const val ERROR = "ERROR"
    private const val PREFERENCE_FILE = "qrCodeKotlinAndroidExample"

    private lateinit var sharedPreferences: SharedPreferences

    val liveData: MutableLiveData<List<QRCodeData>> = MutableLiveData(mutableListOf())

    fun fromContext(context: Context) {
        val currentList = liveData.value ?: listOf()
        sharedPreferences = context.getSharedPreferences(PREFERENCE_FILE, MODE_PRIVATE)

        val newList = currentList.toMutableList().apply {
            sharedPreferences.all
                .filterValues { it != null && it.toString().isNotBlank() }
                .mapTo(this) { (key, value) ->
                    val dataParts = value?.toString()?.split(SEPARATOR)

                    QRCodeData(
                        dataParts?.getOrNull(0)?.toString() ?: ERROR,
                        dataParts?.getOrNull(1)?.toIntOrNull() ?: 0,
                        Instant.ofEpochSecond(key.toLong()).atOffset(ZoneOffset.UTC),
                    )
                }

            if (isEmpty()) {
                add(QRCodeData("QRCode Kotlin", STYLE_DEFAULT))
            }

            sortDescending()
        }

        liveData.postValue(newList)
    }

    fun add(data: String, style: Int) {
        val currentList = liveData.value ?: listOf()
        val qrCodeData = QRCodeData(data, style)

        val editor = sharedPreferences.edit()
        qrCodeData.persist(editor)
        editor.apply()

        val newList = currentList.toMutableList()
            .apply { add(0, qrCodeData) }
        liveData.postValue(newList)
    }

    fun remove(timestamp: Long) {
        val currentList = liveData.value ?: listOf()
        val newList = currentList.toMutableList()

        sharedPreferences.edit()
            .remove(timestamp.toString())
            .apply()

        liveData.postValue(newList)
    }
}


================================================
FILE: examples/android/src/main/res/drawable/ic_launcher_background.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<vector
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:height="108dp"
  android:viewportHeight="108"
  android:viewportWidth="108"
  android:width="108dp">
  <path android:fillColor="#3DDC84"
    android:pathData="M0,0h108v108h-108z"/>
  <path android:fillColor="#00000000" android:pathData="M9,0L9,108"
    android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
  <path android:fillColor="#00000000" android:pathData="M19,0L19,108"
    android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
  <path android:fillColor="#00000000" android:pathData="M29,0L29,108"
    android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
  <path android:fillColor="#00000000" android:pathData="M39,0L39,108"
    android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
  <path android:fillColor="#00000000" android:pathData="M49,0L49,108"
    android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
  <path android:fillColor="#00000000" android:pathData="M59,0L59,108"
    android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
  <path android:fillColor="#00000000" android:pathData="M69,0L69,108"
    android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
  <path android:fillColor="#00000000" android:pathData="M79,0L79,108"
    android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
  <path android:fillColor="#00000000" android:pathData="M89,0L89,108"
    android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
  <path android:fillColor="#00000000" android:pathData="M99,0L99,108"
    android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
  <path android:fillColor="#00000000" android:pathData="M0,9L108,9"
    android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
  <path android:fillColor="#00000000" android:pathData="M0,19L108,19"
    android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
  <path android:fillColor="#00000000" android:pathData="M0,29L108,29"
    android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
  <path android:fillColor="#00000000" android:pathData="M0,39L108,39"
    android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
  <path android:fillColor="#00000000" android:pathData="M0,49L108,49"
    android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
  <path android:fillColor="#00000000" android:pathData="M0,59L108,59"
    android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
  <path android:fillColor="#00000000" android:pathData="M0,69L108,69"
    android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
  <path android:fillColor="#00000000" android:pathData="M0,79L108,79"
    android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
  <path android:fillColor="#00000000" android:pathData="M0,89L108,89"
    android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
  <path android:fillColor="#00000000" android:pathData="M0,99L108,99"
    android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
  <path android:fillColor="#00000000" android:pathData="M19,29L89,29"
    android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
  <path android:fillColor="#00000000" android:pathData="M19,39L89,39"
    android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
  <path android:fillColor="#00000000" android:pathData="M19,49L89,49"
    android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
  <path android:fillColor="#00000000" android:pathData="M19,59L89,59"
    android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
  <path android:fillColor="#00000000" android:pathData="M19,69L89,69"
    android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
  <path android:fillColor="#00000000" android:pathData="M19,79L89,79"
    android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
  <path android:fillColor="#00000000" android:pathData="M29,19L29,89"
    android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
  <path android:fillColor="#00000000" android:pathData="M39,19L39,89"
    android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
  <path android:fillColor="#00000000" android:pathData="M49,19L49,89"
    android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
  <path android:fillColor="#00000000" android:pathData="M59,19L59,89"
    android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
  <path android:fillColor="#00000000" android:pathData="M69,19L69,89"
    android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
  <path android:fillColor="#00000000" android:pathData="M79,19L79,89"
    android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
</vector>


================================================
FILE: examples/android/src/main/res/drawable-v24/ic_launcher_foreground.xml
================================================
<vector xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:aapt="http://schemas.android.com/aapt"
  android:height="108dp"
  android:viewportHeight="108"
  android:viewportWidth="108"
  android:width="108dp">
  <path
    android:pathData="M31,63.928c0,0 6.4,-11 12.1,-13.1c7.2,-2.6 26,-1.4 26,-1.4l38.1,38.1L107,108.928l-32,-1L31,63.928z">
    <aapt:attr name="android:fillColor">
      <gradient
        android:endX="85.84757"
        android:endY="92.4963"
        android:startX="42.9492"
        android:startY="49.59793"
        android:type="linear">
        <item
          android:color="#44000000"
          android:offset="0.0"/>
        <item
          android:color="#00000000"
          android:offset="1.0"/>
      </gradient>
    </aapt:attr>
  </path>
  <path
    android:fillColor="#FFFFFF"
    android:fillType="nonZero"
    android:pathData="M65.3,45.828l3.8,-6.6c0.2,-0.4 0.1,-0.9 -0.3,-1.1c-0.4,-0.2 -0.9,-0.1 -1.1,0.3l-3.9,6.7c-6.3,-2.8 -13.4,-2.8 -19.7,0l-3.9,-6.7c-0.2,-0.4 -0.7,-0.5 -1.1,-0.3C38.8,38.328 38.7,38.828 38.9,39.228l3.8,6.6C36.2,49.428 31.7,56.028 31,63.928h46C76.3,56.028 71.8,49.428 65.3,45.828zM43.4,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2c-0.3,-0.7 -0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C45.3,56.528 44.5,57.328 43.4,57.328L43.4,57.328zM64.6,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2s-0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C66.5,56.528 65.6,57.328 64.6,57.328L64.6,57.328z"
    android:strokeColor="#00000000"
    android:strokeWidth="1"/>
</vector>

================================================
FILE: examples/android/src/main/res/layout/activity_about.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    tools:context=".AboutActivity">

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        tools:srcCompat="@tools:sample/avatars" />
</androidx.constraintlayout.widget.ConstraintLayout>

================================================
FILE: examples/android/src/main/res/layout/activity_main.xml
================================================
<?xml version="1.0" encoding="utf-8"?>

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <com.google.android.material.appbar.MaterialToolbar
        android:id="@+id/titleBar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="?attr/colorPrimary"
        android:minHeight="?attr/actionBarSize"
        android:theme="?attr/actionBarTheme"
        android:contentDescription="@string/title"
        app:title="@string/title"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:menu="@menu/menu_main" />

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recycler_view"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        app:layoutManager="LinearLayoutManager"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/titleBar" />

    <com.google.android.material.floatingactionbutton.FloatingActionButton
        android:id="@+id/fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="16dp"
        android:contentDescription="@string/fab_content_description"
        android:src="@android:drawable/ic_input_add"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

================================================
FILE: examples/android/src/main/res/layout/activity_new_qrcode.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    tools:context=".NewQRCodeActivity">

    <EditText
        android:id="@+id/newQRCodeData"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:autofillHints="@string/new_qrcode_qrcode_data_label"
        android:hint="@string/new_qrcode_qrcode_data_label"
        android:inputType="textUri"
        android:minHeight="48dp"
        android:selectAllOnFocus="true"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/newQRCodeStyleLabel"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="16dp"
        android:text="@string/new_qrcode_style_label"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/newQRCodeData" />

    <Spinner
        android:id="@+id/newQRCodeStyle"
        android:layout_width="0dp"
        android:layout_height="48dp"
        android:layout_marginTop="16dp"
        android:entries="@array/styles_array"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/newQRCodeStyleLabel" />

    <Button
        android:id="@+id/newQRCodeBtn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="16dp"
        android:layout_gravity="start"
        android:contentDescription="@string/new_qrcode_btn"
        android:enabled="true"
        android:text="@string/new_qrcode_btn"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/newQRCodeStyle" />

    <ImageView
        android:id="@+id/newQRCodePreviewImage"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="16dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/newQRCodeBtn"
        tools:srcCompat="@tools:sample/avatars" />

</androidx.constraintlayout.widget.ConstraintLayout>

================================================
FILE: examples/android/src/main/res/layout/activity_qrcode_detail.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#E0F7FA"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    tools:context=".QRCodeDetailActivity">

    <ImageView
        android:id="@+id/qrCodeDetailImage"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="16dp"
        app:layout_constraintBottom_toTopOf="@+id/qrCodeDetailText"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        tools:srcCompat="@tools:sample/avatars" />

    <TextView
        android:id="@+id/qrCodeDetailText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:autoLink="all"
        android:autoSizeTextType="uniform"
        android:ellipsize="marquee"
        android:marqueeRepeatLimit="marquee_forever"
        android:textAppearance="@style/TextAppearance.AppCompat.Body1"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

    <com.google.android.material.floatingactionbutton.FloatingActionButton
        android:id="@+id/qrCodeDetailFab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:clickable="true"
        app:backgroundTint="@android:color/holo_red_light"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:srcCompat="@android:drawable/ic_menu_delete" />
</androidx.constraintlayout.widget.ConstraintLayout>

================================================
FILE: examples/android/src/main/res/layout/qrcode_list_item.xml
================================================
<?xml version="1.0" encoding="utf-8"?><!--
     Copyright (C) 2020 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.
     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.
-->

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <ImageView
        android:id="@+id/qrcode_image"
        android:layout_width="48dp"
        android:layout_height="48dp"
        android:layout_margin="10dp"
        android:contentDescription="@string/qrcode_image_description"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toStartOf="@+id/qrcode_data"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/qrcode_data"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="10dp"
        android:autoSizeTextType="uniform"
        android:ellipsize="marquee"
        android:marqueeRepeatLimit="marquee_forever"
        android:text="@string/qrcode_data_title"
        android:textAppearance="@style/TextAppearance.AppCompat.Body1"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toEndOf="@+id/qrcode_image"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

================================================
FILE: examples/android/src/main/res/menu/menu_main.xml
================================================
<menu xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:app="http://schemas.android.com/apk/res-auto"
  xmlns:tools="http://schemas.android.com/tools"
  tools:context="com.example.qrcodekotlinexampleapp.MainActivity">
  <item
    android:id="@+id/action_settings"
    android:icon="@android:drawable/ic_menu_info_details"
    android:orderInCategory="100"
    android:title="@string/action_about"
    app:showAsAction="ifRoom"/>
</menu>

================================================
FILE: examples/android/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
  <background android:drawable="@drawable/ic_launcher_background"/>
  <foreground android:drawable="@drawable/ic_launcher_foreground"/>
</adaptive-icon>

================================================
FILE: examples/android/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
  <background android:drawable="@drawable/ic_launcher_background"/>
  <foreground android:drawable="@drawable/ic_launcher_foreground"/>
</adaptive-icon>

================================================
FILE: examples/android/src/main/res/values/colors.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
  <color name="purple_200">#FFBB86FC</color>
  <color name="purple_500">#FF6200EE</color>
  <color name="purple_700">#FF3700B3</color>
  <color name="teal_200">#FF03DAC5</color>
  <color name="teal_700">#FF018786</color>
  <color name="black">#FF000000</color>
  <color name="white">#FFFFFFFF</color>
</resources>

================================================
FILE: examples/android/src/main/res/values/dimens.xml
================================================
<resources>
  <dimen name="fab_margin">16dp</dimen>
  <!-- Default screen margins, per the Android Design guidelines. -->
  <dimen name="activity_horizontal_margin">16dp</dimen>
  <dimen name="activity_vertical_margin">16dp</dimen>
</resources>

================================================
FILE: examples/android/src/main/res/values/strings.xml
================================================
<resources>
    <string name="app_name" translatable="false">QRCodeKotlinExampleApp</string>

    <string name="action_about">About</string>
    <string name="title">QRCode-Kotlin Lib Example App</string>
    <string name="new_qrcode_error">Error adding QRCode, please try again.</string>
    <string name="new_qrcode_error_preview">Error generating preview QRCode :(</string>

    <string name="qrcode_data_title">QRCode Data</string>
    <string name="qrcode_image_description">QRCode Image</string>
    <string name="fab_content_description">Create New QRCode</string>

    <string name="title_activity_new_qrcode">New QRCode</string>
    <string name="new_qrcode_qrcode_data_label">QRCode Data (Link, Text, anything)</string>
    <string name="new_qrcode_btn">Save QRCode</string>
    <string name="new_qrcode_image_desc">QRCode Preview</string>

    <string name="title_activity_qrcode_detail">QRCode Info</string>
    <string name="qrcode_detail_fab">Remove QRCode</string>

    <string name="new_qrcode_style_label">Style:</string>

    <string-array name="styles_array">
        <item>Spaced Squares (default)</item>
        <item>Squares</item>
        <item>Circles</item>
        <item>Rounded Squares</item>
    </string-array>
</resources>

================================================
FILE: examples/android/src/main/res/values/themes.xml
================================================
<resources xmlns:tools="http://schemas.android.com/tools">
  <!-- Base application theme. -->
  <style name="Theme.QRCodeKotlinExampleApp"
    parent="Theme.MaterialComponents.DayNight.DarkActionBar">
    <!-- Primary brand color. -->
    <item name="colorPrimary">@color/purple_500</item>
    <item name="colorPrimaryVariant">@color/purple_700</item>
    <item name="colorOnPrimary">@color/white</item>
    <!-- Secondary brand color. -->
    <item name="colorSecondary">@color/teal_200</item>
    <item name="colorSecondaryVariant">@color/teal_700</item>
    <item name="colorOnSecondary">@color/black</item>
    <!-- Status bar color. -->
    <item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
    <!-- Customize your theme here. -->
  </style>
  <style name="Theme.QRCodeKotlinExampleApp.NoActionBar">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
  </style>
  <style name="Theme.QRCodeKotlinExampleApp.AppBarOverlay"
    parent="ThemeOverlay.AppCompat.Dark.ActionBar"/>
  <style name="Theme.QRCodeKotlinExampleApp.PopupOverlay" parent="ThemeOverlay.AppCompat.Light"/>
</resources>

================================================
FILE: examples/android/src/main/res/values-land/dimens.xml
================================================
<resources>
  <dimen name="fab_margin">48dp</dimen>
  <dimen name="activity_horizontal_margin">48dp</dimen>
</resources>

================================================
FILE: examples/android/src/main/res/values-night/themes.xml
================================================
<resources xmlns:tools="http://schemas.android.com/tools">
  <!-- Base application theme. -->
  <style name="Theme.QRCodeKotlinExampleApp"
    parent="Theme.MaterialComponents.DayNight.DarkActionBar">
    <!-- Primary brand color. -->
    <item name="colorPrimary">@color/purple_200</item>
    <item name="colorPrimaryVariant">@color/purple_700</item>
    <item name="colorOnPrimary">@color/black</item>
    <!-- Secondary brand color. -->
    <item name="colorSecondary">@color/teal_200</item>
    <item name="colorSecondaryVariant">@color/teal_200</item>
    <item name="colorOnSecondary">@color/black</item>
    <!-- Status bar color. -->
    <item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
    <!-- Customize your theme here. -->
  </style>
</resources>

================================================
FILE: examples/android/src/main/res/values-pt-rBR/strings.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="action_about">Sobre</string>
    <string name="title">QRCode-Kotlin App de Exemplo</string>
    <string name="qrcode_data_title">Dado do QRCode</string>
    <string name="qrcode_image_description">Imagem do QRCode</string>
    <string name="fab_content_description">Criar Novo QRCode</string>
    <string name="new_qrcode_qrcode_data_label">Dados do QRCode (Link, Texto, etc.)</string>
    <string name="new_qrcode_btn">Salvar QRCode</string>
    <string name="new_qrcode_image_desc">Previsão do QRCode</string>
    <string name="new_qrcode_error">Erro ao adicionar QRCode, por favor tente novamente.</string>
    <string name="title_activity_new_qrcode">Novo QRCode</string>
    <string name="new_qrcode_error_preview">Erro gerando previsão de QRCode :(</string>
    <string name="title_activity_qrcode_detail">Informações do QRCode</string>
    <string name="qrcode_detail_fab">Remover QRCode</string>
    <string name="new_qrcode_style_label">Estilo:</string>
    <string-array name="styles_array">
        <item>Quadrados Espaçados (padrão)</item>
        <item>Quadrados</item>
        <item>Círculos</item>
        <item>Quadrados arredondados</item>
    </string-array>
</resources>

================================================
FILE: examples/android/src/main/res/values-w1240dp/dimens.xml
================================================
<resources>
  <dimen name="fab_margin">200dp</dimen>
  <dimen name="activity_horizontal_margin">200dp</dimen>
</resources>

================================================
FILE: examples/android/src/main/res/values-w600dp/dimens.xml
================================================
<resources>
  <dimen name="fab_margin">48dp</dimen>
  <dimen name="activity_horizontal_margin">48dp</dimen>
</resources>

================================================
FILE: examples/android/src/main/res/xml/backup_rules.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<!--
   Sample backup rules file; uncomment and customize as necessary.
   See https://developer.android.com/guide/topics/data/autobackup
   for details.
   Note: This file is ignored for devices older that API 31
   See https://developer.android.com/about/versions/12/backup-restore
-->
<full-backup-content>
  <!--
   <include domain="sharedpref" path="."/>
   <exclude domain="sharedpref" path="device.xml"/>
-->
</full-backup-content>

================================================
FILE: examples/android/src/main/res/xml/data_extraction_rules.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<!--
   Sample data extraction rules file; uncomment and customize as necessary.
   See https://developer.android.com/about/versions/12/backup-restore#xml-changes
   for details.
-->
<data-extraction-rules>
  <cloud-backup>
    <!-- TODO: Use <include> and <exclude> to control what is backed up.
        <include .../>
        <exclude .../>
        -->
  </cloud-backup>
  <!--
    <device-transfer>
        <include .../>
        <exclude .../>
    </device-transfer>
    -->
</data-extraction-rules>

================================================
FILE: examples/iosApp/.gitignore
================================================
# Xcode
.DS_Store
build/
*.pbxuser
*.mode1v3
*.mode2v3
*.perspectivev3
xcuserdata/

# Swift
*.swiftpm

# CocoaPods
Pods/
*.xcworkspace

# Carthage
Carthage/

# macOS
*.DS_Store

# iOS
*.ipa
*.xcarchive
*.xcuserstate
DerivedData/


================================================
FILE: examples/iosApp/iosApp/Assets.xcassets/AccentColor.colorset/Contents.json
================================================
{
  "colors" : [
    {
      "idiom" : "universal"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}


================================================
FILE: examples/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "platform" : "ios",
      "size" : "1024x1024"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}


================================================
FILE: examples/iosApp/iosApp/Assets.xcassets/Contents.json
================================================
{
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}


================================================
FILE: examples/iosApp/iosApp/Preview Content/Preview Assets.xcassets/Contents.json
================================================
{
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}


================================================
FILE: examples/iosApp/iosApp/presentation/ContentView.swift
================================================
//
//  ContentView.swift
//  iosApp
//
//  Created by Rui Canas on 26/11/2023.
//

import SwiftUI
import qrcode_kotlin

struct ContentView: View {

    let qrCode = QRCode
        .companion
        .ofSquares()
        .withBackgroundColor(bgColor: Colors().TRANSPARENT)
        .withColor(color: Colors().BLACK)
        .withSize(size: 10)
        .withInnerSpacing(innerSpacing: 0)
        .build(data: Strings.data)
        .renderToBytes(format: Strings.imageFormat)

    var body: some View {
        VStack(spacing: 30) {
            Text(Strings.title)
                .font(.title2)
                .foregroundColor(.blue)
                .bold()
            
            Image(
                uiImage: UIImage(data: qrCode.toData) ?? .init()
            )
            .resizable()
            .aspectRatio(contentMode: .fit)
            .frame(width: 200, height: 200)
            .background(Color.clear)
        }
    }
}

#Preview {
    ContentView()
}

private enum Strings {
    
    static let title = "QRCode-Kotlin"
    static let data = "https://github.com/g0dkar/qrcode-kotlin"
    static let imageFormat = "PNG"
}


================================================
FILE: examples/iosApp/iosApp/presentation/iosApp.swift
================================================
//
//  iosAppApp.swift
//  iosApp
//
//  Created by Rui Canas on 26/11/2023.
//

import SwiftUI

@main
struct iosApp: App {
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}


================================================
FILE: examples/iosApp/iosApp/utils/NativeParser.swift
================================================
//  NativeParser.swift
//  iosApp
//
//  Created by Rui Canas on 01/12/2023.
//

import qrcode_kotlin

extension KotlinByteArray {
    
    var toData: Data {

        var byteArray = [Int8]()
        for i in 0..<size {
            byteArray.append(self.get(index: i))
        }
        
        return Data(
            bytes: byteArray,
            count: byteArray.count
        )
    }
}

extension NSData {
    
    var toKotlinByteArray: KotlinByteArray {
        
        let byteCount = length
        return KotlinByteArray(size: Int32(byteCount)) { [weak self] index in
            var byte: Int8 = 0
            self?.getBytes(&byte, range: NSRange(location: Int(truncating: index), length: 1))
            return KotlinByte(value: byte)
        }
    }
}

extension Data {
    
    var toKotlinByteArary: KotlinByteArray { (self as NSData).toKotlinByteArray }
}


================================================
FILE: examples/iosApp/iosApp.xcodeproj/project.pbxproj
================================================
// !$*UTF8*$!
{
	archiveVersion = 1;
	classes = {
	};
	objectVersion = 56;
	objects = {

/* Begin PBXBuildFile section */
		6308BABD2B1A672C00D02457 /* NativeParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6308BABC2B1A672C00D02457 /* NativeParser.swift */; };
		634F842B2B13E22000C7FC04 /* iosApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 634F842A2B13E22000C7FC04 /* iosApp.swift */; };
		634F842D2B13E22000C7FC04 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 634F842C2B13E22000C7FC04 /* ContentView.swift */; };
		634F842F2B13E22100C7FC04 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 634F842E2B13E22100C7FC04 /* Assets.xcassets */; };
		634F84322B13E22100C7FC04 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 634F84312B13E22100C7FC04 /* Preview Assets.xcassets */; };
		634F843C2B13E22100C7FC04 /* iosAppTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 634F843B2B13E22100C7FC04 /* iosAppTests.swift */; };
		634F84462B13E22100C7FC04 /* iosAppUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 634F84452B13E22100C7FC04 /* iosAppUITests.swift */; };
		634F84482B13E22100C7FC04 /* iosAppUITestsLaunchTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 634F84472B13E22100C7FC04 /* iosAppUITestsLaunchTests.swift */; };
/* End PBXBuildFile section */

/* Begin PBXContainerItemProxy section */
		634F84382B13E22100C7FC04 /* PBXContainerItemProxy */ = {
			isa = PBXContainerItemProxy;
			containerPortal = 634F841F2B13E22000C7FC04 /* Project object */;
			proxyType = 1;
			remoteGlobalIDString = 634F84262B13E22000C7FC04;
			remoteInfo = iosApp;
		};
		634F84422B13E22100C7FC04 /* PBXContainerItemProxy */ = {
			isa = PBXContainerItemProxy;
			containerPortal = 634F841F2B13E22000C7FC04 /* Project object */;
			proxyType = 1;
			remoteGlobalIDString = 634F84262B13E22000C7FC04;
			remoteInfo = iosApp;
		};
/* End PBXContainerItemProxy section */

/* Begin PBXFileReference section */
		6308BABC2B1A672C00D02457 /* NativeParser.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NativeParser.swift; sourceTree = "<group>"; };
		634F84272B13E22000C7FC04 /* iosApp.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = iosApp.app; sourceTree = BUILT_PRODUCTS_DIR; };
		634F842A2B13E22000C7FC04 /* iosApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = iosApp.swift; sourceTree = "<group>"; };
		634F842C2B13E22000C7FC04 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = "<group>"; };
		634F842E2B13E22100C7FC04 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
		634F84312B13E22100C7FC04 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = "<group>"; };
		634F84372B13E22100C7FC04 /* iosAppTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = iosAppTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
		634F843B2B13E22100C7FC04 /* iosAppTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = iosAppTests.swift; sourceTree = "<group>"; };
		634F84412B13E22100C7FC04 /* iosAppUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = iosAppUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
		634F84452B13E22100C7FC04 /* iosAppUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = iosAppUITests.swift; sourceTree = "<group>"; };
		634F84472B13E22100C7FC04 /* iosAppUITestsLaunchTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = iosAppUITestsLaunchTests.swift; sourceTree = "<group>"; };
/* End PBXFileReference section */

/* Begin PBXFrameworksBuildPhase section */
		634F84242B13E22000C7FC04 /* Frameworks */ = {
			isa = PBXFrameworksBuildPhase;
			buildActionMask = 2147483647;
			files = (
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
		634F84342B13E22100C7FC04 /* Frameworks */ = {
			isa = PBXFrameworksBuildPhase;
			buildActionMask = 2147483647;
			files = (
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
		634F843E2B13E22100C7FC04 /* Frameworks */ = {
			isa = PBXFrameworksBuildPhase;
			buildActionMask = 2147483647;
			files = (
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
/* End PBXFrameworksBuildPhase section */

/* Begin PBXGroup section */
		6308BABA2B1A66C900D02457 /* utils */ = {
			isa = PBXGroup;
			children = (
				6308BABC2B1A672C00D02457 /* NativeParser.swift */,
			);
			path = utils;
			sourceTree = "<group>";
		};
		6308BABB2B1A66D800D02457 /* presentation */ = {
			isa = PBXGroup;
			children = (
				634F842A2B13E22000C7FC04 /* iosApp.swift */,
				634F842C2B13E22000C7FC04 /* ContentView.swift */,
			);
			path = presentation;
			sourceTree = "<group>";
		};
		634F841E2B13E22000C7FC04 = {
			isa = PBXGroup;
			children = (
				634F84292B13E22000C7FC04 /* iosApp */,
				634F843A2B13E22100C7FC04 /* iosAppTests */,
				634F84442B13E22100C7FC04 /* iosAppUITests */,
				634F84282B13E22000C7FC04 /* Products */,
			);
			sourceTree = "<group>";
		};
		634F84282B13E22000C7FC04 /* Products */ = {
			isa = PBXGroup;
			children = (
				634F84272B13E22000C7FC04 /* iosApp.app */,
				634F84372B13E22100C7FC04 /* iosAppTests.xctest */,
				634F84412B13E22100C7FC04 /* iosAppUITests.xctest */,
			);
			name = Products;
			sourceTree = "<group>";
		};
		634F84292B13E22000C7FC04 /* iosApp */ = {
			isa = PBXGroup;
			children = (
				6308BABB2B1A66D800D02457 /* presentation */,
				6308BABA2B1A66C900D02457 /* utils */,
				634F842E2B13E22100C7FC04 /* Assets.xcassets */,
				634F84302B13E22100C7FC04 /* Preview Content */,
			);
			path = iosApp;
			sourceTree = "<group>";
		};
		634F84302B13E22100C7FC04 /* Preview Content */ = {
			isa = PBXGroup;
			children = (
				634F84312B13E22100C7FC04 /* Preview Assets.xcassets */,
			);
			path = "Preview Content";
			sourceTree = "<group>";
		};
		634F843A2B13E22100C7FC04 /* iosAppTests */ = {
			isa = PBXGroup;
			children = (
				634F843B2B13E22100C7FC04 /* iosAppTests.swift */,
			);
			path = iosAppTests;
			sourceTree = "<group>";
		};
		634F84442B13E22100C7FC04 /* iosAppUITests */ = {
			isa = PBXGroup;
			children = (
				634F84452B13E22100C7FC04 /* iosAppUITests.swift */,
				634F84472B13E22100C7FC04 /* iosAppUITestsLaunchTests.swift */,
			);
			path = iosAppUITests;
			sourceTree = "<group>";
		};
/* End PBXGroup section */

/* Begin PBXNativeTarget section */
		634F84262B13E22000C7FC04 /* iosApp */ = {
			isa = PBXNativeTarget;
			buildConfigurationList = 634F844B2B13E22100C7FC04 /* Build configuration list for PBXNativeTarget "iosApp" */;
			buildPhases = (
				634F84542B13F37A00C7FC04 /* ShellScript */,
				634F84232B13E22000C7FC04 /* Sources */,
				634F84242B13E22000C7FC04 /* Frameworks */,
				634F84252B13E22000C7FC04 /* Resources */,
			);
			buildRules = (
			);
			dependencies = (
			);
			name = iosApp;
			productName = iosApp;
			productReference = 634F84272B13E22000C7FC04 /* iosApp.app */;
			productType = "com.apple.product-type.application";
		};
		634F84362B13E22100C7FC04 /* iosAppTests */ = {
			isa = PBXNativeTarget;
			buildConfigurationList = 634F844E2B13E22100C7FC04 /* Build configuration list for PBXNativeTarget "iosAppTests" */;
			buildPhases = (
				634F84332B13E22100C7FC04 /* Sources */,
				634F84342B13E22100C7FC04 /* Frameworks */,
				634F84352B13E22100C7FC04 /* Resources */,
			);
			buildRules = (
			);
			dependencies = (
				634F84392B13E22100C7FC04 /* PBXTargetDependency */,
			);
			name = iosAppTests;
			productName = iosAppTests;
			productReference = 634F84372B13E22100C7FC04 /* iosAppTests.xctest */;
			productType = "com.apple.product-type.bundle.unit-test";
		};
		634F84402B13E22100C7FC04 /* iosAppUITests */ = {
			isa = PBXNativeTarget;
			buildConfigurationList = 634F84512B13E22100C7FC04 /* Build configuration list for PBXNativeTarget "iosAppUITests" */;
			buildPhases = (
				634F843D2B13E22100C7FC04 /* Sources */,
				634F843E2B13E22100C7FC04 /* Frameworks */,
				634F843F2B13E22100C7FC04 /* Resources */,
			);
			buildRules = (
			);
			dependencies = (
				634F84432B13E22100C7FC04 /* PBXTargetDependency */,
			);
			name = iosAppUITests;
			productName = iosAppUITests;
			productReference = 634F84412B13E22100C7FC04 /* iosAppUITests.xctest */;
			productType = "com.apple.product-type.bundle.ui-testing";
		};
/* End PBXNativeTarget section */

/* Begin PBXProject section */
		634F841F2B13E22000C7FC04 /* Project object */ = {
			isa = PBXProject;
			attributes = {
				BuildIndependentTargetsInParallel = 1;
				LastSwiftUpdateCheck = 1510;
				LastUpgradeCheck = 1510;
				TargetAttributes = {
					634F84262B13E22000C7FC04 = {
						CreatedOnToolsVersion = 15.1;
					};
					634F84362B13E22100C7FC04 = {
						CreatedOnToolsVersion = 15.1;
						TestTargetID = 634F84262B13E22000C7FC04;
					};
					634F84402B13E22100C7FC04 = {
						CreatedOnToolsVersion = 15.1;
						TestTargetID = 634F84262B13E22000C7FC04;
					};
				};
			};
			buildConfigurationList = 634F84222B13E22000C7FC04 /* Build configuration list for PBXProject "iosApp" */;
			compatibilityVersion = "Xcode 14.0";
			developmentRegion = en;
			hasScannedForEncodings = 0;
			knownRegions = (
				en,
				Base,
			);
			mainGroup = 634F841E2B13E22000C7FC04;
			productRefGroup = 634F84282B13E22000C7FC04 /* Products */;
			projectDirPath = "";
			projectRoot = "";
			targets = (
				634F84262B13E22000C7FC04 /* iosApp */,
				634F84362B13E22100C7FC04 /* iosAppTests */,
				634F84402B13E22100C7FC04 /* iosAppUITests */,
			);
		};
/* End PBXProject section */

/* Begin PBXResourcesBuildPhase section */
		634F84252B13E22000C7FC04 /* Resources */ = {
			isa = PBXResourcesBuildPhase;
			buildActionMask = 2147483647;
			files = (
				634F84322B13E22100C7FC04 /* Preview Assets.xcassets in Resources */,
				634F842F2B13E22100C7FC04 /* Assets.xcassets in Resources */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
		634F84352B13E22100C7FC04 /* Resources */ = {
			isa = PBXResourcesBuildPhase;
			buildActionMask = 2147483647;
			files = (
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
		634F843F2B13E22100C7FC04 /* Resources */ = {
			isa = PBXResourcesBuildPhase;
			buildActionMask = 2147483647;
			files = (
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
/* End PBXResourcesBuildPhase section */

/* Begin PBXShellScriptBuildPhase section */
		634F84542B13F37A00C7FC04 /* ShellScript */ = {
			isa = PBXShellScriptBuildPhase;
			buildActionMask = 12;
			files = (
			);
			inputFileListPaths = (
			);
			inputPaths = (
			);
			outputFileListPaths = (
			);
			outputPaths = (
			);
			runOnlyForDeploymentPostprocessing = 0;
			shellPath = /bin/sh;
			shellScript = "cd \"$SRCROOT/../..\"\n./gradlew :embedAndSignAppleFrameworkForXcode\n";
		};
/* End PBXShellScriptBuildPhase section */

/* Begin PBXSourcesBuildPhase section */
		634F84232B13E22000C7FC04 /* Sources */ = {
			isa = PBXSourcesBuildPhase;
			buildActionMask = 2147483647;
			files = (
				634F842D2B13E22000C7FC04 /* ContentView.swift in Sources */,
				634F842B2B13E22000C7FC04 /* iosApp.swift in Sources */,
				6308BABD2B1A672C00D02457 /* NativeParser.swift in Sources */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
		634F84332B13E22100C7FC04 /* Sources */ = {
			isa = PBXSourcesBuildPhase;
			buildActionMask = 2147483647;
			files = (
				634F843C2B13E22100C7FC04 /* iosAppTests.swift in Sources */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
		634F843D2B13E22100C7FC04 /* Sources */ = {
			isa = PBXSourcesBuildPhase;
			buildActionMask = 2147483647;
			files = (
				634F84482B13E22100C7FC04 /* iosAppUITestsLaunchTests.swift in Sources */,
				634F84462B13E22100C7FC04 /* iosAppUITests.swift in Sources */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
/* End PBXSourcesBuildPhase section */

/* Begin PBXTargetDependency section */
		634F84392B13E22100C7FC04 /* PBXTargetDependency */ = {
			isa = PBXTargetDependency;
			target = 634F84262B13E22000C7FC04 /* iosApp */;
			targetProxy = 634F84382B13E22100C7FC04 /* PBXContainerItemProxy */;
		};
		634F84432B13E22100C7FC04 /* PBXTargetDependency */ = {
			isa = PBXTargetDependency;
			target = 634F84262B13E22000C7FC04 /* iosApp */;
			targetProxy = 634F84422B13E22100C7FC04 /* PBXContainerItemProxy */;
		};
/* End PBXTargetDependency section */

/* Begin XCBuildConfiguration section */
		634F84492B13E22100C7FC04 /* Debug */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ALWAYS_SEARCH_USER_PATHS = NO;
				ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
				CLANG_ANALYZER_NONNULL = YES;
				CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
				CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
				CLANG_ENABLE_MODULES = YES;
				CLANG_ENABLE_OBJC_ARC = YES;
				CLANG_ENABLE_OBJC_WEAK = 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_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_IMPLICIT_RETAIN_SELF = YES;
				CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
				CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
				CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
				CLANG_WARN_STRICT_PROTOTYPES = YES;
				CLANG_WARN_SUSPICIOUS_MOVE = YES;
				CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
				CLANG_WARN_UNREACHABLE_CODE = YES;
				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
				COPY_PHASE_STRIP = NO;
				DEBUG_INFORMATION_FORMAT = dwarf;
				ENABLE_STRICT_OBJC_MSGSEND = YES;
				ENABLE_TESTABILITY = YES;
				ENABLE_USER_SCRIPT_SANDBOXING = YES;
				GCC_C_LANGUAGE_STANDARD = gnu17;
				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 = 17.2;
				LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
				MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
				MTL_FAST_MATH = YES;
				ONLY_ACTIVE_ARCH = YES;
				SDKROOT = iphoneos;
				SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)";
				SWIFT_OPTIMIZATION_LEVEL = "-Onone";
			};
			name = Debug;
		};
		634F844A2B13E22100C7FC04 /* Release */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ALWAYS_SEARCH_USER_PATHS = NO;
				ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
				CLANG_ANALYZER_NONNULL = YES;
				CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
				CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
				CLANG_ENABLE_MODULES = YES;
				CLANG_ENABLE_OBJC_ARC = YES;
				CLANG_ENABLE_OBJC_WEAK = 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_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_IMPLICIT_RETAIN_SELF = YES;
				CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
				CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
				CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
				CLANG_WARN_STRICT_PROTOTYPES = YES;
				CLANG_WARN_SUSPICIOUS_MOVE = YES;
				CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
				CLANG_WARN_UNREACHABLE_CODE = YES;
				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
				COPY_PHASE_STRIP = NO;
				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
				ENABLE_NS_ASSERTIONS = NO;
				ENABLE_STRICT_OBJC_MSGSEND = YES;
				ENABLE_USER_SCRIPT_SANDBOXING = YES;
				GCC_C_LANGUAGE_STANDARD = gnu17;
				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 = 17.2;
				LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
				MTL_ENABLE_DEBUG_INFO = NO;
				MTL_FAST_MATH = YES;
				SDKROOT = iphoneos;
				SWIFT_COMPILATION_MODE = wholemodule;
				VALIDATE_PRODUCT = YES;
			};
			name = Release;
		};
		634F844C2B13E22100C7FC04 /* Debug */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
				ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
				CODE_SIGN_STYLE = Automatic;
				CURRENT_PROJECT_VERSION = 1;
				DEVELOPMENT_ASSET_PATHS = "\"iosApp/Preview Content\"";
				ENABLE_PREVIEWS = YES;
				FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../../build/xcode-frameworks/$(CONFIGURATION)/$(SDK_NAME)";
				GENERATE_INFOPLIST_FILE = YES;
				INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
				INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
				INFOPLIST_KEY_UILaunchScreen_Generation = YES;
				INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
				INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
				LD_RUNPATH_SEARCH_PATHS = (
					"$(inherited)",
					"@executable_path/Frameworks",
				);
				MARKETING_VERSION = 1.0;
				OTHER_LDFLAGS = (
					"$(inherited)",
					"-framework",
					qrcode_kotlin,
				);
				PRODUCT_BUNDLE_IDENTIFIER = g0dkar.iosApp;
				PRODUCT_NAME = "$(TARGET_NAME)";
				SWIFT_EMIT_LOC_STRINGS = YES;
				SWIFT_VERSION = 5.0;
				TARGETED_DEVICE_FAMILY = "1,2";
			};
			name = Debug;
		};
		634F844D2B13E22100C7FC04 /* Release */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
				ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
				CODE_SIGN_STYLE = Automatic;
				CURRENT_PROJECT_VERSION = 1;
				DEVELOPMENT_ASSET_PATHS = "\"iosApp/Preview Content\"";
				ENABLE_PREVIEWS = YES;
				FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../../shared/build/xcode-frameworks/$(CONFIGURATION)/$(SDK_NAME)";
				GENERATE_INFOPLIST_FILE = YES;
				INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
				INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
				INFOPLIST_KEY_UILaunchScreen_Generation = YES;
				INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
				INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
				LD_RUNPATH_SEARCH_PATHS = (
					"$(inherited)",
					"@executable_path/Frameworks",
				);
				MARKETING_VERSION = 1.0;
				OTHER_LDFLAGS = (
					"$(inherited)",
					"-framework",
					qrcode_kotlin,
				);
				PRODUCT_BUNDLE_IDENTIFIER = g0dkar.iosApp;
				PRODUCT_NAME = "$(TARGET_NAME)";
				SWIFT_EMIT_LOC_STRINGS = YES;
				SWIFT_VERSION = 5.0;
				TARGETED_DEVICE_FAMILY = "1,2";
			};
			name = Release;
		};
		634F844F2B13E22100C7FC04 /* Debug */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
				BUNDLE_LOADER = "$(TEST_HOST)";
				CODE_SIGN_STYLE = Automatic;
				CURRENT_PROJECT_VERSION = 1;
				GENERATE_INFOPLIST_FILE = YES;
				IPHONEOS_DEPLOYMENT_TARGET = 17.2;
				MARKETING_VERSION = 1.0;
				PRODUCT_BUNDLE_IDENTIFIER = g0dkar.iosAppTests;
				PRODUCT_NAME = "$(TARGET_NAME)";
				SWIFT_EMIT_LOC_STRINGS = NO;
				SWIFT_VERSION = 5.0;
				TARGETED_DEVICE_FAMILY = "1,2";
				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/iosApp.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/iosApp";
			};
			name = Debug;
		};
		634F84502B13E22100C7FC04 /* Release */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
				BUNDLE_LOADER = "$(TEST_HOST)";
				CODE_SIGN_STYLE = Automatic;
				CURRENT_PROJECT_VERSION = 1;
				GENERATE_INFOPLIST_FILE = YES;
				IPHONEOS_DEPLOYMENT_TARGET = 17.2;
				MARKETING_VERSION = 1.0;
				PRODUCT_BUNDLE_IDENTIFIER = g0dkar.iosAppTests;
				PRODUCT_NAME = "$(TARGET_NAME)";
				SWIFT_EMIT_LOC_STRINGS = NO;
				SWIFT_VERSION = 5.0;
				TARGETED_DEVICE_FAMILY = "1,2";
				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/iosApp.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/iosApp";
			};
			name = Release;
		};
		634F84522B13E22100C7FC04 /* Debug */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
				CODE_SIGN_STYLE = Automatic;
				CURRENT_PROJECT_VERSION = 1;
				GENERATE_INFOPLIST_FILE = YES;
				MARKETING_VERSION = 1.0;
				PRODUCT_BUNDLE_IDENTIFIER = g0dkar.iosAppUITests;
				PRODUCT_NAME = "$(TARGET_NAME)";
				SWIFT_EMIT_LOC_STRINGS = NO;
				SWIFT_VERSION = 5.0;
				TARGETED_DEVICE_FAMILY = "1,2";
				TEST_TARGET_NAME = iosApp;
			};
			name = Debug;
		};
		634F84532B13E22100C7FC04 /* Release */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
				CODE_SIGN_STYLE = Automatic;
				CURRENT_PROJECT_VERSION = 1;
				GENERATE_INFOPLIST_FILE = YES;
				MARKETING_VERSION = 1.0;
				PRODUCT_BUNDLE_IDENTIFIER = g0dkar.iosAppUITests;
				PRODUCT_NAME = "$(TARGET_NAME)";
				SWIFT_EMIT_LOC_STRINGS = NO;
				SWIFT_VERSION = 5.0;
				TARGETED_DEVICE_FAMILY = "1,2";
				TEST_TARGET_NAME = iosApp;
			};
			name = Release;
		};
/* End XCBuildConfiguration section */

/* Begin XCConfigurationList section */
		634F84222B13E22000C7FC04 /* Build configuration list for PBXProject "iosApp" */ = {
			isa = XCConfigurationList;
			buildConfigurations = (
				634F84492B13E22100C7FC04 /* Debug */,
				634F844A2B13E22100C7FC04 /* Release */,
			);
			defaultConfigurationIsVisible = 0;
			defaultConfigurationName = Release;
		};
		634F844B2B13E22100C7FC04 /* Build configuration list for PBXNativeTarget "iosApp" */ = {
			isa = XCConfigurationList;
			buildConfigurations = (
				634F844C2B13E22100C7FC04 /* Debug */,
				634F844D2B13E22100C7FC04 /* Release */,
			);
			defaultConfigurationIsVisible = 0;
			defaultConfigurationName = Release;
		};
		634F844E2B13E22100C7FC04 /* Build configuration list for PBXNativeTarget "iosAppTests" */ = {
			isa = XCConfigurationList;
			buildConfigurations = (
				634F844F2B13E22100C7FC04 /* Debug */,
				634F84502B13E22100C7FC04 /* Release */,
			);
			defaultConfigurationIsVisible = 0;
			defaultConfigurationName = Release;
		};
		634F84512B13E22100C7FC04 /* Build configuration list for PBXNativeTarget "iosAppUITests" */ = {
			isa = XCConfigurationList;
			buildConfigurations = (
				634F84522B13E22100C7FC04 /* Debug */,
				634F84532B13E22100C7FC04 /* Release */,
			);
			defaultConfigurationIsVisible = 0;
			defaultConfigurationName = Release;
		};
/* End XCConfigurationList section */
	};
	rootObject = 634F841F2B13E22000C7FC04 /* Project object */;
}


================================================
FILE: examples/iosApp/iosAppTests/iosAppTests.swift
================================================
//
//  iosAppTests.swift
//  iosAppTests
//
//  Created by Rui Canas on 26/11/2023.
//

import XCTest
@testable import iosApp

final class iosAppTests: XCTestCase {

    override func setUpWithError() throws {
        // Put setup code here. This method is called before the invocation of each test method in the class.
    }

    override func tearDownWithError() throws {
        // Put teardown code here. This method is called after the invocation of each test method in the class.
    }

    func testExample() throws {
        // This is an example of a functional test case.
        // Use XCTAssert and related functions to verify your tests produce the correct results.
        // Any test you write for XCTest can be annotated as throws and async.
        // Mark your test throws to produce an unexpected failure when your test encounters an uncaught error.
        // Mark your test async to allow awaiting for asynchronous code to complete. Check the results with assertions afterwards.
    }

    func testPerformanceExample() throws {
        // This is an example of a performance test case.
        self.measure {
            // Put the code you want to measure the time of here.
        }
    }

}


================================================
FILE: examples/iosApp/iosAppUITests/iosAppUITests.swift
================================================
//
//  iosAppUITests.swift
//  iosAppUITests
//
//  Created by Rui Canas on 26/11/2023.
//

import XCTest

final class iosAppUITests: XCTestCase {

    override func setUpWithError() throws {
        // Put setup code here. This method is called before the invocation of each test method in the class.

        // In UI tests it is usually best to stop immediately when a failure occurs.
        continueAfterFailure = false

        // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this.
    }

    override func tearDownWithError() throws {
        // Put teardown code here. This method is called after the invocation of each test method in the class.
    }

    func testExample() throws {
        // UI tests must launch the application that they test.
        let app = XCUIApplication()
        app.launch()

        // Use XCTAssert and related functions to verify your tests produce the correct results.
    }

    func testLaunchPerformance() throws {
        if #available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 7.0, *) {
            // This measures how long it takes to launch your application.
            measure(metrics: [XCTApplicationLaunchMetric()]) {
                XCUIApplication().launch()
            }
        }
    }
}


================================================
FILE: examples/iosApp/iosAppUITests/iosAppUITestsLaunchTests.swift
================================================
//
//  iosAppUITestsLaunchTests.swift
//  iosAppUITests
//
//  Created by Rui Canas on 26/11/2023.
//

import XCTest

final class iosAppUITestsLaunchTests: XCTestCase {

    override class var runsForEachTargetApplicationUIConfiguration: Bool {
        true
    }

    override func setUpWithError() throws {
        continueAfterFailure = false
    }

    func testLaunch() throws {
        let app = XCUIApplication()
        app.launch()

        // Insert steps here to perform after app launch but before taking a screenshot,
        // such as logging into a test account or navigating somewhere in the app

        let attachment = XCTAttachment(screenshot: app.screenshot())
        attachment.name = "Launch Screen"
        attachment.lifetime = .keepAlways
        add(attachment)
    }
}


================================================
FILE: examples/java/build.gradle.kts
================================================
plugins {
    java
}

repositories {
    mavenCentral()
    mavenLocal()
}

dependencies {
    implementation("io.github.g0dkar:qrcode-kotlin:4.5.0")
    implementation("org.jfree:org.jfree.svg:5.0.5")
}


================================================
FILE: examples/java/src/main/java/examples/Example01_Shapes.java
================================================
package examples;

import examples.customClasses.JVMTriangleShapeFunction;
import examples.customClasses.TriangleShapeFunction;
import qrcode.QRCode;

/**
 * Examples written for Java 17+
 */
public class Example01_Shapes { // NOSONAR
    public static void main(String[] args) {
        // All supported platforms
        // -----------------------
        // Squares (default)
        QRCode squareQRCode = QRCode.ofSquares() // <- See Here
                .build("Hello, Squares!");
        byte[] squarePngData = squareQRCode.renderToBytes();

        // Circles
        QRCode circleQRCode = QRCode.ofCircles() // <- See Here
                .build("Hello, Circles!");
        byte[] circlePngData = circleQRCode.renderToBytes();

        // Rounded Squares
        QRCode roundedSquareQRCode = QRCode.ofRoundedSquares() // <- See Here
                .build("Hello, Rounded Squares!");
        byte[] roundedSquarePngData = roundedSquareQRCode.renderToBytes();

        // Custom Shape
        // WARNING: For demonstration purposes only. My phone camera couldn't read it.
        QRCode customShapeQRCode = QRCode.ofCustomShape(new TriangleShapeFunction()) // <- See Here
                .build("Hello, Triangles!");
        byte[] customShapePngData = customShapeQRCode.renderToBytes();

        // Custom Shape - JVM-specific implementation
        // WARNING: For demonstration purposes only. My phone camera couldn't read it.
        QRCode customShapeQRCodeJVM = QRCode.ofCustomShape(new JVMTriangleShapeFunction()) // <- See Here
                .build("Hello, Triangles... from the JVM!");
        byte[] customShapePngDataJVM = customShapeQRCodeJVM.renderToBytes();

        // -----------------------
        // JVM-only code (saves the PNG Bytes to a file)
        Util.saveFile("examples/java/examples-results/example01-squares.png", squarePngData);
        Util.saveFile("examples/java/examples-results/example01-circles.png", circlePngData);
        Util.saveFile("examples/java/examples-results/example01-rounded-squares.png", roundedSquarePngData);
        Util.saveFile("examples/java/examples-results/example01-custom.png", customShapePngData);
        Util.saveFile("examples/java/examples-results/example01-custom-jvm.png", customShapePngDataJVM);
    }
}


================================================
FILE: examples/java/src/main/java/examples/Example02_Colors.java
================================================
package examples;

import qrcode.QRCode;
import qrcode.color.Colors;

/**
 * Examples written for Java 17+
 */
public class Example02_Colors { // NOSONAR
    public static void main(String[] args) {
        // All supported platforms
        // -----------------------
        // Squares (default)
        QRCode colorQRCode = QRCode.ofSquares()
                .withColor(Colors.ORANGE) // <- See Here
                .build("Orange");
        byte[] colorPngData = colorQRCode.renderToBytes();

        // Circles
        QRCode darkModeQRCode = QRCode.ofSquares()
                .withColor(Colors.css("#43454a"))           // <- See Here
                .withBackgroundColor(Colors.css("#1e1f22")) // <- See Here
                .build("Dark Mode QRCode");
        byte[] darkModePngData = darkModeQRCode.renderToBytes();

        // Rounded Squares
        QRCode gradientQRCode = QRCode.ofSquares()
                .withGradientColor(Colors.BISQUE, Colors.BLUE) // <- See Here
                .build("Weird gradient colors, but I think it's nice");
        byte[] gradientPngData = gradientQRCode.renderToBytes();

        // Custom Shape
        // WARNING: For demonstration purposes only. My phone camera couldn't read it.
        QRCode transparentQRCode = QRCode.ofSquares()
                .withBackgroundColor(Colors.TRANSPARENT)
                .build("You can put this on top of pretty much anything :)");
        byte[] transparentPngData = transparentQRCode.renderToBytes();

        // -----------------------
        // JVM-only code (saves the PNG Bytes to a file)
        Util.saveFile("examples/java/examples-results/example02-color.png", colorPngData);
        Util.saveFile("examples/java/examples-results/example02-dark-mode.png", darkModePngData);
        Util.saveFile("examples/java/examples-results/example02-gradient.png", gradientPngData);
        Util.saveFile("examples/java/examples-results/example02-transparent.png", transparentPngData);
    }
}


================================================
FILE: examples/java/src/main/java/examples/Example03_SVG.java
================================================
package examples;

import examples.svg.SVGGraphicsFactory;
import qrcode.QRCode;

/**
 * Examples written for Java 17+
 */
public class Example03_SVG { // NOSONAR
    public static void main(String[] args) {
        // All supported platforms
        // -----------------------
        // Squares (default)
        QRCode squareQRCode = QRCode.ofSquares()
                .withGraphicsFactory(new SVGGraphicsFactory()) // <- See Here
                .build("Hello, Squares!");
        byte[] squarePngData = squareQRCode.renderToBytes();

        // Circles
        QRCode circleQRCode = QRCode.ofCircles()
                .withGraphicsFactory(new SVGGraphicsFactory()) // <- See Here
                .build("Hello, Circles!");
        byte[] circlePngData = circleQRCode.renderToBytes();

        // Rounded Squares
        QRCode roundedSquareQRCode = QRCode.ofRoundedSquares()
                .withGraphicsFactory(new SVGGraphicsFactory()) // <- See Here
                .build("Hello, Rounded Squares!");
        byte[] roundedSquarePngData = roundedSquareQRCode.renderToBytes();

        // -----------------------
        // JVM-only code (saves the SVG to a file)
        Util.saveFile("examples/java/examples-results/example03-squares.svg", squarePngData);
        Util.saveFile("examples/java/examples-results/example03-circles.svg", circlePngData);
        Util.saveFile("examples/java/examples-results/example03-rounded-squares.svg", roundedSquarePngData);
    }
}


================================================
FILE: examples/java/src/main/java/examples/Util.java
================================================
package examples;

import java.io.FileOutputStream;

final class Util {
    private Util() {
    }

    public static void saveFile(String filename, byte[] data) {
        try (FileOutputStream fileOut = new FileOutputStream(filename)) {
            fileOut.write(data);
        } catch (Exception e) {
            throw new RuntimeException("Error while writing file", e); // NOSONAR
        }
    }
}


================================================
FILE: examples/java/src/main/java/examples/customClasses/JVMTriangleShapeFunction.java
================================================
package examples.customClasses;

import qrcode.QRCode;
import qrcode.render.QRCodeGraphics;
import qrcode.shape.DefaultShapeFunction;

import java.awt.*;

public class JVMTriangleShapeFunction extends DefaultShapeFunction {
    public JVMTriangleShapeFunction() {
        super(QRCode.DEFAULT_SQUARE_SIZE, 1);
    }

    public void fillRect(int x, int y, int width, int height, int color, QRCodeGraphics canvas) {
        int topCenterX = x + width / 2;
        int topCenterY = y;
        int bottomLeftX = x;
        int bottomLeftY = y + height;
        int bottomRightX = x + width;
        int bottomRightY = y + height;

        canvas.directDraw(it -> {
            Polygon triangle = new Polygon();
            triangle.addPoint(topCenterX, topCenterY);
            triangle.addPoint(bottomLeftX, bottomLeftY);
            triangle.addPoint(bottomRightX, bottomRightY);
            triangle.addPoint(topCenterX, topCenterY);

            int[] rgba = qrcode.color.Colors.getRGBA(color);

            it.setPaint(new Color(rgba[0], rgba[1], rgba[2], rgba[3]));

            it.fill(triangle);
        });
    }
}


================================================
FILE: examples/java/src/main/java/examples/customClasses/TriangleShapeFunction.java
================================================
package examples.customClasses;

import qrcode.QRCode;
import qrcode.render.QRCodeGraphics;
import qrcode.shape.DefaultShapeFunction;

public class TriangleShapeFunction extends DefaultShapeFunction {
    public TriangleShapeFunction() {
        super(QRCode.DEFAULT_SQUARE_SIZE, 1);
    }

    public void fillRect(int x, int y, int width, int height, int color, QRCodeGraphics canvas) {
        int topCenterX = x + width / 2;
        int topCenterY = y;
        int bottomLeftX = x;
        int bottomLeftY = y + height;
        int bottomRightX = x + width;
        int bottomRightY = y + height;

        // Line from top-center to bottom-left
        canvas.drawLine(topCenterX, topCenterY, bottomLeftX, bottomLeftY, color, 1.0);
        // Line from top-center to bottom-right
        canvas.drawLine(topCenterX, topCenterY, bottomRightX, bottomRightY, color, 1.0);
        // Line from bottom-left to bottom-right
        canvas.drawLine(bottomLeftX, bottomLeftY, bottomRightX, bottomRightY, color, 1.0);
    }
}


================================================
FILE: examples/java/src/main/java/examples/svg/SVGGraphicsFactory.java
================================================
package examples.svg;

import org.jetbrains.annotations.NotNull;
import qrcode.render.QRCodeGraphics;
import qrcode.render.QRCodeGraphicsFactory;

public class SVGGraphicsFactory extends QRCodeGraphicsFactory {
    /**
     * IntelliJ might show an error on this method, but it can be ignored. Not sure what causes it.
     */
    @NotNull
    @Override
    public QRCodeGraphics newGraphics(int width, int height) {
        return new SVGQRCodeGraphics(width, height);
    }
}


================================================
FILE: examples/java/src/main/java/examples/svg/SVGQRCodeGraphics.java
================================================
package examples.svg;

import org.jetbrains.annotations.NotNull;
import org.jfree.svg.SVGGraphics2D;
import qrcode.render.QRCodeGraphics;

import java.awt.*;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.nio.charset.StandardCharsets;

public class SVGQRCodeGraphics extends QRCodeGraphics {
    private final SVGGraphics2D graphics;

    public SVGQRCodeGraphics(int width, int height) {
        super(width, height);
        graphics = new SVGGraphics2D(width, height);
    }

    @NotNull
    @Override
    protected Graphics2D createGraphics() {
        return graphics;
    }

    @Override
    public void writeImage(@NotNull OutputStream destination, @NotNull String format) {
        try (OutputStreamWriter writer = new OutputStreamWriter(destination, StandardCharsets.UTF_8)) {
            writer.write(graphics.getSVGDocument());
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}


================================================
FILE: examples/js/qrcode-example.html
================================================
<!doctype html>
<html class="dark">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="preconnect" href="https://fonts.googleapis.com">
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
    <link href="https://fonts.googleapis.com/css2?family=Inter&display=swap" rel="stylesheet">
    <script src="https://cdn.tailwindcss.com?plugins=forms"></script>
    <script src="https://cdn.jsdelivr.net/gh/g0dkar/qrcode-kotlin@main/release/qrcode-kotlin.min.js"></script>
    <script>
      tailwind.config = {
        theme: {
          fontFamily: {
            display: ['Inter', 'system-ui', 'sans-serif'],
            sans: ['Inter', 'system-ui', 'sans-serif'],
          },
        },
      }
    </script>
</head>
<body class="bg-slate-500">
<div class="container mx-auto p-4">
    <div class="md:grid md:grid-cols-3 md:gap-6">
        <div class="mt-5 md:col-span-2 md:mt-0">
            <div class="shadow sm:overflow-hidden sm:rounded-md">
                <div class="space-y-6 bg-white px-4 py-5 sm:p-6">
                    <div>
                        <label for="qrcodeData" class="block text-sm font-medium text-gray-700">QRCode Content:</label>
                        <div class="mt-1">
                            <textarea id="qrcodeData" rows="3"
                                      class="mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-indigo-500 focus:ring-indigo-500 sm:text-sm"
                                      placeholder="Data to Encode into the QR Code"
                                      autofocus>https://qrcodekotlin.com</textarea>
                        </div>
                        <p class="mt-2 text-sm text-gray-500">You can encode strings (general text), numbers, URLs,
                            emails, pretty much anything. <span class="text-indigo-600">The more data you encode, the slower it'll be!</span>
                        </p>
                    </div>

                    <div>
                        <label for="qrcodeCellSize" class="block text-sm font-medium text-gray-700">Cell Size:</label>
                        <div class="mt-1">
                            <input type="number" min="5" max="250" id="qrcodeCellSize" name="qrcodeCellSize" value="25"
                                   class="mt-1 block rounded-md border-gray-300 shadow-sm focus:border-indigo-500 focus:ring-indigo-500 sm:text-sm"
                                   placeholder="How big each square on the resulting QRCode will be"/>
                        </div>
                        <p class="mt-2 text-sm text-gray-500">How big each square in the QRCode will be, in pixels. Default is 25. The
                            bigger this is, the larger the resulting QRCode will be. <span class="text-indigo-600">Increasing this should not affect much how long it takes to generate the QRCode ;)</span>
                        </p>
                    </div>
                </div>
                <div class="bg-gray-50 px-4 py-3 text-right sm:px-6">
                    <a id="downloadBtn" download="qrcode.png"
                            class="inline-flex justify-center rounded-md border border-transparent bg-indigo-600 py-2 px-4 text-sm font-medium text-white shadow-sm hover:bg-indigo-700 focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2">
                        <span class="pr-2">
                            <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor"
                                 class="w-5 h-5">
                                <path
                                    d="M10.75 2.75a.75.75 0 00-1.5 0v8.614L6.295 8.235a.75.75 0 10-1.09 1.03l4.25 4.5a.75.75 0 001.09 0l4.25-4.5a.75.75 0 00-1.09-1.03l-2.955 3.129V2.75z"/>
                                <path
                                    d="M3.5 12.75a.75.75 0 00-1.5 0v2.5A2.75 2.75 0 004.75 18h10.5A2.75 2.75 0 0018 15.25v-2.5a.75.75 0 00-1.5 0v2.5c0 .69-.56 1.25-1.25 1.25H4.75c-.69 0-1.25-.56-1.25-1.25v-2.5z"/>
                            </svg>
                        </span>

                        Download QRCode
                    </a>
                </div>
            </div>
        </div>

        <div class="md:col-span-1 sm:overflow-hidden">
            <div class="space-y-6 shadow bg-white px-4 py-5 sm:p-6 sm:rounded-md">
                <div class="px-4 sm:px-0">
                    <h3 class="text-lg font-medium leading-6 text-gray-900">Generated QR Code</h3>
                    <p class="mt-1 text-sm text-gray-600">This QR Code is being generated via JavaScript, in your
                        browser.
                        With the power of Kotlin! Know more about this
                        <a href="https://qrcodekotlin.com"
                           class="text-indigo-600 hover:text-indigo-900 after:content-['_↗']" target="_blank">
                            <span
                                class="underline decoration-indigo-600 decoration-2">here</span>
                        </a>
                        :)</p>

                    <div aria-hidden="true">
                        <div class="py-5">
                            <div class="border-t border-gray-200"></div>
                        </div>
                    </div>

                    <div class="mb-5">
                        <img id="qrcodeResult" width="100%" alt="QRCode Result"/>
                    </div>

                    <div class="text-sm text-gray-600">
                        <p>Image size: <span id="imgSize">...</span></p>
                        <p>Generated in: <span id="generatedTime">...</span></p>
                        <p class="pt-1 text-xs"><span class="italic">Tip: Right-click the QRCode above and "Save Image As..."</span>
                            😉</p>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>
<script>
    /*
  const QRCode = window['qrcode-kotlin'].io.github.g0dkar.qrcode.QRCode
  const qrcodeData = document.getElementById("qrcodeData")
  const timeEl = document.getElementById("generatedTime")
  const imgSizeEl = document.getElementById("imgSize")
  const imgEl = document.getElementById("qrcodeResult")
  const sizeEl = document.getElementById("qrcodeCellSize")
  const downloadBtn = document.getElementById("downloadBtn")

  const doRender = (data) => {
    const size = sizeEl.value

    const start = Date.now()
    const result = new QRCode(data).render(size)
    const finish = Date.now()

    const dataURL = result.toDataURL()
    downloadBtn.href = dataURL
    imgEl.src = dataURL
    timeEl.textContent = `${finish - start}ms`
    imgSizeEl.textContent = `${result.width}x${result.height}, each square is ${size}x${size}`
  }

  qrcodeData.onkeyup = (evt) => {
    const data = evt.target.value
    const prev = evt.target.$prev

    if (data !== prev) {
      if (evt.target.$timer) {
        clearTimeout(evt.target.$timer)
      }

      evt.target.$prev = data

      evt.target.$timer = setTimeout(() => {
        doRender(data)
      }, 500)
    }
  }

  sizeEl.onchange = () => {
    doRender(qrcodeData.value)
  }

  doRender(qrcodeData.value)
     */
</script>
</body>
</html>


================================================
FILE: examples/js/qrcode-kotlin.js
================================================
//region block: polyfills
if (typeof ArrayBuffer.isView === 'undefined') {
  ArrayBuffer.isView = function (a) {
    return a != null && a.__proto__ != null && a.__proto__.__proto__ === Int8Array.prototype.__proto__;
  };
}
if (typeof Array.prototype.fill === 'undefined') {
  // Polyfill from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/fill#Polyfill
  Object.defineProperty(Array.prototype, 'fill', {value: function (value) {
    // Steps 1-2.
    if (this == null) {
      throw new TypeError('this is null or not defined');
    }
    var O = Object(this); // Steps 3-5.
    var len = O.length >>> 0; // Steps 6-7.
    var start = arguments[1];
    var relativeStart = start >> 0; // Step 8.
    var k = relativeStart < 0 ? Math.max(len + relativeStart, 0) : Math.min(relativeStart, len); // Steps 9-10.
    var end = arguments[2];
    var relativeEnd = end === undefined ? len : end >> 0; // Step 11.
    var finalValue = relativeEnd < 0 ? Math.max(len + relativeEnd, 0) : Math.min(relativeEnd, len); // Step 12.
    while (k < finalValue) {
      O[k] = value;
      k++;
    }
     // Step 13.
    return O;
  }});
}
[Int8Array, Int16Array, Uint16Array, Int32Array, Float32Array, Float64Array].forEach(function (TypedArray) {
  if (typeof TypedArray.prototype.fill === 'undefined') {
    Object.defineProperty(TypedArray.prototype, 'fill', {value: Array.prototype.fill});
  }
});
if (typeof Math.clz32 === 'undefined') {
  Math.clz32 = function (log, LN2) {
    return function (x) {
      var asUint = x >>> 0;
      if (asUint === 0) {
        return 32;
      }
      return 31 - (log(asUint) / LN2 | 0) | 0; // the "| 0" acts like math.floor
    };
  }(Math.log, Math.LN2);
}
if (typeof Math.imul === 'undefined') {
  Math.imul = function imul(a, b) {
    return (a & 4.29490176E9) * (b & 65535) + (a & 65535) * (b | 0) | 0;
  };
}
//endregion
(function (root, factory) {
  if (typeof define === 'function' && define.amd)
    define(['exports'], factory);
  else if (typeof exports === 'object')
    factory(module.exports);
  else
    root['io.github.g0dkar:qrcode-kotlin'] = factory(typeof this['io.github.g0dkar:qrcode-kotlin'] === 'undefined' ? {} : this['io.github.g0dkar:qrcode-kotlin']);
}(this, function (_) {
  'use strict';
  //region block: imports
  var clz32 = Math.clz32;
  var imul = Math.imul;
  var isView = ArrayBuffer.isView;
  //endregion
  //region block: pre-declaration
  setMetadataFor(CharSequence, 'CharSequence', interfaceMeta);
  setMetadataFor(Number_0, 'Number', classMeta);
  setMetadataFor(Unit, 'Unit', objectMeta);
  setMetadataFor(IntCompanionObject, 'IntCompanionObject', objectMeta);
  setMetadataFor(Collection, 'Collection', interfaceMeta);
  setMetadataFor(AbstractCollection, 'AbstractCollection', classMeta, VOID, [Collection]);
  setMetadataFor(AbstractMutableCollection, 'AbstractMutableCollection', classMeta, AbstractCollection, [AbstractCollection, Collection]);
  setMetadataFor(Set, 'Set', interfaceMeta, VOID, [Collection]);
  setMetadataFor(AbstractMutableSet, 'AbstractMutableSet', classMeta, AbstractMutableCollection, [AbstractMutableCollection, Set, Collection]);
  setMetadataFor(HashSet, 'HashSet', classMeta, AbstractMutableSet, [AbstractMutableSet, Set, Collection], HashSet_init_$Create$);
  setMetadataFor(Companion, 'Companion', objectMeta);
  setMetadataFor(Itr, 'Itr', classMeta);
  setMetadataFor(KeysItr, 'KeysItr', classMeta, Itr);
  setMetadataFor(EntriesItr, 'EntriesItr', classMeta, Itr);
  setMetadataFor(Entry, 'Entry', interfaceMeta);
  setMetadataFor(EntryRef, 'EntryRef', classMeta, VOID, [Entry]);
  function containsAllEntries(m) {
    var tmp$ret$0;
    $l$block_0: {
      // Inline function 'kotlin.collections.all' call
      var tmp;
      if (isInterface(m, Collection)) {
        tmp = m.l();
      } else {
        tmp = false;
      }
      if (tmp) {
        tmp$ret$0 = true;
        break $l$block_0;
      }
      var tmp0_iterator = m.i();
      while (tmp0_iterator.q1()) {
        var element = tmp0_iterator.w1();
        // Inline function 'kotlin.collections.InternalMap.containsAllEntries.<anonymous>' call
        // Inline function 'kotlin.js.unsafeCast' call
        // Inline function 'kotlin.js.asDynamic' call
        var entry = element;
        var tmp_0;
        if (!(entry == null) ? isInterface(entry, Entry) : false) {
          tmp_0 = this.n2(entry);
        } else {
          tmp_0 = false;
        }
        if (!tmp_0) {
          tmp$ret$0 = false;
          break $l$block_0;
        }
      }
      tmp$ret$0 = true;
    }
    return tmp$ret$0;
  }
  setMetadataFor(InternalMap, 'InternalMap', interfaceMeta);
  setMetadataFor(InternalHashMap, 'InternalHashMap', classMeta, VOID, [InternalMap], InternalHashMap_init_$Create$);
  setMetadataFor(LinkedHashSet, 'LinkedHashSet', classMeta, HashSet, [HashSet, Set, Collection], LinkedHashSet_init_$Create$);
  setMetadataFor(KClass, 'KClass', interfaceMeta);
  setMetadataFor(KClassImpl, 'KClassImpl', classMeta, VOID, [KClass]);
  setMetadataFor(NothingKClassImpl, 'NothingKClassImpl', objectMeta, KClassImpl);
  setMetadataFor(ErrorKClass, 'ErrorKClass', classMeta, VOID, [KClass], ErrorKClass);
  setMetadataFor(PrimitiveKClassImpl, 'PrimitiveKClassImpl', classMeta, KClassImpl);
  setMetadataFor(SimpleKClassImpl, 'SimpleKClassImpl', classMeta, KClassImpl);
  setMetadataFor(PrimitiveClasses, 'PrimitiveClasses', objectMeta);
  setMetadataFor(Exception, 'Exception', classMeta, Error, VOID, Exception_init_$Create$);
  setMetadataFor(CharacterCodingException, 'CharacterCodingException', classMeta, Exception, VOID, CharacterCodingException_init_$Create$);
  setMetadataFor(StringBuilder, 'StringBuilder', classMeta, VOID, [CharSequence], StringBuilder_init_$Create$_0);
  setMetadataFor(Companion_0, 'Companion', objectMeta);
  setMetadataFor(Regex, 'Regex', classMeta);
  setMetadataFor(sam$kotlin_Comparator$0, 'sam$kotlin_Comparator$0', classMeta);
  setMetadataFor(Companion_1, 'Companion', objectMeta);
  setMetadataFor(Char, 'Char', classMeta);
  setMetadataFor(List, 'List', interfaceMeta, VOID, [Collection]);
  setMetadataFor(Map_0, 'Map', interfaceMeta);
  setMetadataFor(Companion_2, 'Companion', objectMeta);
  setMetadataFor(Enum, 'Enum', classMeta);
  setMetadataFor(Companion_3, 'Companion', objectMeta);
  setMetadataFor(Long, 'Long', classMeta, Number_0);
  setMetadataFor(Digit, 'Digit', objectMeta);
  setMetadataFor(RuntimeException, 'RuntimeException', classMeta, Exception, VOID, RuntimeException_init_$Create$);
  setMetadataFor(IllegalArgumentException, 'IllegalArgumentException', classMeta, RuntimeException, VOID, IllegalArgumentException_init_$Create$);
  setMetadataFor(IndexOutOfBoundsException, 'IndexOutOfBoundsException', classMeta, RuntimeException, VOID, IndexOutOfBoundsException_init_$Create$);
  setMetadataFor(IllegalStateException, 'IllegalStateException', classMeta, RuntimeException, VOID, IllegalStateException_init_$Create$);
  setMetadataFor(UnsupportedOperationException, 'UnsupportedOperationException', classMeta, RuntimeException, VOID, UnsupportedOperationException_init_$Create$);
  setMetadataFor(NoSuchElementException, 'NoSuchElementException', classMeta, RuntimeException, VOID, NoSuchElementException_init_$Create$);
  setMetadataFor(Error_0, 'Error', classMeta, Error, VOID, Error_init_$Create$);
  setMetadataFor(NumberFormatException, 'NumberFormatException', classMeta, IllegalArgumentException, VOID, NumberFormatException_init_$Create$);
  setMetadataFor(ConcurrentModificationException, 'ConcurrentModificationException', classMeta, RuntimeException, VOID, ConcurrentModificationException_init_$Create$);
  setMetadataFor(NullPointerException, 'NullPointerException', classMeta, RuntimeException, VOID, NullPointerException_init_$Create$);
  setMetadataFor(NoWhenBranchMatchedException, 'NoWhenBranchMatchedException', classMeta, RuntimeException, VOID, NoWhenBranchMatchedException_init_$Create$);
  setMetadataFor(ClassCastException, 'ClassCastException', classMeta, RuntimeException, VOID, ClassCastException_init_$Create$);
  setMetadataFor(Companion_4, 'Companion', objectMeta);
  setMetadataFor(Companion_5, 'Companion', objectMeta);
  setMetadataFor(EmptyIterator, 'EmptyIterator', objectMeta);
  setMetadataFor(IntIterator, 'IntIterator', classMeta);
  setMetadataFor(EmptySet, 'EmptySet', objectMeta, VOID, [Set]);
  setMetadataFor(Companion_6, 'Companion', objectMeta);
  setMetadataFor(IntProgression, 'IntProgression', classMeta);
  function isEmpty() {
    return compareTo_0(this.m4(), this.l4()) > 0;
  }
  setMetadataFor(ClosedRange, 'ClosedRange', interfaceMeta);
  setMetadataFor(IntRange, 'IntRange', classMeta, IntProgression, [IntProgression, ClosedRange]);
  setMetadataFor(IntProgressionIterator, 'IntProgressionIterator', classMeta, IntIterator);
  setMetadataFor(Companion_7, 'Companion', objectMeta);
  function isEmpty_0() {
    return !this.r4(this.m4(), this.l4());
  }
  setMetadataFor(ClosedFloatingPointRange, 'ClosedFloatingPointRange', interfaceMeta, VOID, [ClosedRange]);
  setMetadataFor(Companion_8, 'Companion', objectMeta);
  setMetadataFor(QRCode, 'QRCode', classMeta);
  setMetadataFor(QRCodeShapesEnum, 'QRCodeShapesEnum', classMeta, Enum);
  setMetadataFor(QRCodeBuilder, 'QRCodeBuilder', classMeta);
  setMetadataFor(Colors, 'Colors', objectMeta);
  function colorFn(square, qrCode, qrCodeGraphics) {
    var tmp;
    if (square.squareInfo.type.d5_1 === 4) {
      tmp = this.margin(square.row, square.col, qrCode, qrCodeGraphics);
    } else {
      tmp = square.dark === true ? this.fg(square.row, square.col, qrCode, qrCodeGraphics) : this.bg(square.row, square.col, qrCode, qrCodeGraphics);
    }
    return tmp;
  }
  function beforeRender(qrCode, qrCodeGraphics) {
  }
  function margin(row, col, qrCode, qrCodeGraphics) {
    return this.bg(row, col, qrCode, qrCodeGraphics);
  }
  setMetadataFor(QRCodeColorFunction, 'QRCodeColorFunction', interfaceMeta);
  setMetadataFor(DefaultColorFunction, 'DefaultColorFunction', classMeta, VOID, [QRCodeColorFunction], DefaultColorFunction);
  setMetadataFor(LinearGradientColorFunction, 'LinearGradientColorFunction', classMeta, VOID, [QRCodeColorFunction]);
  setMetadataFor(BitBuffer, 'BitBuffer', classMeta, VOID, VOID, BitBuffer);
  setMetadataFor(Polynomial, 'Polynomial', classMeta);
  setMetadataFor(QRCodeSetup, 'QRCodeSetup', objectMeta);
  setMetadataFor(QRCodeSquare, 'QRCodeSquare', classMeta);
  setMetadataFor(Companion_9, 'Companion', objectMeta);
  setMetadataFor(QRCodeSquareInfo, 'QRCodeSquareInfo', classMeta);
  setMetadataFor(QRCodeSquareType, 'QRCodeSquareType', classMeta, Enum);
  setMetadataFor(QRCodeRegion, 'QRCodeRegion', classMeta, Enum);
  setMetadataFor(QRData, 'QRData', classMeta);
  setMetadataFor(QR8BitByte, 'QR8BitByte', classMeta, QRData);
  setMetadataFor(QRAlphaNum, 'QRAlphaNum', classMeta, QRData);
  setMetadataFor(QRNumber, 'QRNumber', classMeta, QRData);
  setMetadataFor(QRMath, 'QRMath', objectMeta);
  setMetadataFor(QRUtil, 'QRUtil', objectMeta);
  setMetadataFor(Companion_10, 'Companion', objectMeta);
  setMetadataFor(RSBlock, 'RSBlock', classMeta);
  setMetadataFor(ErrorCorrectionLevel, 'ErrorCorrectionLevel', classMeta, Enum);
  setMetadataFor(MaskPattern, 'MaskPattern', classMeta, Enum);
  setMetadataFor(QRCodeDataType, 'QRCodeDataType', classMeta, Enum);
  setMetadataFor(Companion_11, 'Companion', objectMeta);
  setMetadataFor(QRCodeProcessor, 'QRCodeProcessor', classMeta);
  setMetadataFor(QRCodeGraphicsFactory, 'QRCodeGraphicsFactory', classMeta, VOID, VOID, QRCodeGraphicsFactory);
  setMetadataFor(Companion_12, 'Companion', objectMeta);
  function beforeRender_0(qrCode, qrCodeGraphics) {
  }
  setMetadataFor(QRCodeShapeFunction, 'QRCodeShapeFunction', interfaceMeta);
  setMetadataFor(DefaultShapeFunction, 'DefaultShapeFunction', classMeta, VOID, [QRCodeShapeFunction], DefaultShapeFunction);
  setMetadataFor(RoundSquaresShapeFunction, 'RoundSquaresShapeFunction', classMeta, DefaultShapeFunction, VOID, RoundSquaresShapeFunction);
  setMetadataFor(CircleShapeFunction, 'CircleShapeFunction', classMeta, RoundSquaresShapeFunction, VOID, CircleShapeFunction);
  setMetadataFor(Companion_13, 'Companion', objectMeta);
  setMetadataFor(Companion_14, 'Companion', objectMeta);
  setMetadataFor(QRCodeGraphics, 'QRCodeGraphics', classMeta);
  //endregion
  function CharSequence() {
  }
  function Number_0() {
  }
  function Unit() {
  }
  protoOf(Unit).toString = function () {
    return 'kotlin.Unit';
  };
  var Unit_instance;
  function Unit_getInstance() {
    return Unit_instance;
  }
  function IntCompanionObject() {
    this.MIN_VALUE = -2147483648;
    this.MAX_VALUE = 2147483647;
    this.SIZE_BYTES = 4;
    this.SIZE_BITS = 32;
  }
  protoOf(IntCompanionObject).c = function () {
    return this.MIN_VALUE;
  };
  protoOf(IntCompanionObject).d = function () {
    return this.MAX_VALUE;
  };
  protoOf(IntCompanionObject).e = function () {
    return this.SIZE_BYTES;
  };
  protoOf(IntCompanionObject).f = function () {
    return this.SIZE_BITS;
  };
  var IntCompanionObject_instance;
  function IntCompanionObject_getInstance() {
    return IntCompanionObject_instance;
  }
  function isNaN_0(_this__u8e3s4) {
    return !(_this__u8e3s4 === _this__u8e3s4);
  }
  function takeHighestOneBit(_this__u8e3s4) {
    var tmp;
    if (_this__u8e3s4 === 0) {
      tmp = 0;
    } else {
      var tmp_0 = 32 - 1 | 0;
      // Inline function 'kotlin.countLeadingZeroBits' call
      tmp = 1 << (tmp_0 - clz32(_this__u8e3s4) | 0);
    }
    return tmp;
  }
  function collectionToArray(collection) {
    return collectionToArrayCommonImpl(collection);
  }
  function setOf(element) {
    return hashSetOf([element]);
  }
  function mapCapacity(expectedSize) {
    return expectedSize;
  }
  function AbstractMutableCollection() {
    AbstractCollection.call(this);
  }
  protoOf(AbstractMutableCollection).toJSON = function () {
    return this.toArray();
  };
  function AbstractMutableSet() {
    AbstractMutableCollection.call(this);
  }
  protoOf(AbstractMutableSet).equals = function (other) {
    if (other === this)
      return true;
    if (!(!(other == null) ? isInterface(other, Set) : false))
      return false;
    return Companion_instance_5.m(this, other);
  };
  protoOf(AbstractMutableSet).hashCode = function () {
    return Companion_instance_5.n(this);
  };
  function arrayOfUninitializedElements(capacity) {
    // Inline function 'kotlin.require' call
    // Inline function 'kotlin.contracts.contract' call
    if (!(capacity >= 0)) {
      // Inline function 'kotlin.collections.arrayOfUninitializedElements.<anonymous>' call
      var message = 'capacity must be non-negative.';
      throw IllegalArgumentException_init_$Create$_0(toString_1(message));
    }
    // Inline function 'kotlin.js.unsafeCast' call
    // Inline function 'kotlin.arrayOfNulls' call
    // Inline function 'kotlin.js.asDynamic' call
    return fillArrayVal(Array(capacity), null);
  }
  function resetRange(_this__u8e3s4, fromIndex, toIndex) {
    // Inline function 'kotlin.js.nativeFill' call
    // Inline function 'kotlin.js.asDynamic' call
    _this__u8e3s4.fill(null, fromIndex, toIndex);
  }
  function copyOfUninitializedElements(_this__u8e3s4, newSize) {
    // Inline function 'kotlin.js.unsafeCast' call
    // Inline function 'kotlin.js.asDynamic' call
    return copyOf_1(_this__u8e3s4, newSize);
  }
  function HashSet_init_$Init$(map, $this) {
    AbstractMutableSet.call($this);
    HashSet.call($this);
    $this.o_1 = map;
    return $this;
  }
  function HashSet_init_$Init$_0($this) {
    HashSet_init_$Init$(InternalHashMap_init_$Create$(), $this);
    return $this;
  }
  function HashSet_init_$Create$() {
    return HashSet_init_$Init$_0(objectCreate(protoOf(HashSet)));
  }
  function HashSet_init_$Init$_1(initialCapacity, loadFactor, $this) {
    HashSet_init_$Init$(InternalHashMap_init_$Create$_0(initialCapacity, loadFactor), $this);
    return $this;
  }
  function HashSet_init_$Init$_2(initialCapacity, $this) {
    HashSet_init_$Init$_1(initialCapacity, 1.0, $this);
    return $this;
  }
  function HashSet_init_$Create$_0(initialCapacity) {
    return HashSet_init_$Init$_2(initialCapacity, objectCreate(protoOf(HashSet)));
  }
  protoOf(HashSet).g = function (element) {
    return this.o_1.p(element, true) == null;
  };
  protoOf(HashSet).j = function (element) {
    return this.o_1.q(element);
  };
  protoOf(HashSet).l = function () {
    return this.o_1.h() === 0;
  };
  protoOf(HashSet).i = function () {
    return this.o_1.r();
  };
  protoOf(HashSet).h = function () {
    return this.o_1.h();
  };
  function HashSet() {
  }
  function computeHashSize($this, capacity) {
    return takeHighestOneBit(imul(coerceAtLeast(capacity, 1), 3));
  }
  function computeShift($this, hashSize) {
    // Inline function 'kotlin.countLeadingZeroBits' call
    return clz32(hashSize) + 1 | 0;
  }
  function InternalHashMap_init_$Init$($this) {
    InternalHashMap_init_$Init$_0(8, $this);
    return $this;
  }
  function InternalHashMap_init_$Create$() {
    return InternalHashMap_init_$Init$(objectCreate(protoOf(InternalHashMap)));
  }
  function InternalHashMap_init_$Init$_0(initialCapacity, $this) {
    InternalHashMap.call($this, arrayOfUninitializedElements(initialCapacity), null, new Int32Array(initialCapacity), new Int32Array(computeHashSize(Companion_instance, initialCapacity)), 2, 0);
    return $this;
  }
  function InternalHashMap_init_$Init$_1(initialCapacity, loadFactor, $this) {
    InternalHashMap_init_$Init$_0(initialCapacity, $this);
    // Inline function 'kotlin.require' call
    // Inline function 'kotlin.contracts.contract' call
    if (!(loadFactor > 0.0)) {
      // Inline function 'kotlin.collections.InternalHashMap.<init>.<anonymous>' call
      var message = 'Non-positive load factor: ' + loadFactor;
      throw IllegalArgumentException_init_$Create$_0(toString_1(message));
    }
    return $this;
  }
  function InternalHashMap_init_$Create$_0(initialCapacity, loadFactor) {
    return InternalHashMap_init_$Init$_1(initialCapacity, loadFactor, objectCreate(protoOf(InternalHashMap)));
  }
  function _get_capacity__a9k9f3($this) {
    return $this.s_1.length;
  }
  function _get_hashSize__tftcho($this) {
    return $this.v_1.length;
  }
  function registerModification($this) {
    $this.z_1 = $this.z_1 + 1 | 0;
  }
  function ensureExtraCapacity($this, n) {
    if (shouldCompact($this, n)) {
      rehash($this, _get_hashSize__tftcho($this));
    } else {
      ensureCapacity($this, $this.x_1 + n | 0);
    }
  }
  function shouldCompact($this, extraCapacity) {
    var spareCapacity = _get_capacity__a9k9f3($this) - $this.x_1 | 0;
    var gaps = $this.x_1 - $this.h() | 0;
    return (spareCapacity < extraCapacity ? (gaps + spareCapacity | 0) >= extraCapacity : false) ? gaps >= (_get_capacity__a9k9f3($this) / 4 | 0) : false;
  }
  function ensureCapacity($this, minCapacity) {
    if (minCapacity < 0)
      throw RuntimeException_init_$Create$_0('too many elements');
    if (minCapacity > _get_capacity__a9k9f3($this)) {
      var newSize = Companion_instance_4.d1(_get_capacity__a9k9f3($this), minCapacity);
      $this.s_1 = copyOfUninitializedElements($this.s_1, newSize);
      var tmp = $this;
      var tmp0_safe_receiver = $this.t_1;
      tmp.t_1 = tmp0_safe_receiver == null ? null : copyOfUninitializedElements(tmp0_safe_receiver, newSize);
      $this.u_1 = copyOf($this.u_1, newSize);
      var newHashSize = computeHashSize(Companion_instance, newSize);
      if (newHashSize > _get_hashSize__tftcho($this)) {
        rehash($this, newHashSize);
      }
    }
  }
  function allocateValuesArray($this) {
    var curValuesArray = $this.t_1;
    if (!(curValuesArray == null))
      return curValuesArray;
    var newValuesArray = arrayOfUninitializedElements(_get_capacity__a9k9f3($this));
    $this.t_1 = newValuesArray;
    return newValuesArray;
  }
  function hash($this, key) {
    return key == null ? 0 : imul(hashCode(key), -1640531527) >>> $this.y_1 | 0;
  }
  function compact($this) {
    var i = 0;
    var j = 0;
    var valuesArray = $this.t_1;
    while (i < $this.x_1) {
      if ($this.u_1[i] >= 0) {
        $this.s_1[j] = $this.s_1[i];
        if (!(valuesArray == null)) {
          valuesArray[j] = valuesArray[i];
        }
        j = j + 1 | 0;
      }
      i = i + 1 | 0;
    }
    resetRange($this.s_1, j, $this.x_1);
    if (valuesArray == null)
      null;
    else {
      resetRange(valuesArray, j, $this.x_1);
    }
    $this.x_1 = j;
  }
  function rehash($this, newHashSize) {
    registerModification($this);
    if ($this.x_1 > $this.a1_1) {
      compact($this);
    }
    if (!(newHashSize === _get_hashSize__tftcho($this))) {
      $this.v_1 = new Int32Array(newHashSize);
      $this.y_1 = computeShift(Companion_instance, newHashSize);
    } else {
      fill($this.v_1, 0, 0, _get_hashSize__tftcho($this));
    }
    var i = 0;
    while (i < $this.x_1) {
      var tmp0 = i;
      i = tmp0 + 1 | 0;
      if (!putRehash($this, tmp0)) {
        throw IllegalStateException_init_$Create$_0('This cannot happen with fixed magic multiplier and grow-only hash array. Have object hashCodes changed?');
      }
    }
  }
  function putRehash($this, i) {
    var hash_0 = hash($this, $this.s_1[i]);
    var probesLeft = $this.w_1;
    while (true) {
      var index = $this.v_1[hash_0];
      if (index === 0) {
        $this.v_1[hash_0] = i + 1 | 0;
        $this.u_1[i] = hash_0;
        return true;
      }
      probesLeft = probesLeft - 1 | 0;
      if (probesLeft < 0)
        return false;
      var tmp0 = hash_0;
      hash_0 = tmp0 - 1 | 0;
      if (tmp0 === 0)
        hash_0 = _get_hashSize__tftcho($this) - 1 | 0;
    }
  }
  function findKey($this, key) {
    var hash_0 = hash($this, key);
    var probesLeft = $this.w_1;
    while (true) {
      var index = $this.v_1[hash_0];
      if (index === 0)
        return -1;
      if (index > 0 ? equals($this.s_1[index - 1 | 0], key) : false)
        return index - 1 | 0;
      probesLeft = probesLeft - 1 | 0;
      if (probesLeft < 0)
        return -1;
      var tmp0 = hash_0;
      hash_0 = tmp0 - 1 | 0;
      if (tmp0 === 0)
        hash_0 = _get_hashSize__tftcho($this) - 1 | 0;
    }
  }
  function addKey($this, key) {
    $this.e1();
    retry: while (true) {
      var hash_0 = hash($this, key);
      var tentativeMaxProbeDistance = coerceAtMost(imul($this.w_1, 2), _get_hashSize__tftcho($this) / 2 | 0);
      var probeDistance = 0;
      while (true) {
        var index = $this.v_1[hash_0];
        if (index <= 0) {
          if ($this.x_1 >= _get_capacity__a9k9f3($this)) {
            ensureExtraCapacity($this, 1);
            continue retry;
          }
          var tmp1 = $this.x_1;
          $this.x_1 = tmp1 + 1 | 0;
          var putIndex = tmp1;
          $this.s_1[putIndex] = key;
          $this.u_1[putIndex] = hash_0;
          $this.v_1[hash_0] = putIndex + 1 | 0;
          $this.a1_1 = $this.a1_1 + 1 | 0;
          registerModification($this);
          if (probeDistance > $this.w_1)
            $this.w_1 = probeDistance;
          return putIndex;
        }
        if (equals($this.s_1[index - 1 | 0], key)) {
          return -index | 0;
        }
        probeDistance = probeDistance + 1 | 0;
        if (probeDistance > tentativeMaxProbeDistance) {
          rehash($this, imul(_get_hashSize__tftcho($this), 2));
          continue retry;
        }
        var tmp4 = hash_0;
        hash_0 = tmp4 - 1 | 0;
        if (tmp4 === 0)
          hash_0 = _get_hashSize__tftcho($this) - 1 | 0;
      }
    }
  }
  function contentEquals($this, other) {
    return $this.a1_1 === other.h() ? $this.g1(other.f1()) : false;
  }
  function Companion() {
    this.h1_1 = -1640531527;
    this.i1_1 = 8;
    this.j1_1 = 2;
    this.k1_1 = -1;
  }
  var Companion_instance;
  function Companion_getInstance() {
    return Companion_instance;
  }
  function Itr(map) {
    this.l1_1 = map;
    this.m1_1 = 0;
    this.n1_1 = -1;
    this.o1_1 = this.l1_1.z_1;
    this.p1();
  }
  protoOf(Itr).p1 = function () {
    while (this.m1_1 < this.l1_1.x_1 ? this.l1_1.u_1[this.m1_1] < 0 : false) {
      this.m1_1 = this.m1_1 + 1 | 0;
    }
  };
  protoOf(Itr).q1 = function () {
    return this.m1_1 < this.l1_1.x_1;
  };
  protoOf(Itr).r1 = function () {
    if (!(this.l1_1.z_1 === this.o1_1))
      throw ConcurrentModificationException_init_$Create$();
  };
  function KeysItr(map) {
    Itr.call(this, map);
  }
  protoOf(KeysItr).w1 = function () {
    this.r1();
    if (this.m1_1 >= this.l1_1.x_1)
      throw NoSuchElementException_init_$Create$();
    var tmp = this;
    var tmp1 = this.m1_1;
    this.m1_1 = tmp1 + 1 | 0;
    tmp.n1_1 = tmp1;
    var result = this.l1_1.s_1[this.n1_1];
    this.p1();
    return result;
  };
  function EntriesItr(map) {
    Itr.call(this, map);
  }
  protoOf(EntriesItr).w1 = function () {
    this.r1();
    if (this.m1_1 >= this.l1_1.x_1)
      throw NoSuchElementException_init_$Create$();
    var tmp = this;
    var tmp1 = this.m1_1;
    this.m1_1 = tmp1 + 1 | 0;
    tmp.n1_1 = tmp1;
    var result = new EntryRef(this.l1_1, this.n1_1);
    this.p1();
    return result;
  };
  protoOf(EntriesItr).b2 = function () {
    if (this.m1_1 >= this.l1_1.x_1)
      throw NoSuchElementException_init_$Create$();
    var tmp = this;
    var tmp1 = this.m1_1;
    this.m1_1 = tmp1 + 1 | 0;
    tmp.n1_1 = tmp1;
    // Inline function 'kotlin.hashCode' call
    var tmp0_safe_receiver = this.l1_1.s_1[this.n1_1];
    var tmp1_elvis_lhs = tmp0_safe_receiver == null ? null : hashCode(tmp0_safe_receiver);
    var tmp_0 = tmp1_elvis_lhs == null ? 0 : tmp1_elvis_lhs;
    // Inline function 'kotlin.hashCode' call
    var tmp0_safe_receiver_0 = ensureNotNull(this.l1_1.t_1)[this.n1_1];
    var tmp1_elvis_lhs_0 = tmp0_safe_receiver_0 == null ? null : hashCode(tmp0_safe_receiver_0);
    var result = tmp_0 ^ (tmp1_elvis_lhs_0 == null ? 0 : tmp1_elvis_lhs_0);
    this.p1();
    return result;
  };
  protoOf(EntriesItr).c2 = function (sb) {
    if (this.m1_1 >= this.l1_1.x_1)
      throw NoSuchElementException_init_$Create$();
    var tmp = this;
    var tmp1 = this.m1_1;
    this.m1_1 = tmp1 + 1 | 0;
    tmp.n1_1 = tmp1;
    var key = this.l1_1.s_1[this.n1_1];
    if (equals(key, this.l1_1)) {
      sb.f2('(this Map)');
    } else {
      sb.e2(key);
    }
    sb.g2(_Char___init__impl__6a9atx(61));
    var value = ensureNotNull(this.l1_1.t_1)[this.n1_1];
    if (equals(value, this.l1_1)) {
      sb.f2('(this Map)');
    } else {
      sb.e2(value);
    }
    this.p1();
  };
  function EntryRef(map, index) {
    this.h2_1 = map;
    this.i2_1 = index;
  }
  protoOf(EntryRef).j2 = function () {
    return this.h2_1.s_1[this.i2_1];
  };
  protoOf(EntryRef).k2 = function () {
    return ensureNotNull(this.h2_1.t_1)[this.i2_1];
  };
  protoOf(EntryRef).equals = function (other) {
    var tmp;
    var tmp_0;
    if (!(other == null) ? isInterface(other, Entry) : false) {
      tmp_0 = equals(other.j2(), this.j2());
    } else {
      tmp_0 = false;
    }
    if (tmp_0) {
      tmp = equals(other.k2(), this.k2());
    } else {
      tmp = false;
    }
    return tmp;
  };
  protoOf(EntryRef).hashCode = function () {
    // Inline function 'kotlin.hashCode' call
    var tmp0_safe_receiver = this.j2();
    var tmp1_elvis_lhs = tmp0_safe_receiver == null ? null : hashCode(tmp0_safe_receiver);
    var tmp = tmp1_elvis_lhs == null ? 0 : tmp1_elvis_lhs;
    // Inline function 'kotlin.hashCode' call
    var tmp0_safe_receiver_0 = this.k2();
    var tmp1_elvis_lhs_0 = tmp0_safe_receiver_0 == null ? null : hashCode(tmp0_safe_receiver_0);
    return tmp ^ (tmp1_elvis_lhs_0 == null ? 0 : tmp1_elvis_lhs_0);
  };
  protoOf(EntryRef).toString = function () {
    return '' + this.j2() + '=' + this.k2();
  };
  function InternalHashMap(keysArray, valuesArray, presenceArray, hashArray, maxProbeDistance, length) {
    this.s_1 = keysArray;
    this.t_1 = valuesArray;
    this.u_1 = presenceArray;
    this.v_1 = hashArray;
    this.w_1 = maxProbeDistance;
    this.x_1 = length;
    this.y_1 = computeShift(Companion_instance, _get_hashSize__tftcho(this));
    this.z_1 = 0;
    this.a1_1 = 0;
    this.b1_1 = false;
  }
  protoOf(InternalHashMap).h = function () {
    return this.a1_1;
  };
  protoOf(InternalHashMap).q = function (key) {
    return findKey(this, key) >= 0;
  };
  protoOf(InternalHashMap).p = function (key, value) {
    var index = addKey(this, key);
    var valuesArray = allocateValuesArray(this);
    if (index < 0) {
      var oldValue = valuesArray[(-index | 0) - 1 | 0];
      valuesArray[(-index | 0) - 1 | 0] = value;
      return oldValue;
    } else {
      valuesArray[index] = value;
      return null;
    }
  };
  protoOf(InternalHashMap).equals = function (other) {
    var tmp;
    if (other === this) {
      tmp = true;
    } else {
      var tmp_0;
      if (!(other == null) ? isInterface(other, Map_0) : false) {
        tmp_0 = contentEquals(this, other);
      } else {
        tmp_0 = false;
      }
      tmp = tmp_0;
    }
    return tmp;
  };
  protoOf(InternalHashMap).hashCode = function () {
    var result = 0;
    var it = this.l2();
    while (it.q1()) {
      result = result + it.b2() | 0;
    }
    return result;
  };
  protoOf(InternalHashMap).toString = function () {
    var sb = StringBuilder_init_$Create$(2 + imul(this.a1_1, 3) | 0);
    sb.f2('{');
    var i = 0;
    var it = this.l2();
    while (it.q1()) {
      if (i > 0) {
        sb.f2(', ');
      }
      it.c2(sb);
      i = i + 1 | 0;
    }
    sb.f2('}');
    return sb.toString();
  };
  protoOf(InternalHashMap).e1 = function () {
    if (this.b1_1)
      throw UnsupportedOperationException_init_$Create$();
  };
  protoOf(InternalHashMap).m2 = function (entry) {
    var index = findKey(this, entry.j2());
    if (index < 0)
      return false;
    return equals(ensureNotNull(this.t_1)[index], entry.k2());
  };
  protoOf(InternalHashMap).n2 = function (entry) {
    return this.m2(isInterface(entry, Entry) ? entry : THROW_CCE());
  };
  protoOf(InternalHashMap).r = function () {
    return new KeysItr(this);
  };
  protoOf(InternalHashMap).l2 = function () {
    return new EntriesItr(this);
  };
  function InternalMap() {
  }
  function LinkedHashSet_init_$Init$($this) {
    HashSet_init_$Init$_0($this);
    LinkedHashSet.call($this);
    return $this;
  }
  function LinkedHashSet_init_$Create$() {
    return LinkedHashSet_init_$Init$(objectCreate(protoOf(LinkedHashSet)));
  }
  function LinkedHashSet_init_$Init$_0(initialCapacity, loadFactor, $this) {
    HashSet_init_$Init$_1(initialCapacity, loadFactor, $this);
    LinkedHashSet.call($this);
    return $this;
  }
  function LinkedHashSet_init_$Init$_1(initialCapacity, $this) {
    LinkedHashSet_init_$Init$_0(initialCapacity, 1.0, $this);
    return $this;
  }
  function LinkedHashSet_init_$Create$_0(initialCapacity) {
    return LinkedHashSet_init_$Init$_1(initialCapacity, objectCreate(protoOf(LinkedHashSet)));
  }
  function LinkedHashSet() {
  }
  function roundToInt(_this__u8e3s4) {
    var tmp;
    if (isNaN_0(_this__u8e3s4)) {
      throw IllegalArgumentException_init_$Create$_0('Cannot round NaN value.');
    } else if (_this__u8e3s4 > IntCompanionObject_instance.MAX_VALUE) {
      tmp = IntCompanionObject_instance.MAX_VALUE;
    } else if (_this__u8e3s4 < IntCompanionObject_instance.MIN_VALUE) {
      tmp = IntCompanionObject_instance.MIN_VALUE;
    } else {
      tmp = numberToInt(Math.round(_this__u8e3s4));
    }
    return tmp;
  }
  function KClass() {
  }
  function KClassImpl(jClass) {
    this.p2_1 = jClass;
  }
  protoOf(KClassImpl).q2 = function () {
    return this.p2_1;
  };
  protoOf(KClassImpl).equals = function (other) {
    var tmp;
    if (other instanceof NothingKClassImpl) {
      tmp = false;
    } else {
      if (other instanceof ErrorKClass) {
        tmp = false;
      } else {
        if (other instanceof KClassImpl) {
          tmp = equals(this.q2(), other.q2());
        } else {
          tmp = false;
        }
      }
    }
    return tmp;
  };
  protoOf(KClassImpl).hashCode = function () {
    var tmp0_safe_receiver = this.o2();
    var tmp1_elvis_lhs = tmp0_safe_receiver == null ? null : getStringHashCode(tmp0_safe_receiver);
    return tmp1_elvis_lhs == null ? 0 : tmp1_elvis_lhs;
  };
  protoOf(KClassImpl).toString = function () {
    return 'class ' + this.o2();
  };
  function NothingKClassImpl() {
    NothingKClassImpl_instance = this;
    KClassImpl.call(this, Object);
    this.s2_1 = 'Nothing';
  }
  protoOf(NothingKClassImpl).o2 = function () {
    return this.s2_1;
  };
  protoOf(NothingKClassImpl).q2 = function () {
    throw UnsupportedOperationException_init_$Create$_0("There's no native JS class for Nothing type");
  };
  protoOf(NothingKClassImpl).equals = function (other) {
    return other === this;
  };
  protoOf(NothingKClassImpl).hashCode = function () {
    return 0;
  };
  var NothingKClassImpl_instance;
  function NothingKClassImpl_getInstance() {
    if (NothingKClassImpl_instance == null)
      new NothingKClassImpl();
    return NothingKClassImpl_instance;
  }
  function ErrorKClass() {
  }
  protoOf(ErrorKClass).o2 = function () {
    var message = 'Unknown simpleName for ErrorKClass';
    throw IllegalStateException_init_$Create$_0(toString_1(message));
  };
  protoOf(ErrorKClass).equals = function (other) {
    return other === this;
  };
  protoOf(ErrorKClass).hashCode = function () {
    return 0;
  };
  function PrimitiveKClassImpl(jClass, givenSimpleName, isInstanceFunction) {
    KClassImpl.call(this, jClass);
    this.u2_1 = givenSimpleName;
    this.v2_1 = isInstanceFunction;
  }
  protoOf(PrimitiveKClassImpl).equals = function (other) {
    if (!(other instanceof PrimitiveKClassImpl))
      return false;
    return protoOf(KClassImpl).equals.call(this, other) ? this.u2_1 === other.u2_1 : false;
  };
  protoOf(PrimitiveKClassImpl).o2 = function () {
    return this.u2_1;
  };
  function SimpleKClassImpl(jClass) {
    KClassImpl.call(this, jClass);
    var tmp = this;
    // Inline function 'kotlin.js.unsafeCast' call
    // Inline function 'kotlin.js.asDynamic' call
    var tmp0_safe_receiver = jClass.$metadata$;
    tmp.x2_1 = tmp0_safe_receiver == null ? null : tmp0_safe_receiver.simpleName;
  }
  protoOf(SimpleKClassImpl).o2 = function () {
    return this.x2_1;
  };
  function get_functionClasses() {
    _init_properties_primitives_kt__3fums4();
    return functionClasses;
  }
  var functionClasses;
  function PrimitiveClasses$anyClass$lambda(it) {
    return !(it == null);
  }
  function PrimitiveClasses$numberClass$lambda(it) {
    return isNumber(it);
  }
  function PrimitiveClasses$booleanClass$lambda(it) {
    return !(it == null) ? typeof it === 'boolean' : false;
  }
  function PrimitiveClasses$byteClass$lambda(it) {
    return !(it == null) ? typeof it === 'number' : false;
  }
  function PrimitiveClasses$shortClass$lambda(it) {
    return !(it == null) ? typeof it === 'number' : false;
  }
  function PrimitiveClasses$intClass$lambda(it) {
    return !(it == null) ? typeof it === 'number' : false;
  }
  function PrimitiveClasses$floatClass$lambda(it) {
    return !(it == null) ? typeof it === 'number' : false;
  }
  function PrimitiveClasses$doubleClass$lambda(it) {
    return !(it == null) ? typeof it === 'number' : false;
  }
  function PrimitiveClasses$arrayClass$lambda(it) {
    return !(it == null) ? isArray(it) : false;
  }
  function PrimitiveClasses$stringClass$lambda(it) {
    return !(it == null) ? typeof it === 'string' : false;
  }
  function PrimitiveClasses$throwableClass$lambda(it) {
    return it instanceof Error;
  }
  function PrimitiveClasses$booleanArrayClass$lambda(it) {
    return !(it == null) ? isBooleanArray(it) : false;
  }
  function PrimitiveClasses$charArrayClass$lambda(it) {
    return !(it == null) ? isCharArray(it) : false;
  }
  function PrimitiveClasses$byteArrayClass$lambda(it) {
    return !(it == null) ? isByteArray(it) : false;
  }
  function PrimitiveClasses$shortArrayClass$lambda(it) {
    return !(it == null) ? isShortArray(it) : false;
  }
  function PrimitiveClasses$intArrayClass$lambda(it) {
    return !(it == null) ? isIntArray(it) : false;
  }
  function PrimitiveClasses$longArrayClass$lambda(it) {
    return !(it == null) ? isLongArray(it) : false;
  }
  function PrimitiveClasses$floatArrayClass$lambda(it) {
    return !(it == null) ? isFloatArray(it) : false;
  }
  function PrimitiveClasses$doubleArrayClass$lambda(it) {
    return !(it == null) ? isDoubleArray(it) : false;
  }
  function PrimitiveClasses$functionClass$lambda($arity) {
    return function (it) {
      var tmp;
      if (typeof it === 'function') {
        // Inline function 'kotlin.js.asDynamic' call
        tmp = it.length === $arity;
      } else {
        tmp = false;
      }
      return tmp;
    };
  }
  function PrimitiveClasses() {
    PrimitiveClasses_instance = this;
    var tmp = this;
    // Inline function 'kotlin.js.unsafeCast' call
    var tmp_0 = Object;
    tmp.anyClass = new PrimitiveKClassImpl(tmp_0, 'Any', PrimitiveClasses$anyClass$lambda);
    var tmp_1 = this;
    // Inline function 'kotlin.js.unsafeCast' call
    var tmp_2 = Number;
    tmp_1.numberClass = new PrimitiveKClassImpl(tmp_2, 'Number', PrimitiveClasses$numberClass$lambda);
    this.nothingClass = NothingKClassImpl_getInstance();
    var tmp_3 = this;
    // Inline function 'kotlin.js.unsafeCast' call
    var tmp_4 = Boolean;
    tmp_3.booleanClass = new PrimitiveKClassImpl(tmp_4, 'Boolean', PrimitiveClasses$booleanClass$lambda);
    var tmp_5 = this;
    // Inline function 'kotlin.js.unsafeCast' call
    var tmp_6 = Number;
    tmp_5.byteClass = new PrimitiveKClassImpl(tmp_6, 'Byte', PrimitiveClasses$byteClass$lambda);
    var tmp_7 = this;
    // Inline function 'kotlin.js.unsafeCast' call
    var tmp_8 = Number;
    tmp_7.shortClass = new PrimitiveKClassImpl(tmp_8, 'Short', PrimitiveClasses$shortClass$lambda);
    var tmp_9 = this;
    // Inline function 'kotlin.js.unsafeCast' call
    var tmp_10 = Number;
    tmp_9.intClass = new PrimitiveKClassImpl(tmp_10, 'Int', PrimitiveClasses$intClass$lambda);
    var tmp_11 = this;
    // Inline function 'kotlin.js.unsafeCast' call
    var tmp_12 = Number;
    tmp_11.floatClass = new PrimitiveKClassImpl(tmp_12, 'Float', PrimitiveClasses$floatClass$lambda);
    var tmp_13 = this;
    // Inline function 'kotlin.js.unsafeCast' call
    var tmp_14 = Number;
    tmp_13.doubleClass = new PrimitiveKClassImpl(tmp_14, 'Double', PrimitiveClasses$doubleClass$lambda);
    var tmp_15 = this;
    // Inline function 'kotlin.js.unsafeCast' call
    var tmp_16 = Array;
    tmp_15.arrayClass = new PrimitiveKClassImpl(tmp_16, 'Array', PrimitiveClasses$arrayClass$lambda);
    var tmp_17 = this;
    // Inline function 'kotlin.js.unsafeCast' call
    var tmp_18 = String;
    tmp_17.stringClass = new PrimitiveKClassImpl(tmp_18, 'String', PrimitiveClasses$stringClass$lambda);
    var tmp_19 = this;
    // Inline function 'kotlin.js.unsafeCast' call
    var tmp_20 = Error;
    tmp_19.throwableClass = new PrimitiveKClassImpl(tmp_20, 'Throwable', PrimitiveClasses$throwableClass$lambda);
    var tmp_21 = this;
    // Inline function 'kotlin.js.unsafeCast' call
    var tmp_22 = Array;
    tmp_21.booleanArrayClass = new PrimitiveKClassImpl(tmp_22, 'BooleanArray', PrimitiveClasses$booleanArrayClass$lambda);
    var tmp_23 = this;
    // Inline function 'kotlin.js.unsafeCast' call
    var tmp_24 = Uint16Array;
    tmp_23.charArrayClass = new PrimitiveKClassImpl(tmp_24, 'CharArray', PrimitiveClasses$charArrayClass$lambda);
    var tmp_25 = this;
    // Inline function 'kotlin.js.unsafeCast' call
    var tmp_26 = Int8Array;
    tmp_25.byteArrayClass = new PrimitiveKClassImpl(tmp_26, 'ByteArray', PrimitiveClasses$byteArrayClass$lambda);
    var tmp_27 = this;
    // Inline function 'kotlin.js.unsafeCast' call
    var tmp_28 = Int16Array;
    tmp_27.shortArrayClass = new PrimitiveKClassImpl(tmp_28, 'ShortArray', PrimitiveClasses$shortArrayClass$lambda);
    var tmp_29 = this;
    // Inline function 'kotlin.js.unsafeCast' call
    var tmp_30 = Int32Array;
    tmp_29.intArrayClass = new PrimitiveKClassImpl(tmp_30, 'IntArray', PrimitiveClasses$intArrayClass$lambda);
    var tmp_31 = this;
    // Inline function 'kotlin.js.unsafeCast' call
    var tmp_32 = Array;
    tmp_31.longArrayClass = new PrimitiveKClassImpl(tmp_32, 'LongArray', PrimitiveClasses$longArrayClass$lambda);
    var tmp_33 = this;
    // Inline function 'kotlin.js.unsafeCast' call
    var tmp_34 = Float32Array;
    tmp_33.floatArrayClass = new PrimitiveKClassImpl(tmp_34, 'FloatArray', PrimitiveClasses$floatArrayClass$lambda);
    var tmp_35 = this;
    // Inline function 'kotlin.js.unsafeCast' call
    var tmp_36 = Float64Array;
    tmp_35.doubleArrayClass = new PrimitiveKClassImpl(tmp_36, 'DoubleArray', PrimitiveClasses$doubleArrayClass$lambda);
  }
  protoOf(PrimitiveClasses).y2 = function () {
    return this.anyClass;
  };
  protoOf(PrimitiveClasses).z2 = function () {
    return this.numberClass;
  };
  protoOf(PrimitiveClasses).a3 = function () {
    return this.nothingClass;
  };
  protoOf(PrimitiveClasses).b3 = function () {
    return this.booleanClass;
  };
  protoOf(PrimitiveClasses).c3 = function () {
    return this.byteClass;
  };
  protoOf(PrimitiveClasses).d3 = function () {
    return this.shortClass;
  };
  protoOf(PrimitiveClasses).e3 = function () {
    return this.intClass;
  };
  protoOf(PrimitiveClasses).f3 = function () {
    return this.floatClass;
  };
  protoOf(PrimitiveClasses).g3 = function () {
    return this.doubleClass;
  };
  protoOf(PrimitiveClasses).h3 = function () {
    return this.arrayClass;
  };
  protoOf(PrimitiveClasses).i3 = function () {
    return this.stringClass;
  };
  protoOf(PrimitiveClasses).j3 = function () {
    return this.throwableClass;
  };
  protoOf(PrimitiveClasses).k3 = function () {
    return this.booleanArrayClass;
  };
  protoOf(PrimitiveClasses).l3 = function () {
    return this.charArrayClass;
  };
  protoOf(PrimitiveClasses).m3 = function () {
    return this.byteArrayClass;
  };
  protoOf(PrimitiveClasses).n3 = function () {
    return this.shortArrayClass;
  };
  protoOf(PrimitiveClasses).o3 = function () {
    return this.intArrayClass;
  };
  protoOf(PrimitiveClasses).p3 = function () {
    return this.longArrayClass;
  };
  protoOf(PrimitiveClasses).q3 = function () {
    return this.floatArrayClass;
  };
  protoOf(PrimitiveClasses).r3 = function () {
    return this.doubleArrayClass;
  };
  protoOf(PrimitiveClasses).functionClass = function (arity) {
    var tmp0_elvis_lhs = get_functionClasses()[arity];
    var tmp;
    if (tmp0_elvis_lhs == null) {
      // Inline function 'kotlin.run' call
      // Inline function 'kotlin.contracts.contract' call
      // Inline function 'kotlin.reflect.js.internal.PrimitiveClasses.functionClass.<anonymous>' call
      // Inline function 'kotlin.js.unsafeCast' call
      var tmp_0 = Function;
      var tmp_1 = 'Function' + arity;
      var result = new PrimitiveKClassImpl(tmp_0, tmp_1, PrimitiveClasses$functionClass$lambda(arity));
      // Inline function 'kotlin.js.asDynamic' call
      get_functionClasses()[arity] = result;
      tmp = result;
    } else {
      tmp = tmp0_elvis_lhs;
    }
    return tmp;
  };
  var PrimitiveClasses_instance;
  function PrimitiveClasses_getInstance() {
    if (PrimitiveClasses_instance == null)
      new PrimitiveClasses();
    return PrimitiveClasses_instance;
  }
  var properties_initialized_primitives_kt_jle18u;
  function _init_properties_primitives_kt__3fums4() {
    if (!properties_initialized_primitives_kt_jle18u) {
      properties_initialized_primitives_kt_jle18u = true;
      // Inline function 'kotlin.arrayOfNulls' call
      functionClasses = fillArrayVal(Array(0), null);
    }
  }
  function getKClass(jClass) {
    var tmp;
    if (Array.isArray(jClass)) {
      // Inline function 'kotlin.js.unsafeCast' call
      // Inline function 'kotlin.js.asDynamic' call
      tmp = getKClassM(jClass);
    } else {
      // Inline function 'kotlin.js.unsafeCast' call
      // Inline function 'kotlin.js.asDynamic' call
      tmp = getKClass1(jClass);
    }
    return tmp;
  }
  function getKClassM(jClasses) {
    var tmp;
    switch (jClasses.length) {
      case 1:
        tmp = getKClass1(jClasses[0]);
        break;
      case 0:
        // Inline function 'kotlin.js.unsafeCast' call

        // Inline function 'kotlin.js.asDynamic' call

        tmp = NothingKClassImpl_getInstance();
        break;
      default:
        // Inline function 'kotlin.js.unsafeCast' call

        // Inline function 'kotlin.js.asDynamic' call

        tmp = new ErrorKClass();
        break;
    }
    return tmp;
  }
  function getKClass1(jClass) {
    if (jClass === String) {
      // Inline function 'kotlin.js.unsafeCast' call
      // Inline function 'kotlin.js.asDynamic' call
      return PrimitiveClasses_getInstance().stringClass;
    }
    // Inline function 'kotlin.js.asDynamic' call
    var metadata = jClass.$metadata$;
    var tmp;
    if (metadata != null) {
      var tmp_0;
      if (metadata.$kClass$ == null) {
        var kClass = new SimpleKClassImpl(jClass);
        metadata.$kClass$ = kClass;
        tmp_0 = kClass;
      } else {
        tmp_0 = metadata.$kClass$;
      }
      tmp = tmp_0;
    } else {
      tmp = new SimpleKClassImpl(jClass);
    }
    return tmp;
  }
  function getKClassFromExpression(e) {
    // Inline function 'kotlin.js.unsafeCast' call
    var tmp;
    switch (typeof e) {
      case 'string':
        tmp = PrimitiveClasses_getInstance().stringClass;
        break;
      case 'number':
        var tmp_0;
        // Inline function 'kotlin.js.asDynamic' call

        // Inline function 'kotlin.js.jsBitwiseOr' call

        if ((e | 0) === e) {
          tmp_0 = PrimitiveClasses_getInstance().intClass;
        } else {
          tmp_0 = PrimitiveClasses_getInstance().doubleClass;
        }

        tmp = tmp_0;
        break;
      case 'boolean':
        tmp = PrimitiveClasses_getInstance().booleanClass;
        break;
      case 'function':
        var tmp_1 = PrimitiveClasses_getInstance();
        // Inline function 'kotlin.js.asDynamic' call

        tmp = tmp_1.functionClass(e.length);
        break;
      default:
        var tmp_2;
        if (isBooleanArray(e)) {
          tmp_2 = PrimitiveClasses_getInstance().booleanArrayClass;
        } else {
          if (isCharArray(e)) {
            tmp_2 = PrimitiveClasses_getInstance().charArrayClass;
          } else {
            if (isByteArray(e)) {
              tmp_2 = PrimitiveClasses_getInstance().byteArrayClass;
            } else {
              if (isShortArray(e)) {
                tmp_2 = PrimitiveClasses_getInstance().shortArrayClass;
              } else {
                if (isIntArray(e)) {
                  tmp_2 = PrimitiveClasses_getInstance().intArrayClass;
                } else {
                  if (isLongArray(e)) {
                    tmp_2 = PrimitiveClasses_getInstance().longArrayClass;
                  } else {
                    if (isFloatArray(e)) {
                      tmp_2 = PrimitiveClasses_getInstance().floatArrayClass;
                    } else {
                      if (isDoubleArray(e)) {
                        tmp_2 = PrimitiveClasses_getInstance().doubleArrayClass;
                      } else {
                        if (isInterface(e, KClass)) {
                          tmp_2 = getKClass(KClass);
                        } else {
                          if (isArray(e)) {
                            tmp_2 = PrimitiveClasses_getInstance().arrayClass;
                          } else {
                            var constructor = Object.getPrototypeOf(e).constructor;
                            var tmp_3;
                            if (constructor === Object) {
                              tmp_3 = PrimitiveClasses_getInstance().anyClass;
                            } else if (constructor === Error) {
                              tmp_3 = PrimitiveClasses_getInstance().throwableClass;
                            } else {
                              var jsClass = construc
Download .txt
gitextract_a8h010na/

├── .editorconfig
├── .gitattributes
├── .github/
│   ├── FUNDING.yml
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug_report.md
│   │   └── feature_request.md
│   ├── renovate.json
│   └── workflows/
│       ├── dokka-update.yml
│       └── run-tests.yml
├── .gitignore
├── .run/
│   ├── Build.run.xml
│   ├── Publish Distribution - Sonar.run.xml
│   ├── Publish to Local.run.xml
│   └── Run Tests.run.xml
├── CHANGELOG.md
├── CNAME
├── CODE_OF_CONDUCT.md
├── LICENSE
├── README.md
├── README.pt-br.md
├── _config.yml
├── build.gradle.kts
├── examples/
│   ├── android/
│   │   ├── build.gradle.kts
│   │   ├── proguard-rules.pro
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           ├── java/
│   │           │   └── io/
│   │           │       └── github/
│   │           │           └── g0dkar/
│   │           │               └── qrcode/
│   │           │                   ├── AboutActivity.kt
│   │           │                   ├── NewQRCodeActivity.kt
│   │           │                   ├── QRCodeData.kt
│   │           │                   ├── QRCodeDetailActivity.kt
│   │           │                   ├── QRCodeListActivity.kt
│   │           │                   └── extra/
│   │           │                       ├── QRCodeListAdapter.kt
│   │           │                       └── QRCodeListDatasource.kt
│   │           └── res/
│   │               ├── drawable/
│   │               │   └── ic_launcher_background.xml
│   │               ├── drawable-v24/
│   │               │   └── ic_launcher_foreground.xml
│   │               ├── layout/
│   │               │   ├── activity_about.xml
│   │               │   ├── activity_main.xml
│   │               │   ├── activity_new_qrcode.xml
│   │               │   ├── activity_qrcode_detail.xml
│   │               │   └── qrcode_list_item.xml
│   │               ├── menu/
│   │               │   └── menu_main.xml
│   │               ├── mipmap-anydpi-v26/
│   │               │   ├── ic_launcher.xml
│   │               │   └── ic_launcher_round.xml
│   │               ├── values/
│   │               │   ├── colors.xml
│   │               │   ├── dimens.xml
│   │               │   ├── strings.xml
│   │               │   └── themes.xml
│   │               ├── values-land/
│   │               │   └── dimens.xml
│   │               ├── values-night/
│   │               │   └── themes.xml
│   │               ├── values-pt-rBR/
│   │               │   └── strings.xml
│   │               ├── values-w1240dp/
│   │               │   └── dimens.xml
│   │               ├── values-w600dp/
│   │               │   └── dimens.xml
│   │               └── xml/
│   │                   ├── backup_rules.xml
│   │                   └── data_extraction_rules.xml
│   ├── iosApp/
│   │   ├── .gitignore
│   │   ├── iosApp/
│   │   │   ├── Assets.xcassets/
│   │   │   │   ├── AccentColor.colorset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── AppIcon.appiconset/
│   │   │   │   │   └── Contents.json
│   │   │   │   └── Contents.json
│   │   │   ├── Preview Content/
│   │   │   │   └── Preview Assets.xcassets/
│   │   │   │       └── Contents.json
│   │   │   ├── presentation/
│   │   │   │   ├── ContentView.swift
│   │   │   │   └── iosApp.swift
│   │   │   └── utils/
│   │   │       └── NativeParser.swift
│   │   ├── iosApp.xcodeproj/
│   │   │   └── project.pbxproj
│   │   ├── iosAppTests/
│   │   │   └── iosAppTests.swift
│   │   └── iosAppUITests/
│   │       ├── iosAppUITests.swift
│   │       └── iosAppUITestsLaunchTests.swift
│   ├── java/
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               └── examples/
│   │                   ├── Example01_Shapes.java
│   │                   ├── Example02_Colors.java
│   │                   ├── Example03_SVG.java
│   │                   ├── Util.java
│   │                   ├── customClasses/
│   │                   │   ├── JVMTriangleShapeFunction.java
│   │                   │   └── TriangleShapeFunction.java
│   │                   └── svg/
│   │                       ├── SVGGraphicsFactory.java
│   │                       └── SVGQRCodeGraphics.java
│   ├── js/
│   │   ├── qrcode-example.html
│   │   └── qrcode-kotlin.js
│   ├── kotlin/
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           └── kotlin/
│   │               ├── Example00-Simple.kt
│   │               ├── Example01-Shapes.kt
│   │               ├── Example02-Colors.kt
│   │               ├── Example03-Logo.kt
│   │               ├── Example04-SVG.kt
│   │               ├── Example05-BackwardsCompat.kt
│   │               ├── Example06-ECL.kt
│   │               ├── Example07-MaskPattern.kt
│   │               ├── ProjectLogo.kt
│   │               └── svg/
│   │                   ├── SVGGraphicsFactory.kt
│   │                   └── SVGQRCodeGraphics.kt
│   └── spring-web/
│       ├── .gitignore
│       ├── build.gradle.kts
│       └── src/
│           └── main/
│               ├── kotlin/
│               │   └── io/
│               │       └── github/
│               │           └── g0dkar/
│               │               └── qrcode/
│               │                   └── springWebExample/
│               │                       ├── Launcher.kt
│               │                       ├── QRCodeController.kt
│               │                       └── QRCodeService.kt
│               └── resources/
│                   └── application.yml
├── gradle/
│   ├── libs.versions.toml
│   └── wrapper/
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── package.json
├── release/
│   ├── qrcode-kotlin-jvm-4.4.1.jar
│   ├── qrcode-kotlin.d.ts
│   └── qrcode-kotlin.js
├── settings.gradle.kts
└── src/
    ├── androidMain/
    │   └── kotlin/
    │       └── qrcode/
    │           └── render/
    │               ├── QRCodeGraphics.android.kt
    │               ├── extensions/
    │               │   └── AndroidComposeExtensions.kt
    │               └── graphics/
    │                   ├── AndroidDrawingInterface.kt
    │                   ├── BitmapGraphics.kt
    │                   └── DrawScopeGraphics.kt
    ├── commonMain/
    │   └── kotlin/
    │       └── qrcode/
    │           ├── QRCode.kt
    │           ├── QRCodeBuilder.kt
    │           ├── QRCodeShapesEnum.kt
    │           ├── color/
    │           │   ├── ColorType.kt
    │           │   ├── Colors.kt
    │           │   ├── DefaultColorFunction.kt
    │           │   ├── LinearGradientColorFunction.kt
    │           │   └── QRCodeColorFunction.kt
    │           ├── exception/
    │           │   └── InsufficientInformationDensityException.kt
    │           ├── internals/
    │           │   ├── BitBuffer.kt
    │           │   ├── ErrorMessage.kt
    │           │   ├── Polynomial.kt
    │           │   ├── QRCodeSetup.kt
    │           │   ├── QRCodeSquare.kt
    │           │   ├── QRData.kt
    │           │   ├── QRMath.kt
    │           │   ├── QRUtil.kt
    │           │   └── RSBlock.kt
    │           ├── raw/
    │           │   ├── QRCodeEnums.kt
    │           │   ├── QRCodeProcessor.kt
    │           │   └── QRCodeRawData.kt
    │           ├── render/
    │           │   ├── QRCodeGraphics.kt
    │           │   └── QRCodeGraphicsFactory.kt
    │           └── shape/
    │               ├── CircleShapeFunction.kt
    │               ├── DefaultShapeFunction.kt
    │               ├── QRCodeShapeFunction.kt
    │               └── RoundSquaresShapeFunction.kt
    ├── commonTest/
    │   └── kotlin/
    │       └── qrcode/
    │           └── internals/
    │               ├── PolynomialTest.kt
    │               └── QRNumberTest.kt
    ├── iosMain/
    │   └── kotlin/
    │       ├── qrcode/
    │       │   └── render/
    │       │       └── QRCodeGraphics.ios.kt
    │       └── utils/
    │           └── IOSNativeParser.kt
    ├── jsMain/
    │   └── kotlin/
    │       └── qrcode/
    │           └── render/
    │               └── QRCodeGraphics.js.kt
    ├── jvmMain/
    │   └── kotlin/
    │       └── qrcode/
    │           └── render/
    │               ├── JvmQRCodeGraphicsFactory.kt
    │               └── QRCodeGraphics.jvm.kt
    ├── jvmTest/
    │   └── kotlin/
    │       └── qrcode/
    │           ├── QRCodeTest.kt
    │           ├── TestUtils.kt
    │           └── render/
    │               └── ColorsTest.kt
    ├── tvosMain/
    │   └── kotlin/
    │       ├── qrcode/
    │       │   └── render/
    │       │       └── QRCodeGraphics.tvos.kt
    │       └── utils/
    │           └── TvOSNativeParser.kt
    └── wasmJsMain/
        └── kotlin/
            └── qrcode/
                └── render/
                    └── QRCodeGraphics.wasmjs.kt
Download .txt
SYMBOL INDEX (1071 symbols across 11 files)

FILE: examples/java/src/main/java/examples/Example01_Shapes.java
  class Example01_Shapes (line 10) | public class Example01_Shapes { // NOSONAR
    method main (line 11) | public static void main(String[] args) {

FILE: examples/java/src/main/java/examples/Example02_Colors.java
  class Example02_Colors (line 9) | public class Example02_Colors { // NOSONAR
    method main (line 10) | public static void main(String[] args) {

FILE: examples/java/src/main/java/examples/Example03_SVG.java
  class Example03_SVG (line 9) | public class Example03_SVG { // NOSONAR
    method main (line 10) | public static void main(String[] args) {

FILE: examples/java/src/main/java/examples/Util.java
  class Util (line 5) | final class Util {
    method Util (line 6) | private Util() {
    method saveFile (line 9) | public static void saveFile(String filename, byte[] data) {

FILE: examples/java/src/main/java/examples/customClasses/JVMTriangleShapeFunction.java
  class JVMTriangleShapeFunction (line 9) | public class JVMTriangleShapeFunction extends DefaultShapeFunction {
    method JVMTriangleShapeFunction (line 10) | public JVMTriangleShapeFunction() {
    method fillRect (line 14) | public void fillRect(int x, int y, int width, int height, int color, Q...

FILE: examples/java/src/main/java/examples/customClasses/TriangleShapeFunction.java
  class TriangleShapeFunction (line 7) | public class TriangleShapeFunction extends DefaultShapeFunction {
    method TriangleShapeFunction (line 8) | public TriangleShapeFunction() {
    method fillRect (line 12) | public void fillRect(int x, int y, int width, int height, int color, Q...

FILE: examples/java/src/main/java/examples/svg/SVGGraphicsFactory.java
  class SVGGraphicsFactory (line 7) | public class SVGGraphicsFactory extends QRCodeGraphicsFactory {
    method newGraphics (line 11) | @NotNull

FILE: examples/java/src/main/java/examples/svg/SVGQRCodeGraphics.java
  class SVGQRCodeGraphics (line 13) | public class SVGQRCodeGraphics extends QRCodeGraphics {
    method SVGQRCodeGraphics (line 16) | public SVGQRCodeGraphics(int width, int height) {
    method createGraphics (line 21) | @NotNull
    method writeImage (line 27) | @Override

FILE: examples/js/qrcode-kotlin.js
  function containsAllEntries (line 83) | function containsAllEntries(m) {
  function isEmpty (line 163) | function isEmpty() {
  function isEmpty_0 (line 170) | function isEmpty_0() {
  function colorFn (line 179) | function colorFn(square, qrCode, qrCodeGraphics) {
  function beforeRender (line 188) | function beforeRender(qrCode, qrCodeGraphics) {
  function margin (line 190) | function margin(row, col, qrCode, qrCodeGraphics) {
  function beforeRender_0 (line 219) | function beforeRender_0(qrCode, qrCodeGraphics) {
  function CharSequence (line 229) | function CharSequence() {
  function Number_0 (line 231) | function Number_0() {
  function Unit (line 233) | function Unit() {
  function Unit_getInstance (line 239) | function Unit_getInstance() {
  function IntCompanionObject (line 242) | function IntCompanionObject() {
  function IntCompanionObject_getInstance (line 261) | function IntCompanionObject_getInstance() {
  function isNaN_0 (line 264) | function isNaN_0(_this__u8e3s4) {
  function takeHighestOneBit (line 267) | function takeHighestOneBit(_this__u8e3s4) {
  function collectionToArray (line 278) | function collectionToArray(collection) {
  function setOf (line 281) | function setOf(element) {
  function mapCapacity (line 284) | function mapCapacity(expectedSize) {
  function AbstractMutableCollection (line 287) | function AbstractMutableCollection() {
  function AbstractMutableSet (line 293) | function AbstractMutableSet() {
  function arrayOfUninitializedElements (line 306) | function arrayOfUninitializedElements(capacity) {
  function resetRange (line 319) | function resetRange(_this__u8e3s4, fromIndex, toIndex) {
  function copyOfUninitializedElements (line 324) | function copyOfUninitializedElements(_this__u8e3s4, newSize) {
  function HashSet_init_$Init$ (line 329) | function HashSet_init_$Init$(map, $this) {
  function HashSet_init_$Init$_0 (line 335) | function HashSet_init_$Init$_0($this) {
  function HashSet_init_$Create$ (line 339) | function HashSet_init_$Create$() {
  function HashSet_init_$Init$_1 (line 342) | function HashSet_init_$Init$_1(initialCapacity, loadFactor, $this) {
  function HashSet_init_$Init$_2 (line 346) | function HashSet_init_$Init$_2(initialCapacity, $this) {
  function HashSet_init_$Create$_0 (line 350) | function HashSet_init_$Create$_0(initialCapacity) {
  function HashSet (line 368) | function HashSet() {
  function computeHashSize (line 370) | function computeHashSize($this, capacity) {
  function computeShift (line 373) | function computeShift($this, hashSize) {
  function InternalHashMap_init_$Init$ (line 377) | function InternalHashMap_init_$Init$($this) {
  function InternalHashMap_init_$Create$ (line 381) | function InternalHashMap_init_$Create$() {
  function InternalHashMap_init_$Init$_0 (line 384) | function InternalHashMap_init_$Init$_0(initialCapacity, $this) {
  function InternalHashMap_init_$Init$_1 (line 388) | function InternalHashMap_init_$Init$_1(initialCapacity, loadFactor, $thi...
  function InternalHashMap_init_$Create$_0 (line 399) | function InternalHashMap_init_$Create$_0(initialCapacity, loadFactor) {
  function _get_capacity__a9k9f3 (line 402) | function _get_capacity__a9k9f3($this) {
  function _get_hashSize__tftcho (line 405) | function _get_hashSize__tftcho($this) {
  function registerModification (line 408) | function registerModification($this) {
  function ensureExtraCapacity (line 411) | function ensureExtraCapacity($this, n) {
  function shouldCompact (line 418) | function shouldCompact($this, extraCapacity) {
  function ensureCapacity (line 423) | function ensureCapacity($this, minCapacity) {
  function allocateValuesArray (line 439) | function allocateValuesArray($this) {
  function hash (line 447) | function hash($this, key) {
  function compact (line 450) | function compact($this) {
  function rehash (line 472) | function rehash($this, newHashSize) {
  function putRehash (line 492) | function putRehash($this, i) {
  function findKey (line 511) | function findKey($this, key) {
  function addKey (line 529) | function addKey($this, key) {
  function contentEquals (line 569) | function contentEquals($this, other) {
  function Companion (line 572) | function Companion() {
  function Companion_getInstance (line 579) | function Companion_getInstance() {
  function Itr (line 582) | function Itr(map) {
  function KeysItr (line 601) | function KeysItr(map) {
  function EntriesItr (line 616) | function EntriesItr(map) {
  function EntryRef (line 671) | function EntryRef(map, index) {
  function InternalHashMap (line 709) | function InternalHashMap(keysArray, valuesArray, presenceArray, hashArra...
  function InternalMap (line 796) | function InternalMap() {
  function LinkedHashSet_init_$Init$ (line 798) | function LinkedHashSet_init_$Init$($this) {
  function LinkedHashSet_init_$Create$ (line 803) | function LinkedHashSet_init_$Create$() {
  function LinkedHashSet_init_$Init$_0 (line 806) | function LinkedHashSet_init_$Init$_0(initialCapacity, loadFactor, $this) {
  function LinkedHashSet_init_$Init$_1 (line 811) | function LinkedHashSet_init_$Init$_1(initialCapacity, $this) {
  function LinkedHashSet_init_$Create$_0 (line 815) | function LinkedHashSet_init_$Create$_0(initialCapacity) {
  function LinkedHashSet (line 818) | function LinkedHashSet() {
  function roundToInt (line 820) | function roundToInt(_this__u8e3s4) {
  function KClass (line 833) | function KClass() {
  function KClassImpl (line 835) | function KClassImpl(jClass) {
  function NothingKClassImpl (line 866) | function NothingKClassImpl() {
  function NothingKClassImpl_getInstance (line 884) | function NothingKClassImpl_getInstance() {
  function ErrorKClass (line 889) | function ErrorKClass() {
  function PrimitiveKClassImpl (line 901) | function PrimitiveKClassImpl(jClass, givenSimpleName, isInstanceFunction) {
  function SimpleKClassImpl (line 914) | function SimpleKClassImpl(jClass) {
  function get_functionClasses (line 925) | function get_functionClasses() {
  function PrimitiveClasses$anyClass$lambda (line 930) | function PrimitiveClasses$anyClass$lambda(it) {
  function PrimitiveClasses$numberClass$lambda (line 933) | function PrimitiveClasses$numberClass$lambda(it) {
  function PrimitiveClasses$booleanClass$lambda (line 936) | function PrimitiveClasses$booleanClass$lambda(it) {
  function PrimitiveClasses$byteClass$lambda (line 939) | function PrimitiveClasses$byteClass$lambda(it) {
  function PrimitiveClasses$shortClass$lambda (line 942) | function PrimitiveClasses$shortClass$lambda(it) {
  function PrimitiveClasses$intClass$lambda (line 945) | function PrimitiveClasses$intClass$lambda(it) {
  function PrimitiveClasses$floatClass$lambda (line 948) | function PrimitiveClasses$floatClass$lambda(it) {
  function PrimitiveClasses$doubleClass$lambda (line 951) | function PrimitiveClasses$doubleClass$lambda(it) {
  function PrimitiveClasses$arrayClass$lambda (line 954) | function PrimitiveClasses$arrayClass$lambda(it) {
  function PrimitiveClasses$stringClass$lambda (line 957) | function PrimitiveClasses$stringClass$lambda(it) {
  function PrimitiveClasses$throwableClass$lambda (line 960) | function PrimitiveClasses$throwableClass$lambda(it) {
  function PrimitiveClasses$booleanArrayClass$lambda (line 963) | function PrimitiveClasses$booleanArrayClass$lambda(it) {
  function PrimitiveClasses$charArrayClass$lambda (line 966) | function PrimitiveClasses$charArrayClass$lambda(it) {
  function PrimitiveClasses$byteArrayClass$lambda (line 969) | function PrimitiveClasses$byteArrayClass$lambda(it) {
  function PrimitiveClasses$shortArrayClass$lambda (line 972) | function PrimitiveClasses$shortArrayClass$lambda(it) {
  function PrimitiveClasses$intArrayClass$lambda (line 975) | function PrimitiveClasses$intArrayClass$lambda(it) {
  function PrimitiveClasses$longArrayClass$lambda (line 978) | function PrimitiveClasses$longArrayClass$lambda(it) {
  function PrimitiveClasses$floatArrayClass$lambda (line 981) | function PrimitiveClasses$floatArrayClass$lambda(it) {
  function PrimitiveClasses$doubleArrayClass$lambda (line 984) | function PrimitiveClasses$doubleArrayClass$lambda(it) {
  function PrimitiveClasses$functionClass$lambda (line 987) | function PrimitiveClasses$functionClass$lambda($arity) {
  function PrimitiveClasses (line 999) | function PrimitiveClasses() {
  function PrimitiveClasses_getInstance (line 1159) | function PrimitiveClasses_getInstance() {
  function _init_properties_primitives_kt__3fums4 (line 1165) | function _init_properties_primitives_kt__3fums4() {
  function getKClass (line 1172) | function getKClass(jClass) {
  function getKClassM (line 1185) | function getKClassM(jClasses) {
  function getKClass1 (line 1208) | function getKClass1(jClass) {
  function getKClassFromExpression (line 1232) | function getKClassFromExpression(e) {
  function reset (line 1322) | function reset(_this__u8e3s4) {
  function CharacterCodingException_init_$Init$ (line 1325) | function CharacterCodingException_init_$Init$($this) {
  function CharacterCodingException_init_$Create$ (line 1329) | function CharacterCodingException_init_$Create$() {
  function CharacterCodingException (line 1334) | function CharacterCodingException(message) {
  function StringBuilder_init_$Init$ (line 1338) | function StringBuilder_init_$Init$(capacity, $this) {
  function StringBuilder_init_$Create$ (line 1342) | function StringBuilder_init_$Create$(capacity) {
  function StringBuilder_init_$Init$_0 (line 1345) | function StringBuilder_init_$Init$_0($this) {
  function StringBuilder_init_$Create$_0 (line 1349) | function StringBuilder_init_$Create$_0() {
  function StringBuilder (line 1352) | function StringBuilder(content) {
  function uppercaseChar (line 1391) | function uppercaseChar(_this__u8e3s4) {
  function checkRadix (line 1398) | function checkRadix(radix) {
  function toInt (line 1404) | function toInt(_this__u8e3s4, radix) {
  function toInt_0 (line 1414) | function toInt_0(_this__u8e3s4) {
  function digitOf (line 1424) | function digitOf(char, radix) {
  function Regex_init_$Init$ (line 1431) | function Regex_init_$Init$(pattern, $this) {
  function Regex_init_$Create$ (line 1435) | function Regex_init_$Create$(pattern) {
  function Companion_0 (line 1438) | function Companion_0() {
  function Companion_getInstance_0 (line 1445) | function Companion_getInstance_0() {
  function Regex (line 1450) | function Regex(pattern, options) {
  function toFlags (line 1466) | function toFlags(_this__u8e3s4, prepend) {
  function toFlags$lambda (line 1469) | function toFlags$lambda(it) {
  function compareTo (line 1473) | function compareTo(_this__u8e3s4, other, ignoreCase) {
  function encodeToByteArray (line 1520) | function encodeToByteArray(_this__u8e3s4) {
  function sam$kotlin_Comparator$0 (line 1524) | function sam$kotlin_Comparator$0(function_0) {
  function STRING_CASE_INSENSITIVE_ORDER$lambda (line 1533) | function STRING_CASE_INSENSITIVE_ORDER$lambda(a, b) {
  function _init_properties_stringJs_kt__bg7zye (line 1538) | function _init_properties_stringJs_kt__bg7zye() {
  function get_REPLACEMENT_BYTE_SEQUENCE (line 1545) | function get_REPLACEMENT_BYTE_SEQUENCE() {
  function encodeUtf8 (line 1550) | function encodeUtf8(string, startIndex, endIndex, throwOnMalformed) {
  function codePointFromSurrogate (line 1622) | function codePointFromSurrogate(string, high, index, endIndex, throwOnMa...
  function malformed (line 1635) | function malformed(size, index, throwOnMalformed) {
  function _init_properties_utf8Encoding_kt__9thjs4 (line 1642) | function _init_properties_utf8Encoding_kt__9thjs4() {
  function toCollection (line 1649) | function toCollection(_this__u8e3s4, destination) {
  function joinToString (line 1659) | function joinToString(_this__u8e3s4, separator, prefix, postfix, limit, ...
  function joinTo (line 1668) | function joinTo(_this__u8e3s4, buffer, separator, prefix, postfix, limit...
  function toSet (line 1695) | function toSet(_this__u8e3s4) {
  function toCollection_0 (line 1720) | function toCollection_0(_this__u8e3s4, destination) {
  function until (line 1728) | function until(_this__u8e3s4, to) {
  function coerceAtLeast (line 1733) | function coerceAtLeast(_this__u8e3s4, minimumValue) {
  function coerceIn (line 1736) | function coerceIn(_this__u8e3s4, range) {
  function step (line 1744) | function step(_this__u8e3s4, step) {
  function coerceIn_0 (line 1748) | function coerceIn_0(_this__u8e3s4, range) {
  function coerceAtMost (line 1753) | function coerceAtMost(_this__u8e3s4, maximumValue) {
  function _Char___init__impl__6a9atx (line 1756) | function _Char___init__impl__6a9atx(value) {
  function _get_value__a43j40 (line 1759) | function _get_value__a43j40($this) {
  function _Char___init__impl__6a9atx_0 (line 1762) | function _Char___init__impl__6a9atx_0(code) {
  function Char__compareTo_impl_ypi4mb (line 1767) | function Char__compareTo_impl_ypi4mb($this, other) {
  function Char__minus_impl_a2frrh (line 1770) | function Char__minus_impl_a2frrh($this, other) {
  function Char__toInt_impl_vasixd (line 1773) | function Char__toInt_impl_vasixd($this) {
  function toString (line 1776) | function toString($this) {
  function Companion_1 (line 1780) | function Companion_1() {
  function Companion_getInstance_1 (line 1794) | function Companion_getInstance_1() {
  function Char (line 1799) | function Char() {
  function List (line 1801) | function List() {
  function Collection (line 1803) | function Collection() {
  function Set (line 1805) | function Set() {
  function Entry (line 1807) | function Entry() {
  function Map_0 (line 1809) | function Map_0() {
  function Companion_2 (line 1811) | function Companion_2() {
  function Companion_getInstance_2 (line 1814) | function Companion_getInstance_2() {
  function Enum (line 1817) | function Enum(name, ordinal) {
  function toString_0 (line 1842) | function toString_0(_this__u8e3s4) {
  function implement (line 1846) | function implement(interfaces) {
  function bitMaskWith (line 1882) | function bitMaskWith(activeBit) {
  function compositeBitMask (line 1890) | function compositeBitMask(capacity, masks) {
  function isBitSet (line 1910) | function isBitSet(_this__u8e3s4, possibleActiveBit) {
  function fillArrayVal (line 1918) | function fillArrayVal(array, initValue) {
  function get_buf (line 1930) | function get_buf() {
  function get_bufFloat64 (line 1935) | function get_bufFloat64() {
  function get_bufInt32 (line 1941) | function get_bufInt32() {
  function get_lowIndex (line 1946) | function get_lowIndex() {
  function get_highIndex (line 1951) | function get_highIndex() {
  function getNumberHashCode (line 1956) | function getNumberHashCode(obj) {
  function _init_properties_bitUtils_kt__nfcg4k (line 1968) | function _init_properties_bitUtils_kt__nfcg4k() {
  function charSequenceGet (line 1989) | function charSequenceGet(a, index) {
  function isString (line 2017) | function isString(a) {
  function charSequenceLength (line 2020) | function charSequenceLength(a) {
  function compareTo_0 (line 2031) | function compareTo_0(a, b) {
  function doubleCompareTo (line 2058) | function doubleCompareTo(a, b) {
  function primitiveCompareTo (line 2092) | function primitiveCompareTo(a, b) {
  function compareToDoNotIntrinsicify (line 2095) | function compareToDoNotIntrinsicify(a, b) {
  function identityHashCode (line 2098) | function identityHashCode(obj) {
  function getObjectHashCode (line 2101) | function getObjectHashCode(obj) {
  function calculateRandomHash (line 2113) | function calculateRandomHash() {
  function toString_1 (line 2117) | function toString_1(o) {
  function anyToString (line 2131) | function anyToString(o) {
  function hashCode (line 2134) | function hashCode(obj) {
  function getBooleanHashCode (line 2171) | function getBooleanHashCode(value) {
  function getStringHashCode (line 2174) | function getStringHashCode(str) {
  function getBigIntHashCode (line 2190) | function getBigIntHashCode(value) {
  function getSymbolHashCode (line 2204) | function getSymbolHashCode(value) {
  function symbolIsSharable (line 2213) | function symbolIsSharable(symbol) {
  function getSymbolMap (line 2216) | function getSymbolMap() {
  function getSymbolWeakMap (line 2222) | function getSymbolWeakMap() {
  function equals (line 2230) | function equals(obj1, obj2) {
  function unboxIntrinsic (line 2263) | function unboxIntrinsic(x) {
  function captureStack (line 2267) | function captureStack(instance, constructorFunction) {
  function protoOf (line 2275) | function protoOf(constructor) {
  function defineProp (line 2278) | function defineProp(obj, name, getter, setter) {
  function objectCreate (line 2281) | function objectCreate(proto) {
  function extendThrowable (line 2284) | function extendThrowable(this_, message, cause) {
  function setPropertiesToThrowableInstance (line 2288) | function setPropertiesToThrowableInstance(this_, message, cause) {
  function ensureNotNull (line 2311) | function ensureNotNull(v) {
  function THROW_NPE (line 2320) | function THROW_NPE() {
  function noWhenBranchMatchedException (line 2323) | function noWhenBranchMatchedException() {
  function THROW_CCE (line 2326) | function THROW_CCE() {
  function THROW_IAE (line 2329) | function THROW_IAE(msg) {
  function fillFrom (line 2332) | function fillFrom(src, dst) {
  function arrayCopyResize (line 2346) | function arrayCopyResize(source, newSize, defaultValue) {
  function Companion_3 (line 2365) | function Companion_3() {
  function Companion_getInstance_3 (line 2373) | function Companion_getInstance_3() {
  function Long (line 2378) | function Long(low, high) {
  function get_ZERO (line 2426) | function get_ZERO() {
  function get_ONE (line 2431) | function get_ONE() {
  function get_NEG_ONE (line 2436) | function get_NEG_ONE() {
  function get_MAX_VALUE (line 2441) | function get_MAX_VALUE() {
  function get_MIN_VALUE (line 2446) | function get_MIN_VALUE() {
  function get_TWO_PWR_24_ (line 2451) | function get_TWO_PWR_24_() {
  function compare (line 2456) | function compare(_this__u8e3s4, other) {
  function add (line 2465) | function add(_this__u8e3s4, other) {
  function subtract (line 2492) | function subtract(_this__u8e3s4, other) {
  function multiply (line 2496) | function multiply(_this__u8e3s4, other) {
  function divide (line 2556) | function divide(_this__u8e3s4, other) {
  function shiftLeft (line 2614) | function shiftLeft(_this__u8e3s4, numBits) {
  function shiftRight (line 2627) | function shiftRight(_this__u8e3s4, numBits) {
  function toNumber (line 2640) | function toNumber(_this__u8e3s4) {
  function equalsLong (line 2644) | function equalsLong(_this__u8e3s4, other) {
  function hashCode_0 (line 2648) | function hashCode_0(l) {
  function toStringImpl (line 2652) | function toStringImpl(_this__u8e3s4, radix) {
  function fromInt (line 2694) | function fromInt(value) {
  function isNegative (line 2698) | function isNegative(_this__u8e3s4) {
  function isZero (line 2702) | function isZero(_this__u8e3s4) {
  function isOdd (line 2706) | function isOdd(_this__u8e3s4) {
  function negate (line 2710) | function negate(_this__u8e3s4) {
  function lessThan (line 2714) | function lessThan(_this__u8e3s4, other) {
  function fromNumber (line 2718) | function fromNumber(value) {
  function greaterThan (line 2737) | function greaterThan(_this__u8e3s4, other) {
  function greaterThanOrEqual (line 2741) | function greaterThanOrEqual(_this__u8e3s4, other) {
  function getLowBitsUnsigned (line 2745) | function getLowBitsUnsigned(_this__u8e3s4) {
  function _init_properties_longjs_kt__tqrzid (line 2750) | function _init_properties_longjs_kt__tqrzid() {
  function classMeta (line 2761) | function classMeta(name, defaultConstructor, associatedObjectKey, associ...
  function createMetadata (line 2764) | function createMetadata(kind, name, defaultConstructor, associatedObject...
  function setMetadataFor (line 2768) | function setMetadataFor(ctor, name, metadataConstructor, parent, interfa...
  function interfaceMeta (line 2780) | function interfaceMeta(name, defaultConstructor, associatedObjectKey, as...
  function generateInterfaceId (line 2783) | function generateInterfaceId() {
  function objectMeta (line 2793) | function objectMeta(name, defaultConstructor, associatedObjectKey, assoc...
  function toByte (line 2796) | function toByte(a) {
  function numberToInt (line 2800) | function numberToInt(a) {
  function doubleToInt (line 2809) | function doubleToInt(a) {
  function toShort (line 2821) | function toShort(a) {
  function numberToChar (line 2825) | function numberToChar(a) {
  function numberRangeToNumber (line 2831) | function numberRangeToNumber(start, endInclusive) {
  function isArrayish (line 2834) | function isArrayish(o) {
  function isJsArray (line 2837) | function isJsArray(obj) {
  function isInterface (line 2841) | function isInterface(obj, iface) {
  function isInterfaceImpl (line 2844) | function isInterfaceImpl(obj, iface) {
  function isArray (line 2856) | function isArray(obj) {
  function isNumber (line 2866) | function isNumber(a) {
  function isCharSequence (line 2875) | function isCharSequence(value) {
  function isBooleanArray (line 2878) | function isBooleanArray(a) {
  function isByteArray (line 2881) | function isByteArray(a) {
  function isShortArray (line 2885) | function isShortArray(a) {
  function isCharArray (line 2889) | function isCharArray(a) {
  function isIntArray (line 2899) | function isIntArray(a) {
  function isFloatArray (line 2903) | function isFloatArray(a) {
  function isLongArray (line 2907) | function isLongArray(a) {
  function isDoubleArray (line 2910) | function isDoubleArray(a) {
  function calculateErrorInfo (line 2914) | function calculateErrorInfo(proto) {
  function hasProp (line 2941) | function hasProp(proto, propName) {
  function getPrototypeOf (line 2944) | function getPrototypeOf(obj) {
  function get_VOID (line 2947) | function get_VOID() {
  function _init_properties_void_kt__3zg9as (line 2953) | function _init_properties_void_kt__3zg9as() {
  function fill (line 2959) | function fill(_this__u8e3s4, element, fromIndex, toIndex) {
  function copyOf (line 2967) | function copyOf(_this__u8e3s4, newSize) {
  function toTypedArray (line 2977) | function toTypedArray(_this__u8e3s4) {
  function copyOf_0 (line 2980) | function copyOf_0(_this__u8e3s4, newSize) {
  function copyOf_1 (line 2990) | function copyOf_1(_this__u8e3s4, newSize) {
  function digitToIntImpl (line 3000) | function digitToIntImpl(_this__u8e3s4) {
  function binarySearchRange (line 3007) | function binarySearchRange(array, needle) {
  function Digit (line 3024) | function Digit() {
  function Digit_getInstance (line 3031) | function Digit_getInstance() {
  function Exception_init_$Init$ (line 3036) | function Exception_init_$Init$($this) {
  function Exception_init_$Create$ (line 3041) | function Exception_init_$Create$() {
  function Exception_init_$Init$_0 (line 3046) | function Exception_init_$Init$_0(message, $this) {
  function Exception_init_$Create$_0 (line 3051) | function Exception_init_$Create$_0(message) {
  function Exception (line 3056) | function Exception() {
  function IllegalArgumentException_init_$Init$ (line 3059) | function IllegalArgumentException_init_$Init$($this) {
  function IllegalArgumentException_init_$Create$ (line 3064) | function IllegalArgumentException_init_$Create$() {
  function IllegalArgumentException_init_$Init$_0 (line 3069) | function IllegalArgumentException_init_$Init$_0(message, $this) {
  function IllegalArgumentException_init_$Create$_0 (line 3074) | function IllegalArgumentException_init_$Create$_0(message) {
  function IllegalArgumentException (line 3079) | function IllegalArgumentException() {
  function IndexOutOfBoundsException_init_$Init$ (line 3082) | function IndexOutOfBoundsException_init_$Init$($this) {
  function IndexOutOfBoundsException_init_$Create$ (line 3087) | function IndexOutOfBoundsException_init_$Create$() {
  function IndexOutOfBoundsException_init_$Init$_0 (line 3092) | function IndexOutOfBoundsException_init_$Init$_0(message, $this) {
  function IndexOutOfBoundsException_init_$Create$_0 (line 3097) | function IndexOutOfBoundsException_init_$Create$_0(message) {
  function IndexOutOfBoundsException (line 3102) | function IndexOutOfBoundsException() {
  function IllegalStateException_init_$Init$ (line 3105) | function IllegalStateException_init_$Init$($this) {
  function IllegalStateException_init_$Create$ (line 3110) | function IllegalStateException_init_$Create$() {
  function IllegalStateException_init_$Init$_0 (line 3115) | function IllegalStateException_init_$Init$_0(message, $this) {
  function IllegalStateException_init_$Create$_0 (line 3120) | function IllegalStateException_init_$Create$_0(message) {
  function IllegalStateException (line 3125) | function IllegalStateException() {
  function UnsupportedOperationException_init_$Init$ (line 3128) | function UnsupportedOperationException_init_$Init$($this) {
  function UnsupportedOperationException_init_$Create$ (line 3133) | function UnsupportedOperationException_init_$Create$() {
  function UnsupportedOperationException_init_$Init$_0 (line 3138) | function UnsupportedOperationException_init_$Init$_0(message, $this) {
  function UnsupportedOperationException_init_$Create$_0 (line 3143) | function UnsupportedOperationException_init_$Create$_0(message) {
  function UnsupportedOperationException (line 3148) | function UnsupportedOperationException() {
  function RuntimeException_init_$Init$ (line 3151) | function RuntimeException_init_$Init$($this) {
  function RuntimeException_init_$Create$ (line 3156) | function RuntimeException_init_$Create$() {
  function RuntimeException_init_$Init$_0 (line 3161) | function RuntimeException_init_$Init$_0(message, $this) {
  function RuntimeException_init_$Create$_0 (line 3166) | function RuntimeException_init_$Create$_0(message) {
  function RuntimeException (line 3171) | function RuntimeException() {
  function NoSuchElementException_init_$Init$ (line 3174) | function NoSuchElementException_init_$Init$($this) {
  function NoSuchElementException_init_$Create$ (line 3179) | function NoSuchElementException_init_$Create$() {
  function NoSuchElementException (line 3184) | function NoSuchElementException() {
  function Error_init_$Init$ (line 3187) | function Error_init_$Init$($this) {
  function Error_init_$Create$ (line 3192) | function Error_init_$Create$() {
  function Error_init_$Init$_0 (line 3197) | function Error_init_$Init$_0(message, cause, $this) {
  function Error_init_$Create$_0 (line 3202) | function Error_init_$Create$_0(message, cause) {
  function Error_0 (line 3207) | function Error_0() {
  function NumberFormatException_init_$Init$ (line 3210) | function NumberFormatException_init_$Init$($this) {
  function NumberFormatException_init_$Create$ (line 3215) | function NumberFormatException_init_$Create$() {
  function NumberFormatException_init_$Init$_0 (line 3220) | function NumberFormatException_init_$Init$_0(message, $this) {
  function NumberFormatException_init_$Create$_0 (line 3225) | function NumberFormatException_init_$Create$_0(message) {
  function NumberFormatException (line 3230) | function NumberFormatException() {
  function ConcurrentModificationException_init_$Init$ (line 3233) | function ConcurrentModificationException_init_$Init$($this) {
  function ConcurrentModificationException_init_$Create$ (line 3238) | function ConcurrentModificationException_init_$Create$() {
  function ConcurrentModificationException (line 3243) | function ConcurrentModificationException() {
  function NullPointerException_init_$Init$ (line 3246) | function NullPointerException_init_$Init$($this) {
  function NullPointerException_init_$Create$ (line 3251) | function NullPointerException_init_$Create$() {
  function NullPointerException (line 3256) | function NullPointerException() {
  function NoWhenBranchMatchedException_init_$Init$ (line 3259) | function NoWhenBranchMatchedException_init_$Init$($this) {
  function NoWhenBranchMatchedException_init_$Create$ (line 3264) | function NoWhenBranchMatchedException_init_$Create$() {
  function NoWhenBranchMatchedException (line 3269) | function NoWhenBranchMatchedException() {
  function ClassCastException_init_$Init$ (line 3272) | function ClassCastException_init_$Init$($this) {
  function ClassCastException_init_$Create$ (line 3277) | function ClassCastException_init_$Create$() {
  function ClassCastException (line 3282) | function ClassCastException() {
  function AbstractCollection$toString$lambda (line 3285) | function AbstractCollection$toString$lambda(this$0) {
  function AbstractCollection (line 3290) | function AbstractCollection() {
  function Companion_4 (line 3355) | function Companion_4() {
  function Companion_getInstance_4 (line 3375) | function Companion_getInstance_4() {
  function Companion_5 (line 3378) | function Companion_5() {
  function Companion_getInstance_5 (line 3398) | function Companion_getInstance_5() {
  function collectionToArrayCommonImpl (line 3401) | function collectionToArrayCommonImpl(collection) {
  function EmptyIterator (line 3418) | function EmptyIterator() {
  function EmptyIterator_getInstance (line 3427) | function EmptyIterator_getInstance() {
  function IntIterator (line 3430) | function IntIterator() {
  function emptySet (line 3435) | function emptySet() {
  function hashSetOf (line 3438) | function hashSetOf(elements) {
  function EmptySet (line 3441) | function EmptySet() {
  function EmptySet_getInstance (line 3476) | function EmptySet_getInstance() {
  function optimizeReadOnlySet (line 3481) | function optimizeReadOnlySet(_this__u8e3s4) {
  function getProgressionLastElement (line 3491) | function getProgressionLastElement(start, end, step) {
  function differenceModulo (line 3502) | function differenceModulo(a, b, c) {
  function mod (line 3505) | function mod(a, b) {
  function Companion_6 (line 3509) | function Companion_6() {
  function Companion_getInstance_6 (line 3514) | function Companion_getInstance_6() {
  function IntRange (line 3519) | function IntRange(start, endInclusive) {
  function IntProgressionIterator (line 3547) | function IntProgressionIterator(first, last, step) {
  function Companion_7 (line 3568) | function Companion_7() {
  function Companion_getInstance_7 (line 3574) | function Companion_getInstance_7() {
  function IntProgression (line 3577) | function IntProgression(start, endInclusive, step) {
  function ClosedRange (line 3607) | function ClosedRange() {
  function ClosedFloatingPointRange (line 3609) | function ClosedFloatingPointRange() {
  function checkStepIsPositive (line 3611) | function checkStepIsPositive(isPositive, step) {
  function appendElement (line 3615) | function appendElement(_this__u8e3s4, element, transform) {
  function toIntOrNull (line 3630) | function toIntOrNull(_this__u8e3s4, radix) {
  function numberFormatError (line 3685) | function numberFormatError(input) {
  function toIntOrNull_0 (line 3688) | function toIntOrNull_0(_this__u8e3s4) {
  function get_lastIndex (line 3691) | function get_lastIndex(_this__u8e3s4) {
  function substring (line 3694) | function substring(_this__u8e3s4, range) {
  function _UShort___init__impl__jigrne (line 3701) | function _UShort___init__impl__jigrne(data) {
  function _UShort___get_data__impl__g0245 (line 3704) | function _UShort___get_data__impl__g0245($this) {
  function QRCode$Companion$EMPTY_FN$lambda (line 3707) | function QRCode$Companion$EMPTY_FN$lambda($this$null, _anonymous_paramet...
  function Companion_8 (line 3710) | function Companion_8() {
  function Companion_getInstance_8 (line 3735) | function Companion_getInstance_8() {
  function draw (line 3740) | function draw($this, xOffset, yOffset, rawData, canvas) {
  function QRCode$draw$lambda (line 3743) | function QRCode$draw$lambda(this$0, $xOffset, $yOffset, $canvas) {
  function QRCode (line 3764) | function QRCode(data, squareSize, colorFn, shapeFn, graphicsFactory, doB...
  function values (line 3870) | function values() {
  function valueOf (line 3873) | function valueOf(value) {
  function QRCodeShapesEnum_initEntries (line 3890) | function QRCodeShapesEnum_initEntries() {
  function QRCodeShapesEnum (line 3899) | function QRCodeShapesEnum(name, ordinal) {
  function innerSpace (line 3902) | function innerSpace($this) {
  function _get_beforeFn__5052ik (line 3934) | function _get_beforeFn__5052ik($this) {
  function _get_afterFn__jaczeb (line 3937) | function _get_afterFn__jaczeb($this) {
  function _get_colorFunction__6g154a (line 3940) | function _get_colorFunction__6g154a($this) {
  function _get_shapeFunction__ousj14 (line 3951) | function _get_shapeFunction__ousj14($this) {
  function QRCodeBuilder$withLogo$lambda (line 3977) | function QRCodeBuilder$withLogo$lambda($width, $height) {
  function QRCodeBuilder$withLogo$lambda_0 (line 4003) | function QRCodeBuilder$withLogo$lambda_0($width, $height, $logo) {
  function QRCodeBuilder$withAfterRenderAction$lambda (line 4011) | function QRCodeBuilder$withAfterRenderAction$lambda($action) {
  function QRCodeBuilder$withBeforeRenderAction$lambda (line 4017) | function QRCodeBuilder$withBeforeRenderAction$lambda($action) {
  function QRCodeBuilder$_get_beforeFn_$lambda_n0dxjk (line 4023) | function QRCodeBuilder$_get_beforeFn_$lambda_n0dxjk(this$0) {
  function QRCodeBuilder$_get_afterFn_$lambda_eq0wxh (line 4030) | function QRCodeBuilder$_get_afterFn_$lambda_eq0wxh(this$0) {
  function QRCodeShapesEnum_SQUARE_getInstance (line 4037) | function QRCodeShapesEnum_SQUARE_getInstance() {
  function QRCodeShapesEnum_CIRCLE_getInstance (line 4041) | function QRCodeShapesEnum_CIRCLE_getInstance() {
  function QRCodeShapesEnum_ROUNDED_SQUARE_getInstance (line 4045) | function QRCodeShapesEnum_ROUNDED_SQUARE_getInstance() {
  function QRCodeShapesEnum_CUSTOM_getInstance (line 4049) | function QRCodeShapesEnum_CUSTOM_getInstance() {
  function QRCodeBuilder (line 4053) | function QRCodeBuilder(shape, customShapeFunction) {
  function Colors (line 4178) | function Colors() {
  function Colors_getInstance (line 4802) | function Colors_getInstance() {
  function DefaultColorFunction (line 4805) | function DefaultColorFunction(foreground, background) {
  function LinearGradientColorFunction (line 4832) | function LinearGradientColorFunction(startForegroundColor, endForeground...
  function QRCodeColorFunction (line 4882) | function QRCodeColorFunction() {
  function get (line 4884) | function get($this, index) {
  function BitBuffer (line 4887) | function BitBuffer() {
  function arraycopy (line 4924) | function arraycopy($this, from, fromPos, to, toPos, length) {
  function Polynomial (line 4934) | function Polynomial(num, shift) {
  function isInsideModules (line 5028) | function isInsideModules($this, row, rowOffset, col, colOffset, modulesS...
  function isTopBottomRowSquare (line 5039) | function isTopBottomRowSquare($this, row, col, probeSize) {
  function isLeftRightColSquare (line 5042) | function isLeftRightColSquare($this, row, col, probeSize) {
  function isMidSquare (line 5045) | function isMidSquare($this, row, col, probeSize) {
  function findSquareRegion (line 5048) | function findSquareRegion($this, row, col, probeSize) {
  function set (line 5061) | function set($this, row, col, value, modules, parent) {
  function set$default (line 5069) | function set$default($this, row, col, value, modules, parent, $super) {
  function QRCodeSetup (line 5073) | function QRCodeSetup() {
  function QRCodeSetup_getInstance (line 5322) | function QRCodeSetup_getInstance() {
  function QRCodeSquare (line 5325) | function QRCodeSquare(dark, row, col, moduleSize, squareInfo, rowSize, c...
  function Companion_9 (line 5464) | function Companion_9() {
  function Companion_getInstance_9 (line 5470) | function Companion_getInstance_9() {
  function QRCodeSquareInfo (line 5473) | function QRCodeSquareInfo(type, region) {
  function values_0 (line 5522) | function values_0() {
  function valueOf_0 (line 5525) | function valueOf_0(value) {
  function QRCodeSquareType_initEntries (line 5544) | function QRCodeSquareType_initEntries() {
  function QRCodeSquareType (line 5554) | function QRCodeSquareType(name, ordinal) {
  function values_1 (line 5568) | function values_1() {
  function valueOf_1 (line 5571) | function valueOf_1(value) {
  function QRCodeRegion_initEntries (line 5602) | function QRCodeRegion_initEntries() {
  function QRCodeRegion (line 5618) | function QRCodeRegion(name, ordinal) {
  function QRCodeSquareType_POSITION_PROBE_getInstance (line 5621) | function QRCodeSquareType_POSITION_PROBE_getInstance() {
  function QRCodeSquareType_POSITION_ADJUST_getInstance (line 5625) | function QRCodeSquareType_POSITION_ADJUST_getInstance() {
  function QRCodeSquareType_TIMING_PATTERN_getInstance (line 5629) | function QRCodeSquareType_TIMING_PATTERN_getInstance() {
  function QRCodeSquareType_DEFAULT_getInstance (line 5633) | function QRCodeSquareType_DEFAULT_getInstance() {
  function QRCodeSquareType_MARGIN_getInstance (line 5637) | function QRCodeSquareType_MARGIN_getInstance() {
  function QRCodeRegion_TOP_LEFT_CORNER_getInstance (line 5641) | function QRCodeRegion_TOP_LEFT_CORNER_getInstance() {
  function QRCodeRegion_TOP_RIGHT_CORNER_getInstance (line 5645) | function QRCodeRegion_TOP_RIGHT_CORNER_getInstance() {
  function QRCodeRegion_TOP_MID_getInstance (line 5649) | function QRCodeRegion_TOP_MID_getInstance() {
  function QRCodeRegion_LEFT_MID_getInstance (line 5653) | function QRCodeRegion_LEFT_MID_getInstance() {
  function QRCodeRegion_RIGHT_MID_getInstance (line 5657) | function QRCodeRegion_RIGHT_MID_getInstance() {
  function QRCodeRegion_CENTER_getInstance (line 5661) | function QRCodeRegion_CENTER_getInstance() {
  function QRCodeRegion_BOTTOM_LEFT_CORNER_getInstance (line 5665) | function QRCodeRegion_BOTTOM_LEFT_CORNER_getInstance() {
  function QRCodeRegion_BOTTOM_RIGHT_CORNER_getInstance (line 5669) | function QRCodeRegion_BOTTOM_RIGHT_CORNER_getInstance() {
  function QRCodeRegion_BOTTOM_MID_getInstance (line 5673) | function QRCodeRegion_BOTTOM_MID_getInstance() {
  function QRCodeRegion_MARGIN_getInstance (line 5677) | function QRCodeRegion_MARGIN_getInstance() {
  function QRCodeRegion_UNKNOWN_getInstance (line 5681) | function QRCodeRegion_UNKNOWN_getInstance() {
  function QRData (line 5685) | function QRData(dataType, data) {
  function QR8BitByte (line 5747) | function QR8BitByte(data) {
  function charCode (line 5765) | function charCode($this, c) {
  function QRAlphaNum (line 5798) | function QRAlphaNum(data) {
  function QRNumber (line 5815) | function QRNumber(data) {
  function QRMath (line 5857) | function QRMath() {
  function QRMath_getInstance (line 5907) | function QRMath_getInstance() {
  function isNumber_0 (line 5912) | function isNumber_0($this, s) {
  function isAlphaNum (line 5916) | function isAlphaNum($this, s) {
  function getBCHDigit (line 5920) | function getBCHDigit($this, data) {
  function QRUtil (line 5929) | function QRUtil() {
  function QRUtil_getInstance (line 6483) | function QRUtil_getInstance() {
  function Companion_10 (line 6488) | function Companion_10() {
  function Companion_getInstance_10 (line 6855) | function Companion_getInstance_10() {
  function RSBlock (line 6860) | function RSBlock(totalCount, dataCount) {
  function values_2 (line 6897) | function values_2() {
  function valueOf_2 (line 6900) | function valueOf_2(value) {
  function ErrorCorrectionLevel_initEntries (line 6917) | function ErrorCorrectionLevel_initEntries() {
  function ErrorCorrectionLevel (line 6926) | function ErrorCorrectionLevel(name, ordinal, value, maxTypeNum) {
  function values_3 (line 6945) | function values_3() {
  function valueOf_3 (line 6948) | function valueOf_3(value) {
  function MaskPattern_initEntries (line 6973) | function MaskPattern_initEntries() {
  function MaskPattern (line 6986) | function MaskPattern(name, ordinal) {
  function values_4 (line 6992) | function values_4() {
  function valueOf_4 (line 6995) | function valueOf_4(value) {
  function QRCodeDataType_initEntries (line 7010) | function QRCodeDataType_initEntries() {
  function QRCodeDataType (line 7018) | function QRCodeDataType(name, ordinal, value) {
  function ErrorCorrectionLevel_L_getInstance (line 7025) | function ErrorCorrectionLevel_L_getInstance() {
  function ErrorCorrectionLevel_M_getInstance (line 7029) | function ErrorCorrectionLevel_M_getInstance() {
  function ErrorCorrectionLevel_Q_getInstance (line 7033) | function ErrorCorrectionLevel_Q_getInstance() {
  function ErrorCorrectionLevel_H_getInstance (line 7037) | function ErrorCorrectionLevel_H_getInstance() {
  function MaskPattern_PATTERN000_getInstance (line 7041) | function MaskPattern_PATTERN000_getInstance() {
  function MaskPattern_PATTERN001_getInstance (line 7045) | function MaskPattern_PATTERN001_getInstance() {
  function MaskPattern_PATTERN010_getInstance (line 7049) | function MaskPattern_PATTERN010_getInstance() {
  function MaskPattern_PATTERN011_getInstance (line 7053) | function MaskPattern_PATTERN011_getInstance() {
  function MaskPattern_PATTERN100_getInstance (line 7057) | function MaskPattern_PATTERN100_getInstance() {
  function MaskPattern_PATTERN101_getInstance (line 7061) | function MaskPattern_PATTERN101_getInstance() {
  function MaskPattern_PATTERN110_getInstance (line 7065) | function MaskPattern_PATTERN110_getInstance() {
  function MaskPattern_PATTERN111_getInstance (line 7069) | function MaskPattern_PATTERN111_getInstance() {
  function QRCodeDataType_NUMBERS_getInstance (line 7073) | function QRCodeDataType_NUMBERS_getInstance() {
  function QRCodeDataType_UPPER_ALPHA_NUM_getInstance (line 7077) | function QRCodeDataType_UPPER_ALPHA_NUM_getInstance() {
  function QRCodeDataType_DEFAULT_getInstance (line 7081) | function QRCodeDataType_DEFAULT_getInstance() {
  function Companion_11 (line 7085) | function Companion_11() {
  function Companion_getInstance_11 (line 7133) | function Companion_getInstance_11() {
  function createData (line 7136) | function createData($this, type) {
  function createBytes (line 7173) | function createBytes($this, buffer, rsBlocks) {
  function QRCodeProcessor$render$lambda (line 7280) | function QRCodeProcessor$render$lambda($cellSize, $darkColor, $brightCol...
  function QRCodeProcessor (line 7300) | function QRCodeProcessor(data, errorCorrectionLevel, dataType, graphicsF...
  function QRCodeGraphicsFactory (line 7496) | function QRCodeGraphicsFactory() {
  function Companion_12 (line 7504) | function Companion_12() {
  function Companion_getInstance_12 (line 7513) | function Companion_getInstance_12() {
  function CircleShapeFunction (line 7516) | function CircleShapeFunction(squareSize, innerSpace) {
  function drawSquaresLine (line 7527) | function drawSquaresLine($this, x, y, amount, skip, color, canvas) {
  function DefaultShapeFunction (line 7540) | function DefaultShapeFunction(squareSize, innerSpace) {
  function QRCodeShapeFunction (line 7592) | function QRCodeShapeFunction() {
  function Companion_13 (line 7594) | function Companion_13() {
  function Companion_getInstance_13 (line 7603) | function Companion_getInstance_13() {
  function RoundSquaresShapeFunction (line 7606) | function RoundSquaresShapeFunction(squareSize, radius, innerSpace) {
  function Companion_14 (line 7625) | function Companion_14() {
  function Companion_getInstance_14 (line 7630) | function Companion_getInstance_14() {
  function rgba (line 7633) | function rgba($this, color) {
  function draw_0 (line 7640) | function draw_0($this, color, action) {
  function tryGet (line 7650) | function tryGet($this, what) {
  function QRCodeGraphics$lambda (line 7665) | function QRCodeGraphics$lambda() {
  function QRCodeGraphics$draw$lambda (line 7669) | function QRCodeGraphics$draw$lambda(this$0) {
  function QRCodeGraphics$reset$lambda (line 7675) | function QRCodeGraphics$reset$lambda(this$0) {
  function QRCodeGraphics$drawLine$lambda (line 7681) | function QRCodeGraphics$drawLine$lambda($x1, $y1, $x2, $y2) {
  function QRCodeGraphics$drawRect$lambda (line 7688) | function QRCodeGraphics$drawRect$lambda($thickness, $x, $y, $width, $hei...
  function QRCodeGraphics$fillRect$lambda (line 7696) | function QRCodeGraphics$fillRect$lambda($x, $y, $width, $height) {
  function QRCodeGraphics$drawEllipse$lambda (line 7702) | function QRCodeGraphics$drawEllipse$lambda($width, $height, $thickness, ...
  function QRCodeGraphics$fillEllipse$lambda (line 7713) | function QRCodeGraphics$fillEllipse$lambda($width, $height, $x, $y) {
  function QRCodeGraphics$drawImage$lambda (line 7723) | function QRCodeGraphics$drawImage$lambda($rawData, this$0, $x, $y) {
  function QRCodeGraphics (line 7730) | function QRCodeGraphics(width, height) {
  function $jsExportAll$ (line 7860) | function $jsExportAll$(_) {

FILE: release/qrcode-kotlin.d.ts
  type Nullable (line 1) | type Nullable<T> = T | null | undefined
  class QRCode (line 3) | class QRCode {
  class QRCodeBuilder (line 46) | class QRCodeBuilder {
  class DefaultColorFunction (line 230) | class DefaultColorFunction implements qrcode.color.QRCodeColorFunction {
  class LinearGradientColorFunction (line 240) | class LinearGradientColorFunction implements qrcode.color.QRCodeColorFun...
  type QRCodeColorFunction (line 255) | interface QRCodeColorFunction {
  class QRCodeSquare (line 266) | class QRCodeSquare {
  class QRCodeSquareInfo (line 286) | class QRCodeSquareInfo {
  class QRCodeProcessor (line 457) | class QRCodeProcessor {
  class QRCodeGraphicsFactory (line 475) | class QRCodeGraphicsFactory {
  class CircleShapeFunction (line 483) | class CircleShapeFunction extends qrcode.shape.RoundSquaresShapeFunction {
  class DefaultShapeFunction (line 493) | class DefaultShapeFunction implements qrcode.shape.QRCodeShapeFunction {
  type QRCodeShapeFunction (line 508) | interface QRCodeShapeFunction {
  class RoundSquaresShapeFunction (line 520) | class RoundSquaresShapeFunction extends qrcode.shape.DefaultShapeFunction {
  class QRCodeGraphics (line 532) | class QRCodeGraphics {

FILE: release/qrcode-kotlin.js
  function containsAllEntries (line 101) | function containsAllEntries(m) {
  function isEmpty (line 171) | function isEmpty() {
  function isEmpty_0 (line 178) | function isEmpty_0() {
  function colorFn (line 187) | function colorFn(square, qrCode, qrCodeGraphics) {
  function beforeRender (line 190) | function beforeRender(qrCode, qrCodeGraphics) {
  function beforeRender_0 (line 218) | function beforeRender_0(qrCode, qrCodeGraphics) {
  function CharSequence (line 228) | function CharSequence() {
  function Number_0 (line 230) | function Number_0() {
  function toCollection (line 232) | function toCollection(_this__u8e3s4, destination) {
  function joinToString (line 242) | function joinToString(_this__u8e3s4, separator, prefix, postfix, limit, ...
  function joinTo (line 251) | function joinTo(_this__u8e3s4, buffer, separator, prefix, postfix, limit...
  function toSet (line 278) | function toSet(_this__u8e3s4) {
  function toCollection_0 (line 303) | function toCollection_0(_this__u8e3s4, destination) {
  function until (line 311) | function until(_this__u8e3s4, to) {
  function coerceAtLeast (line 316) | function coerceAtLeast(_this__u8e3s4, minimumValue) {
  function coerceIn (line 319) | function coerceIn(_this__u8e3s4, range) {
  function step (line 327) | function step(_this__u8e3s4, step) {
  function coerceIn_0 (line 331) | function coerceIn_0(_this__u8e3s4, range) {
  function coerceAtMost (line 336) | function coerceAtMost(_this__u8e3s4, maximumValue) {
  function _Char___init__impl__6a9atx (line 339) | function _Char___init__impl__6a9atx(value) {
  function _get_value__a43j40 (line 342) | function _get_value__a43j40($this) {
  function _Char___init__impl__6a9atx_0 (line 345) | function _Char___init__impl__6a9atx_0(code) {
  function Char__compareTo_impl_ypi4mb (line 350) | function Char__compareTo_impl_ypi4mb($this, other) {
  function Char__minus_impl_a2frrh (line 353) | function Char__minus_impl_a2frrh($this, other) {
  function Char__toInt_impl_vasixd (line 356) | function Char__toInt_impl_vasixd($this) {
  function toString (line 359) | function toString($this) {
  function Char (line 363) | function Char() {
  function KtList (line 365) | function KtList() {
  function Collection (line 367) | function Collection() {
  function KtSet (line 369) | function KtSet() {
  function Entry (line 371) | function Entry() {
  function KtMap (line 373) | function KtMap() {
  function Companion (line 375) | function Companion() {
  function Companion_getInstance (line 378) | function Companion_getInstance() {
  function Enum (line 381) | function Enum(name, ordinal) {
  function toString_0 (line 406) | function toString_0(_this__u8e3s4) {
  function Companion_0 (line 410) | function Companion_0() {
  function Companion_getInstance_0 (line 418) | function Companion_getInstance_0() {
  function Long (line 423) | function Long(low, high) {
  function implement (line 471) | function implement(interfaces) {
  function bitMaskWith (line 505) | function bitMaskWith(activeBit) {
  function compositeBitMask (line 513) | function compositeBitMask(capacity, masks) {
  function isBitSet (line 533) | function isBitSet(_this__u8e3s4, possibleActiveBit) {
  function FunctionAdapter (line 541) | function FunctionAdapter() {
  function get_buf (line 543) | function get_buf() {
  function get_bufFloat64 (line 548) | function get_bufFloat64() {
  function get_bufInt32 (line 554) | function get_bufInt32() {
  function get_lowIndex (line 559) | function get_lowIndex() {
  function get_highIndex (line 564) | function get_highIndex() {
  function getNumberHashCode (line 569) | function getNumberHashCode(obj) {
  function _init_properties_bitUtils_kt__nfcg4k (line 581) | function _init_properties_bitUtils_kt__nfcg4k() {
  function charSequenceGet (line 600) | function charSequenceGet(a, index) {
  function isString (line 612) | function isString(a) {
  function charSequenceLength (line 615) | function charSequenceLength(a) {
  function compareTo (line 626) | function compareTo(a, b) {
  function doubleCompareTo (line 653) | function doubleCompareTo(a, b) {
  function primitiveCompareTo (line 687) | function primitiveCompareTo(a, b) {
  function compareToDoNotIntrinsicify (line 690) | function compareToDoNotIntrinsicify(a, b) {
  function identityHashCode (line 693) | function identityHashCode(obj) {
  function getObjectHashCode (line 696) | function getObjectHashCode(obj) {
  function calculateRandomHash (line 708) | function calculateRandomHash() {
  function defineProp (line 712) | function defineProp(obj, name, getter, setter) {
  function objectCreate (line 715) | function objectCreate(proto) {
  function toString_1 (line 719) | function toString_1(o) {
  function anyToString (line 733) | function anyToString(o) {
  function hashCode (line 736) | function hashCode(obj) {
  function getBooleanHashCode (line 773) | function getBooleanHashCode(value) {
  function getStringHashCode (line 776) | function getStringHashCode(str) {
  function getBigIntHashCode (line 792) | function getBigIntHashCode(value) {
  function getSymbolHashCode (line 806) | function getSymbolHashCode(value) {
  function symbolIsSharable (line 815) | function symbolIsSharable(symbol) {
  function getSymbolMap (line 818) | function getSymbolMap() {
  function getSymbolWeakMap (line 824) | function getSymbolWeakMap() {
  function equals (line 832) | function equals(obj1, obj2) {
  function unboxIntrinsic (line 865) | function unboxIntrinsic(x) {
  function captureStack (line 869) | function captureStack(instance, constructorFunction) {
  function protoOf (line 877) | function protoOf(constructor) {
  function extendThrowable (line 880) | function extendThrowable(this_, message, cause) {
  function setPropertiesToThrowableInstance (line 884) | function setPropertiesToThrowableInstance(this_, message, cause) {
  function ensureNotNull (line 907) | function ensureNotNull(v) {
  function THROW_NPE (line 916) | function THROW_NPE() {
  function noWhenBranchMatchedException (line 919) | function noWhenBranchMatchedException() {
  function THROW_CCE (line 922) | function THROW_CCE() {
  function THROW_IAE (line 925) | function THROW_IAE(msg) {
  function get_ZERO (line 928) | function get_ZERO() {
  function get_ONE (line 933) | function get_ONE() {
  function get_NEG_ONE (line 938) | function get_NEG_ONE() {
  function get_MAX_VALUE (line 943) | function get_MAX_VALUE() {
  function get_MIN_VALUE (line 948) | function get_MIN_VALUE() {
  function get_TWO_PWR_24_ (line 953) | function get_TWO_PWR_24_() {
  function compare (line 958) | function compare(_this__u8e3s4, other) {
  function add (line 967) | function add(_this__u8e3s4, other) {
  function subtract (line 994) | function subtract(_this__u8e3s4, other) {
  function multiply (line 998) | function multiply(_this__u8e3s4, other) {
  function divide (line 1058) | function divide(_this__u8e3s4, other) {
  function shiftLeft (line 1116) | function shiftLeft(_this__u8e3s4, numBits) {
  function shiftRight (line 1129) | function shiftRight(_this__u8e3s4, numBits) {
  function toNumber (line 1142) | function toNumber(_this__u8e3s4) {
  function toStringImpl (line 1146) | function toStringImpl(_this__u8e3s4, radix) {
  function equalsLong (line 1188) | function equalsLong(_this__u8e3s4, other) {
  function hashCode_0 (line 1192) | function hashCode_0(l) {
  function fromInt (line 1196) | function fromInt(value) {
  function isNegative (line 1200) | function isNegative(_this__u8e3s4) {
  function isZero (line 1204) | function isZero(_this__u8e3s4) {
  function isOdd (line 1208) | function isOdd(_this__u8e3s4) {
  function negate (line 1212) | function negate(_this__u8e3s4) {
  function lessThan (line 1216) | function lessThan(_this__u8e3s4, other) {
  function fromNumber (line 1220) | function fromNumber(value) {
  function greaterThan (line 1239) | function greaterThan(_this__u8e3s4, other) {
  function greaterThanOrEqual (line 1243) | function greaterThanOrEqual(_this__u8e3s4, other) {
  function getLowBitsUnsigned (line 1247) | function getLowBitsUnsigned(_this__u8e3s4) {
  function _init_properties_longJs_kt__elc2w5 (line 1252) | function _init_properties_longJs_kt__elc2w5() {
  function createMetadata (line 1263) | function createMetadata(kind, name, defaultConstructor, associatedObject...
  function generateInterfaceId (line 1268) | function generateInterfaceId() {
  function initMetadataFor (line 1278) | function initMetadataFor(kind, ctor, name, defaultConstructor, parent, i...
  function initMetadataForClass (line 1290) | function initMetadataForClass(ctor, name, defaultConstructor, parent, in...
  function initMetadataForObject (line 1294) | function initMetadataForObject(ctor, name, defaultConstructor, parent, i...
  function initMetadataForInterface (line 1298) | function initMetadataForInterface(ctor, name, defaultConstructor, parent...
  function initMetadataForLambda (line 1302) | function initMetadataForLambda(ctor, parent, interfaces, suspendArity) {
  function initMetadataForCoroutine (line 1305) | function initMetadataForCoroutine(ctor, parent, interfaces, suspendArity) {
  function initMetadataForFunctionReference (line 1308) | function initMetadataForFunctionReference(ctor, parent, interfaces, susp...
  function initMetadataForCompanion (line 1311) | function initMetadataForCompanion(ctor, parent, interfaces, suspendArity) {
  function toByte (line 1314) | function toByte(a) {
  function numberToInt (line 1318) | function numberToInt(a) {
  function doubleToInt (line 1327) | function doubleToInt(a) {
  function toShort (line 1339) | function toShort(a) {
  function numberToChar (line 1343) | function numberToChar(a) {
  function numberRangeToNumber (line 1349) | function numberRangeToNumber(start, endInclusive) {
  function isArrayish (line 1352) | function isArrayish(o) {
  function isJsArray (line 1355) | function isJsArray(obj) {
  function isInterface (line 1359) | function isInterface(obj, iface) {
  function isInterfaceImpl (line 1362) | function isInterfaceImpl(obj, iface) {
  function isArray (line 1374) | function isArray(obj) {
  function isNumber (line 1384) | function isNumber(a) {
  function isCharSequence (line 1393) | function isCharSequence(value) {
  function isBooleanArray (line 1396) | function isBooleanArray(a) {
  function isByteArray (line 1399) | function isByteArray(a) {
  function isShortArray (line 1403) | function isShortArray(a) {
  function isCharArray (line 1407) | function isCharArray(a) {
  function isIntArray (line 1417) | function isIntArray(a) {
  function isFloatArray (line 1421) | function isFloatArray(a) {
  function isLongArray (line 1425) | function isLongArray(a) {
  function isDoubleArray (line 1428) | function isDoubleArray(a) {
  function calculateErrorInfo (line 1432) | function calculateErrorInfo(proto) {
  function hasProp (line 1458) | function hasProp(proto, propName) {
  function getPrototypeOf (line 1461) | function getPrototypeOf(obj) {
  function get_VOID (line 1464) | function get_VOID() {
  function _init_properties_void_kt__3zg9as (line 1470) | function _init_properties_void_kt__3zg9as() {
  function copyOf (line 1476) | function copyOf(_this__u8e3s4, newSize) {
  function toTypedArray (line 1484) | function toTypedArray(_this__u8e3s4) {
  function copyOf_0 (line 1487) | function copyOf_0(_this__u8e3s4, newSize) {
  function copyOf_1 (line 1495) | function copyOf_1(_this__u8e3s4, newSize) {
  function digitToIntImpl (line 1503) | function digitToIntImpl(_this__u8e3s4) {
  function binarySearchRange (line 1510) | function binarySearchRange(array, needle) {
  function Digit (line 1527) | function Digit() {
  function Digit_getInstance (line 1534) | function Digit_getInstance() {
  function Comparator (line 1539) | function Comparator() {
  function isNaN_0 (line 1541) | function isNaN_0(_this__u8e3s4) {
  function takeHighestOneBit (line 1544) | function takeHighestOneBit(_this__u8e3s4) {
  function Unit (line 1554) | function Unit() {
  function Unit_getInstance (line 1560) | function Unit_getInstance() {
  function collectionToArray (line 1563) | function collectionToArray(collection) {
  function setOf (line 1566) | function setOf(element) {
  function mapCapacity (line 1569) | function mapCapacity(expectedSize) {
  function AbstractMutableCollection (line 1572) | function AbstractMutableCollection() {
  function AbstractMutableSet (line 1578) | function AbstractMutableSet() {
  function arrayOfUninitializedElements (line 1591) | function arrayOfUninitializedElements(capacity) {
  function resetRange (line 1602) | function resetRange(_this__u8e3s4, fromIndex, toIndex) {
  function copyOfUninitializedElements (line 1607) | function copyOfUninitializedElements(_this__u8e3s4, newSize) {
  function HashSet_init_$Init$ (line 1612) | function HashSet_init_$Init$(map, $this) {
  function HashSet_init_$Init$_0 (line 1618) | function HashSet_init_$Init$_0($this) {
  function HashSet_init_$Create$ (line 1622) | function HashSet_init_$Create$() {
  function HashSet_init_$Init$_1 (line 1625) | function HashSet_init_$Init$_1(initialCapacity, loadFactor, $this) {
  function HashSet_init_$Init$_2 (line 1629) | function HashSet_init_$Init$_2(initialCapacity, $this) {
  function HashSet_init_$Create$_0 (line 1633) | function HashSet_init_$Create$_0(initialCapacity) {
  function HashSet (line 1651) | function HashSet() {
  function computeHashSize (line 1653) | function computeHashSize($this, capacity) {
  function computeShift (line 1656) | function computeShift($this, hashSize) {
  function checkForComodification (line 1660) | function checkForComodification($this) {
  function InternalHashMap_init_$Init$ (line 1664) | function InternalHashMap_init_$Init$($this) {
  function InternalHashMap_init_$Create$ (line 1668) | function InternalHashMap_init_$Create$() {
  function InternalHashMap_init_$Init$_0 (line 1671) | function InternalHashMap_init_$Init$_0(initialCapacity, $this) {
  function InternalHashMap_init_$Init$_1 (line 1675) | function InternalHashMap_init_$Init$_1(initialCapacity, loadFactor, $thi...
  function InternalHashMap_init_$Create$_0 (line 1684) | function InternalHashMap_init_$Create$_0(initialCapacity, loadFactor) {
  function _get_capacity__a9k9f3 (line 1687) | function _get_capacity__a9k9f3($this) {
  function _get_hashSize__tftcho (line 1690) | function _get_hashSize__tftcho($this) {
  function registerModification (line 1693) | function registerModification($this) {
  function ensureExtraCapacity (line 1696) | function ensureExtraCapacity($this, n) {
  function shouldCompact (line 1703) | function shouldCompact($this, extraCapacity) {
  function ensureCapacity (line 1708) | function ensureCapacity($this, minCapacity) {
  function allocateValuesArray (line 1724) | function allocateValuesArray($this) {
  function hash (line 1732) | function hash($this, key) {
  function compact (line 1735) | function compact($this, updateHashArray) {
  function rehash (line 1762) | function rehash($this, newHashSize) {
  function putRehash (line 1778) | function putRehash($this, i) {
  function findKey (line 1797) | function findKey($this, key) {
  function addKey (line 1815) | function addKey($this, key) {
  function contentEquals (line 1855) | function contentEquals($this, other) {
  function Companion_1 (line 1858) | function Companion_1() {
  function Companion_getInstance_1 (line 1865) | function Companion_getInstance_1() {
  function Itr (line 1868) | function Itr(map) {
  function KeysItr (line 1887) | function KeysItr(map) {
  function EntriesItr (line 1902) | function EntriesItr(map) {
  function EntryRef (line 1955) | function EntryRef(map, index) {
  function InternalHashMap (line 1996) | function InternalHashMap(keysArray, valuesArray, presenceArray, hashArra...
  function InternalMap (line 2083) | function InternalMap() {
  function LinkedHashSet_init_$Init$ (line 2085) | function LinkedHashSet_init_$Init$($this) {
  function LinkedHashSet_init_$Create$ (line 2090) | function LinkedHashSet_init_$Create$() {
  function LinkedHashSet_init_$Init$_0 (line 2093) | function LinkedHashSet_init_$Init$_0(initialCapacity, loadFactor, $this) {
  function LinkedHashSet_init_$Init$_1 (line 2098) | function LinkedHashSet_init_$Init$_1(initialCapacity, $this) {
  function LinkedHashSet_init_$Create$_0 (line 2102) | function LinkedHashSet_init_$Create$_0(initialCapacity) {
  function LinkedHashSet (line 2105) | function LinkedHashSet() {
  function Exception_init_$Init$ (line 2107) | function Exception_init_$Init$($this) {
  function Exception_init_$Create$ (line 2112) | function Exception_init_$Create$() {
  function Exception_init_$Init$_0 (line 2117) | function Exception_init_$Init$_0(message, $this) {
  function Exception_init_$Create$_0 (line 2122) | function Exception_init_$Create$_0(message) {
  function Exception_init_$Init$_1 (line 2127) | function Exception_init_$Init$_1(message, cause, $this) {
  function Exception (line 2132) | function Exception() {
  function IllegalArgumentException_init_$Init$ (line 2135) | function IllegalArgumentException_init_$Init$($this) {
  function IllegalArgumentException_init_$Create$ (line 2140) | function IllegalArgumentException_init_$Create$() {
  function IllegalArgumentException_init_$Init$_0 (line 2145) | function IllegalArgumentException_init_$Init$_0(message, $this) {
  function IllegalArgumentException_init_$Create$_0 (line 2150) | function IllegalArgumentException_init_$Create$_0(message) {
  function IllegalArgumentException_init_$Init$_1 (line 2155) | function IllegalArgumentException_init_$Init$_1(message, cause, $this) {
  function IllegalArgumentException (line 2160) | function IllegalArgumentException() {
  function IllegalStateException_init_$Init$ (line 2163) | function IllegalStateException_init_$Init$($this) {
  function IllegalStateException_init_$Create$ (line 2168) | function IllegalStateException_init_$Create$() {
  function IllegalStateException_init_$Init$_0 (line 2173) | function IllegalStateException_init_$Init$_0(message, $this) {
  function IllegalStateException_init_$Create$_0 (line 2178) | function IllegalStateException_init_$Create$_0(message) {
  function IllegalStateException (line 2183) | function IllegalStateException() {
  function UnsupportedOperationException_init_$Init$ (line 2186) | function UnsupportedOperationException_init_$Init$($this) {
  function UnsupportedOperationException_init_$Create$ (line 2191) | function UnsupportedOperationException_init_$Create$() {
  function UnsupportedOperationException_init_$Init$_0 (line 2196) | function UnsupportedOperationException_init_$Init$_0(message, $this) {
  function UnsupportedOperationException_init_$Create$_0 (line 2201) | function UnsupportedOperationException_init_$Create$_0(message) {
  function UnsupportedOperationException (line 2206) | function UnsupportedOperationException() {
  function RuntimeException_init_$Init$ (line 2209) | function RuntimeException_init_$Init$($this) {
  function RuntimeException_init_$Create$ (line 2214) | function RuntimeException_init_$Create$() {
  function RuntimeException_init_$Init$_0 (line 2219) | function RuntimeException_init_$Init$_0(message, $this) {
  function RuntimeException_init_$Create$_0 (line 2224) | function RuntimeException_init_$Create$_0(message) {
  function RuntimeException_init_$Init$_1 (line 2229) | function RuntimeException_init_$Init$_1(message, cause, $this) {
  function RuntimeException (line 2234) | function RuntimeException() {
  function NoSuchElementException_init_$Init$ (line 2237) | function NoSuchElementException_init_$Init$($this) {
  function NoSuchElementException_init_$Create$ (line 2242) | function NoSuchElementException_init_$Create$() {
  function NoSuchElementException (line 2247) | function NoSuchElementException() {
  function Error_init_$Init$ (line 2250) | function Error_init_$Init$($this) {
  function Error_init_$Create$ (line 2255) | function Error_init_$Create$() {
  function Error_init_$Init$_0 (line 2260) | function Error_init_$Init$_0(message, cause, $this) {
  function Error_init_$Create$_0 (line 2265) | function Error_init_$Create$_0(message, cause) {
  function Error_0 (line 2270) | function Error_0() {
  function IndexOutOfBoundsException_init_$Init$ (line 2273) | function IndexOutOfBoundsException_init_$Init$($this) {
  function IndexOutOfBoundsException_init_$Create$ (line 2278) | function IndexOutOfBoundsException_init_$Create$() {
  function IndexOutOfBoundsException_init_$Init$_0 (line 2283) | function IndexOutOfBoundsException_init_$Init$_0(message, $this) {
  function IndexOutOfBoundsException_init_$Create$_0 (line 2288) | function IndexOutOfBoundsException_init_$Create$_0(message) {
  function IndexOutOfBoundsException (line 2293) | function IndexOutOfBoundsException() {
  function NumberFormatException_init_$Init$ (line 2296) | function NumberFormatException_init_$Init$($this) {
  function NumberFormatException_init_$Create$ (line 2301) | function NumberFormatException_init_$Create$() {
  function NumberFormatException_init_$Init$_0 (line 2306) | function NumberFormatException_init_$Init$_0(message, $this) {
  function NumberFormatException_init_$Create$_0 (line 2311) | function NumberFormatException_init_$Create$_0(message) {
  function NumberFormatException (line 2316) | function NumberFormatException() {
  function ConcurrentModificationException_init_$Init$ (line 2319) | function ConcurrentModificationException_init_$Init$($this) {
  function ConcurrentModificationException_init_$Create$ (line 2324) | function ConcurrentModificationException_init_$Create$() {
  function ConcurrentModificationException_init_$Init$_0 (line 2329) | function ConcurrentModificationException_init_$Init$_0(message, $this) {
  function ConcurrentModificationException_init_$Create$_0 (line 2334) | function ConcurrentModificationException_init_$Create$_0(message) {
  function ConcurrentModificationException (line 2339) | function ConcurrentModificationException() {
  function NullPointerException_init_$Init$ (line 2342) | function NullPointerException_init_$Init$($this) {
  function NullPointerException_init_$Create$ (line 2347) | function NullPointerException_init_$Create$() {
  function NullPointerException (line 2352) | function NullPointerException() {
  function NoWhenBranchMatchedException_init_$Init$ (line 2355) | function NoWhenBranchMatchedException_init_$Init$($this) {
  function NoWhenBranchMatchedException_init_$Create$ (line 2360) | function NoWhenBranchMatchedException_init_$Create$() {
  function NoWhenBranchMatchedException (line 2365) | function NoWhenBranchMatchedException() {
  function ClassCastException_init_$Init$ (line 2368) | function ClassCastException_init_$Init$($this) {
  function ClassCastException_init_$Create$ (line 2373) | function ClassCastException_init_$Create$() {
  function ClassCastException (line 2378) | function ClassCastException() {
  function fillFrom (line 2381) | function fillFrom(src, dst) {
  function arrayCopyResize (line 2395) | function arrayCopyResize(source, newSize, defaultValue) {
  function roundToInt (line 2414) | function roundToInt(_this__u8e3s4) {
  function KClass (line 2427) | function KClass() {
  function KClassImpl (line 2429) | function KClassImpl(jClass) {
  function NothingKClassImpl (line 2460) | function NothingKClassImpl() {
  function NothingKClassImpl_getInstance (line 2478) | function NothingKClassImpl_getInstance() {
  function ErrorKClass (line 2483) | function ErrorKClass() {
  function PrimitiveKClassImpl (line 2495) | function PrimitiveKClassImpl(jClass, givenSimpleName, isInstanceFunction) {
  function SimpleKClassImpl (line 2508) | function SimpleKClassImpl(jClass) {
  function get_functionClasses (line 2519) | function get_functionClasses() {
  function PrimitiveClasses$anyClass$lambda (line 2524) | function PrimitiveClasses$anyClass$lambda(it) {
  function PrimitiveClasses$numberClass$lambda (line 2527) | function PrimitiveClasses$numberClass$lambda(it) {
  function PrimitiveClasses$booleanClass$lambda (line 2530) | function PrimitiveClasses$booleanClass$lambda(it) {
  function PrimitiveClasses$byteClass$lambda (line 2533) | function PrimitiveClasses$byteClass$lambda(it) {
  function PrimitiveClasses$shortClass$lambda (line 2536) | function PrimitiveClasses$shortClass$lambda(it) {
  function PrimitiveClasses$intClass$lambda (line 2539) | function PrimitiveClasses$intClass$lambda(it) {
  function PrimitiveClasses$floatClass$lambda (line 2542) | function PrimitiveClasses$floatClass$lambda(it) {
  function PrimitiveClasses$doubleClass$lambda (line 2545) | function PrimitiveClasses$doubleClass$lambda(it) {
  function PrimitiveClasses$arrayClass$lambda (line 2548) | function PrimitiveClasses$arrayClass$lambda(it) {
  function PrimitiveClasses$stringClass$lambda (line 2551) | function PrimitiveClasses$stringClass$lambda(it) {
  function PrimitiveClasses$throwableClass$lambda (line 2554) | function PrimitiveClasses$throwableClass$lambda(it) {
  function PrimitiveClasses$booleanArrayClass$lambda (line 2557) | function PrimitiveClasses$booleanArrayClass$lambda(it) {
  function PrimitiveClasses$charArrayClass$lambda (line 2560) | function PrimitiveClasses$charArrayClass$lambda(it) {
  function PrimitiveClasses$byteArrayClass$lambda (line 2563) | function PrimitiveClasses$byteArrayClass$lambda(it) {
  function PrimitiveClasses$shortArrayClass$lambda (line 2566) | function PrimitiveClasses$shortArrayClass$lambda(it) {
  function PrimitiveClasses$intArrayClass$lambda (line 2569) | function PrimitiveClasses$intArrayClass$lambda(it) {
  function PrimitiveClasses$longArrayClass$lambda (line 2572) | function PrimitiveClasses$longArrayClass$lambda(it) {
  function PrimitiveClasses$floatArrayClass$lambda (line 2575) | function PrimitiveClasses$floatArrayClass$lambda(it) {
  function PrimitiveClasses$doubleArrayClass$lambda (line 2578) | function PrimitiveClasses$doubleArrayClass$lambda(it) {
  function PrimitiveClasses$functionClass$lambda (line 2581) | function PrimitiveClasses$functionClass$lambda($arity) {
  function PrimitiveClasses (line 2593) | function PrimitiveClasses() {
  function PrimitiveClasses_getInstance (line 2751) | function PrimitiveClasses_getInstance() {
  function _init_properties_primitives_kt__3fums4 (line 2757) | function _init_properties_primitives_kt__3fums4() {
  function getKClass (line 2764) | function getKClass(jClass) {
  function getKClassM (line 2777) | function getKClassM(jClasses) {
  function getKClass1 (line 2800) | function getKClass1(jClass) {
  function getKClassFromExpression (line 2824) | function getKClassFromExpression(e) {
  function reset (line 2914) | function reset(_this__u8e3s4) {
  function CharacterCodingException_init_$Init$ (line 2917) | function CharacterCodingException_init_$Init$($this) {
  function CharacterCodingException_init_$Create$ (line 2921) | function CharacterCodingException_init_$Create$() {
  function CharacterCodingException (line 2926) | function CharacterCodingException(message) {
  function StringBuilder_init_$Init$ (line 2930) | function StringBuilder_init_$Init$(capacity, $this) {
  function StringBuilder_init_$Create$ (line 2934) | function StringBuilder_init_$Create$(capacity) {
  function StringBuilder_init_$Init$_0 (line 2937) | function StringBuilder_init_$Init$_0($this) {
  function StringBuilder_init_$Create$_0 (line 2941) | function StringBuilder_init_$Create$_0() {
  function StringBuilder (line 2944) | function StringBuilder(content) {
  function uppercaseChar (line 2983) | function uppercaseChar(_this__u8e3s4) {
  function checkRadix (line 2990) | function checkRadix(radix) {
  function toInt (line 2996) | function toInt(_this__u8e3s4, radix) {
  function toInt_0 (line 3006) | function toInt_0(_this__u8e3s4) {
  function digitOf (line 3016) | function digitOf(char, radix) {
  function Regex_init_$Init$ (line 3021) | function Regex_init_$Init$(pattern, $this) {
  function Regex_init_$Create$ (line 3025) | function Regex_init_$Create$(pattern) {
  function Companion_2 (line 3028) | function Companion_2() {
  function Companion_getInstance_2 (line 3035) | function Companion_getInstance_2() {
  function Regex (line 3040) | function Regex(pattern, options) {
  function toFlags (line 3056) | function toFlags(_this__u8e3s4, prepend) {
  function toFlags$lambda (line 3059) | function toFlags$lambda(it) {
  function compareTo_0 (line 3063) | function compareTo_0(_this__u8e3s4, other, ignoreCase) {
  function encodeToByteArray (line 3110) | function encodeToByteArray(_this__u8e3s4) {
  function sam$kotlin_Comparator$0 (line 3114) | function sam$kotlin_Comparator$0(function_0) {
  function STRING_CASE_INSENSITIVE_ORDER$lambda (line 3144) | function STRING_CASE_INSENSITIVE_ORDER$lambda(a, b) {
  function _init_properties_stringJs_kt__bg7zye (line 3149) | function _init_properties_stringJs_kt__bg7zye() {
  function get_REPLACEMENT_BYTE_SEQUENCE (line 3156) | function get_REPLACEMENT_BYTE_SEQUENCE() {
  function encodeUtf8 (line 3161) | function encodeUtf8(string, startIndex, endIndex, throwOnMalformed) {
  function codePointFromSurrogate (line 3230) | function codePointFromSurrogate(string, high, index, endIndex, throwOnMa...
  function malformed (line 3243) | function malformed(size, index, throwOnMalformed) {
  function _init_properties_utf8Encoding_kt__9thjs4 (line 3250) | function _init_properties_utf8Encoding_kt__9thjs4() {
  function AbstractCollection$toString$lambda (line 3257) | function AbstractCollection$toString$lambda(this$0) {
  function AbstractCollection (line 3262) | function AbstractCollection() {
  function Companion_3 (line 3325) | function Companion_3() {
  function Companion_getInstance_3 (line 3337) | function Companion_getInstance_3() {
  function Companion_4 (line 3340) | function Companion_4() {
  function Companion_getInstance_4 (line 3359) | function Companion_getInstance_4() {
  function collectionToArrayCommonImpl (line 3362) | function collectionToArrayCommonImpl(collection) {
  function EmptyIterator (line 3379) | function EmptyIterator() {
  function EmptyIterator_getInstance (line 3388) | function EmptyIterator_getInstance() {
  function IntIterator (line 3391) | function IntIterator() {
  function emptySet (line 3396) | function emptySet() {
  function hashSetOf (line 3399) | function hashSetOf(elements) {
  function EmptySet (line 3402) | function EmptySet() {
  function EmptySet_getInstance (line 3437) | function EmptySet_getInstance() {
  function optimizeReadOnlySet (line 3442) | function optimizeReadOnlySet(_this__u8e3s4) {
  function getProgressionLastElement (line 3452) | function getProgressionLastElement(start, end, step) {
  function differenceModulo (line 3463) | function differenceModulo(a, b, c) {
  function mod (line 3466) | function mod(a, b) {
  function Companion_5 (line 3470) | function Companion_5() {
  function Companion_getInstance_5 (line 3475) | function Companion_getInstance_5() {
  function IntRange (line 3480) | function IntRange(start, endInclusive) {
  function IntProgressionIterator (line 3508) | function IntProgressionIterator(first, last, step) {
  function Companion_6 (line 3529) | function Companion_6() {
  function Companion_getInstance_6 (line 3535) | function Companion_getInstance_6() {
  function IntProgression (line 3538) | function IntProgression(start, endInclusive, step) {
  function ClosedRange (line 3568) | function ClosedRange() {
  function ClosedFloatingPointRange (line 3570) | function ClosedFloatingPointRange() {
  function checkStepIsPositive (line 3572) | function checkStepIsPositive(isPositive, step) {
  function appendElement (line 3576) | function appendElement(_this__u8e3s4, element, transform) {
  function toIntOrNull (line 3591) | function toIntOrNull(_this__u8e3s4, radix) {
  function numberFormatError (line 3646) | function numberFormatError(input) {
  function toIntOrNull_0 (line 3649) | function toIntOrNull_0(_this__u8e3s4) {
  function substring (line 3652) | function substring(_this__u8e3s4, range) {
  function _UShort___init__impl__jigrne (line 3659) | function _UShort___init__impl__jigrne(data) {
  function _UShort___get_data__impl__g0245 (line 3662) | function _UShort___get_data__impl__g0245($this) {
  function QRCode$Companion$EMPTY_FN$lambda (line 3665) | function QRCode$Companion$EMPTY_FN$lambda(_this__u8e3s4, _unused_var__et...
  function Companion_7 (line 3668) | function Companion_7() {
  function Companion_getInstance_7 (line 3705) | function Companion_getInstance_7() {
  function draw (line 3710) | function draw($this, xOffset, yOffset, rawData, canvas) {
  function QRCode$draw$lambda (line 3714) | function QRCode$draw$lambda(this$0, $xOffset, $yOffset, $canvas) {
  function QRCode (line 3735) | function QRCode(data, squareSize, canvasSize, xOffset, yOffset, colorFn,...
  function innerSpace (line 3889) | function innerSpace($this) {
  function _get_beforeFn__5052ik (line 3919) | function _get_beforeFn__5052ik($this) {
  function _get_afterFn__jaczeb (line 3922) | function _get_afterFn__jaczeb($this) {
  function _get_colorFunction__6g154a (line 3925) | function _get_colorFunction__6g154a($this) {
  function QRCodeBuilder$withLogo$lambda (line 3936) | function QRCodeBuilder$withLogo$lambda($width, $height) {
  function QRCodeBuilder$withLogo$lambda_0 (line 3961) | function QRCodeBuilder$withLogo$lambda_0($width, $height, $logo) {
  function QRCodeBuilder$withAfterRenderAction$lambda (line 3969) | function QRCodeBuilder$withAfterRenderAction$lambda($action) {
  function QRCodeBuilder$withBeforeRenderAction$lambda (line 3975) | function QRCodeBuilder$withBeforeRenderAction$lambda($action) {
  function QRCodeBuilder$_get_beforeFn_$lambda_n0dxjk (line 3981) | function QRCodeBuilder$_get_beforeFn_$lambda_n0dxjk(this$0) {
  function QRCodeBuilder$_get_afterFn_$lambda_eq0wxh (line 3988) | function QRCodeBuilder$_get_afterFn_$lambda_eq0wxh(this$0) {
  function QRCodeBuilder (line 3995) | function QRCodeBuilder(shape, customShapeFunction) {
  function QRCodeShapesEnum_initEntries (line 4194) | function QRCodeShapesEnum_initEntries() {
  function QRCodeShapesEnum (line 4203) | function QRCodeShapesEnum(name, ordinal) {
  function QRCodeShapesEnum_SQUARE_getInstance (line 4206) | function QRCodeShapesEnum_SQUARE_getInstance() {
  function QRCodeShapesEnum_CIRCLE_getInstance (line 4210) | function QRCodeShapesEnum_CIRCLE_getInstance() {
  function QRCodeShapesEnum_ROUNDED_SQUARE_getInstance (line 4214) | function QRCodeShapesEnum_ROUNDED_SQUARE_getInstance() {
  function QRCodeShapesEnum_CUSTOM_getInstance (line 4218) | function QRCodeShapesEnum_CUSTOM_getInstance() {
  function Colors (line 4222) | function Colors() {
  function Colors_getInstance (line 4846) | function Colors_getInstance() {
  function DefaultColorFunction (line 4849) | function DefaultColorFunction(foreground, background) {
  function LinearGradientColorFunction (line 4861) | function LinearGradientColorFunction(startForegroundColor, endForeground...
  function QRCodeColorFunction (line 4902) | function QRCodeColorFunction() {
  function InsufficientInformationDensityException (line 4904) | function InsufficientInformationDensityException(message, cause) {
  function get (line 4918) | function get($this, index) {
  function BitBuffer (line 4921) | function BitBuffer() {
  function arraycopy (line 4958) | function arraycopy($this, from, fromPos, to, toPos, length) {
  function Polynomial (line 4968) | function Polynomial(num, shift) {
  function isInsideModules (line 5058) | function isInsideModules($this, row, rowOffset, col, colOffset, modulesS...
  function isTopBottomRowSquare (line 5069) | function isTopBottomRowSquare($this, row, col, probeSize) {
  function isLeftRightColSquare (line 5072) | function isLeftRightColSquare($this, row, col, probeSize) {
  function isMidSquare (line 5075) | function isMidSquare($this, row, col, probeSize) {
  function findSquareRegion (line 5078) | function findSquareRegion($this, row, col, probeSize) {
  function set (line 5091) | function set($this, row, col, value, modules, parent) {
  function set$default (line 5099) | function set$default($this, row, col, value, modules, parent, $super) {
  function QRCodeSetup (line 5103) | function QRCodeSetup() {
  function QRCodeSetup_getInstance (line 5364) | function QRCodeSetup_getInstance() {
  function QRCodeSquare (line 5367) | function QRCodeSquare(dark, row, col, moduleSize, squareInfo, rowSize, c...
  function QRCodeSquareInfo (line 5494) | function QRCodeSquareInfo(type, region) {
  function values (line 5542) | function values() {
  function valueOf (line 5545) | function valueOf(value) {
  function QRCodeSquareType_initEntries (line 5562) | function QRCodeSquareType_initEntries() {
  function QRCodeSquareType (line 5571) | function QRCodeSquareType(name, ordinal) {
  function values_0 (line 5585) | function values_0() {
  function valueOf_0 (line 5588) | function valueOf_0(value) {
  function QRCodeRegion_initEntries (line 5619) | function QRCodeRegion_initEntries() {
  function QRCodeRegion (line 5635) | function QRCodeRegion(name, ordinal) {
  function QRCodeSquareType_POSITION_PROBE_getInstance (line 5638) | function QRCodeSquareType_POSITION_PROBE_getInstance() {
  function QRCodeSquareType_POSITION_ADJUST_getInstance (line 5642) | function QRCodeSquareType_POSITION_ADJUST_getInstance() {
  function QRCodeSquareType_TIMING_PATTERN_getInstance (line 5646) | function QRCodeSquareType_TIMING_PATTERN_getInstance() {
  function QRCodeSquareType_DEFAULT_getInstance (line 5650) | function QRCodeSquareType_DEFAULT_getInstance() {
  function QRCodeRegion_TOP_LEFT_CORNER_getInstance (line 5654) | function QRCodeRegion_TOP_LEFT_CORNER_getInstance() {
  function QRCodeRegion_TOP_RIGHT_CORNER_getInstance (line 5658) | function QRCodeRegion_TOP_RIGHT_CORNER_getInstance() {
  function QRCodeRegion_TOP_MID_getInstance (line 5662) | function QRCodeRegion_TOP_MID_getInstance() {
  function QRCodeRegion_LEFT_MID_getInstance (line 5666) | function QRCodeRegion_LEFT_MID_getInstance() {
  function QRCodeRegion_RIGHT_MID_getInstance (line 5670) | function QRCodeRegion_RIGHT_MID_getInstance() {
  function QRCodeRegion_CENTER_getInstance (line 5674) | function QRCodeRegion_CENTER_getInstance() {
  function QRCodeRegion_BOTTOM_LEFT_CORNER_getInstance (line 5678) | function QRCodeRegion_BOTTOM_LEFT_CORNER_getInstance() {
  function QRCodeRegion_BOTTOM_RIGHT_CORNER_getInstance (line 5682) | function QRCodeRegion_BOTTOM_RIGHT_CORNER_getInstance() {
  function QRCodeRegion_BOTTOM_MID_getInstance (line 5686) | function QRCodeRegion_BOTTOM_MID_getInstance() {
  function QRCodeRegion_MARGIN_getInstance (line 5690) | function QRCodeRegion_MARGIN_getInstance() {
  function QRCodeRegion_UNKNOWN_getInstance (line 5694) | function QRCodeRegion_UNKNOWN_getInstance() {
  function QRData (line 5698) | function QRData(dataType, data) {
  function QR8BitByte (line 5760) | function QR8BitByte(data) {
  function charCode (line 5778) | function charCode($this, c) {
  function QRAlphaNum (line 5811) | function QRAlphaNum(data) {
  function QRNumber (line 5828) | function QRNumber(data) {
  function QRMath (line 5870) | function QRMath() {
  function QRMath_getInstance (line 5920) | function QRMath_getInstance() {
  function isNumber_0 (line 5925) | function isNumber_0($this, s) {
  function isAlphaNum (line 5929) | function isAlphaNum($this, s) {
  function getBCHDigit (line 5933) | function getBCHDigit($this, data) {
  function QRUtil (line 5942) | function QRUtil() {
  function QRUtil_getInstance (line 6496) | function QRUtil_getInstance() {
  function Companion_8 (line 6501) | function Companion_8() {
  function Companion_getInstance_8 (line 6866) | function Companion_getInstance_8() {
  function RSBlock (line 6871) | function RSBlock(totalCount, dataCount) {
  function values_1 (line 6900) | function values_1() {
  function valueOf_1 (line 6903) | function valueOf_1(value) {
  function ErrorCorrectionLevel_initEntries (line 6920) | function ErrorCorrectionLevel_initEntries() {
  function ErrorCorrectionLevel (line 6929) | function ErrorCorrectionLevel(name, ordinal, value, maxTypeNum) {
  function values_2 (line 6948) | function values_2() {
  function valueOf_2 (line 6951) | function valueOf_2(value) {
  function MaskPattern_initEntries (line 6976) | function MaskPattern_initEntries() {
  function MaskPattern (line 6989) | function MaskPattern(name, ordinal) {
  function values_3 (line 6995) | function values_3() {
  function valueOf_3 (line 6998) | function valueOf_3(value) {
  function QRCodeDataType_initEntries (line 7013) | function QRCodeDataType_initEntries() {
  function QRCodeDataType (line 7021) | function QRCodeDataType(name, ordinal, value) {
  function ErrorCorrectionLevel_LOW_getInstance (line 7028) | function ErrorCorrectionLevel_LOW_getInstance() {
  function ErrorCorrectionLevel_MEDIUM_getInstance (line 7032) | function ErrorCorrectionLevel_MEDIUM_getInstance() {
  function ErrorCorrectionLevel_HIGH_getInstance (line 7036) | function ErrorCorrectionLevel_HIGH_getInstance() {
  function ErrorCorrectionLevel_VERY_HIGH_getInstance (line 7040) | function ErrorCorrectionLevel_VERY_HIGH_getInstance() {
  function MaskPattern_PATTERN000_getInstance (line 7044) | function MaskPattern_PATTERN000_getInstance() {
  function MaskPattern_PATTERN001_getInstance (line 7048) | function MaskPattern_PATTERN001_getInstance() {
  function MaskPattern_PATTERN010_getInstance (line 7052) | function MaskPattern_PATTERN010_getInstance() {
  function MaskPattern_PATTERN011_getInstance (line 7056) | function MaskPattern_PATTERN011_getInstance() {
  function MaskPattern_PATTERN100_getInstance (line 7060) | function MaskPattern_PATTERN100_getInstance() {
  function MaskPattern_PATTERN101_getInstance (line 7064) | function MaskPattern_PATTERN101_getInstance() {
  function MaskPattern_PATTERN110_getInstance (line 7068) | function MaskPattern_PATTERN110_getInstance() {
  function MaskPattern_PATTERN111_getInstance (line 7072) | function MaskPattern_PATTERN111_getInstance() {
  function QRCodeDataType_NUMBERS_getInstance (line 7076) | function QRCodeDataType_NUMBERS_getInstance() {
  function QRCodeDataType_UPPER_ALPHA_NUM_getInstance (line 7080) | function QRCodeDataType_UPPER_ALPHA_NUM_getInstance() {
  function QRCodeDataType_DEFAULT_getInstance (line 7084) | function QRCodeDataType_DEFAULT_getInstance() {
  function Companion_9 (line 7088) | function Companion_9() {
  function Companion_getInstance_9 (line 7136) | function Companion_getInstance_9() {
  function createData (line 7139) | function createData($this, type) {
  function createBytes (line 7176) | function createBytes($this, buffer, rsBlocks) {
  function QRCodeProcessor$render$lambda (line 7282) | function QRCodeProcessor$render$lambda($cellSize, $darkColor, $brightCol...
  function QRCodeProcessor (line 7295) | function QRCodeProcessor(data, errorCorrectionLevel, dataType, graphicsF...
  function QRCodeGraphicsFactory (line 7442) | function QRCodeGraphicsFactory() {
  function Companion_10 (line 7450) | function Companion_10() {
  function Companion_getInstance_10 (line 7459) | function Companion_getInstance_10() {
  function CircleShapeFunction (line 7462) | function CircleShapeFunction(squareSize, innerSpace) {
  function drawSquaresLine (line 7467) | function drawSquaresLine($this, x, y, amount, skip, color, canvas) {
  function DefaultShapeFunction (line 7480) | function DefaultShapeFunction(squareSize, innerSpace) {
  function QRCodeShapeFunction (line 7531) | function QRCodeShapeFunction() {
  function Companion_11 (line 7533) | function Companion_11() {
  function Companion_getInstance_11 (line 7542) | function Companion_getInstance_11() {
  function RoundSquaresShapeFunction (line 7545) | function RoundSquaresShapeFunction(squareSize, radius, innerSpace) {
  function Companion_12 (line 7558) | function Companion_12() {
  function Companion_getInstance_12 (line 7563) | function Companion_getInstance_12() {
  function rgba (line 7566) | function rgba($this, color) {
  function draw_0 (line 7573) | function draw_0($this, color, action) {
  function tryGet (line 7583) | function tryGet($this, what) {
  function QRCodeGraphics$lambda (line 7598) | function QRCodeGraphics$lambda() {
  function QRCodeGraphics$draw$lambda (line 7602) | function QRCodeGraphics$draw$lambda(this$0) {
  function QRCodeGraphics$reset$lambda (line 7608) | function QRCodeGraphics$reset$lambda(this$0) {
  function QRCodeGraphics$drawLine$lambda (line 7614) | function QRCodeGraphics$drawLine$lambda($x1, $y1, $x2, $y2) {
  function QRCodeGraphics$drawRect$lambda (line 7621) | function QRCodeGraphics$drawRect$lambda($thickness, $x, $y, $width, $hei...
  function QRCodeGraphics$fillRect$lambda (line 7629) | function QRCodeGraphics$fillRect$lambda($x, $y, $width, $height) {
  function QRCodeGraphics$drawEllipse$lambda (line 7635) | function QRCodeGraphics$drawEllipse$lambda($width, $height, $thickness, ...
  function QRCodeGraphics$fillEllipse$lambda (line 7646) | function QRCodeGraphics$fillEllipse$lambda($width, $height, $x, $y) {
  function QRCodeGraphics$drawImage$lambda (line 7656) | function QRCodeGraphics$drawImage$lambda($rawData, this$0, $x, $y) {
  function QRCodeGraphics (line 7663) | function QRCodeGraphics(width, height) {
  function $jsExportAll$ (line 7797) | function $jsExportAll$(_) {
Condensed preview — 149 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,060K chars).
[
  {
    "path": ".editorconfig",
    "chars": 935,
    "preview": "root = true\n\n[*]\ncharset = utf-8\ntrim_trailing_whitespace = true\nend_of_line = lf\n\n[*.{kt,kts,md}]\nij_kotlin_code_style_"
  },
  {
    "path": ".gitattributes",
    "chars": 184,
    "preview": "#\r\n# https://help.github.com/articles/dealing-with-line-endings/\r\n#\r\n# These are explicitly windows files and should use"
  },
  {
    "path": ".github/FUNDING.yml",
    "chars": 59,
    "preview": "github: g0dkar\nko_fi: 'g0dkar'\n#custom: 'https://min.immo'\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.md",
    "chars": 1047,
    "preview": "---\nname: Bug report\nabout: Create a report to help us improve\ntitle: ''\nlabels: bug\nassignees: g0dkar\n\n---\n\n<!--\n[pt] S"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_request.md",
    "chars": 724,
    "preview": "---\nname: Feature request\nabout: Suggest an idea for this project\ntitle: ''\nlabels: ''\nassignees: ''\n\n---\n\n<!--\n[pt] Se "
  },
  {
    "path": ".github/renovate.json",
    "chars": 245,
    "preview": "{\n  \"$schema\": \"https://docs.renovatebot.com/renovate-schema.json\",\n  \"extends\": [\n    \"config:best-practices\"\n  ],\n  \"a"
  },
  {
    "path": ".github/workflows/dokka-update.yml",
    "chars": 976,
    "preview": "name: Dokka Update\n\non:\n  push:\n    branches: [ \"gh-page\" ]\n\njobs:\n  build:\n    runs-on: ubuntu-latest\n    steps:\n      "
  },
  {
    "path": ".github/workflows/run-tests.yml",
    "chars": 956,
    "preview": "name: Run Tests\n\non:\n  push:\n    branches: [ \"main\" ]\n  pull_request:\n    branches: [ \"main\" ]\n\njobs:\n  build:\n    runs-"
  },
  {
    "path": ".gitignore",
    "chars": 840,
    "preview": "HELP.md\ntarget/\n!.mvn/wrapper/maven-wrapper.jar\n!**/src/main/**\n!**/src/test/**\n\n.gradle\n!**/src/main/**/build/\n!**/src/"
  },
  {
    "path": ".run/Build.run.xml",
    "chars": 1017,
    "preview": "<component name=\"ProjectRunConfigurationManager\">\n  <configuration default=\"false\" name=\"Build\" type=\"GradleRunConfigura"
  },
  {
    "path": ".run/Publish Distribution - Sonar.run.xml",
    "chars": 1083,
    "preview": "<component name=\"ProjectRunConfigurationManager\">\n  <configuration default=\"false\" name=\"Publish Distribution - Sonar\" t"
  },
  {
    "path": ".run/Publish to Local.run.xml",
    "chars": 1039,
    "preview": "<component name=\"ProjectRunConfigurationManager\">\n  <configuration default=\"false\" name=\"Publish to Local\" type=\"GradleR"
  },
  {
    "path": ".run/Run Tests.run.xml",
    "chars": 940,
    "preview": "<component name=\"ProjectRunConfigurationManager\">\n  <configuration default=\"false\" name=\"Run Tests\" type=\"GradleRunConfi"
  },
  {
    "path": "CHANGELOG.md",
    "chars": 5712,
    "preview": "[![License](https://img.shields.io/github/license/g0dkar/qrcode-kotlin)](LICENSE)\n[![Maven Central](https://img.shields."
  },
  {
    "path": "CNAME",
    "chars": 16,
    "preview": "qrcodekotlin.com"
  },
  {
    "path": "CODE_OF_CONDUCT.md",
    "chars": 5312,
    "preview": "# Contributor Covenant Code of Conduct\n\n> **TL;DR Don't be an asshole, don't call people names and don't fight. Be an ad"
  },
  {
    "path": "LICENSE",
    "chars": 1088,
    "preview": "MIT License\n\nCopyright (c) 2021 Rafael Madureira Lins de Araújo\n\nPermission is hereby granted, free of charge, to any pe"
  },
  {
    "path": "README.md",
    "chars": 8986,
    "preview": "# QRCode-Kotlin\n\n[![License](https://img.shields.io/github/license/g0dkar/qrcode-kotlin)](LICENSE)\n[![Maven Central](htt"
  },
  {
    "path": "README.pt-br.md",
    "chars": 9445,
    "preview": "# QRCode-Kotlin\n\n[![License](https://img.shields.io/github/license/g0dkar/qrcode-kotlin)](LICENSE)\n[![Maven Central](htt"
  },
  {
    "path": "_config.yml",
    "chars": 27,
    "preview": "theme: jekyll-theme-tactile"
  },
  {
    "path": "build.gradle.kts",
    "chars": 9478,
    "preview": "@file:OptIn(ExperimentalWasmDsl::class)\n\nimport org.gradle.api.tasks.testing.logging.TestExceptionFormat.FULL\nimport org"
  },
  {
    "path": "examples/android/build.gradle.kts",
    "chars": 1548,
    "preview": "plugins {\n    alias(libs.plugins.android.application)\n    alias(libs.plugins.kotlin.android)\n    alias(libs.plugins.comp"
  },
  {
    "path": "examples/android/proguard-rules.pro",
    "chars": 750,
    "preview": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguar"
  },
  {
    "path": "examples/android/src/main/AndroidManifest.xml",
    "chars": 1446,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:to"
  },
  {
    "path": "examples/android/src/main/java/io/github/g0dkar/qrcode/AboutActivity.kt",
    "chars": 307,
    "preview": "package io.github.g0dkar.qrcode\n\nimport android.os.Bundle\nimport androidx.appcompat.app.AppCompatActivity\n\nclass AboutAc"
  },
  {
    "path": "examples/android/src/main/java/io/github/g0dkar/qrcode/NewQRCodeActivity.kt",
    "chars": 3960,
    "preview": "package io.github.g0dkar.qrcode\n\nimport android.content.Intent\nimport android.graphics.Bitmap\nimport android.os.Bundle\ni"
  },
  {
    "path": "examples/android/src/main/java/io/github/g0dkar/qrcode/QRCodeData.kt",
    "chars": 1310,
    "preview": "package io.github.g0dkar.qrcode\n\nimport android.content.SharedPreferences\nimport android.graphics.Bitmap\nimport qrcode.Q"
  },
  {
    "path": "examples/android/src/main/java/io/github/g0dkar/qrcode/QRCodeDetailActivity.kt",
    "chars": 1816,
    "preview": "package io.github.g0dkar.qrcode\n\nimport android.os.Bundle\nimport android.view.View\nimport android.widget.ImageView\nimpor"
  },
  {
    "path": "examples/android/src/main/java/io/github/g0dkar/qrcode/QRCodeListActivity.kt",
    "chars": 3215,
    "preview": "package io.github.g0dkar.qrcode\n\nimport android.content.Intent\nimport android.os.Bundle\nimport android.view.View\nimport "
  },
  {
    "path": "examples/android/src/main/java/io/github/g0dkar/qrcode/extra/QRCodeListAdapter.kt",
    "chars": 2051,
    "preview": "package io.github.g0dkar.qrcode.extra\n\nimport android.view.LayoutInflater\nimport android.view.View\nimport android.view.V"
  },
  {
    "path": "examples/android/src/main/java/io/github/g0dkar/qrcode/extra/QRCodeListDatasource.kt",
    "chars": 2347,
    "preview": "package io.github.g0dkar.qrcode.extra\n\nimport android.content.Context\nimport android.content.SharedPreferences\nimport an"
  },
  {
    "path": "examples/android/src/main/res/drawable/ic_launcher_background.xml",
    "chars": 4593,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector\n  xmlns:android=\"http://schemas.android.com/apk/res/android\"\n  android:he"
  },
  {
    "path": "examples/android/src/main/res/drawable-v24/ic_launcher_foreground.xml",
    "chars": 1551,
    "preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n  xmlns:aapt=\"http://schemas.android.com/aapt\"\n  andr"
  },
  {
    "path": "examples/android/src/main/res/layout/activity_about.xml",
    "chars": 1009,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<androidx.constraintlayout.widget.ConstraintLayout xmlns:android=\"http://schemas."
  },
  {
    "path": "examples/android/src/main/res/layout/activity_main.xml",
    "chars": 1737,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<androidx.constraintlayout.widget.ConstraintLayout xmlns:android=\"http://schemas"
  },
  {
    "path": "examples/android/src/main/res/layout/activity_new_qrcode.xml",
    "chars": 2962,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<androidx.constraintlayout.widget.ConstraintLayout xmlns:android=\"http://schemas."
  },
  {
    "path": "examples/android/src/main/res/layout/activity_qrcode_detail.xml",
    "chars": 2177,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<androidx.constraintlayout.widget.ConstraintLayout xmlns:android=\"http://schemas."
  },
  {
    "path": "examples/android/src/main/res/layout/qrcode_list_item.xml",
    "chars": 2036,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--\n     Copyright (C) 2020 The Android Open Source Project\n     Licensed under t"
  },
  {
    "path": "examples/android/src/main/res/menu/menu_main.xml",
    "chars": 453,
    "preview": "<menu xmlns:android=\"http://schemas.android.com/apk/res/android\"\n  xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n "
  },
  {
    "path": "examples/android/src/main/res/mipmap-anydpi-v26/ic_launcher.xml",
    "chars": 266,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<adaptive-icon xmlns:android=\"http://schemas.android.com/apk/res/android\">\n  <bac"
  },
  {
    "path": "examples/android/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml",
    "chars": 266,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<adaptive-icon xmlns:android=\"http://schemas.android.com/apk/res/android\">\n  <bac"
  },
  {
    "path": "examples/android/src/main/res/values/colors.xml",
    "chars": 364,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n  <color name=\"purple_200\">#FFBB86FC</color>\n  <color name=\"purple_50"
  },
  {
    "path": "examples/android/src/main/res/values/dimens.xml",
    "chars": 244,
    "preview": "<resources>\n  <dimen name=\"fab_margin\">16dp</dimen>\n  <!-- Default screen margins, per the Android Design guidelines. --"
  },
  {
    "path": "examples/android/src/main/res/values/strings.xml",
    "chars": 1252,
    "preview": "<resources>\n    <string name=\"app_name\" translatable=\"false\">QRCodeKotlinExampleApp</string>\n\n    <string name=\"action_a"
  },
  {
    "path": "examples/android/src/main/res/values/themes.xml",
    "chars": 1166,
    "preview": "<resources xmlns:tools=\"http://schemas.android.com/tools\">\n  <!-- Base application theme. -->\n  <style name=\"Theme.QRCod"
  },
  {
    "path": "examples/android/src/main/res/values-land/dimens.xml",
    "chars": 120,
    "preview": "<resources>\n  <dimen name=\"fab_margin\">48dp</dimen>\n  <dimen name=\"activity_horizontal_margin\">48dp</dimen>\n</resources>"
  },
  {
    "path": "examples/android/src/main/res/values-night/themes.xml",
    "chars": 798,
    "preview": "<resources xmlns:tools=\"http://schemas.android.com/tools\">\n  <!-- Base application theme. -->\n  <style name=\"Theme.QRCod"
  },
  {
    "path": "examples/android/src/main/res/values-pt-rBR/strings.xml",
    "chars": 1258,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"action_about\">Sobre</string>\n    <string name=\"titl"
  },
  {
    "path": "examples/android/src/main/res/values-w1240dp/dimens.xml",
    "chars": 122,
    "preview": "<resources>\n  <dimen name=\"fab_margin\">200dp</dimen>\n  <dimen name=\"activity_horizontal_margin\">200dp</dimen>\n</resource"
  },
  {
    "path": "examples/android/src/main/res/values-w600dp/dimens.xml",
    "chars": 120,
    "preview": "<resources>\n  <dimen name=\"fab_margin\">48dp</dimen>\n  <dimen name=\"activity_horizontal_margin\">48dp</dimen>\n</resources>"
  },
  {
    "path": "examples/android/src/main/res/xml/backup_rules.xml",
    "chars": 477,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n   Sample backup rules file; uncomment and customize as necessary.\n   See ht"
  },
  {
    "path": "examples/android/src/main/res/xml/data_extraction_rules.xml",
    "chars": 542,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n   Sample data extraction rules file; uncomment and customize as necessary.\n"
  },
  {
    "path": "examples/iosApp/.gitignore",
    "chars": 229,
    "preview": "# Xcode\n.DS_Store\nbuild/\n*.pbxuser\n*.mode1v3\n*.mode2v3\n*.perspectivev3\nxcuserdata/\n\n# Swift\n*.swiftpm\n\n# CocoaPods\nPods/"
  },
  {
    "path": "examples/iosApp/iosApp/Assets.xcassets/AccentColor.colorset/Contents.json",
    "chars": 123,
    "preview": "{\n  \"colors\" : [\n    {\n      \"idiom\" : \"universal\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }"
  },
  {
    "path": "examples/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/Contents.json",
    "chars": 177,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"platform\" : \"ios\",\n      \"size\" : \"1024x1024\"\n    }\n  ],\n  \"i"
  },
  {
    "path": "examples/iosApp/iosApp/Assets.xcassets/Contents.json",
    "chars": 63,
    "preview": "{\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "examples/iosApp/iosApp/Preview Content/Preview Assets.xcassets/Contents.json",
    "chars": 63,
    "preview": "{\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "examples/iosApp/iosApp/presentation/ContentView.swift",
    "chars": 1136,
    "preview": "//\n//  ContentView.swift\n//  iosApp\n//\n//  Created by Rui Canas on 26/11/2023.\n//\n\nimport SwiftUI\nimport qrcode_kotlin\n\n"
  },
  {
    "path": "examples/iosApp/iosApp/presentation/iosApp.swift",
    "chars": 217,
    "preview": "//\n//  iosAppApp.swift\n//  iosApp\n//\n//  Created by Rui Canas on 26/11/2023.\n//\n\nimport SwiftUI\n\n@main\nstruct iosApp: Ap"
  },
  {
    "path": "examples/iosApp/iosApp/utils/NativeParser.swift",
    "chars": 875,
    "preview": "//  NativeParser.swift\n//  iosApp\n//\n//  Created by Rui Canas on 01/12/2023.\n//\n\nimport qrcode_kotlin\n\nextension KotlinB"
  },
  {
    "path": "examples/iosApp/iosApp.xcodeproj/project.pbxproj",
    "chars": 24107,
    "preview": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 56;\n\tobjects = {\n\n/* Begin PBXBuildFile section *"
  },
  {
    "path": "examples/iosApp/iosAppTests/iosAppTests.swift",
    "chars": 1216,
    "preview": "//\n//  iosAppTests.swift\n//  iosAppTests\n//\n//  Created by Rui Canas on 26/11/2023.\n//\n\nimport XCTest\n@testable import i"
  },
  {
    "path": "examples/iosApp/iosAppUITests/iosAppUITests.swift",
    "chars": 1369,
    "preview": "//\n//  iosAppUITests.swift\n//  iosAppUITests\n//\n//  Created by Rui Canas on 26/11/2023.\n//\n\nimport XCTest\n\nfinal class i"
  },
  {
    "path": "examples/iosApp/iosAppUITests/iosAppUITestsLaunchTests.swift",
    "chars": 799,
    "preview": "//\n//  iosAppUITestsLaunchTests.swift\n//  iosAppUITests\n//\n//  Created by Rui Canas on 26/11/2023.\n//\n\nimport XCTest\n\nfi"
  },
  {
    "path": "examples/java/build.gradle.kts",
    "chars": 204,
    "preview": "plugins {\n    java\n}\n\nrepositories {\n    mavenCentral()\n    mavenLocal()\n}\n\ndependencies {\n    implementation(\"io.github"
  },
  {
    "path": "examples/java/src/main/java/examples/Example01_Shapes.java",
    "chars": 2282,
    "preview": "package examples;\n\nimport examples.customClasses.JVMTriangleShapeFunction;\nimport examples.customClasses.TriangleShapeFu"
  },
  {
    "path": "examples/java/src/main/java/examples/Example02_Colors.java",
    "chars": 1982,
    "preview": "package examples;\n\nimport qrcode.QRCode;\nimport qrcode.color.Colors;\n\n/**\n * Examples written for Java 17+\n */\npublic cl"
  },
  {
    "path": "examples/java/src/main/java/examples/Example03_SVG.java",
    "chars": 1476,
    "preview": "package examples;\n\nimport examples.svg.SVGGraphicsFactory;\nimport qrcode.QRCode;\n\n/**\n * Examples written for Java 17+\n "
  },
  {
    "path": "examples/java/src/main/java/examples/Util.java",
    "chars": 403,
    "preview": "package examples;\n\nimport java.io.FileOutputStream;\n\nfinal class Util {\n    private Util() {\n    }\n\n    public static vo"
  },
  {
    "path": "examples/java/src/main/java/examples/customClasses/JVMTriangleShapeFunction.java",
    "chars": 1121,
    "preview": "package examples.customClasses;\n\nimport qrcode.QRCode;\nimport qrcode.render.QRCodeGraphics;\nimport qrcode.shape.DefaultS"
  },
  {
    "path": "examples/java/src/main/java/examples/customClasses/TriangleShapeFunction.java",
    "chars": 1021,
    "preview": "package examples.customClasses;\n\nimport qrcode.QRCode;\nimport qrcode.render.QRCodeGraphics;\nimport qrcode.shape.DefaultS"
  },
  {
    "path": "examples/java/src/main/java/examples/svg/SVGGraphicsFactory.java",
    "chars": 478,
    "preview": "package examples.svg;\n\nimport org.jetbrains.annotations.NotNull;\nimport qrcode.render.QRCodeGraphics;\nimport qrcode.rend"
  },
  {
    "path": "examples/java/src/main/java/examples/svg/SVGQRCodeGraphics.java",
    "chars": 993,
    "preview": "package examples.svg;\n\nimport org.jetbrains.annotations.NotNull;\nimport org.jfree.svg.SVGGraphics2D;\nimport qrcode.rende"
  },
  {
    "path": "examples/js/qrcode-example.html",
    "chars": 7315,
    "preview": "<!doctype html>\n<html class=\"dark\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-wi"
  },
  {
    "path": "examples/js/qrcode-kotlin.js",
    "chars": 300418,
    "preview": "//region block: polyfills\nif (typeof ArrayBuffer.isView === 'undefined') {\n  ArrayBuffer.isView = function (a) {\n    ret"
  },
  {
    "path": "examples/kotlin/build.gradle.kts",
    "chars": 213,
    "preview": "plugins {\n    kotlin(\"jvm\")\n}\n\nrepositories {\n    mavenLocal()\n    mavenCentral()\n}\n\ndependencies {\n    implementation(\""
  },
  {
    "path": "examples/kotlin/src/main/kotlin/Example00-Simple.kt",
    "chars": 318,
    "preview": "import qrcode.QRCode\nimport java.io.FileOutputStream\n\nfun main() {\n    val simpleQRCode = QRCode.ofSquares()\n        .bu"
  },
  {
    "path": "examples/kotlin/src/main/kotlin/Example01-Shapes.kt",
    "chars": 4192,
    "preview": "import qrcode.QRCode\nimport qrcode.color.Colors\nimport qrcode.raw.QRCodeProcessor\nimport qrcode.render.QRCodeGraphics\nim"
  },
  {
    "path": "examples/kotlin/src/main/kotlin/Example02-Colors.kt",
    "chars": 1821,
    "preview": "import qrcode.QRCode\nimport qrcode.color.Colors\nimport java.io.FileOutputStream\n\nfun main() {\n    // All supported platf"
  },
  {
    "path": "examples/kotlin/src/main/kotlin/Example03-Logo.kt",
    "chars": 1340,
    "preview": "import qrcode.QRCode\nimport java.io.FileOutputStream\n\nfun main() {\n    // Examples written around the time of the 2023 H"
  },
  {
    "path": "examples/kotlin/src/main/kotlin/Example04-SVG.kt",
    "chars": 1762,
    "preview": "import qrcode.QRCode\nimport svg.SVGGraphicsFactory\nimport java.io.FileOutputStream\n\nfun main() {\n    // This example nee"
  },
  {
    "path": "examples/kotlin/src/main/kotlin/Example05-BackwardsCompat.kt",
    "chars": 579,
    "preview": "import qrcode.QRCode\nimport java.awt.image.BufferedImage\nimport java.io.FileOutputStream\nimport javax.imageio.ImageIO\n\nf"
  },
  {
    "path": "examples/kotlin/src/main/kotlin/Example06-ECL.kt",
    "chars": 4693,
    "preview": "import qrcode.QRCode\nimport qrcode.raw.ErrorCorrectionLevel\nimport java.io.FileOutputStream\n\nfun main() {\n    // Example"
  },
  {
    "path": "examples/kotlin/src/main/kotlin/Example07-MaskPattern.kt",
    "chars": 1043,
    "preview": "import qrcode.QRCode\nimport qrcode.raw.MaskPattern\nimport java.io.FileOutputStream\n\nfun main() {\n    // This example sho"
  },
  {
    "path": "examples/kotlin/src/main/kotlin/ProjectLogo.kt",
    "chars": 2626,
    "preview": "import qrcode.QRCode\nimport qrcode.color.Colors\nimport qrcode.color.Colors.css\nimport qrcode.raw.ErrorCorrectionLevel\nim"
  },
  {
    "path": "examples/kotlin/src/main/kotlin/svg/SVGGraphicsFactory.kt",
    "chars": 362,
    "preview": "package svg\n\nimport qrcode.render.QRCodeGraphics\nimport qrcode.render.QRCodeGraphicsFactory\n\n/**\n * Class that'll create"
  },
  {
    "path": "examples/kotlin/src/main/kotlin/svg/SVGQRCodeGraphics.kt",
    "chars": 707,
    "preview": "package svg\n\nimport org.jfree.svg.SVGGraphics2D\nimport qrcode.render.QRCodeGraphics\nimport java.awt.Graphics2D\nimport ja"
  },
  {
    "path": "examples/spring-web/.gitignore",
    "chars": 468,
    "preview": "HELP.md\n.gradle\nbuild/\n!gradle/wrapper/gradle-wrapper.jar\n!**/src/main/**/build/\n!**/src/test/**/build/\n\n### STS ###\n.ap"
  },
  {
    "path": "examples/spring-web/build.gradle.kts",
    "chars": 1027,
    "preview": "plugins {\n    kotlin(\"jvm\")\n    kotlin(\"plugin.spring\") version \"1.9.25\"\n    id(\"org.springframework.boot\") version \"3.4"
  },
  {
    "path": "examples/spring-web/src/main/kotlin/io/github/g0dkar/qrcode/springWebExample/Launcher.kt",
    "chars": 299,
    "preview": "package io.github.g0dkar.qrcode.springWebExample\n\nimport org.springframework.boot.autoconfigure.SpringBootApplication\nim"
  },
  {
    "path": "examples/spring-web/src/main/kotlin/io/github/g0dkar/qrcode/springWebExample/QRCodeController.kt",
    "chars": 2779,
    "preview": "package io.github.g0dkar.qrcode.springWebExample\n\nimport org.springframework.core.io.ByteArrayResource\nimport org.spring"
  },
  {
    "path": "examples/spring-web/src/main/kotlin/io/github/g0dkar/qrcode/springWebExample/QRCodeService.kt",
    "chars": 877,
    "preview": "package io.github.g0dkar.qrcode.springWebExample\n\nimport org.springframework.stereotype.Service\nimport qrcode.QRCodeBuil"
  },
  {
    "path": "examples/spring-web/src/main/resources/application.yml",
    "chars": 53,
    "preview": "spring:\n  application:\n    name: QRCodeKotlinExample\n"
  },
  {
    "path": "gradle/libs.versions.toml",
    "chars": 2856,
    "preview": "[versions]\nannotation = \"1.9.1\"\nkotlin = \"2.1.21\"\ndokka = \"2.0.0\"\nkotest = \"6.0.0.M3\"\nlifecycleLivedataKtx = \"2.9.1\"\nlif"
  },
  {
    "path": "gradle/wrapper/gradle-wrapper.properties",
    "chars": 253,
    "preview": "distributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributi"
  },
  {
    "path": "gradle.properties",
    "chars": 531,
    "preview": "version=4.5.0\nkotlin.code.style=official\n\n# JS\nkotlin.js.generate.executable.default=false\nkotlin.js.ir.output.granulari"
  },
  {
    "path": "gradlew",
    "chars": 8710,
    "preview": "#!/bin/sh\n\n#\n# Copyright © 2015-2021 the original authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"Lice"
  },
  {
    "path": "gradlew.bat",
    "chars": 2937,
    "preview": "@rem\r\n@rem Copyright 2015 the original author or authors.\r\n@rem\r\n@rem Licensed under the Apache License, Version 2.0 (th"
  },
  {
    "path": "package.json",
    "chars": 618,
    "preview": "{\n  \"name\": \"qrcode-kotlin\",\n  \"version\": \"4.3.0\",\n  \"description\": \"Generate Beautiful QRCodes in pure JS (actually, Ko"
  },
  {
    "path": "release/qrcode-kotlin.d.ts",
    "chars": 27013,
    "preview": "type Nullable<T> = T | null | undefined\nexport declare namespace qrcode {\n    class QRCode {\n        constructor(data: s"
  },
  {
    "path": "release/qrcode-kotlin.js",
    "chars": 297611,
    "preview": "//region block: polyfills\n(function () {\n  if (typeof globalThis === 'object')\n    return;\n  Object.defineProperty(Objec"
  },
  {
    "path": "settings.gradle.kts",
    "chars": 423,
    "preview": "dependencyResolutionManagement {\n    repositories {\n        mavenCentral()\n        google()\n        gradlePluginPortal()"
  },
  {
    "path": "src/androidMain/kotlin/qrcode/render/QRCodeGraphics.android.kt",
    "chars": 7343,
    "preview": "package qrcode.render\n\nimport android.graphics.Bitmap\nimport android.graphics.Bitmap.CompressFormat\nimport android.graph"
  },
  {
    "path": "src/androidMain/kotlin/qrcode/render/extensions/AndroidComposeExtensions.kt",
    "chars": 2088,
    "preview": "package qrcode.render.extensions\n\nimport androidx.compose.ui.geometry.Offset\nimport androidx.compose.ui.geometry.Size\nim"
  },
  {
    "path": "src/androidMain/kotlin/qrcode/render/graphics/AndroidDrawingInterface.kt",
    "chars": 1008,
    "preview": "package qrcode.render.graphics\n\nimport android.graphics.Bitmap\n\ninterface AndroidDrawingInterface {\n    fun drawLine(x1:"
  },
  {
    "path": "src/androidMain/kotlin/qrcode/render/graphics/BitmapGraphics.kt",
    "chars": 5433,
    "preview": "package qrcode.render.graphics\n\nimport android.graphics.Bitmap\nimport android.graphics.Bitmap.CompressFormat\nimport andr"
  },
  {
    "path": "src/androidMain/kotlin/qrcode/render/graphics/DrawScopeGraphics.kt",
    "chars": 5020,
    "preview": "package qrcode.render.graphics\n\nimport android.graphics.Bitmap\nimport androidx.compose.ui.geometry.CornerRadius\nimport a"
  },
  {
    "path": "src/commonMain/kotlin/qrcode/QRCode.kt",
    "chars": 11249,
    "preview": "package qrcode\n\nimport qrcode.QRCode.Companion.DEFAULT_QRCODE_SIZE\nimport qrcode.QRCode.Companion.DEFAULT_SQUARE_SIZE\nim"
  },
  {
    "path": "src/commonMain/kotlin/qrcode/QRCodeBuilder.kt",
    "chars": 14008,
    "preview": "package qrcode\n\nimport qrcode.QRCode.Companion.EMPTY_FN\nimport qrcode.QRCodeShapesEnum.CIRCLE\nimport qrcode.QRCodeShapes"
  },
  {
    "path": "src/commonMain/kotlin/qrcode/QRCodeShapesEnum.kt",
    "chars": 103,
    "preview": "package qrcode\n\nenum class QRCodeShapesEnum {\n    SQUARE,\n    CIRCLE,\n    ROUNDED_SQUARE,\n    CUSTOM\n}\n"
  },
  {
    "path": "src/commonMain/kotlin/qrcode/color/ColorType.kt",
    "chars": 48,
    "preview": "package qrcode.color\n\ntypealias ColorType = Int\n"
  },
  {
    "path": "src/commonMain/kotlin/qrcode/color/Colors.kt",
    "chars": 8972,
    "preview": "package qrcode.color\n\nimport qrcode.color.Colors.css\nimport qrcode.color.Colors.getRGBA\nimport qrcode.color.Colors.withA"
  },
  {
    "path": "src/commonMain/kotlin/qrcode/color/DefaultColorFunction.kt",
    "chars": 701,
    "preview": "package qrcode.color\n\nimport qrcode.QRCode\nimport qrcode.render.QRCodeGraphics\n\n/**\n * Default function for the QRCode c"
  },
  {
    "path": "src/commonMain/kotlin/qrcode/color/LinearGradientColorFunction.kt",
    "chars": 1313,
    "preview": "package qrcode.color\n\nimport qrcode.QRCode\nimport qrcode.render.QRCodeGraphics\nimport kotlin.jvm.JvmOverloads\nimport kot"
  },
  {
    "path": "src/commonMain/kotlin/qrcode/color/QRCodeColorFunction.kt",
    "chars": 1046,
    "preview": "package qrcode.color\n\nimport qrcode.QRCode\nimport qrcode.internals.QRCodeSquare\nimport qrcode.render.QRCodeGraphics\n\n/**"
  },
  {
    "path": "src/commonMain/kotlin/qrcode/exception/InsufficientInformationDensityException.kt",
    "chars": 338,
    "preview": "package qrcode.exception\n\n/**\n * Thrown when the Information Density parameter is not enough to hold all the data that n"
  },
  {
    "path": "src/commonMain/kotlin/qrcode/internals/BitBuffer.kt",
    "chars": 1332,
    "preview": "package qrcode.internals\n\nimport kotlin.js.JsName\n\n/**\n * Rewritten in Kotlin from the [original (GitHub)](https://githu"
  },
  {
    "path": "src/commonMain/kotlin/qrcode/internals/ErrorMessage.kt",
    "chars": 481,
    "preview": "package qrcode.internals\n\n/**\n * Helps generates error messages.\n *\n * @author Rafael Lins - g0dkar\n */\ninternal object "
  },
  {
    "path": "src/commonMain/kotlin/qrcode/internals/Polynomial.kt",
    "chars": 1733,
    "preview": "package qrcode.internals\n\nimport qrcode.internals.QRMath.gexp\nimport qrcode.internals.QRMath.glog\n\n/**\n * Rewritten in K"
  },
  {
    "path": "src/commonMain/kotlin/qrcode/internals/QRCodeSetup.kt",
    "chars": 10510,
    "preview": "package qrcode.internals\n\nimport qrcode.internals.QRCodeRegion.BOTTOM_LEFT_CORNER\nimport qrcode.internals.QRCodeRegion.B"
  },
  {
    "path": "src/commonMain/kotlin/qrcode/internals/QRCodeSquare.kt",
    "chars": 4623,
    "preview": "package qrcode.internals\n\nimport qrcode.internals.QRCodeRegion.BOTTOM_LEFT_CORNER\nimport qrcode.internals.QRCodeRegion.B"
  },
  {
    "path": "src/commonMain/kotlin/qrcode/internals/QRData.kt",
    "chars": 4353,
    "preview": "package qrcode.internals\n\nimport qrcode.raw.QRCodeDataType\nimport qrcode.raw.QRCodeDataType.DEFAULT\nimport qrcode.raw.QR"
  },
  {
    "path": "src/commonMain/kotlin/qrcode/internals/QRMath.kt",
    "chars": 1405,
    "preview": "package qrcode.internals\n\n/**\n * Rewritten in Kotlin from the [original (GitHub)](https://github.com/kazuhikoarase/qrcod"
  },
  {
    "path": "src/commonMain/kotlin/qrcode/internals/QRUtil.kt",
    "chars": 12252,
    "preview": "package qrcode.internals\n\nimport qrcode.raw.ErrorCorrectionLevel\nimport qrcode.raw.MaskPattern\nimport qrcode.raw.MaskPat"
  },
  {
    "path": "src/commonMain/kotlin/qrcode/internals/RSBlock.kt",
    "chars": 8692,
    "preview": "package qrcode.internals\n\nimport qrcode.raw.ErrorCorrectionLevel\n\n/**\n * Rewritten in Kotlin from the [original (GitHub)"
  },
  {
    "path": "src/commonMain/kotlin/qrcode/raw/QRCodeEnums.kt",
    "chars": 2886,
    "preview": "package qrcode.raw\n\nimport qrcode.raw.ErrorCorrectionLevel.HIGH\nimport qrcode.raw.ErrorCorrectionLevel.VERY_HIGH\n\n/**\n *"
  },
  {
    "path": "src/commonMain/kotlin/qrcode/raw/QRCodeProcessor.kt",
    "chars": 15582,
    "preview": "package qrcode.raw\n\nimport qrcode.QRCode\nimport qrcode.color.Colors\nimport qrcode.exception.InsufficientInformationDensi"
  },
  {
    "path": "src/commonMain/kotlin/qrcode/raw/QRCodeRawData.kt",
    "chars": 159,
    "preview": "package qrcode.raw\n\nimport qrcode.internals.QRCodeSquare\n\n/**\n * Alias for a matrix of [QRCodeSquare]\n */\ntypealias QRCo"
  },
  {
    "path": "src/commonMain/kotlin/qrcode/render/QRCodeGraphics.kt",
    "chars": 3451,
    "preview": "package qrcode.render\n\nexpect class QRCodeGraphics(width: Int, height: Int) {\n    /** Returns `true` if **any** drawing "
  },
  {
    "path": "src/commonMain/kotlin/qrcode/render/QRCodeGraphicsFactory.kt",
    "chars": 723,
    "preview": "package qrcode.render\n\nimport qrcode.QRCode\n\n/**\n * A class used by [QRCode] to build instances of [QRCodeGraphics].\n *\n"
  },
  {
    "path": "src/commonMain/kotlin/qrcode/shape/CircleShapeFunction.kt",
    "chars": 1042,
    "preview": "package qrcode.shape\n\nimport qrcode.raw.QRCodeProcessor.Companion.DEFAULT_CELL_SIZE\nimport kotlin.jvm.JvmOverloads\nimpor"
  },
  {
    "path": "src/commonMain/kotlin/qrcode/shape/DefaultShapeFunction.kt",
    "chars": 4861,
    "preview": "package qrcode.shape\n\nimport qrcode.QRCode\nimport qrcode.color.QRCodeColorFunction\nimport qrcode.internals.QRCodeSquare\n"
  },
  {
    "path": "src/commonMain/kotlin/qrcode/shape/QRCodeShapeFunction.kt",
    "chars": 1057,
    "preview": "package qrcode.shape\n\nimport qrcode.QRCode\nimport qrcode.color.QRCodeColorFunction\nimport qrcode.internals.QRCodeSquare\n"
  },
  {
    "path": "src/commonMain/kotlin/qrcode/shape/RoundSquaresShapeFunction.kt",
    "chars": 1176,
    "preview": "package qrcode.shape\n\nimport qrcode.raw.QRCodeProcessor.Companion.DEFAULT_CELL_SIZE\nimport qrcode.render.QRCodeGraphics\n"
  },
  {
    "path": "src/commonTest/kotlin/qrcode/internals/PolynomialTest.kt",
    "chars": 3868,
    "preview": "package qrcode.internals\n\nimport io.kotest.core.spec.style.FunSpec\nimport io.kotest.matchers.collections.shouldContainEx"
  },
  {
    "path": "src/commonTest/kotlin/qrcode/internals/QRNumberTest.kt",
    "chars": 6436,
    "preview": "package qrcode.internals\n\nimport io.kotest.core.spec.style.FunSpec\nimport io.kotest.matchers.collections.shouldContainEx"
  },
  {
    "path": "src/iosMain/kotlin/qrcode/render/QRCodeGraphics.ios.kt",
    "chars": 8841,
    "preview": "package qrcode.render\n\nimport kotlinx.cinterop.ExperimentalForeignApi\nimport kotlinx.cinterop.addressOf\nimport kotlinx.c"
  },
  {
    "path": "src/iosMain/kotlin/utils/IOSNativeParser.kt",
    "chars": 644,
    "preview": "package utils\n\nimport kotlinx.cinterop.ExperimentalForeignApi\nimport kotlinx.cinterop.addressOf\nimport kotlinx.cinterop."
  },
  {
    "path": "src/jsMain/kotlin/qrcode/render/QRCodeGraphics.js.kt",
    "chars": 7972,
    "preview": "package qrcode.render\n\nimport kotlinx.browser.document\nimport org.khronos.webgl.Uint8ClampedArray\nimport org.w3c.dom.Can"
  },
  {
    "path": "src/jvmMain/kotlin/qrcode/render/JvmQRCodeGraphicsFactory.kt",
    "chars": 725,
    "preview": "package qrcode.render\n\nimport java.awt.image.BufferedImage\n\n/**\n * A platform-specific implementation of [QRCodeGraphics"
  },
  {
    "path": "src/jvmMain/kotlin/qrcode/render/QRCodeGraphics.jvm.kt",
    "chars": 10415,
    "preview": "package qrcode.render\n\nimport java.awt.BasicStroke\nimport java.awt.Color\nimport java.awt.Graphics2D\nimport java.awt.Rend"
  },
  {
    "path": "src/jvmTest/kotlin/qrcode/QRCodeTest.kt",
    "chars": 10606,
    "preview": "package qrcode\n\n//import com.d_project.qrcode.Mode\n//import io.kotest.core.spec.style.FunSpec\n//import qrcode.color.Colo"
  },
  {
    "path": "src/jvmTest/kotlin/qrcode/TestUtils.kt",
    "chars": 3837,
    "preview": "@file:JvmName(\"TestUtils\")\n\npackage qrcode\n\nimport io.kotest.matchers.Matcher\nimport io.kotest.matchers.MatcherResult\nim"
  },
  {
    "path": "src/jvmTest/kotlin/qrcode/render/ColorsTest.kt",
    "chars": 3550,
    "preview": "package qrcode.render\n\nimport io.kotest.core.spec.style.FunSpec\nimport io.kotest.matchers.shouldBe\nimport io.kotest.matc"
  },
  {
    "path": "src/tvosMain/kotlin/qrcode/render/QRCodeGraphics.tvos.kt",
    "chars": 8841,
    "preview": "package qrcode.render\n\nimport kotlinx.cinterop.ExperimentalForeignApi\nimport kotlinx.cinterop.addressOf\nimport kotlinx.c"
  },
  {
    "path": "src/tvosMain/kotlin/utils/TvOSNativeParser.kt",
    "chars": 644,
    "preview": "package utils\n\nimport kotlinx.cinterop.ExperimentalForeignApi\nimport kotlinx.cinterop.addressOf\nimport kotlinx.cinterop."
  },
  {
    "path": "src/wasmJsMain/kotlin/qrcode/render/QRCodeGraphics.wasmjs.kt",
    "chars": 8154,
    "preview": "package qrcode.render\n\nimport kotlinx.browser.document\nimport org.khronos.webgl.Uint8ClampedArray\nimport org.khronos.web"
  }
]

// ... and 2 more files (download for full content)

About this extraction

This page contains the full source code of the g0dkar/qrcode-kotlin GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 149 files (992.3 KB), approximately 294.3k tokens, and a symbol index with 1071 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!