- /**
 
-  * Create ObjectManager
 
-  *
 
-  * @param array $arguments
 
-  * @return \Magento\Framework\ObjectManagerInterface
 
-  *
 
-  * @SuppressWarnings(PHPMD.NPathComplexity)
 
-  */
 
- public function create(array $arguments)
 
- {
 
-     $writeFactory = new \Magento\Framework\Filesystem\Directory\WriteFactory($this->driverPool);
 
-     $generatedFiles = new GeneratedFiles($this->directoryList, $writeFactory);
 
-     $generatedFiles->cleanGeneratedFiles();
 
- 
 
-     $deploymentConfig = $this->createDeploymentConfig($this->directoryList, $this->configFilePool, $arguments);
 
-     $arguments = array_merge($deploymentConfig->get(), $arguments);
 
-     $definitionFactory = new \Magento\Framework\ObjectManager\DefinitionFactory(
 
-         $this->driverPool->getDriver(DriverPool::FILE),
 
-         $this->directoryList->getPath(DirectoryList::DI),
 
-         $this->directoryList->getPath(DirectoryList::GENERATION),
 
-         $deploymentConfig->get(self::CONFIG_PATH_DEFINITION_FORMAT, Serialized::MODE_NAME)
 
-     );
 
- 
 
-     $definitions = $definitionFactory->createClassDefinition($deploymentConfig->get('definitions'));
 
-     $relations = $definitionFactory->createRelations();
 
- 
 
-     /** @var EnvironmentFactory $envFactory */
 
-     $envFactory = new $this->envFactoryClassName($relations, $definitions);
 
-     /** @var EnvironmentInterface $env */
 
-     $env =  $envFactory->createEnvironment();
 
- 
 
-     /** @var ConfigInterface $diConfig */
 
-     $diConfig = $env->getDiConfig();
 
- 
 
-     $appMode = isset($arguments[State::PARAM_MODE]) ? $arguments[State::PARAM_MODE] : State::MODE_DEFAULT;
 
-     $booleanUtils = new \Magento\Framework\Stdlib\BooleanUtils();
 
-     $argInterpreter = $this->createArgumentInterpreter($booleanUtils);
 
-     $argumentMapper = new \Magento\Framework\ObjectManager\Config\Mapper\Dom($argInterpreter);
 
- 
 
-     if ($env->getMode() != Environment\Compiled::MODE) {
 
-         $configData = $this->_loadPrimaryConfig($this->directoryList, $this->driverPool, $argumentMapper, $appMode);
 
-         if ($configData) {
 
-             $diConfig->extend($configData);
 
-         }
 
-     }
 
- 
 
-     // set cache profiler decorator if enabled
 
-     if (\Magento\Framework\Profiler::isEnabled()) {
 
-         $cacheFactoryArguments = $diConfig->getArguments('Magento\Framework\App\Cache\Frontend\Factory');
 
-         $cacheFactoryArguments['decorators'][] = [
 
-             'class' => 'Magento\Framework\Cache\Frontend\Decorator\Profiler',
 
-             'parameters' => ['backendPrefixes' => ['Zend_Cache_Backend_', 'Cm_Cache_Backend_']],
 
-         ];
 
-         $cacheFactoryConfig = [
 
-             'Magento\Framework\App\Cache\Frontend\Factory' => ['arguments' => $cacheFactoryArguments]
 
-         ];
 
-         $diConfig->extend($cacheFactoryConfig);
 
-     }
 
- 
 
-     $sharedInstances = [
 
-         'Magento\Framework\App\DeploymentConfig' => $deploymentConfig,
 
-         'Magento\Framework\App\Filesystem\DirectoryList' => $this->directoryList,
 
-         'Magento\Framework\Filesystem\DirectoryList' => $this->directoryList,
 
-         'Magento\Framework\Filesystem\DriverPool' => $this->driverPool,
 
-         'Magento\Framework\ObjectManager\RelationsInterface' => $relations,
 
-         'Magento\Framework\Interception\DefinitionInterface' => $definitionFactory->createPluginDefinition(),
 
-         'Magento\Framework\ObjectManager\ConfigInterface' => $diConfig,
 
-         'Magento\Framework\Interception\ObjectManager\ConfigInterface' => $diConfig,
 
-         'Magento\Framework\ObjectManager\DefinitionInterface' => $definitions,
 
-         'Magento\Framework\Stdlib\BooleanUtils' => $booleanUtils,
 
-         'Magento\Framework\ObjectManager\Config\Mapper\Dom' => $argumentMapper,
 
-         'Magento\Framework\ObjectManager\ConfigLoaderInterface' => $env->getObjectManagerConfigLoader(),
 
-         $this->_configClassName => $diConfig,
 
-     ];
 
-     $arguments['shared_instances'] = &$sharedInstances;
 
-     $this->factory = $env->getObjectManagerFactory($arguments);
 
- 
 
-     /** @var \Magento\Framework\ObjectManagerInterface $objectManager */
 
-     $objectManager = new $this->_locatorClassName($this->factory, $diConfig, $sharedInstances);
 
- 
 
-     $this->factory->setObjectManager($objectManager);
 
-     ObjectManager::setInstance($objectManager);