You are given a binary tree where each node is a dictionary with keys `val`, `left`, `right`. The `val` key holds an integer, and `left` and `right` are either `None` or another dictionary of the same shape. Implement the function `path_sum_all(root, target_sum)` that returns a list of all root-to-leaf paths (each path as a list of node values) such that the sum of the values along the path equals `target_sum`. A leaf is a node whose `left` and `right` are both `None`. If there are no valid paths, return an empty list. The order of paths in the result does not matter. For an empty tree (root is `None`), return an empty list. The trees are represented as nested dictionaries, not custom objects.
Constraints
The number of nodes is between 0 and 2000. Node values and target_sum are integers in the range [-1000, 1000]. The depth of the tree can be up to 1000. The solution should run in O(N) time and O(N) space, where N is the number of nodes.