Commit 78918bb
CodAIze Agent (#2574)
* Chat interface for AI assistant
* Format
* Update dependency io.ktor.plugin to v3.3.0 (#2412)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
* Update dependency com.charleskorn.kaml:kaml to v0.96.0 (#2430)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
* Update dependency @sveltejs/kit to v2.39.1 (#2429)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
* Update CODEOWNERS (#2425)
* Update CODEOWNERS
The Code owners are updated with specific responsibilities for passes.
* Add Second responsible to language frontends and remove the language specific pass responsibles
* Dokka v2 (#2413)
* Change dokka config to new dsl
* Delete unused code
* Delete .kotlin/sessions directory
* Add V2Enabled mode to gradle.properties
* Delete tmp.json
* Remove set previous docs folder
---------
Co-authored-by: Konrad Weiss <konrad.weiss@aisec.fraunhofer.de>
* Update dependency eslint-plugin-svelte to v3.12.4 (#2433)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
* Update dependency @sveltejs/kit to v2.42.2 (#2432)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
* Update dependency com.vanniktech:gradle-maven-publish-plugin to v0.34.0 (#2397)
* Update dependency com.vanniktech:gradle-maven-publish-plugin to v0.34.0
* Fixed
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Christian Banse <christian.banse@aisec.fraunhofer.de>
* Moving `group` back to `allprojects` (#2435)
* Update dependency @eslint/compat to v1.4.0 (#2436)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
* Update dependency @sveltejs/kit to v2.43.5 (#2437)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
* Abstract Value Analysis (#1759)
* create initial Size evaluator for modifiable lists
* move all collection dependant logic into collection class
* add support for static arrays
* implement narrowing and widening operations
* add narrowing and widening to loop analysis
* handle branches in analysis
* improve loops by preprocessing, better narrowing and valid starting ranges
* improve subtraction by handling 0 as lowest possible value
* mark branching nodes as nodes with an effect
* correctly identify nodes of deeper branch layers in a loop
* add documentation
* temporarily repurpose cpg-neo4j for debugging
* rework lattice intervals to support negative values
* rename target package to circumvent gitignore
* implement comparable for the LatticeInterval
* implement the IntervalState
* update the evaluator name in tests
* implement equals check for intervals
* add method stub for condition evaluation
* Spotless
* Squashed commit of the following:
commit 5c20b05
Author: Robert Haimerl <robert.haimerl@aisec.fraunhofer.de>
Date: Wed Oct 16 13:25:06 2024 +0200
fix breaking merge changes
commit cc8eb48
Merge: 3e3c094 344ea58
Author: Robert Haimerl <robert.haimerl@aisec.fraunhofer.de>
Date: Wed Oct 16 13:08:46 2024 +0200
Merge branch 'rh/abstract-value-analysis' into rh/abstract-value-analysis-worklist
# Conflicts:
# cpg-analysis/src/main/kotlin/de/fraunhofer/aisec/cpg/analysis/abstracteval/AbstractEvaluator.kt
# cpg-core/src/main/kotlin/de/fraunhofer/aisec/cpg/helpers/EOGWorklist.kt
commit 3e3c094
Author: Robert Haimerl <robert.haimerl@aisec.fraunhofer.de>
Date: Wed Oct 16 13:04:45 2024 +0200
remove redundant pushes to the worklist itself
commit 6d731f2
Author: Robert Haimerl <robert.haimerl@aisec.fraunhofer.de>
Date: Wed Oct 16 13:04:21 2024 +0200
override methods to use custom functionality in IntervalStates
commit 1eb5a51
Author: Robert Haimerl <robert.haimerl@aisec.fraunhofer.de>
Date: Wed Oct 16 13:03:57 2024 +0200
enhance analysis for simple value operations
commit 108f374
Author: Robert Haimerl <robert.haimerl@aisec.fraunhofer.de>
Date: Wed Oct 16 09:56:22 2024 +0200
join intervals for multiple EOG (branch joins)
commit d4383b4
Author: Robert Haimerl <robert.haimerl@aisec.fraunhofer.de>
Date: Wed Oct 16 09:33:41 2024 +0200
revert the change to the worklist pop to make it FIFO again
commit 46798c5
Author: Robert Haimerl <robert.haimerl@aisec.fraunhofer.de>
Date: Wed Oct 16 09:33:23 2024 +0200
return a new altered state instead of directly modifying the current state
commit c634646
Author: Robert Haimerl <robert.haimerl@aisec.fraunhofer.de>
Date: Mon Oct 14 13:12:46 2024 +0200
remove getInitialRange from the evaluator
commit f984a2c
Author: Robert Haimerl <robert.haimerl@aisec.fraunhofer.de>
Date: Mon Oct 14 13:11:58 2024 +0200
remove the "getInitialRange" method for values and instead mark declarations as operations with effect
commit beb4d38
Author: Robert Haimerl <robert.haimerl@aisec.fraunhofer.de>
Date: Mon Oct 14 12:26:22 2024 +0200
simplify evaluator to only use one worklist without special handling for loops and branches
commit 6ec77dc
Author: Robert Haimerl <robert.haimerl@aisec.fraunhofer.de>
Date: Mon Oct 14 12:25:04 2024 +0200
add "until" to iteration, add state information to Worklist, fix pop order
commit 253debb
Author: Robert Haimerl <robert.haimerl@aisec.fraunhofer.de>
Date: Mon Oct 14 12:23:17 2024 +0200
remove all modes from the IntervalState
commit 31ca4ac
Author: Robert Haimerl <robert.haimerl@aisec.fraunhofer.de>
Date: Mon Oct 14 12:17:45 2024 +0200
remove boolean information about whether the operation had an impact
commit ccd839e
Author: Robert Haimerl <robert.haimerl@aisec.fraunhofer.de>
Date: Mon Oct 14 09:17:11 2024 +0200
add three different state modes
commit e0e1a28
Author: Robert Haimerl <robert.haimerl@aisec.fraunhofer.de>
Date: Mon Oct 7 12:08:52 2024 +0200
rewrite the handleBranch branch
commit 672f27f
Author: Robert Haimerl <robert.haimerl@aisec.fraunhofer.de>
Date: Mon Oct 7 11:45:10 2024 +0200
rewrite the handleLoop branch
commit 33f3531
Author: Robert Haimerl <robert.haimerl@aisec.fraunhofer.de>
Date: Mon Oct 7 10:54:15 2024 +0200
rewrite the applyEffect branch
commit ca88bb7
Author: Robert Haimerl <robert.haimerl@aisec.fraunhofer.de>
Date: Mon Oct 7 10:20:39 2024 +0200
rewrite evaluate function to use "iterateEOG"
* fix LatticeInterval.push to join with the previous value as it is already propagated from predecessors
* Fix Declaration to only effect matching integers
* correctly propagate widening only within loops
* added second evaluate call with more defined arguments
* support functions with side effects by creating a function-local evaluator
* moved side effect analysis to list instead of integer...
* add new 'assignMinus' expression and add the name as code when creating a reference
* cleanup
* add tests for the new Evaluator
* first implementation for other integer operations
* add prefix versions of the inc and dec operator
* Add test case for all implemented Integer operations
* add auto-generated hashcode function
* cleanup and documentation
* remove old code
* import cleanup
* automatically switch interval bounds if the lower bound is greater than the upper bound
* remove min and max comparisons after multiplication as the constructor now handles the order
* convert Bounded from data class to real class to remove constructor variables
* fix division to estimate x / ∞ = 0
* simplify division cases
* Fix invalid division cases
* make modulo calculation more concise
* beautify toString representation
* add first LatticeInterval tests
* fix meet of intervals when they do not overlap
* add equals operator for the Interval wrapper
* add tests for meet, widen, narrow and the wrapper
* fix meet test method
* change default of plusAssign and minusAssign to lose all information
* add tests for the Integer Value
* check name of array declaration
* move code block for function side effects further up
* add tests for array and mutable list
* remove unfinished code block in MutableList
* made spotless
* changed the name of the Value classes to prevent confusion with builtin classes
* Some renaming and extended test
* formatting
* Do not stop on target node and change int to long
* Template for eventually using new iteration
* Fix comment
* Minor cosmetic changes
* Move code to correct location
* Several updates, missing widening and narrowing for integer tests
* Some fixes
* Fix integer tests
* Some idea on integrating widening and narrowing
* Try to integrate widening
* Integrate widening and fix comparisons
* Try to include conditions
* Fix
* Also handle negated condition
* Redesign of list size evaluation
* Small cleanup
* Rework array value
* Small cleanup
* Fix list removeall
* Size evaluation for sets
* test set size evaluator
* Improvements and more tests for sets
* Integration into value evaluator system and query API
* Revert unnecessary changes in EOGWorklist.kt
* Split division by 0 and other test
* Try to fix problematic integer lookup - no success
* somewhat fix problem with equal but non-identical Integer objects used as keys
* Fix min and max operations
* Add more operators, implement shl
* right shifting
* bitwise and and or
* trigger build
* define some of the exceptional cases to avoid exceptions
* Several fixes in tests and in minus
* throw less exceptions and catch them
* Fix asserts
* Less unsupported operators
* Some cleanup
* Fix test
* Remove commented out code
---------
Co-authored-by: Robert Haimerl <robert.haimerl@aisec.fraunhofer.de>
Co-authored-by: KuechA <31155350+KuechA@users.noreply.github.com>
Co-authored-by: Alexander Kuechler <alexander.kuechler@aisec.fraunhofer.de>
* Update dependency @sveltejs/kit to v2.44.0 (#2441)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
* Update dependency com.charleskorn.kaml:kaml to v0.97.0 (#2442)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
* Timeout for CDG and CFSensitiveDFG pass (#2417)
* Timeout for CDG and CFSensitiveDFG pass
* Make the timeout an argument of iterateEOG
* remove existing dfg edges only on success
* apply strategy usage to to timeoutless invocation
* updating call due to having non positional argument
* Returning a non null time to solve the issue because apparently we are able to
* Adding Test. Fixing coding issue that actually reran the iteration without timeout if the iteration timeouted
* Add nullness conditional checks
* Fixing coding issue that actually reran the iteration without timeout if the iteration timeouted
* Spotless
---------
Co-authored-by: Konrad Weiss <konrad.weiss@aisec.fraunhofer.de>
* Only put AST nodes in `fields`/`methods`/... in `RecordDeclaration` that are part of the AST (#2403)
* Added API to return methods of a Type
* Added members, fields and methods
* Add `declaringScope` to `Declaration`.
* Extended unit test
* Rename fields/methods/... in `RecordDeclaration` to `innerFields`, ...
This should make it clear that it only contains those that are directly embedded into the AST structure.
* Do not add Go's method to innerMethod AST property anymore
* Fixed Go tests by using the correct Type API
* Do not add outside methods in C++ to record inner methods
* Trying to get rid of addXXX functions
* Fixed test
* Removed INNER_
* Make MCP configurable (#2444)
* Make MCP configurable
* Readme++
* Changing function signature of `parse` to accept the file content instead of a file (#1706)
* Changing function signature of `parse` to accept the file content instead of a file
This PR changes the way `parse` works (in a backwards compatible way). Instead of parsing a `File`, we parse the file contents (and a path). The reasoning behind this is that almost all language frontends currently need to read the file contents and we can harmonize this. This will also allow us to provide more common statistics about the parsing context in the future.
* Fixed spotless
* fixing uri handling due to it being nullable now
* Fixing parameter order
* Addign a Converter for the newly introduced TranslationStats
---------
Co-authored-by: Konrad Weiss <konrad.weiss@aisec.fraunhofer.de>
* Transition to integration tests for MCP (#2445)
* Move unit tests depending on Python language frontend to integration test
* Add missing dependency for Python language frontend in integration tests
* Remove test condition for available Python language frontend
---------
Co-authored-by: Christian Banse <christian.banse@aisec.fraunhofer.de>
* Update dependency com.charleskorn.kaml:kaml to v0.98.0 (#2448)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
* Update dependency @sveltejs/kit to v2.46.4 (#2447)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
* Fixing comment matching on multiple nested namespaces with no location (#2446)
* Merging namespace skip if it has no location with ast tree exploration if nodes have no location to better match
* moving iterative search into getEnclosingChild
* Add condidate search to enclosing node search and neares node search in comment matcher
* Move back testfile
* Some refactoring
* Nesting the comment test file into several folders to implicitly create namespaces
* Update dependency globals to v16.4.0 (#2451)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
* Update dependency @sveltejs/kit to v2.47.2 (#2450)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
* Update dependency vite to v6.4.1 [SECURITY] (#2453)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
* Update dependency com.charleskorn.kaml:kaml to v0.102.0 (#2457)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
* Update dependency @sveltejs/kit to v2.48.1 (#2456)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
* Expose host and port config in codyze API (#2458)
* Metric and evidence ids in query trees (#2440)
Metric and evidence ids
* Remove `evidenceID` from `QueryTree` (#2460)
Remove evidence ID from QueryTree
* Update dependency eslint-plugin-svelte to v3.13.0 (#2462)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
* Update dependency black.ninia:jep to v4.3.1 (#2461)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
* Propagate information from underlying node to overlay node (#2466)
* Propagate information from underlying node to overlay node
Set `code` and `location` from `underlyingNode` when setting it
* Spotless
* Rework information propagation using the onChange callback from `EdgeSingletonList`
Pulled callback into `OverlaySingleEdge` to use it.
* Python: remove unsupported versions/add current & future versions (#2467)
* Update dependency com.vanniktech:gradle-maven-publish-plugin to v0.35.0 (#2470)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
* Update dependency globals to v16.5.0 (#2464)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
* Use koog for LLM stuff; Fix Chat UI bugs
* feat(console): rename to CodAIze Agent, update sidebar icon to robot, gradient styling, route /ai-agent
* Add a custom MCP Client + UI Widgets
* Update mcp sdk types in cpg-mcp modules due to version upgrade
* Update imports of kotlin mcp sdk in cpg-mcp module
* Update imports of kotlin mcp sdk in cpg-mcp module
* Replace netty with cio
* Add thinking
* Fix mcp util
* Add gemini client; Update widgets
* Refactor clients
* Add logs for token usage
* Change model
* Refactor sending conversation history to LLM; Extend config for mlx llms
* Some refactoring
* Change listing tools returning summaries instead of complete node
* New tool and refactoring
* Minor changes
* Minor changes 2
* Set noEdges to false for query tree
* Remove debug logs
* Add missing payload for concept assignment
* Revert CLI run command back to clikt and add wait parameter
* Downgrade ktor to 3.2.3 due to kotlin-mcp-sdk
* Change cpg_llm_analyze tool in prompt
* Remove sampling since llm_analyze mcp tool is changed to a prompt
* Minor changes
* Change urls of mlx and vllm models
* Add prompts and resources support
* Revert ChatClient back using SSE instead of http
* Configure streamable http connection in MCP client
* Add application.conf.example file
* Remove application.conf from tracking
* Fix svelte deprececated issues in layout.svelte
* Fix svelte modal issue
* Fix svelte warnings: add $derived
* Change integration tests due to latest kotlin-sdk release of 0.9.0
According to the release notes for version 0.9.0 there is a breaking change regarding the "handler" function, which we use in almost every test. It now accepts a ClientConnection as receiver, which for our tests would mean creating a dummy class with some boilerplate code. The better way is using the newly introduced kotlin-sdk-testing, which provides a way to test the client-server functionalities without network (in-memory). The test setup implementation follows the sample here: https://github.com/modelcontextprotocol/kotlin-sdk/blob/5b58814613069babb1bbd5cab4572331eaed4b45/kotlin-sdk-testing/Module.md
* Fix warnings in ListCommandsTest
* Fix failing tests
* Change JsonSChemaGeneratorTest using a test payload making the test more stable
* Fix mcp integration tests
* Uncomment prompt test
* Uncomment suggestConceptsPromptTest
* Refactor mcp integration tests
* Add mcp sdk ServerSession in tests
* Try fixing tests again
* Add example python files back in codyze-core
* Fix svelte issues
* Cleanup
* Revert mcp sdk version back to 0.8.4 due to flaky tests
* Make ChatService creation dependend on config file
* Minor fixes
* Make CodeViewer, Filetree and NodeTable components reusable for ChatInterface
* Fix issues when starting codyze webconsole and mcp module disabled
* Upgrade mcp sdk to 0.9.0
* First try with ChannelTransport
* Add cancel and close in finally block
* Try more tests
* Try ListCommandsTest
* Use new test function in ApplyConceptsTest
* Fix remaining tests
* Add join() to wait until cancel is done
* Fix imports
* Revert changes back
* Refactor test setup
* Add missing functionality from mcp-sdk-testing example
* Get rid of unnecessary functions
* Add comment
* Replace runTest with runBlocking to use the ChannelTransport's default dispatcher
* Replace runTest in all remaining tests
* Use CompletableDeferred as in the example
* Remove unnecessary launch/join for client.connect
* Try tests with timeout
* Refactor test setup again
* Refactor McpTestSetup
* Add unconfined dispatcher for channel transport
* Remove runBlocking in tests
* Refactor setup
* Add comment
* Fix imports
* Fix listFunctionsTest
* Add ServerSession in testsetup
* Set default dispatcher
* Create session before client connection
* Change frontend-dependency-conventions to runTimeOnly
* Revert setting back
* DocStrings
* Use logger instead of println
* More logs
* Exclude shadowJar, shadowDistZip, and shadowDistTar in ci build
* Add missing mcp integration tests
* Add tests for ChatClient
* Replace println's
* Add MCP application tests
* Merge ChatService and ChatClient
* Rename test
* Refactor data flow widget
* Replace schema of getNode tool
* Fix docstrings, host propagation and imports
* Rename mcp models from '*summary' back to '*info'
* Fix JsonSchemaGeneratorTest by adding descriptions
* Readme
* Fix test ListCommandsTest in mcp module
* Revert unintended changes
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Konrad Weiss <konrad.weiss@aisec.fraunhofer.de>
Co-authored-by: Christian Banse <christian.banse@aisec.fraunhofer.de>
Co-authored-by: Robert Haimerl <robert-haimerl@mailbox.org>
Co-authored-by: Robert Haimerl <robert.haimerl@aisec.fraunhofer.de>
Co-authored-by: KuechA <31155350+KuechA@users.noreply.github.com>
Co-authored-by: Alexander Kuechler <alexander.kuechler@aisec.fraunhofer.de>
Co-authored-by: Maximilian Kaul <maximilian.kaul@aisec.fraunhofer.de>
Co-authored-by: Florian Wendland <florian.wendland@aisec.fraunhofer.de>1 parent 428c48a commit 78918bb
73 files changed
Lines changed: 4886 additions & 835 deletions
File tree
- .github/workflows
- codyze-console
- src
- main
- kotlin/de/fraunhofer/aisec/codyze/console
- ai
- clients
- resources
- webapp
- src
- lib
- components
- ai-agent
- widgets
- analysis
- dashboard
- ui
- services
- routes
- chat
- components/[componentName]
- translation-unit/[unitId]
- test/kotlin/de/fraunhofer/aisec/codyze/console
- ai
- cpg-mcp
- src
- integrationTest/kotlin/mcp
- tools
- main/kotlin/de/fraunhofer/aisec/cpg/mcp
- mcpserver
- tools
- utils
- test/kotlin/de/fraunhofer/aisec/cpg/mcp
- cpg-serialization
- src/main/kotlin/de/fraunhofer/aisec/cpg/serialization
- gradle
Some content is hidden
Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
67 | 67 | | |
68 | 68 | | |
69 | 69 | | |
70 | | - | |
| 70 | + | |
71 | 71 | | |
72 | 72 | | |
73 | 73 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
14 | 14 | | |
15 | 15 | | |
16 | 16 | | |
| 17 | + | |
| 18 | + | |
17 | 19 | | |
18 | 20 | | |
19 | 21 | | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
20 | 36 | | |
21 | 37 | | |
22 | 38 | | |
23 | 39 | | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
24 | 43 | | |
25 | 44 | | |
26 | 45 | | |
| |||
Lines changed: 6 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
30 | 30 | | |
31 | 31 | | |
32 | 32 | | |
| 33 | + | |
33 | 34 | | |
34 | 35 | | |
35 | 36 | | |
| |||
40 | 41 | | |
41 | 42 | | |
42 | 43 | | |
| 44 | + | |
| 45 | + | |
43 | 46 | | |
44 | 47 | | |
45 | 48 | | |
| |||
125 | 128 | | |
126 | 129 | | |
127 | 130 | | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
128 | 134 | | |
129 | 135 | | |
130 | 136 | | |
| |||
Lines changed: 42 additions & 6 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
25 | 25 | | |
26 | 26 | | |
27 | 27 | | |
28 | | - | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
29 | 31 | | |
30 | 32 | | |
31 | 33 | | |
32 | 34 | | |
33 | 35 | | |
34 | 36 | | |
35 | 37 | | |
| 38 | + | |
36 | 39 | | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
37 | 43 | | |
38 | 44 | | |
39 | 45 | | |
40 | 46 | | |
41 | 47 | | |
42 | 48 | | |
43 | 49 | | |
44 | | - | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
45 | 60 | | |
46 | 61 | | |
47 | 62 | | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
48 | 77 | | |
49 | 78 | | |
50 | 79 | | |
51 | 80 | | |
52 | 81 | | |
53 | 82 | | |
54 | 83 | | |
55 | | - | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
56 | 88 | | |
57 | 89 | | |
58 | 90 | | |
| |||
67 | 99 | | |
68 | 100 | | |
69 | 101 | | |
70 | | - | |
| 102 | + | |
71 | 103 | | |
72 | 104 | | |
73 | 105 | | |
74 | 106 | | |
75 | 107 | | |
76 | 108 | | |
77 | | - | |
| 109 | + | |
78 | 110 | | |
79 | | - | |
80 | 111 | | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
81 | 117 | | |
82 | 118 | | |
83 | 119 | | |
0 commit comments