"Files were modified by this hook" but no files is modified in git status

Hello,
I have configured nbQA with pre-commit.
  - repo: https://github.com/nbQA-dev/nbQA
    rev: 1.7.0
    hooks:
      - id: nbqa-black
        additional_dependencies: [jupytext, black] # optional, only if you're using Jupytext
      - id: nbqa-isort
        additional_dependencies: [jupytext, isort] # optional, only if you're using Jupytext

when I run pre-commit run --all-files it tells me that some files have been modified (so it fails), but I can't find the files in the tree. git status returns a clean tree.
Any idea on how to debug?
check yaml...............................................................Passed
check json...........................................(no files to check)Skipped
trim trailing whitespace.................................................Passed
fix end of files.........................................................Passed
check for added large files..............................................Passed
debug statements (python)................................................Passed
nbqa-black...............................................................Failed
- hook id: nbqa-black
- files were modified by this hook

reformatted docs/runbooks/get_email.md
reformatted docs/runbooks/obtain_correlation_table.md
reformatted docs/runbooks/rebackfill.md

All done! ✨ 🍰 ✨
3 files reformatted, 6 files left unchanged.

nbqa-isort...............................................................Failed
- hook id: nbqa-isort
- files were modified by this hook

Fixing /home/rxxxxxx/git/internal-docs/docs/runbooks/get_email.md
Fixing /home/rxxxxxx/git/internal-docs/docs/runbooks/obtain_correlation_table.md
Fixing /home/rxxxxxx/git/internal-docs/docs/runbooks/rebackfill.md

Ok, the problem was conflicts between isort and black. Needed to add args: [--profile=black].


MS Edge crashes when user clicks a target="_blank" link in the sidepanel

We're hitting a nasty bug where MS Edge crashes when the user clicks a target=_blank URL in the sidepanel:

https://github.com/pixiebrix/pixiebrix-extension/issues/8206
https://github.com/pixiebrix/pixiebrix-extension/issues/7809

MS Edge crashes and on next startup, our extension is no longer installed
I'm surprised other developers haven't hit up against this? Or is there an existing bug ticket
We're currently trying to reliably intercept the clicks to use window.open or browser.tabs.create instead. However, in some cases there might be a frame embedded in the side panel. Therefore, we'd have to have a contentScript to just try to intercept link clicks for any frame that might appear within the sidepanel

Ack. We will get back after investigating this.

Appreciate the help! For others viewing this issue, here's our latest workaround for embedded iframes: https://github.com/pixiebrix/pixiebrix-extension/pull/8223

Hi @rishikramena-ms, thanks for investigating. Here's a repository with a minimal reproduction: https://github.com/pixiebrix/msedge-crash-repro
Let me know if there's any other information I can provide!

I tried reproducing the crash using the extension published on the Chrome Web Store but couldn't.

We've added a mitigation: https://github.com/pixiebrix/pixiebrix-extension/blob/44a3b1a8b947ec82af349779c8e4baa4435db0ac/src/utils/openAllLinksInPopups.ts#L38-L38
And are also currently working on a mitigation for embedded frames using a content script: https://github.com/pixiebrix/pixiebrix-extension/pull/8223

@rishikramena-ms any updates here? This bug is preventing our customers from using MS Edge with our product

Hi @twschiller,
Sorry for the delayed resolution. We are aware of this issue and have identified a fix for this. This should be resolved in a subsequent update. Will notify you on this thread once the fix is available publicly.
Thanks,
Rishik

The fix is now available in canary.

In my case, adding rel="opener" to my links that also have target="_blank" seems to prevent the crash.


Makes LiveCameraCellPresenter public and reusable out of ChattoAdditions

Looks good to me

Current coverage is 72.94% (diff: 100%)

Merging #205 into master will increase coverage by 9.40%

@@             master       #205   diff @@
==========================================
  Files            62         17     -45
  Lines          3486        935   -2551
  Methods           0          0
  Messages          0          0
  Branches          0          0
==========================================
- Hits           2215        682   -1533
+ Misses         1271        253   -1018
  Partials          0          0

Powered by Codecov. Last update e881ae9...87b6cc3


⚠ Bofrost.lu has degraded performance

