code: func kubeletConfigFlagPrecedence(kc *kubeletconfiginternal.KubeletConfiguration, args []string) error {
  	// We use a throwaway kubeletFlags and a fake global flagset to avoid double-parses,
  	// as some Set implementations accumulate values from multiple flag invocations.
  	fs := newFakeFlagSet(newFlagSetWithGlobals())
  	// register throwaway KubeletFlags
  	options.NewKubeletFlags().AddFlags(fs)
  	// register new KubeletConfiguration
  	options.AddKubeletConfigFlags(fs, kc)
  	// Remember original feature gates, so we can merge with flag gates later
  	original := kc.FeatureGates
  	// re-parse flags
  	if err := fs.Parse(args); err != nil {
  		return err
  	}
  	// Add back feature gates that were set in the original kc, but not in flags
  	for k, v := range original {
  		if _, ok := kc.FeatureGates[k]; !ok {
  			kc.FeatureGates[k] = v
  		}
  	}
  	return nil
  }
docs: // kubeletConfigFlagPrecedence re-parses flags over the KubeletConfiguration object.
  // We must enforce flag precedence by re-parsing the command line into the new object.
  // This is necessary to preserve backwards-compatibility across binary upgrades.
  // See issue #56171 for more details.