├── .editorconfig ├── .github ├── CODEOWNERS ├── release-drafter.yml └── workflows │ ├── ci.yml │ ├── gh-pages.yml │ ├── publish.yml │ ├── release-drafter.yml │ └── version-labels.yml ├── .gitignore ├── LICENSE.txt ├── README.md ├── codecov.yml ├── collections ├── api │ └── collections.api ├── build.gradle.kts ├── gradle.properties └── src │ ├── commonMain │ └── kotlin │ │ ├── AtomicList.kt │ │ ├── AtomicMap.kt │ │ └── AtomicSet.kt │ ├── commonTest │ └── kotlin │ │ └── AtomicMapTests.kt │ ├── jsMain │ └── kotlin │ │ └── ToJsObject.kt │ └── jsTest │ └── kotlin │ └── PojoMapTest.kt ├── coroutines ├── api │ ├── android │ │ └── coroutines.api │ ├── coroutines.api │ └── jvm │ │ └── coroutines.api ├── build.gradle.kts ├── gradle.properties └── src │ ├── androidMain │ ├── AndroidManifest.xml │ └── kotlin │ │ ├── TuulboxCoroutinesInitializer.kt │ │ └── flow │ │ └── BroadcastReceiverFlow.kt │ ├── commonMain │ └── kotlin │ │ ├── delay │ │ └── DelayStrategy.kt │ │ └── flow │ │ └── Combine.kt │ └── commonTest │ └── kotlin │ ├── delay │ └── DelayStrategyTest.kt │ └── flow │ └── CombineParametersTest.kt ├── encoding ├── api │ └── encoding.api ├── build.gradle.kts ├── gradle.properties └── src │ ├── commonMain │ └── kotlin │ │ └── BitSet.kt │ └── commonTest │ └── kotlin │ └── BitSetTest.kt ├── functional ├── api │ └── functional.api ├── build.gradle.kts ├── gradle.properties └── src │ ├── commonMain │ └── kotlin │ │ ├── Compose.kt │ │ ├── Curry.kt │ │ ├── Memoize.kt │ │ ├── PartialApply.kt │ │ ├── Repeat.kt │ │ ├── Reverse.kt │ │ └── Rotate.kt │ └── commonTest │ └── kotlin │ ├── ComposeTests.kt │ ├── CurryTests.kt │ ├── Functions.kt │ ├── MemoizeTests.kt │ ├── PartialApplyTests.kt │ ├── RepeatTests.kt │ ├── ReverseTests.kt │ └── RotateTests.kt ├── gradle.properties ├── gradle ├── jacoco.gradle.kts ├── libs.versions.toml └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── kotlin-js-store └── yarn.lock ├── settings.gradle.kts ├── temporal ├── api │ ├── android │ │ └── temporal.api │ ├── jvm │ │ └── temporal.api │ └── temporal.api ├── build.gradle.kts ├── gradle.properties └── src │ ├── androidMain │ └── kotlin │ │ └── BroadcastTemporalFlow.kt │ ├── androidUnitTest │ └── kotlin │ │ └── AndroidIgnore.kt │ ├── commonMain │ └── kotlin │ │ ├── DateTimeFlow.kt │ │ ├── TemporalFlow.kt │ │ └── Ticker.kt │ ├── commonTest │ └── kotlin │ │ ├── AndroidIgnore.kt │ │ ├── TemporalFlowTests.kt │ │ └── TickerTests.kt │ ├── jvmMain │ └── kotlin │ │ └── TickerTemporalFlow.kt │ ├── jvmTest │ └── kotlin │ │ └── AndroidIgnore.kt │ ├── webMain │ └── kotlin │ │ └── TickerTemporalFlow.kt │ └── webTest │ └── kotlin │ └── AndroidIgnore.kt └── test ├── api └── test.api ├── build.gradle.kts ├── gradle.properties └── src └── commonMain └── kotlin ├── Assert.kt └── ManualClock.kt /.editorconfig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JuulLabs/tuulbox/HEAD/.editorconfig -------------------------------------------------------------------------------- /.github/CODEOWNERS: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JuulLabs/tuulbox/HEAD/.github/CODEOWNERS -------------------------------------------------------------------------------- /.github/release-drafter.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JuulLabs/tuulbox/HEAD/.github/release-drafter.yml -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JuulLabs/tuulbox/HEAD/.github/workflows/ci.yml -------------------------------------------------------------------------------- /.github/workflows/gh-pages.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JuulLabs/tuulbox/HEAD/.github/workflows/gh-pages.yml -------------------------------------------------------------------------------- /.github/workflows/publish.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JuulLabs/tuulbox/HEAD/.github/workflows/publish.yml -------------------------------------------------------------------------------- /.github/workflows/release-drafter.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JuulLabs/tuulbox/HEAD/.github/workflows/release-drafter.yml -------------------------------------------------------------------------------- /.github/workflows/version-labels.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JuulLabs/tuulbox/HEAD/.github/workflows/version-labels.yml -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JuulLabs/tuulbox/HEAD/.gitignore -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JuulLabs/tuulbox/HEAD/LICENSE.txt -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JuulLabs/tuulbox/HEAD/README.md -------------------------------------------------------------------------------- /codecov.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JuulLabs/tuulbox/HEAD/codecov.yml -------------------------------------------------------------------------------- /collections/api/collections.api: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JuulLabs/tuulbox/HEAD/collections/api/collections.api -------------------------------------------------------------------------------- /collections/build.gradle.kts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JuulLabs/tuulbox/HEAD/collections/build.gradle.kts -------------------------------------------------------------------------------- /collections/gradle.properties: -------------------------------------------------------------------------------- 1 | POM_ARTIFACT_ID=collections 2 | -------------------------------------------------------------------------------- /collections/src/commonMain/kotlin/AtomicList.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JuulLabs/tuulbox/HEAD/collections/src/commonMain/kotlin/AtomicList.kt -------------------------------------------------------------------------------- /collections/src/commonMain/kotlin/AtomicMap.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JuulLabs/tuulbox/HEAD/collections/src/commonMain/kotlin/AtomicMap.kt -------------------------------------------------------------------------------- /collections/src/commonMain/kotlin/AtomicSet.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JuulLabs/tuulbox/HEAD/collections/src/commonMain/kotlin/AtomicSet.kt -------------------------------------------------------------------------------- /collections/src/commonTest/kotlin/AtomicMapTests.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JuulLabs/tuulbox/HEAD/collections/src/commonTest/kotlin/AtomicMapTests.kt -------------------------------------------------------------------------------- /collections/src/jsMain/kotlin/ToJsObject.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JuulLabs/tuulbox/HEAD/collections/src/jsMain/kotlin/ToJsObject.kt -------------------------------------------------------------------------------- /collections/src/jsTest/kotlin/PojoMapTest.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JuulLabs/tuulbox/HEAD/collections/src/jsTest/kotlin/PojoMapTest.kt -------------------------------------------------------------------------------- /coroutines/api/android/coroutines.api: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JuulLabs/tuulbox/HEAD/coroutines/api/android/coroutines.api -------------------------------------------------------------------------------- /coroutines/api/coroutines.api: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JuulLabs/tuulbox/HEAD/coroutines/api/coroutines.api -------------------------------------------------------------------------------- /coroutines/api/jvm/coroutines.api: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JuulLabs/tuulbox/HEAD/coroutines/api/jvm/coroutines.api -------------------------------------------------------------------------------- /coroutines/build.gradle.kts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JuulLabs/tuulbox/HEAD/coroutines/build.gradle.kts -------------------------------------------------------------------------------- /coroutines/gradle.properties: -------------------------------------------------------------------------------- 1 | POM_ARTIFACT_ID=coroutines 2 | -------------------------------------------------------------------------------- /coroutines/src/androidMain/AndroidManifest.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JuulLabs/tuulbox/HEAD/coroutines/src/androidMain/AndroidManifest.xml -------------------------------------------------------------------------------- /coroutines/src/androidMain/kotlin/TuulboxCoroutinesInitializer.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JuulLabs/tuulbox/HEAD/coroutines/src/androidMain/kotlin/TuulboxCoroutinesInitializer.kt -------------------------------------------------------------------------------- /coroutines/src/androidMain/kotlin/flow/BroadcastReceiverFlow.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JuulLabs/tuulbox/HEAD/coroutines/src/androidMain/kotlin/flow/BroadcastReceiverFlow.kt -------------------------------------------------------------------------------- /coroutines/src/commonMain/kotlin/delay/DelayStrategy.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JuulLabs/tuulbox/HEAD/coroutines/src/commonMain/kotlin/delay/DelayStrategy.kt -------------------------------------------------------------------------------- /coroutines/src/commonMain/kotlin/flow/Combine.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JuulLabs/tuulbox/HEAD/coroutines/src/commonMain/kotlin/flow/Combine.kt -------------------------------------------------------------------------------- /coroutines/src/commonTest/kotlin/delay/DelayStrategyTest.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JuulLabs/tuulbox/HEAD/coroutines/src/commonTest/kotlin/delay/DelayStrategyTest.kt -------------------------------------------------------------------------------- /coroutines/src/commonTest/kotlin/flow/CombineParametersTest.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JuulLabs/tuulbox/HEAD/coroutines/src/commonTest/kotlin/flow/CombineParametersTest.kt -------------------------------------------------------------------------------- /encoding/api/encoding.api: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JuulLabs/tuulbox/HEAD/encoding/api/encoding.api -------------------------------------------------------------------------------- /encoding/build.gradle.kts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JuulLabs/tuulbox/HEAD/encoding/build.gradle.kts -------------------------------------------------------------------------------- /encoding/gradle.properties: -------------------------------------------------------------------------------- 1 | POM_ARTIFACT_ID=encoding 2 | -------------------------------------------------------------------------------- /encoding/src/commonMain/kotlin/BitSet.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JuulLabs/tuulbox/HEAD/encoding/src/commonMain/kotlin/BitSet.kt -------------------------------------------------------------------------------- /encoding/src/commonTest/kotlin/BitSetTest.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JuulLabs/tuulbox/HEAD/encoding/src/commonTest/kotlin/BitSetTest.kt -------------------------------------------------------------------------------- /functional/api/functional.api: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JuulLabs/tuulbox/HEAD/functional/api/functional.api -------------------------------------------------------------------------------- /functional/build.gradle.kts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JuulLabs/tuulbox/HEAD/functional/build.gradle.kts -------------------------------------------------------------------------------- /functional/gradle.properties: -------------------------------------------------------------------------------- 1 | POM_ARTIFACT_ID=functional 2 | -------------------------------------------------------------------------------- /functional/src/commonMain/kotlin/Compose.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JuulLabs/tuulbox/HEAD/functional/src/commonMain/kotlin/Compose.kt -------------------------------------------------------------------------------- /functional/src/commonMain/kotlin/Curry.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JuulLabs/tuulbox/HEAD/functional/src/commonMain/kotlin/Curry.kt -------------------------------------------------------------------------------- /functional/src/commonMain/kotlin/Memoize.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JuulLabs/tuulbox/HEAD/functional/src/commonMain/kotlin/Memoize.kt -------------------------------------------------------------------------------- /functional/src/commonMain/kotlin/PartialApply.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JuulLabs/tuulbox/HEAD/functional/src/commonMain/kotlin/PartialApply.kt -------------------------------------------------------------------------------- /functional/src/commonMain/kotlin/Repeat.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JuulLabs/tuulbox/HEAD/functional/src/commonMain/kotlin/Repeat.kt -------------------------------------------------------------------------------- /functional/src/commonMain/kotlin/Reverse.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JuulLabs/tuulbox/HEAD/functional/src/commonMain/kotlin/Reverse.kt -------------------------------------------------------------------------------- /functional/src/commonMain/kotlin/Rotate.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JuulLabs/tuulbox/HEAD/functional/src/commonMain/kotlin/Rotate.kt -------------------------------------------------------------------------------- /functional/src/commonTest/kotlin/ComposeTests.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JuulLabs/tuulbox/HEAD/functional/src/commonTest/kotlin/ComposeTests.kt -------------------------------------------------------------------------------- /functional/src/commonTest/kotlin/CurryTests.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JuulLabs/tuulbox/HEAD/functional/src/commonTest/kotlin/CurryTests.kt -------------------------------------------------------------------------------- /functional/src/commonTest/kotlin/Functions.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JuulLabs/tuulbox/HEAD/functional/src/commonTest/kotlin/Functions.kt -------------------------------------------------------------------------------- /functional/src/commonTest/kotlin/MemoizeTests.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JuulLabs/tuulbox/HEAD/functional/src/commonTest/kotlin/MemoizeTests.kt -------------------------------------------------------------------------------- /functional/src/commonTest/kotlin/PartialApplyTests.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JuulLabs/tuulbox/HEAD/functional/src/commonTest/kotlin/PartialApplyTests.kt -------------------------------------------------------------------------------- /functional/src/commonTest/kotlin/RepeatTests.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JuulLabs/tuulbox/HEAD/functional/src/commonTest/kotlin/RepeatTests.kt -------------------------------------------------------------------------------- /functional/src/commonTest/kotlin/ReverseTests.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JuulLabs/tuulbox/HEAD/functional/src/commonTest/kotlin/ReverseTests.kt -------------------------------------------------------------------------------- /functional/src/commonTest/kotlin/RotateTests.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JuulLabs/tuulbox/HEAD/functional/src/commonTest/kotlin/RotateTests.kt -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JuulLabs/tuulbox/HEAD/gradle.properties -------------------------------------------------------------------------------- /gradle/jacoco.gradle.kts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JuulLabs/tuulbox/HEAD/gradle/jacoco.gradle.kts -------------------------------------------------------------------------------- /gradle/libs.versions.toml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JuulLabs/tuulbox/HEAD/gradle/libs.versions.toml -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JuulLabs/tuulbox/HEAD/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JuulLabs/tuulbox/HEAD/gradle/wrapper/gradle-wrapper.properties -------------------------------------------------------------------------------- /gradlew: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JuulLabs/tuulbox/HEAD/gradlew -------------------------------------------------------------------------------- /gradlew.bat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JuulLabs/tuulbox/HEAD/gradlew.bat -------------------------------------------------------------------------------- /kotlin-js-store/yarn.lock: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JuulLabs/tuulbox/HEAD/kotlin-js-store/yarn.lock -------------------------------------------------------------------------------- /settings.gradle.kts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JuulLabs/tuulbox/HEAD/settings.gradle.kts -------------------------------------------------------------------------------- /temporal/api/android/temporal.api: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JuulLabs/tuulbox/HEAD/temporal/api/android/temporal.api -------------------------------------------------------------------------------- /temporal/api/jvm/temporal.api: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JuulLabs/tuulbox/HEAD/temporal/api/jvm/temporal.api -------------------------------------------------------------------------------- /temporal/api/temporal.api: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JuulLabs/tuulbox/HEAD/temporal/api/temporal.api -------------------------------------------------------------------------------- /temporal/build.gradle.kts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JuulLabs/tuulbox/HEAD/temporal/build.gradle.kts -------------------------------------------------------------------------------- /temporal/gradle.properties: -------------------------------------------------------------------------------- 1 | POM_ARTIFACT_ID=temporal 2 | -------------------------------------------------------------------------------- /temporal/src/androidMain/kotlin/BroadcastTemporalFlow.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JuulLabs/tuulbox/HEAD/temporal/src/androidMain/kotlin/BroadcastTemporalFlow.kt -------------------------------------------------------------------------------- /temporal/src/androidUnitTest/kotlin/AndroidIgnore.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JuulLabs/tuulbox/HEAD/temporal/src/androidUnitTest/kotlin/AndroidIgnore.kt -------------------------------------------------------------------------------- /temporal/src/commonMain/kotlin/DateTimeFlow.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JuulLabs/tuulbox/HEAD/temporal/src/commonMain/kotlin/DateTimeFlow.kt -------------------------------------------------------------------------------- /temporal/src/commonMain/kotlin/TemporalFlow.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JuulLabs/tuulbox/HEAD/temporal/src/commonMain/kotlin/TemporalFlow.kt -------------------------------------------------------------------------------- /temporal/src/commonMain/kotlin/Ticker.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JuulLabs/tuulbox/HEAD/temporal/src/commonMain/kotlin/Ticker.kt -------------------------------------------------------------------------------- /temporal/src/commonTest/kotlin/AndroidIgnore.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JuulLabs/tuulbox/HEAD/temporal/src/commonTest/kotlin/AndroidIgnore.kt -------------------------------------------------------------------------------- /temporal/src/commonTest/kotlin/TemporalFlowTests.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JuulLabs/tuulbox/HEAD/temporal/src/commonTest/kotlin/TemporalFlowTests.kt -------------------------------------------------------------------------------- /temporal/src/commonTest/kotlin/TickerTests.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JuulLabs/tuulbox/HEAD/temporal/src/commonTest/kotlin/TickerTests.kt -------------------------------------------------------------------------------- /temporal/src/jvmMain/kotlin/TickerTemporalFlow.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JuulLabs/tuulbox/HEAD/temporal/src/jvmMain/kotlin/TickerTemporalFlow.kt -------------------------------------------------------------------------------- /temporal/src/jvmTest/kotlin/AndroidIgnore.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JuulLabs/tuulbox/HEAD/temporal/src/jvmTest/kotlin/AndroidIgnore.kt -------------------------------------------------------------------------------- /temporal/src/webMain/kotlin/TickerTemporalFlow.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JuulLabs/tuulbox/HEAD/temporal/src/webMain/kotlin/TickerTemporalFlow.kt -------------------------------------------------------------------------------- /temporal/src/webTest/kotlin/AndroidIgnore.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JuulLabs/tuulbox/HEAD/temporal/src/webTest/kotlin/AndroidIgnore.kt -------------------------------------------------------------------------------- /test/api/test.api: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JuulLabs/tuulbox/HEAD/test/api/test.api -------------------------------------------------------------------------------- /test/build.gradle.kts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JuulLabs/tuulbox/HEAD/test/build.gradle.kts -------------------------------------------------------------------------------- /test/gradle.properties: -------------------------------------------------------------------------------- 1 | POM_ARTIFACT_ID=test 2 | -------------------------------------------------------------------------------- /test/src/commonMain/kotlin/Assert.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JuulLabs/tuulbox/HEAD/test/src/commonMain/kotlin/Assert.kt -------------------------------------------------------------------------------- /test/src/commonMain/kotlin/ManualClock.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JuulLabs/tuulbox/HEAD/test/src/commonMain/kotlin/ManualClock.kt --------------------------------------------------------------------------------