What chooses the last 3 hops in a .onion connection?

What chooses the last 3 hops, my Tor client or the Onion service’s Tor client?

Does the local Tor clients handle which hops are choose for 4, 5, and 6 based on its configuration (torrc)?
Or is the last 3 hops in the connection to a Onion site or service chosen by the Onion site/services (torrc) configuration?

  +-----------+
  |  Client   |
  +-----------+
        |
        |  Hop 1
        |
  +-----------+
  | Entry Node|  (Guard Node)
  +-----------+
        |
        |  Hop 2
        |
  +-----------+
  |Middle Node 1|
  +-----------+
        |
        |  Hop 3
        |
  +-----------+
  |Middle Node 2|
  +-----------+
        |
        |       **<--  Hop 4**
        |
  +-----------+
  |Onion Service|  
  +-----------+
        |
        |       **<--  Hop 5**
        |
  +-----------+
  |Middle Node 2|  
  +-----------+
        |
        |       **<--  Hop 6**
        |
  +-----------+
  |Middle Node 1|
  +-----------+
        |
        |  Return to Entry Node
        |
  +-----------+
  |  Entry Node|
  +-----------+
        |
        |  Return to Client
        |
  +-----------+
  |  Client   |
  +-----------+

Summary of Hops:

  1. Hop 1: Client to Entry Node
  2. Hop 2: Entry Node to Middle Node 1
  3. Hop 3: Middle Node 1 to Middle Node 2
  4. Hop 4: Middle Node 2 to Onion Service
  5. Hop 5: Onion Service to Middle Node 2
  6. Hop 6: Middle Node 2 to Middle Node 1

When I apply strict settings in my Tor clients configuration for example:

ExitNodes {us}
StrictNodes 1

It will only generates circuits to sites with USA exit nodes.
However when I visit a onion site and look at the connections it appears to ignore this configuration?

The hidden service chooses the last hops. Better to think about it is “let’s meet in the middle”.
See Act 9: Tor Project | How do Onion Services work?

Because the traffic never leaves the network the setting ExitNodes can be ignored.

What is preventing Onion services from configuring there torrc to only connect through other nodes they control?

Is there anything in place that prevents onion services from doing this?