In 492d57a, Bofrost.lu (https://www.bofrost.lu) experienced degraded performance:

HTTP code: 200
Response time: 1506 ms

Resolved: Bofrost.lu performance has improved in d1f8787 after 22 minutes.


UI Lag when connected to headless service

When playing with the new headless mode, I found that there is a fair amount of UI lag from input to something happening on screen. It's not consistent, and most of the time, it's quite responsive. But quite regularly, input processing seems to hang for about a second.
After poking around, I found that this only happens when the UI client is connected to a remote service. If I start the client without an active connection, the UI is very snappy. If I have it connected to a remote service, without even having started any profiling actions, the UI will lag.
Video of issue: https://photos.app.goo.gl/CTj2UhbkoTtba4ou5

This was built with QT 5.12.5, on Win10 x64.

Thanks for filing the issue.
It should be improved by
https://github.com/pierricgimmig/orbitprofiler/commit/78e75b424e991a1262f29d2b45a5150bd0f7aaa8
Every time we would receive a remote list of processes, we'd spend ~200 ms on the main refreshing the list of local processes, which we don't need to do at all.  Leaving this open as a there is still room for improvement.  Basically, work currently done on the main thread when receiving a remote process list should be offloaded.

I just tried it out, and the performance feels just as good as local now! Feels incredible to use!
Really huge improvement, thanks so much for the quick turnaround!

Great!  Thanks for testing!


BFO:0000031 has two definitions causing IAO to not be convertable to OBO via ROBOT

In the current IAO release BFO:0000031 has two IAO:0000115 definition axioms (see https://github.com/information-artifact-ontology/IAO/blob/master/iao.owl#L2909-L2910). This causes the conversion to OBO via ROBOT to fail, when using the default settings (see also: http://robot.obolibrary.org/errors#OBO-Structure-Error)
This might affect ontologies using IAO downstream that want/need to have an OBO format release.
 <!-- http://purl.obolibrary.org/obo/BFO_0000031 -->

    <owl:Class rdf:about="http://purl.obolibrary.org/obo/BFO_0000031">
        <rdfs:subClassOf rdf:resource="http://purl.obolibrary.org/obo/BFO_0000002"/>
        <obo:BFO_0000179>gdc</obo:BFO_0000179>
        <obo:BFO_0000180>GenericallyDependentContinuant</obo:BFO_0000180>
        <obo:IAO_0000112 xml:lang="en">The entries in your database are patterns instantiated as quality instances in your hard drive. The database itself is an aggregate of such patterns. When you create the database you create a particular instance of the generically dependent continuant type database. Each entry in the database is an instance of the generically dependent continuant type IAO: information content entity.</obo:IAO_0000112>
        <obo:IAO_0000112 xml:lang="en">the pdf file on your laptop, the pdf file that is a copy thereof on my laptop</obo:IAO_0000112>
        <obo:IAO_0000112 xml:lang="en">the sequence of this protein molecule; the sequence that is a copy thereof in that protein molecule.</obo:IAO_0000112>
        <obo:IAO_0000115 xml:lang="en">A continuant that is dependent on one or other independent continuant bearers. For every instance of A requires some instance of (an independent continuant type) B but which instance of B serves can change from time to time.</obo:IAO_0000115>
        <obo:IAO_0000115 xml:lang="en">b is a generically dependent continuant = Def. b is a continuant that g-depends_on one or more other entities. (axiom label in BFO2 Reference: [074-001])</obo:IAO_0000115>
        <obo:IAO_0000602>(iff (GenericallyDependentContinuant a) (and (Continuant a) (exists (b t) (genericallyDependsOnAt a b t)))) // axiom label in BFO2 CLIF: [074-001] </obo:IAO_0000602>
        <rdfs:isDefinedBy rdf:resource="http://purl.obolibrary.org/obo/bfo.owl"/>
        <rdfs:label xml:lang="en">generically dependent continuant</rdfs:label>
    </owl:Class>

FWIW Here is what the ISO version has.
A.1.2.50 generically dependent continuant
SYNONYM: g-dependent continuant
ELUCIDATION: a generically dependent continuant is an entity that exists in virtue of the fact that there is at least one of what may be multiple copies; it is the content or the pattern that the multiple copies share
EXAMPLES: The pdf file on your laptop, the pdf file that is a copy thereof on my laptop; the sequence of this protein molecule; the sequence that is a copy thereof in that protein molecule; the content that is shared by a string of dots and
dashes written on a page and the transmitted Morse code signal; the content of a sentence; an engineering blueprint.

IAO imported both BFO and RO core OWL files, which contain different definitions of BFO:0000031. I will clean up the definition manually on the coming release.


Fixed typo in two example files -- "an selection" → "a selection"

Thanks for the PR! I will make these changes to the staging repo.

Fixed in v7.2


can't start spyder or anaconda-navigator.

Description of your problem
I installed spyder3. It was working fine until I restarted my computer. Now it doesn't start and gives me this error.
ICE default IO error handler doing an exit(), pid = 7833, errno = 0
What steps will reproduce the problem?
0. fresh install of ubuntu 16.04

install spyder3?

2 install anaconda navigator?
3. install cpu version of tensorflow?
4. Change graphics drivers to proprietary nvidia drivers?
5. restart computer ?
6. type "spyder3" in terminal
**What is the expected output?
spyder3 to start
What do you see instead?**
terminal displays this line
ICE default IO error handler doing an exit(), pid = 7833, errno = 0
Please provide any additional information below
Versions and main components

Spyder Version: 3
Python Version: 3.5
Qt Version: 5.6.2
PyQt Version: QtPy (1.2.1)?
Operating system: UBUNTU 16.04

Dependencies
Please go to the menu entry Help > Optional Dependencies (or
Help > Dependencies), press the button Copy to clipboard
and paste the contents below:

this fixed the problem for me but don't ask me why.
sudo apt-get install --reinstall ubuntu-desktop


LocalStorage load and PHP Bind fix

Fixed the page not loading the stored IP by switching entirely to a
localstorage based solution. Also removed additional backslashes from
the PHP bind shell as per Ryan's request

@all-contributors please add @MuirlandOracle > for Maintenance


Remove share/lima/examples, share/man, and share/lima/lima-guestagent.Linux-riscv64 from the tarballs

The examples and man pages are small, but the unused guest agent is 36MB.

Will be done as part of #27


Grid spacing in one direction

I am trying to use a row Grid. I want spacing between the items in only the x-axis (similar to grid-gap in css). Is there a way to achieve this? i.e spacing in just one axis.

@affanshahid What about using one grid container per row?

I am looking for the same feature as @affanshahid mentioned.
I find container Grid spacing setter very handy.
However, half the time what I want is to horizontally list things,
e.g.

a
4 spaces on x
b
4 spaces on x
c

0 space on y
0 space on y
0 space on y
0 space on y
0 space on y

e
4 spaces on x
d
...

The current spacing will set padding on both x and y-axis. However, what I only want to control is spacing on x-axis. So we I actually get from <Grid container spacing={4}> will be:

a
4 spaces on x
b
4 spaces on x
c

4 spaces on y
4 spaces on y
4 spaces on y
4 spaces on y
4 spaces on y

e
4 spaces on x
d
...


GDScript: add errors when calling unimplemented virtual functions

This PR does a small refactor of how method flags are handled in the GDScript analyzer. This way, it adds support for the analyzer to use any of MethodInfo's flags, where previously it could only use METHOD_FLAG_STATIC and METHOD_FLAG_VARARG.
As a side-effect, this also normalizes behavior between editor and release templates, which fixes #76938. The error is not exactly the same, as I didn't want to make changes to core, but it should be functionally similar:
Editor:

Template release:

Also works with an extra layer of indirection, with behavior similar between editor & template_release:
class TestZero:
	func _init():
		pass

class TestOne extends TestZero:
	pass

class TestTwo extends TestOne:
	func _init():
		super()

The tests added also brought a different issue to light, where using super() appears to generate a return variable discarded on calling super's _init(), which doesn't have a return value. This should be tackled in a different PR, which will have to change the output of this PR's tests.

Rebased after #77351 so there are no conflicts in the test files :) should be good to go!

Thanks!


graphql slick limit + offset

the problem
slick unable to handle (stream) prepared statement with limit larger than 258, number of rows in this case is 4238
due to lot of FK and relationship lookups, async executor probably time outs or run out of threads, throwable yields
[Running, pool size = 20, active threads = 12, queued tasks = 1000, completed tasks = 182523]

either timeout is set to 1s (because limit set to 258 is finished sub 1s) or there issue with underlying slick hiraki thread pool.
similar issues with large dataset mentioned at https://github.com/slick/slick/issues/1892
proposed solution:
instead of just query.result on compiled statement try to do something more like
query.result.withStatementParameters(
  rsType = ResultSetType.ForwardOnly,
  rsConcurrency = ResultSetConcurrency.ReadOnly,
  fetchSize = 128, // not to be left at default value (0)
)

as mentioned at https://doc.akka.io/docs/alpakka/current/slick.html

problematic part is deferred resolution of accounts in transfer function accountsByNames.


Added Dockerfile and poll.sh

This pull request adds a dockerfile and poll script to enable running this bot in a docker infrastructure.

Looks great, thanks!


Collect new sampling procedure statistics

New sampling procedure using H3 hierarchical grid has been implemented here
Sampling was performed at a dataset level and per crop group. Crop grouping was done on the basis of new WorldCereal legend and can be found here
The following groups were used for sampling:
'bare_sparsely_vegetated', 'barley', 'built_up', 'cereals','dry_pulses_legumes', 'fibre_crops',  'flower_crops', 'fruit_nuts','grass_fodder_crops', 'herb_spice_medicinal_crops','herbaceous_vegetation',  'maize', 'millet_sorghum','mushrooms_truffles', 'non_cropland_excl_perennial','non_cropland_incl_perennial',  'oats', 'oilseed_crops','open_water', 'other_oilseeds', 'other_permanent_crops','pasture_meadows', 'permanent_crops', 'rapeseed_rape', 'rice','root_tuber_crops', 'rye', 'shrubland', 'soy_soybeans','sunflower', 'temporary_crops',  'trees_unspecified','vegetables_fruits', 'wheat'
This task is created to investigate the following:

[ ] compare counts and spatial distribution of the new sampling procedure and the previous samples extracted during WorldCereal Phase I
[ ] visualize distribution of samples that will be used in Phase II

Comparison of samples for not cropland classes:

Comparison of samples for cropland classes:

This is some kind of density plot right? It's a bit unclear to me what is under "cropland classes", that's all cropland datapoints, regarding if we have crop type information for them or not? Although there's a better spread now, there seems to be larger "blind spots" compared to earlier plots we had, but that's likely because low density samples, such as points from EWOCO dataset do not pop up here. It's probably a detail, but to identify true large blind spots from the map, we should maybe be able to also spot the low-density regions.

very good points, thanks! Indeed, no EWOCO datasets are present here (as they are still for the metadata to be ingested into the RDM). In order to align results, I compared results only for those datasets that have been processed by the new procedure, so this can be updated as other datasets are processed. The primary aim for me now was to see how the density of samples changed with the sampling procedure. Once
As for "cropland classes", I updated the issue description to show which classes I considered to be cropland. This is an arbitrary division, just for visualization purposes.
I'll update the plots a little to better depict blind spots and low-density regions.

Updated plot with legend and divided by confidence for better visibility.  Some territories/countries (Greenland, Iceland, Norwegian arctic territories, France territories near South America, Russia) is excluded for visualization purposes.
Not Cropland classes:
Africa

Asia

Europe

North America

South America

Updated plots with legend and divided by continents for better visibility.  Some territories/countries (Greenland, Iceland, Norwegian arctic territories, France territories near South America, Russia) is excluded for visualization purposes.
Cropland classes:
Africa

Asia

Europe

North America

South America

Here's more visually telling comparison by continents.
CONCLUSION: new sampling procedure does provide much better spatial diversity and allows to fill in the gaps present in the Phase I data, while still keeping the number of samples feasible. This is especially visible on the example of the North America.
While EWOCO and France datasets haven't been processed yet, the spatial distribution of cropland is significantly expanded compared to Phase I dataset:


Alias & merge nodes are resolved too early

At the moment, alias and merge nodes are resolved during YAML.parseDocuments, and they cannot be created in a YAML.Document. Instead, new Node types should be added for them, and they should be modifiable and creatable for new Documents.

These are now included in 1.0.0-rc.5.


Correct issues with running unittest to discover and execute unit tests in a project.

Corrects #2692 and related issues

Ensure unittest process is called and processed one at a time

Subsequent calls to unittest interrupt current process and replace it
Ensure unittest process is cleaned up sufficiently in subsequent calls

Re-enable unittest.test.ts test suite

Add guards against exceptions that would terminate mocha test framework

[x] Pull request represents a single change (i.e. not fixing disparate/unrelated things in a single PR)

[x] Title summarizes what is changing

[x] Has a news entry file (remember to thank yourself!)

[x] Unit tests & system/integration tests are added/updated

[x] ~Any new/changed dependencies in package.json are pinned (e.g. "1.2.3", not "^1.2.3" for the specified version)~

[x] ~package-lock.json has been regenerated by running npm install (if dependencies have changed)~

@DonJayamanne please re-check this PR given my last two changes. I don't think they are particularly troubling but it would be good to have your eyes on them anyways.


Temperature limit 100.0° ?

I played a little around with your plugin to add WLANthermo https://wlanthermo.de to my HomeKit installation. Works perfect, running an a Pi4 with homebridge/mosquitto/node-red. Thanks a lot, great work !
Unfortunately I get a limit of 100.0° in my HomeKit app, which is of course not very useful for a barbecue thermometer. I tried to change that with
{
"name": "Kanal1",
"service": "TemperatureSensor",
"manufacturer": "WLANThermo",
"model": "Nano v1+ PRO",
"CurrentTemperature": {
"minValue": -20,
"maxValue": 300,
"minStep": 0.1
}
}
No change. Can it be that Apple has a limit of 100.0° for temperature sensors implemented ?

Did you first remove the accessory?

Cool, Thanks a lot. That worked.
Sorry for the mistake.
BTW: shall I upload the example to your wiki ?

Sure, you can add it to the wiki.
Are you using Esp8266/Tasmota?

No, I guess WLANthermo is an own implementation :
https://github.com/WLANThermo-nano

Thats my little node-red example for transferring WLANThermo temperature data to homebridge.
Its based on an old posting which I found in the WLANThermo forum.
If you like, add it to your wiki, I did not find a way for me to do.
Prerequisites : Raspberry Pi running Mosquitto (connected WLANthermo), Homebridge with homebridge-mqtt plugin and node-red running this code.
[{"id":"a3d157f9.f597d8","type":"tab","label":"WLANThermo","disabled":false,"info":""},{"id":"fcfa8ec3.0244b8","type":"mqtt out","z":"a3d157f9.f597d8","name":"to homebridge","topic":"","qos":"","retain":"","broker":"3dc531c.8e7c14e","x":280,"y":80,"wires":[]},{"id":"fc3f2370.77be88","type":"inject","z":"a3d157f9.f597d8","name":"create Kanal1","topic":"homebridge/to/add","payload":"{"name":"Kanal1","service":"TemperatureSensor","manufacturer":"WLANThermo","model":"Nano v1+ PRO","CurrentTemperature":{"minValue":-20,"maxValue":300,"minStep":0.1}}","payloadType":"json","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":110,"y":80,"wires":[["fcfa8ec3.0244b8"]]},{"id":"16c1dbb9.8b010c","type":"mqtt out","z":"a3d157f9.f597d8","name":"homebridge/to/set","topic":"homebridge/to/set","qos":"","retain":"","broker":"3dc531c.8e7c14e","x":1130,"y":560,"wires":[]},{"id":"996fda59.492be","type":"function","z":"a3d157f9.f597d8","name":"Temperaturen","func":"var msg1 = [];\nfor (var i = 0; i < 8; i++) {\n\tmsg1.push({ payload: msg.payload.channel[i].temp,\n\tui_control:{"unit":"Hallo","min":msg.payload.channel[i].min,"max":msg.payload.channel[i].max} \n\t    \n\t});\n}\nreturn msg1;","outputs":8,"noerr":0,"x":480,"y":660,"wires":[["4fa0f158.22fe","ed016e3b.7e5c48"],["2546fec7.9d2eca"],["76a21174.589408"],["1191e1f2.0fb1ee"],["72306568.653bec"],["9a44d359.1a14b"],["725c73ca.2fb354"],["9a496396.b914f8"]],"outputLabels":["Kanal 1","","","","","","",""]},{"id":"b75876c2.af0ff8","type":"mqtt in","z":"a3d157f9.f597d8","name":"","topic":"WLanThermo/NANO-e1l52/status/data/#","qos":"2","datatype":"json","broker":"3dc531c.8e7c14e","x":180,"y":660,"wires":[["996fda59.492be","84e91d42.22e058"]]},{"id":"2546fec7.9d2eca","type":"function","z":"a3d157f9.f597d8","name":"create json output for homekit sensor 2","func":"msg.topic="homebridge/to/set"\nmsg.payload = \n    {"name":"Kanal2","service":"TemperatureSensor","characteristic":"CurrentTemperature","value":msg.payload}\n;\n\nreturn msg;","outputs":1,"noerr":0,"x":840,"y":560,"wires":[["16c1dbb9.8b010c"]]},{"id":"8ef77ad9.29f55","type":"mqtt out","z":"a3d157f9.f597d8","name":"to homebridge","topic":"","qos":"","retain":"","broker":"3dc531c.8e7c14e","x":280,"y":120,"wires":[]},{"id":"d0933ed8.23eee","type":"inject","z":"a3d157f9.f597d8","name":"create Kanal2","topic":"homebridge/to/add","payload":"{"name":"Kanal2","service":"TemperatureSensor","manufacturer":"WLANThermo","model":"Nano v1+ PRO","CurrentTemperature":{"minValue":-20,"maxValue":300,"minStep":0.1}}","payloadType":"json","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":110,"y":120,"wires":[["8ef77ad9.29f55"]]},{"id":"4fa0f158.22fe","type":"function","z":"a3d157f9.f597d8","name":"create json output for homekit sensor 1","func":"msg.topic="homebridge/to/set"\nmsg.payload = \n    {"name":"Kanal1","service":"TemperatureSensor","characteristic":"CurrentTemperature","value":msg.payload}\n;\n\nreturn msg;","outputs":1,"noerr":0,"x":840,"y":520,"wires":[["8b4805b5.54ca58","bdcbf83e.0dc7f8"]]},{"id":"bdcbf83e.0dc7f8","type":"mqtt out","z":"a3d157f9.f597d8","name":"homebridge/to/set","topic":"homebridge/to/set","qos":"0","retain":"","broker":"3dc531c.8e7c14e","x":1130,"y":520,"wires":[]},{"id":"8b4805b5.54ca58","type":"debug","z":"a3d157f9.f597d8","name":"Temp1","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","x":1110,"y":460,"wires":[]},{"id":"7e795335.6dd6ec","type":"mqtt out","z":"a3d157f9.f597d8","name":"to homebridge","topic":"","qos":"","retain":"","broker":"3dc531c.8e7c14e","x":280,"y":160,"wires":[]},{"id":"af4115bc.15fb68","type":"inject","z":"a3d157f9.f597d8","name":"create Kanal3","topic":"homebridge/to/add","payload":"{"name":"Kanal3","service":"TemperatureSensor","manufacturer":"WLANThermo","model":"Nano v1+ PRO","CurrentTemperature":{"minValue":-20,"maxValue":300,"minStep":0.1}}","payloadType":"json","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":110,"y":160,"wires":[["7e795335.6dd6ec"]]},{"id":"ceaee973.829be","type":"mqtt out","z":"a3d157f9.f597d8","name":"to homebridge","topic":"","qos":"","retain":"","broker":"3dc531c.8e7c14e","x":280,"y":200,"wires":[]},{"id":"919c1e23.5ab15","type":"inject","z":"a3d157f9.f597d8","name":"create Kanal4","topic":"homebridge/to/add","payload":"{"name":"Kanal4","service":"TemperatureSensor","manufacturer":"WLANThermo","model":"Nano v1+ PRO","CurrentTemperature":{"minValue":-20,"maxValue":300,"minStep":0.1}}","payloadType":"json","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":110,"y":200,"wires":[["ceaee973.829be"]]},{"id":"ed016e3b.7e5c48","type":"debug","z":"a3d157f9.f597d8","name":"rTemp1","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","x":680,"y":460,"wires":[]},{"id":"76a21174.589408","type":"function","z":"a3d157f9.f597d8","name":"create json output for homekit sensor 3","func":"msg.topic="homebridge/to/set"\nmsg.payload = \n    {"name":"Kanal3","service":"TemperatureSensor","characteristic":"CurrentTemperature","value":msg.payload}\n;\n\nreturn msg;","outputs":1,"noerr":0,"x":840,"y":600,"wires":[["7c39a61c.9895f"]]},{"id":"1191e1f2.0fb1ee","type":"function","z":"a3d157f9.f597d8","name":"create json output for homekit sensor 4","func":"msg.topic="homebridge/to/set"\nmsg.payload = \n    {"name":"Kanal4","service":"TemperatureSensor","characteristic":"CurrentTemperature","value":msg.payload}\n;\n\nreturn msg;","outputs":1,"noerr":0,"x":840,"y":640,"wires":[["7cc8f254.d1f6e4"]]},{"id":"72306568.653bec","type":"function","z":"a3d157f9.f597d8","name":"create json output for homekit sensor 5","func":"msg.topic="homebridge/to/set"\nmsg.payload = \n    {"name":"Kanal5","service":"TemperatureSensor","characteristic":"CurrentTemperature","value":msg.payload}\n;\n\nreturn msg;","outputs":1,"noerr":0,"x":840,"y":680,"wires":[["ef0f80ff.5844e"]]},{"id":"9a44d359.1a14b","type":"function","z":"a3d157f9.f597d8","name":"create json output for homekit sensor 6","func":"msg.topic="homebridge/to/set"\nmsg.payload = \n    {"name":"Kanal6","service":"TemperatureSensor","characteristic":"CurrentTemperature","value":msg.payload}\n;\n\nreturn msg;","outputs":1,"noerr":0,"x":840,"y":720,"wires":[["661deb4a.234164"]]},{"id":"725c73ca.2fb354","type":"function","z":"a3d157f9.f597d8","name":"create json output for homekit sensor 7","func":"msg.topic="homebridge/to/set"\nmsg.payload = \n    {"name":"Kanal7","service":"TemperatureSensor","characteristic":"CurrentTemperature","value":msg.payload}\n;\n\nreturn msg;","outputs":1,"noerr":0,"x":840,"y":760,"wires":[["c44fcba6.6dd94"]]},{"id":"9a496396.b914f8","type":"function","z":"a3d157f9.f597d8","name":"create json output for homekit sensor 8","func":"msg.topic="homebridge/to/set"\nmsg.payload = \n    {"name":"Kanal8","service":"TemperatureSensor","characteristic":"CurrentTemperature","value":msg.payload}\n;\n\nreturn msg;","outputs":1,"noerr":0,"x":840,"y":800,"wires":[["53b5f9aa.cb0f9"]]},{"id":"7c39a61c.9895f","type":"mqtt out","z":"a3d157f9.f597d8","name":"homebridge/to/set","topic":"homebridge/to/set","qos":"","retain":"","broker":"3dc531c.8e7c14e","x":1130,"y":600,"wires":[]},{"id":"7cc8f254.d1f6e4","type":"mqtt out","z":"a3d157f9.f597d8","name":"homebridge/to/set","topic":"homebridge/to/set","qos":"","retain":"","broker":"3dc531c.8e7c14e","x":1130,"y":640,"wires":[]},{"id":"ef0f80ff.5844e","type":"mqtt out","z":"a3d157f9.f597d8","name":"homebridge/to/set","topic":"homebridge/to/set","qos":"","retain":"","broker":"3dc531c.8e7c14e","x":1130,"y":680,"wires":[]},{"id":"661deb4a.234164","type":"mqtt out","z":"a3d157f9.f597d8","name":"homebridge/to/set","topic":"homebridge/to/set","qos":"","retain":"","broker":"3dc531c.8e7c14e","x":1130,"y":720,"wires":[]},{"id":"c44fcba6.6dd94","type":"mqtt out","z":"a3d157f9.f597d8","name":"homebridge/to/set","topic":"homebridge/to/set","qos":"","retain":"","broker":"3dc531c.8e7c14e","x":1130,"y":760,"wires":[]},{"id":"53b5f9aa.cb0f9","type":"mqtt out","z":"a3d157f9.f597d8","name":"homebridge/to/set","topic":"homebridge/to/set","qos":"","retain":"","broker":"3dc531c.8e7c14e","x":1130,"y":800,"wires":[]},{"id":"76d028e1.ceff58","type":"mqtt out","z":"a3d157f9.f597d8","name":"to homebridge","topic":"","qos":"","retain":"","broker":"3dc531c.8e7c14e","x":280,"y":240,"wires":[]},{"id":"790be1b1.94d25","type":"inject","z":"a3d157f9.f597d8","name":"create Kanal5","topic":"homebridge/to/add","payload":"{"name":"Kanal5","service":"TemperatureSensor","manufacturer":"WLANThermo","model":"Nano v1+ PRO","CurrentTemperature":{"minValue":-20,"maxValue":300,"minStep":0.1}}","payloadType":"json","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":110,"y":240,"wires":[["76d028e1.ceff58"]]},{"id":"3f7284f4.c64094","type":"mqtt out","z":"a3d157f9.f597d8","name":"to homebridge","topic":"","qos":"","retain":"","broker":"3dc531c.8e7c14e","x":280,"y":280,"wires":[]},{"id":"bd988b1c.fe549","type":"inject","z":"a3d157f9.f597d8","name":"create Kanal6","topic":"homebridge/to/add","payload":"{"name":"Kanal6","service":"TemperatureSensor","manufacturer":"WLANThermo","model":"Nano v1+ PRO","CurrentTemperature":{"minValue":-20,"maxValue":300,"minStep":0.1}}","payloadType":"json","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":110,"y":280,"wires":[["3f7284f4.c64094"]]},{"id":"dded070d.ac79c","type":"mqtt out","z":"a3d157f9.f597d8","name":"to homebridge","topic":"","qos":"","retain":"","broker":"3dc531c.8e7c14e","x":280,"y":320,"wires":[]},{"id":"405125c5.c60acc","type":"inject","z":"a3d157f9.f597d8","name":"create Kanal7","topic":"homebridge/to/add","payload":"{"name":"Kanal7","service":"TemperatureSensor","manufacturer":"WLANThermo","model":"Nano v1+ PRO","CurrentTemperature":{"minValue":-20,"maxValue":300,"minStep":0.1}}","payloadType":"json","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":110,"y":320,"wires":[["dded070d.ac79c"]]},{"id":"48263839.2b4ad","type":"mqtt out","z":"a3d157f9.f597d8","name":"to homebridge","topic":"","qos":"","retain":"","broker":"3dc531c.8e7c14e","x":280,"y":360,"wires":[]},{"id":"3220287a.4c8358","type":"inject","z":"a3d157f9.f597d8","name":"create Kanal8","topic":"homebridge/to/add","payload":"{"name":"Kanal8","service":"TemperatureSensor","manufacturer":"WLANThermo","model":"Nano v1+ PRO","CurrentTemperature":{"minValue":-20,"maxValue":300,"minStep":0.1}}","payloadType":"json","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":110,"y":360,"wires":[["48263839.2b4ad"]]},{"id":"75993678.2b4a78","type":"comment","z":"a3d157f9.f597d8","name":"Create thermo channels for Homekit","info":"","x":180,"y":40,"wires":[]},{"id":"84e91d42.22e058","type":"debug","z":"a3d157f9.f597d8","name":"aTemp","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","x":300,"y":560,"wires":[]},{"id":"febe89b.71bc8f8","type":"inject","z":"a3d157f9.f597d8","name":"remove Kanal2","topic":"homebridge/to/remove","payload":"{"name":"Kanal2","service":"TemperatureSensor"}","payloadType":"json","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":560,"y":120,"wires":[["4029f702.a6908"]]},{"id":"4029f702.a6908","type":"mqtt out","z":"a3d157f9.f597d8","name":"to homebridge","topic":"","qos":"","retain":"","broker":"3dc531c.8e7c14e","x":740,"y":120,"wires":[]},{"id":"12c26249.38c1de","type":"mqtt out","z":"a3d157f9.f597d8","name":"to homebridge","topic":"","qos":"","retain":"","broker":"3dc531c.8e7c14e","x":740,"y":80,"wires":[]},{"id":"27b8fc5.bade804","type":"inject","z":"a3d157f9.f597d8","name":"remove Kanal1","topic":"homebridge/to/remove","payload":"{"name":"Kanal1","service":"TemperatureSensor"}","payloadType":"json","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":560,"y":80,"wires":[["12c26249.38c1de"]]},{"id":"5ccfcd08.249b8c","type":"mqtt out","z":"a3d157f9.f597d8","name":"to homebridge","topic":"","qos":"","retain":"","broker":"3dc531c.8e7c14e","x":740,"y":160,"wires":[]},{"id":"3bf0d7d0.a65","type":"inject","z":"a3d157f9.f597d8","name":"remove Kanal3","topic":"homebridge/to/remove","payload":"{"name":"Kanal3","service":"TemperatureSensor"}","payloadType":"json","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":560,"y":160,"wires":[["5ccfcd08.249b8c"]]},{"id":"d542d35b.c55bf","type":"mqtt out","z":"a3d157f9.f597d8","name":"to homebridge","topic":"","qos":"","retain":"","broker":"3dc531c.8e7c14e","x":740,"y":200,"wires":[]},{"id":"8284a291.b15bc","type":"inject","z":"a3d157f9.f597d8","name":"remove Kanal4","topic":"homebridge/to/remove","payload":"{"name":"Kanal4","service":"TemperatureSensor"}","payloadType":"json","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":560,"y":200,"wires":[["d542d35b.c55bf"]]},{"id":"95b06fe0.f7eb1","type":"mqtt out","z":"a3d157f9.f597d8","name":"to homebridge","topic":"","qos":"","retain":"","broker":"3dc531c.8e7c14e","x":740,"y":240,"wires":[]},{"id":"c988e53b.2d9dd8","type":"inject","z":"a3d157f9.f597d8","name":"remove Kanal5","topic":"homebridge/to/remove","payload":"{"name":"Kanal5","service":"TemperatureSensor"}","payloadType":"json","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":560,"y":240,"wires":[["95b06fe0.f7eb1"]]},{"id":"d7c7dace.c50c8","type":"mqtt out","z":"a3d157f9.f597d8","name":"to homebridge","topic":"","qos":"","retain":"","broker":"3dc531c.8e7c14e","x":740,"y":280,"wires":[]},{"id":"705799f3.9ef578","type":"inject","z":"a3d157f9.f597d8","name":"remove Kanal6","topic":"homebridge/to/remove","payload":"{"name":"Kanal6","service":"TemperatureSensor"}","payloadType":"json","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":560,"y":280,"wires":[["d7c7dace.c50c8"]]},{"id":"91ee9ce9.53b9f8","type":"mqtt out","z":"a3d157f9.f597d8","name":"to homebridge","topic":"","qos":"","retain":"","broker":"3dc531c.8e7c14e","x":740,"y":320,"wires":[]},{"id":"29fcff03.d0eac8","type":"inject","z":"a3d157f9.f597d8","name":"remove Kanal7","topic":"homebridge/to/remove","payload":"{"name":"Kanal7","service":"TemperatureSensor"}","payloadType":"json","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":560,"y":320,"wires":[["91ee9ce9.53b9f8"]]},{"id":"2dccc29b.b99746","type":"mqtt out","z":"a3d157f9.f597d8","name":"to homebridge","topic":"","qos":"","retain":"","broker":"3dc531c.8e7c14e","x":740,"y":360,"wires":[]},{"id":"81c0c9b5.12fb2","type":"inject","z":"a3d157f9.f597d8","name":"remove Kanal8","topic":"homebridge/to/remove","payload":"{"name":"Kanal8","service":"TemperatureSensor"}","payloadType":"json","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":560,"y":360,"wires":[["2dccc29b.b99746"]]},{"id":"8851e0b4.e72c","type":"comment","z":"a3d157f9.f597d8","name":"Remove thermo channels for Homekit","info":"","x":610,"y":40,"wires":[]},{"id":"3dc531c.8e7c14e","type":"mqtt-broker","z":"","name":"hoobs","broker":"<IP_ADDRESS>","port":"1883","clientid":"","usetls":false,"compatmode":false,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthRetain":"false","birthPayload":"","closeTopic":"","closeQos":"0","closeRetain":"false","closePayload":"","willTopic":"","willQos":"0","willRetain":"false","willPayload":""}]

Hi,
I can't import your flow, check your JSON here: https://jsonlint.com/
To add it to the wiki is quite easy:
Click Wiki and click new Page

Sorry, cflurin. Don't know what happened. Here's a new try, validated by jsonlint.
BTW: I don't get the option "new page".
[{"id":"a3d157f9.f597d8","type":"tab","label":"WLANThermo","disabled":false,"info":""},{"id":"fcfa8ec3.0244b8","type":"mqtt out","z":"a3d157f9.f597d8","name":"to homebridge","topic":"","qos":"","retain":"","broker":"3dc531c.8e7c14e","x":280,"y":80,"wires":[]},{"id":"fc3f2370.77be88","type":"inject","z":"a3d157f9.f597d8","name":"create Kanal1","topic":"homebridge/to/add","payload":"{"name":"Kanal1","service":"TemperatureSensor","manufacturer":"WLANThermo","model":"Nano v1+ PRO","CurrentTemperature":{"minValue":-20,"maxValue":300,"minStep":0.1}}","payloadType":"json","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":110,"y":80,"wires":[["fcfa8ec3.0244b8"]]},{"id":"16c1dbb9.8b010c","type":"mqtt out","z":"a3d157f9.f597d8","name":"homebridge/to/set","topic":"homebridge/to/set","qos":"","retain":"","broker":"3dc531c.8e7c14e","x":1130,"y":560,"wires":[]},{"id":"996fda59.492be","type":"function","z":"a3d157f9.f597d8","name":"Temperaturen","func":"var msg1 = [];\nfor (var i = 0; i < 8; i++) {\n\tmsg1.push({ payload: msg.payload.channel[i].temp,\n\tui_control:{"unit":"Hallo","min":msg.payload.channel[i].min,"max":msg.payload.channel[i].max} \n\t    \n\t});\n}\nreturn msg1;","outputs":8,"noerr":0,"x":480,"y":660,"wires":[["4fa0f158.22fe","ed016e3b.7e5c48"],["2546fec7.9d2eca"],["76a21174.589408"],["1191e1f2.0fb1ee"],["72306568.653bec"],["9a44d359.1a14b"],["725c73ca.2fb354"],["9a496396.b914f8"]],"outputLabels":["Kanal 1","","","","","","",""]},{"id":"b75876c2.af0ff8","type":"mqtt in","z":"a3d157f9.f597d8","name":"","topic":"WLanThermo/NANO-e1l52/status/data/#","qos":"2","datatype":"json","broker":"3dc531c.8e7c14e","x":180,"y":660,"wires":[["996fda59.492be","84e91d42.22e058"]]},{"id":"2546fec7.9d2eca","type":"function","z":"a3d157f9.f597d8","name":"create json output for homekit sensor 2","func":"msg.topic="homebridge/to/set"\nmsg.payload = \n    {"name":"Kanal2","service":"TemperatureSensor","characteristic":"CurrentTemperature","value":msg.payload}\n;\n\nreturn msg;","outputs":1,"noerr":0,"x":840,"y":560,"wires":[["16c1dbb9.8b010c"]]},{"id":"8ef77ad9.29f55","type":"mqtt out","z":"a3d157f9.f597d8","name":"to homebridge","topic":"","qos":"","retain":"","broker":"3dc531c.8e7c14e","x":280,"y":120,"wires":[]},{"id":"d0933ed8.23eee","type":"inject","z":"a3d157f9.f597d8","name":"create Kanal2","topic":"homebridge/to/add","payload":"{"name":"Kanal2","service":"TemperatureSensor","manufacturer":"WLANThermo","model":"Nano v1+ PRO","CurrentTemperature":{"minValue":-20,"maxValue":300,"minStep":0.1}}","payloadType":"json","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":110,"y":120,"wires":[["8ef77ad9.29f55"]]},{"id":"4fa0f158.22fe","type":"function","z":"a3d157f9.f597d8","name":"create json output for homekit sensor 1","func":"msg.topic="homebridge/to/set"\nmsg.payload = \n    {"name":"Kanal1","service":"TemperatureSensor","characteristic":"CurrentTemperature","value":msg.payload}\n;\n\nreturn msg;","outputs":1,"noerr":0,"x":840,"y":520,"wires":[["8b4805b5.54ca58","bdcbf83e.0dc7f8"]]},{"id":"bdcbf83e.0dc7f8","type":"mqtt out","z":"a3d157f9.f597d8","name":"homebridge/to/set","topic":"homebridge/to/set","qos":"0","retain":"","broker":"3dc531c.8e7c14e","x":1130,"y":520,"wires":[]},{"id":"8b4805b5.54ca58","type":"debug","z":"a3d157f9.f597d8","name":"Temp1","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","x":1110,"y":460,"wires":[]},{"id":"7e795335.6dd6ec","type":"mqtt out","z":"a3d157f9.f597d8","name":"to homebridge","topic":"","qos":"","retain":"","broker":"3dc531c.8e7c14e","x":280,"y":160,"wires":[]},{"id":"af4115bc.15fb68","type":"inject","z":"a3d157f9.f597d8","name":"create Kanal3","topic":"homebridge/to/add","payload":"{"name":"Kanal3","service":"TemperatureSensor","manufacturer":"WLANThermo","model":"Nano v1+ PRO","CurrentTemperature":{"minValue":-20,"maxValue":300,"minStep":0.1}}","payloadType":"json","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":110,"y":160,"wires":[["7e795335.6dd6ec"]]},{"id":"ceaee973.829be","type":"mqtt out","z":"a3d157f9.f597d8","name":"to homebridge","topic":"","qos":"","retain":"","broker":"3dc531c.8e7c14e","x":280,"y":200,"wires":[]},{"id":"919c1e23.5ab15","type":"inject","z":"a3d157f9.f597d8","name":"create Kanal4","topic":"homebridge/to/add","payload":"{"name":"Kanal4","service":"TemperatureSensor","manufacturer":"WLANThermo","model":"Nano v1+ PRO","CurrentTemperature":{"minValue":-20,"maxValue":300,"minStep":0.1}}","payloadType":"json","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":110,"y":200,"wires":[["ceaee973.829be"]]},{"id":"ed016e3b.7e5c48","type":"debug","z":"a3d157f9.f597d8","name":"rTemp1","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","x":680,"y":460,"wires":[]},{"id":"76a21174.589408","type":"function","z":"a3d157f9.f597d8","name":"create json output for homekit sensor 3","func":"msg.topic="homebridge/to/set"\nmsg.payload = \n    {"name":"Kanal3","service":"TemperatureSensor","characteristic":"CurrentTemperature","value":msg.payload}\n;\n\nreturn msg;","outputs":1,"noerr":0,"x":840,"y":600,"wires":[["7c39a61c.9895f"]]},{"id":"1191e1f2.0fb1ee","type":"function","z":"a3d157f9.f597d8","name":"create json output for homekit sensor 4","func":"msg.topic="homebridge/to/set"\nmsg.payload = \n    {"name":"Kanal4","service":"TemperatureSensor","characteristic":"CurrentTemperature","value":msg.payload}\n;\n\nreturn msg;","outputs":1,"noerr":0,"x":840,"y":640,"wires":[["7cc8f254.d1f6e4"]]},{"id":"72306568.653bec","type":"function","z":"a3d157f9.f597d8","name":"create json output for homekit sensor 5","func":"msg.topic="homebridge/to/set"\nmsg.payload = \n    {"name":"Kanal5","service":"TemperatureSensor","characteristic":"CurrentTemperature","value":msg.payload}\n;\n\nreturn msg;","outputs":1,"noerr":0,"x":840,"y":680,"wires":[["ef0f80ff.5844e"]]},{"id":"9a44d359.1a14b","type":"function","z":"a3d157f9.f597d8","name":"create json output for homekit sensor 6","func":"msg.topic="homebridge/to/set"\nmsg.payload = \n    {"name":"Kanal6","service":"TemperatureSensor","characteristic":"CurrentTemperature","value":msg.payload}\n;\n\nreturn msg;","outputs":1,"noerr":0,"x":840,"y":720,"wires":[["661deb4a.234164"]]},{"id":"725c73ca.2fb354","type":"function","z":"a3d157f9.f597d8","name":"create json output for homekit sensor 7","func":"msg.topic="homebridge/to/set"\nmsg.payload = \n    {"name":"Kanal7","service":"TemperatureSensor","characteristic":"CurrentTemperature","value":msg.payload}\n;\n\nreturn msg;","outputs":1,"noerr":0,"x":840,"y":760,"wires":[["c44fcba6.6dd94"]]},{"id":"9a496396.b914f8","type":"function","z":"a3d157f9.f597d8","name":"create json output for homekit sensor 8","func":"msg.topic="homebridge/to/set"\nmsg.payload = \n    {"name":"Kanal8","service":"TemperatureSensor","characteristic":"CurrentTemperature","value":msg.payload}\n;\n\nreturn msg;","outputs":1,"noerr":0,"x":840,"y":800,"wires":[["53b5f9aa.cb0f9"]]},{"id":"7c39a61c.9895f","type":"mqtt out","z":"a3d157f9.f597d8","name":"homebridge/to/set","topic":"homebridge/to/set","qos":"","retain":"","broker":"3dc531c.8e7c14e","x":1130,"y":600,"wires":[]},{"id":"7cc8f254.d1f6e4","type":"mqtt out","z":"a3d157f9.f597d8","name":"homebridge/to/set","topic":"homebridge/to/set","qos":"","retain":"","broker":"3dc531c.8e7c14e","x":1130,"y":640,"wires":[]},{"id":"ef0f80ff.5844e","type":"mqtt out","z":"a3d157f9.f597d8","name":"homebridge/to/set","topic":"homebridge/to/set","qos":"","retain":"","broker":"3dc531c.8e7c14e","x":1130,"y":680,"wires":[]},{"id":"661deb4a.234164","type":"mqtt out","z":"a3d157f9.f597d8","name":"homebridge/to/set","topic":"homebridge/to/set","qos":"","retain":"","broker":"3dc531c.8e7c14e","x":1130,"y":720,"wires":[]},{"id":"c44fcba6.6dd94","type":"mqtt out","z":"a3d157f9.f597d8","name":"homebridge/to/set","topic":"homebridge/to/set","qos":"","retain":"","broker":"3dc531c.8e7c14e","x":1130,"y":760,"wires":[]},{"id":"53b5f9aa.cb0f9","type":"mqtt out","z":"a3d157f9.f597d8","name":"homebridge/to/set","topic":"homebridge/to/set","qos":"","retain":"","broker":"3dc531c.8e7c14e","x":1130,"y":800,"wires":[]},{"id":"76d028e1.ceff58","type":"mqtt out","z":"a3d157f9.f597d8","name":"to homebridge","topic":"","qos":"","retain":"","broker":"3dc531c.8e7c14e","x":280,"y":240,"wires":[]},{"id":"790be1b1.94d25","type":"inject","z":"a3d157f9.f597d8","name":"create Kanal5","topic":"homebridge/to/add","payload":"{"name":"Kanal5","service":"TemperatureSensor","manufacturer":"WLANThermo","model":"Nano v1+ PRO","CurrentTemperature":{"minValue":-20,"maxValue":300,"minStep":0.1}}","payloadType":"json","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":110,"y":240,"wires":[["76d028e1.ceff58"]]},{"id":"3f7284f4.c64094","type":"mqtt out","z":"a3d157f9.f597d8","name":"to homebridge","topic":"","qos":"","retain":"","broker":"3dc531c.8e7c14e","x":280,"y":280,"wires":[]},{"id":"bd988b1c.fe549","type":"inject","z":"a3d157f9.f597d8","name":"create Kanal6","topic":"homebridge/to/add","payload":"{"name":"Kanal6","service":"TemperatureSensor","manufacturer":"WLANThermo","model":"Nano v1+ PRO","CurrentTemperature":{"minValue":-20,"maxValue":300,"minStep":0.1}}","payloadType":"json","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":110,"y":280,"wires":[["3f7284f4.c64094"]]},{"id":"dded070d.ac79c","type":"mqtt out","z":"a3d157f9.f597d8","name":"to homebridge","topic":"","qos":"","retain":"","broker":"3dc531c.8e7c14e","x":280,"y":320,"wires":[]},{"id":"405125c5.c60acc","type":"inject","z":"a3d157f9.f597d8","name":"create Kanal7","topic":"homebridge/to/add","payload":"{"name":"Kanal7","service":"TemperatureSensor","manufacturer":"WLANThermo","model":"Nano v1+ PRO","CurrentTemperature":{"minValue":-20,"maxValue":300,"minStep":0.1}}","payloadType":"json","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":110,"y":320,"wires":[["dded070d.ac79c"]]},{"id":"48263839.2b4ad","type":"mqtt out","z":"a3d157f9.f597d8","name":"to homebridge","topic":"","qos":"","retain":"","broker":"3dc531c.8e7c14e","x":280,"y":360,"wires":[]},{"id":"3220287a.4c8358","type":"inject","z":"a3d157f9.f597d8","name":"create Kanal8","topic":"homebridge/to/add","payload":"{"name":"Kanal8","service":"TemperatureSensor","manufacturer":"WLANThermo","model":"Nano v1+ PRO","CurrentTemperature":{"minValue":-20,"maxValue":300,"minStep":0.1}}","payloadType":"json","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":110,"y":360,"wires":[["48263839.2b4ad"]]},{"id":"75993678.2b4a78","type":"comment","z":"a3d157f9.f597d8","name":"Create thermo channels for Homekit","info":"","x":180,"y":40,"wires":[]},{"id":"84e91d42.22e058","type":"debug","z":"a3d157f9.f597d8","name":"aTemp","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","x":300,"y":560,"wires":[]},{"id":"febe89b.71bc8f8","type":"inject","z":"a3d157f9.f597d8","name":"remove Kanal2","topic":"homebridge/to/remove","payload":"{"name":"Kanal2","service":"TemperatureSensor"}","payloadType":"json","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":560,"y":120,"wires":[["4029f702.a6908"]]},{"id":"4029f702.a6908","type":"mqtt out","z":"a3d157f9.f597d8","name":"to homebridge","topic":"","qos":"","retain":"","broker":"3dc531c.8e7c14e","x":740,"y":120,"wires":[]},{"id":"12c26249.38c1de","type":"mqtt out","z":"a3d157f9.f597d8","name":"to homebridge","topic":"","qos":"","retain":"","broker":"3dc531c.8e7c14e","x":740,"y":80,"wires":[]},{"id":"27b8fc5.bade804","type":"inject","z":"a3d157f9.f597d8","name":"remove Kanal1","topic":"homebridge/to/remove","payload":"{"name":"Kanal1","service":"TemperatureSensor"}","payloadType":"json","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":560,"y":80,"wires":[["12c26249.38c1de"]]},{"id":"5ccfcd08.249b8c","type":"mqtt out","z":"a3d157f9.f597d8","name":"to homebridge","topic":"","qos":"","retain":"","broker":"3dc531c.8e7c14e","x":740,"y":160,"wires":[]},{"id":"3bf0d7d0.a65","type":"inject","z":"a3d157f9.f597d8","name":"remove Kanal3","topic":"homebridge/to/remove","payload":"{"name":"Kanal3","service":"TemperatureSensor"}","payloadType":"json","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":560,"y":160,"wires":[["5ccfcd08.249b8c"]]},{"id":"d542d35b.c55bf","type":"mqtt out","z":"a3d157f9.f597d8","name":"to homebridge","topic":"","qos":"","retain":"","broker":"3dc531c.8e7c14e","x":740,"y":200,"wires":[]},{"id":"8284a291.b15bc","type":"inject","z":"a3d157f9.f597d8","name":"remove Kanal4","topic":"homebridge/to/remove","payload":"{"name":"Kanal4","service":"TemperatureSensor"}","payloadType":"json","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":560,"y":200,"wires":[["d542d35b.c55bf"]]},{"id":"95b06fe0.f7eb1","type":"mqtt out","z":"a3d157f9.f597d8","name":"to homebridge","topic":"","qos":"","retain":"","broker":"3dc531c.8e7c14e","x":740,"y":240,"wires":[]},{"id":"c988e53b.2d9dd8","type":"inject","z":"a3d157f9.f597d8","name":"remove Kanal5","topic":"homebridge/to/remove","payload":"{"name":"Kanal5","service":"TemperatureSensor"}","payloadType":"json","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":560,"y":240,"wires":[["95b06fe0.f7eb1"]]},{"id":"d7c7dace.c50c8","type":"mqtt out","z":"a3d157f9.f597d8","name":"to homebridge","topic":"","qos":"","retain":"","broker":"3dc531c.8e7c14e","x":740,"y":280,"wires":[]},{"id":"705799f3.9ef578","type":"inject","z":"a3d157f9.f597d8","name":"remove Kanal6","topic":"homebridge/to/remove","payload":"{"name":"Kanal6","service":"TemperatureSensor"}","payloadType":"json","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":560,"y":280,"wires":[["d7c7dace.c50c8"]]},{"id":"91ee9ce9.53b9f8","type":"mqtt out","z":"a3d157f9.f597d8","name":"to homebridge","topic":"","qos":"","retain":"","broker":"3dc531c.8e7c14e","x":740,"y":320,"wires":[]},{"id":"29fcff03.d0eac8","type":"inject","z":"a3d157f9.f597d8","name":"remove Kanal7","topic":"homebridge/to/remove","payload":"{"name":"Kanal7","service":"TemperatureSensor"}","payloadType":"json","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":560,"y":320,"wires":[["91ee9ce9.53b9f8"]]},{"id":"2dccc29b.b99746","type":"mqtt out","z":"a3d157f9.f597d8","name":"to homebridge","topic":"","qos":"","retain":"","broker":"3dc531c.8e7c14e","x":740,"y":360,"wires":[]},{"id":"81c0c9b5.12fb2","type":"inject","z":"a3d157f9.f597d8","name":"remove Kanal8","topic":"homebridge/to/remove","payload":"{"name":"Kanal8","service":"TemperatureSensor"}","payloadType":"json","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":560,"y":360,"wires":[["2dccc29b.b99746"]]},{"id":"8851e0b4.e72c","type":"comment","z":"a3d157f9.f597d8","name":"Remove thermo channels for Homekit","info":"","x":610,"y":40,"wires":[]},{"id":"3dc531c.8e7c14e","type":"mqtt-broker","z":"","name":"hoobs","broker":"<IP_ADDRESS>","port":"1883","clientid":"","usetls":false,"compatmode":false,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthRetain":"false","birthPayload":"","closeTopic":"","closeQos":"0","closeRetain":"false","closePayload":"","willTopic":"","willQos":"0","willRetain":"false","willPayload":""}]

Same error:
Error: Parse error on line 25:
...",	"payload": "{"	name ":"	Kanal1 ","
---------------------^
Expecting 'EOF', '}', ':', ',', ']', got 'undefined'

Please, post the flow in compact format surrounded by ```
example:
[{"id":"4f2bf606.d2e848","type":"inject","z":"7c6a9ec3.f1512","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":180,"y":2240,"wires":[["d6655a24.508b78"]]},{"id":"d6655a24.508b78","type":"debug","z":"7c6a9ec3.f1512","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":350,"y":2240,"wires":[]}]

OK, next try 👍
[{"id":"a3d157f9.f597d8","type":"tab","label":"WLANThermo","disabled":false,"info":""},{"id":"fcfa8ec3.0244b8","type":"mqtt out","z":"a3d157f9.f597d8","name":"to homebridge","topic":"","qos":"","retain":"","broker":"3dc531c.8e7c14e","x":280,"y":80,"wires":[]},{"id":"fc3f2370.77be88","type":"inject","z":"a3d157f9.f597d8","name":"create Kanal1","topic":"homebridge/to/add","payload":"{\"name\":\"Kanal1\",\"service\":\"TemperatureSensor\",\"manufacturer\":\"WLANThermo\",\"model\":\"Nano v1+ PRO\",\"CurrentTemperature\":{\"minValue\":-20,\"maxValue\":300,\"minStep\":0.1}}","payloadType":"json","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":110,"y":80,"wires":[["fcfa8ec3.0244b8"]]},{"id":"16c1dbb9.8b010c","type":"mqtt out","z":"a3d157f9.f597d8","name":"homebridge/to/set","topic":"homebridge/to/set","qos":"","retain":"","broker":"3dc531c.8e7c14e","x":1130,"y":560,"wires":[]},{"id":"996fda59.492be","type":"function","z":"a3d157f9.f597d8","name":"Temperaturen","func":"var msg1 = [];\nfor (var i = 0; i < 8; i++) {\n\tmsg1.push({ payload: msg.payload.channel[i].temp,\n\tui_control:{\"unit\":\"Hallo\",\"min\":msg.payload.channel[i].min,\"max\":msg.payload.channel[i].max} \n\t    \n\t});\n}\nreturn msg1;","outputs":8,"noerr":0,"x":480,"y":660,"wires":[["4fa0f158.22fe","ed016e3b.7e5c48"],["2546fec7.9d2eca"],["76a21174.589408"],["1191e1f2.0fb1ee"],["72306568.653bec"],["9a44d359.1a14b"],["725c73ca.2fb354"],["9a496396.b914f8"]],"outputLabels":["Kanal 1","","","","","","",""]},{"id":"b75876c2.af0ff8","type":"mqtt in","z":"a3d157f9.f597d8","name":"","topic":"WLanThermo/NANO-e1l52/status/data/#","qos":"2","datatype":"json","broker":"3dc531c.8e7c14e","x":180,"y":660,"wires":[["996fda59.492be","84e91d42.22e058"]]},{"id":"2546fec7.9d2eca","type":"function","z":"a3d157f9.f597d8","name":"create json output for homekit sensor 2","func":"msg.topic=\"homebridge/to/set\"\nmsg.payload = \n    {\"name\":\"Kanal2\",\"service\":\"TemperatureSensor\",\"characteristic\":\"CurrentTemperature\",\"value\":msg.payload}\n;\n\nreturn msg;","outputs":1,"noerr":0,"x":840,"y":560,"wires":[["16c1dbb9.8b010c"]]},{"id":"8ef77ad9.29f55","type":"mqtt out","z":"a3d157f9.f597d8","name":"to homebridge","topic":"","qos":"","retain":"","broker":"3dc531c.8e7c14e","x":280,"y":120,"wires":[]},{"id":"d0933ed8.23eee","type":"inject","z":"a3d157f9.f597d8","name":"create Kanal2","topic":"homebridge/to/add","payload":"{\"name\":\"Kanal2\",\"service\":\"TemperatureSensor\",\"manufacturer\":\"WLANThermo\",\"model\":\"Nano v1+ PRO\",\"CurrentTemperature\":{\"minValue\":-20,\"maxValue\":300,\"minStep\":0.1}}","payloadType":"json","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":110,"y":120,"wires":[["8ef77ad9.29f55"]]},{"id":"4fa0f158.22fe","type":"function","z":"a3d157f9.f597d8","name":"create json output for homekit sensor 1","func":"msg.topic=\"homebridge/to/set\"\nmsg.payload = \n    {\"name\":\"Kanal1\",\"service\":\"TemperatureSensor\",\"characteristic\":\"CurrentTemperature\",\"value\":msg.payload}\n;\n\nreturn msg;","outputs":1,"noerr":0,"x":840,"y":520,"wires":[["8b4805b5.54ca58","bdcbf83e.0dc7f8"]]},{"id":"bdcbf83e.0dc7f8","type":"mqtt out","z":"a3d157f9.f597d8","name":"homebridge/to/set","topic":"homebridge/to/set","qos":"0","retain":"","broker":"3dc531c.8e7c14e","x":1130,"y":520,"wires":[]},{"id":"8b4805b5.54ca58","type":"debug","z":"a3d157f9.f597d8","name":"Temp1","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","x":1110,"y":460,"wires":[]},{"id":"7e795335.6dd6ec","type":"mqtt out","z":"a3d157f9.f597d8","name":"to homebridge","topic":"","qos":"","retain":"","broker":"3dc531c.8e7c14e","x":280,"y":160,"wires":[]},{"id":"af4115bc.15fb68","type":"inject","z":"a3d157f9.f597d8","name":"create Kanal3","topic":"homebridge/to/add","payload":"{\"name\":\"Kanal3\",\"service\":\"TemperatureSensor\",\"manufacturer\":\"WLANThermo\",\"model\":\"Nano v1+ PRO\",\"CurrentTemperature\":{\"minValue\":-20,\"maxValue\":300,\"minStep\":0.1}}","payloadType":"json","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":110,"y":160,"wires":[["7e795335.6dd6ec"]]},{"id":"ceaee973.829be","type":"mqtt out","z":"a3d157f9.f597d8","name":"to homebridge","topic":"","qos":"","retain":"","broker":"3dc531c.8e7c14e","x":280,"y":200,"wires":[]},{"id":"919c1e23.5ab15","type":"inject","z":"a3d157f9.f597d8","name":"create Kanal4","topic":"homebridge/to/add","payload":"{\"name\":\"Kanal4\",\"service\":\"TemperatureSensor\",\"manufacturer\":\"WLANThermo\",\"model\":\"Nano v1+ PRO\",\"CurrentTemperature\":{\"minValue\":-20,\"maxValue\":300,\"minStep\":0.1}}","payloadType":"json","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":110,"y":200,"wires":[["ceaee973.829be"]]},{"id":"ed016e3b.7e5c48","type":"debug","z":"a3d157f9.f597d8","name":"rTemp1","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","x":680,"y":460,"wires":[]},{"id":"76a21174.589408","type":"function","z":"a3d157f9.f597d8","name":"create json output for homekit sensor 3","func":"msg.topic=\"homebridge/to/set\"\nmsg.payload = \n    {\"name\":\"Kanal3\",\"service\":\"TemperatureSensor\",\"characteristic\":\"CurrentTemperature\",\"value\":msg.payload}\n;\n\nreturn msg;","outputs":1,"noerr":0,"x":840,"y":600,"wires":[["7c39a61c.9895f"]]},{"id":"1191e1f2.0fb1ee","type":"function","z":"a3d157f9.f597d8","name":"create json output for homekit sensor 4","func":"msg.topic=\"homebridge/to/set\"\nmsg.payload = \n    {\"name\":\"Kanal4\",\"service\":\"TemperatureSensor\",\"characteristic\":\"CurrentTemperature\",\"value\":msg.payload}\n;\n\nreturn msg;","outputs":1,"noerr":0,"x":840,"y":640,"wires":[["7cc8f254.d1f6e4"]]},{"id":"72306568.653bec","type":"function","z":"a3d157f9.f597d8","name":"create json output for homekit sensor 5","func":"msg.topic=\"homebridge/to/set\"\nmsg.payload = \n    {\"name\":\"Kanal5\",\"service\":\"TemperatureSensor\",\"characteristic\":\"CurrentTemperature\",\"value\":msg.payload}\n;\n\nreturn msg;","outputs":1,"noerr":0,"x":840,"y":680,"wires":[["ef0f80ff.5844e"]]},{"id":"9a44d359.1a14b","type":"function","z":"a3d157f9.f597d8","name":"create json output for homekit sensor 6","func":"msg.topic=\"homebridge/to/set\"\nmsg.payload = \n    {\"name\":\"Kanal6\",\"service\":\"TemperatureSensor\",\"characteristic\":\"CurrentTemperature\",\"value\":msg.payload}\n;\n\nreturn msg;","outputs":1,"noerr":0,"x":840,"y":720,"wires":[["661deb4a.234164"]]},{"id":"725c73ca.2fb354","type":"function","z":"a3d157f9.f597d8","name":"create json output for homekit sensor 7","func":"msg.topic=\"homebridge/to/set\"\nmsg.payload = \n    {\"name\":\"Kanal7\",\"service\":\"TemperatureSensor\",\"characteristic\":\"CurrentTemperature\",\"value\":msg.payload}\n;\n\nreturn msg;","outputs":1,"noerr":0,"x":840,"y":760,"wires":[["c44fcba6.6dd94"]]},{"id":"9a496396.b914f8","type":"function","z":"a3d157f9.f597d8","name":"create json output for homekit sensor 8","func":"msg.topic=\"homebridge/to/set\"\nmsg.payload = \n    {\"name\":\"Kanal8\",\"service\":\"TemperatureSensor\",\"characteristic\":\"CurrentTemperature\",\"value\":msg.payload}\n;\n\nreturn msg;","outputs":1,"noerr":0,"x":840,"y":800,"wires":[["53b5f9aa.cb0f9"]]},{"id":"7c39a61c.9895f","type":"mqtt out","z":"a3d157f9.f597d8","name":"homebridge/to/set","topic":"homebridge/to/set","qos":"","retain":"","broker":"3dc531c.8e7c14e","x":1130,"y":600,"wires":[]},{"id":"7cc8f254.d1f6e4","type":"mqtt out","z":"a3d157f9.f597d8","name":"homebridge/to/set","topic":"homebridge/to/set","qos":"","retain":"","broker":"3dc531c.8e7c14e","x":1130,"y":640,"wires":[]},{"id":"ef0f80ff.5844e","type":"mqtt out","z":"a3d157f9.f597d8","name":"homebridge/to/set","topic":"homebridge/to/set","qos":"","retain":"","broker":"3dc531c.8e7c14e","x":1130,"y":680,"wires":[]},{"id":"661deb4a.234164","type":"mqtt out","z":"a3d157f9.f597d8","name":"homebridge/to/set","topic":"homebridge/to/set","qos":"","retain":"","broker":"3dc531c.8e7c14e","x":1130,"y":720,"wires":[]},{"id":"c44fcba6.6dd94","type":"mqtt out","z":"a3d157f9.f597d8","name":"homebridge/to/set","topic":"homebridge/to/set","qos":"","retain":"","broker":"3dc531c.8e7c14e","x":1130,"y":760,"wires":[]},{"id":"53b5f9aa.cb0f9","type":"mqtt out","z":"a3d157f9.f597d8","name":"homebridge/to/set","topic":"homebridge/to/set","qos":"","retain":"","broker":"3dc531c.8e7c14e","x":1130,"y":800,"wires":[]},{"id":"76d028e1.ceff58","type":"mqtt out","z":"a3d157f9.f597d8","name":"to homebridge","topic":"","qos":"","retain":"","broker":"3dc531c.8e7c14e","x":280,"y":240,"wires":[]},{"id":"790be1b1.94d25","type":"inject","z":"a3d157f9.f597d8","name":"create Kanal5","topic":"homebridge/to/add","payload":"{\"name\":\"Kanal5\",\"service\":\"TemperatureSensor\",\"manufacturer\":\"WLANThermo\",\"model\":\"Nano v1+ PRO\",\"CurrentTemperature\":{\"minValue\":-20,\"maxValue\":300,\"minStep\":0.1}}","payloadType":"json","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":110,"y":240,"wires":[["76d028e1.ceff58"]]},{"id":"3f7284f4.c64094","type":"mqtt out","z":"a3d157f9.f597d8","name":"to homebridge","topic":"","qos":"","retain":"","broker":"3dc531c.8e7c14e","x":280,"y":280,"wires":[]},{"id":"bd988b1c.fe549","type":"inject","z":"a3d157f9.f597d8","name":"create Kanal6","topic":"homebridge/to/add","payload":"{\"name\":\"Kanal6\",\"service\":\"TemperatureSensor\",\"manufacturer\":\"WLANThermo\",\"model\":\"Nano v1+ PRO\",\"CurrentTemperature\":{\"minValue\":-20,\"maxValue\":300,\"minStep\":0.1}}","payloadType":"json","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":110,"y":280,"wires":[["3f7284f4.c64094"]]},{"id":"dded070d.ac79c","type":"mqtt out","z":"a3d157f9.f597d8","name":"to homebridge","topic":"","qos":"","retain":"","broker":"3dc531c.8e7c14e","x":280,"y":320,"wires":[]},{"id":"405125c5.c60acc","type":"inject","z":"a3d157f9.f597d8","name":"create Kanal7","topic":"homebridge/to/add","payload":"{\"name\":\"Kanal7\",\"service\":\"TemperatureSensor\",\"manufacturer\":\"WLANThermo\",\"model\":\"Nano v1+ PRO\",\"CurrentTemperature\":{\"minValue\":-20,\"maxValue\":300,\"minStep\":0.1}}","payloadType":"json","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":110,"y":320,"wires":[["dded070d.ac79c"]]},{"id":"48263839.2b4ad","type":"mqtt out","z":"a3d157f9.f597d8","name":"to homebridge","topic":"","qos":"","retain":"","broker":"3dc531c.8e7c14e","x":280,"y":360,"wires":[]},{"id":"3220287a.4c8358","type":"inject","z":"a3d157f9.f597d8","name":"create Kanal8","topic":"homebridge/to/add","payload":"{\"name\":\"Kanal8\",\"service\":\"TemperatureSensor\",\"manufacturer\":\"WLANThermo\",\"model\":\"Nano v1+ PRO\",\"CurrentTemperature\":{\"minValue\":-20,\"maxValue\":300,\"minStep\":0.1}}","payloadType":"json","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":110,"y":360,"wires":[["48263839.2b4ad"]]},{"id":"75993678.2b4a78","type":"comment","z":"a3d157f9.f597d8","name":"Create thermo channels for Homekit","info":"","x":180,"y":40,"wires":[]},{"id":"84e91d42.22e058","type":"debug","z":"a3d157f9.f597d8","name":"aTemp","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","x":300,"y":560,"wires":[]},{"id":"febe89b.71bc8f8","type":"inject","z":"a3d157f9.f597d8","name":"remove Kanal2","topic":"homebridge/to/remove","payload":"{\"name\":\"Kanal2\",\"service\":\"TemperatureSensor\"}","payloadType":"json","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":560,"y":120,"wires":[["4029f702.a6908"]]},{"id":"4029f702.a6908","type":"mqtt out","z":"a3d157f9.f597d8","name":"to homebridge","topic":"","qos":"","retain":"","broker":"3dc531c.8e7c14e","x":740,"y":120,"wires":[]},{"id":"12c26249.38c1de","type":"mqtt out","z":"a3d157f9.f597d8","name":"to homebridge","topic":"","qos":"","retain":"","broker":"3dc531c.8e7c14e","x":740,"y":80,"wires":[]},{"id":"27b8fc5.bade804","type":"inject","z":"a3d157f9.f597d8","name":"remove Kanal1","topic":"homebridge/to/remove","payload":"{\"name\":\"Kanal1\",\"service\":\"TemperatureSensor\"}","payloadType":"json","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":560,"y":80,"wires":[["12c26249.38c1de"]]},{"id":"5ccfcd08.249b8c","type":"mqtt out","z":"a3d157f9.f597d8","name":"to homebridge","topic":"","qos":"","retain":"","broker":"3dc531c.8e7c14e","x":740,"y":160,"wires":[]},{"id":"3bf0d7d0.a65","type":"inject","z":"a3d157f9.f597d8","name":"remove Kanal3","topic":"homebridge/to/remove","payload":"{\"name\":\"Kanal3\",\"service\":\"TemperatureSensor\"}","payloadType":"json","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":560,"y":160,"wires":[["5ccfcd08.249b8c"]]},{"id":"d542d35b.c55bf","type":"mqtt out","z":"a3d157f9.f597d8","name":"to homebridge","topic":"","qos":"","retain":"","broker":"3dc531c.8e7c14e","x":740,"y":200,"wires":[]},{"id":"8284a291.b15bc","type":"inject","z":"a3d157f9.f597d8","name":"remove Kanal4","topic":"homebridge/to/remove","payload":"{\"name\":\"Kanal4\",\"service\":\"TemperatureSensor\"}","payloadType":"json","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":560,"y":200,"wires":[["d542d35b.c55bf"]]},{"id":"95b06fe0.f7eb1","type":"mqtt out","z":"a3d157f9.f597d8","name":"to homebridge","topic":"","qos":"","retain":"","broker":"3dc531c.8e7c14e","x":740,"y":240,"wires":[]},{"id":"c988e53b.2d9dd8","type":"inject","z":"a3d157f9.f597d8","name":"remove Kanal5","topic":"homebridge/to/remove","payload":"{\"name\":\"Kanal5\",\"service\":\"TemperatureSensor\"}","payloadType":"json","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":560,"y":240,"wires":[["95b06fe0.f7eb1"]]},{"id":"d7c7dace.c50c8","type":"mqtt out","z":"a3d157f9.f597d8","name":"to homebridge","topic":"","qos":"","retain":"","broker":"3dc531c.8e7c14e","x":740,"y":280,"wires":[]},{"id":"705799f3.9ef578","type":"inject","z":"a3d157f9.f597d8","name":"remove Kanal6","topic":"homebridge/to/remove","payload":"{\"name\":\"Kanal6\",\"service\":\"TemperatureSensor\"}","payloadType":"json","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":560,"y":280,"wires":[["d7c7dace.c50c8"]]},{"id":"91ee9ce9.53b9f8","type":"mqtt out","z":"a3d157f9.f597d8","name":"to homebridge","topic":"","qos":"","retain":"","broker":"3dc531c.8e7c14e","x":740,"y":320,"wires":[]},{"id":"29fcff03.d0eac8","type":"inject","z":"a3d157f9.f597d8","name":"remove Kanal7","topic":"homebridge/to/remove","payload":"{\"name\":\"Kanal7\",\"service\":\"TemperatureSensor\"}","payloadType":"json","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":560,"y":320,"wires":[["91ee9ce9.53b9f8"]]},{"id":"2dccc29b.b99746","type":"mqtt out","z":"a3d157f9.f597d8","name":"to homebridge","topic":"","qos":"","retain":"","broker":"3dc531c.8e7c14e","x":740,"y":360,"wires":[]},{"id":"81c0c9b5.12fb2","type":"inject","z":"a3d157f9.f597d8","name":"remove Kanal8","topic":"homebridge/to/remove","payload":"{\"name\":\"Kanal8\",\"service\":\"TemperatureSensor\"}","payloadType":"json","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":560,"y":360,"wires":[["2dccc29b.b99746"]]},{"id":"8851e0b4.e72c","type":"comment","z":"a3d157f9.f597d8","name":"Remove thermo channels for Homekit","info":"","x":610,"y":40,"wires":[]},{"id":"3dc531c.8e7c14e","type":"mqtt-broker","z":"","name":"hoobs","broker":"<IP_ADDRESS>","port":"1883","clientid":"","usetls":false,"compatmode":false,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthRetain":"false","birthPayload":"","closeTopic":"","closeQos":"0","closeRetain":"false","closePayload":"","willTopic":"","willQos":"0","willRetain":"false","willPayload":""}]


Broken games or graphical issues report

Hey folks! Great work you are doing here :)
To help you a bit with finding games that have issues or are broken, I ran mgba with your BIOS and the official one and compared them. I run it for 9000 frames and then compare the outputs. There are obviously many differences since each BIOS takes a different amount of cycles and causes the game to drift slightly, but those can be ignored. Only cases where the output is obviously wrong (for instance FIFA 2004 or Doom II), or the game seems to hang/crash (for instance ZooCube, where it reboots to BIOS, or Super Street Fighter which seems to hang somewhere) are interesting for debugging.
Here goes the full report: https://davidgfnet-cultgba-mgba-testing-1c75d903.netlify.app/ (48MB!!!)
I could also classify the games on the SWIs they use automatically if you find it can be useful (might be easy to spot a pattern!), or I could even do automated A/B testing of the different SWI calls (by running both BIOSes and using the official one for some SWIs and yours for others).
Hope it is helpful :)

This is pretty awesome!
When I was fixing bugs in other games, a large chunk of the effort was just figuring out what SWIs were broken. So, if you can automate that, it would be incredibly helpful.
Another, thing that could be really useful to automate is if you could generate a summary for each of the SWIs, how many games use that SWI (both working and non working), and how many broken games use that SWI.

Hey there!
So I can generate something like a list of SWIs that a game uses. (I just run it with the official BIOS so that it works well) This won't cover them all, since I do not play the game (just some dummy inputs to get past most start screens but not a lot, see https://www.davidgf.net/2021/08/15/miniretro/  -> there's videos at the bottom if you dont feel like reading and wanna see action). This should be incomplete but already very much useful for many games. Given there's so many games it's probably good enough if you miss a few SWIs here and there.
With this information, we could already have some sort of idea of what the problematic SWI might be, right? However the "perfect" test would be to run both BIOSes, just using yours for one particular SWI number. Comparing results we could know if the SWI causes trouble or not. The only issue is that we need N*M tests (N being game count and M SWI count). Also might need a bit of work to enable some sort of dual-bios mode in mgba or similar emulator.
So, should I start with the low hanging fruit and get you a SWI list per game?

Just having the SWI list per game would be a great first start. If we have that, we could at least prioritize fixing the SWIs that will give us the most game coverage.

The cpuset/fast routines must have some interesting bug (eyeballing I'd say the bits you check are wrong? According to tonc it's bits 24 and 26 that have a meaning), since games that only use those ones fail with your bios.
Here you go a CSV: https://pastebin.com/86Bw3Zjb

Hey. Thanks for your effort here! And sorry for the very late response.
The code should actually use bits 24 and 26 unless there's a bug. The comment about bit0/bit1 is about the function table index that the code builds.

Ah you are indeed right! Missread it!
I guess the only thing that might be missing is clearing out bits to ensure that other non-zero bits break that function. (As the TODO says)
Take a look at the csv, theres a couple of games that use these SWIs only and are broken, which indicates theres something going on there. Perhaps they rely on some weird BIOS behaviour (for example they might assume that r0-r2 values after the call follow some pattern).
Glad to help!

Thanks!
I parsed your data to create a histogram showing what the most important SWIs to get correct are.

SWI #
# of games that use this SWI

11
778

5
551

12
524

6
409

17
394

18
361

1
235

2
162

15
128

8
114

10
106

14
91

19
79

21
78

20
63

7
31

4
21

62
7

61
7

60
7

59
7

58
7

57
7

56
7

55
7

54
7

53
7

52
7

51
7

50
7

49
7

48
7

47
7

46
7

45
7

44
7

43
7

42
7

41
7

40
7

39
7

38
7

37
7

36
7

35
7

34
7

33
7

32
7

31
7

30
7

29
7

28
7

27
7

26
7

22
6

24
4

13
4

23
3

9
3

16
2

I only recorded SWIs in the [0, 64) range, since i used a 64bit bitmap. It is possible that there are more weird 64+ calls, but AFAIK they do ..nothing? so we should not worry. It's surprising that there are games doing that, perhaps they have bugs or it's an emulator bug too.


ModulatedDeformConv is not implemented on CPU on colab

Hi I wanna use modulated_deform_conv on colab.
I use GPU , but I get this error.
I have searched related issues but cannot get the expected help and I can't solve it.
can u please help me?
thank u
RuntimeError: ModulatedDeformConv is not implemented on CPU

Hi @mahsant It means you are using cpu instead of gpu, please check your environment.


fix: minor typo in Russian example

Typo in an example Russian sentence

Thanks for submitting this. Going to close because we've deprecated the docs directory in favor of https://github.com/Unstructured-IO/docs


Using temporal history retention policy approach

In this section:
Note section:
Using the Temporal History Retention Policy approach applies to SQL Database and SQL Server 2017 starting from CTP 1.3.
Will be cleared if modified to:
Using the Temporal History Retention Policy approach applies to Azure SQL Database and SQL Server 2017 starting from CTP 1.3.
I am assuming this feature is not available for 'Azure SQL Managed Instance'.

Document Details
⚠ Do not edit this section. It is required for docs.microsoft.com ➟ GitHub issue linking.

ID: 99bdd334-2a3f-c8bb-fe67-a34f04dbae2b
Version Independent ID: a485f3bf-2be0-8161-4cd8-7a63ac0ac828
Content: Manage historical data in System-Versioned Temporal Tables - SQL Server
Content Source: docs/relational-databases/tables/manage-retention-of-historical-data-in-system-versioned-temporal-tables.md
Product: sql
Technology: table-view-index
GitHub Login: @markingmyname
Microsoft Alias: maghan

@sqlworldwide -- thank you for your suggestion.  I am updating this article.

@markingmyname -- Mark, please review this change in private PR 18898.


How to get a mqtt feeedback?

I want to switch on /off  and the charging current of the Charging Station  via the victron system.
I do not receive a MQTT message.
is this a config problem)
have a nice day.
JM

Thank you for the quick answer.
I used a externel MQTT server.
Now i have switched to the guildin  flashMQ venus server.
But i can still see no on and off , and current commands.
I use the MQTT explorer  for test monitoring.
as i have a Keba charging station i modifiied the path from custom/ev-charger to Keba/ev-charger.

One million thanks
keep alive is the solution.
have a nice day.


Dependency on BMI Sensor

I finally got the Hello World example to compile.
I needed to add the library for CoreS3 and all its dependencies
Then after that add the library for the BMI Sensor 270 - should be marked as a dependency.
Also fixed some typos referring to AtomS3 in the Readme files.
Hmmmm, is this product ready for release!

Thanks for the tip, I have established a connection to the BMI Sensor 270 library.


Jun 22 15:26:02 master kubelet[2178]: 2021-06-22 15:26:02.734 [INFO][27113] dataplane_linux.go 420: Disabling IPv4 forwarding ContainerID

Hi Team,
I am getting the below msg when i am trying to bring up the pod. We are using helm and statefulset.yaml for enabling the ipv4 forwarding sysctl parameter during bring-up.
Jun 24 11:51:00 master kubelet[2178]: 2021-06-24 11:51:00.023 [INFO][9687] dataplane_linux.go 420: Disabling IPv4 forwarding ContainerID="befbe1a21feb8c3f9edc0eb9ff42fb32f11011c59452c508b43e8b1f95591949" Namespace="ricplt" Pod="mec-cuplane-service-0" WorkloadEndpoint="master-k8s-mec--cuplane--service--0-eth0"
Expected Behavior
It is not supposed to come.
Current Behavior
Currently it is showing in my environment. And it is sporadic .
Possible Solution
I am trying to resolve this issue by putting the 10-bridge.conf  file in /etc/cni/net.d/  directory and re-deploy the calico.
And my  environment is single node cluster.
[root@master ~]# kubectl get nodes
NAME     STATUS   ROLES    AGE    VERSION
master   Ready    master   157d   v1.18.6
[root@master ~]#
cat old/10-bridge.conf
{
"cniversion": "0.3.1",
"name": "mynet",
"type": "bridge",
"bridge": "cbr0",
"isDefaultGateway": true,
"ipMasq": true,
"hairpinMode": true,
"ipam": {
"type": "host-local",
"ranges": [
[
{
"subnet": "<IP_ADDRESS>/24",
"gateway": "<IP_ADDRESS>"
}
]
]
}
}
Can you please help me to understand why i am seeing this behavior.
Your Environment

Calico version :-  docker.io/calico/cni:v3.17.1
Orchestrator version (kubernetes):  K8 version 1.18 and docker version :-20.10.2
Operating System and version:   Cent-OS 7.9

Hi @nks33 , I think that the reason that you are hitting the error for disabling IP forwarding on the container interface is that you have not set the allow_ip_forwarding field in the container settings of the CNI config (see https://docs.projectcalico.org/reference/cni-plugin/configuration). That being said, I'm not exactly sure if that is your issue or if there are other issues you are trying to solve. It should make the error message go away, but I don't think it should affect the network connectivity to your pod and I would expect that to work regardless of the error message appearing. Is there something else that you are trying to solve by getting rid of this error message?

Hi mgleung,
Thanks for your reply i will try this.
Basically our use case is we need the sysctl ipv4 forwarding enable in the container.
net.ipv4.conf.all.forwarding = 1
But due to some config issue it is showing disable in the container. Then after checking the journalctl log i found the above error msg related to ipv4 disable.
I checked the calico code and it seems it is disabling it by writing the below file.
_d.logger.Info("Disabling IPv4 forwarding")
if err := writeProcSys("/proc/sys/net/ipv4/ip_forward", "0"); err != nil {
return err
}
}
I hope the above snippet of code is applying to the container which basically disabling it.
Can you please comment is my understanding is correct.

Hi @nks33 , I think that the reason that you are hitting the error for disabling IP forwarding on the container interface is that you have not set the allow_ip_forwarding field in the container settings of the CNI config (see https://docs.projectcalico.org/reference/cni-plugin/configuration). That being said, I'm not exactly sure if that is your issue or if there are other issues you are trying to solve. It should make the error message go away, but I don't think it should affect the network connectivity to your pod and I would expect that to work regardless of the error message appearing. Is there something else that you are trying to solve by getting rid of this error message?

Hi @nks33 ,

Basically our use case is we need the sysctl ipv4 forwarding enable in the container.
net.ipv4.conf.all.forwarding = 1

I am not sure on all the sysctl settings but I think that we're referring to the same setting (my google search turned up net.ipv6.conf.all.forwarding and net.ipv4.ip_forward but there's possibly a net.ipv4.conf.all.forwarding as well I didn't find). The code snippit you also found is what I would expect the allow_ip_forwarding field in the CNI config to disable. If you set allow_ip_forwarding does it still not work?

Hi @nks33 ,

Basically our use case is we need the sysctl ipv4 forwarding enable in the container.
net.ipv4.conf.all.forwarding = 1

I am not sure on all the sysctl settings but I think that we're referring to the same setting (my google search turned up net.ipv6.conf.all.forwarding and net.ipv4.ip_forward but there's possibly a net.ipv4.conf.all.forwarding as well I didn't find). I think that net.ipv4.ip_forward should be the same setting.

I checked the calico code and it seems it is disabling it by writing the below file inside the container.
_d.logger.Info("Disabling IPv4 forwarding")
if err := writeProcSys("/proc/sys/net/ipv4/ip_forward", "0"); err != nil {
return err
}
}
I hope the above snippet of code is applying to the container which basically disabling it.

Your understanding is correct and that should be the code that we use to disable IP forwarding by unsetting the sysctl setting. The code snippit you found is also what I would expect the allow_ip_forwarding field in the CNI config to disable. If you set allow_ip_forwarding does it still not work?

Hi @mgleung
After setting the allow_ip_forwarding this issue is resolved .
But i am seeing there is a dependency with the below file.
/etc/cni/net.d/10-bridge.conf
Content of bridge file can be seen in the above comment.
If this file is present in the host i don't need to set the above parameter.  i  am not able to understand this relation with ipv4 configuration. Can you please let me know the dependency.

/etc/cni/net.d/10-bridge.conf

You are likely using a non-Calico CNI plugin (the bridge plugin) when that file exists.


webpack4 watch is slower than 3

config and src is all same
in version3 each watch cost 50ms
but in version4 is cost 400ms+
why?
module.exports={
    entry: "./src/index.js",
    output: {
        path: path.resolve(__dirname, "dist"),
        filename: "brower.js",
        library: "Test",
    },
    node: {
        __filename: false,
        __dirname: false,
    },
    module: {
        rules: [
            {
                test: /\.js$/,
                loader: "babel-loader",
                exclude: /node_modules/,
                options: {
                    presets: [
                        "es2015",
                        "es2016",
                        "es2017",
                        "react",
                        "stage-0",
                        "stage-1",
                        "stage-2",
                        "stage-3",
                    ],
                    plugins: [
                        "static-fs",
                        "version-inline",
                        "transform-decorators",
                        "transform-runtime",
                        "transform-new-target",
                    ],
                },
            },
        ],
    },
    resolve: {
        alias: {
            "": path.resolve(__dirname, "src"),
            "*/../../ES6/src": path.resolve(__dirname, "src"),
        },
        modules: [
            path.resolve(__dirname, "src"),
            "node_modules",
        ],
        extensions: [".js"],
    },
    devtool: "source-map",
    context: __dirname,
    target: "web",
    // profile: false,
    // bail: false,
    cache: true,
    // watch: true,
    watchOptions: {
        aggregateTimeout: 1000,
        ignored: /node_modules/,
    },
};

{
    "babel": {
        "presets": [
            "es2015",
            "es2016",
            "es2017",
            "react",
            "stage-0",
            "stage-1",
            "stage-2",
            "stage-3"
        ]
    },
    "scripts": {
        "build": "gulp run-build",
        "watch": "gulp run-watch"
    },
    "files": [
        "package.json"
    ],
    "dependencies": {},
    "devDependencies": {
        "babel-loader": "7.1.1",
        "babel-cli": "7.0.0-alpha.9",
        "babel-plugin-static-fs": "1.1.0",
        "babel-plugin-version-inline": "1.0.0",
        "babel-preset-es2015": "7.0.0-alpha.9",
        "babel-preset-es2016": "7.0.0-alpha.9",
        "babel-preset-es2017": "7.0.0-alpha.9",
        "babel-preset-react": "7.0.0-alpha.9",
        "babel-preset-stage-0": "7.0.0-alpha.9",
        "babel-preset-stage-1": "7.0.0-alpha.9",
        "babel-preset-stage-2": "7.0.0-alpha.9",
        "babel-preset-stage-3": "7.0.0-alpha.9",
        "babel-plugin-transform-runtime": "7.0.0-alpha.9",
        "babel-plugin-transform-new-target": "7.0.0-alpha.20",
        "chalk": "2.1.0",
        "gulp": "^3.9.1",
        "webpack": "4.6.0",
        "webpack-node-externals": "1.6.0"
    }
}

gulp.task("webpack-watch", [], () => {
    config.watch=true;
    ...

@acklj1 please provide you version of nodejs and webpack

win7
nodejs version  9.2.0
webpack4  4.6.0  400ms+
webpack3  3.5.2  50ms

@acklj1 can you update nodejs to latest stable version, some version have perf regression

thanks. Let me try

nodejs update to 9.11.1
other code
webpack 3.5.2 watch

@acklj1 Very weird, can you create minimum reproducible test repo?

please wait
I test minimum code, if also have this problem, wait for me to upload the files.

webpack 3.5.2

webpack 4.6.0

upload.zip
this is the code

Thank you~

You are comparing a dev build (webpack 3) and a production build (webpack 4 defaults mode to production). Add mode: "development" or "none".

Thank you~


unexpected undefine after I set the value

const Keyv = require('keyv');
const path = require('path')

const keyv = new Keyv(`sqlite://${path.join(__dirname, 'database.sqlite')}`);

async function main() {
  let v = await keyv.get('foo')

  console.log(v)

  await keyv.set('foo', 'bar', 1000)

  v = await keyv.get('foo')

  console.log(v)
}

main()

When await keyv.set('foo', 'bar', 1000) this line is executed, the get result should always return a value but it is not.
You can debug the bug by running the script every second.

@alsotang - will be looking into this over the next couple days to validate.

@alsotang - can you verify this with the latest update as with sqlite this seems to be working correctly.

It's still broken after I cleared node_modules and reinstalled keyv


When writing a certificate with multiple ExtendedKeyUsage purposes to a PKCS12 keystore, other security providers may fail to load it

The issue can be reproduced as follows with BC 1.79 - I used the jdk18on jars:

Configure BouncyCastle security provider as the primary security provider
Generate an X.509 Certificate that contains an ExtendedKeyUsage extension with at least two purposes
Write the X.509 Certificate object to a PKCS12 keystore
Read the X.509 Certificate object from the PKCS12 keystore
Write the X.509 Certificate object to a second PKCS12 keystore
Remove BouncyCastle security provider, so that the default JRE security provider is the primary security provider again
Read the certificate from the PKCS12 keystore into a new java.security.cert.Certificate object

Step 7 results in the following exception:

java.io.IOException: keystore password was incorrect
at java.base/sun.security.pkcs12.PKCS12KeyStore.engineLoad(PKCS12KeyStore.java:2159)
at java.base/sun.security.util.KeyStoreDelegator.engineLoad(KeyStoreDelegator.java:221)
at java.base/java.security.KeyStore.load(KeyStore.java:1473)
Caused by: java.security.UnrecoverableKeyException: failed to decrypt safe contents entry: java.io.IOException: DerValue.getOID, not an OID 49

The same error occurs if instead of step 6 and step 7 you try to open the second keystore with the JRE keytool utility.
Note that the write-read-write sequence appears to be necessary to reproduce it. The first keystore can be opened just fine. The second keystore can also still be opened, but only if the BouncyCastle security provider is still configured.
Here's an SSCCE in the form of a test that reproduces the issue:
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.math.BigInteger;
import java.nio.file.Files;
import java.nio.file.Path;
import java.security.GeneralSecurityException;
import java.security.KeyPairGenerator;
import java.security.KeyStore;
import java.security.SecureRandom;
import java.security.Security;
import java.security.cert.Certificate;
import java.security.cert.X509Certificate;
import java.time.Instant;
import java.time.Period;
import java.util.Date;

import org.bouncycastle.asn1.x500.X500Name;
import org.bouncycastle.asn1.x509.ExtendedKeyUsage;
import org.bouncycastle.asn1.x509.Extension;
import org.bouncycastle.asn1.x509.KeyPurposeId;
import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo;
import org.bouncycastle.cert.X509v3CertificateBuilder;
import org.bouncycastle.cert.jcajce.JcaX509CertificateConverter;
import org.bouncycastle.crypto.util.PrivateKeyFactory;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.bouncycastle.operator.DefaultDigestAlgorithmIdentifierFinder;
import org.bouncycastle.operator.DefaultSignatureAlgorithmIdentifierFinder;
import org.bouncycastle.operator.OperatorCreationException;
import org.bouncycastle.operator.bc.BcRSAContentSignerBuilder;
import org.junit.jupiter.api.Test;

public class ExtendedKeyUsageTest {

    @Test
    public void create_write_read_write_and_then_read_without_bc() throws GeneralSecurityException, IOException, OperatorCreationException {
        Path tempDir = Files.createTempDirectory("bctest");
        Security.insertProviderAt(new BouncyCastleProvider(), 1);

        String keystoreType = "PKCS12";
        String certificateAlias = "myAlias";
        String keystorePassword = "myPassword";

        // generate certificate
        Certificate originalCertificate = new X509CertificateFactory().create();

        // store original certificate to a truststore
        Path pathToFirstTrustStore = tempDir.resolve("first-trust-store.p12");
        {
            Files.deleteIfExists(pathToFirstTrustStore);
            KeyStore firstTrustStore = KeyStore.getInstance(keystoreType);
            firstTrustStore.load(null, new char[0]);
            firstTrustStore.setCertificateEntry(certificateAlias, originalCertificate);
            try (OutputStream outputStream = Files.newOutputStream(pathToFirstTrustStore)) {
                firstTrustStore.store(outputStream, keystorePassword.toCharArray());
            }
        }

        // read certificate from the truststore
        KeyStore firstTrustStoreReadAgain = KeyStore.getInstance(keystoreType);
        try (InputStream inputStream = Files.newInputStream(pathToFirstTrustStore)) {
            firstTrustStoreReadAgain.load(inputStream, keystorePassword.toCharArray());
        }
        Certificate certificateReadFromFirstTrustStore = firstTrustStoreReadAgain.getCertificate(certificateAlias);

        // store read certificate to a different truststore
        Path pathToSecondTrustStore = tempDir.resolve("second-trust-store.p12");
        {
            Files.deleteIfExists(pathToSecondTrustStore);
            KeyStore secondTrustStore = KeyStore.getInstance(keystoreType);
            secondTrustStore.load(null, new char[0]);
            secondTrustStore.setCertificateEntry(certificateAlias, certificateReadFromFirstTrustStore);
            try (OutputStream outputStream = Files.newOutputStream(pathToSecondTrustStore)) {
                secondTrustStore.store(outputStream, keystorePassword.toCharArray());
            }
        }

        // read certificate from different truststore without BC
        Security.removeProvider(BouncyCastleProvider.PROVIDER_NAME);
        KeyStore secondTrustStoreReadWithoutBc = KeyStore.getInstance(keystoreType);
        try (InputStream inputStream = Files.newInputStream(pathToSecondTrustStore)) {
            // The following will fail with an exception that has the following root cause: java.io.IOException: DerValue.getOID, not an OID 49
            secondTrustStoreReadWithoutBc.load(inputStream, keystorePassword.toCharArray());
        }
    }

    private static class X509CertificateFactory {

        X509Certificate create() throws GeneralSecurityException, IOException, OperatorCreationException {
            var keyPairGenerator = KeyPairGenerator.getInstance("RSA", BouncyCastleProvider.PROVIDER_NAME);
            keyPairGenerator.initialize(1024, new SecureRandom());
            var keyPair = keyPairGenerator.generateKeyPair();

            var certificateBuilder = new X509v3CertificateBuilder(new X500Name("CN=localhost"),
                                                                  BigInteger.valueOf(new SecureRandom().nextLong()).abs(),
                                                                  Date.from(Instant.now()),
                                                                  Date.from(Instant.now().plus(Period.ofDays(1000))),
                                                                  new X500Name("CN=localhost"),
                                                                  SubjectPublicKeyInfo.getInstance(keyPair.getPublic().getEncoded()));

            certificateBuilder.addExtension(Extension.extendedKeyUsage, false,
                                            new ExtendedKeyUsage(new KeyPurposeId[]{
                                                    KeyPurposeId.id_kp_serverAuth,
                                                    KeyPurposeId.id_kp_clientAuth
                                            }));

            var sigAlgId = new DefaultSignatureAlgorithmIdentifierFinder().find("SHA512WITHRSA");
            var digAlgId = new DefaultDigestAlgorithmIdentifierFinder().find(sigAlgId);
            var certificateHolder = certificateBuilder.build(
                    new BcRSAContentSignerBuilder(sigAlgId, digAlgId)
                            .build(PrivateKeyFactory.createKey(keyPair.getPrivate().getEncoded())));

            return new JcaX509CertificateConverter()
                    .setProvider(BouncyCastleProvider.PROVIDER_NAME)
                    .getCertificate(certificateHolder);
        }

    }

}

Curiously enough, if you serialize and deserialize the Certificate object before writing it to the second store, then the issue does not occur.
It also doesn't occur if you specify just one key purpose in the ExtendedKeyUsage extension rather than two.
I don't know if we're doing something wrong here or there is an issue in the code. Hopefully, someone can shed some light on this peculiarity.

Thanks for the report. All I'll say is "That was not fun..." So the issue turned out to be something about the oracle trusted certificate attribute for PKCS12, it appears that if it gets duplicated and if the extended key usage the attribute contains has more than one entry in it the JVM parser falls over when it tries to reload the key store. I've fixed our implementation so that the attribute can no longer be repeated, this shouldn't cause any issues as the attribute is meant to be set to what's in the ExtendedKeyUsage extension, or to KeyPurposeId.any if there isn't one.
You should find the latest on https://downloads.bouncycastle.org/betas fixes the problem. Let me know how it goes.


Fix typo

Thanks for submitting a PR! Please check the boxes below:

[ ] I have run pre-commit or manually with
npx pretty-quick to check linting (omitting this because I'm PR'ing from the web UI and this is trivial)
[x] I have filled in the "Changes" section below?

Changes
Fix typo

@strugee can you run prettier on this please and we can get it merged.

Thanks for the fixup 🥳


[SPARK-37004][PYTHON] Upgrade to Py4J <IP_ADDRESS>

What changes were proposed in this pull request?
This PR upgrades Py4J from <IP_ADDRESS> to <IP_ADDRESS> which contains the bug fix (https://github.com/bartdag/py4j/pull/440) that directly affected us.
For example, once you cancel a cell in Jupyter, all following cells simply fail. This PR fixes the bug by upgrading Py4J.
Why are the changes needed?
To fix a regression in Spark 3.2.0 in notebooks like Jupyter.
Does this PR introduce any user-facing change?
Fixes a regression described in SPARK-37004
How was this patch tested?
Manually tested the fix when I land https://github.com/bartdag/py4j/pull/440 to Py4J.

Test build #145938 has started for PR 34814 at commit 15bca82.

This has to be backported to branch-3.2.
cc @huaxingao, @dongjoon-hyun, @mengxr, @joshRosen FYI

Kubernetes integration test starting
URL: https://amplab.cs.berkeley.edu/jenkins/job/SparkPullRequestBuilder-K8s/50414/

Kubernetes integration test status failure
URL: https://amplab.cs.berkeley.edu/jenkins/job/SparkPullRequestBuilder-K8s/50414/

Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder-K8s/50414/

Test build #145938 has finished for PR 34814 at commit 15bca82.

This patch passes all tests.
This patch merges cleanly.
This patch adds no public classes.

Thanks guys.
Merged to master and branch-3.2.

Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder/145938/