Create a new interactive report in Solutions/sharedTasks with the name "Shared Tasks Graphs AI". The interactive report should have the same options as Solutions/sharedTasks/sharedTasksGraph.upy and generate the same data. The nodes created should be reported in a table with the node name, node kind, and a column for annotations. The edges should be listed in a seperate table with columns for the source node name, destination node name, edge kind, and annotations.

Move the checkIsFunctionPointer method into sharedTasks.py so it isn't duplicated in sharedTAsksGraph.upy and sharedTAsksGraphAI.upy

Don't include the tasks fields in the node names. Include the tasks fields as part of the node kind. For the node annotations column, use ent.annotations() to get a list of annotations and display annotations that begin with "#SharedTaskNode" without including the text "#SharedTaskNode"

For edges, include whether the edge is interrupt disabled or filtered in the edge kind. For edge annotations, filter the source entity's annotations to ones that being with "#SharedTaskEdgeTo uniquename" where uniquename is the uniquename of the destination entity for that edge.

Include whether the node was a function pointer and whether the node was a shared global object in the node kind column. Add instructions between the Nodes heading and table describing how to make an annotation for a node. Add instructions between the edges heading and table desribing how to make an annotation for an edge. Update the description of the interative report to match what the report is.

The report.print() function accepts plain text, not html. Remove the html formatting. Formatting can be done with report.bold(), report.italic() and so on.